# InputController

Class · extends [`InputConsumer`](https://api.playcanvas.com/engine/classes/InputConsumer.md) · category: Input

Source: https://github.com/playcanvas/engine/blob/970d89f6d3bc6667f4e1f88153abd6e7e82ed52c/src/extras/input/input.js#L258

The base class for all input controllers. A controller consumes an [InputFrame](https://api.playcanvas.com/engine/classes/InputFrame.md) carrying
`move` and `rotate` deltas and produces a [Pose](https://api.playcanvas.com/engine/classes/Pose.md): [attach](https://api.playcanvas.com/engine/classes/InputController.md#attach) sets the pose it starts
from, [update](https://api.playcanvas.com/engine/classes/InputController.md#update) applies a frame and returns the current pose, and [detach](https://api.playcanvas.com/engine/classes/InputController.md#detach) releases
it. The application applies the returned pose to an entity. [FlyController](https://api.playcanvas.com/engine/classes/FlyController.md),
[OrbitController](https://api.playcanvas.com/engine/classes/OrbitController.md) and [FocusController](https://api.playcanvas.com/engine/classes/FocusController.md) implement three ways of doing this.

**Example**

```ts
controller.attach(pose.look(cameraPosition, target));

// each frame, after filling the frame's move and rotate deltas from your sources
const result = controller.update(frame, dt);
camera.setPosition(result.position);
camera.setEulerAngles(result.angles);
```

## Properties

### _pose

```ts
protected _pose: Pose
```

## Methods

### attach

```ts
attach(pose: Pose, smooth?: boolean): void
```

**Parameters**

- `pose` ([`Pose`](https://api.playcanvas.com/engine/classes/Pose.md)): The initial pose of the controller.
- `smooth` (`boolean`, optional, default `true`): Whether to smooth the transition.

### destroy

```ts
destroy(): void
```

### detach

```ts
detach(): void
```

### update

```ts
update(frame: InputFrame<any>, dt: number): Pose
```

**Parameters**

- `frame` ([`InputFrame`](https://api.playcanvas.com/engine/classes/InputFrame.md)`<any>`): The input frame.
- `dt` (`number`): The delta time.

**Returns** [`Pose`](https://api.playcanvas.com/engine/classes/Pose.md): - The controller pose.

## Inherited from [InputConsumer](https://api.playcanvas.com/engine/classes/InputConsumer.md)

- `new InputController()`
