import { DungeonRenderer } from "../../rendering/DungeonRenderer"; import { renderSimEvents, type EventRenderCallbacks } from "../systems/EventRenderer"; import { type SimEvent, type EntityId, type ActorType } from "../../core/types"; import { type EntityAccessor } from "../../engine/EntityAccessor"; export class GameRenderer implements EventRenderCallbacks { private dungeonRenderer: DungeonRenderer; constructor(dungeonRenderer: DungeonRenderer) { this.dungeonRenderer = dungeonRenderer; } public renderEvents(events: SimEvent[], playerId: EntityId, accessor: EntityAccessor) { renderSimEvents(events, this, { playerId: playerId, getPlayerPos: () => accessor.getPlayerPos() }); } // Delegation Methods showDamage(x: number, y: number, amount: number, isCrit?: boolean, isBlock?: boolean): void { this.dungeonRenderer.showDamage(x, y, amount, isCrit, isBlock); } showDodge(x: number, y: number): void { this.dungeonRenderer.showDodge(x, y); } showHeal(x: number, y: number, amount: number): void { this.dungeonRenderer.showHeal(x, y, amount); } spawnCorpse(x: number, y: number, type: ActorType, targetId?: EntityId): void { this.dungeonRenderer.spawnCorpse(x, y, type, targetId); } showWait(x: number, y: number): void { this.dungeonRenderer.showWait(x, y); } spawnOrb(orbId: EntityId, x: number, y: number): void { this.dungeonRenderer.spawnOrb(orbId, x, y); } collectOrb(actorId: EntityId, amount: number, x: number, y: number): void { this.dungeonRenderer.collectOrb(actorId, amount, x, y); } showLevelUp(x: number, y: number): void { this.dungeonRenderer.showLevelUp(x, y); } showAlert(x: number, y: number): void { this.dungeonRenderer.showAlert(x, y); } showFloatingText(x: number, y: number, message: string, color: string): void { this.dungeonRenderer.showFloatingText(x, y, message, color); } spawnLoot(x: number, y: number, itemName: string): void { // Optional hook if we wanted to visualize loot spawn specifically here this.dungeonRenderer.showFloatingText(x, y, `${itemName}!`, "#ffd700"); } }