diff --git a/docs/project-structure.txt b/docs/project-structure.txt index 73af7d9..bd78f51 100644 --- a/docs/project-structure.txt +++ b/docs/project-structure.txt @@ -182,6 +182,8 @@ Mana-Loop/ │ │ │ │ └── index.ts │ │ │ ├── AchievementsDisplay.tsx │ │ │ ├── ActionButtons.tsx +│ │ │ ├── ActivityLogPanel.tsx +│ │ │ ├── AttunementStatus.tsx │ │ │ ├── CalendarDisplay.tsx │ │ │ ├── ConfirmDialog.tsx │ │ │ ├── CraftingProgress.tsx diff --git a/src/app/components/LeftPanel.tsx b/src/app/components/LeftPanel.tsx index b47e0c1..278f98c 100644 --- a/src/app/components/LeftPanel.tsx +++ b/src/app/components/LeftPanel.tsx @@ -3,9 +3,11 @@ import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Mountain } from 'lucide-react'; +import { Card, CardContent } from '@/components/ui/card'; import { ManaDisplay } from '@/components/game'; import { ActionButtons } from '@/components/game'; -import { CalendarDisplay } from '@/components/game'; +import { AttunementStatus } from '@/components/game/AttunementStatus'; +import { ActivityLogPanel } from '@/components/game/ActivityLogPanel'; import { DebugName } from '@/lib/game/debug-context'; import { useGameStore, useManaStore, useSkillStore, useCombatStore, useCraftingStore, usePrestigeStore } from '@/lib/game/stores'; import { getUnifiedEffects } from '@/lib/game/effects'; @@ -15,52 +17,34 @@ import { computeTotalMaxMana, computeTotalRegen, computeTotalClickMana } from '@ export function LeftPanel() { const [isGathering, setIsGathering] = useState(false); - // Get state from modular stores const rawMana = useManaStore((s) => s.rawMana); const elements = useManaStore((s) => s.elements); const meditateTicks = useManaStore((s) => s.meditateTicks); - const skills = useSkillStore((s) => s.skills); const skillTiers = useSkillStore((s) => s.skillTiers); const skillUpgrades = useSkillStore((s) => s.skillUpgrades); - const prestigeUpgrades = usePrestigeStore((s) => s.prestigeUpgrades); - const equippedInstances = useCraftingStore((s) => s.equippedInstances); const equipmentInstances = useCraftingStore((s) => s.equipmentInstances); - const gatherMana = useGameStore((s) => s.gatherMana); - 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(); - }; - - const handleGatherEnd = () => { - setIsGathering(false); - }; + const handleGatherStart = () => { setIsGathering(true); gatherMana(); }; + const handleGatherEnd = () => { setIsGathering(false); }; useEffect(() => { if (!isGathering) return; - let lastGatherTime = 0; const minGatherInterval = 100; let animationFrameId: number; - const gatherLoop = (timestamp: number) => { if (timestamp - lastGatherTime >= minGatherInterval) { gatherMana(); @@ -68,36 +52,21 @@ export function LeftPanel() { } animationFrameId = requestAnimationFrame(gatherLoop); }; - animationFrameId = requestAnimationFrame(gatherLoop); return () => cancelAnimationFrame(animationFrameId); }, [isGathering, gatherMana]); - const upgradeEffects = getUnifiedEffects({ - skillUpgrades, - skillTiers, - equippedInstances, - equipmentInstances, - }); - - const maxMana = computeTotalMaxMana( - { skills, prestigeUpgrades, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, - upgradeEffects - ); - const baseRegen = computeTotalRegen( - { skills, prestigeUpgrades, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, - upgradeEffects - ); - const clickMana = computeTotalClickMana( - { skills, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, - upgradeEffects - ); + const upgradeEffects = getUnifiedEffects({ skillUpgrades, skillTiers, equippedInstances, equipmentInstances }); + const maxMana = computeTotalMaxMana({ skills, prestigeUpgrades, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, upgradeEffects); + const baseRegen = computeTotalRegen({ skills, prestigeUpgrades, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, upgradeEffects); + const clickMana = computeTotalClickMana({ skills, skillUpgrades, skillTiers, equippedInstances, equipmentInstances }, upgradeEffects); const meditationMultiplier = getMeditationBonus(meditateTicks, skills, upgradeEffects.meditationEfficiency); - const incursionStrength = getIncursionStrength(day, hour); + const incursionStrength = getIncursionStrength(useGameStore((s) => s.day), useGameStore((s) => s.hour)); const effectiveRegen = baseRegen * (1 - incursionStrength) * meditationMultiplier; return ( -
{def.desc}
+