import { System } from '../ecs/System.js'; import { Invincibility } from '../components/Invincibility.js'; import { MeshComponent } from '../components/MeshComponent.js'; import { GameConfig } from '../game/GameConfig.js'; /** * InvincibilitySystem - handles invincibility flashing effect */ export class InvincibilitySystem extends System { constructor() { super(); this.flashTimer = 0; } /** * Update invincibility timers and flash effect * @param {number} deltaTime - Time since last frame in seconds */ update(deltaTime) { const entities = this.getEntities(Invincibility, MeshComponent); this.flashTimer += deltaTime; for (const entityId of entities) { const invincibility = this.getComponent(entityId, Invincibility); const meshComp = this.getComponent(entityId, MeshComponent); if (!invincibility || !meshComp) continue; // Update invincibility timer invincibility.update(deltaTime); // Flash effect - toggle visibility based on flash rate if (invincibility.getIsInvincible()) { const flashInterval = Math.floor(this.flashTimer / GameConfig.INVINCIBILITY_FLASH_RATE); meshComp.mesh.visible = flashInterval % 2 === 0; } else { // Always visible when not invincible meshComp.mesh.visible = true; } } // Reset flash timer periodically to prevent overflow if (this.flashTimer > 10) { this.flashTimer = 0; } } }