mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 14:50:44 +00:00
Merge pull request #170 from Readixyee/tradeship-caching
Trade ship path caching
This commit is contained in:
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user