Example #1
0
        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);
        }
Example #2
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());
        }
Example #3
0
        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));
        }
Example #4
0
        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);
        }