# a toy mechanic: a pack of counts by kind, saved in its own section module toy_pack uses ludic_base numbers float import "ludic.base" export state ToyPackState { counts: []int = null } export function pack_add(toy_pack_st: mut ToyPackState, kind: int, n: int) -> void { toy_pack_st.counts[kind] = toy_pack_st.counts[kind] + n } export function pack_count(toy_pack_st: ToyPackState, kind: int) -> int { return toy_pack_st.counts[kind] } function pack_reset(toy_pack_st: mut ToyPackState) -> void { toy_pack_st.counts = new []int for i in 0 .. 3 { push(toy_pack_st.counts, 0) } } function pack_save(toy_pack_st: ToyPackState) -> Val { let v = Value.object() sv_put_ints(v, "counts", toy_pack_st.counts) return v } function pack_load(toy_pack_st: mut ToyPackState, v: Val, version: int) -> void { pack_reset(toy_pack_st) let xs = sv_ints(v, "counts") for i in 0 .. len(xs) { if i < len(toy_pack_st.counts) { toy_pack_st.counts[i] = xs[i] } } } export function pack_system() -> System { let s = system_new("pack", PH_COMMIT) s.reset = fn pack_reset s.save = fn pack_save s.load = fn pack_load return s }