# scenes — one active scene at a time, each grouping handlers into layers behind # an implicit active-scene register (see LANGUAGE.md §"Scenes & layers"). # # Running it (feed a few keystrokes so the loop ticks) prints: # 1000 1 101 102 2 3 900 201 900 202 900 # 1000 Boot (a global handler) runs once at Start # 1 Title is `start`; its `on enter` fires at boot # 101 frame 1 Update: only Title.Main.Tick runs (Play is not active) # 102 frame 2 Update: Tick reaches 2 -> `become Play`… # 2 3 …which runs Title's `on exit` then Play's `on enter` # 900 Play renders the same frame it is entered (Hud.Draw) # 201 900 frame 3: Play.World.Step, then Hud.Draw # 202 900 frame 4: Step reaches 2 -> quit(); Hud.Draw paints the last frame # # bin/x game-build bin/ludicc examples/lang/scenes.ludic /tmp/scenes # printf 'aaaa' | /tmp/scenes program SceneDemo { var counter: int = 0 handler Boot phase Start { counter = 0; print(1000) } scene Title start { on enter { print(1) } on exit { print(2) } layer Main { handler Tick phase Update { counter = counter + 1 print(100 + counter) if counter >= 2 { become Play } } } } scene Play { on enter { print(3); counter = 0 } on exit { print(4) } layer World { handler Step phase Update { counter = counter + 1 print(200 + counter) if counter >= 2 { quit() } } } layer Hud { handler Draw phase Render { print(900) } } } }