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); }
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); } } } }