import { ForwardAxis } from '../Constants'; import { TMeters, TMetersPerSecond, TRadians, TRadiansPerSecond } from '../../Math'; import { TReadonlyQuaternion, TReadonlyVector3 } from '../../ThreeLib'; import { TKinematicSpeed } from '../../TransformDrive/Models'; import { QuaternionLike, Vector3Like } from 'three'; import { TKinematicData } from './TKinematicData'; export type TKinematicMethods = Readonly<{ setData: (kinematic: TKinematicData) => void; getData: () => TKinematicData; moveTo: (vector: TReadonlyVector3, speed: TKinematicSpeed) => void | never; rotateTo: (quaternion: TReadonlyQuaternion, speed: TKinematicSpeed, infinite?: boolean) => void | never; lookAt: (vector: TReadonlyVector3, speed: TKinematicSpeed) => void | never; getRadius: () => TMeters; setRadius: (radius: TMeters) => void; getLinearSpeed: () => TMetersPerSecond; setLinearSpeed: (speed: TMetersPerSecond) => void; getLinearDirection: () => TReadonlyVector3; getForwardAxis: () => ForwardAxis; setForwardAxis: (forwardAxis: ForwardAxis) => void; setLinearDirection: (direction: Vector3Like) => void; getLinearAzimuth: () => TRadians; setLinearAzimuth: (azimuth: TRadians) => void; getLinearElevation: () => TRadians; setLinearElevation: (elevation: TRadians) => void; resetLinear: (resetSpeed: boolean, resetDirection: boolean) => void; getAngularSpeed: () => TRadiansPerSecond; getAngularSpeedMps: () => TMetersPerSecond | never; setAngularSpeed: (speed: TRadiansPerSecond) => void; setAngularSpeedMps: (speed: TMetersPerSecond) => void | never; getAngularDirection: () => TReadonlyQuaternion; setAngularDirection: (direction: QuaternionLike) => void; resetAngular: (resetSpeed: boolean, resetDirection: boolean) => void; }>;