refactor: split bloated state types into State + Actions interfaces (issue #102)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m19s

- CombatState: split into CombatState (data) + CombatActions + CombatStore
- PrestigeState: split into PrestigeState (data) + PrestigeActions + PrestigeStore
- ManaState: split into ManaState (data) + ManaActions + ManaStore
- GameState: deprecated, removed from barrel exports
- crafting-actions: updated to use CraftingState instead of GameState
- combat-utils/mana-utils: replaced Pick<GameState,...> with focused interfaces
- DisciplineCardProps: split into Definition + Runtime + Callbacks
- stores/index.ts: now exports both State and Actions types
This commit is contained in:
2026-05-20 21:05:22 +02:00
parent ee893e8973
commit 8a7ddaae27
24 changed files with 411 additions and 321 deletions
@@ -1,11 +1,11 @@
// ─── Disenchanting Actions ─────────────────────────────────────────────────
import type { GameState, EquipmentInstance } from '../types';
import type { CraftingState } from '../stores/craftingStore.types';
export function disenchantEquipment(
instanceId: string,
get: () => GameState,
set: (fn: (state: GameState) => Partial<GameState>) => void
get: () => CraftingState,
set: (fn: (state: CraftingState) => Partial<CraftingState>) => void
) {
const state = get();
const instance = state.equipmentInstances[instanceId];
@@ -19,16 +19,15 @@ export function disenchantEquipment(
totalRecovered += Math.floor(ench.actualCost * recoveryRate);
}
set((state) => ({
rawMana: state.rawMana + totalRecovered,
set((s) => ({
equipmentInstances: {
...state.equipmentInstances,
...s.equipmentInstances,
[instanceId]: {
...instance,
enchantments: [],
usedCapacity: 0,
},
},
log: [`✨ Disenchanted ${instance.name}, recovered ${totalRecovered} mana.`, ...state.log.slice(0, 49)],
log: [`✨ Disenchanted ${instance.name}, recovered ${totalRecovered} mana.`],
}));
}