feat: discipline UI improvements - stat labels, prerequisites, mana type tab
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s
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:
@@ -87,6 +87,34 @@ export function canProceedDiscipline(
|
||||
return element && element.current >= drain;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a discipline's prerequisites are met.
|
||||
* Returns { canProceed: boolean, missingPrereqs: string[] }
|
||||
* where missingPrereqs is a list of prerequisite discipline names that are not yet unlocked.
|
||||
*/
|
||||
export function checkDisciplinePrerequisites(
|
||||
discipline: DisciplineDefinition,
|
||||
allDisciplines: Record<string, DisciplineState>,
|
||||
allDefinitions: DisciplineDefinition[],
|
||||
): { canProceed: boolean; missingPrereqs: string[] } {
|
||||
if (!discipline.requires || discipline.requires.length === 0) {
|
||||
return { canProceed: true, missingPrereqs: [] };
|
||||
}
|
||||
|
||||
const missingPrereqs: string[] = [];
|
||||
|
||||
for (const reqId of discipline.requires) {
|
||||
const reqState = allDisciplines[reqId];
|
||||
// A prerequisite is met if the discipline has XP > 0 (has been practiced)
|
||||
if (!reqState || reqState.xp <= 0) {
|
||||
const reqDef = allDefinitions.find((d) => d.id === reqId);
|
||||
missingPrereqs.push(reqDef?.name ?? reqId);
|
||||
}
|
||||
}
|
||||
|
||||
return { canProceed: missingPrereqs.length === 0, missingPrereqs };
|
||||
}
|
||||
|
||||
/**
|
||||
* Get unlocked perks for a discipline
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user