@aura3d/engine 1.5.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -83
- package/dist/animation/FootIk.d.ts +10 -1
- package/dist/animation/FootIk.d.ts.map +1 -1
- package/dist/animation/FootIk.js.map +1 -1
- package/dist/animation/HumanoidRetargeting.js +1 -1
- package/dist/animation/RigQuality.d.ts +1 -1
- package/dist/animation/RigQuality.js +2 -2
- package/dist/animation/RigQuality.js.map +1 -1
- package/dist/animation/SecondaryAnimationSampling.d.ts +55 -0
- package/dist/animation/SecondaryAnimationSampling.d.ts.map +1 -0
- package/dist/animation/SecondaryAnimationSampling.js +145 -0
- package/dist/animation/SecondaryAnimationSampling.js.map +1 -0
- package/dist/animation/SpringBones.d.ts.map +1 -1
- package/dist/animation/SpringBones.js +1 -2
- package/dist/animation/SpringBones.js.map +1 -1
- package/dist/animation/browser-index.d.ts +0 -2
- package/dist/animation/browser-index.d.ts.map +1 -1
- package/dist/animation/browser-index.js +0 -2
- package/dist/animation/browser-index.js.map +1 -1
- package/dist/animation/index.d.ts +0 -2
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/animation/index.js +0 -2
- package/dist/animation/index.js.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.d.ts +4 -0
- package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.js +29 -6
- package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
- package/dist/assets/GLTFLoader.d.ts.map +1 -1
- package/dist/assets/GLTFLoader.js +13 -4
- package/dist/assets/GLTFLoader.js.map +1 -1
- package/dist/assets/browser-index.d.ts +0 -4
- package/dist/assets/browser-index.d.ts.map +1 -1
- package/dist/assets/browser-index.js +0 -2
- package/dist/assets/browser-index.js.map +1 -1
- package/dist/assets/gltf-runtime.d.ts +6 -0
- package/dist/assets/gltf-runtime.d.ts.map +1 -0
- package/dist/assets/gltf-runtime.js +4 -0
- package/dist/assets/gltf-runtime.js.map +1 -0
- package/dist/assets/index.d.ts +0 -4
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +0 -2
- package/dist/assets/index.js.map +1 -1
- package/dist/audio/AudioBus.d.ts +19 -1
- package/dist/audio/AudioBus.d.ts.map +1 -1
- package/dist/audio/AudioBus.js.map +1 -1
- package/dist/audio/AudioFileManager.d.ts +5 -0
- package/dist/audio/AudioFileManager.d.ts.map +1 -1
- package/dist/audio/AudioFileManager.js +13 -0
- package/dist/audio/AudioFileManager.js.map +1 -1
- package/dist/audio/AudioSource.d.ts +8 -0
- package/dist/audio/AudioSource.d.ts.map +1 -1
- package/dist/audio/AudioSource.js +56 -7
- package/dist/audio/AudioSource.js.map +1 -1
- package/dist/audio/index.d.ts +1 -7
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +0 -3
- package/dist/audio/index.js.map +1 -1
- package/dist/aura3d-cli/asset-core-types.d.ts +1 -1
- package/dist/aura3d-cli/asset-core-types.d.ts.map +1 -1
- package/dist/aura3d-cli/asset-manifest.d.ts.map +1 -1
- package/dist/aura3d-cli/asset-manifest.js +36 -2
- package/dist/aura3d-cli/asset-manifest.js.map +1 -1
- package/dist/aura3d-cli/asset-role-admission.js +1 -1
- package/dist/aura3d-cli/asset-role-admission.js.map +1 -1
- package/dist/aura3d-cli/cli-help.js +3 -3
- package/dist/aura3d-cli/cli-help.js.map +1 -1
- package/dist/aura3d-cli/cli-options.d.ts +1 -1
- package/dist/aura3d-cli/cli-options.d.ts.map +1 -1
- package/dist/aura3d-cli/cli-options.js +2 -2
- package/dist/aura3d-cli/cli-options.js.map +1 -1
- package/dist/aura3d-cli/cli.js +1 -1
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +13 -5
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/create-aura3d/index.d.ts.map +1 -1
- package/dist/create-aura3d/index.js +10 -4
- package/dist/create-aura3d/index.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-evidence.js +5 -1
- package/dist/create-aura3d/showcase-spec-evidence.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts +8 -1
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js +191 -31
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-template-evidence.d.ts.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-template-evidence.js +7 -0
- package/dist/create-aura3d/showcase-spec-game-template-evidence.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-parser.js +1 -1
- package/dist/create-aura3d/showcase-spec-parser.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-types.d.ts +50 -0
- package/dist/create-aura3d/showcase-spec-types.d.ts.map +1 -1
- package/dist/editor-runtime/index.d.ts +0 -2
- package/dist/editor-runtime/index.d.ts.map +1 -1
- package/dist/editor-runtime/index.js +0 -1
- package/dist/editor-runtime/index.js.map +1 -1
- package/dist/engine/agent-api/GameAssetValidation.js +1 -1
- package/dist/engine/agent-api/GameAssetValidation.js.map +1 -1
- package/dist/engine/agent-api/GameEvidence.js +1 -1
- package/dist/engine/agent-api/GameEvidence.js.map +1 -1
- package/dist/engine/agent-api/GameGenreKits.d.ts +63 -0
- package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
- package/dist/engine/agent-api/GameGenreKits.js +274 -56
- package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
- package/dist/engine/agent-api/GameRuntime.d.ts +38 -1
- package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
- package/dist/engine/agent-api/GameRuntime.js +69 -1
- package/dist/engine/agent-api/GameRuntime.js.map +1 -1
- package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +24 -0
- package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
- package/dist/engine/agent-api/GameSceneGeometryBindings.js +52 -0
- package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
- package/dist/engine/agent-api/LeanArcadeRuntime.d.ts +111 -0
- package/dist/engine/agent-api/LeanArcadeRuntime.d.ts.map +1 -0
- package/dist/engine/agent-api/LeanArcadeRuntime.js +219 -0
- package/dist/engine/agent-api/LeanArcadeRuntime.js.map +1 -0
- package/dist/engine/agent-api/PhysicsRuntime.d.ts +332 -0
- package/dist/engine/agent-api/PhysicsRuntime.d.ts.map +1 -0
- package/dist/engine/agent-api/PhysicsRuntime.js +619 -0
- package/dist/engine/agent-api/PhysicsRuntime.js.map +1 -0
- package/dist/engine/agent-api/PlatformerMotion.d.ts +124 -0
- package/dist/engine/agent-api/PlatformerMotion.d.ts.map +1 -1
- package/dist/engine/agent-api/PlatformerMotion.js +101 -16
- package/dist/engine/agent-api/PlatformerMotion.js.map +1 -1
- package/dist/engine/agent-api/RootGeometry.d.ts +36 -0
- package/dist/engine/agent-api/RootGeometry.d.ts.map +1 -0
- package/dist/engine/agent-api/RootGeometry.js +152 -0
- package/dist/engine/agent-api/RootGeometry.js.map +1 -0
- package/dist/engine/agent-api/SpatialAnchoring.d.ts +47 -0
- package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -1
- package/dist/engine/agent-api/SpatialAnchoring.js +46 -0
- package/dist/engine/agent-api/SpatialAnchoring.js.map +1 -1
- package/dist/engine/agent-api/VehicleChassis.d.ts +52 -0
- package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -1
- package/dist/engine/agent-api/VehicleChassis.js +182 -8
- package/dist/engine/agent-api/VehicleChassis.js.map +1 -1
- package/dist/engine/agent-api/WorldLabelRenderer.d.ts +65 -1
- package/dist/engine/agent-api/WorldLabelRenderer.d.ts.map +1 -1
- package/dist/engine/agent-api/WorldLabelRenderer.js +48 -5
- package/dist/engine/agent-api/WorldLabelRenderer.js.map +1 -1
- package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +1 -1
- package/dist/engine/agent-api/index.d.ts +240 -14
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +1435 -344
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/lean-base.d.ts +224 -0
- package/dist/engine/agent-api/lean-base.d.ts.map +1 -0
- package/dist/engine/agent-api/lean-base.js +322 -0
- package/dist/engine/agent-api/lean-base.js.map +1 -0
- package/dist/engine/agent-api/lean-game.d.ts +3 -0
- package/dist/engine/agent-api/lean-game.d.ts.map +1 -0
- package/dist/engine/agent-api/lean-game.js +3 -0
- package/dist/engine/agent-api/lean-game.js.map +1 -0
- package/dist/engine/agent-api/lean-product.d.ts +3 -0
- package/dist/engine/agent-api/lean-product.d.ts.map +1 -0
- package/dist/engine/agent-api/lean-product.js +3 -0
- package/dist/engine/agent-api/lean-product.js.map +1 -0
- package/dist/engine/agent-api/lean.d.ts +3 -0
- package/dist/engine/agent-api/lean.d.ts.map +1 -0
- package/dist/engine/agent-api/lean.js +3 -0
- package/dist/engine/agent-api/lean.js.map +1 -0
- package/dist/engine/agent-api/media-node.d.ts +42 -0
- package/dist/engine/agent-api/media-node.d.ts.map +1 -0
- package/dist/engine/agent-api/media-node.js +44 -0
- package/dist/engine/agent-api/media-node.js.map +1 -0
- package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
- package/dist/engine/game/GameAudio.d.ts +5 -0
- package/dist/engine/game/GameAudio.d.ts.map +1 -1
- package/dist/engine/game/GameAudio.js +65 -23
- package/dist/engine/game/GameAudio.js.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts +9 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.js +25 -7
- package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
- package/dist/engine/production-runtime/index.d.ts +2 -2
- package/dist/engine/production-runtime/index.d.ts.map +1 -1
- package/dist/engine/threejs-example-parity/FlagshipFoundation.d.ts +3 -3
- package/dist/engine/threejs-example-parity/FlagshipFoundation.d.ts.map +1 -1
- package/dist/environments/index.d.ts +5 -10
- package/dist/environments/index.d.ts.map +1 -1
- package/dist/environments/index.js +0 -3
- package/dist/environments/index.js.map +1 -1
- package/dist/environments/node.d.ts +7 -0
- package/dist/environments/node.d.ts.map +1 -0
- package/dist/environments/node.js +5 -0
- package/dist/environments/node.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/input/InputActionBinding.d.ts +44 -0
- package/dist/input/InputActionBinding.d.ts.map +1 -0
- package/dist/input/InputActionBinding.js +86 -0
- package/dist/input/InputActionBinding.js.map +1 -0
- package/dist/input/InputActionBindingFixtures.d.ts +8 -0
- package/dist/input/InputActionBindingFixtures.d.ts.map +1 -1
- package/dist/input/InputActionBindingFixtures.js +8 -0
- package/dist/input/InputActionBindingFixtures.js.map +1 -1
- package/dist/input/InputValueProcessors.d.ts +19 -0
- package/dist/input/InputValueProcessors.d.ts.map +1 -0
- package/dist/input/InputValueProcessors.js +24 -0
- package/dist/input/InputValueProcessors.js.map +1 -0
- package/dist/input/index.d.ts +2 -6
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +1 -3
- package/dist/input/index.js.map +1 -1
- package/dist/lean/ArcadeRuntime.d.ts +111 -0
- package/dist/lean/ArcadeRuntime.d.ts.map +1 -0
- package/dist/lean/ArcadeRuntime.js +219 -0
- package/dist/lean/ArcadeRuntime.js.map +1 -0
- package/dist/lean/base.d.ts +228 -0
- package/dist/lean/base.d.ts.map +1 -0
- package/dist/lean/base.js +322 -0
- package/dist/lean/base.js.map +1 -0
- package/dist/lean/game.d.ts +19 -0
- package/dist/lean/game.d.ts.map +1 -0
- package/dist/lean/game.js +37 -0
- package/dist/lean/game.js.map +1 -0
- package/dist/lean/index.d.ts +4 -0
- package/dist/lean/index.d.ts.map +1 -0
- package/dist/lean/index.js +10 -0
- package/dist/lean/index.js.map +1 -0
- package/dist/lean/product.d.ts +4 -0
- package/dist/lean/product.d.ts.map +1 -0
- package/dist/lean/product.js +55 -0
- package/dist/lean/product.js.map +1 -0
- package/dist/materials/index.d.ts +1 -10
- package/dist/materials/index.d.ts.map +1 -1
- package/dist/materials/index.js +1 -6
- package/dist/materials/index.js.map +1 -1
- package/dist/materials/node.d.ts +4 -0
- package/dist/materials/node.d.ts.map +1 -0
- package/dist/materials/node.js +3 -0
- package/dist/materials/node.js.map +1 -0
- package/dist/physics/ArcadeCharacterController.d.ts +53 -0
- package/dist/physics/ArcadeCharacterController.d.ts.map +1 -0
- package/dist/physics/ArcadeCharacterController.js +98 -0
- package/dist/physics/ArcadeCharacterController.js.map +1 -0
- package/dist/physics/ArcadeVehicleTelemetry.d.ts +162 -0
- package/dist/physics/ArcadeVehicleTelemetry.d.ts.map +1 -0
- package/dist/physics/ArcadeVehicleTelemetry.js +363 -0
- package/dist/physics/ArcadeVehicleTelemetry.js.map +1 -0
- package/dist/physics/CharacterController.d.ts +52 -0
- package/dist/physics/CharacterController.d.ts.map +1 -1
- package/dist/physics/CharacterController.js +380 -7
- package/dist/physics/CharacterController.js.map +1 -1
- package/dist/physics/Constraint.d.ts +20 -4
- package/dist/physics/Constraint.d.ts.map +1 -1
- package/dist/physics/Constraint.js +34 -60
- package/dist/physics/Constraint.js.map +1 -1
- package/dist/physics/FightingCharacterController.d.ts +32 -0
- package/dist/physics/FightingCharacterController.d.ts.map +1 -0
- package/dist/physics/FightingCharacterController.js +76 -0
- package/dist/physics/FightingCharacterController.js.map +1 -0
- package/dist/physics/MeshBVH.d.ts +72 -0
- package/dist/physics/MeshBVH.d.ts.map +1 -0
- package/dist/physics/MeshBVH.js +244 -0
- package/dist/physics/MeshBVH.js.map +1 -0
- package/dist/physics/PathFollowDriver.d.ts +162 -0
- package/dist/physics/PathFollowDriver.d.ts.map +1 -0
- package/dist/physics/PathFollowDriver.js +163 -0
- package/dist/physics/PathFollowDriver.js.map +1 -0
- package/dist/physics/PhysicsDebugDraw.d.ts +40 -1
- package/dist/physics/PhysicsDebugDraw.d.ts.map +1 -1
- package/dist/physics/PhysicsDebugDraw.js +87 -17
- package/dist/physics/PhysicsDebugDraw.js.map +1 -1
- package/dist/physics/PhysicsWorld.d.ts +37 -18
- package/dist/physics/PhysicsWorld.d.ts.map +1 -1
- package/dist/physics/PhysicsWorld.js +231 -630
- package/dist/physics/PhysicsWorld.js.map +1 -1
- package/dist/physics/RacingLineProfile.d.ts +116 -0
- package/dist/physics/RacingLineProfile.d.ts.map +1 -0
- package/dist/physics/RacingLineProfile.js +181 -0
- package/dist/physics/RacingLineProfile.js.map +1 -0
- package/dist/physics/Raycast.d.ts +11 -0
- package/dist/physics/Raycast.d.ts.map +1 -1
- package/dist/physics/Raycast.js +62 -8
- package/dist/physics/Raycast.js.map +1 -1
- package/dist/physics/RigidBody.d.ts +16 -9
- package/dist/physics/RigidBody.d.ts.map +1 -1
- package/dist/physics/RigidBody.js +23 -75
- package/dist/physics/RigidBody.js.map +1 -1
- package/dist/physics/SurfaceQuery.d.ts +72 -0
- package/dist/physics/SurfaceQuery.d.ts.map +1 -0
- package/dist/physics/SurfaceQuery.js +89 -0
- package/dist/physics/SurfaceQuery.js.map +1 -0
- package/dist/physics/VehicleDynamics.d.ts +10 -0
- package/dist/physics/VehicleDynamics.d.ts.map +1 -1
- package/dist/physics/VehicleDynamics.js +31 -3
- package/dist/physics/VehicleDynamics.js.map +1 -1
- package/dist/physics/VehicleMotion.d.ts +125 -0
- package/dist/physics/VehicleMotion.d.ts.map +1 -0
- package/dist/physics/VehicleMotion.js +373 -0
- package/dist/physics/VehicleMotion.js.map +1 -0
- package/dist/physics/index.d.ts +62 -17
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +70 -17
- package/dist/physics/index.js.map +1 -1
- package/dist/physics/solverless-entry.d.ts +41 -0
- package/dist/physics/solverless-entry.d.ts.map +1 -0
- package/dist/physics/solverless-entry.js +40 -0
- package/dist/physics/solverless-entry.js.map +1 -0
- package/dist/physics/solverless.d.ts +37 -0
- package/dist/physics/solverless.d.ts.map +1 -0
- package/dist/physics/solverless.js +36 -0
- package/dist/physics/solverless.js.map +1 -0
- package/dist/physics/world-entry.d.ts +31 -0
- package/dist/physics/world-entry.d.ts.map +1 -0
- package/dist/physics/world-entry.js +30 -0
- package/dist/physics/world-entry.js.map +1 -0
- package/dist/physics/world.d.ts +18 -0
- package/dist/physics/world.d.ts.map +1 -0
- package/dist/physics/world.js +17 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/physics-rapier/index.d.ts +169 -0
- package/dist/physics-rapier/index.d.ts.map +1 -0
- package/dist/physics-rapier/index.js +311 -0
- package/dist/physics-rapier/index.js.map +1 -0
- package/dist/product-studio/ProductLighting.d.ts.map +1 -1
- package/dist/product-studio/ProductLighting.js +34 -3
- package/dist/product-studio/ProductLighting.js.map +1 -1
- package/dist/rendering/ArchitecturalLighting.d.ts +35 -0
- package/dist/rendering/ArchitecturalLighting.d.ts.map +1 -0
- package/dist/rendering/ArchitecturalLighting.js +162 -0
- package/dist/rendering/ArchitecturalLighting.js.map +1 -0
- package/dist/rendering/ArchitecturalMaterialCatalog.d.ts +1 -1
- package/dist/rendering/ArchitecturalMaterialCatalog.d.ts.map +1 -1
- package/dist/rendering/ArchitecturalMaterialCatalog.js +1 -1
- package/dist/rendering/ArchitecturalMaterialCatalog.js.map +1 -1
- package/dist/rendering/ArchitecturalMeasurement.d.ts +27 -0
- package/dist/rendering/ArchitecturalMeasurement.d.ts.map +1 -0
- package/dist/rendering/ArchitecturalMeasurement.js +112 -0
- package/dist/rendering/ArchitecturalMeasurement.js.map +1 -0
- package/dist/rendering/CameraFraming.d.ts +77 -0
- package/dist/rendering/CameraFraming.d.ts.map +1 -1
- package/dist/rendering/CameraFraming.js +176 -1
- package/dist/rendering/CameraFraming.js.map +1 -1
- package/dist/rendering/CanonicalProductScene.d.ts +13 -0
- package/dist/rendering/CanonicalProductScene.d.ts.map +1 -0
- package/dist/rendering/CanonicalProductScene.js +78 -0
- package/dist/rendering/CanonicalProductScene.js.map +1 -0
- package/dist/rendering/CascadedShadowMaps.d.ts +1 -1
- package/dist/rendering/CascadedShadowMaps.d.ts.map +1 -1
- package/dist/rendering/CascadedShadowMaps.js +1 -1
- package/dist/rendering/CascadedShadowMaps.js.map +1 -1
- package/dist/rendering/DepthPass.d.ts +1 -1
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +2 -2
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/EnvironmentBackgroundPass.d.ts +1 -1
- package/dist/rendering/EnvironmentBackgroundPass.d.ts.map +1 -1
- package/dist/rendering/EnvironmentBackgroundPass.js +2 -2
- package/dist/rendering/EnvironmentBackgroundPass.js.map +1 -1
- package/dist/rendering/EnvironmentPlatform.js +2 -2
- package/dist/rendering/EnvironmentPlatform.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts +1 -1
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +24 -10
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/Geometry.d.ts +2 -0
- package/dist/rendering/Geometry.d.ts.map +1 -1
- package/dist/rendering/Geometry.js +15 -0
- package/dist/rendering/Geometry.js.map +1 -1
- package/dist/rendering/InstancedPBRMaterial.js +1 -1
- package/dist/rendering/InstancedPBRMaterial.js.map +1 -1
- package/dist/rendering/InstancedUnlitMaterial.js +1 -1
- package/dist/rendering/InstancedUnlitMaterial.js.map +1 -1
- package/dist/rendering/Material.js +2 -2
- package/dist/rendering/Material.js.map +1 -1
- package/dist/rendering/MaterialBinding.js +4 -4
- package/dist/rendering/MaterialBinding.js.map +1 -1
- package/dist/rendering/MaterialInstance.js +2 -2
- package/dist/rendering/MaterialInstance.js.map +1 -1
- package/dist/rendering/MorphUnlitMaterial.js +1 -1
- package/dist/rendering/MorphUnlitMaterial.js.map +1 -1
- package/dist/rendering/NormalMappedPBRMaterial.js +1 -1
- package/dist/rendering/NormalMappedPBRMaterial.js.map +1 -1
- package/dist/rendering/OceanSurface.d.ts +62 -0
- package/dist/rendering/OceanSurface.d.ts.map +1 -0
- package/dist/rendering/OceanSurface.js +240 -0
- package/dist/rendering/OceanSurface.js.map +1 -0
- package/dist/rendering/PBRMaterial.d.ts.map +1 -1
- package/dist/rendering/PBRMaterial.js +3 -3
- package/dist/rendering/PBRMaterial.js.map +1 -1
- package/dist/rendering/PortableShaderMaterial.d.ts +60 -0
- package/dist/rendering/PortableShaderMaterial.d.ts.map +1 -0
- package/dist/rendering/PortableShaderMaterial.js +223 -0
- package/dist/rendering/PortableShaderMaterial.js.map +1 -0
- package/dist/rendering/PostProcessPass.d.ts.map +1 -1
- package/dist/rendering/PostProcessPass.js +30 -6
- package/dist/rendering/PostProcessPass.js.map +1 -1
- package/dist/rendering/ProceduralTexture.d.ts +27 -0
- package/dist/rendering/ProceduralTexture.d.ts.map +1 -0
- package/dist/rendering/ProceduralTexture.js +336 -0
- package/dist/rendering/ProceduralTexture.js.map +1 -0
- package/dist/rendering/ProductTurntable.d.ts +96 -0
- package/dist/rendering/ProductTurntable.d.ts.map +1 -0
- package/dist/rendering/ProductTurntable.js +639 -0
- package/dist/rendering/ProductTurntable.js.map +1 -0
- package/dist/rendering/RenderDevice.d.ts +30 -0
- package/dist/rendering/RenderDevice.d.ts.map +1 -1
- package/dist/rendering/RenderDevice.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +28 -4
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +34 -12
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/RendererPostprocessPlan.js +4 -4
- package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
- package/dist/rendering/ScreenSpaceLineMaterial.js +1 -1
- package/dist/rendering/ScreenSpaceLineMaterial.js.map +1 -1
- package/dist/rendering/ShaderChunks.d.ts.map +1 -1
- package/dist/rendering/ShaderChunks.js +81 -19
- package/dist/rendering/ShaderChunks.js.map +1 -1
- package/dist/rendering/ShaderLibrary.d.ts +2 -78
- package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/ShaderLibrary.js +127 -793
- package/dist/rendering/ShaderLibrary.js.map +1 -1
- package/dist/rendering/ShaderLibraryCore.d.ts +100 -0
- package/dist/rendering/ShaderLibraryCore.d.ts.map +1 -0
- package/dist/rendering/ShaderLibraryCore.js +800 -0
- package/dist/rendering/ShaderLibraryCore.js.map +1 -0
- package/dist/rendering/ShaderModule.d.ts +1 -1
- package/dist/rendering/ShaderModule.d.ts.map +1 -1
- package/dist/rendering/ShaderModule.js +4 -2
- package/dist/rendering/ShaderModule.js.map +1 -1
- package/dist/rendering/ShadowPass.d.ts +1 -1
- package/dist/rendering/ShadowPass.d.ts.map +1 -1
- package/dist/rendering/ShadowPass.js +6 -4
- package/dist/rendering/ShadowPass.js.map +1 -1
- package/dist/rendering/SkinnedLitMaterial.js +1 -1
- package/dist/rendering/SkinnedLitMaterial.js.map +1 -1
- package/dist/rendering/SkinnedUnlitMaterial.js +1 -1
- package/dist/rendering/SkinnedUnlitMaterial.js.map +1 -1
- package/dist/rendering/SpaceEnvironment.d.ts +54 -0
- package/dist/rendering/SpaceEnvironment.d.ts.map +1 -0
- package/dist/rendering/SpaceEnvironment.js +116 -0
- package/dist/rendering/SpaceEnvironment.js.map +1 -0
- package/dist/rendering/TerrainHeightfield.d.ts +60 -0
- package/dist/rendering/TerrainHeightfield.d.ts.map +1 -0
- package/dist/rendering/TerrainHeightfield.js +239 -0
- package/dist/rendering/TerrainHeightfield.js.map +1 -0
- package/dist/rendering/TextureBinding.d.ts +14 -0
- package/dist/rendering/TextureBinding.d.ts.map +1 -1
- package/dist/rendering/TextureBinding.js +17 -0
- package/dist/rendering/TextureBinding.js.map +1 -1
- package/dist/rendering/TexturedPBRMaterial.js +1 -1
- package/dist/rendering/TexturedPBRMaterial.js.map +1 -1
- package/dist/rendering/TexturedUnlitMaterial.js +1 -1
- package/dist/rendering/TexturedUnlitMaterial.js.map +1 -1
- package/dist/rendering/UnlitMaterial.js +1 -1
- package/dist/rendering/UnlitMaterial.js.map +1 -1
- package/dist/rendering/VegetationFixtures.d.ts +1 -1
- package/dist/rendering/VegetationFixtures.d.ts.map +1 -1
- package/dist/rendering/VegetationFixtures.js +1 -1
- package/dist/rendering/VegetationFixtures.js.map +1 -1
- package/dist/rendering/VegetationScatter.d.ts +68 -0
- package/dist/rendering/VegetationScatter.d.ts.map +1 -0
- package/dist/rendering/VegetationScatter.js +241 -0
- package/dist/rendering/VegetationScatter.js.map +1 -0
- package/dist/rendering/VoxelWorld.d.ts +51 -0
- package/dist/rendering/VoxelWorld.d.ts.map +1 -0
- package/dist/rendering/VoxelWorld.js +183 -0
- package/dist/rendering/VoxelWorld.js.map +1 -0
- package/dist/rendering/Weather.d.ts +44 -0
- package/dist/rendering/Weather.d.ts.map +1 -0
- package/dist/rendering/Weather.js +140 -0
- package/dist/rendering/Weather.js.map +1 -0
- package/dist/rendering/WebGL2Device.d.ts +22 -0
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +134 -23
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/WebGPUDevice.d.ts +19 -2
- package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
- package/dist/rendering/WebGPUDevice.js +188 -9
- package/dist/rendering/WebGPUDevice.js.map +1 -1
- package/dist/rendering/index.d.ts +28 -35
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +36 -20
- package/dist/rendering/index.js.map +1 -1
- package/dist/rendering/lean/LeanProductRenderer.d.ts +29 -0
- package/dist/rendering/lean/LeanProductRenderer.d.ts.map +1 -0
- package/dist/rendering/lean/LeanProductRenderer.js +38 -0
- package/dist/rendering/lean/LeanProductRenderer.js.map +1 -0
- package/dist/rendering/lean/LeanProductionRenderer.d.ts +38 -0
- package/dist/rendering/lean/LeanProductionRenderer.d.ts.map +1 -0
- package/dist/rendering/lean/LeanProductionRenderer.js +88 -0
- package/dist/rendering/lean/LeanProductionRenderer.js.map +1 -0
- package/dist/rendering/lean-runtime.d.ts +18 -0
- package/dist/rendering/lean-runtime.d.ts.map +1 -0
- package/dist/rendering/lean-runtime.js +13 -0
- package/dist/rendering/lean-runtime.js.map +1 -0
- package/dist/rendering/postprocess/EffectComposer.d.ts.map +1 -1
- package/dist/rendering/postprocess/EffectComposer.js +1 -3
- package/dist/rendering/postprocess/EffectComposer.js.map +1 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.js +5 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts +9 -0
- package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionRendererTypes.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionRuntimeRenderer.d.ts +5 -0
- package/dist/rendering/production-runtime/ProductionRuntimeRenderer.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionRuntimeRenderer.js +53 -5
- package/dist/rendering/production-runtime/ProductionRuntimeRenderer.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGL2Renderer.d.ts +10 -0
- package/dist/rendering/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js +21 -2
- package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.js +4 -1
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/rendering/webgpu-device-entry.d.ts +25 -0
- package/dist/rendering/webgpu-device-entry.d.ts.map +1 -0
- package/dist/rendering/webgpu-device-entry.js +24 -0
- package/dist/rendering/webgpu-device-entry.js.map +1 -0
- package/dist/rendering/webgpu.d.ts +25 -0
- package/dist/rendering/webgpu.d.ts.map +1 -0
- package/dist/rendering/webgpu.js +24 -0
- package/dist/rendering/webgpu.js.map +1 -0
- package/dist/scene/MathTypes.d.ts +1 -0
- package/dist/scene/MathTypes.d.ts.map +1 -1
- package/dist/scene/MathTypes.js +3 -0
- package/dist/scene/MathTypes.js.map +1 -1
- package/dist/scene/Renderable.d.ts +6 -0
- package/dist/scene/Renderable.d.ts.map +1 -1
- package/dist/scene/Renderable.js +8 -2
- package/dist/scene/Renderable.js.map +1 -1
- package/dist/scripting/index.d.ts +0 -16
- package/dist/scripting/index.d.ts.map +1 -1
- package/dist/scripting/index.js +0 -8
- package/dist/scripting/index.js.map +1 -1
- package/dist/workflows/production-runtime/ProductionExampleRuntime.d.ts +2 -2
- package/dist/workflows/production-runtime/ProductionExampleRuntime.d.ts.map +1 -1
- package/dist/workflows/production-runtime/ProductionExampleRuntime.js +2 -2
- package/dist/workflows/production-runtime/ProductionExampleRuntime.js.map +1 -1
- package/package.json +243 -127
- package/templates/cinematic-scene/node_modules/.vite/deps/_metadata.json +8 -0
- package/templates/cinematic-scene/node_modules/.vite/deps/package.json +3 -0
- package/templates/cinematic-scene/package.json +1 -1
- package/templates/cinematic-scene/test-results/.last-run.json +6 -0
- package/templates/cinematic-scene/test-results/route-health-Aura3D-cinematic-scene-reaches-ready-state/error-context.md +64 -0
- package/templates/mini-game/README.md +3 -2
- package/templates/mini-game/package.json +1 -1
- package/templates/mini-game/src/aura-assets.ts +1 -1
- package/templates/mini-game/src/main.ts +69 -141
- package/templates/product-viewer/README.md +7 -5
- package/templates/product-viewer/index.html +1 -1
- package/templates/product-viewer/node_modules/.vite/deps/_metadata.json +8 -0
- package/templates/product-viewer/node_modules/.vite/deps/package.json +3 -0
- package/templates/product-viewer/package.json +1 -1
- package/templates/product-viewer/src/aura-assets.ts +1 -1
- package/templates/product-viewer/src/main.ts +29 -23
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { KinematicBody } from "./KinematicBody.js";
|
|
2
|
+
import { Shape } from "./Shape.js";
|
|
3
|
+
/**
|
|
4
|
+
* Authored-unit deterministic movement with a kinematic trigger proxy.
|
|
5
|
+
*
|
|
6
|
+
* This is deliberately not a rigid-body character controller. Physical slope,
|
|
7
|
+
* step, contact, and depenetration ownership belongs to the selected optional
|
|
8
|
+
* Rapier adapter. The proxy exists so arcade routes can reuse trigger/raycast
|
|
9
|
+
* plumbing without importing or pretending to be physical simulation.
|
|
10
|
+
*/
|
|
11
|
+
export class ArcadeCharacterController {
|
|
12
|
+
body;
|
|
13
|
+
collider;
|
|
14
|
+
radius;
|
|
15
|
+
halfHeight;
|
|
16
|
+
maxSpeed;
|
|
17
|
+
acceleration;
|
|
18
|
+
jumpSpeed;
|
|
19
|
+
motion;
|
|
20
|
+
#jumpQueued = false;
|
|
21
|
+
constructor(world, descriptor = {}) {
|
|
22
|
+
this.radius = positive(descriptor.radius ?? 0.24, "arcade character radius");
|
|
23
|
+
this.halfHeight = positive(descriptor.halfHeight ?? 0.38, "arcade character halfHeight");
|
|
24
|
+
this.maxSpeed = positive(descriptor.maxSpeed ?? 3.5, "arcade character maxSpeed");
|
|
25
|
+
this.acceleration = positive(descriptor.acceleration ?? 32, "arcade character acceleration");
|
|
26
|
+
this.jumpSpeed = positive(descriptor.jumpSpeed ?? 4.2, "arcade character jumpSpeed");
|
|
27
|
+
const position = descriptor.position ?? [0, this.halfHeight + this.radius, 0];
|
|
28
|
+
const groundY = descriptor.groundY ?? position[1] - this.halfHeight - this.radius;
|
|
29
|
+
this.motion = new KinematicBody({
|
|
30
|
+
id: "arcade-character",
|
|
31
|
+
position,
|
|
32
|
+
halfExtents: [this.radius, this.halfHeight + this.radius, this.radius],
|
|
33
|
+
maxSpeed: this.maxSpeed,
|
|
34
|
+
acceleration: this.acceleration,
|
|
35
|
+
airAcceleration: this.acceleration * 0.65,
|
|
36
|
+
jumpSpeed: this.jumpSpeed,
|
|
37
|
+
gravity: descriptor.gravity ?? 9.81,
|
|
38
|
+
groundY,
|
|
39
|
+
groundSnapDistance: 0.08,
|
|
40
|
+
lockDepth: false
|
|
41
|
+
});
|
|
42
|
+
this.body = world.createRigidBody({ type: "kinematic", position });
|
|
43
|
+
this.collider = world.createCollider(this.body, {
|
|
44
|
+
shape: Shape.capsule(this.radius, this.halfHeight),
|
|
45
|
+
sensor: true
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
setMoveInput(input) {
|
|
49
|
+
this.motion.setMoveInput({ x: finiteOrZero(input.x), z: finiteOrZero(input.z ?? 0) });
|
|
50
|
+
}
|
|
51
|
+
jump() {
|
|
52
|
+
this.#jumpQueued = true;
|
|
53
|
+
this.motion.jump();
|
|
54
|
+
}
|
|
55
|
+
teleport(position) {
|
|
56
|
+
this.motion.position = [...position];
|
|
57
|
+
this.motion.previousPosition = [...position];
|
|
58
|
+
this.motion.velocity = [0, 0, 0];
|
|
59
|
+
this.motion.grounded = false;
|
|
60
|
+
this.#syncProxy();
|
|
61
|
+
}
|
|
62
|
+
step(dt) {
|
|
63
|
+
const events = this.motion.step(dt);
|
|
64
|
+
this.#syncProxy();
|
|
65
|
+
const snapshot = this.motion.snapshot();
|
|
66
|
+
const jumpedThisFrame = this.#jumpQueued && events.some((event) => event.type === "jump");
|
|
67
|
+
this.#jumpQueued = false;
|
|
68
|
+
return stateFromSnapshot(snapshot, jumpedThisFrame);
|
|
69
|
+
}
|
|
70
|
+
snapshot() {
|
|
71
|
+
return stateFromSnapshot(this.motion.snapshot(), false);
|
|
72
|
+
}
|
|
73
|
+
#syncProxy() {
|
|
74
|
+
this.body.setPosition(this.motion.position);
|
|
75
|
+
this.body.setVelocity([0, 0, 0]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function stateFromSnapshot(snapshot, jumpedThisFrame) {
|
|
79
|
+
const speed = Math.hypot(snapshot.velocity[0], snapshot.velocity[2]);
|
|
80
|
+
return {
|
|
81
|
+
grounded: snapshot.grounded,
|
|
82
|
+
groundNormal: [0, 1, 0],
|
|
83
|
+
groundColliderId: null,
|
|
84
|
+
desiredVelocity: [snapshot.moveInput[0] * speed, snapshot.velocity[1], snapshot.moveInput[2] * speed],
|
|
85
|
+
velocity: snapshot.velocity,
|
|
86
|
+
speed,
|
|
87
|
+
jumpedThisFrame
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function positive(value, label) {
|
|
91
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
92
|
+
throw new RangeError(`${label} must be finite and positive.`);
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
function finiteOrZero(value) {
|
|
96
|
+
return Number.isFinite(value) ? value : 0;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=ArcadeCharacterController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArcadeCharacterController.js","sourceRoot":"","sources":["../../../../packages/physics/src/ArcadeCharacterController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export interface ArcadeVehicleTelemetryInput {
|
|
2
|
+
readonly elapsedSeconds: number;
|
|
3
|
+
readonly throttle?: number;
|
|
4
|
+
readonly brake?: number;
|
|
5
|
+
readonly steer?: number;
|
|
6
|
+
readonly handbrake?: boolean;
|
|
7
|
+
readonly nitro?: boolean;
|
|
8
|
+
readonly maxSpeedKph?: number;
|
|
9
|
+
readonly acceleration?: number;
|
|
10
|
+
readonly brakeForce?: number;
|
|
11
|
+
readonly gripFactor?: number;
|
|
12
|
+
readonly driftFactor?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ArcadeVehicleTelemetrySample {
|
|
15
|
+
readonly speedKph: number;
|
|
16
|
+
readonly rpm: number;
|
|
17
|
+
readonly nitro: number;
|
|
18
|
+
readonly steerAngle: number;
|
|
19
|
+
readonly driftSlip: number;
|
|
20
|
+
readonly grip: number;
|
|
21
|
+
readonly wheelSpin: number;
|
|
22
|
+
readonly suspensionCompression: readonly [number, number, number, number];
|
|
23
|
+
}
|
|
24
|
+
export type PacejkaTirePreset = "street" | "sport" | "racing" | "offroad";
|
|
25
|
+
export type RacingAiDifficulty = "easy" | "medium" | "hard";
|
|
26
|
+
export type DrivetrainDifferential = "open" | "limited-slip" | "locked" | "electronic";
|
|
27
|
+
export interface PacejkaTireCoefficients {
|
|
28
|
+
readonly b: number;
|
|
29
|
+
readonly c: number;
|
|
30
|
+
readonly d: number;
|
|
31
|
+
readonly e: number;
|
|
32
|
+
}
|
|
33
|
+
export interface PacejkaTireForceInput {
|
|
34
|
+
readonly longitudinalVelocity: number;
|
|
35
|
+
readonly lateralVelocity?: number;
|
|
36
|
+
readonly angularVelocity: number;
|
|
37
|
+
readonly normalForce: number;
|
|
38
|
+
readonly steeringAngle?: number;
|
|
39
|
+
readonly camberAngle?: number;
|
|
40
|
+
readonly radius?: number;
|
|
41
|
+
readonly width?: number;
|
|
42
|
+
readonly maxLoad?: number;
|
|
43
|
+
readonly loadSensitivity?: number;
|
|
44
|
+
readonly rollingResistance?: number;
|
|
45
|
+
readonly longitudinal?: PacejkaTireCoefficients | PacejkaTirePreset;
|
|
46
|
+
readonly lateral?: PacejkaTireCoefficients | PacejkaTirePreset;
|
|
47
|
+
}
|
|
48
|
+
export interface PacejkaTireForceSample {
|
|
49
|
+
readonly longitudinalForce: number;
|
|
50
|
+
readonly lateralForce: number;
|
|
51
|
+
readonly combinedForce: number;
|
|
52
|
+
readonly slipRatio: number;
|
|
53
|
+
readonly slipAngle: number;
|
|
54
|
+
readonly aligningTorque: number;
|
|
55
|
+
readonly optimalSlipRatio: number;
|
|
56
|
+
readonly optimalSlipAngle: number;
|
|
57
|
+
readonly preset: {
|
|
58
|
+
readonly longitudinal: PacejkaTirePreset | "custom";
|
|
59
|
+
readonly lateral: PacejkaTirePreset | "custom";
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export interface RacingAiDriverInput {
|
|
63
|
+
readonly difficulty?: RacingAiDifficulty;
|
|
64
|
+
readonly elapsedSeconds: number;
|
|
65
|
+
readonly progress: number;
|
|
66
|
+
readonly speedKph: number;
|
|
67
|
+
readonly targetSpeedKph?: number;
|
|
68
|
+
readonly trackCurvature?: number;
|
|
69
|
+
readonly opponentDistance?: number;
|
|
70
|
+
readonly opponentAhead?: boolean;
|
|
71
|
+
readonly playerGapSeconds?: number;
|
|
72
|
+
}
|
|
73
|
+
export interface RacingAiDriverSample {
|
|
74
|
+
readonly difficulty: RacingAiDifficulty;
|
|
75
|
+
readonly throttle: number;
|
|
76
|
+
readonly brake: number;
|
|
77
|
+
readonly steer: number;
|
|
78
|
+
readonly targetSpeedKph: number;
|
|
79
|
+
readonly lookaheadDistance: number;
|
|
80
|
+
readonly reactionTime: number;
|
|
81
|
+
readonly aggressiveness: number;
|
|
82
|
+
readonly overtaking: boolean;
|
|
83
|
+
readonly overtakeOffset: number;
|
|
84
|
+
readonly rubberbandBoost: number;
|
|
85
|
+
}
|
|
86
|
+
export interface VehicleDrivetrainInput {
|
|
87
|
+
readonly speedKph: number;
|
|
88
|
+
readonly throttle?: number;
|
|
89
|
+
readonly clutch?: number;
|
|
90
|
+
readonly gearRatios?: readonly number[];
|
|
91
|
+
readonly finalDriveRatio?: number;
|
|
92
|
+
readonly idleRpm?: number;
|
|
93
|
+
readonly maxRpm?: number;
|
|
94
|
+
readonly peakTorque?: number;
|
|
95
|
+
readonly peakTorqueRpm?: number;
|
|
96
|
+
readonly upshiftRpm?: number;
|
|
97
|
+
readonly downshiftRpm?: number;
|
|
98
|
+
readonly differential?: DrivetrainDifferential;
|
|
99
|
+
readonly frontRearSplit?: number;
|
|
100
|
+
readonly lockingFactor?: number;
|
|
101
|
+
readonly dragCoefficient?: number;
|
|
102
|
+
readonly frontalArea?: number;
|
|
103
|
+
readonly downforceCoefficient?: number;
|
|
104
|
+
}
|
|
105
|
+
export interface VehicleDrivetrainSample {
|
|
106
|
+
readonly gear: number;
|
|
107
|
+
readonly gearRatio: number;
|
|
108
|
+
readonly engineRpm: number;
|
|
109
|
+
readonly engineTorque: number;
|
|
110
|
+
readonly wheelTorque: number;
|
|
111
|
+
readonly frontTorque: number;
|
|
112
|
+
readonly rearTorque: number;
|
|
113
|
+
readonly dragForce: number;
|
|
114
|
+
readonly downforce: number;
|
|
115
|
+
readonly shiftState: "hold" | "upshift" | "downshift";
|
|
116
|
+
readonly differential: DrivetrainDifferential;
|
|
117
|
+
}
|
|
118
|
+
export interface VehicleEffectEmitterInput {
|
|
119
|
+
readonly speedKph: number;
|
|
120
|
+
readonly throttle?: number;
|
|
121
|
+
readonly steer?: number;
|
|
122
|
+
readonly handbrake?: boolean;
|
|
123
|
+
readonly nitroActive?: boolean;
|
|
124
|
+
readonly wheelOnGround?: readonly [boolean, boolean, boolean, boolean];
|
|
125
|
+
}
|
|
126
|
+
export interface VehicleEffectEmitterSample {
|
|
127
|
+
readonly tireSmokeRates: readonly [number, number, number, number];
|
|
128
|
+
readonly totalTireSmokeRate: number;
|
|
129
|
+
readonly nitroFlameRate: number;
|
|
130
|
+
readonly visibleEffectEmitters: number;
|
|
131
|
+
readonly smokeReason: "none" | "handbrake" | "launch-wheelspin" | "high-speed-steer";
|
|
132
|
+
}
|
|
133
|
+
export interface VehicleDamageInput {
|
|
134
|
+
readonly health?: number;
|
|
135
|
+
readonly impactSpeedKph?: number;
|
|
136
|
+
readonly collisionSeverity?: number;
|
|
137
|
+
readonly repair?: number;
|
|
138
|
+
}
|
|
139
|
+
export interface VehicleDamageSample {
|
|
140
|
+
readonly health: number;
|
|
141
|
+
readonly damage: number;
|
|
142
|
+
readonly impactDamage: number;
|
|
143
|
+
readonly visualDamageLevel: "none" | "scratched" | "dented" | "critical";
|
|
144
|
+
readonly disabled: boolean;
|
|
145
|
+
}
|
|
146
|
+
export declare function sampleArcadeVehicleTelemetry(input: ArcadeVehicleTelemetryInput): ArcadeVehicleTelemetrySample;
|
|
147
|
+
export declare function sampleVehicleDamage(input: VehicleDamageInput): VehicleDamageSample;
|
|
148
|
+
export declare function sampleVehicleEffectEmitters(input: VehicleEffectEmitterInput): VehicleEffectEmitterSample;
|
|
149
|
+
export declare function sampleVehicleDrivetrain(input: VehicleDrivetrainInput): VehicleDrivetrainSample;
|
|
150
|
+
export declare function sampleRacingAiDriver(input: RacingAiDriverInput): RacingAiDriverSample;
|
|
151
|
+
/**
|
|
152
|
+
* Peak lateral cornering stiffness of a tyre preset, per newton of vertical load.
|
|
153
|
+
*
|
|
154
|
+
* This is the initial slope of the Magic Formula lateral curve, `d * c * b`, in units of
|
|
155
|
+
* force per radian of slip per newton of load. An integrator needs it to size a stable
|
|
156
|
+
* timestep: the tyre is the stiffest spring in a vehicle model, so it sets the step, and
|
|
157
|
+
* assuming a fixed 1/60 s regardless of tyre, mass and wheelbase is what let the vehicle
|
|
158
|
+
* integrator go unstable and produce yaw opposing its own steering input.
|
|
159
|
+
*/
|
|
160
|
+
export declare function tirePeakCorneringStiffness(tire: PacejkaTireCoefficients | PacejkaTirePreset): number;
|
|
161
|
+
export declare function samplePacejkaTireForces(input: PacejkaTireForceInput): PacejkaTireForceSample;
|
|
162
|
+
//# sourceMappingURL=ArcadeVehicleTelemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArcadeVehicleTelemetry.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/ArcadeVehicleTelemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
export function sampleArcadeVehicleTelemetry(input) {
|
|
2
|
+
const elapsed = finiteNonNegative(input.elapsedSeconds, "elapsedSeconds");
|
|
3
|
+
const throttle = clamp(input.throttle ?? 1, -1, 1);
|
|
4
|
+
const brake = clamp(input.brake ?? 0, 0, 1);
|
|
5
|
+
const steer = clamp(input.steer ?? 0, -1, 1);
|
|
6
|
+
const maxSpeedKph = positive(input.maxSpeedKph ?? 220, "maxSpeedKph");
|
|
7
|
+
const acceleration = positive(input.acceleration ?? 9.5, "acceleration");
|
|
8
|
+
const brakeForce = positive(input.brakeForce ?? 14, "brakeForce");
|
|
9
|
+
const gripFactor = clamp(input.gripFactor ?? 0.82, 0, 1);
|
|
10
|
+
const driftFactor = clamp(input.driftFactor ?? 0.36, 0, 1);
|
|
11
|
+
const maxSpeedMps = maxSpeedKph / 3.6;
|
|
12
|
+
const accelerationCurve = 1 - Math.exp(-elapsed * acceleration / Math.max(1, maxSpeedMps));
|
|
13
|
+
const braking = Math.min(maxSpeedMps, brakeForce * brake * Math.min(elapsed, 4));
|
|
14
|
+
const nitroAvailable = Math.max(0, 100 - elapsed * 10.5);
|
|
15
|
+
const nitroBoost = input.nitro === true && nitroAvailable > 0 ? 1.18 : 1;
|
|
16
|
+
const signedSpeedMps = clamp((maxSpeedMps * accelerationCurve * throttle * nitroBoost) - braking, -maxSpeedMps * 0.32, maxSpeedMps * nitroBoost);
|
|
17
|
+
const speedRatio = Math.min(1, Math.abs(signedSpeedMps) / maxSpeedMps);
|
|
18
|
+
const highSpeedSteerLimit = 1 - speedRatio * 0.55;
|
|
19
|
+
const steerAngle = steer * 0.62 * highSpeedSteerLimit;
|
|
20
|
+
const handbrakeSlip = input.handbrake === true ? driftFactor * (0.45 + speedRatio * 0.55) : 0;
|
|
21
|
+
const steeringSlip = Math.abs(steer) * speedRatio * (1 - gripFactor) * 0.75;
|
|
22
|
+
const driftSlip = clamp(handbrakeSlip + steeringSlip, 0, 1);
|
|
23
|
+
const grip = clamp(gripFactor * (1 - driftSlip * 0.62), 0, 1);
|
|
24
|
+
const rpm = 1000 + speedRatio * 6100 + (input.nitro === true ? 650 : 0) + driftSlip * 450;
|
|
25
|
+
const wheelSpin = elapsed * Math.abs(signedSpeedMps) * (1 + driftSlip * 1.8);
|
|
26
|
+
const suspensionCompression = suspensionFor(steer, speedRatio, driftSlip);
|
|
27
|
+
return {
|
|
28
|
+
speedKph: Number((signedSpeedMps * 3.6).toFixed(3)),
|
|
29
|
+
rpm: Number(rpm.toFixed(3)),
|
|
30
|
+
nitro: Number(nitroAvailable.toFixed(3)),
|
|
31
|
+
steerAngle: Number(steerAngle.toFixed(5)),
|
|
32
|
+
driftSlip: Number(driftSlip.toFixed(5)),
|
|
33
|
+
grip: Number(grip.toFixed(5)),
|
|
34
|
+
wheelSpin: Number(wheelSpin.toFixed(5)),
|
|
35
|
+
suspensionCompression
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function sampleVehicleDamage(input) {
|
|
39
|
+
const health = clamp(finiteNonNegative(input.health ?? 100, "health"), 0, 100);
|
|
40
|
+
const impactSpeedKph = finiteNonNegative(input.impactSpeedKph ?? 0, "impactSpeedKph");
|
|
41
|
+
const collisionSeverity = clamp(input.collisionSeverity ?? 0, 0, 1);
|
|
42
|
+
const repair = clamp(input.repair ?? 0, 0, 100);
|
|
43
|
+
const impactDamage = Math.max(0, (impactSpeedKph - 18) * 0.34 * collisionSeverity);
|
|
44
|
+
const nextHealth = clamp(health - impactDamage + repair, 0, 100);
|
|
45
|
+
const damage = 100 - nextHealth;
|
|
46
|
+
return {
|
|
47
|
+
health: Number(nextHealth.toFixed(3)),
|
|
48
|
+
damage: Number(damage.toFixed(3)),
|
|
49
|
+
impactDamage: Number(impactDamage.toFixed(3)),
|
|
50
|
+
visualDamageLevel: damage >= 72 ? "critical" : damage >= 42 ? "dented" : damage > 0 ? "scratched" : "none",
|
|
51
|
+
disabled: nextHealth <= 0
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function sampleVehicleEffectEmitters(input) {
|
|
55
|
+
const speedKph = finiteNonNegative(input.speedKph, "speedKph");
|
|
56
|
+
const throttle = clamp(input.throttle ?? 0, -1, 1);
|
|
57
|
+
const steer = clamp(input.steer ?? 0, -1, 1);
|
|
58
|
+
const wheelOnGround = input.wheelOnGround ?? [true, true, true, true];
|
|
59
|
+
const smokeReason = input.handbrake === true
|
|
60
|
+
? "handbrake"
|
|
61
|
+
: Math.abs(throttle) > 0.7 && speedKph < 30
|
|
62
|
+
? "launch-wheelspin"
|
|
63
|
+
: Math.abs(steer) > 0.7 && speedKph > 50
|
|
64
|
+
? "high-speed-steer"
|
|
65
|
+
: "none";
|
|
66
|
+
const baseSmokeRate = smokeReason === "none" ? 0 : smokeReason === "handbrake" ? 64 : smokeReason === "launch-wheelspin" ? 46 : 38;
|
|
67
|
+
const tireSmokeRates = wheelOnGround.map((onGround, index) => {
|
|
68
|
+
const rearBias = index >= 2 ? 1.18 : 0.86;
|
|
69
|
+
return onGround ? Number((baseSmokeRate * rearBias).toFixed(3)) : 0;
|
|
70
|
+
});
|
|
71
|
+
const nitroFlameRate = input.nitroActive === true ? Number((160 + Math.abs(throttle) * 80).toFixed(3)) : 0;
|
|
72
|
+
const totalTireSmokeRate = Number(tireSmokeRates.reduce((sum, rate) => sum + rate, 0).toFixed(3));
|
|
73
|
+
return {
|
|
74
|
+
tireSmokeRates,
|
|
75
|
+
totalTireSmokeRate,
|
|
76
|
+
nitroFlameRate,
|
|
77
|
+
visibleEffectEmitters: tireSmokeRates.filter((rate) => rate > 0).length + (nitroFlameRate > 0 ? 1 : 0),
|
|
78
|
+
smokeReason
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function sampleVehicleDrivetrain(input) {
|
|
82
|
+
const speedKph = finiteNonNegative(input.speedKph, "speedKph");
|
|
83
|
+
const throttle = clamp(input.throttle ?? 1, 0, 1);
|
|
84
|
+
const clutch = clamp(input.clutch ?? 1, 0, 1);
|
|
85
|
+
const gearRatios = validateGearRatios(input.gearRatios ?? [3.42, 2.21, 1.52, 1.14, 0.89, 0.71]);
|
|
86
|
+
const finalDriveRatio = positive(input.finalDriveRatio ?? 3.55, "finalDriveRatio");
|
|
87
|
+
const idleRpm = positive(input.idleRpm ?? 950, "idleRpm");
|
|
88
|
+
const maxRpm = Math.max(idleRpm + 1, positive(input.maxRpm ?? 7200, "maxRpm"));
|
|
89
|
+
const peakTorque = positive(input.peakTorque ?? 420, "peakTorque");
|
|
90
|
+
const peakTorqueRpm = clamp(positive(input.peakTorqueRpm ?? 4200, "peakTorqueRpm"), idleRpm, maxRpm);
|
|
91
|
+
const upshiftRpm = clamp(input.upshiftRpm ?? maxRpm * 0.86, idleRpm, maxRpm);
|
|
92
|
+
const downshiftRpm = clamp(input.downshiftRpm ?? peakTorqueRpm * 0.55, idleRpm, upshiftRpm);
|
|
93
|
+
const differential = input.differential ?? "limited-slip";
|
|
94
|
+
const frontRearSplit = clamp(input.frontRearSplit ?? 0.42, 0, 1);
|
|
95
|
+
const lockingFactor = clamp(input.lockingFactor ?? 0.35, 0, 1);
|
|
96
|
+
const dragCoefficient = positive(input.dragCoefficient ?? 0.32, "dragCoefficient");
|
|
97
|
+
const frontalArea = positive(input.frontalArea ?? 2.1, "frontalArea");
|
|
98
|
+
const downforceCoefficient = finiteNonNegative(input.downforceCoefficient ?? 0.58, "downforceCoefficient");
|
|
99
|
+
const speedMps = speedKph / 3.6;
|
|
100
|
+
const wheelRadius = 0.34;
|
|
101
|
+
const wheelRpm = speedMps <= 0 ? 0 : (speedMps / (Math.PI * 2 * wheelRadius)) * 60;
|
|
102
|
+
const selected = selectAutomaticGear(gearRatios, wheelRpm, finalDriveRatio, idleRpm, maxRpm, upshiftRpm, downshiftRpm);
|
|
103
|
+
const engineRpm = clamp(Math.max(idleRpm, wheelRpm * selected.ratio * finalDriveRatio), idleRpm, maxRpm);
|
|
104
|
+
const engineTorque = engineTorqueAt(engineRpm, peakTorque, peakTorqueRpm, idleRpm, maxRpm) * throttle;
|
|
105
|
+
const differentialEfficiency = differential === "open"
|
|
106
|
+
? 0.92
|
|
107
|
+
: differential === "limited-slip"
|
|
108
|
+
? 0.95 + lockingFactor * 0.025
|
|
109
|
+
: differential === "locked"
|
|
110
|
+
? 0.96 + lockingFactor * 0.02
|
|
111
|
+
: 0.94 + lockingFactor * 0.04;
|
|
112
|
+
const wheelTorque = engineTorque * selected.ratio * finalDriveRatio * clutch * differentialEfficiency;
|
|
113
|
+
const torqueBias = differential === "open"
|
|
114
|
+
? 0
|
|
115
|
+
: differential === "limited-slip"
|
|
116
|
+
? lockingFactor * 0.04
|
|
117
|
+
: differential === "locked"
|
|
118
|
+
? lockingFactor * 0.02
|
|
119
|
+
: lockingFactor * 0.06;
|
|
120
|
+
const frontSplit = clamp(frontRearSplit - torqueBias, 0, 1);
|
|
121
|
+
const dragForce = 0.5 * 1.225 * dragCoefficient * frontalArea * speedMps * speedMps;
|
|
122
|
+
const downforce = 0.5 * 1.225 * downforceCoefficient * frontalArea * speedMps * speedMps;
|
|
123
|
+
return {
|
|
124
|
+
gear: selected.gear,
|
|
125
|
+
gearRatio: Number(selected.ratio.toFixed(4)),
|
|
126
|
+
engineRpm: Number(engineRpm.toFixed(3)),
|
|
127
|
+
engineTorque: Number(engineTorque.toFixed(3)),
|
|
128
|
+
wheelTorque: Number(wheelTorque.toFixed(3)),
|
|
129
|
+
frontTorque: Number((wheelTorque * frontSplit).toFixed(3)),
|
|
130
|
+
rearTorque: Number((wheelTorque * (1 - frontSplit)).toFixed(3)),
|
|
131
|
+
dragForce: Number(dragForce.toFixed(3)),
|
|
132
|
+
downforce: Number(downforce.toFixed(3)),
|
|
133
|
+
shiftState: selected.shiftState,
|
|
134
|
+
differential
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export function sampleRacingAiDriver(input) {
|
|
138
|
+
const elapsed = finiteNonNegative(input.elapsedSeconds, "elapsedSeconds");
|
|
139
|
+
const progress = clamp(finite(input.progress, "progress"), 0, 1);
|
|
140
|
+
const speedKph = finiteNonNegative(input.speedKph, "speedKph");
|
|
141
|
+
const targetSpeedKph = positive(input.targetSpeedKph ?? 220, "targetSpeedKph");
|
|
142
|
+
const curvature = clamp(input.trackCurvature ?? 0, -1, 1);
|
|
143
|
+
const opponentDistance = input.opponentDistance === undefined ? Number.POSITIVE_INFINITY : finiteNonNegative(input.opponentDistance, "opponentDistance");
|
|
144
|
+
const playerGapSeconds = finite(input.playerGapSeconds ?? 0, "playerGapSeconds");
|
|
145
|
+
const difficulty = input.difficulty ?? "medium";
|
|
146
|
+
const settings = racingAiSettings(difficulty);
|
|
147
|
+
const rubberbandBoost = clamp((-playerGapSeconds) * settings.rubberbandStrength * 0.08, -0.08, 0.18);
|
|
148
|
+
const desiredSpeed = targetSpeedKph * settings.targetSpeedFactor * (1 - Math.abs(curvature) * 0.24) * (1 + rubberbandBoost);
|
|
149
|
+
const speedError = desiredSpeed - speedKph;
|
|
150
|
+
const overtaking = input.opponentAhead === true && opponentDistance < 22 && settings.aggressiveness >= 0.55;
|
|
151
|
+
const deterministicSide = Math.sin((progress + elapsed * 0.13) * Math.PI * 6) >= 0 ? 1 : -1;
|
|
152
|
+
const overtakeOffset = overtaking ? deterministicSide * (0.28 + settings.aggressiveness * 0.18) : 0;
|
|
153
|
+
const racingLineSteer = Math.sin(progress * Math.PI * 2) * 0.18 + curvature * 0.62;
|
|
154
|
+
const rawSteer = racingLineSteer + overtakeOffset;
|
|
155
|
+
const steer = clamp(rawSteer * settings.steerSmoothing, -1, 1);
|
|
156
|
+
return {
|
|
157
|
+
difficulty,
|
|
158
|
+
throttle: Number(clamp(speedError / 48 + 0.5, 0, 1).toFixed(4)),
|
|
159
|
+
brake: Number(clamp(-speedError / 38 + Math.abs(curvature) * 0.18, 0, 1).toFixed(4)),
|
|
160
|
+
steer: Number(steer.toFixed(4)),
|
|
161
|
+
targetSpeedKph: Number(desiredSpeed.toFixed(3)),
|
|
162
|
+
lookaheadDistance: Number((15 + speedKph / 10 + (overtaking ? -4 : 0)).toFixed(3)),
|
|
163
|
+
reactionTime: settings.reactionTime,
|
|
164
|
+
aggressiveness: settings.aggressiveness,
|
|
165
|
+
overtaking,
|
|
166
|
+
overtakeOffset: Number(overtakeOffset.toFixed(4)),
|
|
167
|
+
rubberbandBoost: Number(rubberbandBoost.toFixed(4))
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Peak lateral cornering stiffness of a tyre preset, per newton of vertical load.
|
|
172
|
+
*
|
|
173
|
+
* This is the initial slope of the Magic Formula lateral curve, `d * c * b`, in units of
|
|
174
|
+
* force per radian of slip per newton of load. An integrator needs it to size a stable
|
|
175
|
+
* timestep: the tyre is the stiffest spring in a vehicle model, so it sets the step, and
|
|
176
|
+
* assuming a fixed 1/60 s regardless of tyre, mass and wheelbase is what let the vehicle
|
|
177
|
+
* integrator go unstable and produce yaw opposing its own steering input.
|
|
178
|
+
*/
|
|
179
|
+
export function tirePeakCorneringStiffness(tire) {
|
|
180
|
+
const { value } = coefficients(tire);
|
|
181
|
+
return value.d * value.c * value.b;
|
|
182
|
+
}
|
|
183
|
+
export function samplePacejkaTireForces(input) {
|
|
184
|
+
const normalForce = finiteNonNegative(input.normalForce, "normalForce");
|
|
185
|
+
const longitudinalVelocity = finite(input.longitudinalVelocity, "longitudinalVelocity");
|
|
186
|
+
const lateralVelocity = finite(input.lateralVelocity ?? 0, "lateralVelocity");
|
|
187
|
+
const angularVelocity = finite(input.angularVelocity, "angularVelocity");
|
|
188
|
+
const steeringAngle = finite(input.steeringAngle ?? 0, "steeringAngle");
|
|
189
|
+
const camberAngle = finite(input.camberAngle ?? 0, "camberAngle");
|
|
190
|
+
const radius = positive(input.radius ?? 0.33, "radius");
|
|
191
|
+
const width = positive(input.width ?? 0.225, "width");
|
|
192
|
+
const maxLoad = positive(input.maxLoad ?? 5000, "maxLoad");
|
|
193
|
+
const loadSensitivity = positive(input.loadSensitivity ?? 1, "loadSensitivity");
|
|
194
|
+
const rollingResistance = clamp(input.rollingResistance ?? 0.015, 0, 1);
|
|
195
|
+
const longitudinal = coefficients(input.longitudinal ?? "sport");
|
|
196
|
+
const lateral = coefficients(input.lateral ?? "sport");
|
|
197
|
+
if (normalForce === 0) {
|
|
198
|
+
return {
|
|
199
|
+
longitudinalForce: 0,
|
|
200
|
+
lateralForce: 0,
|
|
201
|
+
combinedForce: 0,
|
|
202
|
+
slipRatio: 0,
|
|
203
|
+
slipAngle: 0,
|
|
204
|
+
aligningTorque: 0,
|
|
205
|
+
optimalSlipRatio: optimalSlipRatio(longitudinal.value),
|
|
206
|
+
optimalSlipAngle: optimalSlipAngle(lateral.value),
|
|
207
|
+
preset: { longitudinal: longitudinal.preset, lateral: lateral.preset }
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const slipRatio = tireSlipRatio(longitudinalVelocity, angularVelocity, radius);
|
|
211
|
+
const slipAngle = tireSlipAngle(longitudinalVelocity, lateralVelocity, steeringAngle);
|
|
212
|
+
const loadFactor = clamp(Math.pow(normalForce / maxLoad, loadSensitivity), 0.1, 1.5);
|
|
213
|
+
const camberGrip = clamp(1 - Math.abs(camberAngle) * 0.1, 0.75, 1.08);
|
|
214
|
+
const longitudinalPure = pacejka(slipRatio, longitudinal.value) * normalForce * loadFactor * camberGrip
|
|
215
|
+
- Math.sign(longitudinalVelocity) * normalForce * rollingResistance;
|
|
216
|
+
/*
|
|
217
|
+
* Slip angle stays in radians.
|
|
218
|
+
*
|
|
219
|
+
* The lateral presets use stiffness factors around b=10..14, which is the radian
|
|
220
|
+
* convention for the Magic Formula. (The degree convention runs b=0.2..0.3.) Feeding
|
|
221
|
+
* degrees into radian coefficients moved the grip peak from ~6.9 degrees of slip to
|
|
222
|
+
* ~0.08 degrees, so every physically real cornering slip angle landed far down the
|
|
223
|
+
* falloff: at 19 degrees of slip the model returned mu=0.20 instead of mu=1.21.
|
|
224
|
+
*
|
|
225
|
+
* A tyre that loses 85% of its grip the instant it is asked to corner cannot hold a
|
|
226
|
+
* line, and it makes tiny near-zero slip angles produce enormous force swings, which
|
|
227
|
+
* showed up as yaw-rate chatter. Verified in `tyre-slip-curve.test.ts`.
|
|
228
|
+
*/
|
|
229
|
+
const lateralPure = pacejka(slipAngle, lateral.value) * normalForce * loadFactor * clamp(1 + camberAngle * 0.1, 0.75, 1.15);
|
|
230
|
+
const slipMagnitude = Math.hypot(Math.abs(slipRatio), Math.abs(slipAngle));
|
|
231
|
+
const longitudinalScale = slipMagnitude < 0.001 ? 1 : Math.sqrt(Math.max(0, 1 - Math.pow((Math.abs(slipAngle) / slipMagnitude) * 0.9, 2)));
|
|
232
|
+
const lateralScale = slipMagnitude < 0.001 ? 1 : Math.sqrt(Math.max(0, 1 - Math.pow((Math.abs(slipRatio) / slipMagnitude) * 0.9, 2)));
|
|
233
|
+
const longitudinalForce = longitudinalPure * longitudinalScale;
|
|
234
|
+
const lateralForce = lateralPure * lateralScale;
|
|
235
|
+
const pneumaticTrail = width * 0.5;
|
|
236
|
+
// Pneumatic trail collapses as the tyre saturates; 20 degrees expressed in radians.
|
|
237
|
+
const torqueCoeff = -pneumaticTrail * clamp(1 - Math.abs(slipAngle) / (20 * Math.PI / 180), 0, 1);
|
|
238
|
+
const aligningTorque = clamp(lateralForce * torqueCoeff, -normalForce * width, normalForce * width);
|
|
239
|
+
return {
|
|
240
|
+
longitudinalForce: Number(longitudinalForce.toFixed(3)),
|
|
241
|
+
lateralForce: Number(lateralForce.toFixed(3)),
|
|
242
|
+
combinedForce: Number(Math.hypot(longitudinalForce, lateralForce).toFixed(3)),
|
|
243
|
+
slipRatio: Number(slipRatio.toFixed(5)),
|
|
244
|
+
slipAngle: Number(slipAngle.toFixed(5)),
|
|
245
|
+
aligningTorque: Number(aligningTorque.toFixed(3)),
|
|
246
|
+
optimalSlipRatio: Number(optimalSlipRatio(longitudinal.value).toFixed(5)),
|
|
247
|
+
optimalSlipAngle: Number(optimalSlipAngle(lateral.value).toFixed(5)),
|
|
248
|
+
preset: { longitudinal: longitudinal.preset, lateral: lateral.preset }
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
function validateGearRatios(values) {
|
|
252
|
+
if (values.length === 0) {
|
|
253
|
+
throw new RangeError("Arcade vehicle telemetry gearRatios must contain at least one ratio.");
|
|
254
|
+
}
|
|
255
|
+
return values.map((value, index) => positive(value, `gearRatios[${index}]`));
|
|
256
|
+
}
|
|
257
|
+
function selectAutomaticGear(gearRatios, wheelRpm, finalDriveRatio, idleRpm, maxRpm, upshiftRpm, downshiftRpm) {
|
|
258
|
+
if (wheelRpm <= 1)
|
|
259
|
+
return { gear: 1, ratio: gearRatios[0] ?? 1, shiftState: "hold" };
|
|
260
|
+
let gearIndex = 0;
|
|
261
|
+
let rpm = wheelRpm * (gearRatios[gearIndex] ?? 1) * finalDriveRatio;
|
|
262
|
+
while (gearIndex < gearRatios.length - 1 && rpm > upshiftRpm) {
|
|
263
|
+
gearIndex += 1;
|
|
264
|
+
rpm = wheelRpm * (gearRatios[gearIndex] ?? 1) * finalDriveRatio;
|
|
265
|
+
}
|
|
266
|
+
while (gearIndex > 0 && rpm < downshiftRpm) {
|
|
267
|
+
gearIndex -= 1;
|
|
268
|
+
rpm = wheelRpm * (gearRatios[gearIndex] ?? 1) * finalDriveRatio;
|
|
269
|
+
}
|
|
270
|
+
const clampedRpm = clamp(rpm, idleRpm, maxRpm);
|
|
271
|
+
return {
|
|
272
|
+
gear: gearIndex + 1,
|
|
273
|
+
ratio: gearRatios[gearIndex] ?? 1,
|
|
274
|
+
shiftState: clampedRpm >= upshiftRpm && gearIndex < gearRatios.length - 1 ? "upshift" : clampedRpm <= downshiftRpm && gearIndex > 0 ? "downshift" : "hold"
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function engineTorqueAt(engineRpm, peakTorque, peakTorqueRpm, idleRpm, maxRpm) {
|
|
278
|
+
if (engineRpm <= peakTorqueRpm) {
|
|
279
|
+
const t = clamp((engineRpm - idleRpm) / Math.max(1, peakTorqueRpm - idleRpm), 0, 1);
|
|
280
|
+
return peakTorque * (0.8 + 0.2 * t);
|
|
281
|
+
}
|
|
282
|
+
const t = clamp((engineRpm - peakTorqueRpm) / Math.max(1, maxRpm - peakTorqueRpm), 0, 1);
|
|
283
|
+
return peakTorque * (1 - 0.4 * t);
|
|
284
|
+
}
|
|
285
|
+
function racingAiSettings(difficulty) {
|
|
286
|
+
switch (difficulty) {
|
|
287
|
+
case "easy":
|
|
288
|
+
return { targetSpeedFactor: 0.7, steerSmoothing: 0.3, reactionTime: 0.3, aggressiveness: 0.3, rubberbandStrength: 0.5 };
|
|
289
|
+
case "hard":
|
|
290
|
+
return { targetSpeedFactor: 0.95, steerSmoothing: 0.7, reactionTime: 0.05, aggressiveness: 0.9, rubberbandStrength: 0.1 };
|
|
291
|
+
case "medium":
|
|
292
|
+
return { targetSpeedFactor: 0.85, steerSmoothing: 0.5, reactionTime: 0.15, aggressiveness: 0.6, rubberbandStrength: 0.3 };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function suspensionFor(steer, speedRatio, driftSlip) {
|
|
296
|
+
const loadTransfer = steer * speedRatio * 0.18;
|
|
297
|
+
const brakeDive = driftSlip * 0.08;
|
|
298
|
+
return [
|
|
299
|
+
clamp(Number((0.48 - loadTransfer + brakeDive).toFixed(5)), 0, 1),
|
|
300
|
+
clamp(Number((0.48 + loadTransfer + brakeDive).toFixed(5)), 0, 1),
|
|
301
|
+
clamp(Number((0.42 - loadTransfer * 0.55).toFixed(5)), 0, 1),
|
|
302
|
+
clamp(Number((0.42 + loadTransfer * 0.55).toFixed(5)), 0, 1)
|
|
303
|
+
];
|
|
304
|
+
}
|
|
305
|
+
function finite(value, label) {
|
|
306
|
+
if (!Number.isFinite(value)) {
|
|
307
|
+
throw new RangeError(`Arcade vehicle telemetry ${label} must be finite.`);
|
|
308
|
+
}
|
|
309
|
+
return value;
|
|
310
|
+
}
|
|
311
|
+
function finiteNonNegative(value, label) {
|
|
312
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
313
|
+
throw new RangeError(`Arcade vehicle telemetry ${label} must be finite and non-negative.`);
|
|
314
|
+
}
|
|
315
|
+
return value;
|
|
316
|
+
}
|
|
317
|
+
function positive(value, label) {
|
|
318
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
319
|
+
throw new RangeError(`Arcade vehicle telemetry ${label} must be finite and positive.`);
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
function coefficients(value) {
|
|
324
|
+
if (typeof value !== "string")
|
|
325
|
+
return { preset: "custom", value };
|
|
326
|
+
switch (value) {
|
|
327
|
+
case "street":
|
|
328
|
+
return { preset: value, value: { b: 10, c: 1.9, d: 1, e: 0.97 } };
|
|
329
|
+
case "sport":
|
|
330
|
+
return { preset: value, value: { b: 12, c: 2, d: 1.3, e: 0.95 } };
|
|
331
|
+
case "racing":
|
|
332
|
+
return { preset: value, value: { b: 14, c: 2.1, d: 1.6, e: 0.9 } };
|
|
333
|
+
case "offroad":
|
|
334
|
+
return { preset: value, value: { b: 7, c: 1.7, d: 0.9, e: 1 } };
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function tireSlipRatio(longitudinalVelocity, angularVelocity, radius) {
|
|
338
|
+
const wheelVelocity = angularVelocity * radius;
|
|
339
|
+
const denominator = Math.max(Math.abs(wheelVelocity), Math.abs(longitudinalVelocity));
|
|
340
|
+
if (denominator < 0.1)
|
|
341
|
+
return 0;
|
|
342
|
+
return clamp((wheelVelocity - longitudinalVelocity) / denominator, -1, 1);
|
|
343
|
+
}
|
|
344
|
+
function tireSlipAngle(longitudinalVelocity, lateralVelocity, steeringAngle) {
|
|
345
|
+
if (Math.abs(longitudinalVelocity) < 0.1)
|
|
346
|
+
return 0;
|
|
347
|
+
return clamp(Math.atan2(lateralVelocity, longitudinalVelocity) - steeringAngle, -Math.PI * 0.4, Math.PI * 0.4);
|
|
348
|
+
}
|
|
349
|
+
function pacejka(slip, coeff) {
|
|
350
|
+
const bx = coeff.b * slip;
|
|
351
|
+
return coeff.d * Math.sin(coeff.c * Math.atan(bx - coeff.e * (bx - Math.atan(bx))));
|
|
352
|
+
}
|
|
353
|
+
function optimalSlipRatio(coeff) {
|
|
354
|
+
return Math.min(Math.tan(Math.PI / (2 * coeff.c)) / coeff.b, 0.2);
|
|
355
|
+
}
|
|
356
|
+
function optimalSlipAngle(coeff) {
|
|
357
|
+
// Radians, matching the units the lateral curve is now evaluated in.
|
|
358
|
+
return Math.min(Math.tan(Math.PI / (2 * coeff.c)) / coeff.b, 0.3);
|
|
359
|
+
}
|
|
360
|
+
function clamp(value, min, max) {
|
|
361
|
+
return Math.max(min, Math.min(max, value));
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=ArcadeVehicleTelemetry.js.map
|