The raw device layer the input proposal sketched, over the action maps + record/replay of #7. Beyond one key per frame, gameplay can read: - Multiple simultaneous held keys: Input.key_down / key_pressed / key_released, with clean rising/falling edges (hold left AND jump). - Analog from keys: Input.axis(neg, pos) and a normalized Input.vector(l,r,u,d) (diagonals scaled by 1/sqrt(2)), plus Input.strength(action). - Mouse: Input.mouse_x/y, mouse_dx/dy (per-frame delta), mouse_down(btn), wheel. - Gamepads: Input.pad_connected/pad_button/pad_axis (SDL-order buttons, -1..1 sticks); touch: Input.touch_count/touch_x/touch_y. The held set is fed by the platform when windowed — cocoa.ll now tracks keyDown/keyUp into a 256-bit held-key bitset (win_held) and the mouse buttons/wheel (win_mouse), gated so headless builds DCE the native calls — and by the Input.press / Input.set_mouse / Input.set_pad / Input.set_touch injection on every target (Godot-style action injection: replays, AI, network-fed input). Input.record / replay now snapshot the full per-frame device state (held set + mouse), extending #7's single-key tape. Everything is integer and deterministic, so the same inputs reproduce the same frame on every run and headless. The gamepad/touch native hardware bindings (GameController.framework / NSTouch) feed the same injected state and are the one remaining platform-glue follow-up; the software layer, semantics and replay are complete and driven deterministically today. Worked example + regression: examples/library/input_device.ludic (1 1 0 1 0 1 71 -71 5 1 3 1 2 1 0 0 1, injection-driven headless). 23 new docs/language/input pages. Full suite 78 passed, self-host C-free fixpoint intact, no golden drift; cocoa.ll assembles and a windowed build links. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
14 lines
873 B
Markdown
14 lines
873 B
Markdown
bump: minor
|
|
type: feat
|
|
**Input device layer (#50).** Beyond one key per frame, gameplay can now read
|
|
multiple simultaneous held keys (`Input.key_down` / `key_pressed` /
|
|
`key_released`), analog `Input.axis` and a normalized `Input.vector`, the mouse
|
|
(`Input.mouse_x/y`, `mouse_dx/dy`, `mouse_down`, `wheel`), gamepads
|
|
(`Input.pad_button` / `pad_axis` / `pad_connected`) and touch
|
|
(`Input.touch_count` / `touch_x/y`). The held set is fed by the window when
|
|
windowed — cocoa.ll now tracks keyDown/keyUp into a held-key bitset and the mouse
|
|
buttons/wheel — and by the `Input.press` / `Input.set_mouse` / `Input.set_pad` /
|
|
`Input.set_touch` injection on every target (Godot-style action injection, for
|
|
replays, AI, and network-fed input). All integer and deterministic, and
|
|
`Input.record` / `replay` snapshot the full per-frame device state, extending
|
|
#7's single-key tape.
|