This repository was archived by the owner on Dec 17, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 54
Expand file tree
/
Copy pathgeneratePath.ts
More file actions
60 lines (55 loc) · 1.44 KB
/
generatePath.ts
File metadata and controls
60 lines (55 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { createAStarFinder } from "../pathfinding/aStar";
import type { Grid } from "../pathfinding/grid";
import type { XYPosition } from "@xyflow/react";
/**
* Takes source and target {x, y} points, together with an grid representation
* of the graph, and returns an array of number tuples [x, y], representing
* the full path from source to target.
*/
export type PathFindingFunction = (
grid: Grid,
start: XYPosition,
end: XYPosition,
) => number[][];
export const pathfindingAStarDiagonal: PathFindingFunction = (
grid,
start,
end,
) => {
try {
const finder = createAStarFinder({
diagonalMovement: "Always",
});
const fullPath = finder.findPath(start.x, start.y, end.x, end.y, grid);
if (fullPath.length === 0) {
throw new Error("No path found");
}
return fullPath;
} catch (error) {
if (error instanceof Error) {
throw error;
}
throw new Error(`Unknown error: ${String(error)}`);
}
};
export const pathfindingAStarNoDiagonal: PathFindingFunction = (
grid,
start,
end,
) => {
try {
const finder = createAStarFinder({
diagonalMovement: "Never",
});
const fullPath = finder.findPath(start.x, start.y, end.x, end.y, grid);
if (fullPath.length === 0) {
throw new Error("No path found");
}
return fullPath;
} catch (error) {
if (error instanceof Error) {
throw error;
}
throw new Error(`Unknown error: ${String(error)}`);
}
};