feat(input): #83 Input Manager + auto-commit the device layer in the frame loop
Fixes the papercut: the generated frame loop called rt_poll() (feeding only Input.key) but never input_poll(), so Input.active/key_down/mouse/pad read empty unless the game called Input.poll() by hand. The loop now calls input_poll() when the game uses any Input runtime method — committing the held-key/mouse/gamepad state, and record/replay — and stores its return as the frame key so Input.key still works. A game using no Input runtime keeps the plain rt_poll path, byte-identical. Adds the Input-Manager API: Input.action(name,key) ships a default binding (kept if already bound, so a rebind/loaded map isn't clobbered), Input.bind_pad(name,button) makes an action device-agnostic (keyboard OR pad), and Input.active/just_pressed/just_released read the multi-key device layer with clean on-press/on-release edges (deterministic, dispatch-free — a handler polls the edge; a replay fires identically). Examples input_manager + input_auto, 5 docs pages. Full suite 107/0, goldens byte-identical, fixpoint holds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6a83c28e05
commit
bccd26fb29
14 changed files with 31773 additions and 31127 deletions
|
|
@ -209,6 +209,13 @@ function emit_ns_call(ns: pointer, meth: pointer, e: Node) -> Val {
|
|||
if (meth == "pressed") { bare = "input_pressed" }
|
||||
if (meth == "record") { bare = "input_record" }
|
||||
if (meth == "replay") { bare = "input_replay" }
|
||||
# Input Manager (#83): default bindings + device-agnostic actions that read the
|
||||
# multi-key device layer (the frame loop now commits it automatically).
|
||||
if (meth == "action") { bare = "input_default"; push(labels, "action"); push(labels, "key") }
|
||||
if (meth == "bind_pad") { bare = "input_bind_pad"; push(labels, "action"); push(labels, "button") }
|
||||
if (meth == "active") { bare = "input_active"; push(labels, "action") }
|
||||
if (meth == "just_pressed") { bare = "input_just_pressed"; push(labels, "action") }
|
||||
if (meth == "just_released") { bare = "input_just_released"; push(labels, "action") }
|
||||
# device layer (#50): multi-key held state, analog axes/vectors, mouse,
|
||||
# gamepads, touch — reached as ordinary @fn_input_* calls into input.ludic.
|
||||
if (meth == "key_down") { bare = "input_key_down"; push(labels, "key") }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue