Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/MGBlendTable.cs
2026-02-21 16:45:37 +08:00

142 lines
2.6 KiB
C#

using UnityEngine;
public class MGBlendTable
{
private int mTableSzX;
private int mTableSzY;
private int mnToBlend;
private int mTableSzXY;
private int mTotalSz;
private float[] mpTable;
private Random mRandom;
public MGBlendTable(int tableX, int tableY, int nToBlend, float ditherAmt, bool normalizeTable)
{
mTableSzX = ((tableX <= 0) ? 1 : tableX);
mTableSzY = ((tableY <= 0) ? 1 : tableY);
mTableSzXY = mTableSzX * mTableSzY;
mnToBlend = nToBlend;
mTotalSz = mTableSzXY * mnToBlend;
mpTable = new float[mTotalSz];
float num = 1f / ((mnToBlend != 0) ? ((float)mnToBlend) : 1f);
float num2 = num * ditherAmt;
for (int i = 0; i < mTotalSz; i++)
{
float num3 = num2 * (RandomNoise() - 0.5f);
float value = num + num3;
mpTable[i] = Mathf.Clamp01(value);
}
if (!normalizeTable)
{
return;
}
for (int j = 0; j < mTableSzY; j++)
{
for (int k = 0; k < mTableSzX; k++)
{
int num4 = PixelIndex(k, j);
float num5 = 0f;
for (int l = 0; l < mnToBlend; l++)
{
int num6 = LayerIndex(l) + num4;
num5 += mpTable[num6];
}
float num7 = 1f / ((num5 != 0f) ? num5 : 1f);
for (int m = 0; m < mnToBlend; m++)
{
int num8 = LayerIndex(m) + num4;
mpTable[num8] *= num7;
}
}
}
}
private int LayerIndex(int nImage)
{
return nImage * mTableSzXY;
}
private int PixelIndex(int x, int y)
{
return y * mTableSzX + x;
}
private int RowIndex(int y)
{
return y * mTableSzX;
}
private int TileX(int x)
{
return x % mTableSzX;
}
private int TileY(int y)
{
return y % mTableSzY;
}
private int Index(int nImage, int x, int y)
{
int x2 = TileX(x);
int y2 = TileY(y);
return LayerIndex(nImage) + PixelIndex(x2, y2);
}
private float[] GetTable()
{
return mpTable;
}
private float GetWeight(int nImage, int x, int y)
{
int num = Index(nImage, x, y);
return mpTable[num];
}
private void SetWeight(int nImage, int x, int y, float w)
{
int num = Index(nImage, x, y);
mpTable[num] = w;
}
private void GetTileSz(out int xSz, out int ySz)
{
xSz = mTableSzX;
ySz = mTableSzY;
}
private float dummyNoise()
{
return 0.5f;
}
private float RandomNoise()
{
return Random.value;
}
public void BlendImages(Color[,] pDstBM, Color[,] pSrcBM, int width, int height, int nImage)
{
int num = LayerIndex(nImage);
for (int i = 0; i < height; i++)
{
int num2 = RowIndex(TileY(i)) + num;
for (int j = 0; j < width; j++)
{
float num3 = mpTable[num2 + TileX(j)];
pDstBM[j, i] += pSrcBM[j, i] * num3;
Mathf.Clamp01(pDstBM[j, i].r);
Mathf.Clamp01(pDstBM[j, i].g);
Mathf.Clamp01(pDstBM[j, i].b);
}
}
}
}