feat: discipline UI improvements - stat labels, prerequisites, mana type tab
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s

- Add player-friendly label field to statBonus in DisciplineDefinition
- Show prerequisite requirements on locked discipline cards
- Disable activate button for locked disciplines
- Restructure elemental attunement into dedicated 'Mana Types' tab
- Add checkDisciplinePrerequisites utility function
- Update store to enforce prerequisite checking on activation
- Split discipline-prerequisites tests into separate file
This commit is contained in:
2026-05-25 15:20:02 +02:00
parent 2c58186a67
commit 635b3b3f70
21 changed files with 313 additions and 82 deletions
+5
View File
@@ -8,9 +8,11 @@ import {
calculateManaDrain,
calculateStatBonus,
canProceedDiscipline,
checkDisciplinePrerequisites,
getUnlockedPerks,
} from '../utils/discipline-math';
import { baseDisciplines } from '../data/disciplines/base';
import { elementalAttunementDisciplines } from '../data/disciplines/elemental';
import { elementalRegenDisciplines } from '../data/disciplines/elemental-regen';
import { elementalRegenAdvancedDisciplines } from '../data/disciplines/elemental-regen-advanced';
import { enchanterDisciplines } from '../data/disciplines/enchanter';
@@ -23,6 +25,7 @@ import { MAX_CONCURRENT_DISCIPLINES } from '../types/disciplines';
const ALL_DISCIPLINES = [
...baseDisciplines,
...elementalAttunementDisciplines,
...elementalRegenDisciplines,
...elementalRegenAdvancedDisciplines,
...enchanterDisciplines,
@@ -86,6 +89,8 @@ export const useDisciplineStore = create<DisciplineStore>()(
}).length;
if (nonPaused >= s.concurrentLimit) return s;
if (!canProceedDiscipline(def, existing, gameState)) return s;
const prereqCheck = checkDisciplinePrerequisites(def, s.disciplines, ALL_DISCIPLINES);
if (!prereqCheck.canProceed) return s;
const discState = existing || { id, xp: 0, paused: false };
return {