From dc1aad3700f1d47faee57997a638a0ec4be6cfe0 Mon Sep 17 00:00:00 2001 From: Refactoring Agent <[email protected]> Date: Tue, 5 May 2026 11:10:33 +0200 Subject: [PATCH] Fix LeftPanel.tsx to use modular stores instead of legacy useGameStore - Added useCraftingStore import for crafting progress fields - Changed spireMode/enterSpireMode to useCombatStore - Changed currentStudyTarget to useSkillStore - Changed crafting progress fields to useCraftingStore - Added useCraftingStore export to stores/index.ts - Kept useGameStore only for gatherMana, day, hour --- src/app/components/LeftPanel.tsx | 23 +++++++++++-------- .../game/tabs/EquipmentControls.tsx | 4 +--- .../game/tabs/EquipmentInventory.tsx | 4 +--- .../game/tabs/EquipmentSlotGrid.tsx | 16 +++++++------ src/components/game/tabs/PrestigeTab.tsx | 3 ++- src/lib/game/stores/combatStore.ts | 11 +++++++++ src/lib/game/stores/index.ts | 9 ++++---- 7 files changed, 42 insertions(+), 28 deletions(-) diff --git a/src/app/components/LeftPanel.tsx b/src/app/components/LeftPanel.tsx index 6d70dd1..f285fd1 100644 --- a/src/app/components/LeftPanel.tsx +++ b/src/app/components/LeftPanel.tsx @@ -7,7 +7,7 @@ import { ManaDisplay } from '@/components/game'; import { ActionButtons } from '@/components/game'; import { CalendarDisplay } from '@/components/game'; import { DebugName } from '@/lib/game/debug-context'; -import { useGameStore, useManaStore, useSkillStore, useCombatStore } from '@/lib/game/stores'; +import { useGameStore, useManaStore, useSkillStore, useCombatStore, useCraftingStore } from '@/lib/game/stores'; import { getUnifiedEffects } from '@/lib/game/effects'; import { computeMaxMana, computeClickMana, getMeditationBonus } from '@/lib/game/stores'; @@ -24,18 +24,21 @@ export function LeftPanel() { const skillUpgrades = useSkillStore((s) => s.skillUpgrades); const gatherMana = useGameStore((s) => s.gatherMana); - const spireMode = useGameStore((s) => s.spireMode); - const currentAction = useCombatStore((s) => s.currentAction); - const currentStudyTarget = useGameStore((s) => s.currentStudyTarget); - const designProgress = useGameStore((s) => s.designProgress); - const designProgress2 = useGameStore((s) => s.designProgress2); - const preparationProgress = useGameStore((s) => s.preparationProgress); - const applicationProgress = useGameStore((s) => s.applicationProgress); - const equipmentCraftingProgress = useGameStore((s) => s.equipmentCraftingProgress); - const enterSpireMode = useGameStore((s) => s.enterSpireMode); const day = useGameStore((s) => s.day); const hour = useGameStore((s) => s.hour); + const spireMode = useCombatStore((s) => s.spireMode); + const enterSpireMode = useCombatStore((s) => s.enterSpireMode); + const currentAction = useCombatStore((s) => s.currentAction); + + const currentStudyTarget = useSkillStore((s) => s.currentStudyTarget); + + const designProgress = useCraftingStore((s) => s.designProgress); + const designProgress2 = useCraftingStore((s) => s.designProgress2); + const preparationProgress = useCraftingStore((s) => s.preparationProgress); + const applicationProgress = useCraftingStore((s) => s.applicationProgress); + const equipmentCraftingProgress = useCraftingStore((s) => s.equipmentCraftingProgress); + const handleGatherStart = () => { setIsGathering(true); gatherMana(); diff --git a/src/components/game/tabs/EquipmentControls.tsx b/src/components/game/tabs/EquipmentControls.tsx index 09460c9..cbe8e2a 100644 --- a/src/components/game/tabs/EquipmentControls.tsx +++ b/src/components/game/tabs/EquipmentControls.tsx @@ -1,13 +1,12 @@ 'use client'; import { EquipmentSlot } from '@/lib/game/data/equipment'; -import type { GameStore } from '@/lib/game/types'; +// GameStore import removed - not used import { ActionButton } from '@/components/ui/action-button'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { X } from 'lucide-react'; interface EquipmentControlsProps { - store: GameStore; onUnequip: (slot: EquipmentSlot) => void; onDelete: (instanceId: string, name: string) => void; selectedSlot: EquipmentSlot | null; @@ -17,7 +16,6 @@ interface EquipmentControlsProps { } export function EquipmentControls({ - store, onUnequip, onDelete, selectedSlot, diff --git a/src/components/game/tabs/EquipmentInventory.tsx b/src/components/game/tabs/EquipmentInventory.tsx index 49cddde..72dcdbe 100644 --- a/src/components/game/tabs/EquipmentInventory.tsx +++ b/src/components/game/tabs/EquipmentInventory.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import { EquipmentSlot } from '@/lib/game/data/equipment'; import { EQUIPMENT_TYPES } from '@/lib/game/data/equipment'; -import type { GameStore, EquipmentInstance } from '@/lib/game/types'; +import type { EquipmentInstance } from '@/lib/game/types'; import { GameCard } from '@/components/ui/game-card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -17,7 +17,6 @@ import { import { EnchantmentsPanel } from './EnchantmentsPanel'; interface EquipmentInventoryProps { - store: GameStore; unequippedItems: EquipmentInstance[]; onEquip: (instanceId: string, slot: EquipmentSlot) => void; onDelete: (instanceId: string, name: string) => void; @@ -27,7 +26,6 @@ interface EquipmentInventoryProps { } export function EquipmentInventory({ - store, unequippedItems, onEquip, onDelete, diff --git a/src/components/game/tabs/EquipmentSlotGrid.tsx b/src/components/game/tabs/EquipmentSlotGrid.tsx index 2aa4788..c3cf264 100644 --- a/src/components/game/tabs/EquipmentSlotGrid.tsx +++ b/src/components/game/tabs/EquipmentSlotGrid.tsx @@ -1,8 +1,8 @@ 'use client'; import { EquipmentSlot } from '@/lib/game/data/equipment'; -import { SLOT_NAMES } from '@/lib/game/data/equipment'; -import type { GameStore, EquipmentInstance } from '@/lib/game/types'; +import { SLOT_NAMES, EQUIPMENT_TYPES } from '@/lib/game/data/equipment'; +import type { EquipmentInstance } from '@/lib/game/types'; import { GameCard } from '@/components/ui/game-card'; import { Badge } from '@/components/ui/badge'; import { AlertCircle, Sword, Shield, HardHat, Shirt, Hand, Footprints, Gem } from 'lucide-react'; @@ -23,7 +23,8 @@ const SLOT_ICONS: Record = { }; interface EquipmentSlotGridProps { - store: GameStore; + equippedInstances: Record; + equipmentInstances: Record; selectedSlot: EquipmentSlot | null; onSlotClick: (slot: EquipmentSlot) => void; onUnequip: (slot: EquipmentSlot) => void; @@ -32,7 +33,8 @@ interface EquipmentSlotGridProps { } export function EquipmentSlotGrid({ - store, + equippedInstances, + equipmentInstances, selectedSlot, onSlotClick, onUnequip, @@ -40,9 +42,9 @@ export function EquipmentSlotGrid({ SLOT_GROUPS, }: EquipmentSlotGridProps) { const renderSlot = (slot: EquipmentSlot) => { - const instanceId = store.equippedInstances[slot]; - const instance = instanceId ? store.equipmentInstances[instanceId] : null; - const equipmentType = instance ? (store as any).EQUIPMENT_TYPES?.[instance.typeId] : null; + const instanceId = equippedInstances[slot]; + const instance = instanceId ? equipmentInstances[instanceId] : null; + const equipmentType = instance ? EQUIPMENT_TYPES?.[instance.typeId] : null; const blocked = isSlotBlocked(slot); const isEmpty = !instance; const SlotIcon = SLOT_ICONS[slot]; diff --git a/src/components/game/tabs/PrestigeTab.tsx b/src/components/game/tabs/PrestigeTab.tsx index 7d69ead..ab7f106 100644 --- a/src/components/game/tabs/PrestigeTab.tsx +++ b/src/components/game/tabs/PrestigeTab.tsx @@ -15,6 +15,7 @@ import { import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; +import { ScrollArea } from '@/components/ui/scroll-area'; import { fmt } from '@/lib/game/stores'; export function PrestigeTab() { @@ -51,7 +52,7 @@ export function PrestigeTab() { const effect = upgradeEffects ? upgradeEffects.specials.has(id) : false; return ( - + {def.name} diff --git a/src/lib/game/stores/combatStore.ts b/src/lib/game/stores/combatStore.ts index 3fa210b..7e1a040 100755 --- a/src/lib/game/stores/combatStore.ts +++ b/src/lib/game/stores/combatStore.ts @@ -20,6 +20,9 @@ export interface CombatState { currentAction: GameAction; castProgress: number; + // Spire mode + spireMode: boolean; + // Spells spells: Record; @@ -37,6 +40,9 @@ export interface CombatState { learnSpell: (spellId: string) => void; setSpellState: (spellId: string, state: Partial) => void; + // Spire mode + enterSpireMode: () => void; + // Combat tick processCombatTick: ( skills: Record, @@ -62,6 +68,7 @@ export const useCombatStore = create()( activeSpell: 'manaBolt', currentAction: 'meditate', castProgress: 0, + spireMode: false, spells: { manaBolt: { learned: true, level: 1, studyProgress: 0 }, }, @@ -112,6 +119,10 @@ export const useCombatStore = create()( set({ castProgress: progress }); }, + enterSpireMode: () => { + set({ spireMode: true }); + }, + learnSpell: (spellId: string) => { set((state) => ({ spells: { diff --git a/src/lib/game/stores/index.ts b/src/lib/game/stores/index.ts index f2686a5..592266b 100755 --- a/src/lib/game/stores/index.ts +++ b/src/lib/game/stores/index.ts @@ -1,4 +1,4 @@ -// ─── Store Index ────────────────────────────────────────────────────────────── +// ─── Store Index ────────────────────────────────────────── // Exports all stores and re-exports commonly used utilities // Stores @@ -17,6 +17,9 @@ export type { SkillState } from './skillStore'; export { useCombatStore, makeInitialSpells } from './combatStore'; export type { CombatState } from './combatStore'; +export { useCraftingStore } from './craftingStore'; +export type { CraftingState, CraftingActions } from './craftingStore'; + export { useGameStore } from './gameStore'; export { useGameLoop } from './gameHooks'; export type { GameCoordinatorState, GameCoordinatorStore } from './gameStore'; @@ -31,16 +34,14 @@ export { computeRegen, computeEffectiveRegen, computeClickMana, - getElementalBonus, + getMeditationBonus, getBoonBonuses, calcDamage, calcInsight, - getMeditationBonus, getIncursionStrength, canAffordSpellCost, deductSpellCost, } from '../utils'; export { computeElementMax } from '../store-modules/computed-stats'; - export { getStudySpeedMultiplier, getStudyCostMultiplier } from '../constants';