/*! * Ecctrl * https://github.com/pmndrs/ecctrl * * SPDX-FileCopyrightText: 2023-2026 Erdong Chen * SPDX-License-Identifier: MIT */ import * as THREE from "three"; import { type ThreeElements } from "@react-three/fiber"; import { type RapierRigidBody } from "@react-three/rapier"; import { type ColliderShapeCastHit, type RayColliderIntersection } from "@dimforge/rapier3d-compat"; import React, { type ReactNode } from "react"; import { type CurveData, type CurveLUT } from "../../curves/CurveLUT"; declare const _default: React.NamedExoticComponent & React.RefAttributes>>; export default _default; export type DriveWheelConfigType = { maxDriveTorque: number; maxWheelAngVel: number; engineTorqueCurve: CurveLUT; reverseTorqueScale: number; reverseRPMScale: number; driveRatio: number; }; export type SteerWheelConfigType = { steerAngleCurve: CurveLUT; steerRate: number; maxSteerAngle: number; maxWheelAngVel: number; }; export interface WheelInfoType extends Omit { id: string; rayPos: THREE.Vector3; rayDir: THREE.Vector3; rayRot: THREE.Quaternion; rayUpDir: THREE.Vector3; rayFwdDir: THREE.Vector3; rayLeftDir: THREE.Vector3; floatImp: THREE.Vector3; rayHit: ColliderShapeCastHit | RayColliderIntersection | null; rayHitBody: RapierRigidBody | null; rayHitPos: THREE.Vector3; rayHitNormal: THREE.Vector3; rayHitFriciton: number; rayOriginVel: THREE.Vector3; rayHitPointVel: THREE.Vector3; isOnPlatform: boolean; lngSlipRatio: number; latSlipRatio: number; slipStrength: number; lngAxis: THREE.Vector3; latAxis: THREE.Vector3; lngFricImp: THREE.Vector3; latFricImp: THREE.Vector3; effInertia: number; supPos: THREE.Vector3; steerAngle: number; driveTorque: number; brakeTorque: number; wheelLinVel: number; wheelAngVel: number; setDriveDemand?: (value: number) => void; setBrakeDemand?: (value: number) => void; setSteerDemand?: (value: number) => void; setDriveWheelConfig?: (value: DriveWheelConfigType) => void; setSteerWheelConfig?: (value: SteerWheelConfigType) => void; } export type ShapeCastWheelProps = ThreeElements['group'] & { children?: ReactNode; debug?: boolean; enable?: boolean; name?: string; groundDetection?: "shapeCast" | "rayCast"; rayShapeR?: number; rayShapeH?: number; rayLength?: number; springK?: number; dampingC?: number; driveInvert?: boolean; driveWheel?: boolean; driveTorqueWeight?: number; steerInvert?: boolean; steerWheel?: boolean; brakeWheel?: boolean; maxBrakeTorque?: number; rollingResistanceCoef?: number; lowVelThreshold?: number; tireGripFactor?: number; lngFrictionEllipseScale?: number; latFrictionEllipseScale?: number; relaxLngRate?: number; relaxLatRate?: number; minLngRelaxCoeff?: number; minLatRelaxCoeff?: number; lngSlipRatioCurveData?: CurveData; latSlipRatioCurveData?: CurveData; followPlatform?: boolean; massRatioFallOffCurveData?: CurveData; applyCounterMass?: boolean; applyCounterFriction?: boolean; showWheelModel?: boolean; wheelModelDensity?: number; wheelModelUpdate?: boolean; wheelModelRadius?: number; wheelModelLerpPosRate?: number; wheelModelReversRotation?: boolean; debuggerArrowScale?: number; };