diff --git a/game/towers/TowerBase.ts b/game/towers/TowerBase.ts index 4ae6a98..3e30e31 100644 --- a/game/towers/TowerBase.ts +++ b/game/towers/TowerBase.ts @@ -9,6 +9,7 @@ export abstract class TowerBase { public gridY: number protected sprite!: Phaser.GameObjects.Graphics protected staminaBar!: Phaser.GameObjects.Graphics + private frozenOverlay!: Phaser.GameObjects.Graphics public readonly cost: number public readonly attackRange: number @@ -16,6 +17,7 @@ export abstract class TowerBase { public readonly attackSpeed: number public readonly maxStamina: number = STAMINA_MAX public stamina: number = STAMINA_MAX + public isFrozen: boolean = false protected attackCooldown: number = 0 protected staminaRegen: number = STAMINA_REGEN @@ -47,12 +49,20 @@ export abstract class TowerBase { this.sprite = scene.add.graphics() this.staminaBar = scene.add.graphics() + this.frozenOverlay = scene.add.graphics() this.drawSprite() this.updateStaminaBar() } update(delta: number, enemies: EnemyBase[]): void { + // 禁锢状态:跳过攻击,显示灰色覆盖 + if (this.isFrozen) { + this.drawFrozenOverlay() + return + } + // 解除禁锢时清除覆盖层 + this.clearFrozenOverlay() this.attackCooldown -= delta if (this.stamina <= 0) { @@ -135,11 +145,31 @@ export abstract class TowerBase { return { x: this.px, y: this.py } } + /** 绘制禁锢状态灰色覆盖层 */ + protected drawFrozenOverlay(): void { + this.frozenOverlay.clear() + const half = TILE_SIZE / 2 + this.frozenOverlay.fillStyle(0x6b7280, 0.6) + this.frozenOverlay.fillRect( + this.px - half, + this.py - half, + TILE_SIZE, + TILE_SIZE + ) + this.frozenOverlay.setDepth(13) + } + + /** 清除禁锢覆盖层 */ + protected clearFrozenOverlay(): void { + this.frozenOverlay.clear() + } + abstract attack(target: EnemyBase): void abstract drawSprite(): void destroy(): void { this.sprite?.destroy() this.staminaBar?.destroy() + this.frozenOverlay?.destroy() } }