Merge pull request #170 from Readixyee/tradeship-caching

Trade ship path caching
This commit is contained in:
evanpelle
2025-03-07 19:08:13 -08:00
committed by GitHub
+14
View File
@@ -12,6 +12,8 @@ export class PathFinder {
private aStar: AStar;
private computeFinished = true;
private pathCache: Map<number, TileRef[]> = new Map();
private constructor(
private game: Game,
private newAStar: (curr: TileRef, dst: TileRef) => AStar,
@@ -53,6 +55,15 @@ export class PathFinder {
return { type: PathFindResultType.Completed, tile: curr };
}
// make key the same between port a -> b and b -> a
const key = curr < dst ? curr * 1_000_000 + dst : dst * 1_000_000 + curr;
// get the cached path
if (this.pathCache.has(key)) {
this.path = this.pathCache.get(key)!;
return { type: PathFindResultType.NextTile, tile: this.path.shift() };
}
if (this.computeFinished) {
if (this.shouldRecompute(curr, dst)) {
this.curr = curr;
@@ -72,6 +83,9 @@ export class PathFinder {
this.path = this.aStar.reconstructPath();
// Remove the start tile
this.path.shift();
// save the path in the cache
this.pathCache.set(key, [...this.path]);
return this.nextTile(curr, dst);
case PathFindResultType.Pending:
return { type: PathFindResultType.Pending };