diff --git a/src/core/execution/ConstructionExecution.ts b/src/core/execution/ConstructionExecution.ts index a7284da81..c37c802fe 100644 --- a/src/core/execution/ConstructionExecution.ts +++ b/src/core/execution/ConstructionExecution.ts @@ -1,4 +1,5 @@ import { + Cell, Execution, Game, Gold, @@ -26,15 +27,28 @@ export class ConstructionExecution implements Execution { private ticksUntilComplete: Tick; private cost: Gold; + private tile: TileRef; constructor( private player: Player, - private tile: TileRef, private constructionType: UnitType, + private tileOrCell: TileRef | Cell, ) {} init(mg: Game, ticks: number): void { this.mg = mg; + if (this.tileOrCell instanceof Cell) { + if (!this.mg.isValidCoord(this.tileOrCell.x, this.tileOrCell.y)) { + console.warn( + `cannot build construction invalid coordinates ${this.tileOrCell.x}, ${this.tileOrCell.y}`, + ); + this.active = false; + return; + } + this.tile = this.mg.ref(this.tileOrCell.x, this.tileOrCell.y); + } else { + this.tile = this.tileOrCell; + } } tick(ticks: number): void { diff --git a/src/core/execution/ExecutionManager.ts b/src/core/execution/ExecutionManager.ts index f0485a89f..72e552cb9 100644 --- a/src/core/execution/ExecutionManager.ts +++ b/src/core/execution/ExecutionManager.ts @@ -1,4 +1,4 @@ -import { Execution, Game } from "../game/Game"; +import { Cell, Execution, Game } from "../game/Game"; import { PseudoRandom } from "../PseudoRandom"; import { ClientID, GameID, Intent, Turn } from "../Schemas"; import { simpleHash } from "../Util"; @@ -107,11 +107,10 @@ export class Executor { case "embargo": return new EmbargoExecution(player, intent.targetID, intent.action); case "build_unit": - // TODO: fix this return new ConstructionExecution( player, - this.mg.ref(intent.x, intent.y), intent.unit, + new Cell(intent.x, intent.y), ); case "allianceExtension": { return new AllianceExtensionExecution(player, intent.recipient); diff --git a/src/core/execution/FakeHumanExecution.ts b/src/core/execution/FakeHumanExecution.ts index 48e163209..eb9467c8d 100644 --- a/src/core/execution/FakeHumanExecution.ts +++ b/src/core/execution/FakeHumanExecution.ts @@ -483,7 +483,7 @@ export class FakeHumanExecution implements Execution { if (canBuild === false) { return false; } - this.mg.addExecution(new ConstructionExecution(this.player, tile, type)); + this.mg.addExecution(new ConstructionExecution(this.player, type, tile)); return true; } @@ -522,7 +522,7 @@ export class FakeHumanExecution implements Execution { return false; } this.mg.addExecution( - new ConstructionExecution(this.player, targetTile, UnitType.Warship), + new ConstructionExecution(this.player, UnitType.Warship, targetTile), ); return true; } diff --git a/tests/util/utils.ts b/tests/util/utils.ts index 921e5d102..dbdfb3d1d 100644 --- a/tests/util/utils.ts +++ b/tests/util/utils.ts @@ -15,7 +15,7 @@ export function constructionExecution( unit: UnitType, ticks = 4, ) { - game.addExecution(new ConstructionExecution(_owner, game.ref(x, y), unit)); + game.addExecution(new ConstructionExecution(_owner, unit, game.ref(x, y))); // 4 ticks by default as it usually goes like this // Init of construction execution