import { buildCombatState, CombatState, createRunState, createStartWith, data, generateDeckFromInventory, getAdjacentItems, getItemEffects, IRunContext, } from "boardgame-core/samples/slay-the-spire-like"; import { createInventorySignal } from "./inventory"; import { GameModule } from "boardgame-core"; export function createCombatState() { const inventory = createInventorySignal(true); const deck = generateDeckFromInventory(inventory.value); const run = createRunState(); const encounter = data.desert.getEncounters()[0]; const effects = getItemEffects(inventory.value); const combat = buildCombatState( { hp: run.currentHp, maxHp: run.maxHp, itemEffects: effects, }, deck, encounter, ); const runContext: IRunContext = { getItemData(id: string) { return inventory.value.items.get(id)?.meta?.itemData || null; }, getAdjacentItems(id: string) { return getAdjacentItems(inventory.value, id).keys(); }, getConsumedUses(id: string) { return inventory.value.items.get(id)?.meta?.consumedUses || 0; }, async setConsumedUsesAsync(id: string, uses: number) { await inventory.produceAsync((draft) => { const item = draft.items.get(id); if (!item?.meta) return; item.meta.consumedUses = uses; }); }, }; const start = createStartWith((triggers, ctx) => { data.desert.addTriggers(triggers, runContext); }, runContext); return { start, createInitialState: () => combat, } as GameModule; }