ludic.effects: effects_add / effects_add_after / effects_clear / effects_run, effects_sum / effects_has / effects_at / effects_live, an EffectEnded queue (ran out, pushed out by the bonus cap, crowded out of a full ring) and a System with its own save section. Nine test blocks in tests/effects_test.ludic. ludic.base: q_new collided with render3d's quaternion q_new the moment a game imported both, so the queue constructor is queue_new. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
47 lines
1.3 KiB
Text
47 lines
1.3 KiB
Text
# queries.ludic - what the rules ask: the sum for a kind right now, and what is running
|
|
function ef_live(e: Effect) -> bool { return e.delay < 0.01 }
|
|
|
|
# what the rules should add for a kind right now (a delayed one counts only once it begins)
|
|
export function effects_sum(kind: int) -> float {
|
|
let all = ef_all()
|
|
var t = 0.0
|
|
for i in 0 .. len(all) { if all[i].kind == kind and ef_live(all[i]) { t = t + all[i].mag } }
|
|
return t
|
|
}
|
|
|
|
export function effects_has(kind: int) -> bool {
|
|
let all = ef_all()
|
|
for i in 0 .. len(all) { if all[i].kind == kind and ef_live(all[i]) { return true } }
|
|
return false
|
|
}
|
|
|
|
export function effects_bonus_count() -> int {
|
|
let all = ef_all()
|
|
var n = 0
|
|
for i in 0 .. len(all) { if all[i].bonus { n += 1 } }
|
|
return n
|
|
}
|
|
|
|
# everything held, delayed or not, in the order added
|
|
export function effects_count() -> int { return len(ef_all()) }
|
|
|
|
# a copy, so a reader cannot change the ring
|
|
export function effects_at(i: int) -> Effect {
|
|
let src = ef_all()[i]
|
|
let e = new Effect
|
|
e.kind = src.kind
|
|
e.mag = src.mag
|
|
e.left = src.left
|
|
e.delay = src.delay
|
|
e.bonus = src.bonus
|
|
e.label = src.label
|
|
return e
|
|
}
|
|
|
|
# the indices of the ones that have begun, for a read-out
|
|
export function effects_live() -> []int {
|
|
let out = new []int
|
|
let all = ef_all()
|
|
for i in 0 .. len(all) { if ef_live(all[i]) { push(out, i) } }
|
|
return out
|
|
}
|