ludic.base's Queue<T> carries a QueueTag (its name and pending count): queue_new(name), q_push(q, v), q_drain(q), q_clear(q) take no BaseState, and core_undrained(tags) names the given queues still holding facts. A reducer on a package's state can now call that package's verbs (wallet_earn(wallet_st, n)). ludic migrate state --prune (ludicc --migrate-prune) takes out each state parameter a function no longer uses, nor anything it calls, and the argument that fills it - including an argument for a parameter the callee has dropped, which is taken out before the call is checked, so a generic's T is told by the argument that says it. A reducer keeps its state. --dry-run now counts the edits it would make. Every package was moved with it: 608 base_st parameters and their arguments, 1889 edits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
655 B
Text
25 lines
655 B
Text
# state.ludic - the body, its camera, and the queue of what happened to it
|
|
const chr_pi: float = 3.14159265
|
|
|
|
|
|
|
|
|
|
|
|
# the camera: an orbit round a pivot at the chest, or the eyes
|
|
|
|
|
|
|
|
export function char_facts(character_st: mut CharacterState) -> Queue<CharacterFact> {
|
|
if character_st.chr_fact_q == null { character_st.chr_fact_q = queue_new("character.facts") }
|
|
return character_st.chr_fact_q
|
|
}
|
|
|
|
function chr_say(character_st: mut CharacterState, what: int, v: float) -> void {
|
|
let f = new CharacterFact
|
|
f.what = what
|
|
f.x = character_st.chr_x
|
|
f.y = character_st.chr_y
|
|
f.z = character_st.chr_z
|
|
f.v = v
|
|
q_push(char_facts(character_st), f)
|
|
}
|