예제 #1
0
 public void AddPath(List<Location> path)
 {
     PathEntry p = new PathEntry()
     {
         path = path,
         pathColour = new Color(rand.Next(255), rand.Next(255), rand.Next(255))
     };
     CreatePaths(p);
     paths.Add(p);
 }
예제 #2
0
        public void CreatePaths(PathEntry p)
        {
            Location next, current, last;
            p.sprites = new List<Texture2D>();
            p.spriteRects = new List<Rectangle>();
            p.angles = new List<float>();

            float ninetyDegrees = 0.5f * (float)Math.PI;

            for (int i = 1; i < p.path.Count - 1; ++i)
            {
                last = p.path[i - 1];
                next = p.path[i + 1];
                current = p.path[i];
                p.spriteRects.Add(GetRectFromLocation(current));
                if (current.X > last.X)
                {
                    if (current.Y < next.Y)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(0.0f);
                    }
                    else if (current.Y > next.Y)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 1);
                    }
                    else
                    {
                        p.sprites.Add(horizontal);
                        p.angles.Add(0.0f);
                    }
                }
                else if (current.X < last.X)
                {
                    if (current.Y < next.Y)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(3.0f * ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 3);
                    }
                    else if (current.Y > next.Y)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(2.0f * ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 2);
                    }
                    else
                    {
                        p.sprites.Add(horizontal);
                        p.angles.Add(0.0f);
                    }
                }
                else if (current.Y > last.Y)
                {
                    if (current.X > next.X)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 1);
                    }
                    else if (current.X < next.X)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(2.0f * ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 2);
                    }
                    else
                    {
                        p.sprites.Add(vertical);
                        p.angles.Add(0.0f);
                    }
                }
                else
                {
                    if (current.X > next.X)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(0.0f);
                    }
                    else if (current.X < next.X)
                    {
                        p.sprites.Add(cwcorner);
                        p.angles.Add(3.0f * ninetyDegrees);
                        p.spriteRects[i - 1] = ShiftRect(p.spriteRects[i - 1], 3);
                    }
                    else
                    {
                        p.sprites.Add(vertical);
                        p.angles.Add(0.0f);
                    }
                }
            }
        }