@aura3d/engine 1.4.5 → 1.5.1
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 +95 -29
- package/dist/animation/Retargeting.d.ts +12 -0
- package/dist/animation/Retargeting.d.ts.map +1 -0
- package/dist/animation/Retargeting.js +19 -0
- package/dist/animation/Retargeting.js.map +1 -0
- package/dist/assets/GLTFLoader.d.ts +4 -0
- package/dist/assets/GLTFLoader.d.ts.map +1 -1
- package/dist/assets/GLTFLoader.js +39 -4
- package/dist/assets/GLTFLoader.js.map +1 -1
- package/dist/assets/GLTFRenderResources.d.ts +16 -0
- package/dist/assets/GLTFRenderResources.d.ts.map +1 -1
- package/dist/assets/GLTFRenderResources.js +42 -2
- package/dist/assets/GLTFRenderResources.js.map +1 -1
- package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts +6 -0
- package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -1
- package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js +2 -1
- package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -1
- package/dist/assets/index.d.ts +0 -1
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +0 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/assets/loaders/index.d.ts +0 -1
- package/dist/assets/loaders/index.d.ts.map +1 -1
- package/dist/assets/loaders/index.js +0 -1
- package/dist/assets/loaders/index.js.map +1 -1
- package/dist/aura3d-cli/asset-intent.d.ts +148 -0
- package/dist/aura3d-cli/asset-intent.d.ts.map +1 -0
- package/dist/aura3d-cli/asset-intent.js +145 -0
- package/dist/aura3d-cli/asset-intent.js.map +1 -0
- package/dist/aura3d-cli/asset-role-admission.d.ts +174 -0
- package/dist/aura3d-cli/asset-role-admission.d.ts.map +1 -0
- package/dist/aura3d-cli/asset-role-admission.js +381 -0
- package/dist/aura3d-cli/asset-role-admission.js.map +1 -0
- package/dist/aura3d-cli/asset-screening-effects.d.ts +95 -0
- package/dist/aura3d-cli/asset-screening-effects.d.ts.map +1 -0
- package/dist/aura3d-cli/asset-screening-effects.js +321 -0
- package/dist/aura3d-cli/asset-screening-effects.js.map +1 -0
- package/dist/aura3d-cli/asset-screening-pipeline.d.ts +132 -0
- package/dist/aura3d-cli/asset-screening-pipeline.d.ts.map +1 -0
- package/dist/aura3d-cli/asset-screening-pipeline.js +277 -0
- package/dist/aura3d-cli/asset-screening-pipeline.js.map +1 -0
- package/dist/aura3d-cli/cartoon-asset-profiles.d.ts +15 -0
- package/dist/aura3d-cli/cartoon-asset-profiles.d.ts.map +1 -0
- package/dist/aura3d-cli/cartoon-asset-profiles.js +46 -0
- package/dist/aura3d-cli/cartoon-asset-profiles.js.map +1 -0
- package/dist/aura3d-cli/cli-help.js +1 -1
- package/dist/aura3d-cli/cli.js +16 -2
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +8 -0
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +390 -17
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.d.ts +4 -0
- package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.js +22 -0
- package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.d.ts +20 -5
- package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge.js +38 -1
- package/dist/aura3d-cli/pull-bridge.js.map +1 -1
- package/dist/controls/ControlState.d.ts +1 -1
- package/dist/controls/ControlState.d.ts.map +1 -1
- package/dist/controls/DragControls.d.ts +21 -1
- package/dist/controls/DragControls.d.ts.map +1 -1
- package/dist/controls/DragControls.js +24 -2
- package/dist/controls/DragControls.js.map +1 -1
- package/dist/controls/FirstPersonControls.d.ts +10 -1
- package/dist/controls/FirstPersonControls.d.ts.map +1 -1
- package/dist/controls/FirstPersonControls.js +18 -2
- package/dist/controls/FirstPersonControls.js.map +1 -1
- package/dist/controls/FlyControls.d.ts +42 -0
- package/dist/controls/FlyControls.d.ts.map +1 -1
- package/dist/controls/FlyControls.js +106 -3
- package/dist/controls/FlyControls.js.map +1 -1
- package/dist/controls/MapControls.d.ts +13 -0
- package/dist/controls/MapControls.d.ts.map +1 -1
- package/dist/controls/MapControls.js +40 -2
- package/dist/controls/MapControls.js.map +1 -1
- package/dist/controls/OrbitControls.d.ts +54 -0
- package/dist/controls/OrbitControls.d.ts.map +1 -1
- package/dist/controls/OrbitControls.js +133 -0
- package/dist/controls/OrbitControls.js.map +1 -1
- package/dist/controls/PointerLockControls.d.ts +12 -5
- package/dist/controls/PointerLockControls.d.ts.map +1 -1
- package/dist/controls/PointerLockControls.js +30 -11
- package/dist/controls/PointerLockControls.js.map +1 -1
- package/dist/controls/SelectionManager.d.ts +22 -1
- package/dist/controls/SelectionManager.d.ts.map +1 -1
- package/dist/controls/SelectionManager.js +64 -6
- package/dist/controls/SelectionManager.js.map +1 -1
- package/dist/controls/TransformControls.d.ts +135 -1
- package/dist/controls/TransformControls.d.ts.map +1 -1
- package/dist/controls/TransformControls.js +534 -10
- package/dist/controls/TransformControls.js.map +1 -1
- package/dist/controls/index.d.ts +7 -2
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +1 -1
- package/dist/controls/index.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts +2 -0
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts.map +1 -1
- package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js +769 -42
- 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 +22 -2
- package/dist/create-aura3d/showcase-spec-game-template-evidence.js.map +1 -1
- package/dist/create-aura3d/showcase-spec-replacement-candidates.js +26 -0
- package/dist/create-aura3d/showcase-spec-replacement-candidates.js.map +1 -1
- package/dist/ecs/components/MeshComponent.d.ts +5 -2
- package/dist/ecs/components/MeshComponent.d.ts.map +1 -1
- package/dist/ecs/components/MeshComponent.js.map +1 -1
- package/dist/editor-runtime/CartoonSceneEditor.d.ts +111 -0
- package/dist/editor-runtime/CartoonSceneEditor.d.ts.map +1 -0
- package/dist/editor-runtime/CartoonSceneEditor.js +285 -0
- package/dist/editor-runtime/CartoonSceneEditor.js.map +1 -0
- package/dist/editor-runtime/InteractiveTransformGizmo.d.ts +142 -0
- package/dist/editor-runtime/InteractiveTransformGizmo.d.ts.map +1 -0
- package/dist/editor-runtime/InteractiveTransformGizmo.js +468 -0
- package/dist/editor-runtime/InteractiveTransformGizmo.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/ApplicationKits.d.ts +307 -0
- package/dist/engine/agent-api/ApplicationKits.d.ts.map +1 -0
- package/dist/engine/agent-api/ApplicationKits.js +650 -0
- package/dist/engine/agent-api/ApplicationKits.js.map +1 -0
- package/dist/engine/agent-api/CartoonAssetManifest.d.ts +50 -0
- package/dist/engine/agent-api/CartoonAssetManifest.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonAssetManifest.js +65 -0
- package/dist/engine/agent-api/CartoonAssetManifest.js.map +1 -0
- package/dist/engine/agent-api/CartoonDirector.d.ts +120 -0
- package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonDirector.js +432 -0
- package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.d.ts +51 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.js +79 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.js.map +1 -0
- package/dist/engine/agent-api/CartoonMotionQuality.d.ts +83 -0
- package/dist/engine/agent-api/CartoonMotionQuality.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonMotionQuality.js +128 -0
- package/dist/engine/agent-api/CartoonMotionQuality.js.map +1 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts +150 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonPerformance.js +345 -0
- package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts +143 -0
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonRenderQueue.js +410 -0
- package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
- package/dist/engine/agent-api/CartoonRouteProof.d.ts +112 -0
- package/dist/engine/agent-api/CartoonRouteProof.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonRouteProof.js +127 -0
- package/dist/engine/agent-api/CartoonRouteProof.js.map +1 -0
- package/dist/engine/agent-api/CombatFrameData.d.ts +210 -0
- package/dist/engine/agent-api/CombatFrameData.d.ts.map +1 -0
- package/dist/engine/agent-api/CombatFrameData.js +324 -0
- package/dist/engine/agent-api/CombatFrameData.js.map +1 -0
- package/dist/engine/agent-api/FocusSelection.d.ts +186 -0
- package/dist/engine/agent-api/FocusSelection.d.ts.map +1 -0
- package/dist/engine/agent-api/FocusSelection.js +436 -0
- package/dist/engine/agent-api/FocusSelection.js.map +1 -0
- package/dist/engine/agent-api/GameEvidence.d.ts +1 -0
- package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -1
- package/dist/engine/agent-api/GameEvidence.js +1 -0
- package/dist/engine/agent-api/GameEvidence.js.map +1 -1
- package/dist/engine/agent-api/GameGenreKits.d.ts +43 -1
- package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
- package/dist/engine/agent-api/GameGenreKits.js +79 -13
- package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
- package/dist/engine/agent-api/GameRuntime.d.ts +1 -0
- package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
- package/dist/engine/agent-api/GameRuntime.js +1 -0
- package/dist/engine/agent-api/GameRuntime.js.map +1 -1
- package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +22 -0
- package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
- package/dist/engine/agent-api/GameSceneGeometryBindings.js +9 -0
- package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
- package/dist/engine/agent-api/LayeredSceneComposition.d.ts +295 -0
- package/dist/engine/agent-api/LayeredSceneComposition.d.ts.map +1 -0
- package/dist/engine/agent-api/LayeredSceneComposition.js +387 -0
- package/dist/engine/agent-api/LayeredSceneComposition.js.map +1 -0
- package/dist/engine/agent-api/PlatformerMotion.d.ts +177 -0
- package/dist/engine/agent-api/PlatformerMotion.d.ts.map +1 -0
- package/dist/engine/agent-api/PlatformerMotion.js +207 -0
- package/dist/engine/agent-api/PlatformerMotion.js.map +1 -0
- package/dist/engine/agent-api/SceneGroundingUtils.d.ts +62 -0
- package/dist/engine/agent-api/SceneGroundingUtils.d.ts.map +1 -1
- package/dist/engine/agent-api/SceneGroundingUtils.js +37 -0
- package/dist/engine/agent-api/SceneGroundingUtils.js.map +1 -1
- package/dist/engine/agent-api/SceneQueries.d.ts +124 -0
- package/dist/engine/agent-api/SceneQueries.d.ts.map +1 -0
- package/dist/engine/agent-api/SceneQueries.js +221 -0
- package/dist/engine/agent-api/SceneQueries.js.map +1 -0
- package/dist/engine/agent-api/SpatialAnchoring.d.ts +232 -0
- package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -0
- package/dist/engine/agent-api/SpatialAnchoring.js +348 -0
- package/dist/engine/agent-api/SpatialAnchoring.js.map +1 -0
- package/dist/engine/agent-api/SubjectFramingUtils.d.ts +127 -0
- package/dist/engine/agent-api/SubjectFramingUtils.d.ts.map +1 -0
- package/dist/engine/agent-api/SubjectFramingUtils.js +126 -0
- package/dist/engine/agent-api/SubjectFramingUtils.js.map +1 -0
- package/dist/engine/agent-api/TouchControlBinding.d.ts +81 -0
- package/dist/engine/agent-api/TouchControlBinding.d.ts.map +1 -0
- package/dist/engine/agent-api/TouchControlBinding.js +116 -0
- package/dist/engine/agent-api/TouchControlBinding.js.map +1 -0
- package/dist/engine/agent-api/VehicleChassis.d.ts +192 -0
- package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -0
- package/dist/engine/agent-api/VehicleChassis.js +322 -0
- package/dist/engine/agent-api/VehicleChassis.js.map +1 -0
- package/dist/engine/agent-api/VehicleDriverAi.d.ts +123 -0
- package/dist/engine/agent-api/VehicleDriverAi.d.ts.map +1 -0
- package/dist/engine/agent-api/VehicleDriverAi.js +217 -0
- package/dist/engine/agent-api/VehicleDriverAi.js.map +1 -0
- package/dist/engine/agent-api/WorldLabelRenderer.d.ts +146 -0
- package/dist/engine/agent-api/WorldLabelRenderer.d.ts.map +1 -0
- package/dist/engine/agent-api/WorldLabelRenderer.js +331 -0
- package/dist/engine/agent-api/WorldLabelRenderer.js.map +1 -0
- package/dist/engine/agent-api/index.d.ts +69 -0
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +633 -75
- 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/production-runtime/GameRenderPreset.d.ts +32 -0
- package/dist/engine/production-runtime/GameRenderPreset.d.ts.map +1 -1
- package/dist/engine/production-runtime/GameRenderPreset.js +37 -2
- package/dist/engine/production-runtime/GameRenderPreset.js.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts +8 -0
- package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.js +2 -1
- package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
- package/dist/input/controls/PointerLockControls.d.ts +1 -1
- package/dist/input/controls/PointerLockControls.d.ts.map +1 -1
- package/dist/input/controls/PointerLockControls.js +12 -0
- package/dist/input/controls/PointerLockControls.js.map +1 -1
- package/dist/physics/Collider.d.ts +1 -1
- package/dist/physics/Collider.d.ts.map +1 -1
- package/dist/physics/Collider.js +2 -2
- package/dist/physics/Collider.js.map +1 -1
- package/dist/physics/CollisionEvents.d.ts +1 -0
- package/dist/physics/CollisionEvents.d.ts.map +1 -1
- package/dist/physics/CollisionEvents.js.map +1 -1
- package/dist/physics/NarrowPhase.d.ts +11 -0
- package/dist/physics/NarrowPhase.d.ts.map +1 -0
- package/dist/physics/NarrowPhase.js +565 -0
- package/dist/physics/NarrowPhase.js.map +1 -0
- package/dist/physics/PhysicsDebugDraw.js +19 -1
- package/dist/physics/PhysicsDebugDraw.js.map +1 -1
- package/dist/physics/PhysicsWorld.d.ts +43 -0
- package/dist/physics/PhysicsWorld.d.ts.map +1 -1
- package/dist/physics/PhysicsWorld.js +305 -30
- package/dist/physics/PhysicsWorld.js.map +1 -1
- package/dist/physics/RigidBody.d.ts +8 -1
- package/dist/physics/RigidBody.d.ts.map +1 -1
- package/dist/physics/RigidBody.js +32 -5
- package/dist/physics/RigidBody.js.map +1 -1
- package/dist/physics/Shape.d.ts +16 -2
- package/dist/physics/Shape.d.ts.map +1 -1
- package/dist/physics/Shape.js +93 -31
- package/dist/physics/Shape.js.map +1 -1
- package/dist/physics/TimeOfImpact.d.ts +15 -0
- package/dist/physics/TimeOfImpact.d.ts.map +1 -0
- package/dist/physics/TimeOfImpact.js +81 -0
- package/dist/physics/TimeOfImpact.js.map +1 -0
- package/dist/physics/index.d.ts +2 -0
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +2 -0
- package/dist/physics/index.js.map +1 -1
- package/dist/rendering/CascadedShadowMaps.d.ts +9 -1
- package/dist/rendering/CascadedShadowMaps.d.ts.map +1 -1
- package/dist/rendering/CascadedShadowMaps.js +68 -0
- package/dist/rendering/CascadedShadowMaps.js.map +1 -1
- package/dist/rendering/ClusteredForwardLighting.d.ts +28 -0
- package/dist/rendering/ClusteredForwardLighting.d.ts.map +1 -0
- package/dist/rendering/ClusteredForwardLighting.js +156 -0
- package/dist/rendering/ClusteredForwardLighting.js.map +1 -0
- package/dist/rendering/DepthPass.d.ts +14 -1
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +19 -4
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/EnvironmentMapResources.d.ts +59 -1
- package/dist/rendering/EnvironmentMapResources.d.ts.map +1 -1
- package/dist/rendering/EnvironmentMapResources.js +140 -100
- package/dist/rendering/EnvironmentMapResources.js.map +1 -1
- package/dist/rendering/EnvironmentPlatform.d.ts +3 -2
- package/dist/rendering/EnvironmentPlatform.d.ts.map +1 -1
- package/dist/rendering/EnvironmentPlatform.js +99 -44
- package/dist/rendering/EnvironmentPlatform.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts +37 -0
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +234 -7
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/Geometry.d.ts +19 -0
- package/dist/rendering/Geometry.d.ts.map +1 -1
- package/dist/rendering/Geometry.js +64 -0
- package/dist/rendering/Geometry.js.map +1 -1
- package/dist/rendering/IBL.d.ts.map +1 -1
- package/dist/rendering/IBL.js +0 -1
- package/dist/rendering/IBL.js.map +1 -1
- package/dist/rendering/LightCollector.d.ts +5 -1
- package/dist/rendering/LightCollector.d.ts.map +1 -1
- package/dist/rendering/LightCollector.js +16 -3
- package/dist/rendering/LightCollector.js.map +1 -1
- package/dist/rendering/LightUniforms.d.ts +26 -1
- package/dist/rendering/LightUniforms.d.ts.map +1 -1
- package/dist/rendering/LightUniforms.js +140 -8
- package/dist/rendering/LightUniforms.js.map +1 -1
- package/dist/rendering/LightingRig.d.ts +77 -0
- package/dist/rendering/LightingRig.d.ts.map +1 -1
- package/dist/rendering/LightingRig.js +100 -11
- package/dist/rendering/LightingRig.js.map +1 -1
- package/dist/rendering/MeshConsolidation.d.ts +63 -0
- package/dist/rendering/MeshConsolidation.d.ts.map +1 -0
- package/dist/rendering/MeshConsolidation.js +251 -0
- package/dist/rendering/MeshConsolidation.js.map +1 -0
- package/dist/rendering/PMREM.d.ts +13 -1
- package/dist/rendering/PMREM.d.ts.map +1 -1
- package/dist/rendering/PMREM.js +18 -4
- package/dist/rendering/PMREM.js.map +1 -1
- package/dist/rendering/PostProcessPass.d.ts +24 -2
- package/dist/rendering/PostProcessPass.d.ts.map +1 -1
- package/dist/rendering/PostProcessPass.js +136 -18
- package/dist/rendering/PostProcessPass.js.map +1 -1
- package/dist/rendering/PrimitiveSubmissionAudit.d.ts +195 -0
- package/dist/rendering/PrimitiveSubmissionAudit.d.ts.map +1 -0
- package/dist/rendering/PrimitiveSubmissionAudit.js +280 -0
- package/dist/rendering/PrimitiveSubmissionAudit.js.map +1 -0
- package/dist/rendering/ProductTurntableFixtures.d.ts.map +1 -1
- package/dist/rendering/ProductTurntableFixtures.js +93 -13
- package/dist/rendering/ProductTurntableFixtures.js.map +1 -1
- package/dist/rendering/ReflectionProbe.d.ts +59 -0
- package/dist/rendering/ReflectionProbe.d.ts.map +1 -1
- package/dist/rendering/ReflectionProbe.js +224 -0
- package/dist/rendering/ReflectionProbe.js.map +1 -1
- package/dist/rendering/ReflectionSurfaces.d.ts +4 -2
- package/dist/rendering/ReflectionSurfaces.d.ts.map +1 -1
- package/dist/rendering/ReflectionSurfaces.js +13 -8
- package/dist/rendering/ReflectionSurfaces.js.map +1 -1
- package/dist/rendering/RenderBackend.d.ts +1 -1
- package/dist/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/rendering/RenderBackend.js +5 -1
- package/dist/rendering/RenderBackend.js.map +1 -1
- package/dist/rendering/RenderDevice.d.ts +13 -2
- package/dist/rendering/RenderDevice.d.ts.map +1 -1
- package/dist/rendering/RenderDevice.js +5 -2
- package/dist/rendering/RenderDevice.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +41 -1
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +406 -61
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/RendererPostprocessPlan.d.ts +10 -3
- package/dist/rendering/RendererPostprocessPlan.d.ts.map +1 -1
- package/dist/rendering/RendererPostprocessPlan.js +25 -5
- package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
- package/dist/rendering/RendererVisualPipelineReport.d.ts +3 -2
- package/dist/rendering/RendererVisualPipelineReport.d.ts.map +1 -1
- package/dist/rendering/RendererVisualPipelineReport.js +2 -0
- package/dist/rendering/RendererVisualPipelineReport.js.map +1 -1
- package/dist/rendering/ScreenSpaceLineMaterial.d.ts +34 -0
- package/dist/rendering/ScreenSpaceLineMaterial.d.ts.map +1 -0
- package/dist/rendering/ScreenSpaceLineMaterial.js +93 -0
- package/dist/rendering/ScreenSpaceLineMaterial.js.map +1 -0
- package/dist/rendering/ShaderChunks.d.ts +7 -0
- package/dist/rendering/ShaderChunks.d.ts.map +1 -1
- package/dist/rendering/ShaderChunks.js +137 -0
- package/dist/rendering/ShaderChunks.js.map +1 -1
- package/dist/rendering/ShaderLibrary.d.ts +17 -0
- package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/ShaderLibrary.js +940 -98
- package/dist/rendering/ShaderLibrary.js.map +1 -1
- package/dist/rendering/ShadowPass.d.ts +10 -0
- package/dist/rendering/ShadowPass.d.ts.map +1 -1
- package/dist/rendering/ShadowPass.js +8 -1
- package/dist/rendering/ShadowPass.js.map +1 -1
- package/dist/rendering/SkinnedLitMaterial.d.ts +6 -0
- package/dist/rendering/SkinnedLitMaterial.d.ts.map +1 -1
- package/dist/rendering/SkinnedLitMaterial.js +22 -8
- package/dist/rendering/SkinnedLitMaterial.js.map +1 -1
- package/dist/rendering/SkinnedUnlitMaterial.d.ts +8 -0
- package/dist/rendering/SkinnedUnlitMaterial.d.ts.map +1 -1
- package/dist/rendering/SkinnedUnlitMaterial.js +26 -9
- package/dist/rendering/SkinnedUnlitMaterial.js.map +1 -1
- package/dist/rendering/SpecularPrefilter.d.ts +42 -0
- package/dist/rendering/SpecularPrefilter.d.ts.map +1 -0
- package/dist/rendering/SpecularPrefilter.js +480 -0
- package/dist/rendering/SpecularPrefilter.js.map +1 -0
- package/dist/rendering/TerrainFixtures.d.ts +24 -0
- package/dist/rendering/TerrainFixtures.d.ts.map +1 -1
- package/dist/rendering/TerrainFixtures.js +96 -0
- package/dist/rendering/TerrainFixtures.js.map +1 -1
- package/dist/rendering/Texture.d.ts +7 -0
- package/dist/rendering/Texture.d.ts.map +1 -1
- package/dist/rendering/Texture.js +9 -0
- package/dist/rendering/Texture.js.map +1 -1
- package/dist/rendering/VertexFormat.d.ts +34 -1
- package/dist/rendering/VertexFormat.d.ts.map +1 -1
- package/dist/rendering/VertexFormat.js +61 -0
- package/dist/rendering/VertexFormat.js.map +1 -1
- package/dist/rendering/WebGL2Device.d.ts +48 -0
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +1298 -44
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/WebGPUDevice.d.ts +7 -2
- package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
- package/dist/rendering/WebGPUDevice.js +111 -17
- package/dist/rendering/WebGPUDevice.js.map +1 -1
- package/dist/rendering/WebGPUSkinningLimits.d.ts +14 -0
- package/dist/rendering/WebGPUSkinningLimits.d.ts.map +1 -0
- package/dist/rendering/WebGPUSkinningLimits.js +14 -0
- package/dist/rendering/WebGPUSkinningLimits.js.map +1 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts +19 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.js +13 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.js.map +1 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.d.ts +36 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.js +23 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.js.map +1 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.d.ts +130 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.js +303 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.js.map +1 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.d.ts +28 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.js +39 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.js.map +1 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts +79 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts.map +1 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.js +88 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.js.map +1 -0
- package/dist/rendering/cartoon/index.d.ts +6 -0
- package/dist/rendering/cartoon/index.d.ts.map +1 -0
- package/dist/rendering/cartoon/index.js +6 -0
- package/dist/rendering/cartoon/index.js.map +1 -0
- package/dist/rendering/index.d.ts +26 -15
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +15 -9
- package/dist/rendering/index.js.map +1 -1
- package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts +93 -0
- package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts.map +1 -0
- package/dist/rendering/postprocess/NativeLdrEffectLuts.js +202 -0
- package/dist/rendering/postprocess/NativeLdrEffectLuts.js.map +1 -0
- package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/rendering/production-runtime/PBRHDRPipeline.js +3 -0
- package/dist/rendering/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts +1 -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/ProductionWebGL2Renderer.d.ts.map +1 -1
- package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js +5 -3
- 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 +9 -5
- package/dist/rendering/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/rendering/production-runtime/TransmissionBackdropCapture.d.ts +5 -0
- package/dist/rendering/production-runtime/TransmissionBackdropCapture.d.ts.map +1 -1
- package/dist/rendering/production-runtime/TransmissionBackdropCapture.js +40 -0
- package/dist/rendering/production-runtime/TransmissionBackdropCapture.js.map +1 -1
- package/dist/rendering/production-runtime/environment/HDRLoader.d.ts +6 -0
- package/dist/rendering/production-runtime/environment/HDRLoader.d.ts.map +1 -1
- package/dist/rendering/production-runtime/environment/HDRLoader.js +19 -0
- package/dist/rendering/production-runtime/environment/HDRLoader.js.map +1 -1
- package/dist/rendering/production-runtime/index.d.ts +3 -1
- package/dist/rendering/production-runtime/index.d.ts.map +1 -1
- package/dist/rendering/production-runtime/index.js +1 -0
- package/dist/rendering/production-runtime/index.js.map +1 -1
- package/dist/scene/Light.d.ts +1 -1
- package/dist/scene/Light.d.ts.map +1 -1
- package/dist/scene/RectAreaLight.d.ts +22 -0
- package/dist/scene/RectAreaLight.d.ts.map +1 -0
- package/dist/scene/RectAreaLight.js +46 -0
- package/dist/scene/RectAreaLight.js.map +1 -0
- package/dist/scene/Scene.d.ts +6 -1
- package/dist/scene/Scene.d.ts.map +1 -1
- package/dist/scene/Scene.js +8 -1
- package/dist/scene/Scene.js.map +1 -1
- package/dist/scene/SceneSerializer.d.ts +3 -1
- package/dist/scene/SceneSerializer.d.ts.map +1 -1
- package/dist/scene/SceneSerializer.js +14 -7
- package/dist/scene/SceneSerializer.js.map +1 -1
- package/dist/scene/index.d.ts +1 -0
- package/dist/scene/index.d.ts.map +1 -1
- package/dist/scene/index.js +1 -0
- package/dist/scene/index.js.map +1 -1
- package/dist/scripting/CartoonNodeCategories.d.ts +3 -0
- package/dist/scripting/CartoonNodeCategories.d.ts.map +1 -0
- package/dist/scripting/CartoonNodeCategories.js +9 -0
- package/dist/scripting/CartoonNodeCategories.js.map +1 -0
- package/dist/scripting/CartoonVisualNodes.d.ts +3 -0
- package/dist/scripting/CartoonVisualNodes.d.ts.map +1 -0
- package/dist/scripting/CartoonVisualNodes.js +41 -0
- package/dist/scripting/CartoonVisualNodes.js.map +1 -0
- package/package.json +131 -114
- package/templates/production-asset-inspector/README.md +5 -0
- package/templates/production-asset-inspector/asset-manifest.json +9 -0
- package/templates/production-asset-inspector/index.html +2 -0
- package/templates/production-asset-inspector/package.json +17 -0
- package/templates/production-asset-inspector/src/main.ts +16 -0
- package/templates/production-material-studio/README.md +5 -0
- package/templates/production-material-studio/asset-manifest.json +9 -0
- package/templates/production-material-studio/index.html +2 -0
- package/templates/production-material-studio/package.json +17 -0
- package/templates/production-material-studio/src/main.ts +16 -0
- package/templates/production-product-configurator/README.md +5 -0
- package/templates/production-product-configurator/asset-manifest.json +9 -0
- package/templates/production-product-configurator/index.html +2 -0
- package/templates/production-product-configurator/package.json +17 -0
- package/templates/production-product-configurator/src/main.ts +16 -0
- package/templates/production-product-viewer/README.md +7 -0
- package/templates/production-product-viewer/asset-manifest.json +8 -0
- package/templates/production-product-viewer/index.html +26 -0
- package/templates/production-product-viewer/package.json +17 -0
- package/templates/production-product-viewer/src/main.ts +70 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable frame-based combat model: frame data, spacing and a credible AI.
|
|
3
|
+
*
|
|
4
|
+
* ## The defects this addresses
|
|
5
|
+
*
|
|
6
|
+
* Aura Clash's attacks were reported as unrealistic, with weak spacing, limited
|
|
7
|
+
* momentum, and animations that do not correspond convincingly to hits. Converting
|
|
8
|
+
* the shipped move table to frames at 60fps shows why:
|
|
9
|
+
*
|
|
10
|
+
* | move | startup | active | recovery |
|
|
11
|
+
* | ------- | ------- | ------ | -------- |
|
|
12
|
+
* | light | 4 | **12** | **4** |
|
|
13
|
+
* | heavy | 6 | **17** | **5** |
|
|
14
|
+
* | special | 5 | **32** | **4** |
|
|
15
|
+
*
|
|
16
|
+
* Real fighting-game frame data is the opposite shape: a short active window (2-5
|
|
17
|
+
* frames) and a long recovery (10-30 frames). Aura Clash's active windows are 3-8x
|
|
18
|
+
* too long and its recoveries 3-6x too short, which has three consequences:
|
|
19
|
+
*
|
|
20
|
+
* 1. **Hits do not correspond to the animation.** A 32-frame active window on the
|
|
21
|
+
* special means the hitbox is live for over half a second, so damage lands at
|
|
22
|
+
* moments that look nothing like contact -- the reported "attack dealing damage
|
|
23
|
+
* before contact".
|
|
24
|
+
* 2. **No spacing game.** With a 12-frame active window and a 4-frame recovery, an
|
|
25
|
+
* attack is nearly always safe. Whiffing costs almost nothing, so there is no
|
|
26
|
+
* reason to respect range and no punish window to aim for. That is precisely
|
|
27
|
+
* "weak spacing".
|
|
28
|
+
* 3. **No trades or momentum.** Blockstun and hitstun cannot create meaningful
|
|
29
|
+
* advantage when every move recovers in four frames.
|
|
30
|
+
*
|
|
31
|
+
* The engine defect is that nothing validated frame data as frame data. A move table
|
|
32
|
+
* could declare any startup/active/recovery split and no check compared it against the
|
|
33
|
+
* shape that makes a combat system readable.
|
|
34
|
+
*
|
|
35
|
+
* This module adds that check ({@link validateCombatFrameData}), a solver that derives
|
|
36
|
+
* balanced frame data from an intended move role ({@link solveCombatFrameData}), and a
|
|
37
|
+
* reactive AI ({@link createCombatAi}) that behaves like an opponent: it respects
|
|
38
|
+
* range, reacts with a delay, blocks what it sees, and punishes what it can.
|
|
39
|
+
*
|
|
40
|
+
* Pure and dependency-free.
|
|
41
|
+
*/
|
|
42
|
+
/** Frame advantage for a move. */
|
|
43
|
+
export function combatFrameAdvantage(move) {
|
|
44
|
+
return {
|
|
45
|
+
id: move.id,
|
|
46
|
+
onHit: move.hitstun - move.recovery,
|
|
47
|
+
onBlock: move.blockstun - move.recovery,
|
|
48
|
+
whiffPunishWindow: move.recovery,
|
|
49
|
+
totalFrames: move.startup + move.active + move.recovery
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validate a move table as frame data.
|
|
54
|
+
*
|
|
55
|
+
* This is the check that did not exist. It fails a table whose active windows are so
|
|
56
|
+
* long that damage cannot correspond to the animation, and one whose recoveries are so
|
|
57
|
+
* short that whiffing carries no risk.
|
|
58
|
+
*/
|
|
59
|
+
export function validateCombatFrameData(moves, limits = {}) {
|
|
60
|
+
const maxActive = limits.maxActiveFrames ?? 6;
|
|
61
|
+
const minActive = limits.minActiveFrames ?? 2;
|
|
62
|
+
const minRecoveryRatio = limits.minRecoveryToActiveRatio ?? 2;
|
|
63
|
+
const maxOnBlock = limits.maxOnBlock ?? 2;
|
|
64
|
+
const minWhiffWindow = limits.minWhiffPunishWindow ?? 8;
|
|
65
|
+
const minHitstop = limits.minHitstop ?? 2;
|
|
66
|
+
const checks = [];
|
|
67
|
+
const annotated = moves.map((move) => ({ ...move, advantage: combatFrameAdvantage(move) }));
|
|
68
|
+
for (const move of annotated) {
|
|
69
|
+
checks.push({
|
|
70
|
+
id: "active-window-readable",
|
|
71
|
+
moveId: move.id,
|
|
72
|
+
description: `active window must be ${minActive}-${maxActive} frames so damage corresponds to the animation`,
|
|
73
|
+
passes: move.active >= minActive && move.active <= maxActive,
|
|
74
|
+
detail: `${move.active} active frames`
|
|
75
|
+
});
|
|
76
|
+
checks.push({
|
|
77
|
+
id: "recovery-creates-risk",
|
|
78
|
+
moveId: move.id,
|
|
79
|
+
description: `recovery must be at least ${minRecoveryRatio}x the active window so whiffing is punishable`,
|
|
80
|
+
passes: move.active <= 0 || move.recovery >= move.active * minRecoveryRatio,
|
|
81
|
+
detail: `recovery ${move.recovery} vs active ${move.active} (ratio ${round(move.active > 0 ? move.recovery / move.active : Number.POSITIVE_INFINITY)})`
|
|
82
|
+
});
|
|
83
|
+
checks.push({
|
|
84
|
+
id: "not-safe-on-block",
|
|
85
|
+
moveId: move.id,
|
|
86
|
+
description: `frame advantage on block must not exceed +${maxOnBlock}, or the move carries no risk`,
|
|
87
|
+
passes: move.advantage.onBlock <= maxOnBlock,
|
|
88
|
+
detail: `${move.advantage.onBlock >= 0 ? "+" : ""}${move.advantage.onBlock} on block`
|
|
89
|
+
});
|
|
90
|
+
checks.push({
|
|
91
|
+
id: "whiff-punishable",
|
|
92
|
+
moveId: move.id,
|
|
93
|
+
description: `a whiff must leave at least ${minWhiffWindow} frames of punish window`,
|
|
94
|
+
passes: move.advantage.whiffPunishWindow >= minWhiffWindow,
|
|
95
|
+
detail: `${move.advantage.whiffPunishWindow} frame punish window`
|
|
96
|
+
});
|
|
97
|
+
checks.push({
|
|
98
|
+
id: "hitstop-sells-impact",
|
|
99
|
+
moveId: move.id,
|
|
100
|
+
description: `hitstop must be at least ${minHitstop} frames so contact reads as impact`,
|
|
101
|
+
passes: move.hitstop >= minHitstop,
|
|
102
|
+
detail: `${move.hitstop} frames of hitstop`
|
|
103
|
+
});
|
|
104
|
+
checks.push({
|
|
105
|
+
id: "startup-before-active",
|
|
106
|
+
moveId: move.id,
|
|
107
|
+
description: "a move must have startup frames, so an attack telegraphs before it can hit",
|
|
108
|
+
passes: move.startup >= 1,
|
|
109
|
+
detail: `${move.startup} startup frames`
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Table-level: stronger moves must be slower, or there is no reason to use a jab.
|
|
113
|
+
const byDamage = [...annotated].sort((a, b) => a.damage - b.damage);
|
|
114
|
+
for (let index = 0; index < byDamage.length - 1; index += 1) {
|
|
115
|
+
const weaker = byDamage[index];
|
|
116
|
+
const stronger = byDamage[index + 1];
|
|
117
|
+
if (weaker.damage === stronger.damage)
|
|
118
|
+
continue;
|
|
119
|
+
checks.push({
|
|
120
|
+
id: "damage-costs-speed",
|
|
121
|
+
moveId: `${weaker.id}->${stronger.id}`,
|
|
122
|
+
description: "a stronger move must be slower to start or riskier on block",
|
|
123
|
+
passes: stronger.startup >= weaker.startup || stronger.advantage.onBlock <= weaker.advantage.onBlock,
|
|
124
|
+
detail: `${weaker.id} ${weaker.damage}dmg/${weaker.startup}f vs ${stronger.id} ${stronger.damage}dmg/${stronger.startup}f`
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
schema: "aura3d-combat-frame-data/1.0",
|
|
129
|
+
moves: annotated,
|
|
130
|
+
checks,
|
|
131
|
+
passes: checks.every((check) => check.passes)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const ROLE_PROFILES = {
|
|
135
|
+
/*
|
|
136
|
+
* Frame data shaped like a real fighting game.
|
|
137
|
+
*
|
|
138
|
+
* A jab is fast and nearly neutral on block, so it is the safe poke. Heavier moves
|
|
139
|
+
* start slower, recover longer and are clearly minus on block, so using them is a
|
|
140
|
+
* decision rather than a default. Every active window is short, which is what makes a
|
|
141
|
+
* hit correspond to the moment of contact.
|
|
142
|
+
*/
|
|
143
|
+
jab: { startup: 3, active: 2, recovery: 7, hitstun: 12, blockstun: 8, hitstop: 3, knockback: 0.18 },
|
|
144
|
+
light: { startup: 5, active: 3, recovery: 10, hitstun: 15, blockstun: 10, hitstop: 4, knockback: 0.28 },
|
|
145
|
+
medium: { startup: 8, active: 3, recovery: 15, hitstun: 19, blockstun: 12, hitstop: 5, knockback: 0.42 },
|
|
146
|
+
heavy: { startup: 12, active: 4, recovery: 22, hitstun: 26, blockstun: 15, hitstop: 7, knockback: 0.7 },
|
|
147
|
+
launcher: { startup: 11, active: 3, recovery: 26, hitstun: 34, blockstun: 14, hitstop: 6, knockback: 0.55 },
|
|
148
|
+
special: { startup: 14, active: 5, recovery: 28, hitstun: 30, blockstun: 18, hitstop: 9, knockback: 1.05 }
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Derive balanced frame data from a move's intended role.
|
|
152
|
+
*
|
|
153
|
+
* Reach adds startup, because a longer poke should be slower to commit to. Damage adds
|
|
154
|
+
* recovery, so a big hit is a bigger risk. Neither is a free parameter.
|
|
155
|
+
*/
|
|
156
|
+
export function solveCombatFrameData(request, options = {}) {
|
|
157
|
+
const profile = ROLE_PROFILES[request.role];
|
|
158
|
+
const referenceRange = Math.max(0.1, options.referenceRange ?? 1.4);
|
|
159
|
+
const referenceDamage = Math.max(1, options.referenceDamage ?? 10);
|
|
160
|
+
// Reach beyond the reference costs startup; damage beyond it costs recovery.
|
|
161
|
+
const rangePenalty = Math.max(0, request.range / referenceRange - 1);
|
|
162
|
+
const damagePenalty = Math.max(0, request.damage / referenceDamage - 1);
|
|
163
|
+
return {
|
|
164
|
+
id: request.id,
|
|
165
|
+
startup: Math.round(profile.startup * (1 + rangePenalty * 0.4)),
|
|
166
|
+
active: profile.active,
|
|
167
|
+
recovery: Math.round(profile.recovery * (1 + damagePenalty * 0.3)),
|
|
168
|
+
hitstun: profile.hitstun,
|
|
169
|
+
blockstun: profile.blockstun,
|
|
170
|
+
range: round(request.range),
|
|
171
|
+
damage: request.damage,
|
|
172
|
+
knockback: round(profile.knockback * (1 + damagePenalty * 0.2)),
|
|
173
|
+
hitstop: profile.hitstop
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const AGGRESSION_PROFILES = {
|
|
177
|
+
defensive: { attackChance: 0.35, blockChance: 0.9, spacingTolerance: 0.3 },
|
|
178
|
+
balanced: { attackChance: 0.6, blockChance: 0.72, spacingTolerance: 0.2 },
|
|
179
|
+
aggressive: { attackChance: 0.85, blockChance: 0.5, spacingTolerance: 0.12 }
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Create a reactive combat AI.
|
|
183
|
+
*
|
|
184
|
+
* Behaves like an opponent rather than a timer: it holds a preferred range, reacts to a
|
|
185
|
+
* telegraphed attack after a delay, blocks what it has had time to see, and punishes a
|
|
186
|
+
* move whose recovery leaves a window. Deterministic for a given seed.
|
|
187
|
+
*/
|
|
188
|
+
export function createCombatAi(config) {
|
|
189
|
+
const moves = new Map(config.moves.map((move) => [move.id, move]));
|
|
190
|
+
const aggression = config.aggression ?? "balanced";
|
|
191
|
+
const profile = AGGRESSION_PROFILES[aggression];
|
|
192
|
+
const reactionFrames = Math.max(0, config.reactionFrames ?? 14);
|
|
193
|
+
const cooldownFrames = Math.max(0, config.cooldownFrames ?? 18);
|
|
194
|
+
// The fastest move is the punish tool; the longest-reaching is the poke.
|
|
195
|
+
const fastest = [...moves.values()].sort((a, b) => a.startup - b.startup)[0];
|
|
196
|
+
const longest = [...moves.values()].sort((a, b) => b.range - a.range)[0];
|
|
197
|
+
/*
|
|
198
|
+
* Preferred range sits just *inside* the AI's longest poke.
|
|
199
|
+
*
|
|
200
|
+
* Setting it outside its own reach looked like good spacing discipline and was in fact
|
|
201
|
+
* a deadlock: the AI held a distance from which nothing could connect, so it never
|
|
202
|
+
* attacked and only ever adjusted position. Real fighting-game spacing is to hold the
|
|
203
|
+
* edge of your own longest threat -- close enough to poke, far enough that the
|
|
204
|
+
* opponent must commit to reach you.
|
|
205
|
+
*/
|
|
206
|
+
const preferredRange = config.preferredRange ?? (longest ? longest.range * 0.92 : 1.5);
|
|
207
|
+
let seenOpponentMove;
|
|
208
|
+
let framesSinceSeen = 0;
|
|
209
|
+
let cooldown = 0;
|
|
210
|
+
let decisionCount = 0;
|
|
211
|
+
let punishAttempts = 0;
|
|
212
|
+
let blockAttempts = 0;
|
|
213
|
+
let random = (config.seed ?? 1) >>> 0 || 1;
|
|
214
|
+
const nextRandom = () => {
|
|
215
|
+
random ^= random << 13;
|
|
216
|
+
random ^= random >>> 17;
|
|
217
|
+
random ^= random << 5;
|
|
218
|
+
return (random >>> 0) / 0xffffffff;
|
|
219
|
+
};
|
|
220
|
+
let lastDecision = { moveId: undefined, block: false, approach: 0, reason: "initial" };
|
|
221
|
+
return {
|
|
222
|
+
kind: "aura-combat-ai",
|
|
223
|
+
decide(observation) {
|
|
224
|
+
decisionCount += 1;
|
|
225
|
+
cooldown = Math.max(0, cooldown - 1);
|
|
226
|
+
// Track how long the opponent's current move has been visible, so reaction is
|
|
227
|
+
// delayed rather than instant.
|
|
228
|
+
if (observation.opponentMoveId !== seenOpponentMove) {
|
|
229
|
+
seenOpponentMove = observation.opponentMoveId;
|
|
230
|
+
framesSinceSeen = 0;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
framesSinceSeen += 1;
|
|
234
|
+
}
|
|
235
|
+
const reacted = seenOpponentMove !== undefined && framesSinceSeen >= reactionFrames;
|
|
236
|
+
const decide = (decision) => {
|
|
237
|
+
lastDecision = decision;
|
|
238
|
+
return decision;
|
|
239
|
+
};
|
|
240
|
+
// Stunned or mid-move: nothing to decide.
|
|
241
|
+
if (observation.stunned === true || (observation.ownRecoveryFrames ?? 0) > 0) {
|
|
242
|
+
return decide({ moveId: undefined, block: false, approach: 0, reason: "recovering" });
|
|
243
|
+
}
|
|
244
|
+
const opponentMove = observation.opponentMoveId ? moves.get(observation.opponentMoveId) : undefined;
|
|
245
|
+
/*
|
|
246
|
+
* Punish. When the opponent's move is in its recovery and the AI's fastest move
|
|
247
|
+
* can start and connect inside that window, take it. This is the behaviour that
|
|
248
|
+
* makes spacing matter, and it is only possible because recovery frames exist.
|
|
249
|
+
*/
|
|
250
|
+
if (reacted && opponentMove && fastest && cooldown <= 0) {
|
|
251
|
+
const opponentFrame = observation.opponentMoveFrame ?? 0;
|
|
252
|
+
const recoveryStart = opponentMove.startup + opponentMove.active;
|
|
253
|
+
const framesLeftInRecovery = recoveryStart + opponentMove.recovery - opponentFrame;
|
|
254
|
+
const inRecovery = opponentFrame >= recoveryStart && framesLeftInRecovery > 0;
|
|
255
|
+
if (inRecovery && framesLeftInRecovery > fastest.startup && observation.distance <= fastest.range) {
|
|
256
|
+
punishAttempts += 1;
|
|
257
|
+
cooldown = cooldownFrames;
|
|
258
|
+
return decide({ moveId: fastest.id, block: false, approach: 0, reason: "punish-recovery" });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/*
|
|
262
|
+
* Block. Only after the reaction delay, and only while the attack could still
|
|
263
|
+
* reach: blocking a move that has already recovered is not defence, it is a tell
|
|
264
|
+
* that the AI is reading state it should not have.
|
|
265
|
+
*/
|
|
266
|
+
if (reacted && opponentMove) {
|
|
267
|
+
const opponentFrame = observation.opponentMoveFrame ?? 0;
|
|
268
|
+
const threatening = opponentFrame < opponentMove.startup + opponentMove.active;
|
|
269
|
+
if (threatening && observation.distance <= opponentMove.range * 1.15 && nextRandom() < profile.blockChance) {
|
|
270
|
+
blockAttempts += 1;
|
|
271
|
+
return decide({ moveId: undefined, block: true, approach: 0, reason: "block-incoming" });
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Spacing. Hold the preferred range; step in to attack, step out when crowded.
|
|
275
|
+
const rangeError = observation.distance - preferredRange;
|
|
276
|
+
if (Math.abs(rangeError) > profile.spacingTolerance) {
|
|
277
|
+
const approach = rangeError > 0 ? 1 : -1;
|
|
278
|
+
// Attack on the way in when a move actually reaches.
|
|
279
|
+
const reachable = [...moves.values()].filter((move) => observation.distance <= move.range);
|
|
280
|
+
if (approach === 1 && reachable.length > 0 && cooldown <= 0 && nextRandom() < profile.attackChance) {
|
|
281
|
+
const chosen = reachable[Math.floor(nextRandom() * reachable.length)] ?? reachable[0];
|
|
282
|
+
cooldown = cooldownFrames;
|
|
283
|
+
return decide({ moveId: chosen.id, block: false, approach: 0, reason: "attack-in-range" });
|
|
284
|
+
}
|
|
285
|
+
return decide({ moveId: undefined, block: false, approach, reason: approach > 0 ? "close-distance" : "create-space" });
|
|
286
|
+
}
|
|
287
|
+
// At preferred range with nothing to react to: poke when the odds are taken.
|
|
288
|
+
if (cooldown <= 0 && nextRandom() < profile.attackChance) {
|
|
289
|
+
const reachable = [...moves.values()].filter((move) => observation.distance <= move.range);
|
|
290
|
+
if (reachable.length > 0) {
|
|
291
|
+
const chosen = reachable[Math.floor(nextRandom() * reachable.length)] ?? reachable[0];
|
|
292
|
+
cooldown = cooldownFrames;
|
|
293
|
+
return decide({ moveId: chosen.id, block: false, approach: 0, reason: "poke-at-range" });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return decide({ moveId: undefined, block: false, approach: 0, reason: "hold-range" });
|
|
297
|
+
},
|
|
298
|
+
reset() {
|
|
299
|
+
seenOpponentMove = undefined;
|
|
300
|
+
framesSinceSeen = 0;
|
|
301
|
+
cooldown = 0;
|
|
302
|
+
decisionCount = 0;
|
|
303
|
+
punishAttempts = 0;
|
|
304
|
+
blockAttempts = 0;
|
|
305
|
+
random = (config.seed ?? 1) >>> 0 || 1;
|
|
306
|
+
lastDecision = { moveId: undefined, block: false, approach: 0, reason: "reset" };
|
|
307
|
+
},
|
|
308
|
+
telemetry() {
|
|
309
|
+
return {
|
|
310
|
+
reactionFrames,
|
|
311
|
+
preferredRange: round(preferredRange),
|
|
312
|
+
aggression,
|
|
313
|
+
decisionCount,
|
|
314
|
+
punishAttempts,
|
|
315
|
+
blockAttempts,
|
|
316
|
+
lastDecision
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function round(value) {
|
|
322
|
+
return Math.round(value * 1e4) / 1e4;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=CombatFrameData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CombatFrameData.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/CombatFrameData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable object focus and selection feedback.
|
|
3
|
+
*
|
|
4
|
+
* ## The defect this replaces
|
|
5
|
+
*
|
|
6
|
+
* The product configurator built its focus indicator by hand:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* primitives.torus({ ... }).position(...p).rotate(1.5708, 0, 0).scale([1.22, 0.08, 0.78])
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Aura3D's torus primitive is generated in local XY -- the ring lies in the XY
|
|
13
|
+
* plane with its tube thin on **Z** (`createTorusGeometry` sweeps `cos u, sin u`
|
|
14
|
+
* into X/Y and puts the tube's `sin v` on Z). Scaling `[1.22, 0.08, 0.78]`
|
|
15
|
+
* therefore squashes the ring's own **Y radius** to 8%, turning the circle into a
|
|
16
|
+
* flat horizontal sliver. The subsequent `rotate(pi/2, 0, 0)` tips that sliver
|
|
17
|
+
* into the ground plane, and it renders as the "random yellow/white bar" the
|
|
18
|
+
* user reported. A working ring in the same codebase uses `[0.72, 0.72, 0.028]`
|
|
19
|
+
* -- equal X/Y radii, thin on Z -- which is why the two looked unrelated.
|
|
20
|
+
*
|
|
21
|
+
* Changing those three constants would have fixed one route and left the trap in
|
|
22
|
+
* place for every other. The real defects are: primitive local axes were not
|
|
23
|
+
* documented, and no reusable focus feedback existed, so every route invented
|
|
24
|
+
* its own indicator geometry.
|
|
25
|
+
*
|
|
26
|
+
* This module removes the need to know the torus axis convention at all. A route
|
|
27
|
+
* states intent -- focus this target, with a ring and a callout -- and gets
|
|
28
|
+
* correct indicator geometry for any target size, orientation, or nonuniform
|
|
29
|
+
* scale.
|
|
30
|
+
*
|
|
31
|
+
* Pure and dependency-free: it returns scene-node JSON and camera intent, so it
|
|
32
|
+
* is unit-testable without a renderer and reusable by any route or kit.
|
|
33
|
+
*/
|
|
34
|
+
import type { AuraColor, AuraSceneNode, AuraVec3 } from "./index.js";
|
|
35
|
+
import { type PlacedBounds, type SemanticRegion } from "./SpatialAnchoring.js";
|
|
36
|
+
/**
|
|
37
|
+
* Local-axis conventions for Aura3D primitives.
|
|
38
|
+
*
|
|
39
|
+
* Published so a route that must build custom geometry can do so correctly, and
|
|
40
|
+
* so the reason for the configurator defect is discoverable rather than folklore.
|
|
41
|
+
*/
|
|
42
|
+
export declare const AURA_PRIMITIVE_AXES: {
|
|
43
|
+
/**
|
|
44
|
+
* A torus is a ring in the local XY plane. Its major radius spans X and Y
|
|
45
|
+
* equally; its tube thickness lies on Z. To thin a ring, scale **Z**. Scaling
|
|
46
|
+
* Y collapses the ring into a bar.
|
|
47
|
+
*/
|
|
48
|
+
readonly torus: {
|
|
49
|
+
readonly ringPlane: "xy";
|
|
50
|
+
readonly tubeAxis: "z";
|
|
51
|
+
readonly thinAxis: "z";
|
|
52
|
+
};
|
|
53
|
+
/** A cylinder's height runs along Y; its circular cross-section spans X and Z. */
|
|
54
|
+
readonly cylinder: {
|
|
55
|
+
readonly heightAxis: "y";
|
|
56
|
+
readonly crossSection: "xz";
|
|
57
|
+
readonly thinAxis: "y";
|
|
58
|
+
};
|
|
59
|
+
/** A plane lies in XZ with its normal on Y. */
|
|
60
|
+
readonly plane: {
|
|
61
|
+
readonly plane: "xz";
|
|
62
|
+
readonly normalAxis: "y";
|
|
63
|
+
readonly thinAxis: "y";
|
|
64
|
+
};
|
|
65
|
+
/** Boxes, spheres and capsules are axis-symmetric about their own extents. */
|
|
66
|
+
readonly box: {
|
|
67
|
+
readonly thinAxis: undefined;
|
|
68
|
+
};
|
|
69
|
+
readonly sphere: {
|
|
70
|
+
readonly thinAxis: undefined;
|
|
71
|
+
};
|
|
72
|
+
readonly capsule: {
|
|
73
|
+
readonly heightAxis: "y";
|
|
74
|
+
readonly thinAxis: undefined;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/** Visual treatments a focus indicator can apply. */
|
|
78
|
+
export type FocusIndicator = "ring" | "halo" | "bounding-box" | "outline" | "emissive-highlight";
|
|
79
|
+
export interface FocusTargetBounds {
|
|
80
|
+
/** World position of the target's centre. */
|
|
81
|
+
readonly center: AuraVec3;
|
|
82
|
+
/** World-space extents of the target. */
|
|
83
|
+
readonly size: AuraVec3;
|
|
84
|
+
/**
|
|
85
|
+
* Euler rotation of the target, radians. Indicator geometry inherits it so a
|
|
86
|
+
* rotated part gets a rotated indicator rather than an axis-aligned one.
|
|
87
|
+
*/
|
|
88
|
+
readonly rotation?: AuraVec3 | undefined;
|
|
89
|
+
}
|
|
90
|
+
export interface FocusTarget extends FocusTargetBounds {
|
|
91
|
+
readonly id: string;
|
|
92
|
+
/** Human-readable name used for the callout and accessibility text. */
|
|
93
|
+
readonly label?: string | undefined;
|
|
94
|
+
}
|
|
95
|
+
export interface FocusOptions {
|
|
96
|
+
/** Indicators to draw. Defaults to a ring plus a callout label. */
|
|
97
|
+
readonly indicators?: readonly FocusIndicator[] | undefined;
|
|
98
|
+
readonly color?: AuraColor | undefined;
|
|
99
|
+
/** Draw a callout label anchored to the target. Defaults to true. */
|
|
100
|
+
readonly callout?: boolean | undefined;
|
|
101
|
+
/** Text for the callout. Defaults to the target's label. */
|
|
102
|
+
readonly calloutText?: string | undefined;
|
|
103
|
+
/** Draw a leader line from the callout to the target. Defaults to true. */
|
|
104
|
+
readonly leaderLine?: boolean | undefined;
|
|
105
|
+
/** Dim non-focused geometry. Reported as intent; the route applies it. */
|
|
106
|
+
readonly dimOthers?: boolean | undefined;
|
|
107
|
+
/** Move the camera to frame the target. Defaults to true. */
|
|
108
|
+
readonly cameraFocus?: boolean | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Extra clearance between the indicator and the target surface, as a fraction
|
|
111
|
+
* of the target's largest extent. Defaults to 0.12 so a ring reads as
|
|
112
|
+
* surrounding the part rather than intersecting it.
|
|
113
|
+
*/
|
|
114
|
+
readonly clearance?: number | undefined;
|
|
115
|
+
/** Node-name prefix, so indicator nodes are identifiable in evidence. */
|
|
116
|
+
readonly namePrefix?: string | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Viewport aspect ratio, used only to size camera framing distance. Defaults
|
|
119
|
+
* to 16/9.
|
|
120
|
+
*/
|
|
121
|
+
readonly aspect?: number | undefined;
|
|
122
|
+
/** Mobile viewports need a wider frame; defaults to false. */
|
|
123
|
+
readonly compactViewport?: boolean | undefined;
|
|
124
|
+
}
|
|
125
|
+
export interface FocusCameraIntent {
|
|
126
|
+
readonly position: AuraVec3;
|
|
127
|
+
readonly target: AuraVec3;
|
|
128
|
+
readonly fov: number;
|
|
129
|
+
/** True when the target's bounds fit inside the frustum at this distance. */
|
|
130
|
+
readonly containsTarget: boolean;
|
|
131
|
+
}
|
|
132
|
+
export interface FocusResult {
|
|
133
|
+
readonly kind: "aura-focus-result";
|
|
134
|
+
readonly targetId: string;
|
|
135
|
+
/** Indicator geometry and labels to add to the scene. */
|
|
136
|
+
readonly nodes: readonly AuraSceneNode[];
|
|
137
|
+
readonly camera: FocusCameraIntent | undefined;
|
|
138
|
+
/** Set when `dimOthers` was requested, so the route can lower other materials. */
|
|
139
|
+
readonly dimOthers: boolean;
|
|
140
|
+
/** Machine-checkable statement that indicators surround their target. */
|
|
141
|
+
readonly invariants: FocusInvariantReport;
|
|
142
|
+
/** Screen-reader text describing the current selection. */
|
|
143
|
+
readonly accessibilityLabel: string;
|
|
144
|
+
}
|
|
145
|
+
export interface FocusInvariantReport {
|
|
146
|
+
readonly schema: "aura3d-focus-invariants/1.0";
|
|
147
|
+
readonly checks: readonly {
|
|
148
|
+
readonly id: string;
|
|
149
|
+
readonly description: string;
|
|
150
|
+
readonly passes: boolean;
|
|
151
|
+
readonly detail: string;
|
|
152
|
+
}[];
|
|
153
|
+
readonly passes: boolean;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Build focus feedback for a target.
|
|
157
|
+
*
|
|
158
|
+
* The ring is sized from the target's own extents and thinned on **Z**, the
|
|
159
|
+
* torus tube axis, then rotated to lie in the horizontal plane. Because the
|
|
160
|
+
* radius is uniform in the ring's own plane it stays a ring for any target
|
|
161
|
+
* aspect ratio -- which is what the flattened-bar defect got wrong.
|
|
162
|
+
*/
|
|
163
|
+
export declare function focusObject(target: FocusTarget, options?: FocusOptions): FocusResult;
|
|
164
|
+
/**
|
|
165
|
+
* Focus a named region of a subject rather than a standalone object.
|
|
166
|
+
*
|
|
167
|
+
* This is how a configurator focuses "the earcups" without knowing where the
|
|
168
|
+
* earcups are in world space: the region is normalized to the subject's bounds,
|
|
169
|
+
* so it follows the asset.
|
|
170
|
+
*/
|
|
171
|
+
export declare function focusSemanticRegion(subject: PlacedBounds, region: SemanticRegion, options?: FocusOptions): FocusResult;
|
|
172
|
+
/** Empty focus state: no indicators, no camera change, reset accessibility text. */
|
|
173
|
+
export declare function clearFocus(): FocusResult;
|
|
174
|
+
/**
|
|
175
|
+
* Camera pose that frames a target's bounds.
|
|
176
|
+
*
|
|
177
|
+
* Distance is derived from the vertical and horizontal half-angles so the whole
|
|
178
|
+
* target fits regardless of viewport aspect. A compact (mobile) viewport pulls
|
|
179
|
+
* back further because UI chrome takes vertical space.
|
|
180
|
+
*/
|
|
181
|
+
export declare function focusCameraIntent(center: AuraVec3, size: AuraVec3, options?: {
|
|
182
|
+
readonly aspect?: number | undefined;
|
|
183
|
+
readonly compactViewport?: boolean | undefined;
|
|
184
|
+
readonly fov?: number | undefined;
|
|
185
|
+
}): FocusCameraIntent;
|
|
186
|
+
//# sourceMappingURL=FocusSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FocusSelection.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/FocusSelection.ts"],"names":[],"mappings":"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"}
|