# scoped.ludic — a despawned entity drops out of subsequent event-driven work # (replaces tests/mod_c/scoped_mod.c, which tested entity-scoped foreign callbacks # swept on despawn). Here a @On(Tick) listener counts live Units each tick; after # the Unit is despawned, a further tick finds none. Fires twice before the kill, # not the third time. Prints 2. program Scoped { property Health { hp: int = 0 } model Unit { Health } var fires: int = 0 event Tick { } @On(Tick) handler OnTick { for (Health) in query [Health, {Unit}] { fires += 1 } } entry { spawn Unit { Health { hp: 1 } } emit Tick() # 1 live Unit -> fires = 1 emit Tick() # fires = 2 for (Health) in query [Health, {Unit}] { despawn self() } # kill the Unit emit Tick() # no live Units -> fires stays 2 print(fires) # 2 } }