Files
fn_registry/cpp/functions/gamedev/input_unified.md
T
egutierrez a27dcc028c docs(capabilities): unifica tag gamedev en gamedev-2d + separa gamedev-engine
El doctor reportaba el dominio gamedev en doble FAIL: el tag plano `gamedev`
(44 funciones) como `ungrouped_candidate` y la pagina `gamedev-2d.md` como
`doc_orphan`. Causa raiz: el INDEX declaraba `[gamedev](gamedev-2d.md)` y el
auditor solo registra el slug cuando label==target, asi que ni casaba la
pagina ni declaraba el tag.

Al revisar las 44 funciones habia dos clusters reales bajo el mismo tag, asi
que se separan en dos grupos honestos:

- gamedev-2d (tag canonico): 31 builders de workflow ComfyUI + 5 de apoyo
  (post-proceso + puente a Godot) = 36. Se elimina el tag plano `gamedev` de
  los builders (ya tenian `gamedev-2d`) y se reemplaza por `gamedev-2d` en las
  de apoyo.
- gamedev-engine (grupo nuevo, pagina madre nueva): runtime de juego C++
  multiplataforma (SDL3 + sokol_gfx + miniaudio, Issue 0072b) = 8. Game loop,
  camara 2D, input unificado, sprite batch, setup render/audio, build wasm.

El tag plano `gamedev` queda eliminado (count 0). INDEX corregido: fila
gamedev-2d con label==target y conteo 36 + fila nueva gamedev-engine (8).

Verificacion: `fn index` + `fn doctor capabilities` -> ambos grupos OK
(declared_in_index=yes, doc_exists=yes, sin issues); `gamedev` plano = 0.
Solo se modifico el campo `tags` de los .md, ningun archivo de codigo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 02:40:50 +02:00

49 lines
2.0 KiB
Markdown

---
name: input_unified
kind: function
lang: cpp
domain: gamedev
version: "0.1.0"
purity: impure
signature: "input_begin_frame(InputState&); input_process_event(InputState&, const SDL_Event*)"
description: "Snapshot unificado de input por frame para SDL3. Mapea keyboard (WASD+arrows), mouse, gamepad (SDL_Gamepad) y touch a botones logicos (left/right/up/down/action_a..y/start/back) y ejes analogicos. Expone flags *_pressed con rising edge limpio cada frame. Issue 0072b — runtime gamedev PC + WASM."
tags: [gamedev-engine, input, sdl3, touch, gamepad]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
example: |
fn::input::InputState input{};
// per frame:
fn::input::input_begin_frame(input);
SDL_Event e;
while (SDL_PollEvent(&e)) {
fn::input::input_process_event(input, &e);
}
if (input.a_pressed) jump();
player.x += input.lx * speed * dt;
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/gamedev/input_unified.cpp"
params:
- name: state
desc: "InputState mantenido por la app entre frames (bools held + analog axes + touch slots)."
- name: event
desc: "Puntero al SDL_Event devuelto por SDL_PollEvent en el loop principal."
output: "Mutaciones in-place sobre InputState. Sin retorno. Sin asignaciones dinamicas."
---
# input_unified
Capa fina sobre SDL3 que normaliza todas las fuentes de input a un struct plano consultable cada frame. Sirve como fundacion para apps gamedev del registry (issue 0072b) y para tests headless.
Reglas de uso:
- `input_begin_frame` se llama UNA vez por frame antes de bombear eventos. Limpia los flags `*_pressed` (rising edge), no los `*` held.
- `input_process_event` se llama por cada `SDL_Event` recibido. Acumula state hasta que el siguiente `begin_frame` resetee edges.
- Stick deadzone fijo a 0.15 — si la app necesita custom, reescribir snapshot tras la lectura.
- Touch ids estables mientras el dedo este pressed; al soltar se compacta el array.
- Gamepads conectados se abren automaticamente en `SDL_EVENT_GAMEPAD_ADDED`.