thedivergentai/gd-agentic-skills23 files

Godot Input Handling

Expert patterns for input handling covering InputMap actions, InputEvent processing, controller support, rebinding, deadzones, and input buffering. Use when setting up player controls, implementing input systems, or adding gamepad/accessibility features. Keywords InputMap, InputEvent, gamepad, controller, rebinding, deadzone, input buffer.

Specification
Skill ID
thedivergentai/gd-agentic-skills/godot-input-handling
Publisher
thedivergentai
Repository
gd-agentic-skills
Installs
0
Files
23
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

thedivergentai/gd-agentic-skills/godot-input-handlingInstalls these files
  • SKILL.md
  • references/expert-input-extensions.md
  • references/godot-47-input-device-ids.md
  • references/input-event-processing.md
  • references/inputmap-best-practices.md
  • references/migration-notes.md
  • references/multi-modal-input-ui-glyphs.md
  • scripts/action_state_machine.gd
  • scripts/advanced_input_buffer.gd
  • scripts/analog_deadzone_manager.gd
  • scripts/combo_validator.gd
  • scripts/glyph_prompt_manager.gd
  • scripts/hold_toggle_accessibility.gd
  • scripts/input_buffer.gd
  • scripts/input_buffer_manager.gd
  • scripts/input_echo_filter.gd
  • scripts/input_remapper.gd
  • scripts/input_replay_buffer.gd
  • scripts/mouse_capture_manager.gd
  • scripts/multi_touch_gestures.gd
  • scripts/safe_runtime_rebind.gd
  • scripts/unhandled_input_priority.gd
  • scripts/virtual_input_injector.gd

What this skill tells the agent

Input Handling

Handle keyboard, mouse, gamepad, and touch input with proper buffering and accessibility support.

MANDATORY script triggers (by scenario)

ScenarioLoad before coding
Jump/dash/coyote feelinput_buffer.gd (physics-tied decay) + advanced_input_buffer.gd for multi-action priority
Settings remapping UIsafe_runtime_rebind.gd (ConfigFile persist to user://)
Analog stick movementanalog_deadzone_manager.gd — never raw axis without radial deadzone
"Press X / Press E" promptsglyph_prompt_manager.gd
UI nav vs gameplay confirminput_echo_filter.gd — echoes move menus, not Confirm/Back
Gameplay vs menu clicksunhandled_input_priority.gd

Do-NOT-Load (by scenario)

ScenarioLoadDo NOT load
Settings remapping UIsafe_runtime_rebind.gdmulti_touch_gestures.gd, mouse_capture_manager.gd, combo/replay injectors
Mobile / touch gesturesmulti_touch_gestures.gdmouse_capture_manager.gd, desktop remapper persistence
Jump/dash buffer onlyinput_buffer.gd / advanced_input_buffer.gdRemapper, multi-touch, replay, combo validator
FPS mouse lookmouse_capture_manager.gd + deadzone/glyph as neededmulti_touch_gestures.gd, combo/replay
Combo / fighting sequencescombo_validator.gd + buffersTouch gestures, mouse capture
Replay / virtual injection testsinput_replay_buffer.gd / virtual_input_injector.gdRemapper UI, multi-touch

Available Scripts

advanced_input_buffer.gd

Frame-perfect input buffering system for responsive jumps, dashes, and combo chains.

input_buffer.gd

Timed action buffer with `_physics_process` decay so windows match CharacterBody consumption, not render FPS.

safe_runtime_rebind.gd

Dynamic input rebinding with conflict detection and user://input_rebinds.cfg persistence.

analog_deadzone_manager.gd

Radial deadzone management for analog sticks to eliminate drift while maintaining natural follow-through.

multi_touch_gestures.gd

Handling touch, drags, and pinch-to-zoom gestures for mobile and touchscreen compatibility.

input_echo_filter.gd

Filtering echo events to distinguish between hold-to-navigate (UI) and one-time gameplay actions.

mouse_capture_manager.gd

Robust mouse capture and sensitivity scaling logic for FPS and mouse-intensive systems.

hold_toggle_accessibility.gd

Software-side support for user-defined 'Hold' vs 'Toggle' accessibility preferences.

glyph_prompt_manager.gd

Real-time switching between Keyboard and Gamepad UI prompts based on the last active device.

action_state_machine.gd

Tracking the lifecycle of an action ('Just Pressed', 'Held', 'Released') for complex state logic.

unhandled_input_priority.gd

Demonstrating the correct use of _unhandled_input to prevent gameplay logic from leaking into UI.

virtual_input_injector.gd

Input.parse_input_event injection for CI tutorials / AI assistance — not physical hardware.

combo_validator.gd

Rolling timed sequence buffer for special-move validation (fighting / action RPG).

input_replay_buffer.gd

Frame-tagged capture + deterministic replay via parse_input_event.

NEVER Do in Input Handling

  • NEVER poll input in `_process()` for gameplay actions — Use _physics_process() or _unhandled_input(). _process() is frame-rate dependent, causing dropped inputs at low FPS [22].
  • NEVER use hardcoded key checks (e.g., `KEY_W`) — Always use InputMap actions. Hardcoded keys prevent rebinding and break compatibility with non-QWERTY layouts [23].
  • NEVER ignore analog stick deadzones — Drifting sticks at 0.05 magnitude will cause unintended movement. Implement a radial deadzone (not axial) in code or settings [24].
  • NEVER assume a single input device — Players may switch between Keyboard and Controller mid-session. Use Input.joy_connection_changed to update UI prompts dynamically [25].
  • NEVER use `_input()` for gameplay actions — _input() fires for ALL events (including UI). Use _unhandled_input() so gameplay logic doesn't trigger while clicking menus [26].
  • NEVER omit input buffering in fast-paced games — If a player presses jump 50ms before landing, the input is lost without a buffer. Implement a 100-150ms buffer for a "tight" feel [27].
  • NEVER use `Input.is_action_pressed()` for one-time triggers — It returns true every frame the key is held. Use _just_pressed for jumps, attacks, and toggles to avoid logic spam.
  • NEVER implement manual 'Hold vs Toggle' logic in multiple places — Centralize it in a setting or input wrapper to ensure accessibility consistency across the whole game.
  • NEVER forget to handle `InputEvent.is_echo()` in UI navigation — Echo events (keyboard repeat) should move menus but rarely should they trigger "Confirm" or "Back" actions.
  • NEVER capture the mouse without a 'Release' shortcut — If your game crashes or blocks ui_cancel, the user is trapped. Always provide a fallback escape for mouse capture.

Input Propagation & Isolation

Godot propagates input events in a specific order. Understanding this is key to isolating UI from gameplay.

  1. `_input(event)`: High-priority global intercept. Use for dev consoles or debug overlays.
  2. `_gui_input(event)`: Handled by Control nodes (UI). If a UI element consumes the event (e.g., clicking a button), it calls accept_event(), stopping further propagation.
  3. `_unhandled_input(event)`: Reached ONLY if no UI element consumed the event. Expert Pattern: Put all gameplay logic (jump, shoot) here to prevent accidental triggers while interacting with menus.

InputMap Best Practices

Avoid physical key checks. Define semantic actions (e.g., move_left, interact) in Project Settings > Input Map.

1. Analog Deadzones

Analog sticks suffer from drift. MANDATORY: analog_deadzone_manager.gd. Prefer Input.get_vector() for circular deadzones — never subtract axes into a square deadzone.

2. Expert polling delta (no hardcoded keys)

Gameplay samples actions in _physics_process / _unhandled_input — never KEY_* / MOUSE_BUTTON_* branches. Pause/cancel must be InputMap actions (e.g. ui_cancel) so rebinds and non-QWERTY layouts work. See unhandled_input_priority.gd.

Multi-Modal Input & UI Glyphs

Modern games must handle simultaneous Controller and Keyboard/Mouse input smoothly.

1. Handling Input Modes

  • Mouse Aiming: Process InputEventMouseMotion in _unhandled_input() for relative movement (mouse_capture_manager.gd).
  • Stick Movement: Poll vectors in _physics_process() after analog_deadzone_manager.gd.

2. Dynamic Glyph Swapping

MANDATORY: glyph_prompt_manager.gd for last-device prompt swaps. Do not hand-roll event is InputEventJoypadButton detectors in every HUD widget.

Expert Input Extensions (script sole-source)

More from thedivergentai

Use this skill in a project

Open any RiverX project, search the Skills panel for thedivergentai/gd-agentic-skills/godot-input-handling, and install it in one click.

Use this skill