@woosh/meep-engine 3.3.0 → 3.4.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/editor/process/SymbolicDisplayProcess.js +106 -106
- package/editor/process/symbolic/{SoundEmitterSymbolicDisplay.js → AudioEmitterSymbolicDisplay.js} +67 -57
- package/package.json +94 -94
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +110 -102
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts +54 -0
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +10 -3
- package/src/engine/EntityCreator.d.ts +19 -11
- package/src/engine/EntityCreator.d.ts.map +1 -1
- package/src/engine/EntityCreator.js +116 -94
- package/src/engine/achievements/AchievementManager.d.ts.map +1 -1
- package/src/engine/achievements/AchievementManager.js +437 -433
- package/src/engine/animation/AnimatedActions.d.ts +6 -1
- package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
- package/src/engine/animation/AnimatedActions.js +111 -81
- package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
- package/src/engine/animation/AnimationUtils.js +234 -252
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +275 -269
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +26 -5
- package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +1 -1
- package/src/engine/ecs/util/hideEntityGracefully.js +196 -208
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts +3 -1
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.js +4 -2
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +536 -0
- package/src/engine/sound/SoundEngine.d.ts +2 -2
- package/src/engine/sound/SoundEngine.js +124 -124
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +20 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitter.js +25 -2
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +6 -6
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +338 -314
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +143 -0
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -0
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +191 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts +33 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +81 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +65 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +184 -0
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +999 -993
- package/src/engine/sound/sopra/README.md +644 -643
- package/src/engine/sound/sopra/SopraEngine.d.ts +2 -2
- package/src/engine/sound/sopra/SopraEngine.js +432 -432
- package/src/engine/sound/sopra/legacy/SoundAttenuationFunction.d.ts.map +1 -0
- package/src/engine/sound/{ecs → sopra/legacy}/SoundController.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/SoundController.d.ts.map +1 -0
- package/src/engine/sound/{ecs → sopra/legacy}/SoundController.js +176 -176
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitter.d.ts +11 -27
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -0
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitter.js +352 -382
- package/src/engine/sound/sopra/legacy/SoundEmitterFlags.d.ts.map +1 -0
- package/src/engine/sound/sopra/legacy/SoundEmitterSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.d.ts.map +1 -1
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundPanningModelType.d.ts.map +1 -0
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrack.d.ts +11 -55
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -0
- package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrack.js +278 -357
- package/src/engine/sound/sopra/legacy/SoundTrackFlags.d.ts.map +1 -0
- package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.d.ts +34 -0
- package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.d.ts.map +1 -0
- package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.js +279 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +122 -122
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +7 -1
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.js +10 -0
- package/src/shade/playground/add_random_meshes.d.ts +19 -3
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +132 -84
- package/src/shade/playground/bvh_repro/README.md +57 -0
- package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts +33 -0
- package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts.map +1 -0
- package/src/shade/playground/bvh_repro/bvh_repro_device.js +90 -0
- package/src/shade/playground/bvh_repro/index.html +124 -0
- package/src/shade/playground/bvh_repro/main.d.ts.map +1 -0
- package/src/shade/playground/bvh_repro/main.js +254 -0
- package/src/shade/playground/load_default_environment.d.ts +10 -1
- package/src/shade/playground/load_default_environment.d.ts.map +1 -1
- package/src/shade/playground/load_default_environment.js +44 -20
- package/src/shade/playground/make_playground_asset_manager.d.ts +16 -0
- package/src/shade/playground/make_playground_asset_manager.d.ts.map +1 -0
- package/src/shade/playground/make_playground_asset_manager.js +33 -0
- package/src/shade/playground/skinned_blas_refit/README.md +103 -0
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +47 -0
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/add_floor.js +71 -0
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts +28 -0
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +745 -0
- package/src/shade/playground/skinned_blas_refit/flat_environment.d.ts +30 -0
- package/src/shade/playground/skinned_blas_refit/flat_environment.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/flat_environment.js +67 -0
- package/src/shade/playground/skinned_blas_refit/index.html +168 -0
- package/src/shade/playground/skinned_blas_refit/main.d.ts +8 -0
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/main.js +502 -0
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +81 -0
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/place_character.js +116 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +21 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +104 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts +23 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +94 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +26 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +134 -0
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +40 -0
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +135 -0
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts +31 -0
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +240 -0
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +20 -0
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -0
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +50 -0
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +366 -0
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +17 -0
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -0
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -0
- package/src/shade/playground/sponza_path_trace/README.md +57 -0
- package/src/shade/playground/sponza_path_trace/index.html +164 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts +8 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -0
- package/src/shade/playground/sponza_path_trace/main.js +363 -0
- package/src/shade/renderer/Renderer.d.ts +16 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +5 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +28 -3
- package/src/shade/renderer/animation/Skin.d.ts +9 -7
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +9 -7
- package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts +35 -0
- package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts.map +1 -0
- package/src/shade/renderer/animation/compute_skin_world_bounds.js +146 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +41 -0
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +65 -15
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +78 -7
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +302 -77
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +18 -6
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +19 -6
- package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.d.ts +51 -0
- package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.js +260 -0
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +23 -0
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +82 -0
- package/src/shade/renderer/geometry/bvh/record_blas_refit.d.ts +25 -0
- package/src/shade/renderer/geometry/bvh/record_blas_refit.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -0
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts +30 -0
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +122 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +55 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +45 -0
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -0
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +201 -0
- package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.d.ts +88 -0
- package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.js +233 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +18 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +38 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +16 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +79 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +16 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +49 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +43 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +24 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +143 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +17 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +83 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts +24 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +141 -0
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +422 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +1 -2
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +9 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +23 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +18 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +32 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.d.ts +27 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.js +41 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.js +74 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +71 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +197 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +16 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +85 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +192 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +188 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +16 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +235 -24
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +15 -3
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +57 -11
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/SkinnedMesh.js +111 -11
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts +22 -0
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -0
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +145 -0
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +18 -0
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -0
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +364 -0
- package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.d.ts +9 -1
- package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.js +29 -21
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.js +31 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.js +87 -39
- package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.js +40 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.js +9 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.js +52 -34
- package/src/shade/renderer/texture/virtual/README.md +255 -276
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -2
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +83 -0
- package/src/view/interaction/InterfaceCommand.d.ts +8 -8
- package/src/view/interaction/InterfaceCommand.d.ts.map +1 -1
- package/src/view/interaction/InterfaceCommand.js +146 -146
- package/src/view/interaction/createInterfaceCommandButton.d.ts.map +1 -1
- package/src/view/interaction/createInterfaceCommandButton.js +115 -124
- package/src/engine/ecs/components/Timer.d.ts +0 -50
- package/src/engine/ecs/components/Timer.d.ts.map +0 -1
- package/src/engine/ecs/components/Timer.js +0 -80
- package/src/engine/ecs/evaluation/PointFitnessBinary.d.ts +0 -22
- package/src/engine/ecs/evaluation/PointFitnessBinary.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/PointFitnessBinary.js +0 -33
- package/src/engine/ecs/evaluation/PointFitnessConstant.d.ts +0 -12
- package/src/engine/ecs/evaluation/PointFitnessConstant.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/PointFitnessConstant.js +0 -27
- package/src/engine/ecs/evaluation/PointFitnessFunction.d.ts +0 -17
- package/src/engine/ecs/evaluation/PointFitnessFunction.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/PointFitnessFunction.js +0 -20
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.d.ts +0 -12
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.js +0 -27
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.d.ts +0 -12
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.js +0 -28
- package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts +0 -50
- package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +0 -176
- package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.d.ts +0 -7
- package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.js +0 -68
- package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.d.ts +0 -7
- package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.js +0 -89
- package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.d.ts +0 -17
- package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.d.ts.map +0 -1
- package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +0 -60
- package/src/engine/ecs/systems/TimerSystem.d.ts +0 -10
- package/src/engine/ecs/systems/TimerSystem.d.ts.map +0 -1
- package/src/engine/ecs/systems/TimerSystem.js +0 -86
- package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts +0 -13
- package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts.map +0 -1
- package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.js +0 -14
- package/src/engine/graphics/StandardFrameBuffers.d.ts +0 -7
- package/src/engine/graphics/StandardFrameBuffers.d.ts.map +0 -1
- package/src/engine/graphics/StandardFrameBuffers.js +0 -9
- package/src/engine/graphics/copy_transform_to_threejs_object.d.ts +0 -7
- package/src/engine/graphics/copy_transform_to_threejs_object.d.ts.map +0 -1
- package/src/engine/graphics/copy_transform_to_threejs_object.js +0 -12
- package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts +0 -42
- package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/binding/LightBinding.js +0 -133
- package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts +0 -25
- package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.js +0 -90
- package/src/engine/graphics/ecs/light/binding/three/applyRotation.d.ts +0 -7
- package/src/engine/graphics/ecs/light/binding/three/applyRotation.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/binding/three/applyRotation.js +0 -24
- package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.d.ts +0 -7
- package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.js +0 -12
- package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.d.ts +0 -8
- package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.js +0 -41
- package/src/engine/graphics/ecs/light/shadow/LightShadow.d.ts +0 -4
- package/src/engine/graphics/ecs/light/shadow/LightShadow.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/LightShadow.js +0 -4
- package/src/engine/graphics/ecs/light/shadow/ShadowManager.d.ts +0 -27
- package/src/engine/graphics/ecs/light/shadow/ShadowManager.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/ShadowManager.js +0 -53
- package/src/engine/graphics/ecs/light/shadow/ShadowMap.d.ts +0 -8
- package/src/engine/graphics/ecs/light/shadow/ShadowMap.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/ShadowMap.js +0 -7
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts +0 -14
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.js +0 -62
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts +0 -30
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +0 -77
- package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.d.ts +0 -13
- package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.js +0 -43
- package/src/engine/graphics/ecs/light/three/light2type.d.ts +0 -8
- package/src/engine/graphics/ecs/light/three/light2type.d.ts.map +0 -1
- package/src/engine/graphics/ecs/light/three/light2type.js +0 -20
- package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.d.ts +0 -7
- package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.js +0 -13
- package/src/engine/graphics/particles/node-based/codegen/CodeContext.d.ts +0 -20
- package/src/engine/graphics/particles/node-based/codegen/CodeContext.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/CodeContext.js +0 -47
- package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.d.ts +0 -12
- package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.js +0 -19
- package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.d.ts +0 -18
- package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.js +0 -249
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.js +0 -8
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.js +0 -8
- package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts +0 -14
- package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.js +0 -20
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.js +0 -58
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.js +0 -44
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.js +0 -28
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.js +0 -28
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.js +0 -39
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.js +0 -124
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.d.ts +0 -3
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.js +0 -30
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.d.ts +0 -64
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.js +0 -131
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.d.ts +0 -32
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.js +0 -62
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.d.ts +0 -46
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.js +0 -272
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.d.ts +0 -28
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.js +0 -57
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.d.ts +0 -32
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.js +0 -55
- package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.d.ts +0 -34
- package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.js +0 -178
- package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/FloatConstant.js +0 -31
- package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.d.ts +0 -13
- package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.js +0 -13
- package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.js +0 -26
- package/src/engine/graphics/particles/node-based/nodes/ReadPosition.d.ts +0 -4
- package/src/engine/graphics/particles/node-based/nodes/ReadPosition.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/ReadPosition.js +0 -5
- package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts +0 -6
- package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.js +0 -14
- package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts +0 -37
- package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/ShaderNode.js +0 -73
- package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.js +0 -30
- package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.js +0 -30
- package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Split.js +0 -32
- package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts +0 -6
- package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.js +0 -15
- package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.js +0 -27
- package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.js +0 -25
- package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.js +0 -26
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.js +0 -25
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.js +0 -25
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.js +0 -25
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.js +0 -25
- package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.js +0 -39
- package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts +0 -39
- package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.js +0 -45
- package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.d.ts +0 -9
- package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.js +0 -10
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.d.ts +0 -13
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.js +0 -14
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts +0 -50
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.js +0 -47
- package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.d.ts +0 -51
- package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.js +0 -93
- package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.d.ts +0 -6
- package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.js +0 -23
- package/src/engine/graphics/particles/node-based/populateNodeRegistry.d.ts +0 -7
- package/src/engine/graphics/particles/node-based/populateNodeRegistry.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/populateNodeRegistry.js +0 -48
- package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.d.ts +0 -21
- package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.js +0 -35
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.d.ts +0 -20
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.js +0 -35
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.d.ts +0 -14
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.js +0 -17
- package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.d.ts +0 -5
- package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.js +0 -150
- package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.d.ts +0 -55
- package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.js +0 -105
- package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.d.ts +0 -49
- package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.js +0 -103
- package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.d.ts +0 -4
- package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.js +0 -6
- package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.d.ts +0 -83
- package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.js +0 -188
- package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.d.ts +0 -123
- package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.d.ts.map +0 -1
- package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.js +0 -415
- package/src/engine/graphics/render/buffer/FrameBufferManager.d.ts +0 -71
- package/src/engine/graphics/render/buffer/FrameBufferManager.d.ts.map +0 -1
- package/src/engine/graphics/render/buffer/FrameBufferManager.js +0 -229
- package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.d.ts +0 -22
- package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.d.ts.map +0 -1
- package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.js +0 -84
- package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts +0 -33
- package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/LightRenderMetadata.js +0 -61
- package/src/engine/graphics/render/forward_plus/SPECIFICATION.md +0 -155
- package/src/engine/graphics/render/forward_plus/assign_cluster.d.ts +0 -29
- package/src/engine/graphics/render/forward_plus/assign_cluster.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/assign_cluster.js +0 -124
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.js +0 -17
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +0 -17
- package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.d.ts +0 -9
- package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.js +0 -29
- package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.d.ts +0 -12
- package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.js +0 -43
- package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts +0 -8
- package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/computeFrustumCorners.js +0 -68
- package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.d.ts +0 -4
- package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.js +0 -46
- package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.d.ts +0 -14
- package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.js +0 -327
- package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +0 -40
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.js +0 -74
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +0 -55
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.js +0 -11
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +0 -34
- package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +0 -60
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +0 -38
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +0 -30
- package/src/engine/graphics/render/forward_plus/model/Decal.d.ts +0 -51
- package/src/engine/graphics/render/forward_plus/model/Decal.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/model/Decal.js +0 -133
- package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.d.ts +0 -16
- package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.js +0 -18
- package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.js +0 -8
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts +0 -10
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.js +0 -65
- package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.d.ts +0 -7
- package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +0 -8
- package/src/engine/graphics/render/forward_plus/query/cube_mapping.d.ts +0 -11
- package/src/engine/graphics/render/forward_plus/query/cube_mapping.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/cube_mapping.js +0 -38
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts +0 -21
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +0 -96
- package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts +0 -22
- package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +0 -44
- package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts +0 -11
- package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +0 -169
- package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.d.ts +0 -9
- package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +0 -33
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +0 -2
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +0 -2
- package/src/engine/graphics/render/forward_plus/sort_decal_data.d.ts +0 -9
- package/src/engine/graphics/render/forward_plus/sort_decal_data.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/sort_decal_data.js +0 -102
- package/src/engine/graphics/render/forward_plus/testClusterEquality.d.ts +0 -10
- package/src/engine/graphics/render/forward_plus/testClusterEquality.d.ts.map +0 -1
- package/src/engine/graphics/render/forward_plus/testClusterEquality.js +0 -22
- package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.d.ts +0 -19
- package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.d.ts.map +0 -1
- package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.js +0 -62
- package/src/engine/graphics/shaders/AlphaBlendShader.d.ts +0 -18
- package/src/engine/graphics/shaders/AlphaBlendShader.d.ts.map +0 -1
- package/src/engine/graphics/shaders/AlphaBlendShader.js +0 -42
- package/src/engine/graphics/shaders/ClearShader.d.ts +0 -8
- package/src/engine/graphics/shaders/ClearShader.d.ts.map +0 -1
- package/src/engine/graphics/shaders/ClearShader.js +0 -28
- package/src/engine/graphics/shaders/ScreenSpaceQuadShader.d.ts +0 -13
- package/src/engine/graphics/shaders/ScreenSpaceQuadShader.d.ts.map +0 -1
- package/src/engine/graphics/shaders/ScreenSpaceQuadShader.js +0 -38
- package/src/engine/graphics/shaders/ScreenSpaceShader.d.ts +0 -7
- package/src/engine/graphics/shaders/ScreenSpaceShader.d.ts.map +0 -1
- package/src/engine/graphics/shaders/ScreenSpaceShader.js +0 -102
- package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts +0 -102
- package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts.map +0 -1
- package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.js +0 -277
- package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts +0 -40
- package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts.map +0 -1
- package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.js +0 -57
- package/src/engine/graphics/shaders/glsl_gen_swizzled_read.d.ts +0 -8
- package/src/engine/graphics/shaders/glsl_gen_swizzled_read.d.ts.map +0 -1
- package/src/engine/graphics/shaders/glsl_gen_swizzled_read.js +0 -39
- package/src/engine/graphics/shadows/README.md +0 -6
- package/src/engine/graphics/shadows/vsm.glsl.d.ts +0 -3
- package/src/engine/graphics/shadows/vsm.glsl.d.ts.map +0 -1
- package/src/engine/graphics/shadows/vsm.glsl.js +0 -43
- package/src/engine/graphics/util/composeMatrix4.d.ts +0 -9
- package/src/engine/graphics/util/composeMatrix4.d.ts.map +0 -1
- package/src/engine/graphics/util/composeMatrix4.js +0 -13
- package/src/engine/graphics/util/threeUpdateMatrix.d.ts +0 -6
- package/src/engine/graphics/util/threeUpdateMatrix.d.ts.map +0 -1
- package/src/engine/graphics/util/threeUpdateMatrix.js +0 -14
- package/src/engine/graphics/util/threeUpdateTransform.d.ts +0 -6
- package/src/engine/graphics/util/threeUpdateTransform.d.ts.map +0 -1
- package/src/engine/graphics/util/threeUpdateTransform.js +0 -16
- package/src/engine/sound/ecs/SoundController.d.ts.map +0 -1
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts +0 -23
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +0 -1
- package/src/engine/sound/ecs/SoundControllerSystem.js +0 -103
- package/src/engine/sound/ecs/emitter/SoundAttenuationFunction.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +0 -55
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +0 -265
- package/src/engine/sound/ecs/emitter/SoundEmitterFlags.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +0 -88
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +0 -159
- package/src/engine/sound/ecs/emitter/SoundPanningModelType.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundTrackFlags.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.d.ts +0 -8
- package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.js +0 -41
- package/src/shade/playground/FramePerformanceMonitor.d.ts +0 -114
- package/src/shade/playground/FramePerformanceMonitor.d.ts.map +0 -1
- package/src/shade/playground/FramePerformanceMonitor.js +0 -468
- package/src/shade/playground/add_random_lights.d.ts +0 -8
- package/src/shade/playground/add_random_lights.d.ts.map +0 -1
- package/src/shade/playground/add_random_lights.js +0 -50
- package/src/shade/playground/animation_prototype.d.ts +0 -24
- package/src/shade/playground/animation_prototype.d.ts.map +0 -1
- package/src/shade/playground/animation_prototype.js +0 -508
- package/src/shade/playground/animation_prototype_skinning.d.ts +0 -31
- package/src/shade/playground/animation_prototype_skinning.d.ts.map +0 -1
- package/src/shade/playground/animation_prototype_skinning.js +0 -647
- package/src/shade/playground/animation_prototype_stress.d.ts +0 -35
- package/src/shade/playground/animation_prototype_stress.d.ts.map +0 -1
- package/src/shade/playground/animation_prototype_stress.js +0 -765
- package/src/shade/playground/enable_picker.d.ts +0 -8
- package/src/shade/playground/enable_picker.d.ts.map +0 -1
- package/src/shade/playground/enable_picker.js +0 -60
- package/src/shade/playground/gltf_skinned_prototype.d.ts +0 -27
- package/src/shade/playground/gltf_skinned_prototype.d.ts.map +0 -1
- package/src/shade/playground/gltf_skinned_prototype.js +0 -560
- package/src/shade/playground/gltf_skinned_stress_prototype.d.ts +0 -24
- package/src/shade/playground/gltf_skinned_stress_prototype.d.ts.map +0 -1
- package/src/shade/playground/gltf_skinned_stress_prototype.js +0 -387
- package/src/shade/playground/gltf_viewer.d.ts +0 -2
- package/src/shade/playground/gltf_viewer.d.ts.map +0 -1
- package/src/shade/playground/gltf_viewer.js +0 -283
- package/src/shade/playground/main.d.ts.map +0 -1
- package/src/shade/playground/main.js +0 -2727
- package/src/shade/playground/make_animated_instances.d.ts +0 -9
- package/src/shade/playground/make_animated_instances.d.ts.map +0 -1
- package/src/shade/playground/make_animated_instances.js +0 -118
- package/src/shade/playground/prototype_virtual_texture.d.ts +0 -2
- package/src/shade/playground/prototype_virtual_texture.d.ts.map +0 -1
- package/src/shade/playground/prototype_virtual_texture.js +0 -274
- package/src/shade/playground/prototype_volumetrics_01.d.ts +0 -2
- package/src/shade/playground/prototype_volumetrics_01.d.ts.map +0 -1
- package/src/shade/playground/prototype_volumetrics_01.js +0 -206
- package/src/shade/playground/sample.d.ts +0 -2
- package/src/shade/playground/sample.d.ts.map +0 -1
- package/src/shade/playground/sample.js +0 -234
- package/src/shade/playground/sample_load_gltf.d.ts +0 -9
- package/src/shade/playground/sample_load_gltf.d.ts.map +0 -1
- package/src/shade/playground/sample_load_gltf.js +0 -103
- package/src/shade/playground/spread_node3d_grid.d.ts +0 -7
- package/src/shade/playground/spread_node3d_grid.d.ts.map +0 -1
- package/src/shade/playground/spread_node3d_grid.js +0 -20
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.d.ts +0 -24
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.js +0 -88
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.js +0 -49
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.js +0 -93
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.d.ts +0 -24
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.js +0 -119
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.d.ts +0 -7
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.js +0 -235
- package/src/shade/renderer/gpu_primitive/sort/NOTES.md +0 -5
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.d.ts +0 -7
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.js +0 -136
- package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.d.ts +0 -18
- package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.js +0 -108
- package/src/shade/renderer/gpu_primitive/sort/ffx/defs.d.ts +0 -35
- package/src/shade/renderer/gpu_primitive/sort/ffx/defs.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/defs.js +0 -42
- package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.d.ts +0 -13
- package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.js +0 -116
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.js +0 -120
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.js +0 -76
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.js +0 -125
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.js +0 -140
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.js +0 -338
- package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.d.ts +0 -7
- package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.js +0 -261
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.js +0 -14
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.d.ts +0 -25
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.js +0 -25
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.d.ts +0 -15
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.js +0 -192
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.d.ts +0 -5
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.js +0 -990
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.d.ts +0 -5
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.js +0 -82
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.js +0 -44
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.d.ts +0 -5
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.js +0 -156
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.d.ts +0 -6
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.js +0 -55
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.d.ts +0 -14
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.js +0 -110
- package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.d.ts +0 -12
- package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.js +0 -74
- package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.d.ts +0 -3
- package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.d.ts.map +0 -1
- package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.js +0 -125
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.js +0 -36
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.js +0 -54
- package/src/shade/renderer/shader/chunk/bvh/packed/NOTES.md +0 -19
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.js +0 -9
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.d.ts +0 -6
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.js +0 -5
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.d.ts +0 -8
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.js +0 -17
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.js +0 -14
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.js +0 -27
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.js +0 -31
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.js +0 -25
- package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.js +0 -42
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundAttenuationFunction.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundAttenuationFunction.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterFlags.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterFlags.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationAdapter.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationAdapter.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundPanningModelType.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundPanningModelType.js +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrackFlags.d.ts +0 -0
- /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrackFlags.js +0 -0
- /package/src/shade/playground/{main.d.ts → bvh_repro/main.d.ts} +0 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
# SoundEmitter → AudioEmitter — retirement investigation & execution plan
|
|
2
|
+
|
|
3
|
+
> Goal: retire the legacy `SoundEmitter` component + `SoundEmitterSystem` (and their hard dependents)
|
|
4
|
+
> in favour of the native `AudioEmitter` path. Part I records what was verified in source on
|
|
5
|
+
> 2026-08-27; Part II is the execution plan, written for an AI agent as the executor. Every file:line
|
|
6
|
+
> below was opened and checked in this checkout (`H:\git\CompanyNamed\meep`, HEAD `9d3aa82b7`) or in
|
|
7
|
+
> the consuming game checkout (`H:\git\moh`, HEAD `d71e70d9b`).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Part I — Investigation
|
|
12
|
+
|
|
13
|
+
## 1. Where the migration stands
|
|
14
|
+
|
|
15
|
+
The strangler migration (sopra `IMPLEMENTATION_PLAN.md` §0, §9) is further along than "legacy vs new
|
|
16
|
+
renderer" — **sopra is already the only renderer**. What remains legacy is a *data model and its
|
|
17
|
+
translation layer*:
|
|
18
|
+
|
|
19
|
+
- `SoundEmitter` (`ecs/emitter/SoundEmitter.js:20-24`) is `@deprecated`, a "deprecate-and-plumb compat
|
|
20
|
+
reader". `SoundEmitterSystem.link` builds a per-entity `SoundEmitterComponentContext` that translates
|
|
21
|
+
each `SoundTrack` into a sopra `EventInstance` via `sopra/legacy/soundEmitterToEventDescription.js`.
|
|
22
|
+
No WebAudio lives on the legacy classes anymore (the `nodes` getters throw).
|
|
23
|
+
- `AudioEmitter` (`ecs/audio/AudioEmitter.js`) owns a full authored `EventDescription` directly (clip
|
|
24
|
+
graph, bus routing, 3D/attenuation, voice config) plus `volume`/`autoplay` and the acoustic trio
|
|
25
|
+
(`acoustic`, `sourceRadius`, `directivity`). `AudioEmitterSystem` adds the P5 spatial live/dormant
|
|
26
|
+
management (`LiveEmitterSet` + `SpatialAudioIndex`, 100k-emitter scaling), acoustic-simulation
|
|
27
|
+
driving, and probe reverb. It is **fully built and black-box tested, but constructed only in specs**.
|
|
28
|
+
- Both systems share the one `SopraEngine` via `SoundEngine.obtainSopra` (`SoundEngine.js:81-87`,
|
|
29
|
+
idempotent), which is what makes the cut-over safe to do incrementally.
|
|
30
|
+
|
|
31
|
+
The migration stalled exactly at the seam the duplication audit (`src/DUPLICATION_AUDIT_2026_08_07/F_sound.md`,
|
|
32
|
+
"Strangler-migration debt") identified: **the game still registers only the legacy systems, and the
|
|
33
|
+
native path has zero production consumers.** The sopra plan's own status line agrees
|
|
34
|
+
(`sopra/IMPLEMENTATION_PLAN.md:5-7`): "the native `AudioEmitter`/`AudioEmitterSystem` is fully built
|
|
35
|
+
and tested but registered only in tests, awaiting the cut-over".
|
|
36
|
+
|
|
37
|
+
Owner decision #4 in that plan ("`SoundEmitter` endgame", §12) reads: *keep as a frozen compat reader
|
|
38
|
+
through P3/P4; delete only after full migration + a tested save-translation path*. This document is
|
|
39
|
+
the plan for that full migration and save-translation path.
|
|
40
|
+
|
|
41
|
+
## 2. The two paths side by side
|
|
42
|
+
|
|
43
|
+
| Concern | Legacy (`ecs/emitter/`) | Native (`ecs/audio/`) |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| Component | `SoundEmitter`: `tracks: List<SoundTrack>`, `channel` (free string), `flags` (Spatialization/Attenuation), `volume: Vector1`, `distanceMin/Max`, `attenuation` enum, `panningModel` | `AudioEmitter`: `event: EventDescription` (owns busId, is3D, panning, distances, attenuation curve, maxInstances, clip graph), `volume: Vector1`, `autoplay`, `acoustic`, `sourceRadius`, `directivity` |
|
|
46
|
+
| Playback unit | one `EventInstance` per `SoundTrack`, reconciled live via `tracks.on.added/removed` | one `EventInstance` per emitter; three link-time routes: managed (looping 3D → `LiveEmitterSet` budget), direct (2D / finite 3D one-shot), inert (non-autoplay) |
|
|
47
|
+
| Attenuation | 3-value enum → curve at translation (`attenuationFunctionToCurve`) | authored `AnimationCurve` on the event |
|
|
48
|
+
| Channel/bus | `channel` string; unknown bus falls back to `effects` with `console.error` (`SoundEmitterComponentContext.#resolveBus:223-231`) | `event.busId`; **no fallback** — `BusGraph.getInput` throws on unknown id |
|
|
49
|
+
| One-shot end | `track.on.ended` Signal → track removes itself from the list | instance self-releases; **no component-level ended signal** (`instanceFor(entity)` on the system is the only observation point) |
|
|
50
|
+
| Fade/stop helpers | `fadeOutAllTracks` / `stopAllTracks` plumb via `__soundRuntime` back-ref | none on the component (by design); live `volume` writes plumb to instance gain on both routes |
|
|
51
|
+
| Spatial scaling | none (every linked emitter plays; BVH far-cull was deleted with the old renderer) | `LiveEmitterSet` budget (default 64) + dormant BVH leaves |
|
|
52
|
+
| Acoustic sim | not supported | `acoustic`/`sourceRadius`/`directivity`, driven by `AudioEmitterSystem.update` |
|
|
53
|
+
| Binary serialization | `SoundEmitterSerializationAdapter` v2 + upgraders 0→1→2, **registered** in `populateEngineSerializationRegistry.js:185,261-262` | `AudioEmitterSerializationAdapter` v0 exists **with spec but is registered nowhere** |
|
|
54
|
+
| Event-driven triggers | `SoundController`/`SoundControllerSystem` (writes `SoundTrack`s into the entity's `SoundEmitter`) | none — the replacement `AudioEventTrigger` is named in three docs but **does not exist** |
|
|
55
|
+
| Editor | `SoundEmitterSymbolicDisplay` + positioned marker (`editor/process/SymbolicDisplayProcess.js:67,74`) | nothing |
|
|
56
|
+
| Sound-asset loader | registers `SoundAssetLoader` unconditionally (ctor) | registers it only if absent (`AudioEmitterSystem.js:104-106`) — standalone-safe |
|
|
57
|
+
|
|
58
|
+
Everything the legacy component can express, the native one can too (the translator proves it
|
|
59
|
+
constructively). The reverse is not true — the native path is a superset.
|
|
60
|
+
|
|
61
|
+
## 3. Full consumer inventory
|
|
62
|
+
|
|
63
|
+
### 3.1 meep — the legacy cluster itself
|
|
64
|
+
|
|
65
|
+
| File | Role |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `src/engine/sound/ecs/emitter/SoundEmitter.js` | component (typeName `"SoundEmitter"` at `:380` — the save-format key) |
|
|
68
|
+
| `src/engine/sound/ecs/emitter/SoundTrack.js` | track data + `on.ended` + live plumbing back-refs |
|
|
69
|
+
| `src/engine/sound/ecs/emitter/SoundEmitterSystem.js` | system; also exports `SoundEmitterChannels` (`:14-18`) and the deprecated `get/setChannelVolume` bus proxies (`:91-102`) |
|
|
70
|
+
| `src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js` | per-entity translation record (track ⇄ instance reconciliation, bus fallback, gain composition) |
|
|
71
|
+
| `src/engine/sound/ecs/emitter/SoundEmitterFlags.js`, `SoundTrackFlags.js`, `SoundAttenuationFunction.js`, `SoundPanningModelType.js` | enums |
|
|
72
|
+
| `src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.js` + `SoundEmitterSerializationUpgrader_0_1.js` / `_1_2.js` | save format v2 + history |
|
|
73
|
+
| `src/engine/sound/ecs/SoundController.js` + `SoundControllerSystem.js` | event→track trigger layer; hard-depends on `SoundEmitter` (`SoundControllerSystem.js:50,72`) |
|
|
74
|
+
| `src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js` | the pure translator (this is the future save-converter core, not dead weight) |
|
|
75
|
+
| Specs | `SoundEmitterSystem.spec.js` (+ `.listener.spec.js`, `.attenuation.spec.js`), `SoundEmitterSerializationAdapter.spec.js`, `soundEmitterToEventDescription.spec.js` |
|
|
76
|
+
|
|
77
|
+
### 3.2 meep — engine-internal consumers (must be ported)
|
|
78
|
+
|
|
79
|
+
| Site | What it does today |
|
|
80
|
+
|---|---|
|
|
81
|
+
| `src/engine/EntityCreator.js:24-71` `createSound` | fire-and-forget one-shot entity: single-track `SoundEmitter` + `Transform` + `Delay(timeout)+Die` backstop; destroys the entity early via `track.on.ended` (`:59-60`) |
|
|
82
|
+
| `src/view/interaction/createInterfaceCommandButton.js:35-40` | UI click sounds via `createSound` (`positioned: false`, Effects channel); the `sound` payload is a `SoundTrack` |
|
|
83
|
+
| `src/engine/animation/AnimationUtils.js:236-249` | effect helper: `createSound` + `whenAllEntitiesDestroyed([timer, sound])` — **relies on the early ended→destroy**, otherwise the promise waits the full 60 s timeout |
|
|
84
|
+
| `src/engine/achievements/AchievementManager.js:327-345` | achievement jingle: builds a 2D `SoundEmitter` onto the banner entity (banner has its own lifecycle) |
|
|
85
|
+
| `src/engine/animation/AnimatedActions.js:50-66` `stopSoundEmitterAndNotifyOnceFinished` | `fadeOutAllTracks(0.3)` + 0.3 s timer; composed into `stopEntityAndNotifyWhenStopped` |
|
|
86
|
+
| `src/engine/ecs/util/hideEntityGracefully.js:126-166` | `addShutdown(SoundEmitter, …)`: tween `emitter.volume` → 0 (2.7 s inside a 3-ish s grace period) via `TweenVector1Behavior` |
|
|
87
|
+
|
|
88
|
+
### 3.3 meep — editor
|
|
89
|
+
|
|
90
|
+
- `editor/process/SymbolicDisplayProcess.js:7,19,67,74` — registers a positioned marker for
|
|
91
|
+
`SoundEmitter` and the `SoundEmitterSymbolicDisplay` (min/max wire spheres).
|
|
92
|
+
- `editor/process/symbolic/SoundEmitterSymbolicDisplay.js` — reads `emitter.distanceMin/Max`.
|
|
93
|
+
- `editor/process/symbolic/symbolic_displays.spec.js:35,309,641-676` — covers both.
|
|
94
|
+
- There is **no component property editor** for `SoundEmitter` (`registerEngineComponentEditors` has
|
|
95
|
+
zero hits) — the editor surface is only these gizmos.
|
|
96
|
+
|
|
97
|
+
### 3.4 meep — serialization wiring
|
|
98
|
+
|
|
99
|
+
- `src/engine/ecs/storage/populateEngineSerializationRegistry.js` registers the `SoundEmitter` (v2),
|
|
100
|
+
`SoundController`, `SoundListener` adapters (`:185-187`) and both `SoundEmitter` upgraders
|
|
101
|
+
(`:261-262`). Its spec round-trips a dataset through the registry.
|
|
102
|
+
- `AudioEmitterSerializationAdapter` (v0, `ecs/audio/`) is imported **only by its own spec**. Its
|
|
103
|
+
`initialize(context, objectAdapter)` needs an object adapter whose registry knows the sopra
|
|
104
|
+
definition types (see `AudioEmitterSerializationAdapter.spec.js:13-26` for the working recipe:
|
|
105
|
+
`populateSopraSerializationRegistry(registry)` first). The sopra and acoustic registries
|
|
106
|
+
(`populateSopraSerializationRegistry`, `populateAcousticSerializationRegistry`) are likewise not
|
|
107
|
+
called from the engine-level populate.
|
|
108
|
+
|
|
109
|
+
### 3.5 The game (moh) — consumed via a two-level submodule chain
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
H:\git\moh (game)
|
|
113
|
+
└─ app/src/mir-engine submodule (gitlab …/mir-engine.git)
|
|
114
|
+
└─ meep submodule (gitlab …/meep.git) — SECOND working copy,
|
|
115
|
+
currently 22 commits behind this checkout
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Every moh import is a deep relative path into the submodule (`../../meep/src/engine/sound/…`), so any
|
|
119
|
+
file deletion or move in meep **breaks moh at build time on the next submodule bump**. Registration
|
|
120
|
+
happens in `app/src/mir-engine/model/game/makeMirEngineConfig.js`:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
72 import { SoundEmitterSystem } from ".../emitter/SoundEmitterSystem.js";
|
|
124
|
+
73 import SoundControllerSystem from ".../SoundControllerSystem.js";
|
|
125
|
+
74 import SoundListenerSystem from ".../SoundListenerSystem.js";
|
|
126
|
+
169 new SoundEmitterSystem(assetManager, sound),
|
|
127
|
+
170 new SoundControllerSystem(),
|
|
128
|
+
171 new SoundListenerSystem(sound.context),
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
No `AudioEmitterSystem` is registered anywhere in moh. Full consuming-site list (paths relative to
|
|
132
|
+
`H:\git\moh\app\src\`):
|
|
133
|
+
|
|
134
|
+
| moh site | Usage |
|
|
135
|
+
|---|---|
|
|
136
|
+
| `mir-engine/model/game/makeMirEngineConfig.js:72-74,169-171` | system registration (above) |
|
|
137
|
+
| `mir-engine/model/game/GameClassRegistry.js:39,74` | registers `SoundEmitter` under `"component.SoundEmitter"` — save/editor class lookup |
|
|
138
|
+
| `mir-engine/model/game/options/makeEngineOptionsModel.js:43-80` | **volume sliders**: `getSystem(SoundEmitterSystem).get/setChannelVolume` for Effects/Ambient/Music |
|
|
139
|
+
| `mir-engine/model/game/options/DevelopmentOptions.js:22,332,368` | dev menu: reset tracks, traverse all `SoundEmitter`s |
|
|
140
|
+
| `mir-engine/model/game/options/resetSoundEmitterTracks.js` | sets `track.time = 0` on Music emitters |
|
|
141
|
+
| `mir-engine/model/game/scenes/GameSounds.js:8-32` | catalogue of UI/jingle `SoundTrack`s |
|
|
142
|
+
| `mir-engine/model/game/scenes/strategy/gui/StrategySceneGUI.js:262-276` | UI transition one-shots |
|
|
143
|
+
| `mir-engine/model/game/scenes/combat/CombatUnitEntityDecorator.js:449-452,580-583` | Effects emitters on combat units |
|
|
144
|
+
| `mir-engine/model/game/scenes/combat/effects/CombatEndMusicProcess.js:38,49` | finds the Music emitter, swaps its track (crossfade via `fadeOutAllTracks(1)` + `tracks.add`) |
|
|
145
|
+
| `mir-engine/model/game/logic/strategy/events/WorldEventManager.js:287-291` | world-event sting one-shot |
|
|
146
|
+
| `mir-engine/model/game/story/dialogue/StoryManager.js:19-22,440-457` | dialogue voice emitter (2D), uses `stopSoundEmitterAndNotifyOnceFinished` |
|
|
147
|
+
| `mir-engine/model/game/story/dialogue/StoryPage.js:49,161` + `story/action/processors/implementation/sound/SoundActionProcessor.js:19` | story data holds `SoundTrack`s |
|
|
148
|
+
| `mir-engine/model/game/UnitMaker.js:156-160,205-210` | unit hurt sounds: empty `SoundEmitter` + `SoundController` rule `'health-reduced'` → random hurt track |
|
|
149
|
+
| `mir-engine/model/game/util/behavior/SoundEmitterVolumeBehavior.js:30` | behavior animating `SoundEmitter.volume` |
|
|
150
|
+
| `generator/theme/injectMusic.js:32-37,87-89` + `generator/theme/injectEnemies.js:239-245` | level generator authors Music/Ambient emitters into blueprints |
|
|
151
|
+
| `TitleScene.js:283-286` | title-screen music emitter |
|
|
152
|
+
| `mir-engine/test/testEffect.js:23,30` + two specs | test harness registration + API-surface assertions |
|
|
153
|
+
| `prototype/probeShadeSymbolicDisplays.js:125-126,721` | editor-display probe |
|
|
154
|
+
|
|
155
|
+
## 4. Serialized-data reality
|
|
156
|
+
|
|
157
|
+
- **This repo contains zero serialized scene/level/prefab data.** The only tracked JSONs are configs;
|
|
158
|
+
`test_assets/` (gitignored) holds only the Sponza model. There is nothing in-tree to migrate.
|
|
159
|
+
- The binary save format keys components by `typeName` — the string `"SoundEmitter"` — through
|
|
160
|
+
`populateEngineSerializationRegistry`. moh additionally keys `"component.SoundEmitter"` in its
|
|
161
|
+
`GameClassRegistry`.
|
|
162
|
+
- Real serialized `SoundEmitter` data lives **out of tree**: moh game saves and untracked `.shade`
|
|
163
|
+
scenes. meep also ships as the published npm package `@woosh/meep-engine` (3.3.0), so unknown
|
|
164
|
+
downstream consumers may hold saves. **You cannot prove from this repo that no `SoundEmitter`
|
|
165
|
+
bytes exist in the wild** — retirement therefore needs a load-path story, not just deletion.
|
|
166
|
+
- Expected shapes in such saves, judging from every authoring site found: 0-track emitters (UnitMaker
|
|
167
|
+
hurt emitters — the tracks arrive transiently via `SoundController`), 1-track emitters (music /
|
|
168
|
+
ambience / title / dialogue). Multi-track emitters can only occur if a save landed mid-crossfade or
|
|
169
|
+
mid-one-shot. Track `time` is serialized but is already **not** restored into playback on link
|
|
170
|
+
(`SoundEmitterComponentContext.addTrack` plays from 0), so dropping it loses nothing real.
|
|
171
|
+
- `panningModel` is JSON-only — the v2 binary adapter never wrote it. Binary-sourced conversions
|
|
172
|
+
default to HRTF, which is what deserialization produces today anyway.
|
|
173
|
+
|
|
174
|
+
## 5. Gaps blocking retirement
|
|
175
|
+
|
|
176
|
+
- **G1 — `AudioEmitter` cannot be saved or loaded.** Its adapter is registered nowhere; the engine
|
|
177
|
+
registry doesn't include the sopra definition types the adapter's object-graph needs. Until this is
|
|
178
|
+
closed, `AudioEmitter` content cannot exist in a level, so nothing else can migrate.
|
|
179
|
+
- **G2 — no `AudioEventTrigger`.** `SoundController`'s replacement is referenced in
|
|
180
|
+
`SoundControllerSystem.js:19-21`, `sopra/README.md:14` and the sopra plan, but no class exists.
|
|
181
|
+
`SoundController` writes into `SoundEmitter`, so it cannot outlive it.
|
|
182
|
+
- **G3 — no native one-shot entity helper.** `createSound` (and its `track.on.ended → destroy`
|
|
183
|
+
contract) has no `AudioEmitter` equivalent. `AudioEmitter` has no ended-observation point except
|
|
184
|
+
`AudioEmitterSystem.instanceFor`, which entity-builder code can't reach.
|
|
185
|
+
- **G4 — no editor display** for `AudioEmitter` (distances now live at `emitter.event.distanceMin/Max`).
|
|
186
|
+
- **G5 — no graceful-shutdown handler** for `AudioEmitter` in `hideEntityGracefully`.
|
|
187
|
+
- **G6 — channel enum**: engine + app import `SoundEmitterChannels` from the system file being
|
|
188
|
+
deleted. `SopraDefaultBus` (`sopra/SopraEngine.js:17-22`) is the id-identical native home (plus
|
|
189
|
+
`master`).
|
|
190
|
+
- **G7 — the game wiring** (registration, sliders, ~19 moh files) is in another repo, coordinated
|
|
191
|
+
through two submodule pins.
|
|
192
|
+
- **G8 — no save-translation path** (`SoundEmitter`/`SoundController` bytes → native components).
|
|
193
|
+
The pure translator exists (`soundEmitterToEventDescription.js`) but nothing applies it to a
|
|
194
|
+
loaded dataset.
|
|
195
|
+
|
|
196
|
+
## 6. Constraints the plan must respect
|
|
197
|
+
|
|
198
|
+
1. **meep is a published library.** Deleting exported classes is a breaking change: it lands in a
|
|
199
|
+
major/minor bump with the legacy *reader* kept for old saves (§Phase 5).
|
|
200
|
+
2. **One renderer, always** — sopra. Nothing in this plan may create a second render path.
|
|
201
|
+
3. **House testing rules**: black-box specs only (observable audio-graph outcomes, not call counts);
|
|
202
|
+
the harness is `MockAudioContext` + `StubBufferProvider`; the suite is **vitest** (`npm test` /
|
|
203
|
+
`npx vitest run src/engine/sound` — several older docs say jest; they are stale).
|
|
204
|
+
4. **No string-keyed magic registries; typed, explicit code** (see the dismissed-leads notes in
|
|
205
|
+
`F_sound.md` for calibration).
|
|
206
|
+
5. **Commits go directly to `master`** in meep (standing owner instruction), one coherent step per
|
|
207
|
+
commit, suite green at every commit.
|
|
208
|
+
6. **moh must keep building at every meep submodule pin it actually takes.** All meep-side phases
|
|
209
|
+
before the deletion phase are strictly additive/back-compatible; the deletion phase ships only
|
|
210
|
+
after moh has been ported and re-pinned.
|
|
211
|
+
|
|
212
|
+
## 7. Incidental findings (not blockers; fix or file while passing)
|
|
213
|
+
|
|
214
|
+
- `AudioEmitter.fromJSON` defaulted `sourceRadius` to **0.5** while the field default is **0.05** — a
|
|
215
|
+
10× drift the adapter round-trip masked. **Fixed 2026-08-27** (owner picked 0.05): both sites now
|
|
216
|
+
share a module-level `DEFAULT_SOURCE_RADIUS` const, pinned by a `fromJSON({})` assertion in
|
|
217
|
+
`AudioEmitter.spec.js`.
|
|
218
|
+
- `F_sound.md` finding 3 (both systems each resolve the listener + tick sopra) becomes moot the day
|
|
219
|
+
`SoundEmitterSystem` is unregistered — the double-tick concern dies with the legacy system, and
|
|
220
|
+
`AudioEmitterSystem` becomes the single tick owner. Finding 12 (play-spec duplication between
|
|
221
|
+
`#play`/`#promote`) is unaffected by this plan; leave it to the audit's own remediation.
|
|
222
|
+
- Stale doc references: `F_sound.md` cites `makeMirEngineConfig.js:182` (now `:169`);
|
|
223
|
+
`editor/REWORK_PLAN_2026_08.md:181,442` references a `resetSoundEmitterTracks` in `Editor.js` that
|
|
224
|
+
no longer exists in meep (the live one is moh's `options/resetSoundEmitterTracks.js`).
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
# Part II — Execution plan
|
|
229
|
+
|
|
230
|
+
> **Status 2026-08-27: Phases 0-3 and Phase 5 are landed on `master`** (hashes on each heading below).
|
|
231
|
+
> The native path is registered, serializable, triggerable, editable, and fed by a tested converter;
|
|
232
|
+
> meep-internal consumers are ported; the legacy behavioural path is deleted.
|
|
233
|
+
>
|
|
234
|
+
> **Phase 4 was skipped on the owner's instruction, and Phase 5 ran without it.** That inverts the
|
|
235
|
+
> ordering constraint in §6.6: the game repo still imports `SoundEmitterSystem`,
|
|
236
|
+
> `SoundControllerSystem`, `SoundEmitterChannels` and `ecs/emitter/*`, all of which are now gone or
|
|
237
|
+
> moved, so **moh will not build against this meep until Phase 4 is done**. Do not bump the submodule
|
|
238
|
+
> pin before porting it. Phase 4's step list below is unchanged and still the work to do.
|
|
239
|
+
>
|
|
240
|
+
> Deviations from the plan as written, and why:
|
|
241
|
+
> - **Phase 2** uses `AnimationBehavior` over an `AnimationTrack` instead of the `TweenVector1Behavior`
|
|
242
|
+
> the plan named. That class lives in the game repo; `hideEntityGracefully`'s import of it is exactly
|
|
243
|
+
> why that file cannot be loaded from meep's own suite. Using it in `AnimatedActions` would have made
|
|
244
|
+
> that file, and `AnimationUtils` with it, untestable here.
|
|
245
|
+
> - **1e** gives the `AudioEmitter` positioned marker its own colour rather than the legacy emitter's
|
|
246
|
+
> green: while both components exist, which one an entity carries is what a level author migrating
|
|
247
|
+
> content needs to see, and the marker spec's standing claim is that each type has its own colour.
|
|
248
|
+
> - **1f** ships without a spec. `hideEntityGracefully` imports the game's own behavior classes through
|
|
249
|
+
> moh-only relative paths, so nothing in meep's suite can load it — which is also why the legacy
|
|
250
|
+
> handler beside it has never had one.
|
|
251
|
+
> - **1c** also updated the two legacy `@deprecated` notes that called `AudioEventTrigger`
|
|
252
|
+
> "forthcoming", since it no longer is.
|
|
253
|
+
>
|
|
254
|
+
> Corrections to Part I found while executing:
|
|
255
|
+
> - §3.2 describes `hideEntityGracefully`'s sound fade as "2.7 s inside a 3-ish s grace period". The
|
|
256
|
+
> grace period is 60 s (`SHUTDOWN_GRACE_PERIOD`); the fade is its last 2.7 s.
|
|
257
|
+
> - §1d's note that the legacy `positioned: false` accident used a "flat-1" curve is loose: the curve is
|
|
258
|
+
> a *linear* irradiance falloff over 1…10000, which is flat to within a fraction of a percent at any
|
|
259
|
+
> distance a level reaches. The conclusion — that dropping it changes nothing audible — holds.
|
|
260
|
+
> - `createTimer` and the `stopEmitterAndNotifyOnceFinished` timers were rewritten onto behaviours in
|
|
261
|
+
> `b68cd7eba` while these phases were being executed; the `Timer` component is gone.
|
|
262
|
+
|
|
263
|
+
**You are the executing agent.** Work top to bottom; phases are ordered by dependency. For each
|
|
264
|
+
phase: read the named files first, implement, run the named verification, commit to `master` with the
|
|
265
|
+
suggested message shape. Do not begin a phase whose gate is not met. If any step reveals the code has
|
|
266
|
+
drifted from Part I, re-verify the surrounding claims before proceeding — do not patch blind.
|
|
267
|
+
|
|
268
|
+
Baseline commands (from repo root `H:\git\CompanyNamed\meep`):
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npm test # full suite
|
|
272
|
+
npx vitest run src/engine/sound # sound domain
|
|
273
|
+
npx vitest run editor # editor suite
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Decision register
|
|
277
|
+
|
|
278
|
+
Defaults below are pre-selected so you can execute without stopping; each is overridable by the owner.
|
|
279
|
+
**D2 and D6 are owner sign-off gates** — confirm before executing their phases (they change public
|
|
280
|
+
surface / delete data paths). D1/D3/D4/D5 are recommendations you may implement directly.
|
|
281
|
+
|
|
282
|
+
| # | Decision | Default (recommended) | Alternatives |
|
|
283
|
+
|---|---|---|---|
|
|
284
|
+
| D1 | How entity-level code observes a one-shot's end (G3) | Add a non-serialized `on = { ended: Signal }` to `AudioEmitter`, fired by `AudioEmitterSystem` when a **direct** instance self-ends (managed emitters loop; never fire). Mirrors the `SoundTrack.on.ended` precedent; keeps builders system-free | (b) per-entity ECS event via `dataset.sendEvent` — decoupled but unreachable from `Entity` builders pre-build; (c) callers poll `instanceFor` — rejected, busy-wait |
|
|
285
|
+
| D2 | Save-compat end state (G8) | **Delete the behavioural classes; keep a frozen reader.** `SoundEmitter`+`SoundTrack` survive only as data-only legacy classes (same `typeName`s) + the v2 adapter + both upgraders, relocated under `sopra/legacy/`; a post-load converter turns them into native components, then removes them from the dataset | (b) keep the full classes as frozen readers indefinitely (more surface, zero churn); (c) hard break — refuse old saves (rejected: published library, live game saves) |
|
|
286
|
+
| D3 | `createSound` endgame | Keep the export, same call shape, reimplemented on `AudioEmitter`; accept `{url}` or `{event: EventDescription}`; keep accepting `{track}` until Phase 5, then drop it with `SoundTrack` | delete it and port all callers to raw builders (rejected: 3 engine + several moh callers, the facade is 40 lines) |
|
|
287
|
+
| D4 | Multi-track (`N>1`) conversion policy | root = `BlendContainerAudioClip`, one child per track, constant unit gain curves (Blend plays all audible children simultaneously — the engine's parallel container); `console.warn` each occurrence so real-world frequency surfaces | first-track-only + warn (lossy); N sibling entities (rejected: entity identity/Transform ownership gets murky) |
|
|
288
|
+
| D5 | moh volume-slider home | `getSystem(AudioEmitterSystem).sopra.getBusVolume/setBusVolume` with `SopraDefaultBus` ids (already linear-domain end to end, D6 in the sopra plan) | reach `engine.sound.sopra` directly (ordering-fragile before systems construct) |
|
|
289
|
+
| D6 | The breaking release itself (Phase 5) | ship as the next **major** version of `@woosh/meep-engine` with a migration note | minor bump if the owner treats deep-path imports as non-API |
|
|
290
|
+
|
|
291
|
+
## Phase 0 — preflight
|
|
292
|
+
|
|
293
|
+
1. `git status` clean; `npm test` green. Record the baseline pass/skip counts in your working notes
|
|
294
|
+
(the sopra plan's "298 green, 2 skipped" figure is dated — re-baseline, don't trust it).
|
|
295
|
+
2. Read, in full: `AudioEmitter.js`, `AudioEmitterSystem.js`, `SoundEmitterSystem.js`,
|
|
296
|
+
`SoundEmitterComponentContext.js`, `soundEmitterToEventDescription.js`,
|
|
297
|
+
`AudioEmitterSerializationAdapter.spec.js` (the registry recipe), `EntityCreator.js`.
|
|
298
|
+
3. Confirm the Part I inventory still holds: `grep -rl "emitter/SoundEmitter" src editor` should
|
|
299
|
+
match §3.1–§3.3 and nothing new. Any new consumer joins the Phase 2 list.
|
|
300
|
+
|
|
301
|
+
## Phase 1 — close the native gaps (meep, purely additive)
|
|
302
|
+
|
|
303
|
+
Each sub-phase is one commit. Nothing here touches legacy behaviour; moh remains buildable against
|
|
304
|
+
any commit in this phase.
|
|
305
|
+
|
|
306
|
+
### 1a — serialization wiring (G1) — `feat(sound): register AudioEmitter serialization` — ✅ DONE — 7025b8e6e
|
|
307
|
+
|
|
308
|
+
1. In `populateEngineSerializationRegistry.js`: call `populateSopraSerializationRegistry(registry)`
|
|
309
|
+
and `populateAcousticSerializationRegistry(registry)` (the `AudioEmitter` adapter's event graph
|
|
310
|
+
needs the sopra clip/effect types; `directivity` needs the acoustic adapter), then add
|
|
311
|
+
`new AudioEmitterSerializationAdapter()` to the component block. Engine registry stays the single
|
|
312
|
+
source of truth (its JSDoc `:166-171` already promises exactly that to hosts).
|
|
313
|
+
2. Extend `populateEngineSerializationRegistry.spec.js`: add `AudioEmitter` to `COMPONENT_TYPES` with
|
|
314
|
+
a non-default fixture (an `EventDescription.from(...)` with a looping `SampleAudioClip`, non-default
|
|
315
|
+
distances, a `RandomContainer` child if cheap) and assert field-level equality after the round
|
|
316
|
+
trip — not just "adapter defined". The existing dataset round-trip test must stay green.
|
|
317
|
+
3. Verify: `npx vitest run src/engine/ecs/storage src/engine/sound`. (The `sourceRadius` default
|
|
318
|
+
drift this step used to carry was already fixed — see §7.)
|
|
319
|
+
|
|
320
|
+
### 1b — one-shot end observation (D1, G3) — `feat(sound): AudioEmitter.on.ended` — ✅ DONE — c52c7734d
|
|
321
|
+
|
|
322
|
+
1. `AudioEmitter`: add `on = { ended: new Signal() }` (exclude from `toJSON`/`equals`/`hash` — it is
|
|
323
|
+
observation, not authored state; note that in the JSDoc).
|
|
324
|
+
2. `AudioEmitterSystem.#play`: after a successful play, `instance.onEnded.addOne(() =>
|
|
325
|
+
emitter.on.ended.send1(emitter))`. Direct route only; document why managed emitters never fire
|
|
326
|
+
(looping by definition of the route).
|
|
327
|
+
3. Spec (extend `AudioEmitterSystem.spec.js`, black-box): a finite 2D autoplay emitter fires
|
|
328
|
+
`on.ended` exactly once when the mock clock passes the clip end; a looping managed emitter never
|
|
329
|
+
fires; unlink before end does not fire (stop ≠ ended — match `EventInstance` semantics; if
|
|
330
|
+
`onEnded` fires on stop, filter in the handler and assert that behaviour explicitly).
|
|
331
|
+
|
|
332
|
+
### 1c — `AudioEventTrigger` (G2) — `feat(sound): AudioEventTrigger replaces SoundController` — ✅ DONE — 1add0b467
|
|
333
|
+
|
|
334
|
+
The native successor to `SoundController`, per the naming locked in `sopra/README.md:14`.
|
|
335
|
+
|
|
336
|
+
1. `src/engine/sound/ecs/trigger/AudioEventTrigger.js` — serializable component:
|
|
337
|
+
`rules: [{ startEvent: string, stopEvent: string|null, event: EventDescription }]`, plus
|
|
338
|
+
`toJSON/fromJSON`, `equals/hash`, `typeName = "AudioEventTrigger"`. The legacy rule's
|
|
339
|
+
`tracks[]/loop/volume/channel` collapse into the `EventDescription` itself (random pick =
|
|
340
|
+
`RandomContainerAudioClip`, loop = clip loop flag, volume = clip `gainDb`, channel = `busId`) —
|
|
341
|
+
that is the point of the native model; do not carry the legacy rule shape.
|
|
342
|
+
2. `AudioEventTriggerSystem.js` — `dependencies = [AudioEventTrigger, Transform]`; on link, register
|
|
343
|
+
`dataset.addEntityEventListener(entity, rule.startEvent, …)` handlers that `sopra.playEvent(rule.event,
|
|
344
|
+
{ busId, position: transform.position, oneShot: !rule.event.rootClip.loops() })`; `stopEvent`
|
|
345
|
+
stops the instances that rule started; unlink tears listeners down and stops. Constructor takes
|
|
346
|
+
`(assetManager, soundEngine)` and `obtainSopra`s like `AudioEmitterSystem` (idempotent, guarded
|
|
347
|
+
loader registration). Model the listener-bookkeeping on `SoundControllerSystem`'s
|
|
348
|
+
`removers`-per-entity shape.
|
|
349
|
+
3. `AudioEventTriggerSerializationAdapter` v0 (event graphs via the object adapter — copy the
|
|
350
|
+
`AudioEmitterSerializationAdapter` initialize pattern) + registration in
|
|
351
|
+
`populateEngineSerializationRegistry` + spec round trip.
|
|
352
|
+
4. System spec, black-box: send the entity event → the right buffer plays on the right bus at the
|
|
353
|
+
entity's position; stopEvent stops it; unlink cleans listeners (send after unlink → silence).
|
|
354
|
+
|
|
355
|
+
### 1d — native one-shot helper (D3, G3) — `feat(sound): createSound over AudioEmitter` — ✅ DONE — 669d2b878
|
|
356
|
+
|
|
357
|
+
1. Rewrite `createSound` (`EntityCreator.js`) to build: `Transform` + `SerializationMetadata.Transient`
|
|
358
|
+
+ `AudioEmitter` (`autoplay: true`, one-shot event) + the existing `Delay(timeout)+Die` backstop.
|
|
359
|
+
- `{url}` → `EventDescription.from(url, SampleAudioClip.from(url, { loop: false }), { busId:
|
|
360
|
+
channel, is3D: positioned, panningModel: positioned ? HRTF : None })`. Do **not** reproduce the
|
|
361
|
+
legacy accident where `positioned: false` still attenuated by distance (fromJSON defaulted the
|
|
362
|
+
Attenuation flag on; flat-1 at 1…10000 was inaudible, so behaviour is preserved in practice —
|
|
363
|
+
note this in the commit message).
|
|
364
|
+
- `{event}` → used as-is (new capability).
|
|
365
|
+
- `{track}` (legacy `SoundTrack`) → translate via `soundTrackToEventDescription`-equivalent inline
|
|
366
|
+
(url + loop flag + volume→`gainDb`); keep until Phase 5.
|
|
367
|
+
- Early destroy: `audioEmitter.on.ended.add(builder.destroy, builder)` — restores the
|
|
368
|
+
`AnimationUtils.whenAllEntitiesDestroyed` timing contract (without 1b this regresses to the full
|
|
369
|
+
60 s backstop; that is why 1b precedes 1d).
|
|
370
|
+
- Leave `EventDescription.maxInstances` at its default 32 with `stealMode Oldest` — content-equal
|
|
371
|
+
UI clicks share a polyphony bucket; 32 is ample and stealing degrades gracefully (the legacy
|
|
372
|
+
translator's 256 existed to emulate "play everything", which a UI click does not need).
|
|
373
|
+
2. Port `createInterfaceCommandButton.js` and `AchievementManager.js` off `SoundEmitterChannels` →
|
|
374
|
+
`SopraDefaultBus` (G6) in the same commit — they only need the enum + `createSound`.
|
|
375
|
+
`AchievementManager` swaps its inline `SoundEmitter.fromJSON` for an `AudioEmitter` whose event is
|
|
376
|
+
the same wav as a 2D one-shot (`autoplay` on link; the banner's own behavior sequence still owns
|
|
377
|
+
entity lifetime).
|
|
378
|
+
3. Spec: extend/replace the `createSound` coverage — one-shot destroys its entity on end AND on the
|
|
379
|
+
timeout path (asset never resolves); `positioned: false` produces a non-3D instance.
|
|
380
|
+
|
|
381
|
+
### 1e — editor display (G4) — `feat(editor): AudioEmitter symbolic display` — ✅ DONE — dc3b834f0
|
|
382
|
+
|
|
383
|
+
1. `editor/process/symbolic/AudioEmitterSymbolicDisplay.js`: traverse `[AudioEmitter, Transform]`,
|
|
384
|
+
draw the same two wire spheres from `emitter.event.distanceMin/Max` **only when `event.is3D`**
|
|
385
|
+
(a 2D emitter has no meaningful rolloff pair). Same colours — they encode the attenuation model,
|
|
386
|
+
not the renderer (the class comment in the SoundEmitter version says exactly this; keep it).
|
|
387
|
+
2. Register it plus a `PositionedMarkerSymbolicDisplay(engine, AudioEmitter, …)` alongside the legacy
|
|
388
|
+
ones in `SymbolicDisplayProcess.js` (legacy rows are removed in Phase 5, not now).
|
|
389
|
+
3. Extend `symbolic_displays.spec.js` mirroring the SoundEmitter cases (`:309`, `:641-676`) for
|
|
390
|
+
`AudioEmitter`, including the is3D=false → no spheres case.
|
|
391
|
+
|
|
392
|
+
### 1f — graceful shutdown (G5) — `feat(ecs): AudioEmitter graceful shutdown` — ✅ DONE — 289402b46
|
|
393
|
+
|
|
394
|
+
1. In `hideEntityGracefully.js`, `addShutdown(AudioEmitter, …)` mirroring the SoundEmitter handler:
|
|
395
|
+
if `volume > 0` (and, for fidelity to the old per-track guard, the emitter is actually audible —
|
|
396
|
+
`autoplay` is a good-enough proxy), tween `emitter.volume` → 0 with the same
|
|
397
|
+
`TweenVector1Behavior` timings; live `volume` writes already reach instance gain on both routes
|
|
398
|
+
(`AudioEmitterSystem.link` wires `onVolume` for managed and direct alike).
|
|
399
|
+
2. Spec if the file has one; otherwise verify through the existing shutdown coverage.
|
|
400
|
+
|
|
401
|
+
**Phase 1 gate:** full suite green; `grep -rn "AudioEmitterSerializationAdapter" src | grep -v spec`
|
|
402
|
+
shows the registry import; no legacy file modified except the two enum-swap consumers in 1d.
|
|
403
|
+
|
|
404
|
+
## Phase 2 — port the remaining meep-internal consumers — ✅ DONE — 7939a782d
|
|
405
|
+
|
|
406
|
+
One commit — `refactor(sound): port engine internals off SoundEmitter`.
|
|
407
|
+
|
|
408
|
+
1. `AnimatedActions.js`: add `stopAudioEmitterAndNotifyOnceFinished(entity, ecd)` — read
|
|
409
|
+
`AudioEmitter`, tween/step `volume` → 0 over 0.3 s (a `TweenVector1Behavior` on a throwaway
|
|
410
|
+
entity, as `hideEntityGracefully` does), await the existing 0.3 s timer. Wire it into
|
|
411
|
+
`stopEntityAndNotifyWhenStopped` **alongside** the legacy call (both components may exist during
|
|
412
|
+
the transition window; each helper no-ops when its component is absent). The legacy branch dies in
|
|
413
|
+
Phase 5.
|
|
414
|
+
2. Re-grep the tree for stragglers: `grep -rln "SoundEmitter\|SoundTrack" src editor` must now match
|
|
415
|
+
only: the legacy cluster itself (§3.1), `hideEntityGracefully`'s legacy handler, the legacy branch
|
|
416
|
+
in `AnimatedActions`, the editor's legacy display rows, and docs. Anything else gets ported here.
|
|
417
|
+
3. Full suite green.
|
|
418
|
+
|
|
419
|
+
## Phase 3 — the save-translation path (G8, D2/D4) — ✅ DONE — 7555f1bfd
|
|
420
|
+
|
|
421
|
+
One commit — `feat(sound): legacy save conversion to AudioEmitter`.
|
|
422
|
+
|
|
423
|
+
1. `src/engine/sound/sopra/legacy/convertLegacySoundComponents.js` — a pure dataset pass:
|
|
424
|
+
- For each entity with `SoundEmitter`: build an `AudioEmitter` — `volume` copied; `autoplay = true`;
|
|
425
|
+
event from the track list per D4 (0 tracks → **no** `AudioEmitter`, just remove; 1 track →
|
|
426
|
+
`soundTrackToEventDescription(emitter, track)` **with `track.volume` baked into the clip's
|
|
427
|
+
`gainDb`** (the live translator deliberately leaves it out — P3.5's one-live-gain rule — but a
|
|
428
|
+
static conversion has no live track gain to compose, so it must bake); N>1 → Blend per D4).
|
|
429
|
+
Resolve unknown `channel` strings against the target bus set with the same
|
|
430
|
+
`LEGACY_FALLBACK_BUS_ID` + `console.error` contract as `SoundEmitterComponentContext.#resolveBus`
|
|
431
|
+
— a converted description must never throw at first play. Then remove the `SoundEmitter`.
|
|
432
|
+
- For each entity with `SoundController`: build an `AudioEventTrigger` (per rule: random track
|
|
433
|
+
list → `RandomContainerAudioClip` of `SampleAudioClip`s, `loop`, `volume`→child `gainDb`,
|
|
434
|
+
`channel`→`busId` with the same fallback), remove the `SoundController`.
|
|
435
|
+
- Drop `track.time` (Part I §4: it was never restored into playback anyway) and `panningModel`
|
|
436
|
+
from binary sources (never serialized).
|
|
437
|
+
2. Spec, black-box: hand-author v2 bytes with the `SoundEmitterSerializationAdapter` (and a
|
|
438
|
+
`SoundController` payload), deserialize into a dataset, convert, assert the resulting
|
|
439
|
+
`AudioEmitter`/`AudioEventTrigger` field-by-field (busId, is3D from the two flags per the
|
|
440
|
+
translator's `Spatialization || Attenuation` rule, distances, curve samples at 3 distances,
|
|
441
|
+
baked gains) and that no legacy component remains. Include: 0-track, 1-track looping ambient,
|
|
442
|
+
1-track one-shot effects, stale-channel fallback, and one N=2 Blend case.
|
|
443
|
+
3. Where it runs: meep exposes the function; the **consumer** calls it after dataset deserialization
|
|
444
|
+
(moh wires it in Phase 4 next to its load path; the editor shell can call it on scene load). Do
|
|
445
|
+
not auto-run it inside the deserializer — hosts own their load pipelines
|
|
446
|
+
(`populateEngineSerializationRegistry`'s contract).
|
|
447
|
+
|
|
448
|
+
## Phase 4 — moh migration (separate repo: `H:\git\moh`) — ⏭ SKIPPED, STILL REQUIRED
|
|
449
|
+
|
|
450
|
+
**Skipped on owner instruction; Phase 5 shipped ahead of it. This is now the blocking work before moh
|
|
451
|
+
can take a new meep pin** — every site below is a build break, not a behaviour change. This work is in
|
|
452
|
+
another repository with its own review flow — commit there per that repo's conventions, not meep's.
|
|
453
|
+
Sequence:
|
|
454
|
+
|
|
455
|
+
1. **Pin bump**: update the `mir-engine/meep` submodule to the Phase 3 meep commit; build moh —
|
|
456
|
+
nothing has been deleted yet, so this must compile clean before any moh edit.
|
|
457
|
+
2. **Registration** (`makeMirEngineConfig.js`): construct `new AudioEmitterSystem(assetManager, sound)`
|
|
458
|
+
and `new AudioEventTriggerSystem(assetManager, sound)`; **remove** `SoundEmitterSystem` and
|
|
459
|
+
`SoundControllerSystem` rows (`:169-170`). Keep `SoundListenerSystem` (`:171`) — it owns the
|
|
460
|
+
WebAudio listener orientation and is untouched by this retirement. With the legacy system gone,
|
|
461
|
+
`AudioEmitterSystem` is the sole `sopra.setListener` + `sopra.update` owner (resolves the
|
|
462
|
+
double-tick concern, F_sound finding 3).
|
|
463
|
+
3. **Class registry** (`GameClassRegistry.js:74`): register `AudioEmitter` (+ `AudioEventTrigger`);
|
|
464
|
+
keep `"component.SoundEmitter"` while the frozen reader exists.
|
|
465
|
+
4. **Load path**: call `convertLegacySoundComponents(dataset)` after save/scene deserialization.
|
|
466
|
+
5. **Sliders** (`makeEngineOptionsModel.js:43-80`, D5): swap
|
|
467
|
+
`getSystem(SoundEmitterSystem).get/setChannelVolume(name)` →
|
|
468
|
+
`getSystem(AudioEmitterSystem).sopra.getBusVolume/setBusVolume(SopraDefaultBus.…)`. Semantics are
|
|
469
|
+
identical — the legacy methods were already 1-line proxies onto these buses.
|
|
470
|
+
6. **Per-file ports** (order free; each is small):
|
|
471
|
+
`GameSounds.js` → named `EventDescription`s (keep export names); `StrategySceneGUI`,
|
|
472
|
+
`WorldEventManager` → `createSound({event})`; `TitleScene`, `injectMusic`, `injectEnemies`,
|
|
473
|
+
`CombatUnitEntityDecorator` → author `AudioEmitter`s (looping 3D ambience becomes spatially
|
|
474
|
+
managed for free — set `maxInstances` generously on crowd ambience per the
|
|
475
|
+
`AudioEmitterSystem.js:24-28` budget note); `UnitMaker` → `AudioEventTrigger` (drop the empty
|
|
476
|
+
hurt `SoundEmitter` entirely); `CombatEndMusicProcess` → keep locating the music entity, swap by
|
|
477
|
+
removing/re-adding the `AudioEmitter` with the new event, or `sopra.crossfade` if it exists by
|
|
478
|
+
then (sopra plan §14.2#5); `StoryManager`/`StoryPage`/`SoundActionProcessor` → story audio as
|
|
479
|
+
`EventDescription`s + `createSound({event})` + `stopAudioEmitterAndNotifyOnceFinished`;
|
|
480
|
+
`SoundEmitterVolumeBehavior` → an `AudioEmitter.volume` variant;
|
|
481
|
+
`DevelopmentOptions`/`resetSoundEmitterTracks` → traverse `AudioEmitter` (a "restart" =
|
|
482
|
+
remove+re-add the component, which re-links cleanly per the `AudioEmitter.event` JSDoc);
|
|
483
|
+
`testEffect.js` + the two specs → native registrations/assertions;
|
|
484
|
+
`probeShadeSymbolicDisplays.js` → probe the `AudioEmitter` display.
|
|
485
|
+
7. **Verification**: moh's own suite, then a manual playtest checklist — title music plays; sliders
|
|
486
|
+
move Effects/Music/Ambient audibly and persist; unit hurt sounds on `'health-reduced'`; combat-end
|
|
487
|
+
music swap; dialogue plays and stops on skip; an old save loads with music/ambience audible.
|
|
488
|
+
|
|
489
|
+
## Phase 5 — deletion (meep, breaking — D2/D6, owner sign-off) — ✅ DONE
|
|
490
|
+
|
|
491
|
+
**Ran ahead of Phase 4 on owner instruction.** One commit —
|
|
492
|
+
`refactor(sound)!: retire SoundEmitter behavioural path` — plus a version bump.
|
|
493
|
+
|
|
494
|
+
1. Delete: `SoundEmitterSystem.js` (move the `SoundEmitterChannels` enum's remaining users to
|
|
495
|
+
`SopraDefaultBus` first — after Phase 2/4 there should be none), `SoundEmitterComponentContext.js`,
|
|
496
|
+
`SoundControllerSystem.js`, `SoundController.js`, the three `SoundEmitterSystem.*spec.js`, the
|
|
497
|
+
editor's two legacy display registrations + `SoundEmitterSymbolicDisplay.js` + its spec cases, the
|
|
498
|
+
legacy branch in `AnimatedActions`, the `SoundEmitter` shutdown handler in `hideEntityGracefully`,
|
|
499
|
+
and `createSound`'s `{track}` branch.
|
|
500
|
+
2. Reduce `SoundEmitter`/`SoundTrack` to frozen **data-only** readers per D2: strip `__soundRuntime`,
|
|
501
|
+
the fade/stop plumbing, the throwing `nodes` getters, `SoundTrack`'s live-seek/`on.ended` wiring —
|
|
502
|
+
keep fields + `fromJSON`/`toJSON` + `typeName`. Relocate them with the v2 adapter + both upgraders
|
|
503
|
+
next to the converter under `sopra/legacy/` (moh no longer deep-imports them after Phase 4; verify
|
|
504
|
+
with a grep in moh before moving). They stay **registered** in
|
|
505
|
+
`populateEngineSerializationRegistry` — old bytes must keep deserializing, feeding the converter.
|
|
506
|
+
3. Sweep docs: mark §9's remaining items done in `sopra/IMPLEMENTATION_PLAN.md`; update
|
|
507
|
+
`sopra/README.md`, `SERIALIZATION_COVERAGE.md` (upgraders list), the `F_sound.md` strangler table;
|
|
508
|
+
update this file's status line.
|
|
509
|
+
4. Bump `package.json` per D6 with a changelog note: what was deleted, the converter entry point, the
|
|
510
|
+
enum replacement (`SoundEmitterChannels` → `SopraDefaultBus`).
|
|
511
|
+
5. Full suite + editor suite green; then the Definition of Done below.
|
|
512
|
+
|
|
513
|
+
## Phase 6 — follow-ups (file, don't do)
|
|
514
|
+
|
|
515
|
+
- `EventInstance`-level crossfade (`sopra.crossfade`) if Phase 4 chose the remove/re-add music swap.
|
|
516
|
+
- `F_sound.md` finding 12 (unify `#play`/`#promote` play-spec) — now the only remaining play-options
|
|
517
|
+
duplication, entirely inside the native path.
|
|
518
|
+
- Delete the dormant `material/` subsystem (audit D9) — unrelated surface, same "three generations"
|
|
519
|
+
root cause, now the last legacy generation standing.
|
|
520
|
+
|
|
521
|
+
## Definition of done
|
|
522
|
+
|
|
523
|
+
All of the following, from the meep root, must hold after Phase 5:
|
|
524
|
+
|
|
525
|
+
```bash
|
|
526
|
+
# no behavioural imports of the legacy cluster outside the quarantined legacy/ + converter
|
|
527
|
+
grep -rn "ecs/emitter/SoundEmitter" src editor | grep -v "sopra/legacy" | grep -v "\.md" # → empty
|
|
528
|
+
grep -rn "SoundControllerSystem\|SoundEmitterSystem" src editor | grep -v "\.md" # → empty
|
|
529
|
+
# native path is the registered one
|
|
530
|
+
grep -n "AudioEmitterSerializationAdapter\|AudioEventTriggerSerializationAdapter" src/engine/ecs/storage/populateEngineSerializationRegistry.js
|
|
531
|
+
# suites green
|
|
532
|
+
npm test && npx vitest run editor
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
…and in moh: no imports under `meep/src/engine/sound/ecs/emitter/` or of `SoundControllerSystem`
|
|
536
|
+
anywhere in `app/src`, an old save loads and sounds, and the sliders work.
|
|
@@ -7,7 +7,7 @@ export default SoundEngine;
|
|
|
7
7
|
declare class SoundEngine {
|
|
8
8
|
/**
|
|
9
9
|
* The sopra (FMOD/Wwise-style) engine, created and owned here once the AssetManager-backed
|
|
10
|
-
* buffer provider is available (see {@link obtainSopra}, called from
|
|
10
|
+
* buffer provider is available (see {@link obtainSopra}, called from the sound systems).
|
|
11
11
|
* @type {SopraEngine|null}
|
|
12
12
|
*/
|
|
13
13
|
sopra: SopraEngine | null;
|
|
@@ -20,7 +20,7 @@ declare class SoundEngine {
|
|
|
20
20
|
*
|
|
21
21
|
* Idempotent: the SopraEngine is a singleton on the SoundEngine, so the first caller creates it and
|
|
22
22
|
* later callers reuse it (the `bufferProvider` of later calls is ignored). This lets multiple
|
|
23
|
-
* systems — e.g.
|
|
23
|
+
* systems — e.g. AudioEmitterSystem and AudioEventTriggerSystem — share one engine.
|
|
24
24
|
* @param {BufferProvider} bufferProvider
|
|
25
25
|
* @returns {SopraEngine}
|
|
26
26
|
*/
|