public PathFindingEngine(RectInt bounds, CanTraverse canTraverse, Moves moves)
 {
     m_bounds      = bounds;
     m_offset      = new Vector2Int(-bounds.position.x, -bounds.position.y);
     m_canTraverse = canTraverse;
     m_moves       = moves;
     m_visited     = new bool[bounds.width * bounds.height];
 }
        void WalkNode(CanTraverse canTraverse, Vector2Int current, List <Vector2Int> nodes)
        {
            Vector2Int[] moves = m_moves(current);

            foreach (Vector2Int move in moves)
            {
                if (InBounds(move) && canTraverse(move) && !HasVisited(move))
                {
                    MarkVisited(move);
                    nodes.Add(move);
                }
            }
        }
        int Cost(CanTraverse canTraverse, Vector2Int p)
        {
            int cost = 0;

            Vector2Int[] moves = m_moves(p);

            foreach (Vector2Int move in moves)
            {
                cost += (InBounds(move) && canTraverse(move)) ? 0 : 2;
            }

            return(cost);
        }
        void VisitNode(CanTraverse canTraverse, PathNode current, List <PathNode> nodes, Vector2Int goal)
        {
            int step = current.step + 1;

            Vector2Int[] moves = m_moves(current.position);

            foreach (Vector2Int move in moves)
            {
                if (InBounds(move) && canTraverse(move) && !HasVisited(move))
                {
                    MarkVisited(move);

                    int cost = Cost(canTraverse, move);

                    nodes.Add(new PathNode(current, move, step + cost, goal));
                }
            }
        }
 public PathFindingEngine(Vector2Int size, CanTraverse canTraverse) : this(size, canTraverse, RectangleMovement)
 {
 }
 public PathFindingEngine(Vector2Int size, CanTraverse canTraverse, Moves moves) : this(new RectInt(Vector2Int.zero, size),
                                                                                        canTraverse,
                                                                                        moves)
 {
 }