From cbf38ffb81ec4b48c29b3143d6661a7f4dd8477c Mon Sep 17 00:00:00 2001 From: Aotumuri Date: Mon, 25 May 2026 00:05:29 +0900 Subject: [PATCH] Fix destroyed cooldown structures reappearing in game (#3997) ## Description: Stop deleted missile silos from reappearing after cooldown expiry before https://github.com/user-attachments/assets/714d3580-b60d-479e-8e45-6ee065b79d54 ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: aotumuri --- src/client/render/gl/passes/BarPass.ts | 1 + src/client/render/gl/passes/StructureLevelPass.ts | 1 + src/client/render/gl/passes/StructurePass.ts | 1 + src/core/execution/MissileSiloExecution.ts | 5 +++++ 4 files changed, 8 insertions(+) diff --git a/src/client/render/gl/passes/BarPass.ts b/src/client/render/gl/passes/BarPass.ts index 7e1de3800..159e6b911 100644 --- a/src/client/render/gl/passes/BarPass.ts +++ b/src/client/render/gl/passes/BarPass.ts @@ -138,6 +138,7 @@ export class BarPass { // --- Progress bars (structures) --- for (const unit of structures.values()) { + if (!unit.isActive) continue; const progress = this.computeStructureProgress(unit, gameTick); if (progress !== null) this.pushProgress(unit, progress); } diff --git a/src/client/render/gl/passes/StructureLevelPass.ts b/src/client/render/gl/passes/StructureLevelPass.ts index a727e31e9..b20e41b95 100644 --- a/src/client/render/gl/passes/StructureLevelPass.ts +++ b/src/client/render/gl/passes/StructureLevelPass.ts @@ -230,6 +230,7 @@ export class StructureLevelPass { let count = 0; for (const unit of units.values()) { + if (!unit.isActive) continue; if (!STRUCTURE_TYPES.has(unit.unitType)) continue; if (unit.level <= 1) continue; diff --git a/src/client/render/gl/passes/StructurePass.ts b/src/client/render/gl/passes/StructurePass.ts index 42f153143..4ea70a3ab 100644 --- a/src/client/render/gl/passes/StructurePass.ts +++ b/src/client/render/gl/passes/StructurePass.ts @@ -264,6 +264,7 @@ export class StructurePass { let count = 0; for (const unit of units.values()) { + if (!unit.isActive) continue; const atlasIdx = this.typeToAtlasCol.get(unit.unitType); if (atlasIdx === undefined) continue; diff --git a/src/core/execution/MissileSiloExecution.ts b/src/core/execution/MissileSiloExecution.ts index a94727eab..4eb41883f 100644 --- a/src/core/execution/MissileSiloExecution.ts +++ b/src/core/execution/MissileSiloExecution.ts @@ -18,6 +18,11 @@ export class MissileSiloExecution implements Execution { return; } + if (!this.silo.isActive()) { + this.active = false; + return; + } + // frontTime is the time the earliest missile fired. const frontTime = this.silo.missileTimerQueue()[0]; if (frontTime === undefined) {