Skip to content

Class: InputSystem

Defined in: packages/core/src/input/input-system.ts:48

Samples XR poses (hands/controllers/head) and gamepads, curates the set of interactables for pointer raycasting, and attaches minimal event listeners.

Remarks

  • Scheduled after player movement so pointers reflect updated transforms.
  • Maintains type-specific descendant arrays for optimized pointer intersection.
  • Adds transient Hovered / Pressed tags so other systems can react declaratively.

Example

ts
export class HighlightSystem extends createSystem({
  items: { required: [RayInteractable] }
}) {
  update() {
    this.queries.items.entities.forEach(e => {
      e.object3D.visible = !e.hasComponent(Pressed);
    })
  }
}

Extends

  • System<{ maintainScenePointers: { default: false; type: Boolean; }; }, { distanceGrabbables: { required: (Component<{ orientation: { default: [number, number, number, number]; type: Vec4; }; parent: { default: any; type: Entity; }; position: { default: [number, number, number]; type: Vec3; }; scale: { default: [number, number, number]; type: Vec3; }; }> | Component<{ detachOnGrab: { default: false; type: Boolean; }; movementMode: { default: string; enum: { MoveAtSource: string; MoveFromTarget: string; MoveTowardsTarget: string; RotateAtSource: string; }; type: Enum; }; moveSpeedFactor: { default: number; type: Float32; }; returnToOrigin: { default: false; type: Boolean; }; rotate: { default: true; type: Boolean; }; rotateMax: { default: [number, number, number]; type: Vec3; }; rotateMin: { default: [number, number, number]; type: Vec3; }; scale: { default: true; type: Boolean; }; scaleMax: { default: [number, number, number]; type: Vec3; }; scaleMin: { default: [number, number, number]; type: Vec3; }; targetPositionOffset: { default: [number, number, number]; type: Vec3; }; targetQuaternionOffset: { default: [number, number, number, number]; type: Vec4; }; translate: { default: true; type: Boolean; }; translateMax: { default: [number, number, number]; type: Vec3; }; translateMin: { default: [number, number, number]; type: Vec3; }; }>)[]; }; oneHandGrabbables: { required: (Component<{ orientation: { default: [number, number, number, number]; type: Vec4; }; parent: { default: any; type: Entity; }; position: { default: [number, number, number]; type: Vec3; }; scale: { default: [number, number, number]; type: Vec3; }; }> | Component<{ rotate: { default: true; type: Boolean; }; rotateMax: { default: [number, number, number]; type: Vec3; }; rotateMin: { default: [number, number, number]; type: Vec3; }; translate: { default: true; type: Boolean; }; translateMax: { default: [number, number, number]; type: Vec3; }; translateMin: { default: [number, number, number]; type: Vec3; }; }>)[]; }; pokeInteractables: { required: Component<{ }>[]; }; rayInteractables: { required: Component<{ }>[]; }; twoHandsGrabbables: { required: (Component<{ orientation: { default: [number, number, number, number]; type: Vec4; }; parent: { default: any; type: Entity; }; position: { default: [number, number, number]; type: Vec3; }; scale: { default: [number, number, number]; type: Vec3; }; }> | Component<{ rotate: { default: true; type: Boolean; }; rotateMax: { default: [number, number, number]; type: Vec3; }; rotateMin: { default: [number, number, number]; type: Vec3; }; scale: { default: true; type: Boolean; }; scaleMax: { default: [number, number, number]; type: Vec3; }; scaleMin: { default: [number, number, number]; type: Vec3; }; translate: { default: true; type: Boolean; }; translateMax: { default: [number, number, number]; type: Vec3; }; translateMin: { default: [number, number, number]; type: Vec3; }; }>)[]; }; }, this>

Constructors

Constructor

new InputSystem(_w, _qm, _p): InputSystem

Defined in: node_modules/.pnpm/elics@3.4.2/node_modules/elics/lib/system.d.ts:76

Parameters

_w

World

_qm

QueryManager

_p

number

Returns

InputSystem

Inherited from

createSystem( { /** Entities interactable via ray pointer */ rayInteractables: { required: [RayInteractable, Transform] }, /** Entities interactable via touch/poke pointer */ pokeInteractables: { required: [PokeInteractable, Transform] }, /** One-hand grabbable entities */ oneHandGrabbables: { required: [OneHandGrabbable, Transform] }, /** Two-hands grabbable entities */ twoHandsGrabbables: { required: [TwoHandsGrabbable, Transform] }, /** Distance grabbable entities */ distanceGrabbables: { required: [DistanceGrabbable, Transform] }, }, { /** Keep pointer target lists available outside immersive XR for browser canvas input. */ maintainScenePointers: { type: Types.Boolean, default: false }, }, ).constructor

Properties

camera

readonly camera: PerspectiveCamera

Defined in: packages/core/src/ecs/system.ts:63

Inherited from

System.camera


cleanupFuncs

readonly cleanupFuncs: () => void[]

Defined in: packages/core/src/ecs/system.ts:66

Returns

void

Inherited from

System.cleanupFuncs


config

config: SystemConfigSignals<S>

Defined in: packages/core/src/ecs/system.ts:49

Inherited from

System.config


createEntity()

createEntity: () => Entity

Defined in: packages/core/src/ecs/system.ts:81

Returns

Entity

Inherited from

System.createEntity


globals

globals: Record<string, any>

Defined in: packages/core/src/ecs/system.ts:54

Inherited from

System.globals


input

readonly input: InputManager

Defined in: packages/core/src/ecs/system.ts:61

Inherited from

System.input


isPaused

isPaused: boolean

Defined in: packages/core/src/ecs/system.ts:48

Inherited from

System.isPaused


player

readonly player: XROrigin

Defined in: packages/core/src/ecs/system.ts:58

Inherited from

System.player


playerEntity

readonly playerEntity: Entity

Defined in: packages/core/src/ecs/system.ts:59

Inherited from

System.playerEntity


playerHeadEntity

readonly playerHeadEntity: Entity

Defined in: packages/core/src/ecs/system.ts:60

Inherited from

System.playerHeadEntity


priority

priority: number

Defined in: packages/core/src/ecs/system.ts:53

Inherited from

System.priority


queries

queries: Record<keyof Q, Query>

Defined in: packages/core/src/ecs/system.ts:50

Inherited from

System.queries


queryManager

queryManager: QueryManager

Defined in: packages/core/src/ecs/system.ts:52

Inherited from

System.queryManager


renderer

readonly renderer: WebGLRenderer

Defined in: packages/core/src/ecs/system.ts:64

Inherited from

System.renderer


scene

readonly scene: Scene

Defined in: packages/core/src/ecs/system.ts:62

Inherited from

System.scene


visibilityState

readonly visibilityState: Signal<VisibilityState>

Defined in: packages/core/src/ecs/system.ts:65

Inherited from

System.visibilityState


world

world: World

Defined in: packages/core/src/ecs/system.ts:51

Inherited from

System.world


xrFrame

xrFrame: XRFrame

Defined in: packages/core/src/ecs/system.ts:56

Inherited from

System.xrFrame


xrManager

xrManager: WebXRManager

Defined in: packages/core/src/ecs/system.ts:55

Inherited from

System.xrManager

Methods

init()

init(): void

Defined in: packages/core/src/input/input-system.ts:85

Returns

void

Overrides

System.init


play()

play(): void

Defined in: packages/core/src/ecs/system.ts:79

Returns

void

Inherited from

System.play


stop()

stop(): void

Defined in: packages/core/src/ecs/system.ts:80

Returns

void

Inherited from

System.stop


update()

update(delta, time): void

Defined in: packages/core/src/input/input-system.ts:133

Per-frame tick. Both arguments are in seconds (Three.js Clock convention), not milliseconds.

Parameters

delta

number

Seconds since the previous frame.

time

number

Accumulated Clock.elapsedTime (seconds since the render loop started ticking the clock); monotonic across frames within a session.

Returns

void

Overrides

System.update

Privacy | Terms