ludic/packages/ludic.jobs/system.ludic
2026-09-25 14:02:21 +03:00

54 lines
1.8 KiB
Text

# system.ludic - two systems, one per owner: "jobs" is this player's (personal jobs and boards, the
# done counts, the tick), "jobs.party" the party's, saved with the world
export function jobs_reset(base_st: mut BaseState, jobs_st: mut JobsState) -> void {
jobs__reset_scope(jobs_st, JOBS_SELF)
for g in 0 .. JOBS_GROUPS { jobs_st.jobs__done_n[g] = 0 }
q_clear(base_st, jobs_facts(base_st, jobs_st))
}
export function jobs_party_reset(jobs_st: mut JobsState) -> void { jobs__reset_scope(jobs_st, JOBS_PARTY) }
export function jobs_save(jobs_st: mut JobsState) -> Val {
jobs__ensure(jobs_st)
let v = jobs__save_scope(jobs_st, JOBS_SELF)
sv_put_ints(v, "done", jobs_st.jobs__done_n)
return v
}
export function jobs_load(jobs_st: mut JobsState, v: Val, version: int) -> void {
jobs__load_scope(jobs_st, JOBS_SELF, v)
let d = sv_ints(v, "done")
for g in 0 .. JOBS_GROUPS {
jobs_st.jobs__done_n[g] = 0
if g < len(d) { jobs_st.jobs__done_n[g] = d[g] }
}
}
export function jobs_party_save(jobs_st: mut JobsState) -> Val {
jobs__ensure(jobs_st)
return jobs__save_scope(jobs_st, JOBS_PARTY)
}
export function jobs_party_load(jobs_st: mut JobsState, v: Val, version: int) -> void { jobs__load_scope(jobs_st, JOBS_PARTY, v) }
function jobs__tick(base_st: mut BaseState, jobs_st: mut JobsState, t: Tick) -> void {
jobs__offers(base_st, jobs_st)
jobs_recheck(base_st, jobs_st)
}
export function jobs_system() -> System {
let s = system_new("jobs", PH_COMMIT)
s.reset = fn jobs_reset
s.tick = fn jobs__tick
s.save = fn jobs_save
s.load = fn jobs_load
return s
}
export function jobs_party_system() -> System {
let s = system_new("jobs.party", PH_COMMIT)
s.reset = fn jobs_party_reset
s.save = fn jobs_party_save
s.load = fn jobs_party_load
return s
}