Add path cache (#763)

Based on #753

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
This commit is contained in:
Scott Anderson
2025-05-15 22:12:02 -04:00
committed by GitHub
parent 70745faac4
commit 6517f80f68
3 changed files with 25 additions and 0 deletions
+14
View File
@@ -98,6 +98,19 @@ export class TradeShipExecution implements Execution {
}
}
const cachedNextTile = this._dstPort.cacheGet(this.tradeShip.tile());
if (cachedNextTile !== undefined) {
if (
this.mg.isWater(cachedNextTile) &&
this.mg.isShoreline(cachedNextTile)
) {
this.tradeShip.setSafeFromPirates();
}
this.tradeShip.move(cachedNextTile);
this.tilesTraveled++;
return;
}
const result = this.pathFinder.nextTile(
this.tradeShip.tile(),
this._dstPort.tile(),
@@ -112,6 +125,7 @@ export class TradeShipExecution implements Execution {
this.tradeShip.move(this.tradeShip.tile());
break;
case PathFindResultType.NextTile:
this._dstPort.cachePut(this.tradeShip.tile(), result.tile);
// Update safeFromPirates status
if (this.mg.isWater(result.tile) && this.mg.isShoreline(result.tile)) {
this.tradeShip.setSafeFromPirates();
+3
View File
@@ -370,6 +370,9 @@ export interface Unit {
// Updates
toUpdate(): UnitUpdate;
cachePut(from: TileRef, to: TileRef): void; // ports only
cacheGet(from: TileRef): TileRef | undefined; // ports only
}
export interface TerraNullius {
+8
View File
@@ -28,6 +28,7 @@ export class UnitImpl implements Unit {
private _detonationDst: TileRef | undefined = undefined; // Only for nukes
private _warshipTarget: Unit | undefined = undefined;
private _cooldownDuration: number | undefined = undefined;
private _pathCache: Map<TileRef, TileRef> = new Map();
constructor(
private _type: UnitType,
@@ -53,6 +54,13 @@ export class UnitImpl implements Unit {
: 0;
}
cachePut(from: TileRef, to: TileRef): void {
this._pathCache.set(from, to);
}
cacheGet(from: TileRef): TileRef | undefined {
return this._pathCache.get(from);
}
id() {
return this._id;
}