public override void update() { for (uint i = field.Size.X - 2; i > 1; i--) { for (uint j = field.Size.Y - 2; j > 1; j--) { //Console.WriteLine(field.GetPixel(i, j)); if (field.GetPixel(i, j) == sand) { if (field.GetPixel(i, j + 1) == Color.Transparent) { Pixy.MovePixel(i, j, down, field); } else if (field.GetPixel(i - 1, j + 1) == Color.Transparent) { Pixy.MovePixel(i, j, downL, field); } else if (field.GetPixel(i + 1, j + 1) == Color.Transparent) { Pixy.MovePixel(i, j, downR, field); } } } } }
public override void update() { for (uint i = field.Size.X - 2; i > 1; i--) { for (uint j = field.Size.Y - 2; j > 1; j--) { if (baseField.GetPixel(i, j) == triggerColor) { if (rand.Next() % 2 == 1) { field.SetPixel(i, j + 1, color); } } temp = field.GetPixel(i, j); if (temp.G == color.G) { if (temp.A <= 0) { field.SetPixel(i, j, Color.Transparent); } else { int a = rand.Next() % 100; if (a < 50) { Pixy.MovePixel(i, j, up, field); } else if (a < 60) { Pixy.MovePixel(i, j, upL, field); } else if (a < 70) { Pixy.MovePixel(i, j, upR, field); } if (a > 25) { field.SetPixel(i, j, alphaGradient[(temp.A / 15) - 1]); } } } } } }
private void liq_simulation() { //эта часть алгоритма отвечает за покадровую смену направления прохождения по массиву пикселей uint i; int iterator; if (DirectionSwap) { iterator = 1; CycleDir = DirLeft; i = 0; } else { iterator = -1; CycleDir = DirRight; i = field.Size.X - 2; } for (; CycleDir.Invoke(i); i += (uint)iterator) { for (uint j = field.Size.Y - 2; j > 0; j--) { if (field.GetPixel(i, j) == liquid) //если пиксель отвечает за воду { //проверяем возможность движения вниз if (field.GetPixel(i, j + 1) == Color.Transparent) { if (rand.Next() % 40 == 1) { if (field.GetPixel(i - 1, j) == Color.Transparent) { Pixy.MovePixel(i, j, Left, field); } else if (field.GetPixel(i + 1, j) == Color.Transparent) { Pixy.MovePixel(i, j, Right, field); } } else { Pixy.MovePixelWithCols(i, j, down, field, 2); } } else//проверяем возможность движения вниз-влево и вниз-вправо if (field.GetPixel(i - 1, j + 1) == Color.Transparent) { Pixy.MovePixel(i, j, downL, field); } else if (field.GetPixel(i + 1, j + 1) == Color.Transparent) { Pixy.MovePixel(i, j, downR, field); } else { //проверяем возможность движения влево и вправо (расползание) if (field.GetPixel(i + 1, j) == Color.Transparent || field.GetPixel(i - 1, j) == Color.Transparent) { Vector2i dir = FindWaterBalanceDirection(i, j); if (field.GetPixel(i - 1, j) == Color.Transparent && (dir == Left)) { Pixy.MovePixelWithCols(i, j, dir, field, rand.Next(1, 5)); } else if (field.GetPixel(i + 1, j) == Color.Transparent && (dir == Right)) { Pixy.MovePixelWithCols(i, j, dir, field, rand.Next(1, 5)); } } } } } } //изменить направление прохождения по массиву DirectionSwap = !DirectionSwap; }