fix: resetGame button doesn't fully reset game state
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m18s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m18s
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
// ─── Combat Reset Helper ───────────────────────────────────────────────────────
|
||||
// Generates the full default combat store state for resetCombat().
|
||||
// Keeps combatStore.ts under the 400-line limit.
|
||||
|
||||
import type { RuntimeActiveGolem } from '../types';
|
||||
import { getFloorMaxHP } from '../utils';
|
||||
import { generateSpireFloorState, getRoomsForFloor } from '../utils/spire-utils';
|
||||
import { makeInitialSpells } from './combat-actions';
|
||||
import type { CombatState } from './combat-state.types';
|
||||
|
||||
export function createDefaultCombatState(
|
||||
startFloor: number,
|
||||
spellsToKeep: string[] = [],
|
||||
): Partial<CombatState> {
|
||||
const startSpells = makeInitialSpells(spellsToKeep);
|
||||
const seed = startFloor * 12345;
|
||||
const rooms = getRoomsForFloor(startFloor, seed);
|
||||
const startRoom = generateSpireFloorState(startFloor, 0, rooms, 0);
|
||||
|
||||
return {
|
||||
currentFloor: startFloor,
|
||||
floorHP: getFloorMaxHP(startFloor),
|
||||
floorMaxHP: getFloorMaxHP(startFloor),
|
||||
maxFloorReached: startFloor,
|
||||
activeSpell: 'manaBolt',
|
||||
currentAction: 'meditate',
|
||||
castProgress: 0,
|
||||
spireMode: false,
|
||||
currentRoom: startRoom,
|
||||
clearedFloors: {},
|
||||
climbDirection: null,
|
||||
isDescending: false,
|
||||
startFloor,
|
||||
exitFloor: startFloor,
|
||||
currentRoomIndex: 0,
|
||||
roomsPerFloor: rooms,
|
||||
runId: 0,
|
||||
descentPeak: null,
|
||||
roomResetState: {},
|
||||
clearedRooms: {},
|
||||
isDescentComplete: false,
|
||||
golemancy: {
|
||||
golemDesigns: {},
|
||||
golemLoadout: [],
|
||||
activeGolems: [] as RuntimeActiveGolem[],
|
||||
lastSummonFloor: 0,
|
||||
},
|
||||
equipmentSpellStates: [],
|
||||
weaponCastProgress: {},
|
||||
comboHitCount: 0,
|
||||
floorHitCount: 0,
|
||||
meleeSwordProgress: {},
|
||||
guardianShield: 0,
|
||||
guardianShieldMax: 0,
|
||||
guardianBarrier: 0,
|
||||
guardianBarrierMax: 0,
|
||||
spells: startSpells,
|
||||
activityLog: [],
|
||||
achievements: {
|
||||
unlocked: [],
|
||||
progress: {},
|
||||
},
|
||||
totalSpellsCast: 0,
|
||||
totalDamageDealt: 0,
|
||||
totalCraftsCompleted: 0,
|
||||
};
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import type { CombatStore } from './combat-state.types';
|
||||
import {
|
||||
enterDescentMode, advanceRoomOrFloor, onEnterRoomDescend, createEnterSpireMode,
|
||||
} from './combat-descent-actions';
|
||||
import { createDefaultCombatState } from './combat-reset';
|
||||
import {
|
||||
onEnterLibraryRoom, tickNonCombatRoom, skipNonCombatRoom, stayLongerInRoom,
|
||||
} from './non-combat-room-actions';
|
||||
@@ -329,18 +330,7 @@ export const useCombatStore = create<CombatStore>()(
|
||||
},
|
||||
|
||||
resetCombat: (startFloor: number, spellsToKeep: string[] = []) => {
|
||||
const startSpells = makeInitialSpells(spellsToKeep);
|
||||
|
||||
set({
|
||||
currentFloor: startFloor,
|
||||
floorHP: getFloorMaxHP(startFloor),
|
||||
floorMaxHP: getFloorMaxHP(startFloor),
|
||||
maxFloorReached: startFloor,
|
||||
activeSpell: 'manaBolt',
|
||||
currentAction: 'meditate',
|
||||
castProgress: 0,
|
||||
spells: startSpells,
|
||||
});
|
||||
set(createDefaultCombatState(startFloor, spellsToKeep));
|
||||
},
|
||||
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user