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