All files / renderer/village pathfinding.ts

100% Statements 14/14
100% Branches 6/6
100% Functions 1/1
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 211x             1x 3x 3x 3x 15x 15x 15x 15x 3x 3x 3x 3x 3x  
import PF from "pathfinding";
 
export interface GridPoint {
  x: number;
  z: number;
}
 
export function computePath(from: GridPoint, to: GridPoint, walkable: boolean[][]): GridPoint[] {
  const size = walkable.length;
  const matrix: number[][] = [];
  for (let z = 0; z < size; z++) {
    const row: number[] = [];
    for (let x = 0; x < size; x++) row.push(walkable[x]?.[z] ? 0 : 1);
    matrix.push(row);
  }
  const grid = new PF.Grid(matrix);
  const finder = new PF.AStarFinder({ diagonalMovement: PF.DiagonalMovement.Never });
  const raw = finder.findPath(from.x, from.z, to.x, to.z, grid);
  return raw.map(([x, z]) => ({ x: x as number, z: z as number }));
}