feat(packages): ludic.settings - a settings store as data: typed reads and writes by id, clamping, rescue values, per-key persistence, a fact per change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3514d46954
commit
4318adc98c
9 changed files with 338 additions and 0 deletions
35
packages/ludic.settings/rules.ludic
Normal file
35
packages/ludic.settings/rules.ludic
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# ludic.settings/rules.ludic - the whole store at once: every setting to its default, every one
|
||||
# held to its range, and the rescue set. None of these is news: whoever calls them applies it all
|
||||
export function settings_reset_all() -> void {
|
||||
sg_init()
|
||||
for i in 0 .. len(sg_defs) {
|
||||
sg_num[i] = sg_defs[i].num
|
||||
sg_text[i] = sg_defs[i].text
|
||||
}
|
||||
}
|
||||
|
||||
# a hand-edited file, or one from a build with more choices, never hands the game a value it has
|
||||
# no case for
|
||||
export function settings_clamp_all() -> void {
|
||||
sg_init()
|
||||
for i in 0 .. len(sg_defs) { sg_num[i] = settings_held(i, sg_num[i]) }
|
||||
}
|
||||
|
||||
# the values every machine can run: each setting marked `rescue` back to its default, and the
|
||||
# rest (keys, language, volume) left the player's
|
||||
export function settings_rescue() -> void {
|
||||
sg_init()
|
||||
for i in 0 .. len(sg_defs) {
|
||||
if sg_defs[i].rescue {
|
||||
sg_num[i] = sg_defs[i].num
|
||||
sg_text[i] = sg_defs[i].text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# whether a setting is on the rescue list at its safe value
|
||||
export function settings_is_safe(id: int) -> bool {
|
||||
let d = sg_defs[id]
|
||||
if not d.rescue { return true }
|
||||
return sg_num[id] == d.num and sg_text[id] == d.text
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue