public void GridPathfinding()
        {
            ushort width  = 5;
            ushort height = 5;

            byte[] raw = new byte[] {
                1, 1, 1, 1, 1,
                1, 1, 1, 1, 1,
                1, 128, 128, 128, 1,
                1, 1, 1, 1, 1,
                1, 1, 1, 1, 1,
            };
            var data00 = new GridData();

            data00.Fill(width, height, raw);
            var data22 = new GridData();

            data22.Fill(width, height, raw, 2, 2);
            var rect4        = new RectGrid4Dir(data00);
            var rect4_offset = new RectGrid4Dir(data22);
            var rect8        = new RectGrid8Dir(data00);
            var axialHex     = new AxialHexGrid(data00);
            var astar        = new AStarPathfinding();

            Debug.Log(nameof(rect4));
            rect4.FindPath(astar, 1, 0, 2, 4);
            CheckPath(astar.FormattedPath(), "path:2,4-2,3-1,3-0,3-0,2-0,1-0,0-1,0");
            Debug.Log(nameof(rect4_offset));
            rect4_offset.FindPath(astar, -1, -2, 0, 2);
            CheckPath(astar.FormattedPath(), "path:2,4-2,3-1,3-0,3-0,2-0,1-0,0-1,0");
            Debug.Log(nameof(rect8));
            rect8.FindPath(astar, 1, 0, 2, 4);
            CheckPath(astar.FormattedPath(), "path:2,4-1,3-0,2-0,1-1,0");
            Debug.Log(nameof(axialHex));
            axialHex.FindPath(astar, 1, 0, 2, 4);
            CheckPath(astar.FormattedPath(), "path:2,4-1,3-0,2-0,1-1,1-0,0-1,0");
        }
        public void WaypointPathfinding()
        {
            var waypointData = new WaypointData();
            var waypoint     = new Waypoint[32];

            for (int i = 0; i < waypoint.Length; ++i)
            {
                waypoint[i] = new Waypoint()
                {
                    link     = new List <int>(4),
                    position = new Vector2(0, i),
                };
            }
            waypoint[0].link.Add(1);
            waypoint[0].link.Add(2);
            waypoint[1].link.Add(6);
            waypoint[2].link.Add(6);
            waypoint[2].link.Add(3);
            waypoint[3].link.Add(4);
            waypoint[4].link.Add(5);
            waypoint[6].link.Add(7);
            waypoint[7].link.Add(8);
            waypoint[7].link.Add(9);
            waypointData.waypoint = waypoint;
            waypointData.MakeBidirectional();
            var graph = new WaypointGraph(waypointData);
            var astar = new AStarPathfinding();

            astar.FindPath(graph, 0, 9);
            CheckPath(astar.FormattedPath(), "path:9-7-6-2-0");
            astar.FindPath(graph, 5, 8);
            CheckPath(astar.FormattedPath(), "path:8-7-6-2-3-4-5");
            astar.FindPath(graph, 5, 31);
            CheckPath(astar.FormattedPath(), "path:31-x-9-7-6-2-3-4-5");

            astar.FindPath(graph, 0, -1);
            CheckPath(astar.FormattedPath(9), "path:9-7-6-2-0");
            CheckPath(astar.FormattedPath(6), "path:6-2-0");
            CheckPath(astar.FormattedPath(4), "path:4-3-2-0");
            CheckPath(astar.FormattedPath(11), "path:11-x-9-7-6-2-0");
        }