public void TestBiggerMap() { var map = new Map(); var chunk1 = CreateChunk(0, 0); var chunk2 = CreateChunk(1, 0); var chunk3 = CreateChunk(-1, 0); //chunk3.SetTile(15, 0, 2); var chunk4 = CreateChunk(0, 1); var chunk5 = CreateChunk(0, -1); var chunk6 = CreateChunk(1, 1); var chunk7 = CreateChunk(-1, -1); var chunk8 = CreateChunk(-1, 1); var chunk9 = CreateChunk(1, -1); map.AddChunk(chunk1); map.AddChunk(chunk2); map.AddChunk(chunk3); map.AddChunk(chunk4); map.AddChunk(chunk5); map.AddChunk(chunk6); map.AddChunk(chunk7); map.AddChunk(chunk8); map.AddChunk(chunk9); var passableMapArray = PathfinderHelper.GetPassableByteArray(new Position(0, 0), new Position(-1, 0), map.Chunks); var path = Map.FindPath(new Position(0, 0), new Position(-1, 0), map.Chunks); Assert.That(path.Count == 2); Assert.That(path[0].X == 0 && path[0].Y == 0); Assert.That(path[1].X == -1 && path[1].Y == 0); }
public static List <Position> FindPath(Position start, Position goal, Dictionary <string, Chunk> chunks) { var passableMapResult = PathfinderHelper.GetPassableByteArray(start, goal, chunks); var pathfinder = new PathFinderFast(passableMapResult.PassableMap); var offsetedStart = new Position(start.X + (passableMapResult.OffsetX * 16), start.Y + (passableMapResult.OffsetY * 16)); var offsetedGoal = new Position(goal.X + (passableMapResult.OffsetX * 16), goal.Y + (passableMapResult.OffsetY * 16)); var result = pathfinder.FindPath(offsetedStart, offsetedGoal); if (result == null) { return(null); } result.Reverse(); return(result.Select(node => new Position(node.X - (passableMapResult.OffsetX * 16), node.Y - (passableMapResult.OffsetY * 16))).ToList()); }
public void TestCrossingUnecessaryChunkStillGeneratesPassableArrayForHim() { var chunk1 = CreateChunk(0, 0); chunk1.SetTile(0, 1, BLOCK); chunk1.SetTile(1, 0, BLOCK); var chunk2 = CreateChunk(0, -1); _map.AddChunk(chunk1); _map.AddChunk(chunk2); var grid = PathfinderHelper.GetPassableByteArray(new Position(0, 0), new Position(0, 2), _map.Chunks, _map.IsPassable); Assert.AreEqual(48, grid.PassableMap.GetLength(0)); Assert.AreEqual(48, grid.PassableMap.GetLength(1)); }
public List <Position> FindPath(Position start, Position goal) { var passableMapResult = PathfinderHelper.GetPassableByteArray(start, goal, this.Chunks, IsPassable); var pathfinder = new PathFinder(passableMapResult.PassableMap); var offsetedStart = new Position(start.X + (passableMapResult.OffsetX * 16), start.Y + (passableMapResult.OffsetY * 16)); var offsetedGoal = new Position(goal.X + (passableMapResult.OffsetX * 16), goal.Y + (passableMapResult.OffsetY * 16)); var result = pathfinder.FindPath(offsetedStart, offsetedGoal); if (result == null) { return(null); } List <Position> returned = new List <Position>(); foreach (var node in result) { returned.Add(new Position(node.X - (passableMapResult.OffsetX * 16), node.Y - (passableMapResult.OffsetY * 16))); } return(returned); }