52 lines
2.0 KiB
JavaScript
52 lines
2.0 KiB
JavaScript
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),
|
|
weaponProperties: Object.entries(SYSTEM.weaponProperties).map(([key, p]) => ({ value: key, label: p.label, hint: p.hint })),
|
|
weightCategories: objectOptions(SYSTEM.weightCategories),
|
|
usageDice: objectOptions(SYSTEM.usageDieChoices),
|
|
armorDice: objectOptions(SYSTEM.armorDieChoices),
|
|
omenDice: objectOptions(SYSTEM.omenDieChoices),
|
|
resonanceList: objectOptions(SYSTEM.resonanceList),
|
|
equipmentSubtypes: objectOptions(SYSTEM.equipmentSubtypes),
|
|
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),
|
|
}
|
|
}
|