import { useEffect, useState } from 'react'; import { EventBus } from '../../game/events/EventBus'; interface CombatHud { playerHp: number; playerMaxHp: number; playerBlock: number; energy: number; maxEnergy: number; handCount: number; drawCount: number; discardCount: number; } const EMPTY_HUD: CombatHud = { playerHp: 0, playerMaxHp: 0, playerBlock: 0, energy: 0, maxEnergy: 0, handCount: 0, drawCount: 0, discardCount: 0, }; /** Live combat HUD state, driven by the CombatScene via the EventBus. */ export function useCombatHud() { const [hud, setHud] = useState(EMPTY_HUD); useEffect(() => { return EventBus.on('combat:state-changed', setHud); }, []); return hud; } /** Current floor/encounter, driven by run + combat events. */ export function useRunProgress() { const [floor, setFloor] = useState(1); useEffect(() => { const unsubNode = EventBus.on('run:node-changed', d => setFloor(d.floor)); const unsubCombat = EventBus.on('combat:started', d => setFloor(d.floor)); return () => { unsubNode(); unsubCombat(); }; }, []); return floor; }