/** * VehicleSystem.ts * * Raycast vehicle physics system. * Implements suspension springs, wheel friction, steering, and drivetrain simulation. * * @module physics */ import { IVector3 } from './PhysicsTypes'; import type { Quaternion } from '@holoscript/core'; type Vec3Like = IVector3 | { x: number; y: number; z: number; }; export interface WheelConfig { id: string; connectionPoint: IVector3; direction: IVector3; axle: IVector3; suspensionRestLength: number; suspensionStiffness: number; suspensionDamping: number; maxSuspensionTravel: number; wheelRadius: number; frictionSlip: number; isSteering: boolean; isDriving: boolean; rollInfluence: number; } export interface VehicleDefinition { id: string; chassisMass: number; chassisSize: IVector3; wheels: WheelConfig[]; maxSteerAngle: number; maxEngineForce: number; maxBrakeForce: number; } export interface WheelState { config: WheelConfig; suspensionLength: number; suspensionForce: number; contactPoint: IVector3 | null; isGrounded: boolean; rotation: number; steerAngle: number; skidFactor: number; } export interface VehicleState { id: string; definition: VehicleDefinition; position: IVector3; rotation: Quaternion; linearVelocity: IVector3; angularVelocity: IVector3; wheels: WheelState[]; speed: number; engineForce: number; brakeForce: number; steerAngle: number; /** Accumulated yaw heading (radians) integrated from angularVelocity[1] * dt. */ heading: number; } export declare function createDefaultCar(id: string): VehicleDefinition; export declare function createTruck(id: string): VehicleDefinition; /** * Ground-height probe for suspension raycasts (zgcn). Given a world XZ position * directly under a wheel, returns the ground/terrain surface height (world Y) at * that point. A heightfield terrain supplies `(x, z) => terrain.heightAt(x, z)`; * a collider world can wrap a downward raycast as `(x, z) => hitY`. When omitted, * suspension falls back to a flat ground plane at y = 0 (legacy behavior). */ export type GroundProbe = (x: number, z: number) => number; export declare class VehicleSystem { private vehicles; /** * Create a vehicle from a definition at a given position. */ createVehicle(definition: VehicleDefinition, position: Vec3Like): VehicleState; /** * Update vehicle physics for one timestep. */ update(vehicleId: string, dt: number, groundProbe?: GroundProbe): VehicleState | null; setThrottle(vehicleId: string, throttle: number): void; setBrake(vehicleId: string, brake: number): void; setSteering(vehicleId: string, steering: number): void; getVehicle(vehicleId: string): VehicleState | undefined; removeVehicle(vehicleId: string): boolean; getForwardVector(vehicle: VehicleState): IVector3; } export {}; //# sourceMappingURL=VehicleSystem.d.ts.map