diff --git a/docs/circular-deps.txt b/docs/circular-deps.txt index 1816160..4576b75 100644 --- a/docs/circular-deps.txt +++ b/docs/circular-deps.txt @@ -1,4 +1,11 @@ # Circular Dependencies -Generated: 2026-05-27T19:08:46.353Z +Generated: 2026-05-28T07:32:48.513Z +Found: 1 circular chain(s) — these MUST be fixed before modifying involved files. -No circular dependencies found. ✅ +1. 1) effects/discipline-effects.ts > stores/discipline-slice.ts + +## How to fix +1. Identify which import in the chain can be extracted to a shared types/utils file. +2. Move the shared type or function there. +3. Both files import from the new shared module instead of each other. +4. Run: bunx madge --circular src/lib/game (should return clean) \ No newline at end of file diff --git a/docs/dependency-graph.json b/docs/dependency-graph.json index ed0a817..4234758 100644 --- a/docs/dependency-graph.json +++ b/docs/dependency-graph.json @@ -1,6 +1,6 @@ { "_meta": { - "generated": "2026-05-27T19:08:44.608Z", + "generated": "2026-05-28T07:32:46.775Z", "description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.", "usage": "To find what a file affects, search for its path in the VALUES. To find what a file depends on, look at its KEY entry." }, @@ -326,7 +326,6 @@ "data/equipment/feet.ts", "data/equipment/hands.ts", "data/equipment/head.ts", - "data/equipment/shields.ts", "data/equipment/swords.ts" ], "data/equipment/feet.ts": [ @@ -347,7 +346,6 @@ "data/equipment/feet.ts", "data/equipment/hands.ts", "data/equipment/head.ts", - "data/equipment/shields.ts", "data/equipment/swords.ts", "data/equipment/types.ts", "data/equipment/utils.ts" @@ -530,6 +528,7 @@ "data/disciplines/enchanter.ts", "data/disciplines/fabricator.ts", "data/disciplines/invoker.ts", + "effects/discipline-effects.ts", "types.ts", "types/disciplines.ts", "utils/discipline-math.ts", diff --git a/src/lib/game/stores/discipline-slice.ts b/src/lib/game/stores/discipline-slice.ts index 83c9dcb..2d5d220 100644 --- a/src/lib/game/stores/discipline-slice.ts +++ b/src/lib/game/stores/discipline-slice.ts @@ -6,11 +6,11 @@ import type { DisciplineState } from '../types/disciplines'; import type { ElementState } from '../types'; import { calculateManaDrain, + calculateStatBonus, canProceedDiscipline, checkDisciplinePrerequisites, getUnlockedPerks } from '../utils/discipline-math'; -import { computeDisciplineEffects } from '../effects/discipline-effects'; import { baseDisciplines } from '../data/disciplines/base'; import { elementalAttunementDisciplines } from '../data/disciplines/elemental'; import { elementalRegenDisciplines } from '../data/disciplines/elemental-regen'; @@ -184,7 +184,28 @@ export const useDisciplineStore = create()( } const oldXP = disc.xp; - const xpBonus = computeDisciplineEffects().bonuses.disciplineXpBonus || 0; + // Compute discipline XP bonus directly to avoid circular import + let xpBonus = 0; + for (const [did, dState] of Object.entries(newDisciplines)) { + if (!dState || dState.xp <= 0) continue; + const dDef = DISCIPLINE_MAP[did]; + if (!dDef) continue; + // Only disciplines with disciplineXpBonus stat contribute + if (dDef.statBonus.stat === 'disciplineXpBonus') { + xpBonus += calculateStatBonus( + dDef.statBonus.baseValue, + dState.xp, + dDef.scalingFactor + ); + } + // Perk bonuses for disciplineXpBonus + const perks = getUnlockedPerks(dDef, dState.xp); + for (const perk of perks) { + if (perk.bonus && perk.bonus.stat === 'disciplineXpBonus') { + xpBonus += perk.bonus.amount; + } + } + } const xpGain = 1 + xpBonus; newDisciplines[id] = { ...disc, xp: disc.xp + xpGain }; newXP += xpGain;