/** Optional third-person runtime interaction; not part of the lightbox. */ import type { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js"; import type { ArcRotateCamera } from "@babylonjs/core/Cameras/arcRotateCamera.js"; import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js"; import type { Scene } from "@babylonjs/core/scene.js"; import type { Vector3Value } from "@skenora/contracts"; export type ThirdPersonAction = "forward" | "backward" | "left" | "right"; export interface ThirdPersonAnimationNames { idle?: string; forward?: string; backward?: string; left?: string; right?: string; } export interface ThirdPersonControllerOptions { /** Standalone defaults remain automatic; Runtime adapters use external updates. */ externalUpdate?: boolean; keyboardInput?: boolean; detachCameraOnDisable?: boolean; animationPlayback?: { play(group: AnimationGroup): void; stop(group: AnimationGroup): void; }; cameraHeight?: number; cameraDistance?: number; minCameraDistance?: number; maxCameraDistance?: number; moveSpeed?: number; turnSpeed?: number; moveBoundsMin?: { x: number; z: number; }; moveBoundsMax?: { x: number; z: number; }; checkCollisions?: boolean; ellipsoid?: Vector3Value; ellipsoidOffset?: Vector3Value; gravity?: boolean; gravityAcceleration?: number; maxFallSpeed?: number; keyBindings?: Partial>; animations?: ThirdPersonAnimationNames; onMove?: (position: Vector3Value, action: ThirdPersonAction | null) => void; onAnimationChange?: (name: string | null) => void; } /** * Orbit-camera third-person locomotion with injectable actions and callbacks. * Keyboard input is optional; hosts may drive `setAction` directly. */ export declare class ThirdPersonController { #private; readonly scene: Scene; constructor(scene: Scene, options?: ThirdPersonControllerOptions); get enabled(): boolean; get character(): TransformNode | null; attach(character: TransformNode, camera: ArcRotateCamera, animationGroups?: readonly AnimationGroup[], enabled?: boolean): void; detach(): void; enable(): void; disable(): void; updateOptions(options: Partial): void; setAction(action: ThirdPersonAction, active: boolean): void; setMovement(value: { x: number; y: number; }): void; resetInput(): void; setCameraDistance(distance: number): void; dispose(): void; /** Accepted simulation milliseconds; zero delta is inert. */ update(deltaMs: number): void; } //# sourceMappingURL=third-person-controller.d.ts.map