Skip to content

InputManager

Defined in: InputManager.ts:88

Central input state manager. Resolved via DI with InputManagerKey.

new InputManager(): InputManager

InputManager

_advanceTime(dtMs): void

Defined in: InputManager.ts:1823

Internal

Advance the elapsed game-time clock. Called by InputPollSystem.

number

void


_applyKeyDown(code): void

Defined in: InputManager.ts:1571

Internal

Synthetic key-down. DOM-originated events must use _enqueueKeyDown so consumePointer and the UI hit-test fallback have a chance to run before action edges fire.

string

void


_applyKeyUp(code): void

Defined in: InputManager.ts:1593

Internal

Synthetic key-up. DOM-originated events must use _enqueueKeyUp.

string

void


_applyPointerCancel(id): void

Defined in: InputManager.ts:1659

Internal

Synthetic pointer cancel. Clears all buttons on the pointer, fires up-listeners, and drops the entry (unless it’s a mouse). Mirrors the drain-time drainPointerCancel logic.

number

void


_applyPointerDown(info): void

Defined in: InputManager.ts:1620

Internal

Synthetic pointer down. DOM-originated events must use _enqueuePointerDown. This applies all state (button mutation, mouse-aggregate emit, listener notify) synchronously.

PointerEventInfo

void


_applyPointerMove(info): void

Defined in: InputManager.ts:1609

Internal

Synthetic pointer move. DOM-originated events must use _enqueuePointerMove.

PointerEventInfo

void


_applyPointerUp(info): void

Defined in: InputManager.ts:1637

Internal

Synthetic pointer up. DOM-originated events must use _enqueuePointerUp.

PointerEventInfo

void


_clearFrameState(): void

Defined in: InputManager.ts:1799

Internal

Clear per-frame justPressed/justReleased flags.

void


_drainInputQueue(): void

Defined in: InputManager.ts:1448

Internal

Drain queued DOM events at Phase.EarlyUpdate. Each event applies its deferred state (button mutations, action-map edges, mouse-aggregate transitions). Consumed pointers are excluded from the mouse aggregate so UI-claimed presses do not propagate to gameplay actions. The renderer’s optional hitTestUI(x, y) auto-claims a pointer whose pointerdown lands on a UI-marked container.

void


_enqueueKeyDown(code): void

Defined in: InputManager.ts:1372

Internal

string

void


_enqueueKeyUp(code): void

Defined in: InputManager.ts:1377

Internal

string

void


_enqueuePointerCancel(id): void

Defined in: InputManager.ts:1425

Internal

number

void


_enqueuePointerDown(info): void

Defined in: InputManager.ts:1409

Internal

Sync portion: upsert pointer (existence, screenPos, type, isPrimary, primaryPointerId) and notify pointerDownListeners. Button mutation, action-map edges, and mouse-aggregate emit are deferred to the next drain at Phase.EarlyUpdate so consumePointer (or the renderer’s UI hit-test) can suppress them, AND so a same-frame down+up that arrives before drain still produces the correct MouseLeft press/release edges (recomputing aggregate from live state after sync mutation would silently drop the transient transition).

Listeners therefore observe pointer.buttons BEFORE this event’s edge is applied — buttons does not yet include the button just pressed. To filter by button in an onPointerDown listener, read info.button (the triggering edge, threaded through to PointerInfo.button), not info.buttons.

PointerEventInfo

void


_enqueuePointerMove(info): void

Defined in: InputManager.ts:1387

Internal

Sync portion: upsert the pointer entry (existence, screenPos, type, isPrimary, primaryPointerId) and notify pointerMoveListeners so pointer-tracking UIs see live cursor positions. Move events do not carry action-map edges, so they are not queued.

PointerEventInfo

void


_enqueuePointerUp(info): void

Defined in: InputManager.ts:1417

Internal

PointerEventInfo

void


_enqueueWheel(dx, dy): void

Defined in: InputManager.ts:1434

Internal

number

number

void


_onGamepadConnected(info): void

Defined in: InputManager.ts:1029

Internal

Called by InputPlugin from gamepadconnected event or by polling when discovering a previously-unknown pad. Idempotent.

GamepadInfo

void


_onGamepadDisconnected(info): void

Defined in: InputManager.ts:1042

Internal

Called by InputPlugin from gamepaddisconnected event or by polling when a pad vanishes silently. Idempotent.

GamepadInfo

void


_onKeyDown(code): void

Defined in: InputManager.ts:1830

Internal

Sync alias — see _applyKeyDown.

string

void


_onKeyUp(code): void

Defined in: InputManager.ts:1834

Internal

Sync alias — see _applyKeyUp.

string

void


_onPointerCancel(id): void

Defined in: InputManager.ts:1850

Internal

Sync alias — see _applyPointerCancel.

number

void


_onPointerDown(info): void

Defined in: InputManager.ts:1842

Internal

Sync alias — see _applyPointerDown.

PointerEventInfo

void


_onPointerMove(info): void

Defined in: InputManager.ts:1838

Internal

Sync alias — see _applyPointerMove.

PointerEventInfo

void


_onPointerUp(info): void

Defined in: InputManager.ts:1846

Internal

Sync alias — see _applyPointerUp.

PointerEventInfo

void


_pollGamepads(): void

Defined in: InputManager.ts:1077

Internal

Poll real gamepads via navigator.getGamepads() and emit key-down/key-up edges for any aggregate state changes. Called by InputPollSystem once per frame.

void


_releaseAllGamepadState(): void

Defined in: InputManager.ts:1018

Internal

Force-release held gamepad buttons and clear real-pad analog snapshots. Used on tab-hide (where navigator.getGamepads() returns stale data) and on disconnect when polling is paused. Synthetic axes live in their own field, so they’re untouched.

void


_setRenderer(renderer): void

Defined in: InputManager.ts:1367

Internal

Stash the renderer adapter so the drain step can call its optional hitTestUI(x, y) for the auto-consume fallback. Called by InputPlugin.install.

RendererAdapter | null

void


bindKey(action, key): void

Defined in: InputManager.ts:490

Add a key binding to an action. Creates the action if it doesn’t exist.

string

string

void


cancelListen(): void

Defined in: InputManager.ts:700

Cancel an active listenForNextKey. Resolves the pending promise with null.

void


clearAll(): void

Defined in: InputManager.ts:1249

Release all synthetic and physical input state.

void


clearCamera(): void

Defined in: InputManager.ts:1813

Clear the camera reference (e.g. on scene exit).

void


clearPointerButtons(): void

Defined in: InputManager.ts:1278

Drop all tracked pointers and release the aggregate MouseLeft/Middle/Right codes without touching keyboard or gamepad state. Useful for window-blur / page-hide handling.

void


consumePointer(id): void

Defined in: InputManager.ts:353

Mark a pointer as claimed for the rest of its event cycle (down → up). Subsequent action-map edges for this pointer (e.g. the MouseLeft edge a pointerdown would normally fire) are suppressed; onPointerDown/Up/Move listeners still fire because they are explicit user opt-ins.

The mark clears automatically when the pointer’s last button releases or on pointercancel. Call from a Pixi pointerdown handler that wants to own the event: manager.consumePointer(e.pointerId).

number

void


consumeWheel(): void

Defined in: InputManager.ts:366

Suppress wheel action-map edges (WheelUp/Down/Left/Right) for the rest of the current frame. onWheel listeners still fire.

void


disableGroup(name): void

Defined in: InputManager.ts:649

Disable a group by name. Actions only in disabled groups become inactive.

string

void


enableGroup(name): void

Defined in: InputManager.ts:644

Enable a group by name.

string

void


exportBindings(): ActionMapDefinition

Defined in: InputManager.ts:608

Export the current bindings as a plain object for serialization.

ActionMapDefinition


fireAction(name): void

Defined in: InputManager.ts:1239

Inject a one-frame synthetic action pulse.

string

void


fireGamepadAxis(side, value): void

Defined in: InputManager.ts:823

Inject a synthetic gamepad axis value. Stored separately from real-pad axis state and consulted by getStick / getTrigger only when no real pad is active — matching how a test fixture would use the API.

Trigger axes additionally emit GamepadLT/GamepadRT button edges when crossing triggerThreshold, mirroring real-pad polling so synthetic inspector probes drive isPressed the same way as physical hardware.

GamepadAxisKey

number

void


fireGamepadButton(code, pressed): void

Defined in: InputManager.ts:803

Inject a synthetic gamepad button edge. Routes through the same internal path as real polling, so action queries (isPressed, isJustPressed), listenForNextKey, and rebinding all see the synthetic input.

code should be a gamepad code string (e.g. "GamepadA", "GamepadLT"). Used by inspector probes / deterministic tests in lieu of real polling.

string

boolean

void


fireKeyDown(code): void

Defined in: InputManager.ts:709

Public wrapper for synthetic key-down injection. Applies sync.

string

void


fireKeyUp(code): void

Defined in: InputManager.ts:714

Public wrapper for synthetic key-up injection. Applies sync.

string

void


firePointerDown(button?, opts?): void

Defined in: InputManager.ts:736

Public wrapper for synthetic pointer-button presses. Defaults to button 0 on the primary mouse pointer. Pass opts for touch / pen / non-primary pointers (e.g. { id: 5, type: "touch", isPrimary: false }).

0 | 1 | 2

number

boolean

PointerType

void


firePointerMove(screenX, screenY, opts?): void

Defined in: InputManager.ts:723

Public wrapper for synthetic pointer movement. Defaults to the primary mouse pointer (id: 1, type: "mouse"); pass opts to drive a specific touch / pen pointer.

number

number

number

boolean

PointerType

void


firePointerUp(button?, opts?): void

Defined in: InputManager.ts:753

Public wrapper for synthetic pointer-button releases.

0 | 1 | 2

number

void


fireWheel(dx, dy): void

Defined in: InputManager.ts:773

Public wrapper for synthetic wheel input. Applies sync, including action edges and onWheel listener notification — matching the DOM path so tests and inspector probes drive the full surface.

number

number

void


gamepads(): readonly GamepadInfo[]

Defined in: InputManager.ts:893

Synchronously poll navigator.getGamepads() for currently-connected pads. Use this rather than the cached event-driven list when you need ground truth — gamepadconnected doesn’t fire until the user presses a button.

readonly GamepadInfo[]


getActionNames(): string[]

Defined in: InputManager.ts:1818

Get all configured action names.

string[]


getActionsForKey(key): string[]

Defined in: InputManager.ts:517

Returns all action names that have the given key bound.

string

string[]


getActivePad(): GamepadInfo | null

Defined in: InputManager.ts:937

The pad whose analog input is read by default. Auto-promotes on input activity (button press or stick/trigger above deadzone) and on first connect. Returns null when no pad is connected.

GamepadInfo | null


getAxis(negative, positive): number

Defined in: InputManager.ts:224

Returns -1, 0, or 1 based on negative/positive action states.

string

string

number


getBindings(action): readonly string[]

Defined in: InputManager.ts:512

Returns the current key bindings for an action, or an empty array if unmapped.

string

readonly string[]


getGroupActions(name): readonly string[]

Defined in: InputManager.ts:674

Get the action names belonging to a group. Returns empty array for unknown groups.

string

readonly string[]


getGroups(): string[]

Defined in: InputManager.ts:669

Get all configured group names.

string[]


getHoldDuration(action): number

Defined in: InputManager.ts:198

Milliseconds the action has been held. Returns 0 if not held.

string

number


getPointer(id): PointerInfo | undefined

Defined in: InputManager.ts:283

Direct lookup by pointerId, or undefined if no pointer with that id is tracked.

number

PointerInfo | undefined


getPointerPosition(): Vec2

Defined in: InputManager.ts:251

Primary pointer’s position in world coordinates (via Camera), or screen coords if no camera. Returns Vec2.ZERO when no pointer is tracked.

For multi-pointer access (touch UIs etc.) iterate getPointers and convert each screenPos via the camera as needed.

Vec2


getPointers(): readonly PointerInfo[]

Defined in: InputManager.ts:274

All currently-tracked pointers (one per active mouse, pen, or finger).

readonly PointerInfo[]


getPointerScreenPosition(): Vec2

Defined in: InputManager.ts:262

Primary pointer’s raw position in screen coordinates, or Vec2.ZERO when no pointer is tracked.

Vec2


getStick(side, opts?): Vec2

Defined in: InputManager.ts:846

Returns the deadzoned, magnitude-clamped stick vector for the given side.

By default reads from the active pad (the most recently used controller, or the first connected one if nothing has been used yet). Pass { pad: index } to read from a specific pad — useful for couch-co-op where each player’s controller is addressed explicitly.

Falls back to synthetic injection (fireGamepadAxis) when no pad is active — that’s the test/probe path.

"left" | "right"

number

Vec2


getTrigger(side, opts?): number

Defined in: InputManager.ts:875

Returns the deadzoned trigger value (0..1) for the given side. Reads from the active pad by default; use { pad: index } for explicit per-pad reads. Falls back to synthetic state when no pad is active.

"left" | "right"

number

number


getVector(left, right, up, down): Vec2

Defined in: InputManager.ts:231

Returns a Vec2 from four directional actions. Not normalized.

string

string

string

string

Vec2


isGroupEnabled(name): boolean

Defined in: InputManager.ts:664

Whether a group is currently enabled. Returns true for unknown group names.

string

boolean


isHeldFor(action, minTime): boolean

Defined in: InputManager.ts:217

Whether the action has been held for at least minTime ms.

string

number

boolean


isJustPressed(action): boolean

Defined in: InputManager.ts:175

Whether any key mapped to this action was pressed this frame.

string

boolean


isJustReleased(action): boolean

Defined in: InputManager.ts:182

Whether any key mapped to this action was released this frame.

string

boolean


isPointerConsumed(id): boolean

Defined in: InputManager.ts:358

Whether the pointer is currently marked consumed.

number

boolean


isPointerDown(): boolean

Defined in: InputManager.ts:268

Whether the primary pointer has any button held.

boolean


isPollingEnabled(): boolean

Defined in: InputManager.ts:983

Whether real gamepad polling is currently enabled.

boolean


isPressed(action): boolean

Defined in: InputManager.ts:168

Whether any key mapped to this action is currently held.

string

boolean


listenForNextKey(): Promise<string | null>

Defined in: InputManager.ts:692

Returns a promise that resolves with the next key code pressed. Intercepts the key.

Promise<string | null>


loadBindings(map): void

Defined in: InputManager.ts:617

Load bindings from a plain object. Resets to defaults first, then overlays the provided map.

ActionMapDefinition

void


onAction(name, fn): () => void

Defined in: InputManager.ts:428

Subscribe to action press edges (rising edge of any key bound to the action). Fires once per press. Returns a disposer.

string

(name) => void

() => void


onActionReleased(name, fn): () => void

Defined in: InputManager.ts:444

Subscribe to action release edges. Returns a disposer.

string

(name) => void

() => void


onActivePadChanged(fn): () => void

Defined in: InputManager.ts:957

Subscribe to active-pad changes. Replays the current active pad synchronously on subscribe so callers get the present state without a separate getActivePad() call. Returns a disposer.

(info) => void

() => void


onGamepadConnected(fn): () => void

Defined in: InputManager.ts:912

Subscribe to gamepad-connected events. Replays currently-known pads synchronously so callers don’t need a separate gamepads() call. Returns a disposer.

(info) => void

() => void


onGamepadDisconnected(fn): () => void

Defined in: InputManager.ts:922

Subscribe to gamepad-disconnected events. Returns a disposer.

(info) => void

() => void


onKeyDown(code, fn): () => void

Defined in: InputManager.ts:379

Subscribe to key-down events. Pass a code (e.g. "Space", "GamepadA") to filter, or "*" for all keys. The listener fires on the same edge isJustPressed reports — for DOM-originated events that’s the next Phase.EarlyUpdate after the browser dispatches; for synthetic injection (fireKeyDown) it’s synchronous. Returns a disposer.

string

(code) => void

() => void


onKeyUp(code, fn): () => void

Defined in: InputManager.ts:402

Subscribe to key-up events. See onKeyDown.

string

(code) => void

() => void


onPointerDown(fn): () => void

Defined in: InputManager.ts:312

Subscribe to pointer-down events (button transitions from up → down on a tracked pointer). Returns a disposer that detaches the listener.

(info) => void

() => void


onPointerMove(fn): () => void

Defined in: InputManager.ts:333

Subscribe to pointer-move events. Returns a disposer.

(info) => void

() => void


onPointerUp(fn): () => void

Defined in: InputManager.ts:324

Subscribe to pointer-up events (button transitions from down → up, plus touch / pen lifecycle ends and pointercancel). Returns a disposer.

(info) => void

() => void


onWheel(fn): () => void

Defined in: InputManager.ts:464

Subscribe to scroll-wheel events. Receives raw deltaX/deltaY (already sign-flipped by InputConfig.wheelInvertY if set). Fires regardless of consumeWheel — it only gates action edges. Returns a disposer.

(dx, dy) => void

() => void


rebind(action, key, opts?): RebindResult

Defined in: InputManager.ts:531

Rebind a key to an action with optional conflict detection. Conflicts are only detected between actions sharing at least one group.

string

string

RebindOptions

RebindResult


resetBindings(action?): void

Defined in: InputManager.ts:593

Reset bindings to defaults. If an action name is provided, only reset that action.

string

void


setActionMap(actions): void

Defined in: InputManager.ts:480

Replace the entire action map and store it as the default for resetBindings.

ActionMapDefinition

void


setActiveGroups(names): void

Defined in: InputManager.ts:654

Set exactly these groups as active; all others are disabled.

string[]

void


setActivePad(index): void

Defined in: InputManager.ts:947

Manually set the active pad. Index must match a currently connected pad — pass an unknown index and the call is a no-op. Pass null to clear (analog reads will fall back to synthetic state if any).

number | null

void


setCamera(camera): void

Defined in: InputManager.ts:1808

Set camera for pointer world-coord conversion.

CameraLike

void


setDeadzones(opts): void

Defined in: InputManager.ts:992

Update analog deadzones at runtime. Either field may be omitted. Values are clamped to [0, 0.999] — capping below 1 keeps the rescaling denominator non-zero. Non-finite values are ignored.

number

number

void


setGroups(groups): void

Defined in: InputManager.ts:627

Configure input groups. Group name -> array of action names.

Record<string, string[]>

void


setPollingEnabled(enabled): void

Defined in: InputManager.ts:978

Enable or disable real gamepad polling. Synthetic injection still works when disabled.

boolean

void


setTriggerThreshold(value): void

Defined in: InputManager.ts:1005

Set the trigger button-edge threshold (default 0.5). Clamped to [0, 1]; non-finite values are ignored.

number

void


snapshotState(): object

Defined in: InputManager.ts:1297

Snapshot of current held input state for inspector tooling.

object

actions: string[]

gamepad: object

axes: object[]

buttons: string[]

keys: string[]

mouse: object

buttons: number[]

down: boolean

x: number

y: number

pointers: object[]


unbindKey(action, key): void

Defined in: InputManager.ts:502

Remove a key binding from an action.

string

string

void