@aura3d/engine 2.0.4 → 3.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 +25 -10
- package/dist/animation/AnimationAction.d.ts.map +1 -1
- package/dist/animation/AnimationAction.js +20 -2
- package/dist/animation/AnimationAction.js.map +1 -1
- package/dist/animation/AnimationLayer.d.ts +1 -0
- package/dist/animation/AnimationLayer.d.ts.map +1 -1
- package/dist/animation/AnimationLayer.js +24 -3
- package/dist/animation/AnimationLayer.js.map +1 -1
- package/dist/animation/AnimationMixer.d.ts +3 -0
- package/dist/animation/AnimationMixer.d.ts.map +1 -1
- package/dist/animation/AnimationMixer.js +69 -5
- package/dist/animation/AnimationMixer.js.map +1 -1
- package/dist/animation/AnimationTrack.d.ts.map +1 -1
- package/dist/animation/AnimationTrack.js +13 -0
- package/dist/animation/AnimationTrack.js.map +1 -1
- package/dist/animation/FootIk.d.ts +10 -0
- package/dist/animation/FootIk.d.ts.map +1 -1
- package/dist/animation/FootIk.js +95 -3
- package/dist/animation/FootIk.js.map +1 -1
- package/dist/animation/HumanoidRetargeting.d.ts +29 -0
- package/dist/animation/HumanoidRetargeting.d.ts.map +1 -1
- package/dist/animation/HumanoidRetargeting.js +41 -1
- package/dist/animation/HumanoidRetargeting.js.map +1 -1
- package/dist/animation/LocomotionKit.d.ts +6 -0
- package/dist/animation/LocomotionKit.d.ts.map +1 -1
- package/dist/animation/LocomotionKit.js +6 -0
- package/dist/animation/LocomotionKit.js.map +1 -1
- package/dist/animation/RootMotion.d.ts +27 -0
- package/dist/animation/RootMotion.d.ts.map +1 -1
- package/dist/animation/RootMotion.js +38 -0
- package/dist/animation/RootMotion.js.map +1 -1
- package/dist/animation/SpringBones.d.ts +28 -0
- package/dist/animation/SpringBones.d.ts.map +1 -1
- package/dist/animation/SpringBones.js +24 -0
- package/dist/animation/SpringBones.js.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.d.ts +95 -2
- package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.js +328 -3
- package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
- package/dist/assets/GLTFExtensionSupport.js +2 -2
- package/dist/assets/GLTFExtensionSupport.js.map +1 -1
- package/dist/assets/GLTFLoader.d.ts +360 -1
- package/dist/assets/GLTFLoader.d.ts.map +1 -1
- package/dist/assets/GLTFLoader.js +197 -1
- package/dist/assets/GLTFLoader.js.map +1 -1
- package/dist/assets/KTX2BasisTextureTranscoder.d.ts +39 -0
- package/dist/assets/KTX2BasisTextureTranscoder.d.ts.map +1 -1
- package/dist/assets/KTX2BasisTextureTranscoder.js +70 -0
- package/dist/assets/KTX2BasisTextureTranscoder.js.map +1 -1
- package/dist/assets/TexturePipeline.d.ts +20 -0
- package/dist/assets/TexturePipeline.d.ts.map +1 -1
- package/dist/assets/TexturePipeline.js +20 -0
- package/dist/assets/TexturePipeline.js.map +1 -1
- package/dist/assets/TextureStreaming.d.ts +30 -0
- package/dist/assets/TextureStreaming.d.ts.map +1 -1
- package/dist/assets/TextureStreaming.js +53 -0
- package/dist/assets/TextureStreaming.js.map +1 -1
- package/dist/assets/browser-index.d.ts +7 -3
- package/dist/assets/browser-index.d.ts.map +1 -1
- package/dist/assets/browser-index.js +3 -1
- package/dist/assets/browser-index.js.map +1 -1
- package/dist/assets/gltf-runtime.d.ts +1 -1
- package/dist/assets/gltf-runtime.d.ts.map +1 -1
- package/dist/assets/gltf-runtime.js.map +1 -1
- package/dist/assets/index.d.ts +7 -7
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +3 -3
- package/dist/assets/index.js.map +1 -1
- package/dist/assets/loaders/HDRLoader.d.ts +40 -0
- package/dist/assets/loaders/HDRLoader.d.ts.map +1 -1
- package/dist/assets/loaders/HDRLoader.js +158 -0
- package/dist/assets/loaders/HDRLoader.js.map +1 -1
- package/dist/audio/AudioSource.d.ts +2 -0
- package/dist/audio/AudioSource.d.ts.map +1 -1
- package/dist/audio/AudioSource.js +7 -0
- package/dist/audio/AudioSource.js.map +1 -1
- package/dist/audio/Footsteps.d.ts +47 -0
- package/dist/audio/Footsteps.d.ts.map +1 -0
- package/dist/audio/Footsteps.js +73 -0
- package/dist/audio/Footsteps.js.map +1 -0
- package/dist/audio/GameMixer.d.ts +69 -0
- package/dist/audio/GameMixer.d.ts.map +1 -0
- package/dist/audio/GameMixer.js +141 -0
- package/dist/audio/GameMixer.js.map +1 -0
- package/dist/audio/PositionalEmitter.d.ts +95 -0
- package/dist/audio/PositionalEmitter.d.ts.map +1 -0
- package/dist/audio/PositionalEmitter.js +199 -0
- package/dist/audio/PositionalEmitter.js.map +1 -0
- package/dist/audio/index.d.ts +6 -0
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +3 -0
- package/dist/audio/index.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/profiles.d.ts +12 -2
- package/dist/aura3d-cli/pull-bridge/profiles.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/profiles.js +35 -4
- package/dist/aura3d-cli/pull-bridge/profiles.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/provenance.d.ts +15 -1
- package/dist/aura3d-cli/pull-bridge/provenance.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/provenance.js +60 -1
- package/dist/aura3d-cli/pull-bridge/provenance.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/scoring.d.ts +10 -1
- package/dist/aura3d-cli/pull-bridge/scoring.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/scoring.js +9 -1
- package/dist/aura3d-cli/pull-bridge/scoring.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.js +2 -2
- package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.d.ts +15 -3
- package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge.js +68 -5
- package/dist/aura3d-cli/pull-bridge.js.map +1 -1
- package/dist/controls/ArcballControls.d.ts +92 -0
- package/dist/controls/ArcballControls.d.ts.map +1 -0
- package/dist/controls/ArcballControls.js +286 -0
- package/dist/controls/ArcballControls.js.map +1 -0
- package/dist/controls/DragControls.d.ts +13 -0
- package/dist/controls/DragControls.d.ts.map +1 -1
- package/dist/controls/DragControls.js +24 -1
- package/dist/controls/DragControls.js.map +1 -1
- package/dist/controls/FlyControls.d.ts +9 -0
- package/dist/controls/FlyControls.d.ts.map +1 -1
- package/dist/controls/FlyControls.js +20 -2
- package/dist/controls/FlyControls.js.map +1 -1
- package/dist/controls/FocusFrame.d.ts +34 -0
- package/dist/controls/FocusFrame.d.ts.map +1 -0
- package/dist/controls/FocusFrame.js +82 -0
- package/dist/controls/FocusFrame.js.map +1 -0
- package/dist/controls/HoverOutline.d.ts +46 -0
- package/dist/controls/HoverOutline.d.ts.map +1 -0
- package/dist/controls/HoverOutline.js +87 -0
- package/dist/controls/HoverOutline.js.map +1 -0
- package/dist/controls/InteractionControls.d.ts +7 -0
- package/dist/controls/InteractionControls.d.ts.map +1 -1
- package/dist/controls/InteractionControls.js +12 -1
- package/dist/controls/InteractionControls.js.map +1 -1
- package/dist/controls/NativeControlTypes.d.ts +17 -0
- package/dist/controls/NativeControlTypes.d.ts.map +1 -1
- package/dist/controls/NativeControlTypes.js.map +1 -1
- package/dist/controls/OrbitControls.d.ts +9 -0
- package/dist/controls/OrbitControls.d.ts.map +1 -1
- package/dist/controls/OrbitControls.js +26 -6
- package/dist/controls/OrbitControls.js.map +1 -1
- package/dist/controls/Picking.d.ts +15 -0
- package/dist/controls/Picking.d.ts.map +1 -1
- package/dist/controls/Picking.js +62 -23
- package/dist/controls/Picking.js.map +1 -1
- package/dist/controls/PointerLockControls.d.ts.map +1 -1
- package/dist/controls/PointerLockControls.js +4 -0
- package/dist/controls/PointerLockControls.js.map +1 -1
- package/dist/controls/SelectionManager.d.ts +8 -0
- package/dist/controls/SelectionManager.d.ts.map +1 -1
- package/dist/controls/SelectionManager.js +11 -0
- package/dist/controls/SelectionManager.js.map +1 -1
- package/dist/controls/TrackballControls.d.ts +7 -0
- package/dist/controls/TrackballControls.d.ts.map +1 -1
- package/dist/controls/TrackballControls.js +19 -5
- package/dist/controls/TrackballControls.js.map +1 -1
- package/dist/controls/TransformControls.d.ts +8 -0
- package/dist/controls/TransformControls.d.ts.map +1 -1
- package/dist/controls/TransformControls.js +15 -2
- package/dist/controls/TransformControls.js.map +1 -1
- package/dist/controls/index.d.ts +6 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +3 -0
- package/dist/controls/index.js.map +1 -1
- package/dist/create-aura3d/index.js +1 -1
- package/dist/editor-runtime/RootEditorSurface.d.ts +65 -0
- package/dist/editor-runtime/RootEditorSurface.d.ts.map +1 -0
- package/dist/editor-runtime/RootEditorSurface.js +62 -0
- package/dist/editor-runtime/RootEditorSurface.js.map +1 -0
- package/dist/editor-runtime/index.d.ts +2 -0
- package/dist/editor-runtime/index.d.ts.map +1 -1
- package/dist/editor-runtime/index.js +1 -0
- package/dist/editor-runtime/index.js.map +1 -1
- package/dist/engine/agent-api/AnimationController.d.ts +9 -1
- package/dist/engine/agent-api/AnimationController.d.ts.map +1 -1
- package/dist/engine/agent-api/AnimationController.js +5 -1
- package/dist/engine/agent-api/AnimationController.js.map +1 -1
- package/dist/engine/agent-api/AnimationDebugOverlay.d.ts +56 -0
- package/dist/engine/agent-api/AnimationDebugOverlay.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationDebugOverlay.js +148 -0
- package/dist/engine/agent-api/AnimationDebugOverlay.js.map +1 -0
- package/dist/engine/agent-api/AnimationMixerBuilders.d.ts +41 -0
- package/dist/engine/agent-api/AnimationMixerBuilders.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationMixerBuilders.js +146 -0
- package/dist/engine/agent-api/AnimationMixerBuilders.js.map +1 -0
- package/dist/engine/agent-api/AssetDecoders.d.ts +17 -0
- package/dist/engine/agent-api/AssetDecoders.d.ts.map +1 -0
- package/dist/engine/agent-api/AssetDecoders.js +18 -0
- package/dist/engine/agent-api/AssetDecoders.js.map +1 -0
- package/dist/engine/agent-api/Decals.d.ts +174 -0
- package/dist/engine/agent-api/Decals.d.ts.map +1 -0
- package/dist/engine/agent-api/Decals.js +350 -0
- package/dist/engine/agent-api/Decals.js.map +1 -0
- package/dist/engine/agent-api/FootPlanting.d.ts +75 -0
- package/dist/engine/agent-api/FootPlanting.d.ts.map +1 -0
- package/dist/engine/agent-api/FootPlanting.js +60 -0
- package/dist/engine/agent-api/FootPlanting.js.map +1 -0
- package/dist/engine/agent-api/GameAppRuntime.d.ts +19 -0
- package/dist/engine/agent-api/GameAppRuntime.d.ts.map +1 -1
- package/dist/engine/agent-api/GameAppRuntime.js +37 -1
- package/dist/engine/agent-api/GameAppRuntime.js.map +1 -1
- package/dist/engine/agent-api/GameCameraRigs.d.ts +185 -0
- package/dist/engine/agent-api/GameCameraRigs.d.ts.map +1 -0
- package/dist/engine/agent-api/GameCameraRigs.js +414 -0
- package/dist/engine/agent-api/GameCameraRigs.js.map +1 -0
- package/dist/engine/agent-api/GameFeel.d.ts +100 -0
- package/dist/engine/agent-api/GameFeel.d.ts.map +1 -0
- package/dist/engine/agent-api/GameFeel.js +226 -0
- package/dist/engine/agent-api/GameFeel.js.map +1 -0
- package/dist/engine/agent-api/LabelTelemetry.d.ts +108 -0
- package/dist/engine/agent-api/LabelTelemetry.d.ts.map +1 -0
- package/dist/engine/agent-api/LabelTelemetry.js +116 -0
- package/dist/engine/agent-api/LabelTelemetry.js.map +1 -0
- package/dist/engine/agent-api/NavigationCrowds.d.ts +146 -0
- package/dist/engine/agent-api/NavigationCrowds.d.ts.map +1 -0
- package/dist/engine/agent-api/NavigationCrowds.js +104 -0
- package/dist/engine/agent-api/NavigationCrowds.js.map +1 -0
- package/dist/engine/agent-api/PhysicsRuntime.d.ts +61 -5
- package/dist/engine/agent-api/PhysicsRuntime.d.ts.map +1 -1
- package/dist/engine/agent-api/PhysicsRuntime.js +53 -21
- package/dist/engine/agent-api/PhysicsRuntime.js.map +1 -1
- package/dist/engine/agent-api/RootGeometry.d.ts +16 -1
- package/dist/engine/agent-api/RootGeometry.d.ts.map +1 -1
- package/dist/engine/agent-api/RootGeometry.js.map +1 -1
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +6 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -1
- package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -1
- package/dist/engine/agent-api/Scatter.d.ts +18 -0
- package/dist/engine/agent-api/Scatter.d.ts.map +1 -0
- package/dist/engine/agent-api/Scatter.js +18 -0
- package/dist/engine/agent-api/Scatter.js.map +1 -0
- package/dist/engine/agent-api/TouchControlBinding.d.ts +32 -0
- package/dist/engine/agent-api/TouchControlBinding.d.ts.map +1 -1
- package/dist/engine/agent-api/TouchControlBinding.js +36 -0
- package/dist/engine/agent-api/TouchControlBinding.js.map +1 -1
- package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -1
- package/dist/engine/agent-api/VehicleChassis.js +76 -13
- package/dist/engine/agent-api/VehicleChassis.js.map +1 -1
- package/dist/engine/agent-api/index.d.ts +708 -6
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +1757 -134
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
- package/dist/engine/game/GameAudio.d.ts +66 -0
- package/dist/engine/game/GameAudio.d.ts.map +1 -1
- package/dist/engine/game/GameAudio.js +179 -44
- package/dist/engine/game/GameAudio.js.map +1 -1
- package/dist/engine/instances-model/InstancedModel.d.ts +111 -0
- package/dist/engine/instances-model/InstancedModel.d.ts.map +1 -0
- package/dist/engine/instances-model/InstancedModel.js +108 -0
- package/dist/engine/instances-model/InstancedModel.js.map +1 -0
- package/dist/engine/material-physical/PhysicalMaterialSpec.d.ts +72 -0
- package/dist/engine/material-physical/PhysicalMaterialSpec.d.ts.map +1 -0
- package/dist/engine/material-physical/PhysicalMaterialSpec.js +95 -0
- package/dist/engine/material-physical/PhysicalMaterialSpec.js.map +1 -0
- package/dist/engine/production-runtime/GameAppRuntime.d.ts +1 -1
- package/dist/engine/production-runtime/GameAppRuntime.d.ts.map +1 -1
- package/dist/engine/production-runtime/GameRenderPreset.d.ts +76 -0
- package/dist/engine/production-runtime/GameRenderPreset.d.ts.map +1 -1
- package/dist/engine/production-runtime/GameRenderPreset.js +167 -0
- package/dist/engine/production-runtime/GameRenderPreset.js.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts +22 -2
- package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.js +33 -1
- package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
- package/dist/engine/production-runtime/index.d.ts +4 -4
- package/dist/engine/production-runtime/index.d.ts.map +1 -1
- package/dist/engine/production-runtime/index.js +5 -3
- package/dist/engine/production-runtime/index.js.map +1 -1
- package/dist/input/ActionMap.d.ts +40 -0
- package/dist/input/ActionMap.d.ts.map +1 -1
- package/dist/input/ActionMap.js +179 -0
- package/dist/input/ActionMap.js.map +1 -1
- package/dist/input/ComboDetector.d.ts +49 -0
- package/dist/input/ComboDetector.d.ts.map +1 -0
- package/dist/input/ComboDetector.js +102 -0
- package/dist/input/ComboDetector.js.map +1 -0
- package/dist/input/Haptics.d.ts +46 -0
- package/dist/input/Haptics.d.ts.map +1 -0
- package/dist/input/Haptics.js +67 -0
- package/dist/input/Haptics.js.map +1 -0
- package/dist/input/TouchLayouts.d.ts +35 -0
- package/dist/input/TouchLayouts.d.ts.map +1 -0
- package/dist/input/TouchLayouts.js +88 -0
- package/dist/input/TouchLayouts.js.map +1 -0
- package/dist/input/WebXRSessionController.d.ts +53 -0
- package/dist/input/WebXRSessionController.d.ts.map +1 -1
- package/dist/input/WebXRSessionController.js +88 -2
- package/dist/input/WebXRSessionController.js.map +1 -1
- package/dist/input/index.d.ts +8 -2
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +3 -0
- package/dist/input/index.js.map +1 -1
- package/dist/lean/game.d.ts +98 -0
- package/dist/lean/game.d.ts.map +1 -1
- package/dist/lean/game.js +192 -0
- package/dist/lean/game.js.map +1 -1
- package/dist/materials/GameReadyMaterialLibrary.d.ts +39 -0
- package/dist/materials/GameReadyMaterialLibrary.d.ts.map +1 -0
- package/dist/materials/GameReadyMaterialLibrary.js +253 -0
- package/dist/materials/GameReadyMaterialLibrary.js.map +1 -0
- package/dist/materials/MaterialValidation.d.ts +21 -0
- package/dist/materials/MaterialValidation.d.ts.map +1 -1
- package/dist/materials/MaterialValidation.js +105 -0
- package/dist/materials/MaterialValidation.js.map +1 -1
- package/dist/materials/browser-index.d.ts +2 -0
- package/dist/materials/browser-index.d.ts.map +1 -1
- package/dist/materials/browser-index.js +1 -0
- package/dist/materials/browser-index.js.map +1 -1
- package/dist/materials/node.d.ts +2 -2
- package/dist/materials/node.d.ts.map +1 -1
- package/dist/materials/node.js +1 -1
- package/dist/materials/node.js.map +1 -1
- package/dist/physics/CollisionVolumes.d.ts +59 -0
- package/dist/physics/CollisionVolumes.d.ts.map +1 -1
- package/dist/physics/CollisionVolumes.js +87 -0
- package/dist/physics/CollisionVolumes.js.map +1 -1
- package/dist/physics/PhysicsDebugDraw.d.ts +37 -0
- package/dist/physics/PhysicsDebugDraw.d.ts.map +1 -1
- package/dist/physics/PhysicsDebugDraw.js +38 -1
- package/dist/physics/PhysicsDebugDraw.js.map +1 -1
- package/dist/physics/PhysicsWorld.d.ts +15 -0
- package/dist/physics/PhysicsWorld.d.ts.map +1 -1
- package/dist/physics/PhysicsWorld.js +8 -1
- package/dist/physics/PhysicsWorld.js.map +1 -1
- package/dist/physics/solverless.d.ts +1 -1
- package/dist/physics/solverless.d.ts.map +1 -1
- package/dist/physics/solverless.js.map +1 -1
- package/dist/physics-rapier/index.d.ts +7 -1
- package/dist/physics-rapier/index.d.ts.map +1 -1
- package/dist/physics-rapier/index.js +1 -1
- package/dist/physics-rapier/index.js.map +1 -1
- package/dist/react/index.d.ts +136 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +251 -10
- package/dist/react/index.js.map +1 -1
- package/dist/rendering/AtmosphereWetness.d.ts +61 -0
- package/dist/rendering/AtmosphereWetness.d.ts.map +1 -0
- package/dist/rendering/AtmosphereWetness.js +99 -0
- package/dist/rendering/AtmosphereWetness.js.map +1 -0
- package/dist/rendering/ClusteredForwardLighting.d.ts +25 -1
- package/dist/rendering/ClusteredForwardLighting.d.ts.map +1 -1
- package/dist/rendering/ClusteredForwardLighting.js +80 -3
- package/dist/rendering/ClusteredForwardLighting.js.map +1 -1
- package/dist/rendering/DayNightSky.d.ts +63 -0
- package/dist/rendering/DayNightSky.d.ts.map +1 -0
- package/dist/rendering/DayNightSky.js +156 -0
- package/dist/rendering/DayNightSky.js.map +1 -0
- package/dist/rendering/EnvironmentPresetPack.d.ts +30 -0
- package/dist/rendering/EnvironmentPresetPack.d.ts.map +1 -0
- package/dist/rendering/EnvironmentPresetPack.js +49 -0
- package/dist/rendering/EnvironmentPresetPack.js.map +1 -0
- package/dist/rendering/ForwardPass.d.ts +65 -0
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +196 -2
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/InstancedPBRMaterial.d.ts +1 -0
- package/dist/rendering/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/rendering/InstancedPBRMaterial.js +3 -0
- package/dist/rendering/InstancedPBRMaterial.js.map +1 -1
- package/dist/rendering/InstancingDiagnostics.d.ts +69 -0
- package/dist/rendering/InstancingDiagnostics.d.ts.map +1 -0
- package/dist/rendering/InstancingDiagnostics.js +98 -0
- package/dist/rendering/InstancingDiagnostics.js.map +1 -0
- package/dist/rendering/LightingRig.d.ts +19 -1
- package/dist/rendering/LightingRig.d.ts.map +1 -1
- package/dist/rendering/LightingRig.js +61 -1
- package/dist/rendering/LightingRig.js.map +1 -1
- package/dist/rendering/MeshConsolidation.d.ts +12 -0
- package/dist/rendering/MeshConsolidation.d.ts.map +1 -1
- package/dist/rendering/MeshConsolidation.js +28 -0
- package/dist/rendering/MeshConsolidation.js.map +1 -1
- package/dist/rendering/MorphTargetPlan.d.ts +29 -2
- package/dist/rendering/MorphTargetPlan.d.ts.map +1 -1
- package/dist/rendering/MorphTargetPlan.js +23 -4
- package/dist/rendering/MorphTargetPlan.js.map +1 -1
- package/dist/rendering/NormalMappedPBRMaterial.d.ts.map +1 -1
- package/dist/rendering/NormalMappedPBRMaterial.js +22 -2
- package/dist/rendering/NormalMappedPBRMaterial.js.map +1 -1
- package/dist/rendering/OceanSurface.d.ts +75 -0
- package/dist/rendering/OceanSurface.d.ts.map +1 -1
- package/dist/rendering/OceanSurface.js +211 -0
- package/dist/rendering/OceanSurface.js.map +1 -1
- package/dist/rendering/PBRMaterial.d.ts +1 -0
- package/dist/rendering/PBRMaterial.d.ts.map +1 -1
- package/dist/rendering/PBRMaterial.js +23 -2
- package/dist/rendering/PBRMaterial.js.map +1 -1
- package/dist/rendering/PbrReference.d.ts +48 -0
- package/dist/rendering/PbrReference.d.ts.map +1 -1
- package/dist/rendering/PbrReference.js +126 -0
- package/dist/rendering/PbrReference.js.map +1 -1
- package/dist/rendering/PlanarReflection.d.ts +221 -0
- package/dist/rendering/PlanarReflection.d.ts.map +1 -0
- package/dist/rendering/PlanarReflection.js +541 -0
- package/dist/rendering/PlanarReflection.js.map +1 -0
- package/dist/rendering/PostProcessPass.d.ts +13 -0
- package/dist/rendering/PostProcessPass.d.ts.map +1 -1
- package/dist/rendering/PostProcessPass.js +15 -4
- package/dist/rendering/PostProcessPass.js.map +1 -1
- package/dist/rendering/ReflectionSurfaces.d.ts +14 -0
- package/dist/rendering/ReflectionSurfaces.d.ts.map +1 -1
- package/dist/rendering/ReflectionSurfaces.js +93 -0
- package/dist/rendering/ReflectionSurfaces.js.map +1 -1
- package/dist/rendering/RenderDevice.d.ts +87 -0
- package/dist/rendering/RenderDevice.d.ts.map +1 -1
- package/dist/rendering/RenderDevice.js +85 -0
- package/dist/rendering/RenderDevice.js.map +1 -1
- package/dist/rendering/Renderer.js +3 -1
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/RendererPostprocessPlan.d.ts +48 -0
- package/dist/rendering/RendererPostprocessPlan.d.ts.map +1 -1
- package/dist/rendering/RendererPostprocessPlan.js +101 -11
- package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
- package/dist/rendering/RendererVisualPipelineReport.d.ts.map +1 -1
- package/dist/rendering/RendererVisualPipelineReport.js +3 -1
- package/dist/rendering/RendererVisualPipelineReport.js.map +1 -1
- package/dist/rendering/Sampler.d.ts +29 -0
- package/dist/rendering/Sampler.d.ts.map +1 -1
- package/dist/rendering/Sampler.js +47 -0
- package/dist/rendering/Sampler.js.map +1 -1
- package/dist/rendering/SdfText.d.ts +250 -0
- package/dist/rendering/SdfText.d.ts.map +1 -0
- package/dist/rendering/SdfText.js +551 -0
- package/dist/rendering/SdfText.js.map +1 -0
- package/dist/rendering/ShaderChunks.d.ts.map +1 -1
- package/dist/rendering/ShaderChunks.js +30 -12
- package/dist/rendering/ShaderChunks.js.map +1 -1
- package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/ShaderLibrary.js +478 -34
- package/dist/rendering/ShaderLibrary.js.map +1 -1
- package/dist/rendering/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/rendering/ShaderLibraryCore.js +70 -12
- package/dist/rendering/ShaderLibraryCore.js.map +1 -1
- package/dist/rendering/ShadowMap.d.ts +24 -0
- package/dist/rendering/ShadowMap.d.ts.map +1 -1
- package/dist/rendering/ShadowMap.js +43 -0
- package/dist/rendering/ShadowMap.js.map +1 -1
- package/dist/rendering/SkinnedLitMaterial.d.ts.map +1 -1
- package/dist/rendering/SkinnedLitMaterial.js +2 -0
- package/dist/rendering/SkinnedLitMaterial.js.map +1 -1
- package/dist/rendering/SkinningBounds.d.ts +10 -0
- package/dist/rendering/SkinningBounds.d.ts.map +1 -1
- package/dist/rendering/SkinningBounds.js +27 -0
- package/dist/rendering/SkinningBounds.js.map +1 -1
- package/dist/rendering/SpriteFlipbook.d.ts +60 -0
- package/dist/rendering/SpriteFlipbook.d.ts.map +1 -0
- package/dist/rendering/SpriteFlipbook.js +128 -0
- package/dist/rendering/SpriteFlipbook.js.map +1 -0
- package/dist/rendering/TerrainTiles.d.ts +120 -0
- package/dist/rendering/TerrainTiles.d.ts.map +1 -0
- package/dist/rendering/TerrainTiles.js +221 -0
- package/dist/rendering/TerrainTiles.js.map +1 -0
- package/dist/rendering/TexturedPBRMaterial.d.ts +1 -0
- package/dist/rendering/TexturedPBRMaterial.d.ts.map +1 -1
- package/dist/rendering/TexturedPBRMaterial.js +23 -2
- package/dist/rendering/TexturedPBRMaterial.js.map +1 -1
- package/dist/rendering/TexturedUnlitMaterial.d.ts.map +1 -1
- package/dist/rendering/TexturedUnlitMaterial.js +20 -2
- package/dist/rendering/TexturedUnlitMaterial.js.map +1 -1
- package/dist/rendering/UnlitMaterial.d.ts.map +1 -1
- package/dist/rendering/UnlitMaterial.js +20 -2
- package/dist/rendering/UnlitMaterial.js.map +1 -1
- package/dist/rendering/VertexFormat.d.ts +6 -0
- package/dist/rendering/VertexFormat.d.ts.map +1 -1
- package/dist/rendering/VertexFormat.js +12 -0
- package/dist/rendering/VertexFormat.js.map +1 -1
- package/dist/rendering/VolumetricFog.d.ts +55 -0
- package/dist/rendering/VolumetricFog.d.ts.map +1 -0
- package/dist/rendering/VolumetricFog.js +91 -0
- package/dist/rendering/VolumetricFog.js.map +1 -0
- package/dist/rendering/WaterSurface.d.ts +77 -0
- package/dist/rendering/WaterSurface.d.ts.map +1 -0
- package/dist/rendering/WaterSurface.js +133 -0
- package/dist/rendering/WaterSurface.js.map +1 -0
- package/dist/rendering/WebGL2Device.d.ts +58 -0
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +536 -17
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/WebGPUDevice.d.ts +50 -0
- package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
- package/dist/rendering/WebGPUDevice.js +504 -10
- package/dist/rendering/WebGPUDevice.js.map +1 -1
- package/dist/rendering/WebGPUSkinningLimits.d.ts +40 -0
- package/dist/rendering/WebGPUSkinningLimits.d.ts.map +1 -1
- package/dist/rendering/WebGPUSkinningLimits.js +32 -0
- package/dist/rendering/WebGPUSkinningLimits.js.map +1 -1
- package/dist/rendering/effects/CollisionModule.d.ts +9 -0
- package/dist/rendering/effects/CollisionModule.d.ts.map +1 -1
- package/dist/rendering/effects/CollisionModule.js +10 -0
- package/dist/rendering/effects/CollisionModule.js.map +1 -1
- package/dist/rendering/effects/ColorModule.d.ts +7 -0
- package/dist/rendering/effects/ColorModule.d.ts.map +1 -1
- package/dist/rendering/effects/ColorModule.js +23 -0
- package/dist/rendering/effects/ColorModule.js.map +1 -1
- package/dist/rendering/effects/ForceModule.d.ts +35 -0
- package/dist/rendering/effects/ForceModule.d.ts.map +1 -1
- package/dist/rendering/effects/ForceModule.js +49 -0
- package/dist/rendering/effects/ForceModule.js.map +1 -1
- package/dist/rendering/effects/GPUParticleBackend.d.ts +186 -0
- package/dist/rendering/effects/GPUParticleBackend.d.ts.map +1 -1
- package/dist/rendering/effects/GPUParticleBackend.js +692 -1
- package/dist/rendering/effects/GPUParticleBackend.js.map +1 -1
- package/dist/rendering/effects/HeightfieldModule.d.ts +58 -0
- package/dist/rendering/effects/HeightfieldModule.d.ts.map +1 -0
- package/dist/rendering/effects/HeightfieldModule.js +129 -0
- package/dist/rendering/effects/HeightfieldModule.js.map +1 -0
- package/dist/rendering/effects/LightingModule.d.ts +34 -0
- package/dist/rendering/effects/LightingModule.d.ts.map +1 -0
- package/dist/rendering/effects/LightingModule.js +54 -0
- package/dist/rendering/effects/LightingModule.js.map +1 -0
- package/dist/rendering/effects/ParticleDiagnostics.d.ts +8 -0
- package/dist/rendering/effects/ParticleDiagnostics.d.ts.map +1 -1
- package/dist/rendering/effects/ParticleDiagnostics.js +3 -0
- package/dist/rendering/effects/ParticleDiagnostics.js.map +1 -1
- package/dist/rendering/effects/ParticleModule.d.ts +8 -0
- package/dist/rendering/effects/ParticleModule.d.ts.map +1 -1
- package/dist/rendering/effects/ParticleModule.js.map +1 -1
- package/dist/rendering/effects/ParticleRenderer.d.ts +20 -0
- package/dist/rendering/effects/ParticleRenderer.d.ts.map +1 -1
- package/dist/rendering/effects/ParticleRenderer.js +57 -7
- package/dist/rendering/effects/ParticleRenderer.js.map +1 -1
- package/dist/rendering/effects/ParticleSystem.d.ts +45 -1
- package/dist/rendering/effects/ParticleSystem.d.ts.map +1 -1
- package/dist/rendering/effects/ParticleSystem.js +373 -4
- package/dist/rendering/effects/ParticleSystem.js.map +1 -1
- package/dist/rendering/effects/SizeModule.d.ts +4 -0
- package/dist/rendering/effects/SizeModule.d.ts.map +1 -1
- package/dist/rendering/effects/SizeModule.js +16 -0
- package/dist/rendering/effects/SizeModule.js.map +1 -1
- package/dist/rendering/effects/SubEmitterModule.d.ts +61 -0
- package/dist/rendering/effects/SubEmitterModule.d.ts.map +1 -0
- package/dist/rendering/effects/SubEmitterModule.js +119 -0
- package/dist/rendering/effects/SubEmitterModule.js.map +1 -0
- package/dist/rendering/effects/TrailModule.d.ts +38 -0
- package/dist/rendering/effects/TrailModule.d.ts.map +1 -1
- package/dist/rendering/effects/TrailModule.js +95 -2
- package/dist/rendering/effects/TrailModule.js.map +1 -1
- package/dist/rendering/effects/TurbulenceModule.d.ts +43 -0
- package/dist/rendering/effects/TurbulenceModule.d.ts.map +1 -0
- package/dist/rendering/effects/TurbulenceModule.js +130 -0
- package/dist/rendering/effects/TurbulenceModule.js.map +1 -0
- package/dist/rendering/effects/index.d.ts +4 -0
- package/dist/rendering/effects/index.d.ts.map +1 -1
- package/dist/rendering/effects/index.js +4 -0
- package/dist/rendering/effects/index.js.map +1 -1
- package/dist/rendering/index.d.ts +57 -19
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +31 -10
- package/dist/rendering/index.js.map +1 -1
- package/dist/rendering/materials/MaterialExtensions.js +3 -3
- package/dist/rendering/materials/MaterialExtensions.js.map +1 -1
- package/dist/rendering/postprocess/NativeBloomPyramid.d.ts +28 -0
- package/dist/rendering/postprocess/NativeBloomPyramid.d.ts.map +1 -0
- package/dist/rendering/postprocess/NativeBloomPyramid.js +54 -0
- package/dist/rendering/postprocess/NativeBloomPyramid.js.map +1 -0
- package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts +10 -1
- package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
- package/dist/rendering/postprocess/NativeLdrEffectLuts.js +19 -2
- package/dist/rendering/postprocess/NativeLdrEffectLuts.js.map +1 -1
- package/dist/rendering/postprocess/index.d.ts +2 -0
- package/dist/rendering/postprocess/index.d.ts.map +1 -1
- package/dist/rendering/postprocess/index.js +1 -0
- package/dist/rendering/postprocess/index.js.map +1 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts +22 -0
- package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.js +125 -0
- package/dist/rendering/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.d.ts +52 -0
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.js +101 -0
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/rendering/production-runtime/index.d.ts +5 -4
- package/dist/rendering/production-runtime/index.d.ts.map +1 -1
- package/dist/rendering/production-runtime/index.js +3 -2
- package/dist/rendering/production-runtime/index.js.map +1 -1
- package/dist/rendering/production-runtime/passes/DepthPrepass.d.ts +26 -1
- package/dist/rendering/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/DepthPrepass.js +49 -2
- package/dist/rendering/production-runtime/passes/DepthPrepass.js.map +1 -1
- package/dist/rendering/production-runtime/passes/FramegraphTopology.d.ts +13 -0
- package/dist/rendering/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
- package/dist/rendering/production-runtime/passes/FramegraphTopology.js +59 -0
- package/dist/rendering/production-runtime/passes/FramegraphTopology.js.map +1 -0
- package/dist/rendering/production-runtime/passes/OpaquePass.d.ts +24 -1
- package/dist/rendering/production-runtime/passes/OpaquePass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/OpaquePass.js +41 -2
- package/dist/rendering/production-runtime/passes/OpaquePass.js.map +1 -1
- package/dist/rendering/production-runtime/passes/ShadowPass.d.ts +24 -1
- package/dist/rendering/production-runtime/passes/ShadowPass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/ShadowPass.js +43 -2
- package/dist/rendering/production-runtime/passes/ShadowPass.js.map +1 -1
- package/dist/rendering/production-runtime/passes/SkyboxPass.d.ts +21 -1
- package/dist/rendering/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/SkyboxPass.js +39 -2
- package/dist/rendering/production-runtime/passes/SkyboxPass.js.map +1 -1
- package/dist/rendering/production-runtime/passes/ToneMappingPass.d.ts +29 -1
- package/dist/rendering/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/ToneMappingPass.js +53 -2
- package/dist/rendering/production-runtime/passes/ToneMappingPass.js.map +1 -1
- package/dist/rendering/production-runtime/passes/TransparentPass.d.ts +24 -1
- package/dist/rendering/production-runtime/passes/TransparentPass.d.ts.map +1 -1
- package/dist/rendering/production-runtime/passes/TransparentPass.js +42 -2
- package/dist/rendering/production-runtime/passes/TransparentPass.js.map +1 -1
- package/dist/rendering/shadows/CascadeHysteresis.d.ts +67 -0
- package/dist/rendering/shadows/CascadeHysteresis.d.ts.map +1 -0
- package/dist/rendering/shadows/CascadeHysteresis.js +104 -0
- package/dist/rendering/shadows/CascadeHysteresis.js.map +1 -0
- package/dist/rendering/shadows/ContactShadows.d.ts +52 -0
- package/dist/rendering/shadows/ContactShadows.d.ts.map +1 -1
- package/dist/rendering/shadows/ContactShadows.js +122 -0
- package/dist/rendering/shadows/ContactShadows.js.map +1 -1
- package/dist/rendering/shadows/SpotShadowMaps.d.ts +77 -0
- package/dist/rendering/shadows/SpotShadowMaps.d.ts.map +1 -0
- package/dist/rendering/shadows/SpotShadowMaps.js +106 -0
- package/dist/rendering/shadows/SpotShadowMaps.js.map +1 -0
- package/dist/rendering/webgpu/WebGPUPostProcess.d.ts +2 -0
- package/dist/rendering/webgpu/WebGPUPostProcess.d.ts.map +1 -1
- package/dist/rendering/webgpu/WebGPUPostProcess.js +1 -0
- package/dist/rendering/webgpu/WebGPUPostProcess.js.map +1 -1
- package/dist/rendering/webgpu/WebGPUPostShaders.d.ts +78 -0
- package/dist/rendering/webgpu/WebGPUPostShaders.d.ts.map +1 -0
- package/dist/rendering/webgpu/WebGPUPostShaders.js +262 -0
- package/dist/rendering/webgpu/WebGPUPostShaders.js.map +1 -0
- package/dist/scene/Scene.d.ts +8 -1
- package/dist/scene/Scene.d.ts.map +1 -1
- package/dist/scene/Scene.js +12 -2
- package/dist/scene/Scene.js.map +1 -1
- package/dist/scripting/VisualGraphContext.d.ts +31 -0
- package/dist/scripting/VisualGraphContext.d.ts.map +1 -1
- package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
- package/dist/scripting/VisualGraphExecutor.js +110 -0
- package/dist/scripting/VisualGraphExecutor.js.map +1 -1
- package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
- package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
- package/dist/scripting/VisualNodeCatalog.js +20 -0
- package/dist/scripting/VisualNodeCatalog.js.map +1 -1
- package/dist/scripting/VisualScriptingRoot.d.ts +96 -0
- package/dist/scripting/VisualScriptingRoot.d.ts.map +1 -0
- package/dist/scripting/VisualScriptingRoot.js +150 -0
- package/dist/scripting/VisualScriptingRoot.js.map +1 -0
- package/dist/scripting/index.d.ts +3 -1
- package/dist/scripting/index.d.ts.map +1 -1
- package/dist/scripting/index.js +1 -0
- package/dist/scripting/index.js.map +1 -1
- package/package.json +24 -22
- 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/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/product-viewer/node_modules/.vite/deps/_metadata.json +8 -0
- package/templates/product-viewer/node_modules/.vite/deps/package.json +3 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generalized game-feel kit (muse3jsparity-PRD F3).
|
|
3
|
+
*
|
|
4
|
+
* Generalizes the combat-proven pieces: `hitStop` durations come from the
|
|
5
|
+
* fighting kit (`game-kits/fighting.ts`: light 0.045s, heavy 0.07s,
|
|
6
|
+
* special 0.1s) and the pixel path reuses the `createGameEffects` kinds
|
|
7
|
+
* (`hit-spark`, `impact-flash`, `dash-trail`, `ground-dust`, ...), so every
|
|
8
|
+
* effect below resolves to real scene nodes through `nodes()` — never DOM,
|
|
9
|
+
* canvas, or CSS fakes (boundaries rule).
|
|
10
|
+
*
|
|
11
|
+
* This module is engine-pure and owns no renderer: the effects controller is
|
|
12
|
+
* injected through {@link GameFeelEffectsPort}, which `createGameEffects`
|
|
13
|
+
* (in `GameRuntime.ts`) satisfies structurally. A kit without a wired
|
|
14
|
+
* controller refuses pixel-backed triggers with an explicit receipt instead
|
|
15
|
+
* of faking success. All triggers are frame-budgeted and every trigger
|
|
16
|
+
* returns a receipt; `snapshot()` is the telemetry surface.
|
|
17
|
+
*/
|
|
18
|
+
/** Combat-proven hit-stop defaults, generalized (fighting kit values). */
|
|
19
|
+
export const GAME_FEEL_HIT_STOP_LIGHT_S = 0.045;
|
|
20
|
+
export const GAME_FEEL_HIT_STOP_HEAVY_S = 0.07;
|
|
21
|
+
export const GAME_FEEL_HIT_STOP_SPECIAL_S = 0.1;
|
|
22
|
+
export const GAME_FEEL_HIT_STOP_DEFAULT_S = 0.06;
|
|
23
|
+
function assertFinite(value, api, field) {
|
|
24
|
+
if (!Number.isFinite(value)) {
|
|
25
|
+
throw new RangeError(`${api} ${field} must be finite (received ${String(value)}).`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function nowMs() {
|
|
29
|
+
if (typeof performance !== "undefined" && typeof performance.now === "function")
|
|
30
|
+
return performance.now();
|
|
31
|
+
return Date.now();
|
|
32
|
+
}
|
|
33
|
+
export function createGameFeel(options = {}) {
|
|
34
|
+
const budgetMs = options.budgetMs ?? 2;
|
|
35
|
+
assertFinite(budgetMs, "gameFeel", "budgetMs");
|
|
36
|
+
if (budgetMs < 0)
|
|
37
|
+
throw new RangeError("gameFeel budgetMs must be >= 0.");
|
|
38
|
+
let enabled = options.enabled ?? true;
|
|
39
|
+
const effects = options.effects;
|
|
40
|
+
let slowMoScale = 1;
|
|
41
|
+
let slowMoRemainingMs = 0;
|
|
42
|
+
let hitStopRemainingMs = 0;
|
|
43
|
+
let flashRemainingMs = 0;
|
|
44
|
+
let lineIntensity = 0;
|
|
45
|
+
let lineRemainingMs = 0;
|
|
46
|
+
let dustSpawned = 0;
|
|
47
|
+
let updates = 0;
|
|
48
|
+
let lastMs = 0;
|
|
49
|
+
let maxMs = 0;
|
|
50
|
+
let overBudgetCount = 0;
|
|
51
|
+
const disabled = (effect) => ({
|
|
52
|
+
accepted: false,
|
|
53
|
+
reason: `gameFeel.${effect} rejected: kit disabled (setEnabled(true) to resume).`
|
|
54
|
+
});
|
|
55
|
+
const unwired = (effect) => ({
|
|
56
|
+
accepted: false,
|
|
57
|
+
reason: `gameFeel.${effect} rejected: no effects controller wired (pass options.effects).`
|
|
58
|
+
});
|
|
59
|
+
const timeScale = () => {
|
|
60
|
+
if (hitStopRemainingMs > 0)
|
|
61
|
+
return 0;
|
|
62
|
+
if (slowMoRemainingMs > 0)
|
|
63
|
+
return slowMoScale;
|
|
64
|
+
return 1;
|
|
65
|
+
};
|
|
66
|
+
const budget = () => ({
|
|
67
|
+
lastMs,
|
|
68
|
+
maxMs,
|
|
69
|
+
budgetMs,
|
|
70
|
+
overBudget: lastMs > budgetMs,
|
|
71
|
+
overBudgetCount,
|
|
72
|
+
updates
|
|
73
|
+
});
|
|
74
|
+
const snap = () => {
|
|
75
|
+
const effectsSnapshot = effects?.snapshot();
|
|
76
|
+
return {
|
|
77
|
+
kind: "aura-game-feel",
|
|
78
|
+
enabled,
|
|
79
|
+
timeScale: timeScale(),
|
|
80
|
+
frozen: hitStopRemainingMs > 0,
|
|
81
|
+
slowMoActive: slowMoRemainingMs > 0,
|
|
82
|
+
hitStopActive: hitStopRemainingMs > 0,
|
|
83
|
+
flashActive: flashRemainingMs > 0,
|
|
84
|
+
lineIntensity: lineRemainingMs > 0 ? lineIntensity : 0,
|
|
85
|
+
dustSpawned,
|
|
86
|
+
effectsActive: effectsSnapshot?.active ?? 0,
|
|
87
|
+
effectsSpawned: effectsSnapshot?.spawned ?? 0,
|
|
88
|
+
budget: budget()
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
get effectsWired() {
|
|
93
|
+
return effects !== undefined;
|
|
94
|
+
},
|
|
95
|
+
setEnabled(next) {
|
|
96
|
+
enabled = next === true;
|
|
97
|
+
if (!enabled) {
|
|
98
|
+
slowMoRemainingMs = 0;
|
|
99
|
+
hitStopRemainingMs = 0;
|
|
100
|
+
flashRemainingMs = 0;
|
|
101
|
+
lineRemainingMs = 0;
|
|
102
|
+
lineIntensity = 0;
|
|
103
|
+
slowMoScale = 1;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
slowMo(scale, durationMs) {
|
|
107
|
+
const api = "gameFeel.slowMo";
|
|
108
|
+
assertFinite(scale, api, "scale");
|
|
109
|
+
assertFinite(durationMs, api, "durationMs");
|
|
110
|
+
if (scale < 0 || scale > 1)
|
|
111
|
+
throw new RangeError(`${api} scale must be in [0, 1].`);
|
|
112
|
+
if (durationMs <= 0)
|
|
113
|
+
throw new RangeError(`${api} durationMs must be > 0.`);
|
|
114
|
+
if (!enabled)
|
|
115
|
+
return disabled("slowMo");
|
|
116
|
+
slowMoScale = scale;
|
|
117
|
+
slowMoRemainingMs = durationMs;
|
|
118
|
+
return { accepted: true };
|
|
119
|
+
},
|
|
120
|
+
hitStop(durationMs) {
|
|
121
|
+
const api = "gameFeel.hitStop";
|
|
122
|
+
assertFinite(durationMs, api, "durationMs");
|
|
123
|
+
if (durationMs <= 0)
|
|
124
|
+
throw new RangeError(`${api} durationMs must be > 0.`);
|
|
125
|
+
if (!enabled)
|
|
126
|
+
return disabled("hitStop");
|
|
127
|
+
// Generalized from the fighting kit: a full freeze for the window.
|
|
128
|
+
hitStopRemainingMs = Math.max(hitStopRemainingMs, durationMs);
|
|
129
|
+
return { accepted: true };
|
|
130
|
+
},
|
|
131
|
+
damageFlash(color, position = [0, 1, 0]) {
|
|
132
|
+
const api = "gameFeel.damageFlash";
|
|
133
|
+
if (typeof color !== "string" || color.length === 0) {
|
|
134
|
+
throw new RangeError(`${api} color must be a non-empty string.`);
|
|
135
|
+
}
|
|
136
|
+
if (!enabled)
|
|
137
|
+
return disabled("damageFlash");
|
|
138
|
+
if (!effects)
|
|
139
|
+
return unwired("damageFlash");
|
|
140
|
+
const effect = effects.spawn("impact-flash", position, { color, intensity: 1, duration: 0.12 });
|
|
141
|
+
flashRemainingMs = 120;
|
|
142
|
+
return { accepted: true, effectId: effect.id };
|
|
143
|
+
},
|
|
144
|
+
speedLines(intensity, position = [0, 1, -1]) {
|
|
145
|
+
const api = "gameFeel.speedLines";
|
|
146
|
+
assertFinite(intensity, api, "intensity");
|
|
147
|
+
if (intensity < 0 || intensity > 1)
|
|
148
|
+
throw new RangeError(`${api} intensity must be in [0, 1].`);
|
|
149
|
+
if (!enabled)
|
|
150
|
+
return disabled("speedLines");
|
|
151
|
+
if (!effects)
|
|
152
|
+
return unwired("speedLines");
|
|
153
|
+
const effect = effects.spawn(intensity > 0.6 ? "slash-trail" : "dash-trail", position, {
|
|
154
|
+
intensity,
|
|
155
|
+
duration: 0.28
|
|
156
|
+
});
|
|
157
|
+
lineIntensity = intensity;
|
|
158
|
+
lineRemainingMs = 280;
|
|
159
|
+
return { accepted: true, effectId: effect.id };
|
|
160
|
+
},
|
|
161
|
+
landingDust(position) {
|
|
162
|
+
const api = "gameFeel.landingDust";
|
|
163
|
+
if (!Array.isArray(position) || position.length !== 3 || position.some((c) => !Number.isFinite(c))) {
|
|
164
|
+
throw new RangeError(`${api} position must be a finite [x, y, z] tuple.`);
|
|
165
|
+
}
|
|
166
|
+
if (!enabled)
|
|
167
|
+
return disabled("landingDust");
|
|
168
|
+
if (!effects)
|
|
169
|
+
return unwired("landingDust");
|
|
170
|
+
const effect = effects.spawn("ground-dust", position, { intensity: 0.8, duration: 0.34 });
|
|
171
|
+
dustSpawned += 1;
|
|
172
|
+
return { accepted: true, effectId: effect.id };
|
|
173
|
+
},
|
|
174
|
+
effectiveDt(dtMs) {
|
|
175
|
+
assertFinite(dtMs, "gameFeel.effectiveDt", "dtMs");
|
|
176
|
+
return Math.max(0, dtMs) * timeScale();
|
|
177
|
+
},
|
|
178
|
+
update(dtMs) {
|
|
179
|
+
assertFinite(dtMs, "gameFeel.update", "dtMs");
|
|
180
|
+
const started = nowMs();
|
|
181
|
+
const step = Math.max(0, dtMs);
|
|
182
|
+
slowMoRemainingMs = Math.max(0, slowMoRemainingMs - step);
|
|
183
|
+
if (slowMoRemainingMs === 0)
|
|
184
|
+
slowMoScale = 1;
|
|
185
|
+
hitStopRemainingMs = Math.max(0, hitStopRemainingMs - step);
|
|
186
|
+
flashRemainingMs = Math.max(0, flashRemainingMs - step);
|
|
187
|
+
lineRemainingMs = Math.max(0, lineRemainingMs - step);
|
|
188
|
+
if (lineRemainingMs === 0)
|
|
189
|
+
lineIntensity = 0;
|
|
190
|
+
effects?.update(step / 1000);
|
|
191
|
+
updates += 1;
|
|
192
|
+
lastMs = nowMs() - started;
|
|
193
|
+
maxMs = Math.max(maxMs, lastMs);
|
|
194
|
+
if (lastMs > budgetMs)
|
|
195
|
+
overBudgetCount += 1;
|
|
196
|
+
return snap();
|
|
197
|
+
},
|
|
198
|
+
snapshot: snap,
|
|
199
|
+
nodes() {
|
|
200
|
+
return effects?.nodes() ?? [];
|
|
201
|
+
},
|
|
202
|
+
clear() {
|
|
203
|
+
effects?.clear();
|
|
204
|
+
slowMoRemainingMs = 0;
|
|
205
|
+
hitStopRemainingMs = 0;
|
|
206
|
+
flashRemainingMs = 0;
|
|
207
|
+
lineRemainingMs = 0;
|
|
208
|
+
lineIntensity = 0;
|
|
209
|
+
slowMoScale = 1;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Root-bridge namespace (wiring lives in `agent-api/index.ts`, owned by the
|
|
215
|
+
* bridge sibling — this object is the exact surface to expose as `gameFeel`).
|
|
216
|
+
*/
|
|
217
|
+
export const gameFeelBuilders = {
|
|
218
|
+
create: createGameFeel,
|
|
219
|
+
hitStopDefaults: {
|
|
220
|
+
light: GAME_FEEL_HIT_STOP_LIGHT_S,
|
|
221
|
+
heavy: GAME_FEEL_HIT_STOP_HEAVY_S,
|
|
222
|
+
special: GAME_FEEL_HIT_STOP_SPECIAL_S,
|
|
223
|
+
default: GAME_FEEL_HIT_STOP_DEFAULT_S
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
//# sourceMappingURL=GameFeel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameFeel.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/GameFeel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { AuraLabelNode } from "./index.js";
|
|
2
|
+
import type { ProjectedLabel } from "./WorldLabelRenderer.js";
|
|
3
|
+
/**
|
|
4
|
+
* Label telemetry for the three text buckets (muse3jsparity-PRD N4).
|
|
5
|
+
*
|
|
6
|
+
* N4 ends the DOM-vs-3D ambiguity with three buckets and three proofs:
|
|
7
|
+
*
|
|
8
|
+
* 1. Accessible DOM (`ui.*`) — screen-reader text, never projected. Counted
|
|
9
|
+
* from the scene as `hud` labels plus `ui.*` bindings, not from pixels.
|
|
10
|
+
* 2. World-anchored screen-space labels (`labels.billboard/anchor/axisTick/
|
|
11
|
+
* callout`) — DOM boxes placed by 3D projection. Proven by
|
|
12
|
+
* `collectLabelTelemetry` below: placed-vs-offscreen counts per route,
|
|
13
|
+
* computed from the projected set, not the node set. Counting nodes is
|
|
14
|
+
* what let silently-dropped callouts stay green.
|
|
15
|
+
* 3. Lit/occluded 3D text (G1 SDF) — in-world quads. Proven by
|
|
16
|
+
* `textPixelBacked`, owned by `packages/rendering/src/SdfText.ts`.
|
|
17
|
+
*
|
|
18
|
+
* ## CSS2D/CSS3D
|
|
19
|
+
*
|
|
20
|
+
* Explicit 2.1 decision (see `CSS2D_OUT_OF_SCOPE`): NO `CSS2DRenderer` /
|
|
21
|
+
* `CSS3DRenderer` parity. Verified: zero `CSS2D`/`CSS3D` references exist in
|
|
22
|
+
* `packages/`. Game annotation needs are covered by buckets 2 and 3; the
|
|
23
|
+
* three-compat migration lab documents the manual CSS2D/3D mapping for
|
|
24
|
+
* importers. Revisit only with a named customer workload.
|
|
25
|
+
*
|
|
26
|
+
* Pure: no DOM. Takes scene nodes plus the projected set (from
|
|
27
|
+
* `AuraDiagnostics.labels`) and returns counts. The engine bridge embeds the
|
|
28
|
+
* result in diagnostics; route-health enforces it per route.
|
|
29
|
+
*/
|
|
30
|
+
/** Collision-avoidance role: HUD copy never collides, ticks are dense, annotations steer. */
|
|
31
|
+
export type LabelTelemetryRole = "hud" | "annotation" | "tick";
|
|
32
|
+
export declare function labelTelemetryRoleFor(label: AuraLabelNode["label"]): LabelTelemetryRole;
|
|
33
|
+
export interface LabelTelemetryByRole {
|
|
34
|
+
readonly declared: number;
|
|
35
|
+
readonly placed: number;
|
|
36
|
+
readonly offscreen: number;
|
|
37
|
+
}
|
|
38
|
+
export interface LabelTelemetry {
|
|
39
|
+
readonly kind: "aura-label-telemetry";
|
|
40
|
+
/** Labels declared in the scene snapshot. */
|
|
41
|
+
readonly declared: number;
|
|
42
|
+
/** Labels actually placed on screen this frame (`visible === true`). */
|
|
43
|
+
readonly placed: number;
|
|
44
|
+
/** Labels declared but not on screen (hidden, clamped-away, behind camera, occlusion-hidden). */
|
|
45
|
+
readonly offscreen: number;
|
|
46
|
+
readonly behindCamera: number;
|
|
47
|
+
readonly clamped: number;
|
|
48
|
+
readonly occludedDimmed: number;
|
|
49
|
+
readonly byRole: Readonly<Record<LabelTelemetryRole, LabelTelemetryByRole>>;
|
|
50
|
+
/**
|
|
51
|
+
* Fail-closed gate signal for route-health: a route that declares labels
|
|
52
|
+
* but places none fails. A route with no labels passes vacuously.
|
|
53
|
+
*/
|
|
54
|
+
readonly placesLabels: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Join scene label nodes with their projected results by node id.
|
|
58
|
+
*
|
|
59
|
+
* Ids must match `worldLabelsFromSnapshot` exactly: `node.name`, else
|
|
60
|
+
* `${node.label}-${position}` where position is 1-based in flattened snapshot
|
|
61
|
+
* order. Pass nodes in that same order; a mismatched id counts the label as
|
|
62
|
+
* offscreen rather than inventing a placement.
|
|
63
|
+
*/
|
|
64
|
+
export declare function collectLabelTelemetry(nodes: readonly AuraLabelNode[], projected: readonly ProjectedLabel[]): LabelTelemetry;
|
|
65
|
+
export interface LabelCollisionTuning {
|
|
66
|
+
readonly role: LabelTelemetryRole;
|
|
67
|
+
/** Minimum vertical gap in CSS pixels used by `resolveLabelCollisions`. */
|
|
68
|
+
readonly minGapPx: number;
|
|
69
|
+
/** Whether collision avoidance runs for this role at all. */
|
|
70
|
+
readonly avoidanceEnabled: boolean;
|
|
71
|
+
readonly note: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Per-role collision-avoidance tuning (N4 task 2).
|
|
75
|
+
*
|
|
76
|
+
* HUD copy is screen-anchored and never collides; axis ticks are dense and get
|
|
77
|
+
* the tightest gap; annotations keep the default gap so leaders stay readable.
|
|
78
|
+
*/
|
|
79
|
+
export declare function tuneLabelCollision(role: LabelTelemetryRole): LabelCollisionTuning;
|
|
80
|
+
export interface TextBucketSummary {
|
|
81
|
+
/** Bucket 1: accessible DOM (`ui.*` bindings + `hud` labels). UI-only, never 3D proof. */
|
|
82
|
+
readonly accessibleDom: number;
|
|
83
|
+
/** Bucket 2: world-anchored screen-space labels placed this frame. */
|
|
84
|
+
readonly worldAnchoredPlaced: number;
|
|
85
|
+
/** Bucket 3: lit/occluded SDF 3D text quads submitted this frame. */
|
|
86
|
+
readonly sdfTexts: number;
|
|
87
|
+
readonly note: string;
|
|
88
|
+
}
|
|
89
|
+
/** Three buckets, three numbers — never merged, per the inventory rule. */
|
|
90
|
+
export declare function summarizeTextBuckets(input: {
|
|
91
|
+
readonly accessibleDom: number;
|
|
92
|
+
readonly worldAnchoredPlaced: number;
|
|
93
|
+
readonly sdfTexts: number;
|
|
94
|
+
}): TextBucketSummary;
|
|
95
|
+
/**
|
|
96
|
+
* The explicit 2.1 decision: NO `CSS2DRenderer`/`CSS3DRenderer` parity.
|
|
97
|
+
* Game annotation needs are covered by world-anchored labels + G1 SDF text;
|
|
98
|
+
* the three-compat migration lab documents the manual CSS2D/3D mapping for
|
|
99
|
+
* importers. Revisit only with a named customer workload.
|
|
100
|
+
*/
|
|
101
|
+
export declare const CSS2D_OUT_OF_SCOPE: {
|
|
102
|
+
readonly decision: "no-css2d-css3d-parity";
|
|
103
|
+
readonly renderers: readonly ["CSS2DRenderer", "CSS3DRenderer"];
|
|
104
|
+
readonly coveredBy: readonly ["world-anchored labels", "G1 SDF text"];
|
|
105
|
+
readonly importerPath: "three-compat migration lab documents the manual CSS2D/3D mapping";
|
|
106
|
+
readonly revisit: "named customer workload only";
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=LabelTelemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LabelTelemetry.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/LabelTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAIvF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC5E;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,cAAc,CAwChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,CAuBjF;AAED,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,iBAAiB,CAUpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export function labelTelemetryRoleFor(label) {
|
|
2
|
+
if (label === "hud")
|
|
3
|
+
return "hud";
|
|
4
|
+
if (label === "axis-tick")
|
|
5
|
+
return "tick";
|
|
6
|
+
return "annotation";
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Join scene label nodes with their projected results by node id.
|
|
10
|
+
*
|
|
11
|
+
* Ids must match `worldLabelsFromSnapshot` exactly: `node.name`, else
|
|
12
|
+
* `${node.label}-${position}` where position is 1-based in flattened snapshot
|
|
13
|
+
* order. Pass nodes in that same order; a mismatched id counts the label as
|
|
14
|
+
* offscreen rather than inventing a placement.
|
|
15
|
+
*/
|
|
16
|
+
export function collectLabelTelemetry(nodes, projected) {
|
|
17
|
+
const byId = new Map(projected.map((label) => [label.id, label]));
|
|
18
|
+
const byRole = {
|
|
19
|
+
hud: { declared: 0, placed: 0, offscreen: 0 },
|
|
20
|
+
annotation: { declared: 0, placed: 0, offscreen: 0 },
|
|
21
|
+
tick: { declared: 0, placed: 0, offscreen: 0 }
|
|
22
|
+
};
|
|
23
|
+
let behindCamera = 0;
|
|
24
|
+
let clamped = 0;
|
|
25
|
+
let occludedDimmed = 0;
|
|
26
|
+
let placedCount = 0;
|
|
27
|
+
nodes.forEach((node, index) => {
|
|
28
|
+
const role = labelTelemetryRoleFor(node.label);
|
|
29
|
+
const slot = byRole[role];
|
|
30
|
+
byRole[role] = { ...slot, declared: slot.declared + 1 };
|
|
31
|
+
const id = node.name ?? `${node.label}-${index + 1}`;
|
|
32
|
+
const result = byId.get(id);
|
|
33
|
+
const placed = result?.visible === true;
|
|
34
|
+
if (placed) {
|
|
35
|
+
placedCount += 1;
|
|
36
|
+
byRole[role] = { ...byRole[role], placed: byRole[role].placed + 1 };
|
|
37
|
+
if (result.clamped)
|
|
38
|
+
clamped += 1;
|
|
39
|
+
if (result.occluded && result.occlusionOpacity < 1)
|
|
40
|
+
occludedDimmed += 1;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
byRole[role] = { ...byRole[role], offscreen: byRole[role].offscreen + 1 };
|
|
44
|
+
if (result?.behindCamera === true)
|
|
45
|
+
behindCamera += 1;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const declared = nodes.length;
|
|
49
|
+
return {
|
|
50
|
+
kind: "aura-label-telemetry",
|
|
51
|
+
declared,
|
|
52
|
+
placed: placedCount,
|
|
53
|
+
offscreen: declared - placedCount,
|
|
54
|
+
behindCamera,
|
|
55
|
+
clamped,
|
|
56
|
+
occludedDimmed,
|
|
57
|
+
byRole,
|
|
58
|
+
placesLabels: declared === 0 || placedCount > 0
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Per-role collision-avoidance tuning (N4 task 2).
|
|
63
|
+
*
|
|
64
|
+
* HUD copy is screen-anchored and never collides; axis ticks are dense and get
|
|
65
|
+
* the tightest gap; annotations keep the default gap so leaders stay readable.
|
|
66
|
+
*/
|
|
67
|
+
export function tuneLabelCollision(role) {
|
|
68
|
+
if (role === "hud") {
|
|
69
|
+
return {
|
|
70
|
+
role,
|
|
71
|
+
minGapPx: 0,
|
|
72
|
+
avoidanceEnabled: false,
|
|
73
|
+
note: "HUD labels are screen-anchored; collision avoidance is disabled so copy never moves."
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (role === "tick") {
|
|
77
|
+
return {
|
|
78
|
+
role,
|
|
79
|
+
minGapPx: 2,
|
|
80
|
+
avoidanceEnabled: true,
|
|
81
|
+
note: "Axis ticks are dense by design; tight gap with front-to-back priority."
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
role,
|
|
86
|
+
minGapPx: 4,
|
|
87
|
+
avoidanceEnabled: true,
|
|
88
|
+
note: "Annotations keep the default gap so leader lines stay attached to their subject."
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/** Three buckets, three numbers — never merged, per the inventory rule. */
|
|
92
|
+
export function summarizeTextBuckets(input) {
|
|
93
|
+
for (const [key, value] of Object.entries(input)) {
|
|
94
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
95
|
+
throw new Error(`Aura3D text bucket "${key}" must be a non-negative integer.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
...input,
|
|
100
|
+
note: "Accessible DOM, world-anchored labels, and SDF 3D text are separate capabilities with separate proof."
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The explicit 2.1 decision: NO `CSS2DRenderer`/`CSS3DRenderer` parity.
|
|
105
|
+
* Game annotation needs are covered by world-anchored labels + G1 SDF text;
|
|
106
|
+
* the three-compat migration lab documents the manual CSS2D/3D mapping for
|
|
107
|
+
* importers. Revisit only with a named customer workload.
|
|
108
|
+
*/
|
|
109
|
+
export const CSS2D_OUT_OF_SCOPE = {
|
|
110
|
+
decision: "no-css2d-css3d-parity",
|
|
111
|
+
renderers: ["CSS2DRenderer", "CSS3DRenderer"],
|
|
112
|
+
coveredBy: ["world-anchored labels", "G1 SDF text"],
|
|
113
|
+
importerPath: "three-compat migration lab documents the manual CSS2D/3D mapping",
|
|
114
|
+
revisit: "named customer workload only"
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=LabelTelemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LabelTelemetry.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/LabelTelemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural mirrors of the `@aura3d/navigation-recast` value-object shapes,
|
|
3
|
+
* kept LOCAL (never imported) so the packed engine carries no hard link —
|
|
4
|
+
* type-level or runtime — to the optional peer. The peer stays resolvable
|
|
5
|
+
* through the bare specifier in `loadNavigationPeer` below (dynamic import,
|
|
6
|
+
* fail-closed when absent) and through workspace aliases in source builds.
|
|
7
|
+
* If the peer shapes change, update these mirrors to match; assignability
|
|
8
|
+
* with the real peer holds structurally (loader returns are covariant).
|
|
9
|
+
*/
|
|
10
|
+
type NavigationVec3 = readonly [number, number, number];
|
|
11
|
+
interface NavigationTriangleSoup {
|
|
12
|
+
readonly positions: readonly number[] | Float32Array;
|
|
13
|
+
readonly indices: readonly number[] | Uint32Array;
|
|
14
|
+
}
|
|
15
|
+
interface NavigationPathResult {
|
|
16
|
+
readonly success: boolean;
|
|
17
|
+
readonly points: readonly NavigationVec3[];
|
|
18
|
+
readonly error?: string;
|
|
19
|
+
}
|
|
20
|
+
interface NavigationCrowdAgentOptions {
|
|
21
|
+
readonly radius?: number;
|
|
22
|
+
readonly height?: number;
|
|
23
|
+
readonly maxAcceleration?: number;
|
|
24
|
+
readonly maxSpeed?: number;
|
|
25
|
+
readonly collisionQueryRange?: number;
|
|
26
|
+
readonly pathOptimizationRange?: number;
|
|
27
|
+
readonly separationWeight?: number;
|
|
28
|
+
}
|
|
29
|
+
interface RecastCrowdAgentState {
|
|
30
|
+
readonly position: NavigationVec3;
|
|
31
|
+
readonly velocity: NavigationVec3;
|
|
32
|
+
readonly speed: number;
|
|
33
|
+
}
|
|
34
|
+
interface RecastNavigationOptions {
|
|
35
|
+
readonly moduleLoader?: () => Promise<unknown>;
|
|
36
|
+
readonly generatorLoader?: () => Promise<unknown>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Root navigation + crowds builders (muse3jsparity-PRD O1).
|
|
40
|
+
*
|
|
41
|
+
* Recast stays an OPTIONAL peer: this module never statically imports
|
|
42
|
+
* `@aura3d/navigation-recast` (the optional-boundary test forbids it from
|
|
43
|
+
* engine manifests, and a static value import would hard-require the peer for
|
|
44
|
+
* every route). The peer loads through an injected loader — tests inject
|
|
45
|
+
* fakes, routes rely on the default dynamic import — and every failure keeps
|
|
46
|
+
* the package's fail-closed "optional peer unavailable + install step" error.
|
|
47
|
+
* Nothing here falls back to a silent no-op navigator.
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* Minimal structural peer surface: the real `createRecastNavigation` return
|
|
51
|
+
* satisfies this (extra methods allowed); fakes implement only what the root
|
|
52
|
+
* builders call. This keeps unit tests hermetic without importing the
|
|
53
|
+
* optional package.
|
|
54
|
+
*/
|
|
55
|
+
export interface AuraNavigationPeer {
|
|
56
|
+
createRecastNavigation(options?: RecastNavigationOptions): Promise<{
|
|
57
|
+
generateSolo(input: NavigationTriangleSoup, config: Record<string, number | string | boolean>): {
|
|
58
|
+
computePath(from: NavigationVec3, to: NavigationVec3): NavigationPathResult;
|
|
59
|
+
createCrowd(maxAgents: number, maxAgentRadius: number): {
|
|
60
|
+
readonly maxAgents: number;
|
|
61
|
+
count(): number;
|
|
62
|
+
addAgent(position: NavigationVec3, options?: NavigationCrowdAgentOptions): unknown;
|
|
63
|
+
setTarget(agent: unknown, target: NavigationVec3): boolean;
|
|
64
|
+
update(dt: number): void;
|
|
65
|
+
agentStates(): readonly RecastCrowdAgentState[];
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
export interface AuraNavigationPeerLoaders extends RecastNavigationOptions {
|
|
71
|
+
/**
|
|
72
|
+
* Fully hermetic peer injection for tests: when supplied, no dynamic
|
|
73
|
+
* import runs at all, so the suite never needs the optional package.
|
|
74
|
+
*/
|
|
75
|
+
readonly peer?: AuraNavigationPeer;
|
|
76
|
+
}
|
|
77
|
+
export interface AuraNavMeshBakeOptions {
|
|
78
|
+
readonly positions: readonly number[] | Float32Array;
|
|
79
|
+
readonly indices: readonly number[] | Uint32Array;
|
|
80
|
+
readonly settings?: Record<string, number | string | boolean>;
|
|
81
|
+
}
|
|
82
|
+
export interface AuraCrowdCreateOptions {
|
|
83
|
+
readonly maxAgents: number;
|
|
84
|
+
readonly maxAgentRadius: number;
|
|
85
|
+
}
|
|
86
|
+
export type AuraNavMeshHandle = Awaited<ReturnType<AuraNavigationPeer["createRecastNavigation"]>> extends {
|
|
87
|
+
generateSolo(input: NavigationTriangleSoup, config: Record<string, number | string | boolean>): infer M;
|
|
88
|
+
} ? M : never;
|
|
89
|
+
export type AuraCrowdHandle = AuraNavMeshHandle extends {
|
|
90
|
+
createCrowd(maxAgents: number, maxAgentRadius: number): infer C;
|
|
91
|
+
} ? C : never;
|
|
92
|
+
declare function bakeNavMesh(options: AuraNavMeshBakeOptions, loaders?: AuraNavigationPeerLoaders): Promise<AuraNavMeshHandle>;
|
|
93
|
+
declare function queryPath(mesh: AuraNavMeshHandle, from: NavigationVec3, to: NavigationVec3): NavigationPathResult;
|
|
94
|
+
declare function navigationIsAvailable(loaders?: AuraNavigationPeerLoaders): Promise<boolean>;
|
|
95
|
+
export declare const navigation: {
|
|
96
|
+
readonly bake: typeof bakeNavMesh;
|
|
97
|
+
readonly path: typeof queryPath;
|
|
98
|
+
readonly isAvailable: typeof navigationIsAvailable;
|
|
99
|
+
};
|
|
100
|
+
declare function createCrowd(mesh: AuraNavMeshHandle, options: AuraCrowdCreateOptions): AuraCrowdHandle;
|
|
101
|
+
declare function crowdAgents(crowd: AuraCrowdHandle): readonly RecastCrowdAgentState[];
|
|
102
|
+
export declare const crowds: {
|
|
103
|
+
readonly create: typeof createCrowd;
|
|
104
|
+
readonly addAgent: (crowd: AuraCrowdHandle, position: NavigationVec3, options?: NavigationCrowdAgentOptions) => unknown;
|
|
105
|
+
readonly setTarget: (crowd: AuraCrowdHandle, agent: unknown, target: NavigationVec3) => boolean;
|
|
106
|
+
readonly update: (crowd: AuraCrowdHandle, dt: number) => void;
|
|
107
|
+
readonly agents: typeof crowdAgents;
|
|
108
|
+
readonly count: (crowd: AuraCrowdHandle) => number;
|
|
109
|
+
readonly maxAgents: (crowd: AuraCrowdHandle) => number;
|
|
110
|
+
readonly diagnostics: typeof describeCrowd;
|
|
111
|
+
};
|
|
112
|
+
/** LOD tier per agent: full actors near, billboard/marker impostors past `farDistance`. */
|
|
113
|
+
export type AuraCrowdLodTier = "near" | "mid" | "impostor" | "unknown";
|
|
114
|
+
export interface AuraCrowdLodOptions {
|
|
115
|
+
/** Camera position in the same space as agent positions. Without it every tier is "unknown". */
|
|
116
|
+
readonly camera?: NavigationVec3;
|
|
117
|
+
/** At or below this distance an agent renders full (default 6). */
|
|
118
|
+
readonly nearDistance?: number;
|
|
119
|
+
/** Past this distance an agent falls back to an impostor/marker (default 14). */
|
|
120
|
+
readonly farDistance?: number;
|
|
121
|
+
}
|
|
122
|
+
export interface AuraCrowdAgentLod {
|
|
123
|
+
readonly position: NavigationVec3;
|
|
124
|
+
readonly distance: number | null;
|
|
125
|
+
readonly tier: AuraCrowdLodTier;
|
|
126
|
+
}
|
|
127
|
+
export interface AuraCrowdDiagnostics {
|
|
128
|
+
readonly count: number;
|
|
129
|
+
readonly maxAgents: number;
|
|
130
|
+
/** True once `addAgent` would throw instead of spawning (fail-closed cap). */
|
|
131
|
+
readonly atCap: boolean;
|
|
132
|
+
/** Present exactly when `atCap` — the over-budget warning for route evidence. */
|
|
133
|
+
readonly capWarning?: string;
|
|
134
|
+
readonly tiers: Record<AuraCrowdLodTier, number>;
|
|
135
|
+
readonly agents: readonly AuraCrowdAgentLod[];
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* O1 crowd LOD + cap diagnostics over LIVE crowd state (never the fixture sampler).
|
|
139
|
+
*
|
|
140
|
+
* Distances are Euclidean from `camera` to each live agent position; tiers split at
|
|
141
|
+
* `nearDistance`/`farDistance`. Throws on inverted bounds so a misconfigured LOD
|
|
142
|
+
* can never silently report every agent as near.
|
|
143
|
+
*/
|
|
144
|
+
export declare function describeCrowd(crowd: AuraCrowdHandle, options?: AuraCrowdLodOptions): AuraCrowdDiagnostics;
|
|
145
|
+
export {};
|
|
146
|
+
//# sourceMappingURL=NavigationCrowds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavigationCrowds.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/NavigationCrowds.ts"],"names":[],"mappings":"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"}
|