// ─── Computed Getters ────────────────────────────────────────────────────── import type { GameState } from '../types'; import { ENCHANTMENT_EFFECTS } from '../data/enchantment-effects'; export function getEquipmentSpells(get: () => GameState): string[] { const state = get(); const spells: string[] = []; for (const instanceId of Object.values(state.equippedInstances || {})) { if (!instanceId) continue; const instance = state.equipmentInstances[instanceId]; if (!instance) continue; for (const ench of instance.enchantments) { const effectDef = ENCHANTMENT_EFFECTS[ench.effectId]; if (effectDef?.effect.type === 'spell' && effectDef.effect.spellId) { spells.push(effectDef.effect.spellId); } } } return [...new Set(spells)]; } export function getEquipmentEffects(get: () => GameState): Record { const state = get(); const effects: Record = {}; for (const instanceId of Object.values(state.equippedInstances || {})) { if (!instanceId) continue; const instance = state.equipmentInstances[instanceId]; if (!instance) continue; for (const ench of instance.enchantments) { const effectDef = ENCHANTMENT_EFFECTS[ench.effectId]; if (!effectDef) continue; if (effectDef.effect.type === 'bonus' && effectDef.effect.stat && effectDef.effect.value) { effects[effectDef.effect.stat] = (effects[effectDef.effect.stat] || 0) + effectDef.effect.value * ench.stacks; } } } return effects; } export function getAvailableCapacity( instanceId: string, get: () => GameState ): number { const state = get(); const instance = state.equipmentInstances[instanceId]; if (!instance) return 0; return instance.totalCapacity - instance.usedCapacity; }