System development, WIP
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { SYSTEM } from "../../config/system.mjs"
|
||||
|
||||
function normalizeMax(max, current) {
|
||||
return Math.max(max ?? 0, Number.isFinite(current) ? current : 0)
|
||||
}
|
||||
|
||||
export function numericOptions(min, max, current = null) {
|
||||
const resolvedMin = Math.min(min, Number.isFinite(current) ? current : min)
|
||||
const resolvedMax = normalizeMax(max, current)
|
||||
return Array.from({ length: Math.max(0, resolvedMax - resolvedMin) + 1 }, (_, index) => {
|
||||
const value = resolvedMin + index
|
||||
return { value, label: String(value) }
|
||||
})
|
||||
}
|
||||
|
||||
export function objectOptions(choices) {
|
||||
return Object.entries(choices).map(([value, label]) => ({ value, label }))
|
||||
}
|
||||
|
||||
export function dieMax(die) {
|
||||
if (typeof die !== "string" || !die.startsWith("d")) return 0
|
||||
const faces = Number.parseInt(die.slice(1), 10)
|
||||
return Number.isFinite(faces) ? faces : 0
|
||||
}
|
||||
|
||||
export function buildSharedSelectOptions() {
|
||||
return {
|
||||
abilityValues: numericOptions(-3, 6),
|
||||
conditionValues: numericOptions(0, 12),
|
||||
moraleValues: numericOptions(2, 12),
|
||||
armorPenalties: numericOptions(0, 6),
|
||||
shieldPenalties: numericOptions(0, 4),
|
||||
weaponCategories: objectOptions(SYSTEM.weaponCategories),
|
||||
usageDice: objectOptions(SYSTEM.usageDieChoices),
|
||||
armorDice: objectOptions(SYSTEM.armorDieChoices),
|
||||
omenDice: objectOptions(SYSTEM.omenDieChoices),
|
||||
resonanceList: objectOptions(SYSTEM.resonanceList),
|
||||
equipmentSubtypes: objectOptions(SYSTEM.equipmentSubtypes),
|
||||
artifactIds: objectOptions(SYSTEM.artifactChoices),
|
||||
featureIds: objectOptions(SYSTEM.featureChoices),
|
||||
}
|
||||
}
|
||||
|
||||
export function buildCharacterSelectOptions(system) {
|
||||
return {
|
||||
omenCurrent: numericOptions(0, dieMax(system.omens?.die), system.omens?.current),
|
||||
resonanceUsed: numericOptions(0, system.resonance?.max ?? 0, system.resonance?.used),
|
||||
artifactSyncUsed: numericOptions(0, system.syncLimit ?? 0, system.artifactSync?.used),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user