'use client'; import { getTierMultiplier } from '@/lib/game/skill-evolution'; import { hasSpecial, SPECIAL_EFFECTS } from '@/lib/game/effects'; import { fmt, fmtDec } from '@/lib/game/stores'; import type { UnifiedEffects } from '@/lib/game/effects'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Separator } from '@/components/ui/separator'; import { Droplet } from 'lucide-react'; // Modular stores import { useSkillStore, usePrestigeStore, useManaStore } from '@/lib/game/stores'; export interface ManaStatsSectionProps { upgradeEffects: UnifiedEffects; maxMana: number; baseRegen: number; clickMana: number; meditationMultiplier: number; effectiveRegen: number; incursionStrength: number; manaCascadeBonus: number; manaWaterfallBonus: number; hasManaWaterfall: boolean; hasFlowSurge: boolean; hasManaOverflow: boolean; hasEternalFlow: boolean; } export function ManaStatsSection({ upgradeEffects, maxMana, baseRegen, clickMana, meditationMultiplier, effectiveRegen, incursionStrength, manaCascadeBonus, manaWaterfallBonus, hasManaWaterfall, hasFlowSurge, hasManaOverflow, hasEternalFlow, }: ManaStatsSectionProps) { // Get state from modular stores const skills = useSkillStore((s) => s.skills); const skillTiers = useSkillStore((s) => s.skillTiers); const prestigeUpgrades = usePrestigeStore((s) => s.prestigeUpgrades); const rawMana = useManaStore((s) => s.rawMana); return ( Mana Stats
Base Max Mana: 100
Mana Well Bonus: {(() => { const mw = skillTiers?.manaWell || 1; const tieredSkillId = mw > 1 ? `manaWell_t${mw}` : 'manaWell'; const level = skills[tieredSkillId] || skills.manaWell || 0; const tierMult = getTierMultiplier(tieredSkillId); return `+${fmt(level * 100 * tierMult)} (${level} lvl × 100 × ${tierMult}x tier)`; })()}
Prestige Mana Well: +{fmt((prestigeUpgrades.manaWell || 0) * 500)}
{upgradeEffects.maxManaBonus > 0 && (
Upgrade Mana Bonus: +{fmt(upgradeEffects.maxManaBonus)}
)} {upgradeEffects.maxManaMultiplier > 1 && (
Upgrade Mana Multiplier: ×{fmtDec(upgradeEffects.maxManaMultiplier, 2)}
)}
Total Max Mana: {fmt(maxMana)}
Base Regen: 2/hr
Mana Flow Bonus: {(() => { const mf = skillTiers?.manaFlow || 1; const tieredSkillId = mf > 1 ? `manaFlow_t${mf}` : 'manaFlow'; const level = skills[tieredSkillId] || skills.manaFlow || 0; const tierMult = getTierMultiplier(tieredSkillId); return `+${fmtDec(level * 1 * tierMult)}/hr (${level} lvl × 1 × ${tierMult}x tier)`; })()}
Mana Spring Bonus: +{(skills.manaSpring || 0) * 2}/hr
Prestige Mana Flow: +{fmtDec((prestigeUpgrades.manaFlow || 0) * 0.5)}/hr
Temporal Echo: ×{fmtDec(1 + (prestigeUpgrades.temporalEcho || 0) * 0.1, 2)}
Base Regen: {fmtDec(baseRegen, 2)}/hr
{upgradeEffects.regenBonus > 0 && (
Upgrade Regen Bonus: +{fmtDec(upgradeEffects.regenBonus, 2)}/hr
)} {upgradeEffects.permanentRegenBonus > 0 && (
Permanent Regen Bonus: +{fmtDec(upgradeEffects.permanentRegenBonus, 2)}/hr
)} {upgradeEffects.regenMultiplier > 1 && (
Upgrade Regen Multiplier: ×{fmtDec(upgradeEffects.regenMultiplier, 2)}
)}
{upgradeEffects.activeUpgrades.length > 0 && ( <>
Active Skill Upgrades
{upgradeEffects.activeUpgrades.map((upgrade, idx) => (
{upgrade.name} {upgrade.desc}
))}
)}
Click Mana Value: +{clickMana}
Mana Tap Bonus: +{skills.manaTap || 0}
Mana Surge Bonus: +{(skills.manaSurge || 0) * 3}
Mana Overflow: ×{fmtDec(1 + (skills.manaOverflow || 0) * 0.25, 2)}
1.5 ? 'text-purple-400' : 'text-gray-300'}`}> Meditation Multiplier: 1.5 ? 'text-purple-400' : 'text-gray-300'}`}> {fmtDec(meditationMultiplier, 2)}x
Effective Regen: {fmtDec(effectiveRegen, 2)}/hr
{incursionStrength > 0 && !hasSpecial(upgradeEffects, SPECIAL_EFFECTS.STEADY_STREAM) && (
Incursion Penalty: -{Math.round(incursionStrength * 100)}%
)} {hasSpecial(upgradeEffects, SPECIAL_EFFECTS.STEADY_STREAM) && incursionStrength > 0 && (
Steady Stream: Immune to incursion
)} {manaCascadeBonus > 0 && (
Mana Cascade Bonus: +{fmtDec(manaCascadeBonus, 2)}/hr
)} {manaWaterfallBonus > 0 && (
Mana Waterfall Bonus: +{fmtDec(manaWaterfallBonus, 2)}/hr
)} {hasManaWaterfall && (
Mana Waterfall: +0.25 regen per 100 max mana
)} {hasFlowSurge && (
Flow Surge: Clicks activate +100% regen for 1hr
)} {hasManaOverflow && (
Mana Overflow: Raw mana can exceed max by 20%
)} {hasEternalFlow && (
Eternal Flow: Regen immune to ALL penalties
)} {hasSpecial(upgradeEffects, SPECIAL_EFFECTS.MANA_TORRENT) && rawMana > maxMana * 0.75 && (
Mana Torrent: +50% regen (high mana)
)} {hasSpecial(upgradeEffects, SPECIAL_EFFECTS.DESPERATE_WELLS) && rawMana < maxMana * 0.25 && (
Desperate Wells: +50% regen (low mana)
)}
); } ManaStatsSection.displayName = "ManaStatsSection";