@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.
Files changed (846) hide show
  1. package/editor/process/SymbolicDisplayProcess.js +106 -106
  2. package/editor/process/symbolic/{SoundEmitterSymbolicDisplay.js → AudioEmitterSymbolicDisplay.js} +67 -57
  3. package/package.json +94 -94
  4. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +110 -102
  5. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts +54 -0
  6. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
  7. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +10 -3
  8. package/src/engine/EntityCreator.d.ts +19 -11
  9. package/src/engine/EntityCreator.d.ts.map +1 -1
  10. package/src/engine/EntityCreator.js +116 -94
  11. package/src/engine/achievements/AchievementManager.d.ts.map +1 -1
  12. package/src/engine/achievements/AchievementManager.js +437 -433
  13. package/src/engine/animation/AnimatedActions.d.ts +6 -1
  14. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  15. package/src/engine/animation/AnimatedActions.js +111 -81
  16. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  17. package/src/engine/animation/AnimationUtils.js +234 -252
  18. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +275 -269
  19. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  20. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +26 -5
  21. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +1 -1
  22. package/src/engine/ecs/util/hideEntityGracefully.js +196 -208
  23. package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts +3 -1
  24. package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts.map +1 -1
  25. package/src/engine/intelligence/behavior/primitive/ActionBehavior.js +4 -2
  26. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +536 -0
  27. package/src/engine/sound/SoundEngine.d.ts +2 -2
  28. package/src/engine/sound/SoundEngine.js +124 -124
  29. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +20 -0
  30. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  31. package/src/engine/sound/ecs/audio/AudioEmitter.js +25 -2
  32. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +6 -6
  33. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  34. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +338 -314
  35. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +143 -0
  36. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -0
  37. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +191 -0
  38. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts +33 -0
  39. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -0
  40. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +81 -0
  41. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +65 -0
  42. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -0
  43. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +184 -0
  44. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +999 -993
  45. package/src/engine/sound/sopra/README.md +644 -643
  46. package/src/engine/sound/sopra/SopraEngine.d.ts +2 -2
  47. package/src/engine/sound/sopra/SopraEngine.js +432 -432
  48. package/src/engine/sound/sopra/legacy/SoundAttenuationFunction.d.ts.map +1 -0
  49. package/src/engine/sound/{ecs → sopra/legacy}/SoundController.d.ts +3 -3
  50. package/src/engine/sound/sopra/legacy/SoundController.d.ts.map +1 -0
  51. package/src/engine/sound/{ecs → sopra/legacy}/SoundController.js +176 -176
  52. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitter.d.ts +11 -27
  53. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -0
  54. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitter.js +352 -382
  55. package/src/engine/sound/sopra/legacy/SoundEmitterFlags.d.ts.map +1 -0
  56. package/src/engine/sound/sopra/legacy/SoundEmitterSerializationAdapter.d.ts.map +1 -0
  57. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.d.ts.map +1 -1
  58. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.d.ts.map +1 -1
  59. package/src/engine/sound/sopra/legacy/SoundPanningModelType.d.ts.map +1 -0
  60. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrack.d.ts +11 -55
  61. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -0
  62. package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrack.js +278 -357
  63. package/src/engine/sound/sopra/legacy/SoundTrackFlags.d.ts.map +1 -0
  64. package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.d.ts +34 -0
  65. package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.d.ts.map +1 -0
  66. package/src/engine/sound/sopra/legacy/convertLegacySoundComponents.js +279 -0
  67. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +3 -3
  68. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -1
  69. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +122 -122
  70. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  71. package/src/shade/device/mock/SoftwareGPUDevice.js +7 -1
  72. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  73. package/src/shade/device/timing/GPUTimerArray.js +10 -0
  74. package/src/shade/playground/add_random_meshes.d.ts +19 -3
  75. package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
  76. package/src/shade/playground/add_random_meshes.js +132 -84
  77. package/src/shade/playground/bvh_repro/README.md +57 -0
  78. package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts +33 -0
  79. package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts.map +1 -0
  80. package/src/shade/playground/bvh_repro/bvh_repro_device.js +90 -0
  81. package/src/shade/playground/bvh_repro/index.html +124 -0
  82. package/src/shade/playground/bvh_repro/main.d.ts.map +1 -0
  83. package/src/shade/playground/bvh_repro/main.js +254 -0
  84. package/src/shade/playground/load_default_environment.d.ts +10 -1
  85. package/src/shade/playground/load_default_environment.d.ts.map +1 -1
  86. package/src/shade/playground/load_default_environment.js +44 -20
  87. package/src/shade/playground/make_playground_asset_manager.d.ts +16 -0
  88. package/src/shade/playground/make_playground_asset_manager.d.ts.map +1 -0
  89. package/src/shade/playground/make_playground_asset_manager.js +33 -0
  90. package/src/shade/playground/skinned_blas_refit/README.md +103 -0
  91. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +47 -0
  92. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -0
  93. package/src/shade/playground/skinned_blas_refit/add_floor.js +71 -0
  94. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts +28 -0
  95. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -0
  96. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +745 -0
  97. package/src/shade/playground/skinned_blas_refit/flat_environment.d.ts +30 -0
  98. package/src/shade/playground/skinned_blas_refit/flat_environment.d.ts.map +1 -0
  99. package/src/shade/playground/skinned_blas_refit/flat_environment.js +67 -0
  100. package/src/shade/playground/skinned_blas_refit/index.html +168 -0
  101. package/src/shade/playground/skinned_blas_refit/main.d.ts +8 -0
  102. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -0
  103. package/src/shade/playground/skinned_blas_refit/main.js +502 -0
  104. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +81 -0
  105. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -0
  106. package/src/shade/playground/skinned_blas_refit/place_character.js +116 -0
  107. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +21 -0
  108. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -0
  109. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +104 -0
  110. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts +23 -0
  111. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -0
  112. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +94 -0
  113. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +26 -0
  114. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -0
  115. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +134 -0
  116. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +40 -0
  117. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -0
  118. package/src/shade/playground/skinned_blas_refit/sweep_views.js +135 -0
  119. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts +31 -0
  120. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -0
  121. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +240 -0
  122. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +20 -0
  123. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -0
  124. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -0
  125. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +50 -0
  126. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -0
  127. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +366 -0
  128. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +17 -0
  129. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -0
  130. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -0
  131. package/src/shade/playground/sponza_path_trace/README.md +57 -0
  132. package/src/shade/playground/sponza_path_trace/index.html +164 -0
  133. package/src/shade/playground/sponza_path_trace/main.d.ts +8 -0
  134. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -0
  135. package/src/shade/playground/sponza_path_trace/main.js +363 -0
  136. package/src/shade/renderer/Renderer.d.ts +16 -0
  137. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  138. package/src/shade/renderer/Renderer.js +23 -4
  139. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +5 -1
  140. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  141. package/src/shade/renderer/animation/GPUAnimationManager.js +28 -3
  142. package/src/shade/renderer/animation/Skin.d.ts +9 -7
  143. package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
  144. package/src/shade/renderer/animation/Skin.js +9 -7
  145. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts +35 -0
  146. package/src/shade/renderer/animation/compute_skin_world_bounds.d.ts.map +1 -0
  147. package/src/shade/renderer/animation/compute_skin_world_bounds.js +146 -0
  148. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  149. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +41 -0
  150. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  151. package/src/shade/renderer/geometry/GPUGeometryManager.js +65 -15
  152. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +78 -7
  153. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  154. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +302 -77
  155. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +18 -6
  156. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +19 -6
  158. package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.d.ts +51 -0
  159. package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.d.ts.map +1 -0
  160. package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.js +260 -0
  161. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +23 -0
  162. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -0
  163. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +82 -0
  164. package/src/shade/renderer/geometry/bvh/record_blas_refit.d.ts +25 -0
  165. package/src/shade/renderer/geometry/bvh/record_blas_refit.d.ts.map +1 -0
  166. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -0
  167. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts +30 -0
  168. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +122 -0
  170. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +55 -0
  171. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts.map +1 -0
  172. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -0
  173. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +37 -0
  174. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -0
  175. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +45 -0
  176. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -0
  177. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +201 -0
  178. package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.d.ts +88 -0
  179. package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.d.ts.map +1 -0
  180. package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.js +233 -0
  181. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +18 -0
  182. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -0
  183. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +38 -0
  184. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +16 -0
  185. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -0
  186. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +79 -0
  187. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +16 -0
  188. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -0
  189. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +49 -0
  190. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +43 -0
  191. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -0
  192. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -0
  193. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +24 -0
  194. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -0
  195. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +143 -0
  196. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +17 -0
  197. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -0
  198. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +83 -0
  199. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts +24 -0
  200. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -0
  201. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +141 -0
  202. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +31 -0
  203. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -0
  204. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +422 -0
  205. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
  206. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +1 -2
  207. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +9 -0
  208. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -0
  209. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +23 -0
  210. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +18 -0
  211. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -0
  212. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +32 -0
  213. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.d.ts +27 -0
  214. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.d.ts.map +1 -0
  215. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_rank.js +41 -0
  216. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.d.ts +25 -0
  217. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.d.ts.map +1 -0
  218. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_workgroup_scan.js +74 -0
  219. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +71 -0
  220. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -0
  221. package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -0
  222. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +37 -0
  223. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -0
  224. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +197 -0
  225. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +16 -0
  226. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -0
  227. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +85 -0
  228. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +15 -0
  229. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -0
  230. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +192 -0
  231. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +12 -0
  232. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -0
  233. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +188 -0
  234. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +16 -4
  235. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  236. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +235 -24
  237. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  238. package/src/shade/renderer/scene/GPUSceneContext.js +15 -3
  239. package/src/shade/renderer/scene/SkinnedMesh.d.ts +57 -11
  240. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
  241. package/src/shade/renderer/scene/SkinnedMesh.js +111 -11
  242. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts +22 -0
  243. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -0
  244. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +145 -0
  245. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +18 -0
  246. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -0
  247. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +364 -0
  248. package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.d.ts +9 -1
  249. package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.d.ts.map +1 -1
  250. package/src/shade/renderer/shader/chunk/binary/chunk_split_by_3.js +29 -21
  251. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.d.ts +22 -0
  252. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.d.ts.map +1 -0
  253. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_v3_morton_encode.js +31 -0
  254. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.d.ts.map +1 -1
  255. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.js +87 -39
  256. package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.d.ts +17 -0
  257. package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.d.ts.map +1 -0
  258. package/src/shade/renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.js +40 -0
  259. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +15 -0
  260. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -0
  261. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +52 -0
  262. package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.d.ts +9 -0
  263. package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.d.ts.map +1 -1
  264. package/src/shade/renderer/shader/chunk/geometry/ray/RAY_STRUCT.js +9 -0
  265. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.d.ts +20 -0
  266. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.d.ts.map +1 -1
  267. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_transform_m4.js +52 -34
  268. package/src/shade/renderer/texture/virtual/README.md +255 -276
  269. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  270. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -2
  271. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  272. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +83 -0
  273. package/src/view/interaction/InterfaceCommand.d.ts +8 -8
  274. package/src/view/interaction/InterfaceCommand.d.ts.map +1 -1
  275. package/src/view/interaction/InterfaceCommand.js +146 -146
  276. package/src/view/interaction/createInterfaceCommandButton.d.ts.map +1 -1
  277. package/src/view/interaction/createInterfaceCommandButton.js +115 -124
  278. package/src/engine/ecs/components/Timer.d.ts +0 -50
  279. package/src/engine/ecs/components/Timer.d.ts.map +0 -1
  280. package/src/engine/ecs/components/Timer.js +0 -80
  281. package/src/engine/ecs/evaluation/PointFitnessBinary.d.ts +0 -22
  282. package/src/engine/ecs/evaluation/PointFitnessBinary.d.ts.map +0 -1
  283. package/src/engine/ecs/evaluation/PointFitnessBinary.js +0 -33
  284. package/src/engine/ecs/evaluation/PointFitnessConstant.d.ts +0 -12
  285. package/src/engine/ecs/evaluation/PointFitnessConstant.d.ts.map +0 -1
  286. package/src/engine/ecs/evaluation/PointFitnessConstant.js +0 -27
  287. package/src/engine/ecs/evaluation/PointFitnessFunction.d.ts +0 -17
  288. package/src/engine/ecs/evaluation/PointFitnessFunction.d.ts.map +0 -1
  289. package/src/engine/ecs/evaluation/PointFitnessFunction.js +0 -20
  290. package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.d.ts +0 -12
  291. package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.d.ts.map +0 -1
  292. package/src/engine/ecs/evaluation/arithmetic/PointFitnessAdd.js +0 -27
  293. package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.d.ts +0 -12
  294. package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.d.ts.map +0 -1
  295. package/src/engine/ecs/evaluation/arithmetic/PointFitnessMultiply.js +0 -28
  296. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts +0 -50
  297. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts.map +0 -1
  298. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +0 -176
  299. package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.d.ts +0 -7
  300. package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.d.ts.map +0 -1
  301. package/src/engine/ecs/evaluation/json/deserializeFromJSON_PointFitnessFunction.js +0 -68
  302. package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.d.ts +0 -7
  303. package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.d.ts.map +0 -1
  304. package/src/engine/ecs/evaluation/json/serializeToJSON_PointFitnessFunction.js +0 -89
  305. package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.d.ts +0 -17
  306. package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.d.ts.map +0 -1
  307. package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +0 -60
  308. package/src/engine/ecs/systems/TimerSystem.d.ts +0 -10
  309. package/src/engine/ecs/systems/TimerSystem.d.ts.map +0 -1
  310. package/src/engine/ecs/systems/TimerSystem.js +0 -86
  311. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts +0 -13
  312. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts.map +0 -1
  313. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.js +0 -14
  314. package/src/engine/graphics/StandardFrameBuffers.d.ts +0 -7
  315. package/src/engine/graphics/StandardFrameBuffers.d.ts.map +0 -1
  316. package/src/engine/graphics/StandardFrameBuffers.js +0 -9
  317. package/src/engine/graphics/copy_transform_to_threejs_object.d.ts +0 -7
  318. package/src/engine/graphics/copy_transform_to_threejs_object.d.ts.map +0 -1
  319. package/src/engine/graphics/copy_transform_to_threejs_object.js +0 -12
  320. package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts +0 -42
  321. package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts.map +0 -1
  322. package/src/engine/graphics/ecs/light/binding/LightBinding.js +0 -133
  323. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts +0 -25
  324. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts.map +0 -1
  325. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.js +0 -90
  326. package/src/engine/graphics/ecs/light/binding/three/applyRotation.d.ts +0 -7
  327. package/src/engine/graphics/ecs/light/binding/three/applyRotation.d.ts.map +0 -1
  328. package/src/engine/graphics/ecs/light/binding/three/applyRotation.js +0 -24
  329. package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.d.ts +0 -7
  330. package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.d.ts.map +0 -1
  331. package/src/engine/graphics/ecs/light/binding/three/threeEnsureLightObject.js +0 -12
  332. package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.d.ts +0 -8
  333. package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.d.ts.map +0 -1
  334. package/src/engine/graphics/ecs/light/binding/three/threeMakeLight.js +0 -41
  335. package/src/engine/graphics/ecs/light/shadow/LightShadow.d.ts +0 -4
  336. package/src/engine/graphics/ecs/light/shadow/LightShadow.d.ts.map +0 -1
  337. package/src/engine/graphics/ecs/light/shadow/LightShadow.js +0 -4
  338. package/src/engine/graphics/ecs/light/shadow/ShadowManager.d.ts +0 -27
  339. package/src/engine/graphics/ecs/light/shadow/ShadowManager.d.ts.map +0 -1
  340. package/src/engine/graphics/ecs/light/shadow/ShadowManager.js +0 -53
  341. package/src/engine/graphics/ecs/light/shadow/ShadowMap.d.ts +0 -8
  342. package/src/engine/graphics/ecs/light/shadow/ShadowMap.d.ts.map +0 -1
  343. package/src/engine/graphics/ecs/light/shadow/ShadowMap.js +0 -7
  344. package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts +0 -14
  345. package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts.map +0 -1
  346. package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.js +0 -62
  347. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts +0 -30
  348. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +0 -1
  349. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +0 -77
  350. package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.d.ts +0 -13
  351. package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.d.ts.map +0 -1
  352. package/src/engine/graphics/ecs/light/shadow/setShadowCameraDimensionsDiscrete.js +0 -43
  353. package/src/engine/graphics/ecs/light/three/light2type.d.ts +0 -8
  354. package/src/engine/graphics/ecs/light/three/light2type.d.ts.map +0 -1
  355. package/src/engine/graphics/ecs/light/three/light2type.js +0 -20
  356. package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.d.ts +0 -7
  357. package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.d.ts.map +0 -1
  358. package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.js +0 -13
  359. package/src/engine/graphics/particles/node-based/codegen/CodeContext.d.ts +0 -20
  360. package/src/engine/graphics/particles/node-based/codegen/CodeContext.d.ts.map +0 -1
  361. package/src/engine/graphics/particles/node-based/codegen/CodeContext.js +0 -47
  362. package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.d.ts +0 -12
  363. package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.d.ts.map +0 -1
  364. package/src/engine/graphics/particles/node-based/codegen/CodeGenerator.js +0 -19
  365. package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.d.ts +0 -18
  366. package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.d.ts.map +0 -1
  367. package/src/engine/graphics/particles/node-based/codegen/glsl/GLSLCodeGenerator.js +0 -249
  368. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.d.ts +0 -7
  369. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.d.ts.map +0 -1
  370. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeInputName.js +0 -8
  371. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.d.ts +0 -7
  372. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.d.ts.map +0 -1
  373. package/src/engine/graphics/particles/node-based/codegen/glsl/genAttributeOutputName.js +0 -8
  374. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts +0 -14
  375. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts.map +0 -1
  376. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.js +0 -20
  377. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.d.ts +0 -3
  378. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.d.ts.map +0 -1
  379. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_curlNoise.js +0 -58
  380. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.d.ts +0 -3
  381. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.d.ts.map +0 -1
  382. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/curl/glslm_snoiseVector3.js +0 -44
  383. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.d.ts +0 -3
  384. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.d.ts.map +0 -1
  385. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v3.js +0 -28
  386. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.d.ts +0 -3
  387. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.d.ts.map +0 -1
  388. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_mod289_v4.js +0 -28
  389. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.d.ts +0 -3
  390. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.d.ts.map +0 -1
  391. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_permute.js +0 -39
  392. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.d.ts +0 -3
  393. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.d.ts.map +0 -1
  394. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_snoise.js +0 -124
  395. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.d.ts +0 -3
  396. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.d.ts.map +0 -1
  397. package/src/engine/graphics/particles/node-based/codegen/glsl/modules/noise/simplex/3d/glslm_tylorInvSqrt.js +0 -30
  398. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.d.ts +0 -64
  399. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.d.ts.map +0 -1
  400. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModule.js +0 -131
  401. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.d.ts +0 -32
  402. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.d.ts.map +0 -1
  403. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleReference.js +0 -62
  404. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.d.ts +0 -46
  405. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.d.ts.map +0 -1
  406. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionModuleRegistry.js +0 -272
  407. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.d.ts +0 -28
  408. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.d.ts.map +0 -1
  409. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionParameterSpecification.js +0 -57
  410. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.d.ts +0 -32
  411. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.d.ts.map +0 -1
  412. package/src/engine/graphics/particles/node-based/codegen/modules/FunctionSignature.js +0 -55
  413. package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.d.ts +0 -34
  414. package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.d.ts.map +0 -1
  415. package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.js +0 -178
  416. package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts +0 -7
  417. package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts.map +0 -1
  418. package/src/engine/graphics/particles/node-based/nodes/FloatConstant.js +0 -31
  419. package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.d.ts +0 -13
  420. package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.d.ts.map +0 -1
  421. package/src/engine/graphics/particles/node-based/nodes/ParticleDataTypes.js +0 -13
  422. package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts +0 -7
  423. package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts.map +0 -1
  424. package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.js +0 -26
  425. package/src/engine/graphics/particles/node-based/nodes/ReadPosition.d.ts +0 -4
  426. package/src/engine/graphics/particles/node-based/nodes/ReadPosition.d.ts.map +0 -1
  427. package/src/engine/graphics/particles/node-based/nodes/ReadPosition.js +0 -5
  428. package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts +0 -6
  429. package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts.map +0 -1
  430. package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.js +0 -14
  431. package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts +0 -37
  432. package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts.map +0 -1
  433. package/src/engine/graphics/particles/node-based/nodes/ShaderNode.js +0 -73
  434. package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts +0 -7
  435. package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts.map +0 -1
  436. package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.js +0 -30
  437. package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts +0 -7
  438. package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts.map +0 -1
  439. package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.js +0 -30
  440. package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts +0 -7
  441. package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts.map +0 -1
  442. package/src/engine/graphics/particles/node-based/nodes/Vector3Split.js +0 -32
  443. package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts +0 -6
  444. package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts.map +0 -1
  445. package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.js +0 -15
  446. package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts +0 -7
  447. package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts.map +0 -1
  448. package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.js +0 -27
  449. package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts +0 -7
  450. package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts.map +0 -1
  451. package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.js +0 -25
  452. package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts +0 -7
  453. package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts.map +0 -1
  454. package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.js +0 -26
  455. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts +0 -7
  456. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts.map +0 -1
  457. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.js +0 -25
  458. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts +0 -7
  459. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts.map +0 -1
  460. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.js +0 -25
  461. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts +0 -7
  462. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts.map +0 -1
  463. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.js +0 -25
  464. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts +0 -7
  465. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts.map +0 -1
  466. package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.js +0 -25
  467. package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts +0 -7
  468. package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts.map +0 -1
  469. package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.js +0 -39
  470. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts +0 -39
  471. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts.map +0 -1
  472. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.js +0 -45
  473. package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.d.ts +0 -9
  474. package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.d.ts.map +0 -1
  475. package/src/engine/graphics/particles/node-based/particle/GeometryAttributes.js +0 -10
  476. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.d.ts +0 -13
  477. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.d.ts.map +0 -1
  478. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeBinding.js +0 -14
  479. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts +0 -50
  480. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts.map +0 -1
  481. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.js +0 -47
  482. package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.d.ts +0 -51
  483. package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.d.ts.map +0 -1
  484. package/src/engine/graphics/particles/node-based/particle/ParticleSpecification.js +0 -93
  485. package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.d.ts +0 -6
  486. package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.d.ts.map +0 -1
  487. package/src/engine/graphics/particles/node-based/populateFunctionModuleRegistry.js +0 -23
  488. package/src/engine/graphics/particles/node-based/populateNodeRegistry.d.ts +0 -7
  489. package/src/engine/graphics/particles/node-based/populateNodeRegistry.d.ts.map +0 -1
  490. package/src/engine/graphics/particles/node-based/populateNodeRegistry.js +0 -48
  491. package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.d.ts +0 -21
  492. package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.d.ts.map +0 -1
  493. package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.js +0 -35
  494. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.d.ts +0 -20
  495. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.d.ts.map +0 -1
  496. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderCommand.js +0 -35
  497. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.d.ts +0 -14
  498. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.d.ts.map +0 -1
  499. package/src/engine/graphics/particles/node-based/rendering/ParticleRenderSpecification.js +0 -17
  500. package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.d.ts +0 -5
  501. package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.d.ts.map +0 -1
  502. package/src/engine/graphics/particles/node-based/rendering/billboard/ParticleBillboardShader.js +0 -150
  503. package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.d.ts +0 -55
  504. package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.d.ts.map +0 -1
  505. package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.js +0 -105
  506. package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.d.ts +0 -49
  507. package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.d.ts.map +0 -1
  508. package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.js +0 -103
  509. package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.d.ts +0 -4
  510. package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.d.ts.map +0 -1
  511. package/src/engine/graphics/particles/node-based/simulation/GLSLParticleSimulator.js +0 -6
  512. package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.d.ts +0 -83
  513. package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.d.ts.map +0 -1
  514. package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.js +0 -188
  515. package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.d.ts +0 -123
  516. package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.d.ts.map +0 -1
  517. package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.js +0 -415
  518. package/src/engine/graphics/render/buffer/FrameBufferManager.d.ts +0 -71
  519. package/src/engine/graphics/render/buffer/FrameBufferManager.d.ts.map +0 -1
  520. package/src/engine/graphics/render/buffer/FrameBufferManager.js +0 -229
  521. package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.d.ts +0 -22
  522. package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.d.ts.map +0 -1
  523. package/src/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.js +0 -84
  524. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts +0 -33
  525. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts.map +0 -1
  526. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.js +0 -61
  527. package/src/engine/graphics/render/forward_plus/SPECIFICATION.md +0 -155
  528. package/src/engine/graphics/render/forward_plus/assign_cluster.d.ts +0 -29
  529. package/src/engine/graphics/render/forward_plus/assign_cluster.d.ts.map +0 -1
  530. package/src/engine/graphics/render/forward_plus/assign_cluster.js +0 -124
  531. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.d.ts +0 -7
  532. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.d.ts.map +0 -1
  533. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash.js +0 -17
  534. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.d.ts +0 -7
  535. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.d.ts.map +0 -1
  536. package/src/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +0 -17
  537. package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.d.ts +0 -9
  538. package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.d.ts.map +0 -1
  539. package/src/engine/graphics/render/forward_plus/cluster/read_plane_pair.js +0 -29
  540. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.d.ts +0 -12
  541. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.d.ts.map +0 -1
  542. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.js +0 -43
  543. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts +0 -8
  544. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts.map +0 -1
  545. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.js +0 -68
  546. package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.d.ts +0 -4
  547. package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.d.ts.map +0 -1
  548. package/src/engine/graphics/render/forward_plus/debug/createLayerSwitcher.js +0 -46
  549. package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.d.ts +0 -14
  550. package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.d.ts.map +0 -1
  551. package/src/engine/graphics/render/forward_plus/debug/createScreenGrid.js +0 -327
  552. package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.d.ts +0 -2
  553. package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.d.ts.map +0 -1
  554. package/src/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +0 -1
  555. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.d.ts +0 -2
  556. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.d.ts.map +0 -1
  557. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +0 -40
  558. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.d.ts +0 -2
  559. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.d.ts.map +0 -1
  560. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.js +0 -74
  561. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.d.ts +0 -2
  562. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.d.ts.map +0 -1
  563. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +0 -55
  564. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.d.ts +0 -2
  565. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.d.ts.map +0 -1
  566. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_LOAD_METADATA.js +0 -11
  567. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.d.ts +0 -2
  568. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.d.ts.map +0 -1
  569. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +0 -34
  570. package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.d.ts +0 -7
  571. package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.d.ts.map +0 -1
  572. package/src/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +0 -60
  573. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.d.ts +0 -7
  574. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.d.ts.map +0 -1
  575. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +0 -38
  576. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.d.ts +0 -7
  577. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.d.ts.map +0 -1
  578. package/src/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +0 -30
  579. package/src/engine/graphics/render/forward_plus/model/Decal.d.ts +0 -51
  580. package/src/engine/graphics/render/forward_plus/model/Decal.d.ts.map +0 -1
  581. package/src/engine/graphics/render/forward_plus/model/Decal.js +0 -133
  582. package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.d.ts +0 -16
  583. package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.d.ts.map +0 -1
  584. package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.js +0 -18
  585. package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.d.ts +0 -7
  586. package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.d.ts.map +0 -1
  587. package/src/engine/graphics/render/forward_plus/plugin/isLitMaterial.js +0 -8
  588. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts +0 -10
  589. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts.map +0 -1
  590. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.js +0 -65
  591. package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.d.ts +0 -7
  592. package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.d.ts.map +0 -1
  593. package/src/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +0 -8
  594. package/src/engine/graphics/render/forward_plus/query/cube_mapping.d.ts +0 -11
  595. package/src/engine/graphics/render/forward_plus/query/cube_mapping.d.ts.map +0 -1
  596. package/src/engine/graphics/render/forward_plus/query/cube_mapping.js +0 -38
  597. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts +0 -21
  598. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts.map +0 -1
  599. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +0 -96
  600. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts +0 -22
  601. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts.map +0 -1
  602. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +0 -44
  603. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts +0 -11
  604. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts.map +0 -1
  605. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +0 -169
  606. package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.d.ts +0 -9
  607. package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.d.ts.map +0 -1
  608. package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +0 -33
  609. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +0 -2
  610. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +0 -1
  611. package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +0 -2
  612. package/src/engine/graphics/render/forward_plus/sort_decal_data.d.ts +0 -9
  613. package/src/engine/graphics/render/forward_plus/sort_decal_data.d.ts.map +0 -1
  614. package/src/engine/graphics/render/forward_plus/sort_decal_data.js +0 -102
  615. package/src/engine/graphics/render/forward_plus/testClusterEquality.d.ts +0 -10
  616. package/src/engine/graphics/render/forward_plus/testClusterEquality.d.ts.map +0 -1
  617. package/src/engine/graphics/render/forward_plus/testClusterEquality.js +0 -22
  618. package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.d.ts +0 -19
  619. package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.d.ts.map +0 -1
  620. package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.js +0 -62
  621. package/src/engine/graphics/shaders/AlphaBlendShader.d.ts +0 -18
  622. package/src/engine/graphics/shaders/AlphaBlendShader.d.ts.map +0 -1
  623. package/src/engine/graphics/shaders/AlphaBlendShader.js +0 -42
  624. package/src/engine/graphics/shaders/ClearShader.d.ts +0 -8
  625. package/src/engine/graphics/shaders/ClearShader.d.ts.map +0 -1
  626. package/src/engine/graphics/shaders/ClearShader.js +0 -28
  627. package/src/engine/graphics/shaders/ScreenSpaceQuadShader.d.ts +0 -13
  628. package/src/engine/graphics/shaders/ScreenSpaceQuadShader.d.ts.map +0 -1
  629. package/src/engine/graphics/shaders/ScreenSpaceQuadShader.js +0 -38
  630. package/src/engine/graphics/shaders/ScreenSpaceShader.d.ts +0 -7
  631. package/src/engine/graphics/shaders/ScreenSpaceShader.d.ts.map +0 -1
  632. package/src/engine/graphics/shaders/ScreenSpaceShader.js +0 -102
  633. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts +0 -102
  634. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts.map +0 -1
  635. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.js +0 -277
  636. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts +0 -40
  637. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts.map +0 -1
  638. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.js +0 -57
  639. package/src/engine/graphics/shaders/glsl_gen_swizzled_read.d.ts +0 -8
  640. package/src/engine/graphics/shaders/glsl_gen_swizzled_read.d.ts.map +0 -1
  641. package/src/engine/graphics/shaders/glsl_gen_swizzled_read.js +0 -39
  642. package/src/engine/graphics/shadows/README.md +0 -6
  643. package/src/engine/graphics/shadows/vsm.glsl.d.ts +0 -3
  644. package/src/engine/graphics/shadows/vsm.glsl.d.ts.map +0 -1
  645. package/src/engine/graphics/shadows/vsm.glsl.js +0 -43
  646. package/src/engine/graphics/util/composeMatrix4.d.ts +0 -9
  647. package/src/engine/graphics/util/composeMatrix4.d.ts.map +0 -1
  648. package/src/engine/graphics/util/composeMatrix4.js +0 -13
  649. package/src/engine/graphics/util/threeUpdateMatrix.d.ts +0 -6
  650. package/src/engine/graphics/util/threeUpdateMatrix.d.ts.map +0 -1
  651. package/src/engine/graphics/util/threeUpdateMatrix.js +0 -14
  652. package/src/engine/graphics/util/threeUpdateTransform.d.ts +0 -6
  653. package/src/engine/graphics/util/threeUpdateTransform.d.ts.map +0 -1
  654. package/src/engine/graphics/util/threeUpdateTransform.js +0 -16
  655. package/src/engine/sound/ecs/SoundController.d.ts.map +0 -1
  656. package/src/engine/sound/ecs/SoundControllerSystem.d.ts +0 -23
  657. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +0 -1
  658. package/src/engine/sound/ecs/SoundControllerSystem.js +0 -103
  659. package/src/engine/sound/ecs/emitter/SoundAttenuationFunction.d.ts.map +0 -1
  660. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +0 -1
  661. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +0 -55
  662. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +0 -1
  663. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +0 -265
  664. package/src/engine/sound/ecs/emitter/SoundEmitterFlags.d.ts.map +0 -1
  665. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.d.ts.map +0 -1
  666. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +0 -88
  667. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +0 -1
  668. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +0 -159
  669. package/src/engine/sound/ecs/emitter/SoundPanningModelType.d.ts.map +0 -1
  670. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +0 -1
  671. package/src/engine/sound/ecs/emitter/SoundTrackFlags.d.ts.map +0 -1
  672. package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.d.ts +0 -8
  673. package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.d.ts.map +0 -1
  674. package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.js +0 -41
  675. package/src/shade/playground/FramePerformanceMonitor.d.ts +0 -114
  676. package/src/shade/playground/FramePerformanceMonitor.d.ts.map +0 -1
  677. package/src/shade/playground/FramePerformanceMonitor.js +0 -468
  678. package/src/shade/playground/add_random_lights.d.ts +0 -8
  679. package/src/shade/playground/add_random_lights.d.ts.map +0 -1
  680. package/src/shade/playground/add_random_lights.js +0 -50
  681. package/src/shade/playground/animation_prototype.d.ts +0 -24
  682. package/src/shade/playground/animation_prototype.d.ts.map +0 -1
  683. package/src/shade/playground/animation_prototype.js +0 -508
  684. package/src/shade/playground/animation_prototype_skinning.d.ts +0 -31
  685. package/src/shade/playground/animation_prototype_skinning.d.ts.map +0 -1
  686. package/src/shade/playground/animation_prototype_skinning.js +0 -647
  687. package/src/shade/playground/animation_prototype_stress.d.ts +0 -35
  688. package/src/shade/playground/animation_prototype_stress.d.ts.map +0 -1
  689. package/src/shade/playground/animation_prototype_stress.js +0 -765
  690. package/src/shade/playground/enable_picker.d.ts +0 -8
  691. package/src/shade/playground/enable_picker.d.ts.map +0 -1
  692. package/src/shade/playground/enable_picker.js +0 -60
  693. package/src/shade/playground/gltf_skinned_prototype.d.ts +0 -27
  694. package/src/shade/playground/gltf_skinned_prototype.d.ts.map +0 -1
  695. package/src/shade/playground/gltf_skinned_prototype.js +0 -560
  696. package/src/shade/playground/gltf_skinned_stress_prototype.d.ts +0 -24
  697. package/src/shade/playground/gltf_skinned_stress_prototype.d.ts.map +0 -1
  698. package/src/shade/playground/gltf_skinned_stress_prototype.js +0 -387
  699. package/src/shade/playground/gltf_viewer.d.ts +0 -2
  700. package/src/shade/playground/gltf_viewer.d.ts.map +0 -1
  701. package/src/shade/playground/gltf_viewer.js +0 -283
  702. package/src/shade/playground/main.d.ts.map +0 -1
  703. package/src/shade/playground/main.js +0 -2727
  704. package/src/shade/playground/make_animated_instances.d.ts +0 -9
  705. package/src/shade/playground/make_animated_instances.d.ts.map +0 -1
  706. package/src/shade/playground/make_animated_instances.js +0 -118
  707. package/src/shade/playground/prototype_virtual_texture.d.ts +0 -2
  708. package/src/shade/playground/prototype_virtual_texture.d.ts.map +0 -1
  709. package/src/shade/playground/prototype_virtual_texture.js +0 -274
  710. package/src/shade/playground/prototype_volumetrics_01.d.ts +0 -2
  711. package/src/shade/playground/prototype_volumetrics_01.d.ts.map +0 -1
  712. package/src/shade/playground/prototype_volumetrics_01.js +0 -206
  713. package/src/shade/playground/sample.d.ts +0 -2
  714. package/src/shade/playground/sample.d.ts.map +0 -1
  715. package/src/shade/playground/sample.js +0 -234
  716. package/src/shade/playground/sample_load_gltf.d.ts +0 -9
  717. package/src/shade/playground/sample_load_gltf.d.ts.map +0 -1
  718. package/src/shade/playground/sample_load_gltf.js +0 -103
  719. package/src/shade/playground/spread_node3d_grid.d.ts +0 -7
  720. package/src/shade/playground/spread_node3d_grid.d.ts.map +0 -1
  721. package/src/shade/playground/spread_node3d_grid.js +0 -20
  722. package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.d.ts +0 -24
  723. package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.d.ts.map +0 -1
  724. package/src/shade/renderer/geometry/bvh/GPUGeometryBVH.js +0 -88
  725. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.d.ts +0 -3
  726. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.d.ts.map +0 -1
  727. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_scan_add.js +0 -49
  728. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.d.ts +0 -3
  729. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.d.ts.map +0 -1
  730. package/src/shade/renderer/gpu_primitive/prefix_sum/v0/shader_exclusive_prefix_sum_scan.js +0 -93
  731. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.d.ts +0 -24
  732. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.d.ts.map +0 -1
  733. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdl.js +0 -119
  734. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.d.ts +0 -7
  735. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.d.ts.map +0 -1
  736. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_one_sweep_prefix_scan.js +0 -235
  737. package/src/shade/renderer/gpu_primitive/sort/NOTES.md +0 -5
  738. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.d.ts +0 -7
  739. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.d.ts.map +0 -1
  740. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_common.js +0 -136
  741. package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.d.ts +0 -18
  742. package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.d.ts.map +0 -1
  743. package/src/shade/renderer/gpu_primitive/sort/ffx/chunk_safe_load_uint4_umax.js +0 -108
  744. package/src/shade/renderer/gpu_primitive/sort/ffx/defs.d.ts +0 -35
  745. package/src/shade/renderer/gpu_primitive/sort/ffx/defs.d.ts.map +0 -1
  746. package/src/shade/renderer/gpu_primitive/sort/ffx/defs.js +0 -42
  747. package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.d.ts +0 -13
  748. package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.d.ts.map +0 -1
  749. package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.js +0 -116
  750. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.d.ts +0 -3
  751. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.d.ts.map +0 -1
  752. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_bit_histogram.js +0 -120
  753. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.d.ts +0 -3
  754. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.d.ts.map +0 -1
  755. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_distribute_part_sum_int4.js +0 -76
  756. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.d.ts +0 -3
  757. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.d.ts.map +0 -1
  758. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_partial.js +0 -125
  759. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.d.ts +0 -3
  760. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.d.ts.map +0 -1
  761. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scan_exclusive_uint4.js +0 -140
  762. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.d.ts +0 -3
  763. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.d.ts.map +0 -1
  764. package/src/shade/renderer/gpu_primitive/sort/ffx/shader_scatter_keys_and_values.js +0 -338
  765. package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.d.ts +0 -7
  766. package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.d.ts.map +0 -1
  767. package/src/shade/renderer/gpu_primitive/sort/gaussian_splatting/x.js +0 -261
  768. package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.d.ts +0 -3
  769. package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.d.ts.map +0 -1
  770. package/src/shade/renderer/gpu_primitive/sort/one_sweep/chunk_extract_digit.js +0 -14
  771. package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.d.ts +0 -25
  772. package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.d.ts.map +0 -1
  773. package/src/shade/renderer/gpu_primitive/sort/one_sweep/defs.js +0 -25
  774. package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.d.ts +0 -15
  775. package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.d.ts.map +0 -1
  776. package/src/shade/renderer/gpu_primitive/sort/one_sweep/graph_radix_sort.js +0 -192
  777. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.d.ts +0 -5
  778. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.d.ts.map +0 -1
  779. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_digit_binning_pass_pairs.js +0 -990
  780. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.d.ts +0 -5
  781. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.d.ts.map +0 -1
  782. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_global_histogram.js +0 -82
  783. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.d.ts +0 -3
  784. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.d.ts.map +0 -1
  785. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_init_sweep.js +0 -44
  786. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.d.ts +0 -5
  787. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.d.ts.map +0 -1
  788. package/src/shade/renderer/gpu_primitive/sort/one_sweep/shader_scan.js +0 -156
  789. package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.d.ts +0 -6
  790. package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.d.ts.map +0 -1
  791. package/src/shade/renderer/gpu_primitive/sort/one_sweep/test_radix_sort.js +0 -55
  792. package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.d.ts +0 -14
  793. package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.d.ts.map +0 -1
  794. package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.js +0 -110
  795. package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.d.ts +0 -12
  796. package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.d.ts.map +0 -1
  797. package/src/shade/renderer/gpu_primitive/sort/v4/graph_radix_sort.js +0 -74
  798. package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.d.ts +0 -3
  799. package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.d.ts.map +0 -1
  800. package/src/shade/renderer/gpu_primitive/sort/v4/shader_radix_sort.js +0 -125
  801. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.d.ts +0 -7
  802. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.d.ts.map +0 -1
  803. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_calculate_morton_code.js +0 -36
  804. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.d.ts +0 -7
  805. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.d.ts.map +0 -1
  806. package/src/shade/renderer/shader/chunk/bvh/morton/chunk_get_morton_codes_from_unit_coord.js +0 -54
  807. package/src/shade/renderer/shader/chunk/bvh/packed/NOTES.md +0 -19
  808. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.d.ts +0 -3
  809. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.d.ts.map +0 -1
  810. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_STRUCT.js +0 -9
  811. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.d.ts +0 -6
  812. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.d.ts.map +0 -1
  813. package/src/shade/renderer/shader/chunk/bvh/packed/PACKED_BVH_NODE_WORD_COUNT.js +0 -5
  814. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.d.ts +0 -8
  815. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.d.ts.map +0 -1
  816. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_make_f32_interval_f16_safe.js +0 -17
  817. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.d.ts +0 -3
  818. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.d.ts.map +0 -1
  819. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_pack_f32_interval_to_u32.js +0 -14
  820. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.d.ts +0 -3
  821. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.d.ts.map +0 -1
  822. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_from_unpacked_node.js +0 -27
  823. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.d.ts +0 -3
  824. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.d.ts.map +0 -1
  825. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_read_node.js +0 -31
  826. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.d.ts +0 -3
  827. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.d.ts.map +0 -1
  828. package/src/shade/renderer/shader/chunk/bvh/packed/chunk_packed_bvh_write_node.js +0 -25
  829. package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.d.ts +0 -3
  830. package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.d.ts.map +0 -1
  831. package/src/shade/renderer/shader/chunk/bvh/packed/shader_pack_blas.js +0 -42
  832. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundAttenuationFunction.d.ts +0 -0
  833. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundAttenuationFunction.js +0 -0
  834. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterFlags.d.ts +0 -0
  835. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterFlags.js +0 -0
  836. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationAdapter.d.ts +0 -0
  837. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationAdapter.js +0 -0
  838. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.d.ts +0 -0
  839. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_0_1.js +0 -0
  840. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.d.ts +0 -0
  841. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundEmitterSerializationUpgrader_1_2.js +0 -0
  842. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundPanningModelType.d.ts +0 -0
  843. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundPanningModelType.js +0 -0
  844. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrackFlags.d.ts +0 -0
  845. /package/src/engine/sound/{ecs/emitter → sopra/legacy}/SoundTrackFlags.js +0 -0
  846. /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 SoundEmitterSystem).
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. the legacy SoundEmitterSystem and the native AudioEmitterSystem — share one engine.
23
+ * systems — e.g. AudioEmitterSystem and AudioEventTriggerSystem — share one engine.
24
24
  * @param {BufferProvider} bufferProvider
25
25
  * @returns {SopraEngine}
26
26
  */