Skip to content

Class: InputSystem

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

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<{ }, { 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] }, }, {}, ).constructor

Properties

camera

readonly camera: PerspectiveCamera

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

Inherited from

System.camera


cleanupFuncs

readonly cleanupFuncs: () => void[]

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

Returns

void

Inherited from

System.cleanupFuncs


config

config: SystemConfigSignals<S>

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

Inherited from

System.config


createEntity()

createEntity: () => Entity

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

Returns

Entity

Inherited from

System.createEntity


globals

globals: Record<string, any>

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

Inherited from

System.globals


input

readonly input: XRInputManager

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

Inherited from

System.input


isPaused

isPaused: boolean

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

Inherited from

System.isPaused


player

readonly player: XROrigin

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

Inherited from

System.player


priority

priority: number

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

Inherited from

System.priority


queries

queries: Record<keyof Q, Query>

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

Inherited from

System.queries


queryManager

queryManager: QueryManager

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

Inherited from

System.queryManager


renderer

readonly renderer: WebGLRenderer

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

Inherited from

System.renderer


scene

readonly scene: Scene

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

Inherited from

System.scene


visibilityState

readonly visibilityState: Signal<VisibilityState>

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

Inherited from

System.visibilityState


world

world: World

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

Inherited from

System.world


xrFrame

xrFrame: XRFrame

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

Inherited from

System.xrFrame


xrManager

xrManager: WebXRManager

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

Inherited from

System.xrManager

Methods

init()

init(): void

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

Returns

void

Overrides

System.init


play()

play(): void

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

Returns

void

Inherited from

System.play


stop()

stop(): void

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

Returns

void

Inherited from

System.stop


update()

update(delta, time): void

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

Parameters

delta

number

time

number

Returns

void

Overrides

System.update

Privacy | Terms