[medium] Discipline UI doesn't show other requirements (prerequisites) for practicing #133

Closed
opened 2026-05-25 11:36:13 +02:00 by Anexim · 2 comments
Owner

UI Issue: Discipline cards don't show prerequisite requirements

Description

Some disciplines have a requires field (array of discipline IDs that must be completed first), but this is never shown in the UI. Players can't tell why they can't activate a discipline.

Current State

  • DisciplineDefinition.requires?: string[] exists in the type system
  • Example: study-advanced-weapon-enchantments has requires: ['study-basic-weapon-enchantments']
  • Example: study-intermediate-spell-enchantments has requires: ['study-basic-spell-enchantments']
  • Example: study-special-enchantments has requires: ['study-advanced-weapon-enchantments']
  • The DisciplineCardDefinition interface does NOT include requires
  • The DisciplineCard component never renders requirements
  • The activate() function in discipline-slice.ts checks canProceedDiscipline() but the UI gives no feedback

Expected Behavior

Each discipline card should show:

  1. Prerequisites — list of required disciplines that must be unlocked first
  2. Locked/unlocked status — visually distinguish locked vs available disciplines
  3. Why it's locked — if requirements aren't met, show what's needed (e.g., "Requires: Study Basic Weapon Enchantments")
  4. Element unlock requirements — if the discipline's mana type isn't unlocked, show that too

Files Involved

  • src/components/game/tabs/DisciplinesTab.tsxDisciplineCardDefinition needs requires, card needs to render locked state
  • src/lib/game/types/disciplines.tsDisciplineDefinition.requires already exists
  • src/lib/game/stores/discipline-slice.tscanProceedDiscipline() already checks requirements but UI doesn't reflect them

Suggested Fix

  1. Add requires?: string[] to DisciplineCardDefinition
  2. Pass requires from discipline definitions in the tab mapping
  3. Render a "Requires: [discipline name]" section on locked cards
  4. Disable the Activate button and show why it's disabled
  5. Also check if the required mana type is unlocked (element unlock status)
## UI Issue: Discipline cards don't show prerequisite requirements ### Description Some disciplines have a `requires` field (array of discipline IDs that must be completed first), but this is never shown in the UI. Players can't tell why they can't activate a discipline. ### Current State - `DisciplineDefinition.requires?: string[]` exists in the type system - Example: `study-advanced-weapon-enchantments` has `requires: ['study-basic-weapon-enchantments']` - Example: `study-intermediate-spell-enchantments` has `requires: ['study-basic-spell-enchantments']` - Example: `study-special-enchantments` has `requires: ['study-advanced-weapon-enchantments']` - The `DisciplineCardDefinition` interface does NOT include `requires` - The `DisciplineCard` component never renders requirements - The `activate()` function in `discipline-slice.ts` checks `canProceedDiscipline()` but the UI gives no feedback ### Expected Behavior Each discipline card should show: 1. **Prerequisites** — list of required disciplines that must be unlocked first 2. **Locked/unlocked status** — visually distinguish locked vs available disciplines 3. **Why it's locked** — if requirements aren't met, show what's needed (e.g., "Requires: Study Basic Weapon Enchantments") 4. **Element unlock requirements** — if the discipline's mana type isn't unlocked, show that too ### Files Involved - `src/components/game/tabs/DisciplinesTab.tsx` — `DisciplineCardDefinition` needs `requires`, card needs to render locked state - `src/lib/game/types/disciplines.ts` — `DisciplineDefinition.requires` already exists - `src/lib/game/stores/discipline-slice.ts` — `canProceedDiscipline()` already checks requirements but UI doesn't reflect them ### Suggested Fix 1. Add `requires?: string[]` to `DisciplineCardDefinition` 2. Pass `requires` from discipline definitions in the tab mapping 3. Render a "Requires: [discipline name]" section on locked cards 4. Disable the Activate button and show why it's disabled 5. Also check if the required mana type is unlocked (element unlock status)
Anexim added the ai:todo label 2026-05-25 11:36:13 +02:00
n8n-gitea was assigned by Anexim 2026-05-25 11:36:13 +02:00
Author
Owner

Fix applied for Issue #133: Discipline cards now show prerequisites and locked state

Changes Made

New utility function (src/lib/game/utils/discipline-math.ts):

  • Added checkDisciplinePrerequisites() — checks if a discipline's requires prerequisites are met by looking at discipline states (XP > 0 means unlocked). Returns { canProceed: boolean, missingPrereqs: string[] } with human-readable names of missing prerequisites.

Store enforcement (src/lib/game/stores/discipline-slice.ts):

  • Updated activate() to call checkDisciplinePrerequisites() and block activation if prerequisites aren't met.

UI component (src/components/game/tabs/DisciplinesTab.tsx):

  • Added isLocked and missingPrereqs to DisciplineCardRuntime interface
  • Added requires to DisciplineCardDefinition interface
  • Locked cards render with reduced opacity and gray border
  • Shows "Requires: [discipline name]" in red text when locked
  • Activate button is disabled and shows "Locked" when prerequisites aren't met
  • Uses checkDisciplinePrerequisites() to determine locked state per card

Verification: TypeScript compiles cleanly, all 42 discipline-math tests + 11 store-discipline tests pass.

**Fix applied for Issue #133: Discipline cards now show prerequisites and locked state** ### Changes Made **New utility function** (`src/lib/game/utils/discipline-math.ts`): - Added `checkDisciplinePrerequisites()` — checks if a discipline's `requires` prerequisites are met by looking at discipline states (XP > 0 means unlocked). Returns `{ canProceed: boolean, missingPrereqs: string[] }` with human-readable names of missing prerequisites. **Store enforcement** (`src/lib/game/stores/discipline-slice.ts`): - Updated `activate()` to call `checkDisciplinePrerequisites()` and block activation if prerequisites aren't met. **UI component** (`src/components/game/tabs/DisciplinesTab.tsx`): - Added `isLocked` and `missingPrereqs` to `DisciplineCardRuntime` interface - Added `requires` to `DisciplineCardDefinition` interface - Locked cards render with reduced opacity and gray border - Shows "Requires: [discipline name]" in red text when locked - Activate button is disabled and shows "Locked" when prerequisites aren't met - Uses `checkDisciplinePrerequisites()` to determine locked state per card **Verification**: TypeScript compiles cleanly, all 42 discipline-math tests + 11 store-discipline tests pass.
Author
Owner

Fixed — discipline cards now show prerequisites, locked state, and which requirements are missing.

Fixed — discipline cards now show prerequisites, locked state, and which requirements are missing.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Anexim/Mana-Loop#133