66 lines
2.3 KiB
TypeScript
66 lines
2.3 KiB
TypeScript
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");
|
|
}
|
|
}
|