diff --git a/src/client/controllers/BuildPreviewController.ts b/src/client/controllers/BuildPreviewController.ts index 3a9de6cdb..26a55b1b3 100644 --- a/src/client/controllers/BuildPreviewController.ts +++ b/src/client/controllers/BuildPreviewController.ts @@ -335,12 +335,24 @@ export class BuildPreviewController implements Controller { rangeRadius = this.game.config().defensePostRange(); break; } + let radiusTileX = this.game.x(tileRef); + let radiusTileY = this.game.y(tileRef); + if ( + rangeRadius > 0 && + u.canUpgrade !== false && + upgradeTargetTile !== null + ) { + radiusTileX = this.game.x(upgradeTargetTile); + radiusTileY = this.game.y(upgradeTargetTile); + } const cost = u.cost; return { ghostType: u.type, tileX: this.game.x(tileRef), tileY: this.game.y(tileRef), + radiusTileX, + radiusTileY, canBuild: u.canBuild !== false, canUpgrade: u.canUpgrade !== false, cost: Number(cost), diff --git a/src/client/render/gl/passes/RangeCirclePass.ts b/src/client/render/gl/passes/RangeCirclePass.ts index 8fbe41273..05351f95f 100644 --- a/src/client/render/gl/passes/RangeCirclePass.ts +++ b/src/client/render/gl/passes/RangeCirclePass.ts @@ -54,8 +54,8 @@ export class RangeCirclePass { updateGhostPreview(data: GhostPreviewData | null): void { if (data && data.rangeRadius > 0) { - this.centerX = data.tileX; - this.centerY = data.tileY; + this.centerX = data.radiusTileX; + this.centerY = data.radiusTileY; this.radius = data.rangeRadius; this.warning = data.rangeWarning; } else { diff --git a/src/client/render/types/Renderer.ts b/src/client/render/types/Renderer.ts index 652a5e338..355013ced 100644 --- a/src/client/render/types/Renderer.ts +++ b/src/client/render/types/Renderer.ts @@ -152,6 +152,8 @@ export interface GhostPreviewData { ghostType: string; // UnitType string ("City", "Port", etc.) tileX: number; // Hover tile X tileY: number; // Hover tile Y + radiusTileX: number; + radiusTileY: number; canBuild: boolean; // Valid placement? canUpgrade: boolean; // Upgrading existing structure? cost: number; // Gold cost