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>
23 lines
920 B
Markdown
23 lines
920 B
Markdown
---
|
|
id: input-action
|
|
name: Input.action
|
|
category: input
|
|
kind: namespace-method
|
|
tokens: Input.action
|
|
sig: Input.action(action: str, key: int) -> void
|
|
tip: Register a default key binding for an action (kept if already bound).
|
|
order: 31
|
|
ns: Input
|
|
member: action
|
|
---
|
|
|
|
Registers a <em>default</em> keyboard binding: it binds <code>key</code> to the action only if the action has no key bound yet. Ship your defaults with <code>Input.action</code> in a Boot handler; a player's later <a href="input-rebind.html"><code>Input.rebind</code></a> (or a loaded key-map) is not clobbered, and re-running the defaults is idempotent. Combine with <a href="input-bind_pad.html"><code>Input.bind_pad</code></a> for a device-agnostic action, and read it with <a href="input-active.html"><code>Input.active</code></a>.
|
|
|
|
```ludic
|
|
program Defaults {
|
|
entry {
|
|
Input.action("jump", ' ')
|
|
if Input.active("jump") { print(1) }
|
|
}
|
|
}
|
|
```
|