Files
Mana-Loop/src/lib/game/stores/gameLoopActions.ts
T
n8n-gitea 25ba565467
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m25s
chore: remove unused imports, vars, and params — 84 imports, 7 vars, 16 params across 45+ files
2026-05-25 20:18:39 +02:00

74 lines
2.4 KiB
TypeScript

import { calcInsight, getFloorMaxHP } from '../utils';
import type { GameCoordinatorState } from './gameStore';
import { makeInitialSpells } from './combatStore';
import { SPELLS_DEF } from '../constants';
import { useUIStore } from './uiStore';
import { usePrestigeStore } from './prestigeStore';
import { useManaStore } from './manaStore';
import { useCombatStore } from './combatStore';
import { computeDisciplineEffects } from '../effects/discipline-effects';
export const createStartNewLoop = (set: (state: Partial<GameCoordinatorState>) => void) => () => {
const prestigeState = usePrestigeStore.getState();
const combatState = useCombatStore.getState();
const manaState = useManaStore.getState();
const disciplineEffects = computeDisciplineEffects();
const insightGained = prestigeState.loopInsight || calcInsight({
maxFloorReached: combatState.maxFloorReached,
totalManaGathered: manaState.totalManaGathered,
signedPacts: prestigeState.signedPacts,
prestigeUpgrades: prestigeState.prestigeUpgrades,
skills: {},
}, disciplineEffects);
const total = prestigeState.insight + insightGained;
const pu = prestigeState.prestigeUpgrades;
const startFloor = 1 + (pu.spireKey || 0) * 2;
// Reset and update all stores for new loop
useUIStore.setState({
gameOver: false,
victory: false,
paused: false,
logs: ['✨ The loop begins. You start with Mana Bolt. Gather your strength, mage.'],
});
usePrestigeStore.getState().resetPrestigeForNewLoop(
total,
pu,
);
usePrestigeStore.getState().incrementLoopCount();
useManaStore.getState().resetMana(pu, {}, {}, {});
// Reset combat with starting floor and any spells from prestige upgrades
const startSpells = makeInitialSpells();
if (pu.spellMemory) {
const availableSpells = Object.keys(SPELLS_DEF).filter(s => s !== 'manaBolt');
const shuffled = availableSpells.sort(() => Math.random() - 0.5);
for (let i = 0; i < Math.min(pu.spellMemory, shuffled.length); i++) {
startSpells[shuffled[i]] = { learned: true, level: 1, studyProgress: 0 };
}
}
useCombatStore.setState({
currentFloor: startFloor,
floorHP: getFloorMaxHP(startFloor),
floorMaxHP: getFloorMaxHP(startFloor),
maxFloorReached: startFloor,
activeSpell: 'manaBolt',
currentAction: 'meditate',
castProgress: 0,
spells: startSpells,
});
set({
day: 1,
hour: 0,
incursionStrength: 0,
containmentWards: 0,
});
};