# FirstPersonRig

> Talos next · Since 0.6

## Signature

```ts
export class FirstPersonRig implements CameraRig {
  readonly kind = "first-person" as const
  readonly config: FirstPersonConfig
  yaw: number
  pitch: number
  pose: CameraPose
  bob: BobState
  constructor(config: Partial<FirstPersonConfig> = {})
  get bobConfig(): Required<BobConfig> | null
  get inheritsFov(): boolean
  followTarget(ctx: Ctx): EntityHandle | null
  update(ctx: Ctx, dt: number, input: RigInput): CameraPose
  setHeading(yaw: number, pitch: number): void
}
```

Import: `import { FirstPersonRig } from "@argus/gameplay"`

## Members

| Member | Signature | Description |
|---|---|---|
| `kind` | `readonly kind = "first-person" as const` |  |
| `config` | `readonly config: FirstPersonConfig` |  |
| `yaw` | `yaw: number` |  |
| `pitch` | `pitch: number` |  |
| `pose` | `pose: CameraPose` |  |
| `bob` | `bob: BobState` | The walk bob this tick; all zero while the bob is off or the target stands still. |
| `constructor` | `constructor(config: Partial<FirstPersonConfig> = {})` |  |
| `bobConfig` | `get bobConfig(): Required<BobConfig> \| null` | The bob's settings with the defaults filled in, or null while it is off. |
| `inheritsFov` | `get inheritsFov(): boolean` | True while the rig names no fov of its own: the director then sends none, and the scene camera's stands. |
| `followTarget` | `followTarget(ctx: Ctx): EntityHandle \| null` |  |
| `update` | `update(ctx: Ctx, dt: number, input: RigInput): CameraPose` |  |
| `setHeading` | `setHeading(yaw: number, pitch: number): void` |  |
