@woosh/meep-engine 2.169.6 → 2.170.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 (1552) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/Editor.d.ts +161 -65
  3. package/editor/Editor.d.ts.map +1 -1
  4. package/editor/Editor.js +669 -794
  5. package/editor/EditorCameraNavigation.d.ts +21 -0
  6. package/editor/EditorCameraNavigation.d.ts.map +1 -0
  7. package/editor/EditorCameraNavigation.js +191 -0
  8. package/editor/EditorKeyMap.d.ts +28 -0
  9. package/editor/EditorKeyMap.d.ts.map +1 -0
  10. package/editor/EditorKeyMap.js +182 -0
  11. package/editor/REWORK_PLAN_2026_08.md +692 -0
  12. package/editor/SelectionVisualizer.d.ts +48 -19
  13. package/editor/SelectionVisualizer.d.ts.map +1 -1
  14. package/editor/SelectionVisualizer.js +163 -156
  15. package/editor/actions/concrete/ActionUpdateTexture.d.ts +11 -11
  16. package/editor/actions/concrete/ArrayCopyAction.d.ts +19 -19
  17. package/editor/actions/concrete/ArrayCopyAction.d.ts.map +1 -1
  18. package/editor/actions/concrete/ArrayCopyAction.js +7 -7
  19. package/editor/actions/concrete/ComponentAddAction.d.ts +14 -14
  20. package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -1
  21. package/editor/actions/concrete/ComponentAddAction.js +6 -5
  22. package/editor/actions/concrete/ComponentRemoveAction.d.ts +10 -10
  23. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -1
  24. package/editor/actions/concrete/ComponentRemoveAction.js +10 -12
  25. package/editor/actions/concrete/EntityCreateAction.d.ts +17 -17
  26. package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -1
  27. package/editor/actions/concrete/EntityCreateAction.js +11 -14
  28. package/editor/actions/concrete/EntityRemoveAction.d.ts +10 -10
  29. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -1
  30. package/editor/actions/concrete/EntityRemoveAction.js +2 -1
  31. package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts +46 -46
  32. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts +37 -37
  33. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts.map +1 -1
  34. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.js +3 -1
  35. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts +22 -22
  36. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts.map +1 -1
  37. package/editor/actions/concrete/PaintTerrainOverlayAction.js +3 -3
  38. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +31 -18
  39. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -1
  40. package/editor/actions/concrete/PatchTerrainHeightAction.js +28 -9
  41. package/editor/actions/concrete/SelectionAddAction.d.ts +18 -18
  42. package/editor/actions/concrete/SelectionAddAction.d.ts.map +1 -1
  43. package/editor/actions/concrete/SelectionAddAction.js +2 -1
  44. package/editor/actions/concrete/SelectionClearAction.d.ts +8 -8
  45. package/editor/actions/concrete/SelectionClearAction.d.ts.map +1 -1
  46. package/editor/actions/concrete/SelectionClearAction.js +1 -4
  47. package/editor/actions/concrete/SelectionRemoveAction.d.ts +9 -9
  48. package/editor/actions/concrete/SelectionRemoveAction.d.ts.map +1 -1
  49. package/editor/actions/concrete/SelectionRemoveAction.js +2 -1
  50. package/editor/actions/concrete/TransformModifyAction.d.ts +16 -16
  51. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  52. package/editor/actions/concrete/TransformModifyAction.js +8 -8
  53. package/editor/actions/concrete/WriteGridValueAction.d.ts +13 -14
  54. package/editor/actions/concrete/WriteGridValueAction.d.ts.map +1 -1
  55. package/editor/actions/concrete/WriteGridValueAction.js +3 -3
  56. package/editor/camera/camera_framing.d.ts +30 -0
  57. package/editor/camera/camera_framing.d.ts.map +1 -0
  58. package/editor/camera/camera_framing.js +98 -0
  59. package/editor/clipboard.d.ts +19 -0
  60. package/editor/clipboard.d.ts.map +1 -0
  61. package/editor/clipboard.js +184 -0
  62. package/editor/ecs/EditorEntity.d.ts +15 -15
  63. package/editor/ecs/EditorEntitySystem.d.ts +7 -7
  64. package/editor/ecs/EditorEntitySystem.d.ts.map +1 -1
  65. package/editor/ecs/EditorEntitySystem.js +1 -6
  66. package/editor/ecs/component/FieldDescriptor.d.ts +26 -26
  67. package/editor/ecs/component/FieldDescriptor.d.ts.map +1 -1
  68. package/editor/ecs/component/FieldDescriptor.js +20 -22
  69. package/editor/ecs/component/FieldValueAdapter.d.ts +6 -6
  70. package/editor/ecs/component/FieldValueAdapter.d.ts.map +1 -1
  71. package/editor/ecs/component/FieldValueAdapter.js +2 -5
  72. package/editor/ecs/component/TypeEditor.d.ts +24 -24
  73. package/editor/ecs/component/createFieldEditor.d.ts +8 -8
  74. package/editor/ecs/component/createObjectEditor.d.ts +13 -13
  75. package/editor/ecs/component/editors/ColorEditor.d.ts +6 -6
  76. package/editor/ecs/component/editors/HTMLElementEditor.d.ts +6 -6
  77. package/editor/ecs/component/editors/HTMLElementEditor.d.ts.map +1 -1
  78. package/editor/ecs/component/editors/ImagePathEditor.d.ts +6 -6
  79. package/editor/ecs/component/editors/LargeStringEditor.d.ts +15 -15
  80. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts +6 -6
  81. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts.map +1 -1
  82. package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts +6 -6
  83. package/editor/ecs/component/editors/ObservedEnumEditor.d.ts +6 -6
  84. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts +6 -6
  85. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts.map +1 -1
  86. package/editor/ecs/component/editors/ObservedStringEditor.d.ts +6 -6
  87. package/editor/ecs/component/editors/ObservedStringEditor.d.ts.map +1 -1
  88. package/editor/ecs/component/editors/Sampler2DEditor.d.ts +6 -6
  89. package/editor/ecs/component/editors/collection/ListEditor.d.ts +7 -7
  90. package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts +11 -11
  91. package/editor/ecs/component/editors/common/EnumEditor.d.ts +7 -7
  92. package/editor/ecs/component/editors/common/makeV3_editor.d.ts +14 -14
  93. package/editor/ecs/component/editors/common/makeV3_editor.d.ts.map +1 -1
  94. package/editor/ecs/component/editors/common/noEditor.d.ts +2 -2
  95. package/editor/ecs/component/editors/common/two_way_sync.d.ts +22 -0
  96. package/editor/ecs/component/editors/common/two_way_sync.d.ts.map +1 -0
  97. package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts +6 -6
  98. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +1 -1
  99. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +19 -66
  100. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +1 -1
  101. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +35 -239
  102. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +11 -11
  103. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +1 -1
  104. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -17
  105. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +13 -13
  106. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +51 -51
  107. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +1 -1
  108. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +46 -47
  109. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +1 -1
  110. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +15 -15
  111. package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts +29 -29
  112. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +42 -0
  113. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -0
  114. package/editor/ecs/component/editors/ecs/TransformEditor.d.ts +19 -19
  115. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts +8 -0
  116. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts.map +1 -0
  117. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.js +19 -0
  118. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts +18 -18
  119. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts +38 -38
  120. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts +15 -15
  121. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts +18 -18
  122. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts +17 -17
  123. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts +5 -5
  124. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts.map +1 -1
  125. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts +6 -6
  126. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts.map +1 -1
  127. package/editor/ecs/component/editors/geom/Vector2Editor.d.ts +5 -5
  128. package/editor/ecs/component/editors/geom/Vector3Editor.d.ts +5 -5
  129. package/editor/ecs/component/editors/geom/Vector4Editor.d.ts +5 -5
  130. package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts +7 -7
  131. package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts +6 -6
  132. package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts +6 -6
  133. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts +7 -7
  134. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts.map +1 -1
  135. package/editor/ecs/component/editors/primitive/ObjectEditor.d.ts +5 -5
  136. package/editor/ecs/component/editors/primitive/StringEditor.d.ts +6 -6
  137. package/editor/ecs/component/editors/three/BufferGeometryEditor.d.ts +6 -6
  138. package/editor/ecs/component/editors/three/MaterialEditor.d.ts +6 -6
  139. package/editor/ecs/component/editors/three/MeshEditor.d.ts +6 -6
  140. package/editor/ecs/component/editors/three/TextureEditor.d.ts +6 -6
  141. package/editor/ecs/component/findNearestRegisteredType.d.ts +7 -7
  142. package/editor/ecs/component/registerEngineComponentEditors.d.ts +8 -0
  143. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -0
  144. package/editor/ecs/component/registerEngineComponentEditors.js +85 -0
  145. package/editor/enableEditor.d.ts +13 -13
  146. package/editor/enableEditor.d.ts.map +1 -1
  147. package/editor/enableEditor.js +14 -4
  148. package/editor/library/MeshLibrary.d.ts +12 -12
  149. package/editor/library/MeshLibrary.d.ts.map +1 -1
  150. package/editor/library/MeshLibrary.js +4 -7
  151. package/editor/particles/lut_ops.d.ts +34 -0
  152. package/editor/particles/lut_ops.d.ts.map +1 -0
  153. package/editor/particles/lut_ops.js +148 -0
  154. package/editor/particles/particleEditEvents.d.ts +11 -0
  155. package/editor/particles/particleEditEvents.d.ts.map +1 -0
  156. package/editor/particles/particleEditEvents.js +12 -0
  157. package/editor/particles/rebuildParticleEmitter.d.ts +11 -0
  158. package/editor/particles/rebuildParticleEmitter.d.ts.map +1 -0
  159. package/editor/particles/rebuildParticleEmitter.js +49 -0
  160. package/editor/persistence/EditorLayoutStore.d.ts +30 -0
  161. package/editor/persistence/EditorLayoutStore.d.ts.map +1 -0
  162. package/editor/persistence/EditorLayoutStore.js +71 -0
  163. package/editor/persistence/SceneMetadata.d.ts +38 -0
  164. package/editor/persistence/SceneMetadata.d.ts.map +1 -0
  165. package/editor/persistence/SceneMetadata.js +52 -0
  166. package/editor/persistence/SceneSlotManager.d.ts +40 -0
  167. package/editor/persistence/SceneSlotManager.d.ts.map +1 -0
  168. package/editor/persistence/SceneSlotManager.js +144 -0
  169. package/editor/persistence/buildNewSceneDataset.d.ts +10 -0
  170. package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -0
  171. package/editor/persistence/buildNewSceneDataset.js +67 -0
  172. package/editor/persistence/files.d.ts +24 -0
  173. package/editor/persistence/files.d.ts.map +1 -0
  174. package/editor/persistence/files.js +68 -0
  175. package/editor/persistence/scene_import.d.ts +45 -0
  176. package/editor/persistence/scene_import.d.ts.map +1 -0
  177. package/editor/persistence/scene_import.js +143 -0
  178. package/editor/persistence/scene_serialization.d.ts +36 -0
  179. package/editor/persistence/scene_serialization.d.ts.map +1 -0
  180. package/editor/persistence/scene_serialization.js +79 -0
  181. package/editor/persistence/string_buffer_codec.d.ts +20 -0
  182. package/editor/persistence/string_buffer_codec.d.ts.map +1 -0
  183. package/editor/persistence/string_buffer_codec.js +41 -0
  184. package/editor/process/DisableGameUIProcess.d.ts +7 -7
  185. package/editor/process/DisableGameUIProcess.d.ts.map +1 -1
  186. package/editor/process/DisableGameUIProcess.js +1 -5
  187. package/editor/process/EditorProcess.d.ts +18 -18
  188. package/editor/process/GridDisplayProcess.d.ts +16 -0
  189. package/editor/process/GridDisplayProcess.d.ts.map +1 -0
  190. package/editor/process/GridDisplayProcess.js +53 -0
  191. package/editor/process/ObstacleGridDisplayProcess.d.ts +12 -12
  192. package/editor/process/ObstacleGridDisplayProcess.d.ts.map +1 -1
  193. package/editor/process/ObstacleGridDisplayProcess.js +7 -9
  194. package/editor/process/ParticleEmitterRebuildProcess.d.ts +66 -0
  195. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +1 -0
  196. package/editor/process/ParticleEmitterRebuildProcess.js +217 -0
  197. package/editor/process/ProcessEngine.d.ts +29 -29
  198. package/editor/process/ProcessEngine.d.ts.map +1 -1
  199. package/editor/process/ProcessEngine.js +11 -4
  200. package/editor/process/SymbolicDisplayProcess.d.ts +18 -18
  201. package/editor/process/SymbolicDisplayProcess.js +2 -2
  202. package/editor/process/symbolic/ComponentSymbolicDisplay.d.ts +10 -10
  203. package/editor/process/symbolic/SymbolicDisplayInternalAPI.d.ts +67 -64
  204. package/editor/process/symbolic/SymbolicDisplayInternalAPI.d.ts.map +1 -1
  205. package/editor/process/symbolic/SymbolicDisplayInternalAPI.js +42 -45
  206. package/editor/process/symbolic/buildThreeJSHelperEntity.d.ts +8 -8
  207. package/editor/process/symbolic/make3DSymbolicDisplay.d.ts +9 -9
  208. package/editor/process/symbolic/makeCameraSymbolicDisplay.d.ts +6 -6
  209. package/editor/process/symbolic/makeGridPositionSymbolDisplay.d.ts +5 -5
  210. package/editor/process/symbolic/makeHelperBoxGeometry.d.ts +2 -2
  211. package/editor/process/symbolic/makeHelperSphereGeometry.d.ts +8 -8
  212. package/editor/process/symbolic/makeLightSymbolicDisplay.d.ts +6 -6
  213. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.d.ts +5 -5
  214. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.d.ts.map +1 -1
  215. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.js +21 -1
  216. package/editor/process/symbolic/makePathSymbolicDisplay.d.ts +6 -6
  217. package/editor/process/symbolic/makePositionedIconDisplaySymbol.d.ts +8 -8
  218. package/editor/process/symbolic/makePositionedIconDisplaySymbol.d.ts.map +1 -1
  219. package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +3 -0
  220. package/editor/process/symbolic/makeSocketsSymbolicDisplay.d.ts +6 -6
  221. package/editor/process/symbolic/makeSolidArrowGeometry.d.ts +25 -25
  222. package/editor/process/symbolic/makeSoundEmitterSymbolicDisplay.d.ts +5 -5
  223. package/editor/process/symbolic/synchronizeTransform.d.ts +11 -11
  224. package/editor/prototypeEditorShell.js +102 -0
  225. package/editor/style/controls.scss +168 -0
  226. package/editor/style/editor.scss +313 -0
  227. package/editor/style/inspector.scss +223 -0
  228. package/editor/templates/entity_templates.d.ts +19 -0
  229. package/editor/templates/entity_templates.d.ts.map +1 -0
  230. package/editor/templates/entity_templates.js +167 -0
  231. package/editor/tools/GridPaintTool.d.ts +17 -16
  232. package/editor/tools/GridPaintTool.d.ts.map +1 -1
  233. package/editor/tools/GridPaintTool.js +13 -14
  234. package/editor/tools/SelectionTool.d.ts +25 -26
  235. package/editor/tools/SelectionTool.d.ts.map +1 -1
  236. package/editor/tools/SelectionTool.js +46 -13
  237. package/editor/tools/TransformToolV2.d.ts +76 -0
  238. package/editor/tools/TransformToolV2.d.ts.map +1 -0
  239. package/editor/tools/TransformToolV2.js +396 -0
  240. package/editor/tools/engine/Tool.d.ts +87 -63
  241. package/editor/tools/engine/Tool.d.ts.map +1 -1
  242. package/editor/tools/engine/Tool.js +72 -28
  243. package/editor/tools/engine/ToolEngine.d.ts +21 -22
  244. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  245. package/editor/tools/engine/ToolEngine.js +52 -54
  246. package/editor/tools/engine/ToolState.d.ts +6 -6
  247. package/editor/tools/paint/TerrainHeightPaintTool.d.ts +17 -17
  248. package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -1
  249. package/editor/tools/paint/TerrainHeightPaintTool.js +12 -7
  250. package/editor/tools/paint/TerrainPaintTool.d.ts +81 -30
  251. package/editor/tools/paint/TerrainPaintTool.d.ts.map +1 -1
  252. package/editor/tools/paint/TerrainPaintTool.js +58 -21
  253. package/editor/tools/paint/TerrainTexturePaintTool.d.ts +18 -17
  254. package/editor/tools/paint/TerrainTexturePaintTool.d.ts.map +1 -1
  255. package/editor/tools/paint/TerrainTexturePaintTool.js +75 -12
  256. package/editor/tools/v2/BlenderCameraOrientationGizmo.js +24 -26
  257. package/editor/tools/v2/GizmoNode.d.ts.map +1 -1
  258. package/editor/tools/v2/GizmoNode.js +14 -13
  259. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  260. package/editor/tools/v2/TransformControls.js +18 -45
  261. package/editor/tools/v2/TransformControlsGizmo.d.ts.map +1 -1
  262. package/editor/tools/v2/TransformControlsGizmo.js +3 -6
  263. package/editor/tools/v2/TransformControlsPlane.d.ts.map +1 -1
  264. package/editor/tools/v2/TransformControlsPlane.js +3 -5
  265. package/editor/tools/v2/TransformMode.d.ts +6 -6
  266. package/editor/view/ecs/ComponentControlView.d.ts +23 -23
  267. package/editor/view/ecs/ComponentControlView.d.ts.map +1 -1
  268. package/editor/view/ecs/ComponentControlView.js +4 -4
  269. package/editor/view/ecs/EntityEditor.d.ts +24 -29
  270. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  271. package/editor/view/ecs/EntityEditor.js +34 -10
  272. package/editor/view/ecs/EntityList.js +2 -3
  273. package/editor/view/ecs/HierarchicalEntityListView.d.ts +24 -7
  274. package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +1 -1
  275. package/editor/view/ecs/HierarchicalEntityListView.js +339 -191
  276. package/editor/view/ecs/components/DatGuiController.js +2 -216
  277. package/editor/view/ecs/components/color/GaugeView.d.ts +12 -12
  278. package/editor/view/ecs/components/common/AutoCanvasView.d.ts +29 -19
  279. package/editor/view/ecs/components/common/AutoCanvasView.d.ts.map +1 -1
  280. package/editor/view/ecs/components/common/LineView.d.ts +11 -11
  281. package/editor/view/ecs/components/common/LineView.d.ts.map +1 -1
  282. package/editor/view/ecs/components/common/LineView.js +2 -1
  283. package/editor/view/ecs/components/common/NumberController.d.ts +17 -17
  284. package/editor/view/ecs/components/common/TextController.d.ts +21 -0
  285. package/editor/view/ecs/components/common/TextController.d.ts.map +1 -0
  286. package/editor/view/library/MeshLibraryView.d.ts +17 -0
  287. package/editor/view/library/MeshLibraryView.d.ts.map +1 -0
  288. package/editor/view/library/MeshLibraryView.js +35 -20
  289. package/editor/view/node-graph/NodeGraphCamera.d.ts +48 -0
  290. package/editor/view/node-graph/NodeGraphCamera.d.ts.map +1 -0
  291. package/editor/view/node-graph/NodeGraphCamera.js +88 -90
  292. package/editor/view/node-graph/NodeGraphEditorView.d.ts +25 -2
  293. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  294. package/editor/view/node-graph/NodeGraphSelection.d.ts +56 -0
  295. package/editor/view/node-graph/NodeGraphSelection.d.ts.map +1 -0
  296. package/editor/view/node-graph/NodeGraphView.d.ts +35 -18
  297. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  298. package/editor/view/node-graph/NodeGraphView.js +666 -669
  299. package/editor/view/node-graph/NodeView.d.ts +3 -2
  300. package/editor/view/node-graph/NodeView.d.ts.map +1 -1
  301. package/editor/view/node-graph/PortView.d.ts +2 -2
  302. package/editor/view/node-graph/PortView.d.ts.map +1 -1
  303. package/editor/view/node-graph/PortView.js +2 -2
  304. package/editor/view/node-graph/actions/ConnectionCreateAction.d.ts +34 -0
  305. package/editor/view/node-graph/actions/ConnectionCreateAction.d.ts.map +1 -0
  306. package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -53
  307. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +26 -0
  308. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -0
  309. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +47 -0
  310. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -0
  311. package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -88
  312. package/editor/view/node-graph/actions/NodeParameterSetAction.d.ts +34 -0
  313. package/editor/view/node-graph/actions/NodeParameterSetAction.d.ts.map +1 -0
  314. package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -52
  315. package/editor/view/node-graph/actions/NodesMoveAction.d.ts +38 -0
  316. package/editor/view/node-graph/actions/NodesMoveAction.d.ts.map +1 -0
  317. package/editor/view/node-graph/actions/SelectionSetAction.d.ts +38 -0
  318. package/editor/view/node-graph/actions/SelectionSetAction.d.ts.map +1 -0
  319. package/editor/view/node-graph/actions/SelectionSetAction.js +60 -60
  320. package/editor/view/node-graph/connection_wire_geometry.d.ts +46 -0
  321. package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -0
  322. package/editor/view/particles/ColorLutGradientView.d.ts +19 -0
  323. package/editor/view/particles/ColorLutGradientView.d.ts.map +1 -0
  324. package/editor/view/particles/ColorLutGradientView.js +291 -0
  325. package/editor/view/particles/ScalarLutCurveView.d.ts +19 -0
  326. package/editor/view/particles/ScalarLutCurveView.d.ts.map +1 -0
  327. package/editor/view/particles/ScalarLutCurveView.js +279 -0
  328. package/editor/view/prepareMeshLibrary.d.ts +7 -0
  329. package/editor/view/prepareMeshLibrary.d.ts.map +1 -0
  330. package/editor/view/prepareMeshLibrary.js +34 -14
  331. package/editor/view/shell/EditorShellView.d.ts +18 -0
  332. package/editor/view/shell/EditorShellView.d.ts.map +1 -0
  333. package/editor/view/shell/EditorShellView.js +442 -0
  334. package/editor/view/shell/SceneTreePanelView.d.ts +17 -0
  335. package/editor/view/shell/SceneTreePanelView.d.ts.map +1 -0
  336. package/editor/view/shell/SceneTreePanelView.js +119 -0
  337. package/editor/view/shell/ViewportPanelView.d.ts +18 -0
  338. package/editor/view/shell/ViewportPanelView.d.ts.map +1 -0
  339. package/editor/view/shell/ViewportPanelView.js +64 -0
  340. package/editor/view/tools/ToolSettingsView.d.ts +21 -10
  341. package/editor/view/tools/ToolSettingsView.d.ts.map +1 -1
  342. package/editor/view/tools/ToolSettingsView.js +114 -100
  343. package/editor/view/tools/ToolView.d.ts +12 -12
  344. package/editor/view/v2/SplitView.js +2 -104
  345. package/package.json +7 -1
  346. package/samples/terrain/editor.js +9 -13
  347. package/src/core/binary/BitSet.d.ts.map +1 -1
  348. package/src/core/binary/BitSet.js +7 -7
  349. package/src/core/binary/type/Field.d.ts +2 -2
  350. package/src/core/binary/type/Field.d.ts.map +1 -1
  351. package/src/core/binary/type/Field.js +3 -2
  352. package/src/core/binary/type/Type.d.ts +5 -5
  353. package/src/core/binary/type/Type.d.ts.map +1 -1
  354. package/src/core/binary/type/Type.js +18 -15
  355. package/src/core/binary/type/TypeBuilder.d.ts +1 -1
  356. package/src/core/binary/type/TypeBuilder.d.ts.map +1 -1
  357. package/src/core/binary/type/TypeBuilder.js +2 -1
  358. package/src/core/binary/type/TypeRegistry.d.ts.map +1 -1
  359. package/src/core/binary/type/TypeRegistry.js +1 -3
  360. package/src/core/cache/Cache.d.ts +8 -8
  361. package/src/core/cache/Cache.d.ts.map +1 -1
  362. package/src/core/cache/Cache.js +14 -15
  363. package/src/core/cache/CacheV2.d.ts.map +1 -1
  364. package/src/core/cache/CacheV2.js +15 -20
  365. package/src/core/cache/LoadingCache.d.ts.map +1 -1
  366. package/src/core/cache/LoadingCache.js +3 -2
  367. package/src/core/collection/CuckooFilter.d.ts +23 -23
  368. package/src/core/collection/CuckooFilter.d.ts.map +1 -1
  369. package/src/core/collection/CuckooFilter.js +27 -26
  370. package/src/core/collection/PairUint32Map.d.ts +1 -1
  371. package/src/core/collection/PairUint32Map.d.ts.map +1 -1
  372. package/src/core/collection/PairUint32Map.js +322 -321
  373. package/src/core/collection/RingBuffer.d.ts +5 -5
  374. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  375. package/src/core/collection/RingBuffer.js +18 -18
  376. package/src/core/collection/Uint32Map.d.ts +5 -5
  377. package/src/core/collection/Uint32Map.d.ts.map +1 -1
  378. package/src/core/collection/Uint32Map.js +346 -345
  379. package/src/core/collection/Uint32MinHeap.d.ts +4 -4
  380. package/src/core/collection/Uint32MinHeap.d.ts.map +1 -1
  381. package/src/core/collection/Uint32MinHeap.js +109 -109
  382. package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts.map +1 -1
  383. package/src/core/collection/array/iterator/ArrayIteratorRandom.js +3 -8
  384. package/src/core/collection/heap/FibonacciHeap.d.ts +6 -6
  385. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -1
  386. package/src/core/collection/heap/FibonacciHeap.js +586 -586
  387. package/src/core/collection/heap/IndexedFloatMaxHeap.d.ts +1 -1
  388. package/src/core/collection/heap/IndexedFloatMaxHeap.d.ts.map +1 -1
  389. package/src/core/collection/heap/IndexedFloatMaxHeap.js +261 -261
  390. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts +1 -1
  391. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts.map +1 -1
  392. package/src/core/collection/heap/IndexedFloatMinHeap.js +268 -268
  393. package/src/core/collection/heap/Uint32Heap.d.ts +6 -6
  394. package/src/core/collection/heap/Uint32Heap.d.ts.map +1 -1
  395. package/src/core/collection/heap/Uint32Heap.js +7 -7
  396. package/src/core/collection/heap/Uint32Heap4.d.ts +6 -6
  397. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -1
  398. package/src/core/collection/heap/Uint32Heap4.js +490 -490
  399. package/src/core/collection/list/FilteredListProjection.d.ts +7 -7
  400. package/src/core/collection/list/FilteredListProjection.d.ts.map +1 -1
  401. package/src/core/collection/list/FilteredListProjection.js +12 -12
  402. package/src/core/collection/list/SortedListProjection.d.ts +2 -2
  403. package/src/core/collection/list/SortedListProjection.d.ts.map +1 -1
  404. package/src/core/collection/list/SortedListProjection.js +6 -6
  405. package/src/core/collection/table/RowFirstTable.d.ts +5 -5
  406. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  407. package/src/core/collection/table/RowFirstTable.js +6 -7
  408. package/src/core/collection/table/RowFirstTableSpec.d.ts +10 -2
  409. package/src/core/collection/table/RowFirstTableSpec.d.ts.map +1 -1
  410. package/src/core/collection/table/RowFirstTableSpec.js +10 -1
  411. package/src/core/function/FunctionCompiler.d.ts.map +1 -1
  412. package/src/core/function/FunctionCompiler.js +13 -15
  413. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
  414. package/src/core/geom/3d/shape/BoxShape3D.js +171 -175
  415. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  416. package/src/core/geom/3d/shape/CapsuleShape3D.js +238 -242
  417. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  418. package/src/core/geom/3d/shape/ConvexHullShape3D.js +43 -44
  419. package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
  420. package/src/core/geom/3d/shape/CylinderShape3D.js +220 -224
  421. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  422. package/src/core/geom/3d/shape/HeightMapShape3D.js +58 -61
  423. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  424. package/src/core/geom/3d/shape/MeshShape3D.js +76 -80
  425. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  426. package/src/core/geom/3d/shape/PosedShape3D.js +160 -159
  427. package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
  428. package/src/core/geom/3d/shape/SphereShape3D.js +143 -146
  429. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  430. package/src/core/geom/3d/shape/TransformedShape3D.js +20 -24
  431. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
  432. package/src/core/geom/3d/shape/Triangle3D.js +293 -297
  433. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  434. package/src/core/geom/3d/shape/UnionShape3D.js +15 -19
  435. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +15 -15
  436. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  437. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +21 -21
  438. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts.map +1 -1
  439. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js +36 -36
  440. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts +6 -6
  441. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts.map +1 -1
  442. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +8 -8
  443. package/src/core/graph/layout/Connection.d.ts +2 -2
  444. package/src/core/graph/layout/Connection.d.ts.map +1 -1
  445. package/src/core/graph/layout/Connection.js +6 -6
  446. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -1
  447. package/src/core/graph/metis/native/MetisGraph.js +232 -231
  448. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +3 -3
  449. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -1
  450. package/src/core/graph/metis/native/bisection/BisectionScratch.js +104 -103
  451. package/src/core/localization/Localization.d.ts.map +1 -1
  452. package/src/core/localization/Localization.js +35 -37
  453. package/src/core/model/BooleanVector3.d.ts +1 -1
  454. package/src/core/model/BooleanVector3.d.ts.map +1 -1
  455. package/src/core/model/BooleanVector3.js +2 -2
  456. package/src/core/model/ObservedValue.d.ts +2 -2
  457. package/src/core/model/ObservedValue.d.ts.map +1 -1
  458. package/src/core/model/ObservedValue.js +8 -6
  459. package/src/core/model/object/ImmutableObjectPool.d.ts +5 -5
  460. package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
  461. package/src/core/model/object/ImmutableObjectPool.js +6 -7
  462. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts +5 -5
  463. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
  464. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +93 -96
  465. package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts +4 -4
  466. package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
  467. package/src/core/model/reactive/model/terminal/ReactiveReference.js +6 -6
  468. package/src/core/model/stat/LinearModifier.d.ts +10 -10
  469. package/src/core/model/stat/LinearModifier.d.ts.map +1 -1
  470. package/src/core/model/stat/LinearModifier.js +12 -12
  471. package/src/core/process/Future.d.ts +1 -1
  472. package/src/core/process/Future.d.ts.map +1 -1
  473. package/src/core/process/Future.js +6 -7
  474. package/src/core/process/action/AsynchronousActionSequence.d.ts +5 -5
  475. package/src/core/process/action/AsynchronousActionSequence.d.ts.map +1 -1
  476. package/src/core/process/action/AsynchronousActionSequence.js +9 -9
  477. package/src/core/process/executor/profile/ConcurrentExecutorProfiler.d.ts.map +1 -1
  478. package/src/core/process/executor/profile/ConcurrentExecutorProfiler.js +19 -20
  479. package/src/core/process/filter/MutableFilter.d.ts.map +1 -1
  480. package/src/core/process/filter/MutableFilter.js +1 -6
  481. package/src/core/process/task/RemainingTimeEstimator.d.ts +1 -1
  482. package/src/core/process/task/RemainingTimeEstimator.d.ts.map +1 -1
  483. package/src/core/process/task/RemainingTimeEstimator.js +2 -1
  484. package/src/core/process/undo/ActionProcessor.d.ts +36 -17
  485. package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
  486. package/src/core/process/undo/ActionProcessor.js +131 -136
  487. package/src/core/science/units/UnitMatrix.d.ts.map +1 -1
  488. package/src/core/science/units/UnitMatrix.js +249 -251
  489. package/src/engine/EngineHarness.d.ts +5 -5
  490. package/src/engine/EngineHarness.d.ts.map +1 -1
  491. package/src/engine/EngineHarness.js +6 -6
  492. package/src/engine/achievements/Achievement.d.ts.map +1 -1
  493. package/src/engine/achievements/Achievement.js +35 -35
  494. package/src/engine/achievements/AchievementManager.d.ts.map +1 -1
  495. package/src/engine/achievements/AchievementManager.js +33 -35
  496. package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts +1 -1
  497. package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts.map +1 -1
  498. package/src/engine/achievements/gateway/StorageAchievementGateway.js +2 -2
  499. package/src/engine/animation/EntityAnimation.d.ts +5 -5
  500. package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
  501. package/src/engine/animation/EntityAnimation.js +6 -6
  502. package/src/engine/animation/curve/editor/CurveEditorView.d.ts +2 -2
  503. package/src/engine/animation/curve/editor/CurveEditorView.d.ts.map +1 -1
  504. package/src/engine/animation/curve/editor/CurveEditorView.js +3 -3
  505. package/src/engine/animation/curve/editor/DragHandler.d.ts +1 -1
  506. package/src/engine/animation/curve/editor/DragHandler.d.ts.map +1 -1
  507. package/src/engine/animation/curve/editor/DragHandler.js +2 -2
  508. package/src/engine/animation/curve/editor/OperationRouter.d.ts +1 -1
  509. package/src/engine/animation/curve/editor/OperationRouter.d.ts.map +1 -1
  510. package/src/engine/animation/curve/editor/OperationRouter.js +2 -2
  511. package/src/engine/animation/keyed2/AnimationTrack.d.ts +10 -10
  512. package/src/engine/animation/keyed2/AnimationTrack.d.ts.map +1 -1
  513. package/src/engine/animation/keyed2/AnimationTrack.js +27 -27
  514. package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts +4 -4
  515. package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts.map +1 -1
  516. package/src/engine/animation/keyed2/AnimationTrackPlayback.js +6 -9
  517. package/src/engine/asset/Asset.d.ts +10 -10
  518. package/src/engine/asset/Asset.d.ts.map +1 -1
  519. package/src/engine/asset/Asset.js +13 -14
  520. package/src/engine/asset/AssetRequest.d.ts +14 -14
  521. package/src/engine/asset/AssetRequest.d.ts.map +1 -1
  522. package/src/engine/asset/AssetRequest.js +18 -18
  523. package/src/engine/asset/PendingAsset.d.ts +5 -5
  524. package/src/engine/asset/PendingAsset.d.ts.map +1 -1
  525. package/src/engine/asset/PendingAsset.js +108 -108
  526. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts +2 -2
  527. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
  528. package/src/engine/asset/loaders/GLTFAssetLoader.js +16 -18
  529. package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
  530. package/src/engine/asset/loaders/JavascriptAssetLoader.js +30 -31
  531. package/src/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.d.ts.map +1 -1
  532. package/src/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +2 -2
  533. package/src/engine/asset/loaders/material/StaticMaterialCache.d.ts.map +1 -1
  534. package/src/engine/asset/loaders/material/StaticMaterialCache.js +9 -12
  535. package/src/engine/control/StatefulController.d.ts +4 -4
  536. package/src/engine/control/StatefulController.d.ts.map +1 -1
  537. package/src/engine/control/StatefulController.js +6 -6
  538. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  539. package/src/engine/control/first-person/FirstPersonPlayerController.js +31 -33
  540. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  541. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2052 -2028
  542. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -1
  543. package/src/engine/control/first-person/abilities/Ability.js +117 -119
  544. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  545. package/src/engine/control/first-person/abilities/AbilitySet.js +183 -185
  546. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  547. package/src/engine/control/first-person/abilities/LedgeGrab.js +404 -405
  548. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  549. package/src/engine/control/first-person/abilities/Mantle.js +24 -23
  550. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -1
  551. package/src/engine/control/first-person/abilities/ScrambleUp.js +181 -182
  552. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  553. package/src/engine/control/first-person/abilities/Slide.js +164 -166
  554. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -1
  555. package/src/engine/control/first-person/abilities/WallJump.js +136 -139
  556. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  557. package/src/engine/control/first-person/abilities/WallRun.js +7 -9
  558. package/src/engine/control/first-person/collision/KinematicMover.d.ts +7 -13
  559. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  560. package/src/engine/control/first-person/collision/KinematicMover.js +11 -10
  561. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -1
  562. package/src/engine/control/first-person/composer/EyeOffsetStack.js +58 -60
  563. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +2 -2
  564. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -1
  565. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -133
  566. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -1
  567. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +106 -109
  568. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -1
  569. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +43 -45
  570. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +6 -6
  571. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -1
  572. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -100
  573. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -1
  574. package/src/engine/control/first-person/mastery/MasterySet.js +84 -86
  575. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  576. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +80 -83
  577. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  578. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +106 -109
  579. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -1
  580. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +45 -40
  581. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  582. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +35 -39
  583. package/src/engine/development/performance/monitor/PeriodicConsolePrinter.d.ts +1 -1
  584. package/src/engine/development/performance/monitor/PeriodicConsolePrinter.d.ts.map +1 -1
  585. package/src/engine/development/performance/monitor/PeriodicConsolePrinter.js +2 -2
  586. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +531 -0
  587. package/src/engine/ecs/EntityManager.d.ts +16 -0
  588. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  589. package/src/engine/ecs/EntityManager.js +81 -0
  590. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  591. package/src/engine/ecs/animation/Animation.js +8 -8
  592. package/src/engine/ecs/async/SystemWorkerHost.d.ts +98 -0
  593. package/src/engine/ecs/async/SystemWorkerHost.d.ts.map +1 -0
  594. package/src/engine/ecs/async/SystemWorkerHost.js +329 -0
  595. package/src/engine/ecs/async/SystemWorkerLoopback.d.ts +80 -0
  596. package/src/engine/ecs/async/SystemWorkerLoopback.d.ts.map +1 -0
  597. package/src/engine/ecs/async/SystemWorkerLoopback.js +143 -0
  598. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +246 -0
  599. package/src/engine/ecs/async/WorkerSystem.d.ts +173 -0
  600. package/src/engine/ecs/async/WorkerSystem.d.ts.map +1 -0
  601. package/src/engine/ecs/async/WorkerSystem.js +702 -0
  602. package/src/engine/ecs/async/WorkerSystemProtocol.d.ts +62 -0
  603. package/src/engine/ecs/async/WorkerSystemProtocol.d.ts.map +1 -0
  604. package/src/engine/ecs/async/WorkerSystemProtocol.js +150 -0
  605. package/src/engine/ecs/binding/EntityProxyScope.d.ts.map +1 -1
  606. package/src/engine/ecs/binding/EntityProxyScope.js +11 -12
  607. package/src/engine/ecs/components/PropertySet.d.ts.map +1 -1
  608. package/src/engine/ecs/components/PropertySet.js +2 -2
  609. package/src/engine/ecs/components/TagSerializationUpgrader_0_1.d.ts.map +1 -1
  610. package/src/engine/ecs/components/TagSerializationUpgrader_0_1.js +2 -6
  611. package/src/engine/ecs/components/Timer.d.ts +7 -7
  612. package/src/engine/ecs/components/Timer.d.ts.map +1 -1
  613. package/src/engine/ecs/components/Timer.js +18 -18
  614. package/src/engine/ecs/dynamic_actions/DataScope.d.ts.map +1 -1
  615. package/src/engine/ecs/dynamic_actions/DataScope.js +6 -8
  616. package/src/engine/ecs/evaluation/PointFitnessBinary.d.ts.map +1 -1
  617. package/src/engine/ecs/evaluation/PointFitnessBinary.js +10 -13
  618. package/src/engine/ecs/evaluation/PointFitnessConstant.d.ts.map +1 -1
  619. package/src/engine/ecs/evaluation/PointFitnessConstant.js +5 -9
  620. package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.d.ts.map +1 -1
  621. package/src/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +5 -9
  622. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  623. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +6 -8
  624. package/src/engine/ecs/fow/FogOfWarSystem.d.ts +2 -2
  625. package/src/engine/ecs/fow/FogOfWarSystem.d.ts.map +1 -1
  626. package/src/engine/ecs/fow/FogOfWarSystem.js +5 -6
  627. package/src/engine/ecs/fow/FogOfWarVisibilityPredicate.d.ts.map +1 -1
  628. package/src/engine/ecs/fow/FogOfWarVisibilityPredicate.js +11 -14
  629. package/src/engine/ecs/fow/serialization/FogOfWarSerializationUpdater_0_1.d.ts.map +1 -1
  630. package/src/engine/ecs/fow/serialization/FogOfWarSerializationUpdater_0_1.js +2 -6
  631. package/src/engine/ecs/gui/position/ViewportPositionSystem.d.ts.map +1 -1
  632. package/src/engine/ecs/gui/position/ViewportPositionSystem.js +5 -6
  633. package/src/engine/ecs/gui/view/LocalizedLabelViewEntity.d.ts.map +1 -1
  634. package/src/engine/ecs/gui/view/LocalizedLabelViewEntity.js +2 -2
  635. package/src/engine/ecs/parent/ChildEntities.d.ts.map +1 -1
  636. package/src/engine/ecs/parent/ChildEntities.js +6 -8
  637. package/src/engine/ecs/parent/FaceEditor.d.ts.map +1 -1
  638. package/src/engine/ecs/parent/FaceEditor.js +42 -41
  639. package/src/engine/ecs/parent/ParentEntity.d.ts.map +1 -1
  640. package/src/engine/ecs/parent/ParentEntity.js +4 -9
  641. package/src/engine/ecs/parent/ParentEntitySystem.d.ts.map +1 -1
  642. package/src/engine/ecs/parent/ParentEntitySystem.js +2 -2
  643. package/src/engine/ecs/sockets/AttachmentSocket.d.ts.map +1 -1
  644. package/src/engine/ecs/sockets/AttachmentSocket.js +12 -14
  645. package/src/engine/ecs/sockets/AttachmentSockets.d.ts.map +1 -1
  646. package/src/engine/ecs/sockets/AttachmentSockets.js +5 -7
  647. package/src/engine/ecs/sockets/BoneAttachmentSocket.d.ts.map +1 -1
  648. package/src/engine/ecs/sockets/BoneAttachmentSocket.js +1 -5
  649. package/src/engine/ecs/speaker/VoiceSystem.d.ts +5 -5
  650. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  651. package/src/engine/ecs/speaker/VoiceSystem.js +42 -45
  652. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.d.ts.map +1 -1
  653. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.js +17 -19
  654. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts +11 -0
  655. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -0
  656. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +260 -0
  657. package/src/engine/ecs/system/AbstractContextSystem.d.ts +8 -8
  658. package/src/engine/ecs/system/AbstractContextSystem.d.ts.map +1 -1
  659. package/src/engine/ecs/system/AbstractContextSystem.js +14 -14
  660. package/src/engine/ecs/systems/AnimationSystem.d.ts.map +1 -1
  661. package/src/engine/ecs/systems/AnimationSystem.js +2 -2
  662. package/src/engine/ecs/systems/ScriptSystem.d.ts.map +1 -1
  663. package/src/engine/ecs/systems/ScriptSystem.js +3 -6
  664. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +27 -27
  665. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  666. package/src/engine/ecs/terrain/ecs/Terrain.js +35 -38
  667. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  668. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +11 -13
  669. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts.map +1 -1
  670. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.js +4 -2
  671. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts +5 -5
  672. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  673. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +6 -7
  674. package/src/engine/ecs/terrain/overlay/TerrainOverlay.d.ts +9 -9
  675. package/src/engine/ecs/terrain/overlay/TerrainOverlay.d.ts.map +1 -1
  676. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +13 -12
  677. package/src/engine/ecs/terrain/serialization/TerrainSerializationUpgrader_0_1.d.ts.map +1 -1
  678. package/src/engine/ecs/terrain/serialization/TerrainSerializationUpgrader_0_1.js +2 -6
  679. package/src/engine/ecs/terrain/serialization/TerrainSerializationUpgrader_1_2.d.ts.map +1 -1
  680. package/src/engine/ecs/terrain/serialization/TerrainSerializationUpgrader_1_2.js +2 -6
  681. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts +44 -3
  682. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  683. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +81 -17
  684. package/src/engine/ecs/terrain/util/obtainTerrain.d.ts.map +1 -1
  685. package/src/engine/ecs/terrain/util/obtainTerrain.js +2 -0
  686. package/src/engine/ecs/tooltip/TooltipComponentSystem.d.ts +20 -20
  687. package/src/engine/ecs/tooltip/TooltipComponentSystem.d.ts.map +1 -1
  688. package/src/engine/ecs/tooltip/TooltipComponentSystem.js +36 -38
  689. package/src/engine/ecs/transform/TransformSerializationUpgrader_0_1.d.ts.map +1 -1
  690. package/src/engine/ecs/transform/TransformSerializationUpgrader_0_1.js +2 -6
  691. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  692. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +34 -41
  693. package/src/engine/graphics/camera/CameraShake.d.ts.map +1 -1
  694. package/src/engine/graphics/camera/CameraShake.js +12 -16
  695. package/src/engine/graphics/camera/CameraShakeBehavior.d.ts +2 -2
  696. package/src/engine/graphics/camera/CameraShakeBehavior.d.ts.map +1 -1
  697. package/src/engine/graphics/camera/CameraShakeBehavior.js +3 -4
  698. package/src/engine/graphics/camera/CameraShakeTraumaBehavior.d.ts +2 -2
  699. package/src/engine/graphics/camera/CameraShakeTraumaBehavior.d.ts.map +1 -1
  700. package/src/engine/graphics/camera/CameraShakeTraumaBehavior.js +3 -5
  701. package/src/engine/graphics/composit/CompositLayer.d.ts.map +1 -1
  702. package/src/engine/graphics/composit/CompositLayer.js +6 -6
  703. package/src/engine/graphics/composit/LayerCompositer.d.ts.map +1 -1
  704. package/src/engine/graphics/composit/LayerCompositer.js +17 -19
  705. package/src/engine/graphics/debug/VisualSymbolLine.d.ts.map +1 -1
  706. package/src/engine/graphics/debug/VisualSymbolLine.js +11 -13
  707. package/src/engine/graphics/ecs/animation/AnimationControllerSystem.d.ts.map +1 -1
  708. package/src/engine/graphics/ecs/animation/AnimationControllerSystem.js +2 -5
  709. package/src/engine/graphics/ecs/animation/AnimationRule.d.ts +2 -2
  710. package/src/engine/graphics/ecs/animation/AnimationRule.d.ts.map +1 -1
  711. package/src/engine/graphics/ecs/animation/AnimationRule.js +3 -2
  712. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  713. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +20 -22
  714. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.d.ts.map +1 -1
  715. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +23 -25
  716. package/src/engine/graphics/ecs/animation/animator/AnimationGraphSystem.d.ts +4 -4
  717. package/src/engine/graphics/ecs/animation/animator/AnimationGraphSystem.d.ts.map +1 -1
  718. package/src/engine/graphics/ecs/animation/animator/AnimationGraphSystem.js +32 -33
  719. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.d.ts.map +1 -1
  720. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +10 -12
  721. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.d.ts.map +1 -1
  722. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +10 -12
  723. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpace.d.ts +1 -1
  724. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpace.d.ts.map +1 -1
  725. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpace.js +10 -12
  726. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpaceDefinition.d.ts.map +1 -1
  727. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpaceDefinition.js +5 -7
  728. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpacePoint.d.ts.map +1 -1
  729. package/src/engine/graphics/ecs/animation/animator/blending/BlendSpacePoint.js +10 -12
  730. package/src/engine/graphics/ecs/animation/animator/blending/BlendState.d.ts.map +1 -1
  731. package/src/engine/graphics/ecs/animation/animator/blending/BlendState.js +5 -7
  732. package/src/engine/graphics/ecs/animation/animator/blending/BlendStateDatabase.d.ts.map +1 -1
  733. package/src/engine/graphics/ecs/animation/animator/blending/BlendStateDatabase.js +18 -21
  734. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.d.ts.map +1 -1
  735. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +75 -77
  736. package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.d.ts.map +1 -1
  737. package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.js +35 -38
  738. package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.d.ts.map +1 -1
  739. package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.js +30 -32
  740. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.d.ts.map +1 -1
  741. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +31 -33
  742. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  743. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +20 -23
  744. package/src/engine/graphics/ecs/camera/Camera.d.ts.map +1 -1
  745. package/src/engine/graphics/ecs/camera/Camera.js +45 -47
  746. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts +1 -1
  747. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +1 -1
  748. package/src/engine/graphics/ecs/camera/CameraSystem.js +8 -9
  749. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.d.ts.map +1 -1
  750. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.js +37 -41
  751. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  752. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -10
  753. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSerializationUpgrader_0_1.d.ts.map +1 -1
  754. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSerializationUpgrader_0_1.js +2 -6
  755. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  756. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +5 -10
  757. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.d.ts.map +1 -1
  758. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +20 -25
  759. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
  760. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +2 -2
  761. package/src/engine/graphics/ecs/highlight/HighlightSerializationUpgrader_0_1.d.ts.map +1 -1
  762. package/src/engine/graphics/ecs/highlight/HighlightSerializationUpgrader_0_1.js +2 -6
  763. package/src/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.d.ts.map +1 -1
  764. package/src/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +23 -25
  765. package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderElement.d.ts.map +1 -1
  766. package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderElement.js +13 -16
  767. package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderGroup.d.ts.map +1 -1
  768. package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderGroup.js +5 -7
  769. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.d.ts +12 -12
  770. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.d.ts.map +1 -1
  771. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +54 -57
  772. package/src/engine/graphics/ecs/highlight/system/HighlightSystemBase.js +205 -205
  773. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  774. package/src/engine/graphics/ecs/light/Light.js +59 -65
  775. package/src/engine/graphics/ecs/light/LightSystem.d.ts +16 -16
  776. package/src/engine/graphics/ecs/light/LightSystem.d.ts.map +1 -1
  777. package/src/engine/graphics/ecs/light/LightSystem.js +23 -25
  778. package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts.map +1 -1
  779. package/src/engine/graphics/ecs/light/binding/LightBinding.js +13 -14
  780. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts.map +1 -1
  781. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.js +11 -15
  782. package/src/engine/graphics/ecs/light/shadow/ShadowMap.d.ts.map +1 -1
  783. package/src/engine/graphics/ecs/light/shadow/ShadowMap.js +5 -9
  784. package/src/engine/graphics/ecs/light/three/ThreeLightCache.d.ts.map +1 -1
  785. package/src/engine/graphics/ecs/light/three/ThreeLightCache.js +20 -22
  786. package/src/engine/graphics/ecs/mesh/Mesh.d.ts.map +1 -1
  787. package/src/engine/graphics/ecs/mesh/Mesh.js +35 -37
  788. package/src/engine/graphics/ecs/mesh/MeshSystem.d.ts +15 -15
  789. package/src/engine/graphics/ecs/mesh/MeshSystem.d.ts.map +1 -1
  790. package/src/engine/graphics/ecs/mesh/MeshSystem.js +21 -22
  791. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.d.ts.map +1 -1
  792. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.js +1 -3
  793. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
  794. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +51 -52
  795. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -6
  796. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts.map +1 -1
  797. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +37 -37
  798. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts +1 -1
  799. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts.map +1 -1
  800. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js +9 -11
  801. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
  802. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +1 -5
  803. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.d.ts +10 -10
  804. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.d.ts.map +1 -1
  805. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.js +22 -22
  806. package/src/engine/graphics/ecs/mesh-v2/render/SGThreeObjectCache.d.ts.map +1 -1
  807. package/src/engine/graphics/ecs/mesh-v2/render/SGThreeObjectCache.js +6 -8
  808. package/src/engine/graphics/ecs/mesh-v2/render/ShadedGeometryRendererContext.d.ts.map +1 -1
  809. package/src/engine/graphics/ecs/mesh-v2/render/ShadedGeometryRendererContext.js +8 -10
  810. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.d.ts.map +1 -1
  811. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.js +12 -15
  812. package/src/engine/graphics/ecs/mesh-v2/render/adapters/GenericRendererAdapter.d.ts.map +1 -1
  813. package/src/engine/graphics/ecs/mesh-v2/render/adapters/GenericRendererAdapter.js +6 -10
  814. package/src/engine/graphics/ecs/mesh-v2/render/optimization/RuntimeDrawMethodOptimizer.d.ts.map +1 -1
  815. package/src/engine/graphics/ecs/mesh-v2/render/optimization/RuntimeDrawMethodOptimizer.js +12 -15
  816. package/src/engine/graphics/ecs/path/PathDisplay.d.ts.map +1 -1
  817. package/src/engine/graphics/ecs/path/PathDisplay.js +5 -7
  818. package/src/engine/graphics/ecs/path/PathDisplaySpec.d.ts.map +1 -1
  819. package/src/engine/graphics/ecs/path/PathDisplaySpec.js +10 -12
  820. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts +6 -6
  821. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  822. package/src/engine/graphics/ecs/path/PathDisplaySystem.js +12 -17
  823. package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
  824. package/src/engine/graphics/ecs/path/entity/EntityPath.js +15 -17
  825. package/src/engine/graphics/ecs/path/entity/EntityPathMarker.d.ts.map +1 -1
  826. package/src/engine/graphics/ecs/path/entity/EntityPathMarker.js +15 -17
  827. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
  828. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +15 -17
  829. package/src/engine/graphics/ecs/path/entity/EntityPathStyle.d.ts.map +1 -1
  830. package/src/engine/graphics/ecs/path/entity/EntityPathStyle.js +20 -23
  831. package/src/engine/graphics/ecs/path/highlight/PathDisplayHighlightSystem.d.ts.map +1 -1
  832. package/src/engine/graphics/ecs/path/highlight/PathDisplayHighlightSystem.js +1 -5
  833. package/src/engine/graphics/ecs/path/ribbon/RibbonPathBuilder.d.ts.map +1 -1
  834. package/src/engine/graphics/ecs/path/ribbon/RibbonPathBuilder.js +15 -17
  835. package/src/engine/graphics/ecs/path/ribbon/RibbonPathStyle.d.ts.map +1 -1
  836. package/src/engine/graphics/ecs/path/ribbon/RibbonPathStyle.js +15 -17
  837. package/src/engine/graphics/ecs/path/tube/MatcapMaterialDefinition.d.ts.map +1 -1
  838. package/src/engine/graphics/ecs/path/tube/MatcapMaterialDefinition.js +5 -7
  839. package/src/engine/graphics/ecs/path/tube/StandardMaterialDefinition.d.ts.map +1 -1
  840. package/src/engine/graphics/ecs/path/tube/StandardMaterialDefinition.js +2 -4
  841. package/src/engine/graphics/ecs/path/tube/TubePathStyle.d.ts.map +1 -1
  842. package/src/engine/graphics/ecs/path/tube/TubePathStyle.js +84 -86
  843. package/src/engine/graphics/ecs/path/tube/build/StreamGeometryBuilder.d.ts.map +1 -1
  844. package/src/engine/graphics/ecs/path/tube/build/StreamGeometryBuilder.js +37 -36
  845. package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.d.ts.map +1 -1
  846. package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +23 -25
  847. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  848. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +2 -3
  849. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +5 -5
  850. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
  851. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +6 -9
  852. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts +4 -4
  853. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts.map +1 -1
  854. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.js +5 -5
  855. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_0_1.d.ts.map +1 -1
  856. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_0_1.js +2 -6
  857. package/src/engine/graphics/ecs/water/WaterSystem.d.ts +1 -1
  858. package/src/engine/graphics/ecs/water/WaterSystem.d.ts.map +1 -1
  859. package/src/engine/graphics/ecs/water/WaterSystem.js +13 -15
  860. package/src/engine/graphics/geometry/MikkT/MikkTSpace.d.ts.map +1 -1
  861. package/src/engine/graphics/geometry/MikkT/MikkTSpace.js +97 -95
  862. package/src/engine/graphics/geometry/MikkT/SSubGroup.d.ts.map +1 -1
  863. package/src/engine/graphics/geometry/MikkT/SSubGroup.js +10 -12
  864. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts.map +1 -1
  865. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +103 -110
  866. package/src/engine/graphics/geometry/optimization/geometry_optimize_uv_tension.d.ts +18 -3
  867. package/src/engine/graphics/geometry/optimization/geometry_optimize_uv_tension.d.ts.map +1 -1
  868. package/src/engine/graphics/geometry/optimization/geometry_optimize_uv_tension.js +135 -85
  869. package/src/engine/graphics/geometry/optimization/merge/merge_geometry_hierarchy.d.ts.map +1 -1
  870. package/src/engine/graphics/geometry/optimization/merge/merge_geometry_hierarchy.js +3 -5
  871. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +2 -2
  872. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +1 -1
  873. package/src/engine/graphics/geometry/ribbon/Quad.js +17 -17
  874. package/src/engine/graphics/material/manager/ManagedMaterial.d.ts +6 -6
  875. package/src/engine/graphics/material/manager/ManagedMaterial.d.ts.map +1 -1
  876. package/src/engine/graphics/material/manager/ManagedMaterial.js +20 -20
  877. package/src/engine/graphics/material/optimization/MaterialDescriptor.d.ts.map +1 -1
  878. package/src/engine/graphics/material/optimization/MaterialDescriptor.js +11 -14
  879. package/src/engine/graphics/material/optimization/MaterialOptimizationContext.d.ts.map +1 -1
  880. package/src/engine/graphics/material/optimization/MaterialOptimizationContext.js +20 -23
  881. package/src/engine/graphics/material/optimization/UvContext.d.ts.map +1 -1
  882. package/src/engine/graphics/material/optimization/UvContext.js +10 -12
  883. package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.d.ts.map +1 -1
  884. package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.js +23 -23
  885. package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.d.ts.map +1 -1
  886. package/src/engine/graphics/particles/node-based/rendering/AbstractParticleRenderer.js +5 -7
  887. package/src/engine/graphics/particles/node-based/rendering/billboard/BillboardParticleRenderer.d.ts +11 -11
  888. package/src/engine/graphics/particles/node-based/rendering/billboard/BillboardParticleRenderer.d.ts.map +1 -1
  889. package/src/engine/graphics/particles/node-based/rendering/billboard/BillboardParticleRenderer.js +21 -23
  890. package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.d.ts.map +1 -1
  891. package/src/engine/graphics/particles/node-based/simulation/EmitterAttributeData.js +17 -19
  892. package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.d.ts.map +1 -1
  893. package/src/engine/graphics/particles/node-based/simulation/GLDataBuffer.js +25 -27
  894. package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.d.ts.map +1 -1
  895. package/src/engine/graphics/particles/node-based/simulation/GLSLSimulationShader.js +12 -16
  896. package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.d.ts.map +1 -1
  897. package/src/engine/graphics/particles/node-based/simulation/TransformFeedback.js +64 -67
  898. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts +3 -0
  899. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +1 -1
  900. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.js +36 -39
  901. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +1 -1
  902. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +2 -6
  903. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +1 -1
  904. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +5 -7
  905. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +10 -10
  906. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +1 -1
  907. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +12 -12
  908. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +1 -1
  909. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +35 -37
  910. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +1 -1
  911. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +1 -5
  912. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +1 -1
  913. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +11 -12
  914. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +1 -1
  915. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +199 -201
  916. package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.d.ts +11 -11
  917. package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.d.ts.map +1 -1
  918. package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +13 -13
  919. package/src/engine/graphics/particles/particular/group/ParticleGroup.d.ts +6 -6
  920. package/src/engine/graphics/particles/particular/group/ParticleGroup.d.ts.map +1 -1
  921. package/src/engine/graphics/particles/particular/group/ParticleGroup.js +33 -34
  922. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +1 -1
  923. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +2 -8
  924. package/src/engine/graphics/render/Lines.d.ts.map +1 -1
  925. package/src/engine/graphics/render/Lines.js +2 -2
  926. package/src/engine/graphics/render/buffer/FrameBufferManager.d.ts.map +1 -1
  927. package/src/engine/graphics/render/buffer/FrameBufferManager.js +20 -22
  928. package/src/engine/graphics/render/buffer/simple-fx/DepthLimitedBlur.d.ts +2 -2
  929. package/src/engine/graphics/render/buffer/simple-fx/DepthLimitedBlur.d.ts.map +1 -1
  930. package/src/engine/graphics/render/buffer/simple-fx/DepthLimitedBlur.js +16 -19
  931. package/src/engine/graphics/render/buffer/simple-fx/SimplePostProcessEffect.d.ts.map +1 -1
  932. package/src/engine/graphics/render/buffer/simple-fx/SimplePostProcessEffect.js +5 -8
  933. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts +2 -2
  934. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts.map +1 -1
  935. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +37 -38
  936. package/src/engine/graphics/render/buffer/slot/ProgramSlotValue.d.ts +5 -5
  937. package/src/engine/graphics/render/buffer/slot/ProgramSlotValue.d.ts.map +1 -1
  938. package/src/engine/graphics/render/buffer/slot/ProgramSlotValue.js +8 -6
  939. package/src/engine/graphics/render/buffer/slot/ProgramValueSlotDefinition.d.ts +5 -5
  940. package/src/engine/graphics/render/buffer/slot/ProgramValueSlotDefinition.d.ts.map +1 -1
  941. package/src/engine/graphics/render/buffer/slot/ProgramValueSlotDefinition.js +6 -6
  942. package/src/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.d.ts.map +1 -1
  943. package/src/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +11 -13
  944. package/src/engine/graphics/render/forward_plus/LightManager.d.ts +6 -6
  945. package/src/engine/graphics/render/forward_plus/LightManager.d.ts.map +1 -1
  946. package/src/engine/graphics/render/forward_plus/LightManager.js +15 -18
  947. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts +5 -5
  948. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.d.ts.map +1 -1
  949. package/src/engine/graphics/render/forward_plus/LightRenderMetadata.js +7 -8
  950. package/src/engine/graphics/render/forward_plus/model/Decal.d.ts +1 -1
  951. package/src/engine/graphics/render/forward_plus/model/Decal.d.ts.map +1 -1
  952. package/src/engine/graphics/render/forward_plus/model/Decal.js +22 -22
  953. package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.d.ts.map +1 -1
  954. package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.js +8 -8
  955. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +1 -1
  956. package/src/engine/graphics/render/layers/RenderLayerManager.js +10 -12
  957. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +1 -1
  958. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +5 -9
  959. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +1 -1
  960. package/src/engine/graphics/render/layers/RenderLayerState.js +5 -7
  961. package/src/engine/graphics/render/utils/ThreeBypassRenderer.d.ts.map +1 -1
  962. package/src/engine/graphics/render/utils/ThreeBypassRenderer.js +6 -9
  963. package/src/engine/graphics/render/view/CameraView.d.ts.map +1 -1
  964. package/src/engine/graphics/render/view/CameraView.js +56 -59
  965. package/src/engine/graphics/render/view/CameraViewManager.d.ts.map +1 -1
  966. package/src/engine/graphics/render/view/CameraViewManager.js +18 -20
  967. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +6 -6
  968. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +1 -1
  969. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +40 -39
  970. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +1 -1
  971. package/src/engine/graphics/render/visibility/VisibilityComputer.js +19 -22
  972. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +5 -5
  973. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +1 -1
  974. package/src/engine/graphics/render/visibility/VisibilityFilter.js +6 -6
  975. package/src/engine/graphics/render/visibility/hiz/buffer/HierarchicalZBuffer.d.ts.map +1 -1
  976. package/src/engine/graphics/render/visibility/hiz/buffer/HierarchicalZBuffer.js +40 -43
  977. package/src/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.d.ts +1 -1
  978. package/src/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.d.ts.map +1 -1
  979. package/src/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.js +2 -2
  980. package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.d.ts.map +1 -1
  981. package/src/engine/graphics/sh3/lpv/WebGLCubeProbeRenderer.js +7 -9
  982. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  983. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +24 -28
  984. package/src/engine/graphics/shadows/ShadowMapRenderer.d.ts.map +1 -1
  985. package/src/engine/graphics/shadows/ShadowMapRenderer.js +11 -15
  986. package/src/engine/graphics/texture/AttributeDataTexture.d.ts +11 -11
  987. package/src/engine/graphics/texture/AttributeDataTexture.d.ts.map +1 -1
  988. package/src/engine/graphics/texture/AttributeDataTexture.js +14 -14
  989. package/src/engine/graphics/texture/TextureBackedMemoryRegion.d.ts +6 -6
  990. package/src/engine/graphics/texture/TextureBackedMemoryRegion.d.ts.map +1 -1
  991. package/src/engine/graphics/texture/TextureBackedMemoryRegion.js +33 -32
  992. package/src/engine/graphics/texture/atlas/AtlasLookupTexture.d.ts.map +1 -1
  993. package/src/engine/graphics/texture/atlas/AtlasLookupTexture.js +12 -12
  994. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  995. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +17 -20
  996. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +1 -1
  997. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  998. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +14 -14
  999. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +10 -10
  1000. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  1001. package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -14
  1002. package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.d.ts.map +1 -1
  1003. package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.js +49 -49
  1004. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +5 -5
  1005. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  1006. package/src/engine/graphics/texture/sampler/Sampler2D.js +6 -6
  1007. package/src/engine/graphics/trail/tube/TubeX.d.ts +6 -6
  1008. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
  1009. package/src/engine/graphics/trail/tube/TubeX.js +3 -3
  1010. package/src/engine/graphics/trail/x/RibbonX.d.ts.map +1 -1
  1011. package/src/engine/graphics/trail/x/RibbonX.js +36 -39
  1012. package/src/engine/grid/area/AreaTrigger.d.ts +1 -1
  1013. package/src/engine/grid/area/AreaTrigger.d.ts.map +1 -1
  1014. package/src/engine/grid/area/AreaTrigger.js +8 -7
  1015. package/src/engine/grid/area/TriggerAction.d.ts.map +1 -1
  1016. package/src/engine/grid/area/TriggerAction.js +2 -4
  1017. package/src/engine/grid/grid2transform/GridPosition2TransformSerializationUpgrader_0_1.d.ts.map +1 -1
  1018. package/src/engine/grid/grid2transform/GridPosition2TransformSerializationUpgrader_0_1.js +3 -6
  1019. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +3 -3
  1020. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  1021. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +6 -9
  1022. package/src/engine/grid/position/GridPositionSerializationUpdater_0_1.d.ts.map +1 -1
  1023. package/src/engine/grid/position/GridPositionSerializationUpdater_0_1.js +2 -6
  1024. package/src/engine/grid/position/GridPositionSystem.d.ts.map +1 -1
  1025. package/src/engine/grid/position/GridPositionSystem.js +7 -11
  1026. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  1027. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +32 -40
  1028. package/src/engine/input/devices/PointerDevice.d.ts +8 -0
  1029. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  1030. package/src/engine/input/devices/PointerDevice.js +10 -4
  1031. package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
  1032. package/src/engine/input/ecs/systems/InputControllerSystem.js +9 -13
  1033. package/src/engine/input/ecs/systems/InputSystem.d.ts +1 -1
  1034. package/src/engine/input/ecs/systems/InputSystem.d.ts.map +1 -1
  1035. package/src/engine/input/ecs/systems/InputSystem.js +8 -8
  1036. package/src/engine/intelligence/behavior/SelectorBehavior.d.ts.map +1 -1
  1037. package/src/engine/intelligence/behavior/SelectorBehavior.js +13 -17
  1038. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts +10 -10
  1039. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
  1040. package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +12 -11
  1041. package/src/engine/intelligence/behavior/composite/ParallelBehaviorSerializationAdapter.d.ts.map +1 -1
  1042. package/src/engine/intelligence/behavior/composite/ParallelBehaviorSerializationAdapter.js +2 -6
  1043. package/src/engine/intelligence/behavior/composite/SequenceBehavior.d.ts.map +1 -1
  1044. package/src/engine/intelligence/behavior/composite/SequenceBehavior.js +19 -22
  1045. package/src/engine/intelligence/behavior/composite/SequenceBehaviorSerializationAdapter.d.ts.map +1 -1
  1046. package/src/engine/intelligence/behavior/composite/SequenceBehaviorSerializationAdapter.js +2 -6
  1047. package/src/engine/intelligence/behavior/decorator/AbstractDecoratorBehavior.d.ts.map +1 -1
  1048. package/src/engine/intelligence/behavior/decorator/AbstractDecoratorBehavior.js +6 -10
  1049. package/src/engine/intelligence/behavior/decorator/InvertStatusBehaviorSerializationAdapter.d.ts.map +1 -1
  1050. package/src/engine/intelligence/behavior/decorator/InvertStatusBehaviorSerializationAdapter.js +2 -6
  1051. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts +5 -5
  1052. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
  1053. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +7 -7
  1054. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.d.ts.map +1 -1
  1055. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.js +2 -6
  1056. package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.d.ts +2 -2
  1057. package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.d.ts.map +1 -1
  1058. package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.js +7 -7
  1059. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.d.ts.map +1 -1
  1060. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.js +3 -5
  1061. package/src/engine/intelligence/behavior/primitive/PromiseBehavior.d.ts +2 -2
  1062. package/src/engine/intelligence/behavior/primitive/PromiseBehavior.d.ts.map +1 -1
  1063. package/src/engine/intelligence/behavior/primitive/PromiseBehavior.js +3 -4
  1064. package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
  1065. package/src/engine/intelligence/behavior/util/RotationBehavior.js +8 -13
  1066. package/src/engine/intelligence/blackboard/Blackboard.d.ts.map +1 -1
  1067. package/src/engine/intelligence/blackboard/Blackboard.js +14 -14
  1068. package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.d.ts.map +1 -1
  1069. package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.js +52 -55
  1070. package/src/engine/intelligence/blackboard/BlackboardStack.d.ts.map +1 -1
  1071. package/src/engine/intelligence/blackboard/BlackboardStack.js +12 -16
  1072. package/src/engine/intelligence/blackboard/BlackboardValue.d.ts.map +1 -1
  1073. package/src/engine/intelligence/blackboard/BlackboardValue.js +6 -5
  1074. package/src/engine/intelligence/controller/graph/StateGraph.d.ts +1 -1
  1075. package/src/engine/intelligence/controller/graph/StateGraph.d.ts.map +1 -1
  1076. package/src/engine/intelligence/controller/graph/StateGraph.js +2 -2
  1077. package/src/engine/intelligence/controller/graph/StateGraphDescription.js +6 -8
  1078. package/src/engine/intelligence/controller/graph/StateGraphSystem.d.ts.map +1 -1
  1079. package/src/engine/intelligence/controller/graph/StateGraphSystem.js +1 -5
  1080. package/src/engine/intelligence/mcts/MoveEdge.d.ts.map +1 -1
  1081. package/src/engine/intelligence/mcts/MoveEdge.js +5 -8
  1082. package/src/engine/intelligence/resource/ResourceAllocationBid.d.ts +5 -5
  1083. package/src/engine/intelligence/resource/ResourceAllocationBid.d.ts.map +1 -1
  1084. package/src/engine/intelligence/resource/ResourceAllocationBid.js +6 -6
  1085. package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
  1086. package/src/engine/interpolation/InterpolationLog.js +564 -583
  1087. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  1088. package/src/engine/interpolation/InterpolationSystem.js +232 -233
  1089. package/src/engine/knowledge/database/StaticKnowledgeDataTableDescriptor.d.ts.map +1 -1
  1090. package/src/engine/knowledge/database/StaticKnowledgeDataTableDescriptor.js +17 -20
  1091. package/src/engine/logging/elastic/ElasticSearchLogger.d.ts +6 -6
  1092. package/src/engine/logging/elastic/ElasticSearchLogger.d.ts.map +1 -1
  1093. package/src/engine/logging/elastic/ElasticSearchLogger.js +31 -32
  1094. package/src/engine/metrics/ProxyMetricsGateway.d.ts.map +1 -1
  1095. package/src/engine/metrics/ProxyMetricsGateway.js +5 -9
  1096. package/src/engine/navigation/ecs/components/Path.d.ts.map +1 -1
  1097. package/src/engine/navigation/ecs/components/Path.js +30 -32
  1098. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_0_1.d.ts.map +1 -1
  1099. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_0_1.js +2 -6
  1100. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_1_2.d.ts.map +1 -1
  1101. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_1_2.js +2 -6
  1102. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.d.ts.map +1 -1
  1103. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.js +34 -38
  1104. package/src/engine/navigation/ecs/path_following/PathFollowerSerializationUpgrader_0_1.d.ts.map +1 -1
  1105. package/src/engine/navigation/ecs/path_following/PathFollowerSerializationUpgrader_0_1.js +2 -6
  1106. package/src/engine/navigation/ecs/path_following/PathFollowerSerializationUpgrader_1_2.d.ts.map +1 -1
  1107. package/src/engine/navigation/ecs/path_following/PathFollowerSerializationUpgrader_1_2.js +2 -6
  1108. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  1109. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +12 -17
  1110. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  1111. package/src/engine/network/NetworkSession.js +2037 -2036
  1112. package/src/engine/network/PriorityFetch.d.ts +6 -6
  1113. package/src/engine/network/PriorityFetch.d.ts.map +1 -1
  1114. package/src/engine/network/PriorityFetch.js +14 -14
  1115. package/src/engine/network/diagnostics/BandwidthMeter.d.ts.map +1 -1
  1116. package/src/engine/network/diagnostics/BandwidthMeter.js +150 -155
  1117. package/src/engine/network/diagnostics/ReplayLog.d.ts +2 -2
  1118. package/src/engine/network/diagnostics/ReplayLog.d.ts.map +1 -1
  1119. package/src/engine/network/diagnostics/ReplayLog.js +132 -137
  1120. package/src/engine/network/diagnostics/SyncTest.d.ts.map +1 -1
  1121. package/src/engine/network/diagnostics/SyncTest.js +146 -151
  1122. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  1123. package/src/engine/network/orchestrator/NetworkPeer.js +1202 -1209
  1124. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +4 -4
  1125. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  1126. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +8 -10
  1127. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +7 -7
  1128. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  1129. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +643 -654
  1130. package/src/engine/network/replication/Replicator.d.ts +24 -24
  1131. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  1132. package/src/engine/network/replication/Replicator.js +405 -410
  1133. package/src/engine/network/sim/ReplicatedComponentRegistry.d.ts.map +1 -1
  1134. package/src/engine/network/sim/ReplicatedComponentRegistry.js +133 -140
  1135. package/src/engine/network/sim/RewindEngine.d.ts.map +1 -1
  1136. package/src/engine/network/sim/RewindEngine.js +179 -182
  1137. package/src/engine/network/sim/SimActionExecutor.d.ts +34 -34
  1138. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  1139. package/src/engine/network/sim/SimActionExecutor.js +305 -306
  1140. package/src/engine/network/sim/SimActionRegistry.d.ts.map +1 -1
  1141. package/src/engine/network/sim/SimActionRegistry.js +121 -128
  1142. package/src/engine/network/sim/SmoothingState.d.ts.map +1 -1
  1143. package/src/engine/network/sim/SmoothingState.js +220 -222
  1144. package/src/engine/network/sim/SpeculationLog.d.ts.map +1 -1
  1145. package/src/engine/network/sim/SpeculationLog.js +79 -84
  1146. package/src/engine/network/state/Baseline.d.ts.map +1 -1
  1147. package/src/engine/network/state/Baseline.js +78 -83
  1148. package/src/engine/network/state/ChangedEntitySet.d.ts.map +1 -1
  1149. package/src/engine/network/state/ChangedEntitySet.js +253 -256
  1150. package/src/engine/network/state/MutationLedger.d.ts.map +1 -1
  1151. package/src/engine/network/state/MutationLedger.js +179 -182
  1152. package/src/engine/network/state/ReplicationSlotTable.d.ts.map +1 -1
  1153. package/src/engine/network/state/ReplicationSlotTable.js +206 -211
  1154. package/src/engine/network/time/AdaptiveRenderDelay.d.ts.map +1 -1
  1155. package/src/engine/network/time/AdaptiveRenderDelay.js +250 -258
  1156. package/src/engine/network/time/JitterBuffer.d.ts.map +1 -1
  1157. package/src/engine/network/time/JitterBuffer.js +113 -116
  1158. package/src/engine/network/time/TimeSync.d.ts.map +1 -1
  1159. package/src/engine/network/time/TimeSync.js +145 -152
  1160. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  1161. package/src/engine/network/transport/LoopbackTransport.js +165 -173
  1162. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
  1163. package/src/engine/network/transport/ReliableCommandPipeline.js +315 -320
  1164. package/src/engine/network/transport/adapters/SimulatedTransport.d.ts.map +1 -1
  1165. package/src/engine/network/transport/adapters/SimulatedTransport.js +235 -241
  1166. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -1
  1167. package/src/engine/network/transport/adapters/WebSocketTransport.js +154 -154
  1168. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  1169. package/src/engine/network/transport/adapters/WebTransportTransport.js +195 -199
  1170. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +1 -1
  1171. package/src/engine/network/transport/fragments/FragmentAssembler.js +286 -291
  1172. package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +1 -1
  1173. package/src/engine/network/transport/fragments/FragmentRetention.js +191 -194
  1174. package/src/engine/physics/body/BodyStorage.d.ts +2 -2
  1175. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
  1176. package/src/engine/physics/body/BodyStorage.js +406 -406
  1177. package/src/engine/physics/body/SolverBodyState.d.ts +8 -8
  1178. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  1179. package/src/engine/physics/body/SolverBodyState.js +10 -10
  1180. package/src/engine/physics/broadphase/PairList.d.ts +1 -1
  1181. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -1
  1182. package/src/engine/physics/broadphase/PairList.js +98 -97
  1183. package/src/engine/physics/contact/ManifoldStore.d.ts +2 -2
  1184. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  1185. package/src/engine/physics/contact/ManifoldStore.js +3 -4
  1186. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +2 -2
  1187. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
  1188. package/src/engine/physics/ecs/ColliderObserverSystem.js +102 -103
  1189. package/src/engine/physics/ecs/PhysicsSystem.d.ts +2 -2
  1190. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  1191. package/src/engine/physics/ecs/PhysicsSystem.js +248 -249
  1192. package/src/engine/physics/events/ContactEventBuffer.d.ts +1 -1
  1193. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
  1194. package/src/engine/physics/events/ContactEventBuffer.js +2 -1
  1195. package/src/engine/physics/fluid/FluidField.d.ts +54 -0
  1196. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  1197. package/src/engine/physics/fluid/FluidField.js +198 -15
  1198. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  1199. package/src/engine/physics/fluid/FluidSimulator.js +14 -4
  1200. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  1201. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +0 -45
  1202. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
  1203. package/src/engine/physics/fluid/ecs/FluidSystem.js +8 -144
  1204. package/src/engine/physics/fluid/ecs/FluidWorkerCore.d.ts +43 -0
  1205. package/src/engine/physics/fluid/ecs/FluidWorkerCore.d.ts.map +1 -0
  1206. package/src/engine/physics/fluid/ecs/FluidWorkerCore.js +123 -0
  1207. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +119 -0
  1208. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -0
  1209. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +395 -0
  1210. package/src/engine/physics/fluid/ecs/fluid.worker.d.ts +2 -0
  1211. package/src/engine/physics/fluid/ecs/fluid.worker.d.ts.map +1 -0
  1212. package/src/engine/physics/fluid/ecs/fluid.worker.js +12 -0
  1213. package/src/engine/physics/fluid/ecs/fluid_build_world_to_grid.d.ts +20 -0
  1214. package/src/engine/physics/fluid/ecs/fluid_build_world_to_grid.d.ts.map +1 -0
  1215. package/src/engine/physics/fluid/ecs/fluid_build_world_to_grid.js +32 -0
  1216. package/src/engine/physics/fluid/ecs/fluid_gather_visible_effectors.d.ts +22 -0
  1217. package/src/engine/physics/fluid/ecs/fluid_gather_visible_effectors.d.ts.map +1 -0
  1218. package/src/engine/physics/fluid/ecs/fluid_gather_visible_effectors.js +47 -0
  1219. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts +28 -0
  1220. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -0
  1221. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +85 -0
  1222. package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts +11 -0
  1223. package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts.map +1 -0
  1224. package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.js +16 -0
  1225. package/src/engine/physics/fluid/ecs/fluid_worker_protocol.d.ts +51 -0
  1226. package/src/engine/physics/fluid/ecs/fluid_worker_protocol.d.ts.map +1 -0
  1227. package/src/engine/physics/fluid/ecs/fluid_worker_protocol.js +111 -0
  1228. package/src/engine/physics/fluid/ecs/makeFluidWorker.d.ts +17 -0
  1229. package/src/engine/physics/fluid/ecs/makeFluidWorker.d.ts.map +1 -0
  1230. package/src/engine/physics/fluid/ecs/makeFluidWorker.js +18 -0
  1231. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  1232. package/src/engine/physics/island/IslandBuilder.js +84 -86
  1233. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
  1234. package/src/engine/physics/mls-mpm/MLS_MPM.js +24 -26
  1235. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
  1236. package/src/engine/physics/queries/PhysicsSurfacePoint.js +98 -100
  1237. package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -6
  1238. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  1239. package/src/engine/physics/vehicle/RaycastVehicle.js +357 -344
  1240. package/src/engine/plugin/PluginReferenceContext.d.ts +12 -12
  1241. package/src/engine/plugin/PluginReferenceContext.d.ts.map +1 -1
  1242. package/src/engine/plugin/PluginReferenceContext.js +24 -25
  1243. package/src/engine/scene/Scene.d.ts +5 -5
  1244. package/src/engine/scene/Scene.d.ts.map +1 -1
  1245. package/src/engine/scene/Scene.js +24 -23
  1246. package/src/engine/scene/SceneManager.d.ts +5 -5
  1247. package/src/engine/scene/SceneManager.d.ts.map +1 -1
  1248. package/src/engine/scene/SceneManager.js +13 -14
  1249. package/src/engine/sound/SoundEngine.d.ts +2 -2
  1250. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  1251. package/src/engine/sound/SoundEngine.js +7 -8
  1252. package/src/engine/sound/asset/SoundAssetPlaybackSpec.d.ts.map +1 -1
  1253. package/src/engine/sound/asset/SoundAssetPlaybackSpec.js +16 -20
  1254. package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
  1255. package/src/engine/sound/ecs/SoundController.js +37 -33
  1256. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
  1257. package/src/engine/sound/ecs/SoundControllerSystem.js +5 -11
  1258. package/src/engine/sound/ecs/SoundListener.d.ts.map +1 -1
  1259. package/src/engine/sound/ecs/SoundListener.js +4 -6
  1260. package/src/engine/sound/ecs/SoundListenerSystem.d.ts +6 -6
  1261. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  1262. package/src/engine/sound/ecs/SoundListenerSystem.js +22 -23
  1263. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +10 -4
  1264. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  1265. package/src/engine/sound/ecs/audio/AudioEmitter.js +131 -122
  1266. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts +34 -0
  1267. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts.map +1 -0
  1268. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.js +68 -0
  1269. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +6 -6
  1270. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  1271. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +314 -316
  1272. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
  1273. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +31 -1
  1274. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationUpgrader_0_1.d.ts.map +1 -1
  1275. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationUpgrader_0_1.js +2 -6
  1276. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationUpgrader_1_2.d.ts.map +1 -1
  1277. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationUpgrader_1_2.js +2 -6
  1278. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +5 -5
  1279. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
  1280. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +159 -159
  1281. package/src/engine/sound/material/concrete/RandomSoundMaterial.d.ts.map +1 -1
  1282. package/src/engine/sound/material/concrete/RandomSoundMaterial.js +5 -9
  1283. package/src/engine/sound/material/concrete/SingleSoundMaterial.d.ts.map +1 -1
  1284. package/src/engine/sound/material/concrete/SingleSoundMaterial.js +1 -6
  1285. package/src/engine/sound/material/concrete/SoundMaterialComposition.d.ts.map +1 -1
  1286. package/src/engine/sound/material/concrete/SoundMaterialComposition.js +18 -21
  1287. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
  1288. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +13 -15
  1289. package/src/engine/sound/simulation/core/OccluderBody.d.ts +12 -12
  1290. package/src/engine/sound/simulation/core/OccluderBody.d.ts.map +1 -1
  1291. package/src/engine/sound/simulation/core/OccluderBody.js +74 -74
  1292. package/src/engine/sound/simulation/prototypeAcousticSolver.js +5 -4
  1293. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +7 -3
  1294. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -1
  1295. package/src/engine/sound/sopra/definition/SopraPanningModel.js +34 -20
  1296. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +15 -0
  1297. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -1
  1298. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +122 -106
  1299. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  1300. package/src/engine/sound/sopra/runtime/EventInstance.js +852 -815
  1301. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +20 -6
  1302. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -1
  1303. package/src/engine/sound/sopra/util/buildAttenuationCurve.js +56 -21
  1304. package/src/engine/ui/bindings/DomElementBinding.d.ts.map +1 -1
  1305. package/src/engine/ui/bindings/DomElementBinding.js +15 -18
  1306. package/src/engine/ui/bindings/DomElementBindingDescription.d.ts.map +1 -1
  1307. package/src/engine/ui/bindings/DomElementBindingDescription.js +10 -14
  1308. package/src/engine/ui/bindings/DomElementProcessor.d.ts.map +1 -1
  1309. package/src/engine/ui/bindings/DomElementProcessor.js +5 -7
  1310. package/src/engine/ui/bindings/DomElementProcessorManager.d.ts.map +1 -1
  1311. package/src/engine/ui/bindings/DomElementProcessorManager.js +26 -26
  1312. package/src/engine/ui/bindings/processors/DomElementProcessorTilt3D.d.ts.map +1 -1
  1313. package/src/engine/ui/bindings/processors/DomElementProcessorTilt3D.js +15 -19
  1314. package/src/engine/ui/cursor/CursorCoalescence.d.ts.map +1 -1
  1315. package/src/engine/ui/cursor/CursorCoalescence.js +11 -14
  1316. package/src/engine/ui/modal/ModalStack.d.ts.map +1 -1
  1317. package/src/engine/ui/modal/ModalStack.js +19 -22
  1318. package/src/engine/ui/notification/AnimatedObjectEmitter.d.ts +4 -4
  1319. package/src/engine/ui/notification/AnimatedObjectEmitter.d.ts.map +1 -1
  1320. package/src/engine/ui/notification/AnimatedObjectEmitter.js +68 -70
  1321. package/src/engine/ui/notification/NotificationManager.d.ts +4 -4
  1322. package/src/engine/ui/notification/NotificationManager.d.ts.map +1 -1
  1323. package/src/engine/ui/notification/NotificationManager.js +27 -29
  1324. package/src/engine/ui/notification/ViewEmitter.d.ts.map +1 -1
  1325. package/src/engine/ui/notification/ViewEmitter.js +2 -2
  1326. package/src/engine/ui/scene/SceneGUIContext.d.ts.map +1 -1
  1327. package/src/engine/ui/scene/SceneGUIContext.js +20 -22
  1328. package/src/engine/ui/tiles2d/TileMoveProgram.d.ts.map +1 -1
  1329. package/src/engine/ui/tiles2d/TileMoveProgram.js +5 -7
  1330. package/src/generation/GraphGenerationRule.d.ts.map +1 -1
  1331. package/src/generation/GraphGenerationRule.js +10 -14
  1332. package/src/generation/GridGeneratorConfig.d.ts.map +1 -1
  1333. package/src/generation/GridGeneratorConfig.js +15 -19
  1334. package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
  1335. package/src/generation/filtering/CellFilterCellMatcher.js +5 -9
  1336. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
  1337. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +11 -15
  1338. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts.map +1 -1
  1339. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +11 -15
  1340. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +10 -10
  1341. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
  1342. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +20 -19
  1343. package/src/generation/markers/matcher/MarkerNodeMatcherByType.d.ts.map +1 -1
  1344. package/src/generation/markers/matcher/MarkerNodeMatcherByType.js +5 -9
  1345. package/src/generation/placement/action/random/CellActionSelectRandom.d.ts.map +1 -1
  1346. package/src/generation/placement/action/random/CellActionSelectRandom.js +11 -16
  1347. package/src/view/ViewGroup.d.ts.map +1 -1
  1348. package/src/view/ViewGroup.js +11 -14
  1349. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  1350. package/src/view/common/HTMLElementCacheKey.js +21 -24
  1351. package/src/view/common/TabbedView.d.ts +56 -26
  1352. package/src/view/common/TabbedView.d.ts.map +1 -1
  1353. package/src/view/common/TabbedView.js +128 -30
  1354. package/src/view/common/dnd/DragAndDropContext.d.ts.map +1 -1
  1355. package/src/view/common/dnd/DragAndDropContext.js +11 -12
  1356. package/src/view/common/dnd/Draggable.d.ts +5 -5
  1357. package/src/view/common/dnd/Draggable.d.ts.map +1 -1
  1358. package/src/view/common/dnd/Draggable.js +6 -6
  1359. package/src/view/controller/GuiController.d.ts +1 -1
  1360. package/src/view/controller/GuiController.d.ts.map +1 -1
  1361. package/src/view/controller/GuiController.js +3 -3
  1362. package/src/view/controller/controls/BooleanVector3Control.d.ts.map +1 -1
  1363. package/src/view/controller/controls/BooleanVector3Control.js +2 -2
  1364. package/src/view/controller/controls/NumericIntervalControl.d.ts +1 -1
  1365. package/src/view/controller/controls/NumericIntervalControl.d.ts.map +1 -1
  1366. package/src/view/controller/controls/NumericIntervalControl.js +90 -90
  1367. package/src/view/controller/controls/Vector2Control.d.ts +1 -1
  1368. package/src/view/controller/controls/Vector2Control.d.ts.map +1 -1
  1369. package/src/view/controller/controls/Vector2Control.js +83 -83
  1370. package/src/view/controller/controls/Vector3Control.d.ts +1 -1
  1371. package/src/view/controller/controls/Vector3Control.d.ts.map +1 -1
  1372. package/src/view/controller/controls/Vector3Control.js +90 -90
  1373. package/{editor/view/ecs/components → src/view/controller/dat}/DatGuiController.d.ts +45 -45
  1374. package/src/view/controller/dat/DatGuiController.d.ts.map +1 -0
  1375. package/src/view/controller/dat/DatGuiController.js +216 -0
  1376. package/src/view/currency/CompositeCurrencyLabelView.d.ts.map +1 -1
  1377. package/src/view/currency/CompositeCurrencyLabelView.js +2 -2
  1378. package/src/view/currency/CurrencyDenominationLabelView.d.ts.map +1 -1
  1379. package/src/view/currency/CurrencyDenominationLabelView.js +2 -3
  1380. package/src/view/currency/CurrencyDenominationSpec.d.ts.map +1 -1
  1381. package/src/view/currency/CurrencyDenominationSpec.js +11 -12
  1382. package/src/view/currency/CurrencyDisplaySpec.d.ts.map +1 -1
  1383. package/src/view/currency/CurrencyDisplaySpec.js +5 -9
  1384. package/src/view/elements/ColorPickerView.js +1 -1
  1385. package/src/view/elements/EmptyView.js +1 -1
  1386. package/src/view/elements/MeshPreview.d.ts +1 -1
  1387. package/src/view/elements/MeshPreview.d.ts.map +1 -1
  1388. package/src/view/elements/MeshPreview.js +4 -10
  1389. package/{editor/view/ecs/components/particles/ColorParameterLUTController.d.ts → src/view/elements/drawCheckers.d.ts} +13 -14
  1390. package/src/view/elements/drawCheckers.d.ts.map +1 -0
  1391. package/src/view/elements/drawCheckers.js +33 -0
  1392. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
  1393. package/src/view/elements/progress/segmented/SegmentDefinition.js +1 -3
  1394. package/src/view/elements/radial/RadialMenu.d.ts.map +1 -1
  1395. package/src/view/elements/radial/RadialMenu.js +18 -19
  1396. package/src/view/elements/radial/RadialMenuElementDefinition.d.ts.map +1 -1
  1397. package/src/view/elements/radial/RadialMenuElementDefinition.js +95 -87
  1398. package/src/view/elements/radial/RadialText.d.ts +3 -3
  1399. package/src/view/elements/radial/RadialText.d.ts.map +1 -1
  1400. package/src/view/elements/radial/RadialText.js +19 -22
  1401. package/src/view/elements/tiles2d/Tile.d.ts +1 -1
  1402. package/src/view/elements/tiles2d/Tile.d.ts.map +1 -1
  1403. package/src/view/elements/tiles2d/Tile.js +2 -2
  1404. package/src/view/elements/tiles2d/TileGrid.d.ts.map +1 -1
  1405. package/src/view/elements/tiles2d/TileGrid.js +1 -4
  1406. package/src/view/game/achievements/AchievementNotificationView.d.ts.map +1 -1
  1407. package/src/view/game/achievements/AchievementNotificationView.js +2 -3
  1408. package/src/view/interaction/InteractionCommandSet.d.ts.map +1 -1
  1409. package/src/view/interaction/InteractionCommandSet.js +5 -7
  1410. package/src/view/layout/DockDragOverlayView.d.ts +24 -0
  1411. package/src/view/layout/DockDragOverlayView.d.ts.map +1 -0
  1412. package/src/view/layout/DockDragOverlayView.js +63 -0
  1413. package/src/view/layout/DockDropPlan.d.ts +46 -0
  1414. package/src/view/layout/DockDropPlan.d.ts.map +1 -0
  1415. package/src/view/layout/DockDropPlan.js +53 -0
  1416. package/src/view/layout/DockGroupNode.d.ts +29 -0
  1417. package/src/view/layout/DockGroupNode.d.ts.map +1 -0
  1418. package/src/view/layout/DockGroupNode.js +38 -0
  1419. package/src/view/layout/DockLayoutView.d.ts +125 -0
  1420. package/src/view/layout/DockLayoutView.d.ts.map +1 -0
  1421. package/src/view/layout/DockLayoutView.js +1193 -0
  1422. package/src/view/layout/DockPanel.d.ts +38 -0
  1423. package/src/view/layout/DockPanel.d.ts.map +1 -0
  1424. package/src/view/layout/DockPanel.js +51 -0
  1425. package/src/view/layout/DockSide.d.ts +48 -0
  1426. package/src/view/layout/DockSide.d.ts.map +1 -0
  1427. package/src/view/layout/DockSide.js +88 -0
  1428. package/src/view/layout/DockSplitNode.d.ts +59 -0
  1429. package/src/view/layout/DockSplitNode.d.ts.map +1 -0
  1430. package/src/view/layout/DockSplitNode.js +78 -0
  1431. package/src/view/layout/DrawerView.d.ts +53 -0
  1432. package/src/view/layout/DrawerView.d.ts.map +1 -0
  1433. package/src/view/layout/DrawerView.js +163 -0
  1434. package/src/view/layout/FloatingPanelView.d.ts +38 -0
  1435. package/src/view/layout/FloatingPanelView.d.ts.map +1 -0
  1436. package/src/view/layout/FloatingPanelView.js +251 -0
  1437. package/src/view/layout/SplitView.d.ts +73 -0
  1438. package/src/view/layout/SplitView.d.ts.map +1 -0
  1439. package/src/view/layout/SplitView.js +365 -0
  1440. package/src/view/layout/layout.scss +236 -0
  1441. package/src/view/layout/show_popup_menu.d.ts +19 -0
  1442. package/src/view/layout/show_popup_menu.d.ts.map +1 -0
  1443. package/src/view/layout/show_popup_menu.js +81 -0
  1444. package/src/view/minimap/Minimap.d.ts.map +1 -1
  1445. package/src/view/minimap/Minimap.js +2 -6
  1446. package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
  1447. package/src/view/minimap/dom/MinimapMarkerView.js +2 -3
  1448. package/src/view/minimap/gl/MarkerGL.d.ts +6 -6
  1449. package/src/view/minimap/gl/MarkerGL.d.ts.map +1 -1
  1450. package/src/view/minimap/gl/MarkerGL.js +8 -9
  1451. package/src/view/minimap/gl/MinimapFogOfWar.d.ts +7 -7
  1452. package/src/view/minimap/gl/MinimapFogOfWar.d.ts.map +1 -1
  1453. package/src/view/minimap/gl/MinimapFogOfWar.js +10 -12
  1454. package/src/view/minimap/gl/MinimapWorldGL.d.ts +15 -15
  1455. package/src/view/minimap/gl/MinimapWorldGL.d.ts.map +1 -1
  1456. package/src/view/minimap/gl/MinimapWorldGL.js +18 -16
  1457. package/src/view/minimap/gl/MinimapWorldLayer.d.ts.map +1 -1
  1458. package/src/view/minimap/gl/MinimapWorldLayer.js +4 -8
  1459. package/src/view/tooltip/DomTooltipManager.d.ts +6 -6
  1460. package/src/view/tooltip/DomTooltipManager.d.ts.map +1 -1
  1461. package/src/view/tooltip/DomTooltipManager.js +21 -22
  1462. package/src/view/tooltip/TooltipManager.d.ts.map +1 -1
  1463. package/src/view/tooltip/TooltipManager.js +6 -8
  1464. package/src/view/tooltip/TooltipView.d.ts +1 -1
  1465. package/src/view/tooltip/TooltipView.d.ts.map +1 -1
  1466. package/src/view/tooltip/TooltipView.js +3 -4
  1467. package/src/view/tooltip/VisualTip.d.ts +5 -5
  1468. package/src/view/tooltip/VisualTip.d.ts.map +1 -1
  1469. package/src/view/tooltip/VisualTip.js +6 -7
  1470. package/src/view/tooltip/gml/GMLEngine.d.ts.map +1 -1
  1471. package/src/view/tooltip/gml/GMLEngine.js +57 -63
  1472. package/src/view/util/DomSizeObserver.d.ts +6 -6
  1473. package/src/view/util/DomSizeObserver.d.ts.map +1 -1
  1474. package/src/view/util/DomSizeObserver.js +27 -20
  1475. package/editor/actions/concrete/PatchTerrainTextureAction.js +0 -153
  1476. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts +0 -14
  1477. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts.map +0 -1
  1478. package/editor/process/symbolic/makeStoryTriggerSetAreaDisplay.js +0 -114
  1479. package/editor/tools/TopDownCameraControlTool.d.ts +0 -13
  1480. package/editor/tools/TopDownCameraControlTool.d.ts.map +0 -1
  1481. package/editor/tools/TopDownCameraControlTool.js +0 -56
  1482. package/editor/tools/TransformTool.js +0 -385
  1483. package/editor/tools/paint/prototypeTerrainEditor.js +0 -135
  1484. package/editor/view/EditorView.d.ts +0 -39
  1485. package/editor/view/EditorView.d.ts.map +0 -1
  1486. package/editor/view/EditorView.js +0 -304
  1487. package/editor/view/ecs/ComponentControlFactory.d.ts +0 -19
  1488. package/editor/view/ecs/ComponentControlFactory.d.ts.map +0 -1
  1489. package/editor/view/ecs/ComponentControlFactory.js +0 -45
  1490. package/editor/view/ecs/EntityList.d.ts +0 -22
  1491. package/editor/view/ecs/EntityList.d.ts.map +0 -1
  1492. package/editor/view/ecs/HierarchicalEntityListView.module.scss +0 -13
  1493. package/editor/view/ecs/components/BlackboardController.js +0 -50
  1494. package/editor/view/ecs/components/DatGuiController.d.ts.map +0 -1
  1495. package/editor/view/ecs/components/FogOfWarController.js +0 -78
  1496. package/editor/view/ecs/components/FogOfWarRevealerController.js +0 -44
  1497. package/editor/view/ecs/components/GeneratedArmyController.js +0 -42
  1498. package/editor/view/ecs/components/GridObstacleController.d.ts +0 -14
  1499. package/editor/view/ecs/components/GridObstacleController.d.ts.map +0 -1
  1500. package/editor/view/ecs/components/GridObstacleController.js +0 -72
  1501. package/editor/view/ecs/components/GridPositionController.js +0 -40
  1502. package/editor/view/ecs/components/HeadsUpDisplayController.js +0 -30
  1503. package/editor/view/ecs/components/HighlightController.js +0 -47
  1504. package/editor/view/ecs/components/MeshController.js +0 -122
  1505. package/editor/view/ecs/components/PathFollowerController.js +0 -87
  1506. package/editor/view/ecs/components/TagController.js +0 -80
  1507. package/editor/view/ecs/components/TerrainController.js +0 -215
  1508. package/editor/view/ecs/components/TransformController.js +0 -97
  1509. package/editor/view/ecs/components/UnitShopController.js +0 -112
  1510. package/editor/view/ecs/components/army/ArmyController.js +0 -130
  1511. package/editor/view/ecs/components/gui/GUIElementController.js +0 -117
  1512. package/editor/view/ecs/components/items/ItemContainerController.js +0 -132
  1513. package/editor/view/ecs/components/items/ItemContainerController.stories.js +0 -50
  1514. package/editor/view/ecs/components/items/ItemController.js +0 -52
  1515. package/editor/view/ecs/components/particles/ColorParameterLUTController.d.ts.map +0 -1
  1516. package/editor/view/ecs/components/particles/ColorParameterLUTController.js +0 -444
  1517. package/editor/view/ecs/components/particles/ParameterTrackController.js +0 -51
  1518. package/editor/view/ecs/components/particles/ParticleEmitterController.js +0 -213
  1519. package/editor/view/ecs/components/particles/ParticleLayerController.js +0 -213
  1520. package/editor/view/ecs/components/particles/ScalarParameterLUTController.js +0 -401
  1521. package/editor/view/ecs/components/sockets/AttachmentSocketsController.js +0 -51
  1522. package/editor/view/ecs/components/sound/SoundEmitterController.js +0 -137
  1523. package/editor/view/ecs/components/story/StoryTriggerSetController.js +0 -214
  1524. package/editor/view/ecs/components/unit/AuraController.js +0 -45
  1525. package/editor/view/makeEntityDecorators.d.ts +0 -6
  1526. package/editor/view/makeEntityDecorators.d.ts.map +0 -1
  1527. package/editor/view/v2/SplitView.d.ts +0 -17
  1528. package/editor/view/v2/SplitView.d.ts.map +0 -1
  1529. package/editor/view/v2/ViewManagementSystem.js +0 -0
  1530. package/editor/view/v2/prototypeEditor.js +0 -127
  1531. package/src/engine/graphics/ecs/sprite/prototypeSpriteSystem.d.ts +0 -2
  1532. package/src/engine/graphics/ecs/sprite/prototypeSpriteSystem.d.ts.map +0 -1
  1533. package/src/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +0 -1570
  1534. package/src/engine/graphics/three/TransfromControls.js +0 -1495
  1535. package/src/view/controller/controls_v2/AbstractPropertyBinding.d.ts +0 -8
  1536. package/src/view/controller/controls_v2/AbstractPropertyBinding.d.ts.map +0 -1
  1537. package/src/view/controller/controls_v2/AbstractPropertyBinding.ts +0 -10
  1538. package/src/view/controller/controls_v2/Controller.d.ts +0 -21
  1539. package/src/view/controller/controls_v2/Controller.d.ts.map +0 -1
  1540. package/src/view/controller/controls_v2/Controller.ts +0 -32
  1541. package/src/view/controller/controls_v2/IPropertyBinding.d.ts +0 -5
  1542. package/src/view/controller/controls_v2/IPropertyBinding.d.ts.map +0 -1
  1543. package/src/view/controller/controls_v2/IPropertyBinding.ts +0 -6
  1544. package/src/view/controller/controls_v2/PrimitivePropertyBinding.d.ts +0 -6
  1545. package/src/view/controller/controls_v2/PrimitivePropertyBinding.d.ts.map +0 -1
  1546. package/src/view/controller/controls_v2/PrimitivePropertyBinding.ts +0 -12
  1547. package/src/view/controller/controls_v2/SliderController.d.ts +0 -6
  1548. package/src/view/controller/controls_v2/SliderController.d.ts.map +0 -1
  1549. package/src/view/controller/controls_v2/SliderController.ts +0 -10
  1550. package/src/view/elements/button/ButtonView.stories.d.ts +0 -2
  1551. package/src/view/elements/button/ButtonView.stories.d.ts.map +0 -1
  1552. package/src/view/elements/button/ButtonView.stories.js +0 -14
@@ -1,815 +1,852 @@
1
- import Signal from "../../../../core/events/signal/Signal.js";
2
- import { dB2Volume } from "../../dB2Volume.js";
3
- import { FADE_EPSILON, rampGain } from "../util/fadeOutAndStop.js";
4
- import { SOPRA_PANNING_MODEL_TO_WEBAUDIO } from "../definition/SopraPanningModel.js";
5
- import { VOICE_POOL } from "./VoicePool.js";
6
- import { LOW_MID_HZ, MID_HIGH_HZ } from "../../simulation/render/reverbImpulseResponse.js";
7
-
8
- /**
9
- * Lifecycle state of an {@link EventInstance}.
10
- * @enum {number}
11
- */
12
- export const EventInstanceState = {
13
- Initial: 0,
14
- Playing: 1,
15
- Stopped: 2
16
- };
17
-
18
- /**
19
- * How far ahead (seconds) leaves are spawned before their scheduled start, so `source.start(when)`
20
- * stays sample-accurate even when the driving frame is slightly late ("Tale of Two Clocks").
21
- * @type {number}
22
- */
23
- const LOOKAHEAD_SECONDS = 0.2;
24
-
25
- const DEFAULT_MAX_LIFETIME_SECONDS = 60;
26
-
27
- /**
28
- * Per-band air tilt (dB of high-vs-low EXCESS loss) → linear amplitude gain. A non-positive tilt (a band
29
- * losing no more than the low anchor) is transparent — air only darkens, never boosts.
30
- * @param {number} excessDb
31
- * @returns {number}
32
- */
33
- function dbTiltToGain(excessDb) {
34
- return excessDb <= 0 ? 1 : dB2Volume(-excessDb);
35
- }
36
-
37
- /**
38
- * Build a 3-band SUBTRACTIVE crossover on the reverb's band edges: `input` fans to two lowpasses
39
- * (LP{@link LOW_MID_HZ}, LP{@link MID_HIGH_HZ}) and a dry tap; the bands are low = LP_low,
40
- * mid = LP_mid − LP_low, high = dry − LP_mid. The three SUMMED taps carry the bands DIFFERENCED
41
- * (out = lowTap·LP_low + midTap·LP_mid + dryTap·dry), so {@link set3BandGains} reconstructs arbitrary per-band
42
- * gains; the split telescopes flat (exact per-sample) when the bands are equal and stays robust when a band is
43
- * 0. Wired input → crossover → `output`; init transparent (dry passes whole). Caveat: the LP biquads are NOT
44
- * power-complementary, so a band overshoots its gain by ~2-3 dB right at the 250/2500 Hz crossovers (benign).
45
- * @returns {{lpLow:BiquadFilterNode,lpMid:BiquadFilterNode,lowTap:GainNode,midTap:GainNode,dryTap:GainNode}}
46
- */
47
- function build3BandCrossover(ctx, input, output) {
48
- const lpLow = ctx.createBiquadFilter();
49
- lpLow.type = 'lowpass';
50
- lpLow.frequency.setValueAtTime(LOW_MID_HZ, 0);
51
-
52
- const lpMid = ctx.createBiquadFilter();
53
- lpMid.type = 'lowpass';
54
- lpMid.frequency.setValueAtTime(MID_HIGH_HZ, 0);
55
-
56
- const lowTap = ctx.createGain();
57
- lowTap.gain.setValueAtTime(0, 0);
58
- const midTap = ctx.createGain();
59
- midTap.gain.setValueAtTime(0, 0);
60
- const dryTap = ctx.createGain();
61
- dryTap.gain.setValueAtTime(1, 0);
62
-
63
- input.connect(lpLow);
64
- input.connect(lpMid);
65
- input.connect(dryTap);
66
- lpLow.connect(lowTap);
67
- lpMid.connect(midTap);
68
- lowTap.connect(output);
69
- midTap.connect(output);
70
- dryTap.connect(output);
71
-
72
- return { lpLow, lpMid, lowTap, midTap, dryTap };
73
- }
74
-
75
- /**
76
- * Set per-band gains (gLow/gMid/gHigh, each in [0,1]) onto a crossover's DIFFERENCED taps so the summed taps
77
- * reconstruct gLow·low + gMid·mid + gHigh·high (telescoping, exact per-sample). See {@link build3BandCrossover}.
78
- */
79
- function set3BandGains(x, gLow, gMid, gHigh, when) {
80
- x.lowTap.gain.setValueAtTime(gLow - gMid, when);
81
- x.midTap.gain.setValueAtTime(gMid - gHigh, when);
82
- x.dryTap.gain.setValueAtTime(gHigh, when);
83
- }
84
-
85
- /** Disconnect all five nodes of a crossover ({@link build3BandCrossover}). */
86
- function disconnect3Band(x) {
87
- x.lpLow.disconnect();
88
- x.lpMid.disconnect();
89
- x.lowTap.disconnect();
90
- x.midTap.disconnect();
91
- x.dryTap.disconnect();
92
- }
93
-
94
- /**
95
- * One triggered playing of an {@link EventDescription}. Transient — never serialized.
96
- *
97
- * Playback is **cursor-based**: each frame {@link update} compares the logical playhead
98
- * (`now - startedAt`) against the resolved timeline and, for each leaf whose window is current,
99
- * spawns a voice — but only while the instance is audible. Out-of-range/below-threshold instances go
100
- * **virtual** (their voices stop while the cursor keeps advancing) and revive at the correct child +
101
- * buffer-offset when audible again (D3). 3D instances own a shared `attenuationGain → panner → bus`
102
- * chain (D4); the attenuation gain is driven by distance through the event's attenuation curve.
103
- */
104
- export class EventInstance {
105
-
106
- /**
107
- * @type {number}
108
- */
109
- startedAt = 0;
110
-
111
- /**
112
- * @type {EventInstanceState|number}
113
- */
114
- state = EventInstanceState.Initial;
115
-
116
- /**
117
- * Current post-attenuation linear gain (1 for non-3D). Read by the VoiceManager for steal-quietest.
118
- * @type {number}
119
- */
120
- currentGain = 1;
121
-
122
- /**
123
- * Apparent acoustic radius of this source, for volumetric (fractional) occlusion in the acoustic
124
- * simulation (0 = point source). Per-source — a footstep and an explosion occlude differently. Read by
125
- * the `AcousticSimulator`; only meaningful for acoustic 3D instances. Set from the play options.
126
- * @type {number}
127
- */
128
- sourceRadius = 0.5;
129
-
130
- /**
131
- * Fires `this` when the instance has fully stopped (ended, stopped, timed out, or failed to load).
132
- * @type {Signal<EventInstance>}
133
- */
134
- onEnded = new Signal();
135
-
136
- /**
137
- * Resolved timeline: one entry per leaf play. Null until buffers are loaded and the timeline is
138
- * resolved. Each entry: { clip, offset, gainDb, pitchCents, duration, voice }.
139
- * @type {{clip: SampleAudioClip, offset: number, gainDb: number, pitchCents: number, duration: number, voice: Voice|null}[]|null}
140
- */
141
- #timeline = null;
142
-
143
- /**
144
- * @type {Map<SampleAudioClip, AudioBuffer>|null}
145
- */
146
- #bufferMap = null;
147
-
148
- /**
149
- * @type {number}
150
- */
151
- #totalDuration = 0;
152
-
153
- /**
154
- * Node that voices route into: the instance's attenuation gain (3D) or the bus input (2D).
155
- * @type {AudioNode|null}
156
- */
157
- #chainHead = null;
158
-
159
- /**
160
- * @type {GainNode|null}
161
- */
162
- #attenuationGain = null;
163
-
164
- /**
165
- * @type {PannerNode|null}
166
- */
167
- #panner = null;
168
-
169
- /**
170
- * Always-on per-instance trim gain — the chain head ALL voices route through (2D and 3D). Carries
171
- * the live instance volume (setGainDb / fades); composes (multiplies) with #attenuationGain in 3D.
172
- * @type {GainNode|null}
173
- */
174
- #instanceGain = null;
175
-
176
- /**
177
- * Live instance gain in decibels (0 dB = unity). Applied to #instanceGain.
178
- * @type {number}
179
- */
180
- #gainDb = 0;
181
-
182
- /**
183
- * Audio-clock time at which a scheduled fade-out stops the instance; Infinity = none.
184
- * @type {number}
185
- */
186
- #stopDeadline = Infinity;
187
-
188
- /**
189
- * @type {boolean}
190
- */
191
- #audible = true;
192
-
193
- /**
194
- * Logical start timestamp (audio clock). When set, the playhead is `now - startTime` from the
195
- * outset, so a promoted emitter resumes at the phase it "should" be at given elapsed real time
196
- * (continuous-clock semantics); null = start now (playhead 0).
197
- * @type {number|null}
198
- */
199
- #startTime = null;
200
-
201
- /**
202
- * Whether this instance is driven by the acoustic simulation (occlusion / transmission / medium). When
203
- * true and 3D, a 3-band acoustic crossover is inserted in the chain and {@link setAcoustic} drives its
204
- * per-band gains; otherwise those nodes are absent and setAcoustic is a no-op (zero cost for ordinary events).
205
- * @type {boolean}
206
- */
207
- #acoustic = false;
208
-
209
- /**
210
- * Direct (through-wall) 3-band crossover ({@link build3BandCrossover}); per-band gains driven in
211
- * {@link setAcoustic} by occlusion × the band's transmission × air tilt. Null on non-acoustic instances.
212
- * @type {object|null}
213
- */
214
- #acoustic3Band = null;
215
-
216
- /**
217
- * Whether the engine-wide pathing (corner-leakage) render is active for this instance. When true and
218
- * 3D, a second panned send is inserted so leaked sound can be spatialized from its exit point.
219
- * @type {boolean}
220
- */
221
- #pathing = false;
222
-
223
- /**
224
- * Corner-leak 3-band crossover ({@link build3BandCrossover}, pathing 3D only); per-band gains driven in
225
- * {@link setAcoustic} by the leak's geometric strength × (1 − the band's transmission: energy that did NOT
226
- * transmit through a band leaks AROUND it) × the path air tilt — consistent with the direct path.
227
- * @type {object|null}
228
- */
229
- #leak3Band = null;
230
-
231
- /**
232
- * Path-send panner, positioned at the propagation exit point (pathing 3D only).
233
- * @type {PannerNode|null}
234
- */
235
- #pathPanner = null;
236
-
237
- /**
238
- * @param {SopraEngine} engine
239
- * @param {EventDescription} description
240
- * @param {{busId?:string, position?:Vector3, oneShot?:boolean, maxLifetime?:number, playbackContext?:SopraPlaybackContext, startTime?:number, acoustic?:boolean, pathing?:boolean, sourceRadius?:number, orientation?:Quaternion, directivity?:AcousticDirectivity}} [options]
241
- */
242
- constructor(engine, description, {
243
- busId = description.busId,
244
- position = null,
245
- oneShot = false,
246
- maxLifetime = DEFAULT_MAX_LIFETIME_SECONDS,
247
- playbackContext = engine.defaultPlaybackContext,
248
- startTime = null,
249
- acoustic = false,
250
- pathing = false,
251
- sourceRadius = 0.5,
252
- orientation = null,
253
- directivity = null
254
- } = {}) {
255
- /**
256
- * @type {SopraEngine}
257
- */
258
- this.engine = engine;
259
-
260
- /**
261
- * @type {EventDescription}
262
- */
263
- this.description = description;
264
-
265
- /**
266
- * @type {string}
267
- */
268
- this.busId = busId;
269
-
270
- /**
271
- * World position for spatialization. Null = non-positional.
272
- * @type {Vector3|null}
273
- */
274
- this.position = position;
275
-
276
- /**
277
- * World orientation of the source (shared {@link Transform} rotation ref, so it tracks the entity).
278
- * Read by the {@link AcousticSimulator} only to evaluate {@link directivity}; null when the source has
279
- * no directivity. Not used for non-acoustic playback.
280
- * @type {Quaternion|null}
281
- */
282
- this.orientation = orientation;
283
-
284
- /**
285
- * Source radiation directivity (which way the sound "points"). Null = omnidirectional. Read by the
286
- * {@link AcousticSimulator}; carried so it can solve the per-direction radiation gain into the
287
- * solution's `directivityGain`.
288
- * @type {AcousticDirectivity|null}
289
- */
290
- this.directivity = directivity;
291
-
292
- /**
293
- * @type {boolean}
294
- */
295
- this.oneShot = oneShot;
296
-
297
- /**
298
- * @type {number}
299
- */
300
- this.maxLifetimeSeconds = maxLifetime;
301
-
302
- /**
303
- * @type {SopraPlaybackContext}
304
- */
305
- this.playbackContext = playbackContext;
306
-
307
- this.#startTime = startTime;
308
-
309
- this.#acoustic = acoustic;
310
-
311
- this.#pathing = pathing;
312
-
313
- this.sourceRadius = sourceRadius;
314
- }
315
-
316
- /**
317
- * Current playback position in seconds (now - startedAt, clamped at 0).
318
- * @returns {number}
319
- */
320
- get playhead() {
321
- return Math.max(0, this.engine.currentTime - this.startedAt);
322
- }
323
-
324
- /**
325
- * Live voices currently sounding (timeline order).
326
- * @returns {Voice[]}
327
- */
328
- get voices() {
329
- const timeline = this.#timeline;
330
-
331
- if (timeline === null) {
332
- return [];
333
- }
334
-
335
- const result = [];
336
- for (let i = 0; i < timeline.length; i++) {
337
- if (timeline[i].voice !== null) {
338
- result.push(timeline[i].voice);
339
- }
340
- }
341
-
342
- return result;
343
- }
344
-
345
- /**
346
- * Begin playback at context time `now`.
347
- * @param {number} now
348
- */
349
- start(now) {
350
- this.startedAt = this.#startTime !== null ? this.#startTime : now;
351
- this.state = EventInstanceState.Playing;
352
-
353
- const samples = this.description.rootClip.collectSampleClips();
354
- const provider = this.engine.bufferProvider;
355
-
356
- // synchronous fast path: all candidate buffers already decoded
357
- const bufferMap = new Map();
358
- let allReady = true;
359
-
360
- for (let i = 0; i < samples.length; i++) {
361
- const clip = samples[i];
362
- const buffer = provider.tryGet(clip.url, clip.usingAlias);
363
-
364
- if (buffer === null) {
365
- allReady = false;
366
- break;
367
- }
368
-
369
- bufferMap.set(clip, buffer);
370
- }
371
-
372
- if (allReady) {
373
- this.#resolve(now, bufferMap);
374
- return;
375
- }
376
-
377
- // deferred: load every candidate buffer, then resolve once they arrive
378
- Promise.all(
379
- samples.map(clip => provider.get(clip.url, clip.usingAlias).then(buffer => [clip, buffer]))
380
- ).then(
381
- entries => {
382
- if (this.state === EventInstanceState.Playing) {
383
- this.#resolve(this.engine.currentTime, new Map(entries));
384
- }
385
- },
386
- error => this.#failLoad(error)
387
- );
388
- }
389
-
390
- /**
391
- * @param {number} now
392
- * @param {Map<SampleAudioClip, AudioBuffer>} bufferMap
393
- */
394
- #resolve(now, bufferMap) {
395
- this.#bufferMap = bufferMap;
396
-
397
- const env = {
398
- durationOf: (clip) => bufferMap.get(clip).duration,
399
- playback: this.playbackContext,
400
- getParameter: (name) => this.engine.getParameter(name)
401
- };
402
-
403
- const { plays, duration } = this.description.rootClip.planTimeline(env, this.description.gainDb, 0, 0);
404
-
405
- const timeline = [];
406
- for (let i = 0; i < plays.length; i++) {
407
- const p = plays[i];
408
-
409
- timeline.push({
410
- clip: p.clip,
411
- offset: p.offset,
412
- gainDb: p.gainDb,
413
- pitchCents: p.pitchCents,
414
- duration: p.clip.loop ? Infinity : bufferMap.get(p.clip).duration,
415
- voice: null
416
- });
417
- }
418
-
419
- this.#timeline = timeline;
420
- this.#totalDuration = duration;
421
-
422
- this.#buildOutputChain();
423
-
424
- // initial evaluation at the start time (spawns leaves due immediately, if audible)
425
- this.update(now, this.engine.listenerPosition);
426
- }
427
-
428
- #buildOutputChain() {
429
- const engine = this.engine;
430
- const ctx = engine.audioContext;
431
- const busInput = engine.busGraph.getInput(this.busId);
432
- const description = this.description;
433
-
434
- // the instance gain is the uniform chain head (2D and 3D), so live volume/fades have one home
435
- this.#instanceGain = ctx.createGain();
436
- this.#instanceGain.gain.setValueAtTime(dB2Volume(this.#gainDb), 0);
437
-
438
- if (description.is3D) {
439
- this.#attenuationGain = ctx.createGain();
440
-
441
- const panner = ctx.createPanner();
442
- panner.panningModel = SOPRA_PANNING_MODEL_TO_WEBAUDIO[description.panningModel] ?? 'HRTF';
443
- // the panner does DIRECTION only; distance attenuation is the custom gain node (rolloff=0)
444
- panner.distanceModel = 'linear';
445
- panner.rolloffFactor = 0;
446
- panner.refDistance = description.distanceMin;
447
- panner.maxDistance = description.distanceMax;
448
- this.#panner = panner;
449
-
450
- // voices -> instanceGain -> attenuationGain -> [3-band acoustic crossover ->] panner -> bus
451
- this.#instanceGain.connect(this.#attenuationGain);
452
-
453
- if (this.#acoustic) {
454
- // direct (through-wall) path: a 3-band crossover, gained per band in setAcoustic by occlusion ×
455
- // that band's transmission × air tilt — so a band-selective wall is heard band-selectively
456
- // (transmission [1,0,0] passes lows, cuts mid/high), not as one averaged gain + a lowpass.
457
- this.#acoustic3Band = build3BandCrossover(ctx, this.#attenuationGain, panner);
458
- } else {
459
- this.#attenuationGain.connect(panner);
460
- }
461
-
462
- panner.connect(busInput);
463
-
464
- if (this.#pathing) {
465
- // a parallel "leaked" send: the dry instance signal, re-spatialized from the exit point
466
- // (corner-leakage), with its OWN 3-band crossover so it carries (1 − transmission[b]) per band —
467
- // the energy that didn't transmit through a band leaks around it (consistent with the direct
468
- // path). Silent until setAcoustic supplies a path; the panner (rolloff=0, direction-only) sits at
469
- // the exit, distance + per-band material in the crossover gains.
470
- const pathPanner = ctx.createPanner();
471
- pathPanner.panningModel = SOPRA_PANNING_MODEL_TO_WEBAUDIO[description.panningModel] ?? 'HRTF';
472
- pathPanner.distanceModel = 'linear';
473
- pathPanner.rolloffFactor = 0;
474
- this.#pathPanner = pathPanner;
475
-
476
- this.#leak3Band = build3BandCrossover(ctx, this.#instanceGain, pathPanner);
477
- set3BandGains(this.#leak3Band, 0, 0, 0, 0); // silent until a path is found (the direct stays transparent)
478
- pathPanner.connect(busInput);
479
- }
480
- } else {
481
- // voices -> instanceGain -> bus
482
- this.#instanceGain.connect(busInput);
483
- }
484
-
485
- this.#chainHead = this.#instanceGain;
486
- }
487
-
488
- /**
489
- * Live instance gain in decibels (composes with 3D attenuation).
490
- * @returns {number}
491
- */
492
- get gainDb() {
493
- return this.#gainDb;
494
- }
495
-
496
- /**
497
- * Whether this instance is driven by the acoustic simulation (has the occlusion/transmission nodes).
498
- * @returns {boolean}
499
- */
500
- get acoustic() {
501
- return this.#acoustic;
502
- }
503
-
504
- /**
505
- * Set the instance gain immediately.
506
- * @param {number} db
507
- */
508
- setGainDb(db) {
509
- this.#gainDb = db;
510
-
511
- if (this.#instanceGain !== null) {
512
- this.#instanceGain.gain.setValueAtTime(dB2Volume(db), this.engine.currentTime);
513
- }
514
- }
515
-
516
- /**
517
- * Apply an acoustic simulation result (occlusion / transmission / medium) to this instance's render
518
- * chain. No-op unless this is an acoustic 3D instance. The values are already temporally smoothed by
519
- * the solver, so they are written directly (one node update each).
520
- *
521
- * - gain: open passes fully; fully occluded passes the (band-averaged) transmission floor, so a
522
- * source behind a wall is quieter but still leaks through per the wall material.
523
- * - lowpass: occlusion muffles (drops the cutoff); the medium's high-band air absorption muffles
524
- * further. The lower of the two cutoffs wins.
525
- *
526
- * @param {AcousticSolution} solution
527
- */
528
- setAcoustic(solution) {
529
- const now = this.engine.currentTime;
530
-
531
- if (this.#acoustic3Band !== null) {
532
- const occlusion = solution.occlusion;
533
- const transmission = solution.transmission;
534
- const airLoss = solution.airLoss;
535
- const dir = solution.directivityGain;
536
-
537
- // Per-band direct gain = [open passes fully; occluded passes THAT band's transmission] × radiation
538
- // × the band's LOW-ANCHORED air tilt (only the high-vs-low excess darkens — a uniform loss is the
539
- // distance curve's job). So transmission [1,0,0] passes lows and cuts mid/high; a distant source
540
- // loses its top end. Low is the anchor (no air tilt).
541
- const gLow = dir * ((1 - occlusion) + occlusion * transmission[0]);
542
- const gMid = dir * ((1 - occlusion) + occlusion * transmission[1]) * dbTiltToGain(airLoss[1] - airLoss[0]);
543
- const gHigh = dir * ((1 - occlusion) + occlusion * transmission[2]) * dbTiltToGain(airLoss[2] - airLoss[0]);
544
-
545
- set3BandGains(this.#acoustic3Band, gLow, gMid, gHigh, now);
546
- }
547
-
548
- if (this.#leak3Band !== null) {
549
- // corner-leakage: spatialize the leaked signal from the exit point, per band, or mute when no path
550
- if (solution.hasPath) {
551
- const exit = solution.exit;
552
- this.#pathPanner.setPosition(exit[0], exit[1], exit[2]);
553
-
554
- // per-band leak gain = the BROADBAND geometric leak strength (solution.pathGain = occlusion ×
555
- // falloff × directivity-toward-the-leak × turn gates) × (1 − that band's transmission: the energy
556
- // NOT through the wall goes around) × the LOW-ANCHORED air tilt over the longer leaked route.
557
- const transmission = solution.transmission;
558
- const pathAir = solution.pathAirLoss;
559
- const p = solution.pathGain;
560
- const lLow = p * (1 - transmission[0]);
561
- const lMid = p * (1 - transmission[1]) * dbTiltToGain(pathAir[1] - pathAir[0]);
562
- const lHigh = p * (1 - transmission[2]) * dbTiltToGain(pathAir[2] - pathAir[0]);
563
- set3BandGains(this.#leak3Band, lLow, lMid, lHigh, now);
564
- } else {
565
- set3BandGains(this.#leak3Band, 0, 0, 0, now);
566
- }
567
- }
568
- }
569
-
570
- /**
571
- * Ramp the instance gain to a target over `duration` (click-safe). Does not stop the instance.
572
- * @param {number} targetDb
573
- * @param {number} duration seconds
574
- * @param {number} [startAfter=0] seconds
575
- */
576
- fadeToGainDb(targetDb, duration, startAfter = 0) {
577
- this.#gainDb = targetDb;
578
-
579
- if (this.#instanceGain !== null) {
580
- rampGain(this.#instanceGain.gain, dB2Volume(targetDb), duration, this.engine.audioContext, startAfter);
581
- }
582
- }
583
-
584
- /**
585
- * Fade the instance out to silence over `duration`, then stop it (audio-clock deadline checked in
586
- * {@link update}; no setTimeout).
587
- * @param {number} duration seconds
588
- * @param {number} [startAfter=0] seconds
589
- */
590
- fadeOutAndStop(duration, startAfter = 0) {
591
- if (this.state !== EventInstanceState.Playing) {
592
- return;
593
- }
594
-
595
- if (this.#instanceGain !== null) {
596
- rampGain(this.#instanceGain.gain, FADE_EPSILON, duration, this.engine.audioContext, startAfter);
597
- }
598
-
599
- this.#stopDeadline = this.engine.currentTime + startAfter + duration;
600
- }
601
-
602
- /**
603
- * Re-base the playhead to `seconds` and respawn voices at the new offset. Preserves the resolved
604
- * timeline + playback RNG state (no re-pick / no reseed) only the cursor moves.
605
- * @param {number} seconds
606
- */
607
- seek(seconds) {
608
- if (this.state !== EventInstanceState.Playing || this.#timeline === null) {
609
- return;
610
- }
611
-
612
- this.startedAt = this.engine.currentTime - Math.max(0, seconds);
613
-
614
- const timeline = this.#timeline;
615
- for (let i = 0; i < timeline.length; i++) {
616
- this.#retire(timeline[i]);
617
- }
618
-
619
- this.update(this.engine.currentTime, this.engine.listenerPosition);
620
- }
621
-
622
- /**
623
- * Restart from the beginning (seek to 0).
624
- */
625
- restart() {
626
- this.seek(0);
627
- }
628
-
629
- /**
630
- * Advance the instance one frame: update spatialization, then evaluate the timeline against the
631
- * playhead (spawning / virtualizing voices).
632
- * @param {number} now context time
633
- * @param {Vector3|null} listenerPosition
634
- */
635
- update(now, listenerPosition) {
636
- if (this.state !== EventInstanceState.Playing) {
637
- return;
638
- }
639
-
640
- if (this.#timeline === null) {
641
- // still loading only the lifetime backstop applies
642
- if (this.oneShot && (now - this.startedAt) > this.maxLifetimeSeconds) {
643
- this.stop();
644
- }
645
- return;
646
- }
647
-
648
- const description = this.description;
649
-
650
- if (description.is3D && this.position !== null && listenerPosition !== null) {
651
- const distance = this.position.distanceTo(listenerPosition);
652
- const gain = Math.max(0, description.attenuation.evaluate(distance));
653
-
654
- this.#attenuationGain.gain.setValueAtTime(gain, 0);
655
- this.#panner.setPosition(this.position.x, this.position.y, this.position.z);
656
-
657
- this.currentGain = gain;
658
- this.#audible = distance <= description.distanceMax && gain > dB2Volume(description.virtualThresholdDb);
659
- } else {
660
- this.currentGain = 1;
661
- this.#audible = true;
662
- }
663
-
664
- this.#evaluate(now);
665
-
666
- // scheduled fade-out deadline (audio-clock based, not setTimeout)
667
- if (this.state === EventInstanceState.Playing && now >= this.#stopDeadline) {
668
- this.stop();
669
- }
670
-
671
- if (this.state === EventInstanceState.Playing && this.oneShot && (now - this.startedAt) > this.maxLifetimeSeconds) {
672
- this.stop();
673
- }
674
- }
675
-
676
- /**
677
- * @param {number} now
678
- */
679
- #evaluate(now) {
680
- const playhead = now - this.startedAt;
681
- const timeline = this.#timeline;
682
- const audible = this.#audible;
683
-
684
- for (let i = 0; i < timeline.length; i++) {
685
- const entry = timeline[i];
686
-
687
- const start = entry.offset;
688
- const end = entry.duration === Infinity ? Infinity : entry.offset + entry.duration;
689
-
690
- const withinWindow = (playhead + LOOKAHEAD_SECONDS >= start) && (playhead < end);
691
-
692
- if (withinWindow && audible) {
693
- if (entry.voice === null) {
694
- const when = Math.max(now, this.startedAt + start);
695
- const bufferOffset = Math.max(0, playhead - start);
696
-
697
- entry.voice = this.#spawnVoice(entry, when, bufferOffset);
698
- }
699
- } else if (entry.voice !== null) {
700
- // out of range (virtualize) or past the leaf's window — stop, keep the cursor
701
- this.#retire(entry);
702
- }
703
- }
704
-
705
- if (this.oneShot && this.#totalDuration !== Infinity && playhead >= this.#totalDuration) {
706
- this.stop();
707
- }
708
- }
709
-
710
- /**
711
- * @param {{clip: SampleAudioClip, gainDb: number, pitchCents: number}} entry
712
- * @param {number} when
713
- * @param {number} bufferOffset
714
- * @returns {Voice}
715
- */
716
- #spawnVoice(entry, when, bufferOffset) {
717
- const clip = entry.clip;
718
- const buffer = this.#bufferMap.get(clip);
719
-
720
- let offset = bufferOffset;
721
-
722
- // A resumed/long-running loop can have an offset beyond the buffer — phase reconstruction on
723
- // promote (playhead = now - startTime) or revival after a long virtual period. Wrap it into the
724
- // loop region so the source starts at a valid in-buffer position. (Offsets within the first pass,
725
- // i.e. loopEnd, are left as-is so a one-time intro region still plays.)
726
- if (clip.loop) {
727
- const loopEnd = clip.loopEnd > 0 ? clip.loopEnd : buffer.duration;
728
- const loopStart = clip.loopStart;
729
- const loopLength = loopEnd - loopStart;
730
-
731
- if (loopLength > 0 && offset > loopEnd) {
732
- offset = loopStart + ((offset - loopStart) % loopLength);
733
- }
734
- }
735
-
736
- const voice = VOICE_POOL.get();
737
-
738
- voice.play(this.engine.audioContext, this.#chainHead, buffer, {
739
- gainLinear: dB2Volume(entry.gainDb),
740
- detuneCents: entry.pitchCents,
741
- loop: clip.loop,
742
- loopStart: clip.loopStart,
743
- loopEnd: clip.loopEnd,
744
- when,
745
- offset
746
- });
747
-
748
- return voice;
749
- }
750
-
751
- /**
752
- * @param {{voice: Voice|null}} entry
753
- */
754
- #retire(entry) {
755
- if (entry.voice !== null) {
756
- entry.voice.stop();
757
- VOICE_POOL.release(entry.voice);
758
- entry.voice = null;
759
- }
760
- }
761
-
762
- /**
763
- * @param {Error} error
764
- */
765
- #failLoad(error) {
766
- // expected-failure path (missing/failed asset): surface it (log) and release — do NOT hang
767
- // and do NOT silently swallow.
768
- console.error(`sopra: event '${this.description.label}' could not load its buffer`, error);
769
-
770
- this.stop();
771
- }
772
-
773
- /**
774
- * Stop all voices, tear down the output chain, and finish the instance.
775
- */
776
- stop() {
777
- if (this.state === EventInstanceState.Stopped) {
778
- return;
779
- }
780
-
781
- this.state = EventInstanceState.Stopped;
782
-
783
- const timeline = this.#timeline;
784
- if (timeline !== null) {
785
- for (let i = 0; i < timeline.length; i++) {
786
- this.#retire(timeline[i]);
787
- }
788
- }
789
-
790
- if (this.#panner !== null) {
791
- this.#panner.disconnect();
792
- }
793
- if (this.#pathPanner !== null) {
794
- this.#pathPanner.disconnect();
795
- }
796
- if (this.#leak3Band !== null) {
797
- disconnect3Band(this.#leak3Band);
798
- }
799
- if (this.#acoustic3Band !== null) {
800
- disconnect3Band(this.#acoustic3Band);
801
- }
802
- if (this.#attenuationGain !== null) {
803
- this.#attenuationGain.disconnect();
804
- }
805
- if (this.#instanceGain !== null) {
806
- this.#instanceGain.disconnect();
807
- }
808
-
809
- if (this.onEnded.hasHandlers()) {
810
- this.onEnded.send1(this);
811
- }
812
-
813
- this.engine.__onInstanceFinished(this);
814
- }
815
- }
1
+ import Signal from "../../../../core/events/signal/Signal.js";
2
+ import { dB2Volume } from "../../dB2Volume.js";
3
+ import { FADE_EPSILON, rampGain } from "../util/fadeOutAndStop.js";
4
+ import { SOPRA_PANNING_MODEL_TO_WEBAUDIO, SopraPanningModel } from "../definition/SopraPanningModel.js";
5
+ import { VOICE_POOL } from "./VoicePool.js";
6
+ import { LOW_MID_HZ, MID_HIGH_HZ } from "../../simulation/render/reverbImpulseResponse.js";
7
+
8
+ /**
9
+ * Lifecycle state of an {@link EventInstance}.
10
+ * @enum {number}
11
+ */
12
+ export const EventInstanceState = {
13
+ Initial: 0,
14
+ Playing: 1,
15
+ Stopped: 2
16
+ };
17
+
18
+ /**
19
+ * How far ahead (seconds) leaves are spawned before their scheduled start, so `source.start(when)`
20
+ * stays sample-accurate even when the driving frame is slightly late ("Tale of Two Clocks").
21
+ * @type {number}
22
+ */
23
+ const LOOKAHEAD_SECONDS = 0.2;
24
+
25
+ const DEFAULT_MAX_LIFETIME_SECONDS = 60;
26
+
27
+ /**
28
+ * Per-band air tilt (dB of high-vs-low EXCESS loss) → linear amplitude gain. A non-positive tilt (a band
29
+ * losing no more than the low anchor) is transparent — air only darkens, never boosts.
30
+ * @param {number} excessDb
31
+ * @returns {number}
32
+ */
33
+ function dbTiltToGain(excessDb) {
34
+ return excessDb <= 0 ? 1 : dB2Volume(-excessDb);
35
+ }
36
+
37
+ /**
38
+ * Build a 3-band SUBTRACTIVE crossover on the reverb's band edges: `input` fans to two lowpasses
39
+ * (LP{@link LOW_MID_HZ}, LP{@link MID_HIGH_HZ}) and a dry tap; the bands are low = LP_low,
40
+ * mid = LP_mid − LP_low, high = dry − LP_mid. The three SUMMED taps carry the bands DIFFERENCED
41
+ * (out = lowTap·LP_low + midTap·LP_mid + dryTap·dry), so {@link set3BandGains} reconstructs arbitrary per-band
42
+ * gains; the split telescopes flat (exact per-sample) when the bands are equal and stays robust when a band is
43
+ * 0. Wired input → crossover → `output`; init transparent (dry passes whole). Caveat: the LP biquads are NOT
44
+ * power-complementary, so a band overshoots its gain by ~2-3 dB right at the 250/2500 Hz crossovers (benign).
45
+ * @returns {{lpLow:BiquadFilterNode,lpMid:BiquadFilterNode,lowTap:GainNode,midTap:GainNode,dryTap:GainNode}}
46
+ */
47
+ function build3BandCrossover(ctx, input, output) {
48
+ const lpLow = ctx.createBiquadFilter();
49
+ lpLow.type = 'lowpass';
50
+ lpLow.frequency.setValueAtTime(LOW_MID_HZ, 0);
51
+
52
+ const lpMid = ctx.createBiquadFilter();
53
+ lpMid.type = 'lowpass';
54
+ lpMid.frequency.setValueAtTime(MID_HIGH_HZ, 0);
55
+
56
+ const lowTap = ctx.createGain();
57
+ lowTap.gain.setValueAtTime(0, 0);
58
+ const midTap = ctx.createGain();
59
+ midTap.gain.setValueAtTime(0, 0);
60
+ const dryTap = ctx.createGain();
61
+ dryTap.gain.setValueAtTime(1, 0);
62
+
63
+ input.connect(lpLow);
64
+ input.connect(lpMid);
65
+ input.connect(dryTap);
66
+ lpLow.connect(lowTap);
67
+ lpMid.connect(midTap);
68
+ lowTap.connect(output);
69
+ midTap.connect(output);
70
+ dryTap.connect(output);
71
+
72
+ return { lpLow, lpMid, lowTap, midTap, dryTap };
73
+ }
74
+
75
+ /**
76
+ * Set per-band gains (gLow/gMid/gHigh, each in [0,1]) onto a crossover's DIFFERENCED taps so the summed taps
77
+ * reconstruct gLow·low + gMid·mid + gHigh·high (telescoping, exact per-sample). See {@link build3BandCrossover}.
78
+ */
79
+ function set3BandGains(x, gLow, gMid, gHigh, when) {
80
+ x.lowTap.gain.setValueAtTime(gLow - gMid, when);
81
+ x.midTap.gain.setValueAtTime(gMid - gHigh, when);
82
+ x.dryTap.gain.setValueAtTime(gHigh, when);
83
+ }
84
+
85
+ /** Disconnect all five nodes of a crossover ({@link build3BandCrossover}). */
86
+ function disconnect3Band(x) {
87
+ x.lpLow.disconnect();
88
+ x.lpMid.disconnect();
89
+ x.lowTap.disconnect();
90
+ x.midTap.disconnect();
91
+ x.dryTap.disconnect();
92
+ }
93
+
94
+ /**
95
+ * One triggered playing of an {@link EventDescription}. Transient — never serialized.
96
+ *
97
+ * Playback is **cursor-based**: each frame {@link update} compares the logical playhead
98
+ * (`now - startedAt`) against the resolved timeline and, for each leaf whose window is current,
99
+ * spawns a voice — but only while the instance is audible. Out-of-range/below-threshold instances go
100
+ * **virtual** (their voices stop while the cursor keeps advancing) and revive at the correct child +
101
+ * buffer-offset when audible again (D3). 3D instances own a shared `attenuationGain → panner → bus`
102
+ * chain (D4); the attenuation gain is driven by distance through the event's attenuation curve.
103
+ */
104
+ export class EventInstance {
105
+
106
+ /**
107
+ * @type {number}
108
+ */
109
+ startedAt = 0;
110
+
111
+ /**
112
+ * @type {EventInstanceState|number}
113
+ */
114
+ state = EventInstanceState.Initial;
115
+
116
+ /**
117
+ * Current post-attenuation linear gain (1 for non-3D). Read by the VoiceManager for steal-quietest.
118
+ * @type {number}
119
+ */
120
+ currentGain = 1;
121
+
122
+ /**
123
+ * Apparent acoustic radius of this source, for volumetric (fractional) occlusion in the acoustic
124
+ * simulation (0 = point source). Per-source — a footstep and an explosion occlude differently. Read by
125
+ * the `AcousticSimulator`; only meaningful for acoustic 3D instances. Set from the play options.
126
+ * @type {number}
127
+ */
128
+ sourceRadius = 0.5;
129
+
130
+ /**
131
+ * Fires `this` when the instance has fully stopped (ended, stopped, timed out, or failed to load).
132
+ * @type {Signal<EventInstance>}
133
+ */
134
+ onEnded = new Signal();
135
+
136
+ /**
137
+ * Resolved timeline: one entry per leaf play. Null until buffers are loaded and the timeline is
138
+ * resolved. Each entry: { clip, offset, gainDb, pitchCents, duration, voice }.
139
+ * @type {{clip: SampleAudioClip, offset: number, gainDb: number, pitchCents: number, duration: number, voice: Voice|null}[]|null}
140
+ */
141
+ #timeline = null;
142
+
143
+ /**
144
+ * @type {Map<SampleAudioClip, AudioBuffer>|null}
145
+ */
146
+ #bufferMap = null;
147
+
148
+ /**
149
+ * @type {number}
150
+ */
151
+ #totalDuration = 0;
152
+
153
+ /**
154
+ * Node that voices route into: the instance's attenuation gain (3D) or the bus input (2D).
155
+ * @type {AudioNode|null}
156
+ */
157
+ #chainHead = null;
158
+
159
+ /**
160
+ * @type {GainNode|null}
161
+ */
162
+ #attenuationGain = null;
163
+
164
+ /**
165
+ * @type {PannerNode|null}
166
+ */
167
+ #panner = null;
168
+
169
+ /**
170
+ * Always-on per-instance trim gain — the chain head ALL voices route through (2D and 3D). Carries
171
+ * the live instance volume (setGainDb / fades); composes (multiplies) with #attenuationGain in 3D.
172
+ * @type {GainNode|null}
173
+ */
174
+ #instanceGain = null;
175
+
176
+ /**
177
+ * Live instance gain in decibels (0 dB = unity). Applied to #instanceGain.
178
+ * @type {number}
179
+ */
180
+ #gainDb = 0;
181
+
182
+ /**
183
+ * Audio-clock time at which a scheduled fade-out stops the instance; Infinity = none.
184
+ * @type {number}
185
+ */
186
+ #stopDeadline = Infinity;
187
+
188
+ /**
189
+ * @type {boolean}
190
+ */
191
+ #audible = true;
192
+
193
+ /**
194
+ * Logical start timestamp (audio clock). When set, the playhead is `now - startTime` from the
195
+ * outset, so a promoted emitter resumes at the phase it "should" be at given elapsed real time
196
+ * (continuous-clock semantics); null = start now (playhead 0).
197
+ * @type {number|null}
198
+ */
199
+ #startTime = null;
200
+
201
+ /**
202
+ * Whether this instance is driven by the acoustic simulation (occlusion / transmission / medium). When
203
+ * true and 3D, a 3-band acoustic crossover is inserted in the chain and {@link setAcoustic} drives its
204
+ * per-band gains; otherwise those nodes are absent and setAcoustic is a no-op (zero cost for ordinary events).
205
+ * @type {boolean}
206
+ */
207
+ #acoustic = false;
208
+
209
+ /**
210
+ * Direct (through-wall) 3-band crossover ({@link build3BandCrossover}); per-band gains driven in
211
+ * {@link setAcoustic} by occlusion × the band's transmission × air tilt. Null on non-acoustic instances.
212
+ * @type {object|null}
213
+ */
214
+ #acoustic3Band = null;
215
+
216
+ /**
217
+ * Whether the engine-wide pathing (corner-leakage) render is active for this instance. When true and
218
+ * 3D, a second panned send is inserted so leaked sound can be spatialized from its exit point.
219
+ * @type {boolean}
220
+ */
221
+ #pathing = false;
222
+
223
+ /**
224
+ * Corner-leak 3-band crossover ({@link build3BandCrossover}, pathing 3D only); per-band gains driven in
225
+ * {@link setAcoustic} by the leak's geometric strength × (1 − the band's transmission: energy that did NOT
226
+ * transmit through a band leaks AROUND it) × the path air tilt — consistent with the direct path.
227
+ * @type {object|null}
228
+ */
229
+ #leak3Band = null;
230
+
231
+ /**
232
+ * Path-send panner, positioned at the propagation exit point (pathing 3D only).
233
+ * @type {PannerNode|null}
234
+ */
235
+ #pathPanner = null;
236
+
237
+ /**
238
+ * @param {SopraEngine} engine
239
+ * @param {EventDescription} description
240
+ * @param {{busId?:string, position?:Vector3, oneShot?:boolean, maxLifetime?:number, playbackContext?:SopraPlaybackContext, startTime?:number, acoustic?:boolean, pathing?:boolean, sourceRadius?:number, orientation?:Quaternion, directivity?:AcousticDirectivity}} [options]
241
+ */
242
+ constructor(engine, description, {
243
+ busId = description.busId,
244
+ position = null,
245
+ oneShot = false,
246
+ maxLifetime = DEFAULT_MAX_LIFETIME_SECONDS,
247
+ playbackContext = engine.defaultPlaybackContext,
248
+ startTime = null,
249
+ acoustic = false,
250
+ pathing = false,
251
+ sourceRadius = 0.5,
252
+ orientation = null,
253
+ directivity = null
254
+ } = {}) {
255
+ /**
256
+ * @type {SopraEngine}
257
+ */
258
+ this.engine = engine;
259
+
260
+ /**
261
+ * @type {EventDescription}
262
+ */
263
+ this.description = description;
264
+
265
+ /**
266
+ * @type {string}
267
+ */
268
+ this.busId = busId;
269
+
270
+ /**
271
+ * World position for spatialization. Null = non-positional.
272
+ * @type {Vector3|null}
273
+ */
274
+ this.position = position;
275
+
276
+ /**
277
+ * World orientation of the source (shared {@link Transform} rotation ref, so it tracks the entity).
278
+ * Read by the {@link AcousticSimulator} only to evaluate {@link directivity}; null when the source has
279
+ * no directivity. Not used for non-acoustic playback.
280
+ * @type {Quaternion|null}
281
+ */
282
+ this.orientation = orientation;
283
+
284
+ /**
285
+ * Source radiation directivity (which way the sound "points"). Null = omnidirectional. Read by the
286
+ * {@link AcousticSimulator}; carried so it can solve the per-direction radiation gain into the
287
+ * solution's `directivityGain`.
288
+ * @type {AcousticDirectivity|null}
289
+ */
290
+ this.directivity = directivity;
291
+
292
+ /**
293
+ * @type {boolean}
294
+ */
295
+ this.oneShot = oneShot;
296
+
297
+ /**
298
+ * @type {number}
299
+ */
300
+ this.maxLifetimeSeconds = maxLifetime;
301
+
302
+ /**
303
+ * @type {SopraPlaybackContext}
304
+ */
305
+ this.playbackContext = playbackContext;
306
+
307
+ this.#startTime = startTime;
308
+
309
+ this.#acoustic = acoustic;
310
+
311
+ this.#pathing = pathing;
312
+
313
+ this.sourceRadius = sourceRadius;
314
+ }
315
+
316
+ /**
317
+ * Current playback position in seconds (now - startedAt, clamped at 0).
318
+ * @returns {number}
319
+ */
320
+ get playhead() {
321
+ return Math.max(0, this.engine.currentTime - this.startedAt);
322
+ }
323
+
324
+ /**
325
+ * Live voices currently sounding (timeline order).
326
+ * @returns {Voice[]}
327
+ */
328
+ get voices() {
329
+ const timeline = this.#timeline;
330
+
331
+ if (timeline === null) {
332
+ return [];
333
+ }
334
+
335
+ const result = [];
336
+ for (let i = 0; i < timeline.length; i++) {
337
+ if (timeline[i].voice !== null) {
338
+ result.push(timeline[i].voice);
339
+ }
340
+ }
341
+
342
+ return result;
343
+ }
344
+
345
+ /**
346
+ * Begin playback at context time `now`.
347
+ * @param {number} now
348
+ */
349
+ start(now) {
350
+ this.startedAt = this.#startTime !== null ? this.#startTime : now;
351
+ this.state = EventInstanceState.Playing;
352
+
353
+ const samples = this.description.rootClip.collectSampleClips();
354
+ const provider = this.engine.bufferProvider;
355
+
356
+ // synchronous fast path: all candidate buffers already decoded
357
+ const bufferMap = new Map();
358
+ let allReady = true;
359
+
360
+ for (let i = 0; i < samples.length; i++) {
361
+ const clip = samples[i];
362
+ const buffer = provider.tryGet(clip.url, clip.usingAlias);
363
+
364
+ if (buffer === null) {
365
+ allReady = false;
366
+ break;
367
+ }
368
+
369
+ bufferMap.set(clip, buffer);
370
+ }
371
+
372
+ if (allReady) {
373
+ this.#resolve(now, bufferMap);
374
+ return;
375
+ }
376
+
377
+ // deferred: load every candidate buffer, then resolve once they arrive
378
+ Promise.all(
379
+ samples.map(clip => provider.get(clip.url, clip.usingAlias).then(buffer => [clip, buffer]))
380
+ ).then(
381
+ entries => {
382
+ if (this.state === EventInstanceState.Playing) {
383
+ this.#resolve(this.engine.currentTime, new Map(entries));
384
+ }
385
+ },
386
+ error => this.#failLoad(error)
387
+ );
388
+ }
389
+
390
+ /**
391
+ * @param {number} now
392
+ * @param {Map<SampleAudioClip, AudioBuffer>} bufferMap
393
+ */
394
+ #resolve(now, bufferMap) {
395
+ this.#bufferMap = bufferMap;
396
+
397
+ const env = {
398
+ durationOf: (clip) => bufferMap.get(clip).duration,
399
+ playback: this.playbackContext,
400
+ getParameter: (name) => this.engine.getParameter(name)
401
+ };
402
+
403
+ const { plays, duration } = this.description.rootClip.planTimeline(env, this.description.gainDb, 0, 0);
404
+
405
+ const timeline = [];
406
+ for (let i = 0; i < plays.length; i++) {
407
+ const p = plays[i];
408
+
409
+ timeline.push({
410
+ clip: p.clip,
411
+ offset: p.offset,
412
+ gainDb: p.gainDb,
413
+ pitchCents: p.pitchCents,
414
+ duration: p.clip.loop ? Infinity : bufferMap.get(p.clip).duration,
415
+ voice: null
416
+ });
417
+ }
418
+
419
+ this.#timeline = timeline;
420
+ this.#totalDuration = duration;
421
+
422
+ this.#buildOutputChain();
423
+
424
+ // initial evaluation at the start time (spawns leaves due immediately, if audible)
425
+ this.update(now, this.engine.listenerPosition);
426
+ }
427
+
428
+ #buildOutputChain() {
429
+ const engine = this.engine;
430
+ const ctx = engine.audioContext;
431
+ const busInput = engine.busGraph.getInput(this.busId);
432
+ const description = this.description;
433
+
434
+ // the instance gain is the uniform chain head (2D and 3D), so live volume/fades have one home
435
+ this.#instanceGain = ctx.createGain();
436
+ this.#instanceGain.gain.setValueAtTime(dB2Volume(this.#gainDb), 0);
437
+
438
+ if (description.is3D) {
439
+ this.#attenuationGain = ctx.createGain();
440
+
441
+ // `is3D` means POSITIONED (attenuates + culls by distance); panning is a separate choice.
442
+ // SopraPanningModel.None asks for a positioned-but-unrotated source (a broad ambience bed),
443
+ // so no PannerNode is built and the spatial chain terminates straight at the bus. Branch on
444
+ // it BEFORE the lookup table, which has no entry for None.
445
+ const panned = description.panningModel !== SopraPanningModel.None;
446
+
447
+ /**
448
+ * Node the spatial chain feeds: the panner when there is one, else the bus itself.
449
+ * @type {AudioNode}
450
+ */
451
+ let spatialSink;
452
+
453
+ if (panned) {
454
+ const panner = ctx.createPanner();
455
+ panner.panningModel = SOPRA_PANNING_MODEL_TO_WEBAUDIO[description.panningModel] ?? 'HRTF';
456
+ // the panner does DIRECTION only; distance attenuation is the custom gain node (rolloff=0)
457
+ panner.distanceModel = 'linear';
458
+ panner.rolloffFactor = 0;
459
+ panner.refDistance = description.distanceMin;
460
+ panner.maxDistance = description.distanceMax;
461
+ this.#panner = panner;
462
+
463
+ panner.connect(busInput);
464
+
465
+ spatialSink = panner;
466
+ } else {
467
+ spatialSink = busInput;
468
+ }
469
+
470
+ // voices -> instanceGain -> attenuationGain -> [3-band acoustic crossover ->] [panner ->] bus
471
+ this.#instanceGain.connect(this.#attenuationGain);
472
+
473
+ if (this.#acoustic) {
474
+ // direct (through-wall) path: a 3-band crossover, gained per band in setAcoustic by occlusion ×
475
+ // that band's transmission × air tilt — so a band-selective wall is heard band-selectively
476
+ // (transmission [1,0,0] passes lows, cuts mid/high), not as one averaged gain + a lowpass.
477
+ this.#acoustic3Band = build3BandCrossover(ctx, this.#attenuationGain, spatialSink);
478
+ } else {
479
+ this.#attenuationGain.connect(spatialSink);
480
+ }
481
+
482
+ if (this.#pathing) {
483
+ // a parallel "leaked" send: the dry instance signal, re-spatialized from the exit point
484
+ // (corner-leakage), with its OWN 3-band crossover so it carries (1 − transmission[b]) per band —
485
+ // the energy that didn't transmit through a band leaks around it (consistent with the direct
486
+ // path). Silent until setAcoustic supplies a path; the panner (rolloff=0, direction-only) sits at
487
+ // the exit, distance + per-band material in the crossover gains.
488
+ //
489
+ // An unpanned source has no exit point to render the leak FROM, so the send goes straight to
490
+ // the bus: the leaked energy still carries its level (dropping it would quietly lose signal),
491
+ // it simply arrives unrotated, consistent with the direct path.
492
+ let leakSink = busInput;
493
+
494
+ if (panned) {
495
+ const pathPanner = ctx.createPanner();
496
+ pathPanner.panningModel = SOPRA_PANNING_MODEL_TO_WEBAUDIO[description.panningModel] ?? 'HRTF';
497
+ pathPanner.distanceModel = 'linear';
498
+ pathPanner.rolloffFactor = 0;
499
+ this.#pathPanner = pathPanner;
500
+
501
+ pathPanner.connect(busInput);
502
+
503
+ leakSink = pathPanner;
504
+ }
505
+
506
+ this.#leak3Band = build3BandCrossover(ctx, this.#instanceGain, leakSink);
507
+ set3BandGains(this.#leak3Band, 0, 0, 0, 0); // silent until a path is found (the direct stays transparent)
508
+ }
509
+ } else {
510
+ // voices -> instanceGain -> bus
511
+ this.#instanceGain.connect(busInput);
512
+ }
513
+
514
+ this.#chainHead = this.#instanceGain;
515
+ }
516
+
517
+ /**
518
+ * Live instance gain in decibels (composes with 3D attenuation).
519
+ * @returns {number}
520
+ */
521
+ get gainDb() {
522
+ return this.#gainDb;
523
+ }
524
+
525
+ /**
526
+ * Whether this instance is driven by the acoustic simulation (has the occlusion/transmission nodes).
527
+ * @returns {boolean}
528
+ */
529
+ get acoustic() {
530
+ return this.#acoustic;
531
+ }
532
+
533
+ /**
534
+ * Set the instance gain immediately.
535
+ * @param {number} db
536
+ */
537
+ setGainDb(db) {
538
+ this.#gainDb = db;
539
+
540
+ if (this.#instanceGain !== null) {
541
+ this.#instanceGain.gain.setValueAtTime(dB2Volume(db), this.engine.currentTime);
542
+ }
543
+ }
544
+
545
+ /**
546
+ * Apply an acoustic simulation result (occlusion / transmission / medium) to this instance's render
547
+ * chain. No-op unless this is an acoustic 3D instance. The values are already temporally smoothed by
548
+ * the solver, so they are written directly (one node update each).
549
+ *
550
+ * - gain: open passes fully; fully occluded passes the (band-averaged) transmission floor, so a
551
+ * source behind a wall is quieter but still leaks through per the wall material.
552
+ * - lowpass: occlusion muffles (drops the cutoff); the medium's high-band air absorption muffles
553
+ * further. The lower of the two cutoffs wins.
554
+ *
555
+ * @param {AcousticSolution} solution
556
+ */
557
+ setAcoustic(solution) {
558
+ const now = this.engine.currentTime;
559
+
560
+ if (this.#acoustic3Band !== null) {
561
+ const occlusion = solution.occlusion;
562
+ const transmission = solution.transmission;
563
+ const airLoss = solution.airLoss;
564
+ const dir = solution.directivityGain;
565
+
566
+ // Per-band direct gain = [open passes fully; occluded passes THAT band's transmission] × radiation
567
+ // × the band's LOW-ANCHORED air tilt (only the high-vs-low excess darkens — a uniform loss is the
568
+ // distance curve's job). So transmission [1,0,0] passes lows and cuts mid/high; a distant source
569
+ // loses its top end. Low is the anchor (no air tilt).
570
+ const gLow = dir * ((1 - occlusion) + occlusion * transmission[0]);
571
+ const gMid = dir * ((1 - occlusion) + occlusion * transmission[1]) * dbTiltToGain(airLoss[1] - airLoss[0]);
572
+ const gHigh = dir * ((1 - occlusion) + occlusion * transmission[2]) * dbTiltToGain(airLoss[2] - airLoss[0]);
573
+
574
+ set3BandGains(this.#acoustic3Band, gLow, gMid, gHigh, now);
575
+ }
576
+
577
+ if (this.#leak3Band !== null) {
578
+ // corner-leakage: spatialize the leaked signal from the exit point, per band, or mute when no path
579
+ if (solution.hasPath) {
580
+ if (this.#pathPanner !== null) {
581
+ // unpanned sources have no path panner — the leak still carries level, it just
582
+ // arrives unrotated, so there is no exit point to place (see #buildOutputChain)
583
+ const exit = solution.exit;
584
+ this.#pathPanner.setPosition(exit[0], exit[1], exit[2]);
585
+ }
586
+
587
+ // per-band leak gain = the BROADBAND geometric leak strength (solution.pathGain = occlusion ×
588
+ // falloff × directivity-toward-the-leak × turn gates) × (1 − that band's transmission: the energy
589
+ // NOT through the wall goes around) × the LOW-ANCHORED air tilt over the longer leaked route.
590
+ const transmission = solution.transmission;
591
+ const pathAir = solution.pathAirLoss;
592
+ const p = solution.pathGain;
593
+ const lLow = p * (1 - transmission[0]);
594
+ const lMid = p * (1 - transmission[1]) * dbTiltToGain(pathAir[1] - pathAir[0]);
595
+ const lHigh = p * (1 - transmission[2]) * dbTiltToGain(pathAir[2] - pathAir[0]);
596
+ set3BandGains(this.#leak3Band, lLow, lMid, lHigh, now);
597
+ } else {
598
+ set3BandGains(this.#leak3Band, 0, 0, 0, now);
599
+ }
600
+ }
601
+ }
602
+
603
+ /**
604
+ * Ramp the instance gain to a target over `duration` (click-safe). Does not stop the instance.
605
+ * @param {number} targetDb
606
+ * @param {number} duration seconds
607
+ * @param {number} [startAfter=0] seconds
608
+ */
609
+ fadeToGainDb(targetDb, duration, startAfter = 0) {
610
+ this.#gainDb = targetDb;
611
+
612
+ if (this.#instanceGain !== null) {
613
+ rampGain(this.#instanceGain.gain, dB2Volume(targetDb), duration, this.engine.audioContext, startAfter);
614
+ }
615
+ }
616
+
617
+ /**
618
+ * Fade the instance out to silence over `duration`, then stop it (audio-clock deadline checked in
619
+ * {@link update}; no setTimeout).
620
+ * @param {number} duration seconds
621
+ * @param {number} [startAfter=0] seconds
622
+ */
623
+ fadeOutAndStop(duration, startAfter = 0) {
624
+ if (this.state !== EventInstanceState.Playing) {
625
+ return;
626
+ }
627
+
628
+ if (this.#instanceGain !== null) {
629
+ rampGain(this.#instanceGain.gain, FADE_EPSILON, duration, this.engine.audioContext, startAfter);
630
+ }
631
+
632
+ this.#stopDeadline = this.engine.currentTime + startAfter + duration;
633
+ }
634
+
635
+ /**
636
+ * Re-base the playhead to `seconds` and respawn voices at the new offset. Preserves the resolved
637
+ * timeline + playback RNG state (no re-pick / no reseed) — only the cursor moves.
638
+ * @param {number} seconds
639
+ */
640
+ seek(seconds) {
641
+ if (this.state !== EventInstanceState.Playing || this.#timeline === null) {
642
+ return;
643
+ }
644
+
645
+ this.startedAt = this.engine.currentTime - Math.max(0, seconds);
646
+
647
+ const timeline = this.#timeline;
648
+ for (let i = 0; i < timeline.length; i++) {
649
+ this.#retire(timeline[i]);
650
+ }
651
+
652
+ this.update(this.engine.currentTime, this.engine.listenerPosition);
653
+ }
654
+
655
+ /**
656
+ * Restart from the beginning (seek to 0).
657
+ */
658
+ restart() {
659
+ this.seek(0);
660
+ }
661
+
662
+ /**
663
+ * Advance the instance one frame: update spatialization, then evaluate the timeline against the
664
+ * playhead (spawning / virtualizing voices).
665
+ * @param {number} now context time
666
+ * @param {Vector3|null} listenerPosition
667
+ */
668
+ update(now, listenerPosition) {
669
+ if (this.state !== EventInstanceState.Playing) {
670
+ return;
671
+ }
672
+
673
+ if (this.#timeline === null) {
674
+ // still loading — only the lifetime backstop applies
675
+ if (this.oneShot && (now - this.startedAt) > this.maxLifetimeSeconds) {
676
+ this.stop();
677
+ }
678
+ return;
679
+ }
680
+
681
+ const description = this.description;
682
+
683
+ if (description.is3D && this.position !== null && listenerPosition !== null) {
684
+ const distance = this.position.distanceTo(listenerPosition);
685
+ const gain = Math.max(0, description.attenuation.evaluate(distance));
686
+
687
+ this.#attenuationGain.gain.setValueAtTime(gain, 0);
688
+
689
+ if (this.#panner !== null) {
690
+ // absent for SopraPanningModel.None positioned, but never rotated
691
+ this.#panner.setPosition(this.position.x, this.position.y, this.position.z);
692
+ }
693
+
694
+ this.currentGain = gain;
695
+ this.#audible = distance <= description.distanceMax && gain > dB2Volume(description.virtualThresholdDb);
696
+ } else {
697
+ this.currentGain = 1;
698
+ this.#audible = true;
699
+ }
700
+
701
+ this.#evaluate(now);
702
+
703
+ // scheduled fade-out deadline (audio-clock based, not setTimeout)
704
+ if (this.state === EventInstanceState.Playing && now >= this.#stopDeadline) {
705
+ this.stop();
706
+ }
707
+
708
+ if (this.state === EventInstanceState.Playing && this.oneShot && (now - this.startedAt) > this.maxLifetimeSeconds) {
709
+ this.stop();
710
+ }
711
+ }
712
+
713
+ /**
714
+ * @param {number} now
715
+ */
716
+ #evaluate(now) {
717
+ const playhead = now - this.startedAt;
718
+ const timeline = this.#timeline;
719
+ const audible = this.#audible;
720
+
721
+ for (let i = 0; i < timeline.length; i++) {
722
+ const entry = timeline[i];
723
+
724
+ const start = entry.offset;
725
+ const end = entry.duration === Infinity ? Infinity : entry.offset + entry.duration;
726
+
727
+ const withinWindow = (playhead + LOOKAHEAD_SECONDS >= start) && (playhead < end);
728
+
729
+ if (withinWindow && audible) {
730
+ if (entry.voice === null) {
731
+ const when = Math.max(now, this.startedAt + start);
732
+ const bufferOffset = Math.max(0, playhead - start);
733
+
734
+ entry.voice = this.#spawnVoice(entry, when, bufferOffset);
735
+ }
736
+ } else if (entry.voice !== null) {
737
+ // out of range (virtualize) or past the leaf's window — stop, keep the cursor
738
+ this.#retire(entry);
739
+ }
740
+ }
741
+
742
+ if (this.oneShot && this.#totalDuration !== Infinity && playhead >= this.#totalDuration) {
743
+ this.stop();
744
+ }
745
+ }
746
+
747
+ /**
748
+ * @param {{clip: SampleAudioClip, gainDb: number, pitchCents: number}} entry
749
+ * @param {number} when
750
+ * @param {number} bufferOffset
751
+ * @returns {Voice}
752
+ */
753
+ #spawnVoice(entry, when, bufferOffset) {
754
+ const clip = entry.clip;
755
+ const buffer = this.#bufferMap.get(clip);
756
+
757
+ let offset = bufferOffset;
758
+
759
+ // A resumed/long-running loop can have an offset beyond the buffer — phase reconstruction on
760
+ // promote (playhead = now - startTime) or revival after a long virtual period. Wrap it into the
761
+ // loop region so the source starts at a valid in-buffer position. (Offsets within the first pass,
762
+ // i.e. ≤ loopEnd, are left as-is so a one-time intro region still plays.)
763
+ if (clip.loop) {
764
+ const loopEnd = clip.loopEnd > 0 ? clip.loopEnd : buffer.duration;
765
+ const loopStart = clip.loopStart;
766
+ const loopLength = loopEnd - loopStart;
767
+
768
+ if (loopLength > 0 && offset > loopEnd) {
769
+ offset = loopStart + ((offset - loopStart) % loopLength);
770
+ }
771
+ }
772
+
773
+ const voice = VOICE_POOL.get();
774
+
775
+ voice.play(this.engine.audioContext, this.#chainHead, buffer, {
776
+ gainLinear: dB2Volume(entry.gainDb),
777
+ detuneCents: entry.pitchCents,
778
+ loop: clip.loop,
779
+ loopStart: clip.loopStart,
780
+ loopEnd: clip.loopEnd,
781
+ when,
782
+ offset
783
+ });
784
+
785
+ return voice;
786
+ }
787
+
788
+ /**
789
+ * @param {{voice: Voice|null}} entry
790
+ */
791
+ #retire(entry) {
792
+ if (entry.voice !== null) {
793
+ entry.voice.stop();
794
+ VOICE_POOL.release(entry.voice);
795
+ entry.voice = null;
796
+ }
797
+ }
798
+
799
+ /**
800
+ * @param {Error} error
801
+ */
802
+ #failLoad(error) {
803
+ // expected-failure path (missing/failed asset): surface it (log) and release — do NOT hang
804
+ // and do NOT silently swallow.
805
+ console.error(`sopra: event '${this.description.label}' could not load its buffer`, error);
806
+
807
+ this.stop();
808
+ }
809
+
810
+ /**
811
+ * Stop all voices, tear down the output chain, and finish the instance.
812
+ */
813
+ stop() {
814
+ if (this.state === EventInstanceState.Stopped) {
815
+ return;
816
+ }
817
+
818
+ this.state = EventInstanceState.Stopped;
819
+
820
+ const timeline = this.#timeline;
821
+ if (timeline !== null) {
822
+ for (let i = 0; i < timeline.length; i++) {
823
+ this.#retire(timeline[i]);
824
+ }
825
+ }
826
+
827
+ if (this.#panner !== null) {
828
+ this.#panner.disconnect();
829
+ }
830
+ if (this.#pathPanner !== null) {
831
+ this.#pathPanner.disconnect();
832
+ }
833
+ if (this.#leak3Band !== null) {
834
+ disconnect3Band(this.#leak3Band);
835
+ }
836
+ if (this.#acoustic3Band !== null) {
837
+ disconnect3Band(this.#acoustic3Band);
838
+ }
839
+ if (this.#attenuationGain !== null) {
840
+ this.#attenuationGain.disconnect();
841
+ }
842
+ if (this.#instanceGain !== null) {
843
+ this.#instanceGain.disconnect();
844
+ }
845
+
846
+ if (this.onEnded.hasHandlers()) {
847
+ this.onEnded.send1(this);
848
+ }
849
+
850
+ this.engine.__onInstanceFinished(this);
851
+ }
852
+ }