// ─── Golem Combat Pipeline ───────────────────────────────────────────────────── // Extracts golem combat setup from gameStore.ts tick() // to keep the coordinator under the 400-line file limit. import { useCombatStore } from '../combatStore'; import { useManaStore } from '../manaStore'; import { processGolemRoomDuration } from '../golem-combat-actions'; import type { ActiveGolem } from '../../types'; export interface GolemCombatContext { addLog: (msg: string) => void; ctx: { combat: { currentFloor: number; currentRoom: { roomType: string; unknown: Array<{ name: string }> }; }; prestige: { signedPacts: number[] }; }; rawMana: number; elements: Record; maxMana: number; } export interface GolemCombatResult { rawMana: number; elements: Record; } /** * Build the golem combat pipeline for the current tick. * Returns golem state needed by processCombatTick. */ export function buildGolemCombatPipeline(_addLog: (msg: string) => void): { activeGolems: ActiveGolem[]; golemApplyDamageToRoom: (dmg: number) => { floorHP: number; floorMaxHP: number; roomCleared: boolean }; } { const activeGolems = useCombatStore.getState().golemancy?.activeGolems ?? []; const golemApplyDamageToRoom = (dmg: number) => { const cs = useCombatStore.getState(); if (dmg > 0) { const newFloorHP = Math.max(0, cs.floorHP - dmg); useCombatStore.setState({ floorHP: newFloorHP }); } const roomCleared = useCombatStore.getState().floorHP <= 0; return { floorHP: cs.floorHP, floorMaxHP: cs.floorMaxHP, roomCleared }; }; return { activeGolems, golemApplyDamageToRoom }; }