# ============================================================================ # qdecl.ludic — a system whose query lives in its signature. # # system CleanBattle phase LateUpdate # query (b, p) [Battle, Pos, {Foe}] where b.hp <= 0 # { … } # # is the same thing as writing `for (b, p) in query [...] where ... { … }` around # the whole body — the loop header just moves into the declaration. The body runs # once per matching entity, and self() is that entity. # ============================================================================ program QueryDecl { property Battle { hp: int = 0, side: int = 0 } property Pos { x: int = 0, y: int = 0 } model Foe { Battle, Pos } handler Seed phase Start { spawn Foe { Battle { hp: 3, side: 1 } } spawn Foe { Battle { hp: 0, side: 1 } } spawn Foe { Battle { hp: -2, side: 0 } } } handler CleanBattle phase LateUpdate query (b, p) [Battle, Pos, {Foe}] where b.hp <= 0 and b.side == 1 { print_int(p.x) despawn self() } handler Census phase Render query (b) [Battle] { print_int(b.hp) } handler Bye phase Render { quit() } }