Example #1
0
        private List <Vector2> GetParticalWayTo(Partical partical, Vector2 destination)
        {
            List <Vector2> way = new List <Vector2>();

            way.Add(new Vector2(partical.rect.X, partical.rect.Y));
            Vector2 node;

            while (true)
            {
                node = way[way.Count - 1];
                if (partical.SimulateGoTo(node, destination, out node))
                {
                    way.Add(node);
                }
                else
                {
                    break;
                }
            }
            return(way);
        }
Example #2
0
        private void AddDestinationAndAvoidHoles(Partical partical, Vector2 startingPoint)
        {
            while (true)
            {
                Vector2 randomDestination = GetRandomDestination(startingPoint);
                bool    intersects        = false;
                foreach (Vector2 node in GetParticalWayTo(partical, randomDestination))
                {
                    Rectangle particalRect = new Rectangle((int)node.X, (int)node.Y, partical.rect.Width, partical.rect.Height);
                    intersects = CheckForParticalCollision(particalRect);
                    if (intersects)
                    {
                        break;
                    }
                }

                if (!intersects)
                {
                    partical.destinationsList.Add(randomDestination);
                    break;
                }
            }
        }
Example #3
0
        public ParticalManager(ParticalsMovement particalsMovement, int maxParticals, Rectangle rect, Vector2 particalSize, int randomParticalSize, int speed, Color color, Color randomColor, int opacity, int randomOpacity)
        {
            this.rect = rect;
            this.particalsMovement = particalsMovement;

            snakes = new Partical[maxParticals];

            int randomColorR = 0;
            int randomColorG = 0;
            int randomColorB = 0;

            if (color.R > randomColor.R)
            {
                randomColorR = randomColor.R - color.R;
            }
            if (color.R < randomColor.R)
            {
                randomColorR = randomColor.R - color.R;
            }

            if (color.G > randomColor.G)
            {
                randomColorG = randomColor.G - color.G;
            }
            if (color.G < randomColor.G)
            {
                randomColorG = randomColor.G - color.G;
            }

            if (color.B > randomColor.B)
            {
                randomColorB = randomColor.B - color.B;
            }
            if (color.B < randomColor.B)
            {
                randomColorB = randomColor.B - color.B;
            }

            for (int i = 0; i < snakes.Length; i++)
            {
                int randomSize;
                if (randomParticalSize < 0)
                {
                    randomSize          = random.Next(randomParticalSize * -1);
                    randomParticalSize *= -1;
                }
                else
                {
                    randomSize = random.Next(randomParticalSize);
                }
                Vector2 startingPoint = new Vector2(rect.X + random.Next(rect.Width), rect.Y + random.Next(rect.Height));
                snakes[i] = new Partical(new Rectangle((int)startingPoint.X, (int)startingPoint.Y, (int)particalSize.X + randomSize, (int)particalSize.Y + randomSize), speed, new Color(color.R + RandomColor(randomColorR), color.G + RandomColor(randomColorG), color.B + RandomColor(randomColorB)), (opacity + random.Next(randomOpacity)) / 100f);//i, 255, i   //random.Next(70) / 100f);
                switch (particalsMovement)
                {
                case ParticalsMovement.xy:
                    snakes[i].destinationsList.Add(new Vector2(rect.X + random.Next(rect.Width), rect.Y + random.Next(rect.Height)));
                    snakes[i].destinationsList.Add(new Vector2(rect.X + random.Next(rect.Width), rect.Y + random.Next(rect.Height)));
                    snakes[i].destinationsList.Add(startingPoint);
                    break;

                case ParticalsMovement.y:
                    snakes[i].destinationsList.Add(new Vector2(startingPoint.X, rect.Y + random.Next(rect.Height)));
                    snakes[i].destinationsList.Add(new Vector2(startingPoint.X, rect.Y + random.Next(rect.Height)));
                    snakes[i].destinationsList.Add(startingPoint);
                    break;

                case ParticalsMovement.x:
                    snakes[i].destinationsList.Add(new Vector2(rect.X + random.Next(rect.Width), startingPoint.Y));
                    snakes[i].destinationsList.Add(new Vector2(rect.X + random.Next(rect.Width), startingPoint.Y));
                    snakes[i].destinationsList.Add(startingPoint);
                    break;
                }
            }
        }