Skip to content

[Feature] Add gamepad and 3D-mouse editor navigation #792

Description

@JeanPhilippeKernel

Type

  • Bug
  • Feature
  • Refactor / cleanup
  • Task / chore

Overview

Add first-class gamepad and 3D mouse (six-degree-of-freedom) input to editor camera navigation, with deterministic mappings, dead zones, device detection, and user-configurable sensitivity.

Context

The FlyCamera input layer now accepts semantic commands and #784 owns keyboard/mouse profiles and preferences. Device input must feed those semantics rather than introducing a second controller path. It must obey viewport focus and UI capture so text editing and overlays remain safe.

What needs to be done

  1. Audit the existing platform input backends and select supported gamepad and 3D-mouse APIs per platform.
  2. Extend the input abstraction with allocation-free device state/events and connect them to FlyCamera semantic input.
  3. Define default gamepad mappings for fly, orbit, pan, zoom, speed, focus, and mode toggle.
  4. Define 3D-mouse translation/rotation mappings, axis inversion, response curves, dead zones, and sensitivity.
  5. Add device-specific preferences, persistence, discovery/connect-disconnect handling, and a user-visible mapping/help surface.
  6. Ensure UI capture, inactive viewport state, and editor focus correctly suppress camera device motion.

Resources

Testing

  • Unit-test normalization, dead zone, sensitivity, and command mapping with synthetic device samples.
  • Add input-routing tests for focus and UI capture suppression.
  • Manually test representative supported gamepad and 3D-mouse devices on macOS, Windows, and Linux.

Acceptance criteria

  • Gamepad navigation works through the shared FlyCamera input semantics.
  • Supported 3D mice provide stable six-degree-of-freedom navigation.
  • Device mappings, sensitivity, inversion, and dead zones are configurable and persisted.
  • Device motion is blocked while the viewport lacks input ownership.
  • Builds without warnings in Debug and Release.
  • All relevant unit tests pass.
  • No regression in existing functionality.

Estimated effort

1–2 weeks, depending on platform backend support

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions