Beispiel #1
0
 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]);
                            }
                        }
                    }
                }
            }
        }
Beispiel #3
0
        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;
        }