@woosh/meep-engine 3.14.5 → 3.15.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 (788) hide show
  1. package/README.md +6 -0
  2. package/editor/Editor.d.ts +162 -0
  3. package/editor/Editor.d.ts.map +1 -0
  4. package/editor/EditorCameraNavigation.d.ts +22 -0
  5. package/editor/EditorCameraNavigation.d.ts.map +1 -0
  6. package/editor/EditorKeyMap.d.ts +28 -0
  7. package/editor/EditorKeyMap.d.ts.map +1 -0
  8. package/editor/SelectionVisualizer.d.ts +37 -0
  9. package/editor/SelectionVisualizer.d.ts.map +1 -0
  10. package/editor/actions/concrete/ActionInvalidateSampler.d.ts +18 -0
  11. package/editor/actions/concrete/ActionInvalidateSampler.d.ts.map +1 -0
  12. package/editor/actions/concrete/ActionUpdateTexture.d.ts +12 -0
  13. package/editor/actions/concrete/ActionUpdateTexture.d.ts.map +1 -0
  14. package/editor/actions/concrete/ActionUpdateTexture.js +1 -1
  15. package/editor/actions/concrete/ArrayCopyAction.d.ts +20 -0
  16. package/editor/actions/concrete/ArrayCopyAction.d.ts.map +1 -0
  17. package/editor/actions/concrete/ComponentAddAction.d.ts +15 -0
  18. package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -0
  19. package/editor/actions/concrete/ComponentRemoveAction.d.ts +11 -0
  20. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -0
  21. package/editor/actions/concrete/EntityCreateAction.d.ts +18 -0
  22. package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -0
  23. package/editor/actions/concrete/EntityRemoveAction.d.ts +11 -0
  24. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -0
  25. package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts +47 -0
  26. package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts.map +1 -0
  27. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts +38 -0
  28. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts.map +1 -0
  29. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts +23 -0
  30. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts.map +1 -0
  31. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +32 -0
  32. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -0
  33. package/editor/actions/concrete/SelectionAddAction.d.ts +19 -0
  34. package/editor/actions/concrete/SelectionAddAction.d.ts.map +1 -0
  35. package/editor/actions/concrete/SelectionClearAction.d.ts +9 -0
  36. package/editor/actions/concrete/SelectionClearAction.d.ts.map +1 -0
  37. package/editor/actions/concrete/SelectionRemoveAction.d.ts +10 -0
  38. package/editor/actions/concrete/SelectionRemoveAction.d.ts.map +1 -0
  39. package/editor/actions/concrete/TransformModifyAction.d.ts +17 -0
  40. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -0
  41. package/editor/actions/concrete/WriteGridValueAction.d.ts +14 -0
  42. package/editor/actions/concrete/WriteGridValueAction.d.ts.map +1 -0
  43. package/editor/camera/camera_framing.d.ts +33 -0
  44. package/editor/camera/camera_framing.d.ts.map +1 -0
  45. package/editor/clipboard.d.ts +19 -0
  46. package/editor/clipboard.d.ts.map +1 -0
  47. package/editor/ecs/EditorEntity.d.ts +16 -0
  48. package/editor/ecs/EditorEntity.d.ts.map +1 -0
  49. package/editor/ecs/EditorEntitySystem.d.ts +8 -0
  50. package/editor/ecs/EditorEntitySystem.d.ts.map +1 -0
  51. package/editor/ecs/component/TypeEditor.d.ts +7 -1
  52. package/editor/ecs/component/TypeEditor.d.ts.map +1 -1
  53. package/editor/ecs/component/TypeEditor.js +5 -0
  54. package/editor/ecs/component/editors/ColorEditor.d.ts +7 -0
  55. package/editor/ecs/component/editors/ColorEditor.d.ts.map +1 -0
  56. package/editor/ecs/component/editors/HTMLElementEditor.d.ts +7 -0
  57. package/editor/ecs/component/editors/HTMLElementEditor.d.ts.map +1 -0
  58. package/editor/ecs/component/editors/ImagePathEditor.d.ts +7 -0
  59. package/editor/ecs/component/editors/ImagePathEditor.d.ts.map +1 -0
  60. package/editor/ecs/component/editors/LargeStringEditor.d.ts +16 -0
  61. package/editor/ecs/component/editors/LargeStringEditor.d.ts.map +1 -0
  62. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts +7 -0
  63. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts.map +1 -0
  64. package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts +7 -0
  65. package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts.map +1 -0
  66. package/editor/ecs/component/editors/ObservedEnumEditor.d.ts +7 -0
  67. package/editor/ecs/component/editors/ObservedEnumEditor.d.ts.map +1 -0
  68. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts +7 -0
  69. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts.map +1 -0
  70. package/editor/ecs/component/editors/ObservedStringEditor.d.ts +7 -0
  71. package/editor/ecs/component/editors/ObservedStringEditor.d.ts.map +1 -0
  72. package/editor/ecs/component/editors/Sampler2DEditor.d.ts +7 -0
  73. package/editor/ecs/component/editors/Sampler2DEditor.d.ts.map +1 -0
  74. package/editor/ecs/component/editors/collection/ListEditor.d.ts +8 -0
  75. package/editor/ecs/component/editors/collection/ListEditor.d.ts.map +1 -0
  76. package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts +12 -0
  77. package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts.map +1 -0
  78. package/editor/ecs/component/editors/common/EnumEditor.d.ts +8 -0
  79. package/editor/ecs/component/editors/common/EnumEditor.d.ts.map +1 -0
  80. package/editor/ecs/component/editors/common/makeV3_editor.d.ts +15 -0
  81. package/editor/ecs/component/editors/common/makeV3_editor.d.ts.map +1 -0
  82. package/editor/ecs/component/editors/common/noEditor.d.ts +3 -0
  83. package/editor/ecs/component/editors/common/noEditor.d.ts.map +1 -0
  84. package/editor/ecs/component/editors/common/two_way_sync.d.ts +22 -0
  85. package/editor/ecs/component/editors/common/two_way_sync.d.ts.map +1 -0
  86. package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts +7 -0
  87. package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts.map +1 -0
  88. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts +14 -0
  89. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts.map +1 -0
  90. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +20 -0
  91. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +1 -0
  92. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +12 -0
  93. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +1 -0
  94. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +14 -0
  95. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +1 -0
  96. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +52 -0
  97. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +1 -0
  98. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +47 -0
  99. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +1 -0
  100. package/editor/ecs/component/editors/ecs/SGMeshEditor.d.ts +21 -0
  101. package/editor/ecs/component/editors/ecs/SGMeshEditor.d.ts.map +1 -0
  102. package/editor/ecs/component/editors/ecs/ShadedGeometryEditor.d.ts +26 -0
  103. package/editor/ecs/component/editors/ecs/ShadedGeometryEditor.d.ts.map +1 -0
  104. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +16 -0
  105. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +1 -0
  106. package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts +15 -0
  107. package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts.map +1 -0
  108. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +42 -0
  109. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -0
  110. package/editor/ecs/component/editors/ecs/TransformEditor.d.ts +20 -0
  111. package/editor/ecs/component/editors/ecs/TransformEditor.d.ts.map +1 -0
  112. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts +8 -0
  113. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts.map +1 -0
  114. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts +19 -0
  115. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts.map +1 -0
  116. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts +27 -0
  117. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts.map +1 -0
  118. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts +16 -0
  119. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts.map +1 -0
  120. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts +19 -0
  121. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts.map +1 -0
  122. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts +18 -0
  123. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts.map +1 -0
  124. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts +6 -0
  125. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts.map +1 -0
  126. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts +7 -0
  127. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts.map +1 -0
  128. package/editor/ecs/component/editors/geom/Vector2Editor.d.ts +6 -0
  129. package/editor/ecs/component/editors/geom/Vector2Editor.d.ts.map +1 -0
  130. package/editor/ecs/component/editors/geom/Vector3Editor.d.ts +6 -0
  131. package/editor/ecs/component/editors/geom/Vector3Editor.d.ts.map +1 -0
  132. package/editor/ecs/component/editors/geom/Vector4Editor.d.ts +6 -0
  133. package/editor/ecs/component/editors/geom/Vector4Editor.d.ts.map +1 -0
  134. package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts +8 -0
  135. package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts.map +1 -0
  136. package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts +7 -0
  137. package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts.map +1 -0
  138. package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts +7 -0
  139. package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts.map +1 -0
  140. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts +8 -0
  141. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts.map +1 -0
  142. package/editor/ecs/component/editors/primitive/StringEditor.d.ts +7 -0
  143. package/editor/ecs/component/editors/primitive/StringEditor.d.ts.map +1 -0
  144. package/editor/ecs/component/editors/shade/MeshletGeometryEditor.d.ts +28 -0
  145. package/editor/ecs/component/editors/shade/MeshletGeometryEditor.d.ts.map +1 -0
  146. package/editor/ecs/component/editors/shade/ShadeImageEditor.d.ts +29 -0
  147. package/editor/ecs/component/editors/shade/ShadeImageEditor.d.ts.map +1 -0
  148. package/editor/ecs/component/editors/shade/ShadeMaterialEditor.d.ts +28 -0
  149. package/editor/ecs/component/editors/shade/ShadeMaterialEditor.d.ts.map +1 -0
  150. package/editor/ecs/component/editors/shade/ShadeTextureEditor.d.ts +41 -0
  151. package/editor/ecs/component/editors/shade/ShadeTextureEditor.d.ts.map +1 -0
  152. package/editor/ecs/component/editors/shade/StandardShadeMaterialEditor.d.ts +31 -0
  153. package/editor/ecs/component/editors/shade/StandardShadeMaterialEditor.d.ts.map +1 -0
  154. package/editor/ecs/component/prototypeObjectEditor.d.ts +2 -0
  155. package/editor/ecs/component/prototypeObjectEditor.d.ts.map +1 -0
  156. package/editor/ecs/component/registerBasicTypeEditors.d.ts +11 -0
  157. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -0
  158. package/editor/ecs/component/registerEngineComponentEditors.d.ts +8 -0
  159. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -0
  160. package/editor/enableEditor.d.ts +14 -0
  161. package/editor/enableEditor.d.ts.map +1 -0
  162. package/editor/entity_world_bounds.d.ts +17 -0
  163. package/editor/entity_world_bounds.d.ts.map +1 -0
  164. package/editor/library/MeshLibrary.d.ts +13 -0
  165. package/editor/library/MeshLibrary.d.ts.map +1 -0
  166. package/editor/particles/lut_ops.d.ts +34 -0
  167. package/editor/particles/lut_ops.d.ts.map +1 -0
  168. package/editor/particles/particleEditEvents.d.ts +11 -0
  169. package/editor/particles/particleEditEvents.d.ts.map +1 -0
  170. package/editor/particles/rebuildParticleEmitter.d.ts +11 -0
  171. package/editor/particles/rebuildParticleEmitter.d.ts.map +1 -0
  172. package/editor/persistence/EditorLayoutStore.d.ts +30 -0
  173. package/editor/persistence/EditorLayoutStore.d.ts.map +1 -0
  174. package/editor/persistence/SceneMetadata.d.ts +38 -0
  175. package/editor/persistence/SceneMetadata.d.ts.map +1 -0
  176. package/editor/persistence/SceneSlotManager.d.ts +40 -0
  177. package/editor/persistence/SceneSlotManager.d.ts.map +1 -0
  178. package/editor/persistence/buildNewSceneDataset.d.ts +10 -0
  179. package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -0
  180. package/editor/persistence/files.d.ts +24 -0
  181. package/editor/persistence/files.d.ts.map +1 -0
  182. package/editor/persistence/scene_import.d.ts +45 -0
  183. package/editor/persistence/scene_import.d.ts.map +1 -0
  184. package/editor/persistence/scene_serialization.d.ts +36 -0
  185. package/editor/persistence/scene_serialization.d.ts.map +1 -0
  186. package/editor/persistence/string_buffer_codec.d.ts +20 -0
  187. package/editor/persistence/string_buffer_codec.d.ts.map +1 -0
  188. package/editor/process/DisableGameUIProcess.d.ts +8 -0
  189. package/editor/process/DisableGameUIProcess.d.ts.map +1 -0
  190. package/editor/process/EditorProcess.d.ts +19 -0
  191. package/editor/process/EditorProcess.d.ts.map +1 -0
  192. package/editor/process/GridDisplayProcess.d.ts +35 -0
  193. package/editor/process/GridDisplayProcess.d.ts.map +1 -0
  194. package/editor/process/ObstacleGridDisplayProcess.d.ts +13 -0
  195. package/editor/process/ObstacleGridDisplayProcess.d.ts.map +1 -0
  196. package/editor/process/ParticleEmitterRebuildProcess.d.ts +66 -0
  197. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +1 -0
  198. package/editor/process/ProcessEngine.d.ts +30 -0
  199. package/editor/process/ProcessEngine.d.ts.map +1 -0
  200. package/editor/process/SymbolicDisplayProcess.d.ts +23 -0
  201. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -0
  202. package/editor/process/symbolic/AudioEmitterSymbolicDisplay.d.ts +17 -0
  203. package/editor/process/symbolic/AudioEmitterSymbolicDisplay.d.ts.map +1 -0
  204. package/editor/process/symbolic/CameraSymbolicDisplay.d.ts +25 -0
  205. package/editor/process/symbolic/CameraSymbolicDisplay.d.ts.map +1 -0
  206. package/editor/process/symbolic/GridPositionSymbolicDisplay.d.ts +19 -0
  207. package/editor/process/symbolic/GridPositionSymbolicDisplay.d.ts.map +1 -0
  208. package/editor/process/symbolic/LightSymbolicDisplay.d.ts +19 -0
  209. package/editor/process/symbolic/LightSymbolicDisplay.d.ts.map +1 -0
  210. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +18 -0
  211. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -0
  212. package/editor/process/symbolic/PathSymbolicDisplay.d.ts +20 -0
  213. package/editor/process/symbolic/PathSymbolicDisplay.d.ts.map +1 -0
  214. package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.d.ts +25 -0
  215. package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.d.ts.map +1 -0
  216. package/editor/process/symbolic/SymbolicDisplay.d.ts +48 -0
  217. package/editor/process/symbolic/SymbolicDisplay.d.ts.map +1 -0
  218. package/editor/process/symbolic/gizmo_draw_wire_box_oriented.d.ts +13 -0
  219. package/editor/process/symbolic/gizmo_draw_wire_box_oriented.d.ts.map +1 -0
  220. package/editor/process/symbolic/gizmo_draw_wire_circle.d.ts +18 -0
  221. package/editor/process/symbolic/gizmo_draw_wire_circle.d.ts.map +1 -0
  222. package/editor/prototypeEditorShell.d.ts +13 -0
  223. package/editor/prototypeEditorShell.d.ts.map +1 -0
  224. package/editor/selection/editor_pick.d.ts +43 -0
  225. package/editor/selection/editor_pick.d.ts.map +1 -0
  226. package/editor/selection/screen_rect_frustum.d.ts +32 -0
  227. package/editor/selection/screen_rect_frustum.d.ts.map +1 -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/tools/GridPaintTool.d.ts +18 -0
  231. package/editor/tools/GridPaintTool.d.ts.map +1 -0
  232. package/editor/tools/SelectionTool.d.ts +38 -0
  233. package/editor/tools/SelectionTool.d.ts.map +1 -0
  234. package/editor/tools/SelectionTool.js +2 -2
  235. package/editor/tools/TransformToolV2.d.ts +70 -0
  236. package/editor/tools/TransformToolV2.d.ts.map +1 -0
  237. package/editor/tools/engine/Tool.d.ts +88 -0
  238. package/editor/tools/engine/Tool.d.ts.map +1 -0
  239. package/editor/tools/engine/ToolEngine.d.ts +22 -0
  240. package/editor/tools/engine/ToolEngine.d.ts.map +1 -0
  241. package/editor/tools/engine/ToolState.d.ts +7 -0
  242. package/editor/tools/engine/ToolState.d.ts.map +1 -0
  243. package/editor/tools/paint/TerrainHeightPaintTool.d.ts +18 -0
  244. package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -0
  245. package/editor/tools/paint/TerrainPaintTool.d.ts +82 -0
  246. package/editor/tools/paint/TerrainPaintTool.d.ts.map +1 -0
  247. package/editor/tools/paint/TerrainTexturePaintTool.d.ts +19 -0
  248. package/editor/tools/paint/TerrainTexturePaintTool.d.ts.map +1 -0
  249. package/editor/tools/v2/BlenderCameraOrientationGizmo.d.ts +139 -0
  250. package/editor/tools/v2/BlenderCameraOrientationGizmo.d.ts.map +1 -0
  251. package/editor/tools/v2/GizmoNode.d.ts +21 -0
  252. package/editor/tools/v2/GizmoNode.d.ts.map +1 -0
  253. package/editor/tools/v2/TransformControls.d.ts +219 -0
  254. package/editor/tools/v2/TransformControls.d.ts.map +1 -0
  255. package/editor/tools/v2/TransformMode.d.ts +7 -0
  256. package/editor/tools/v2/TransformMode.d.ts.map +1 -0
  257. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts +37 -0
  258. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -0
  259. package/editor/tools/v2/handle/gizmo_draw.d.ts +14 -0
  260. package/editor/tools/v2/handle/gizmo_draw.d.ts.map +1 -0
  261. package/editor/tools/v2/handle/gizmo_handles.d.ts +160 -0
  262. package/editor/tools/v2/handle/gizmo_handles.d.ts.map +1 -0
  263. package/editor/tools/v2/handle/gizmo_ray_shapes.d.ts +103 -0
  264. package/editor/tools/v2/handle/gizmo_ray_shapes.d.ts.map +1 -0
  265. package/editor/view/GridPickCoordinateView.d.ts +22 -0
  266. package/editor/view/GridPickCoordinateView.d.ts.map +1 -0
  267. package/editor/view/ecs/ComponentControlView.d.ts +24 -0
  268. package/editor/view/ecs/ComponentControlView.d.ts.map +1 -0
  269. package/editor/view/ecs/EntityEditor.d.ts +25 -0
  270. package/editor/view/ecs/EntityEditor.d.ts.map +1 -0
  271. package/editor/view/ecs/EntityList.d.ts +22 -0
  272. package/editor/view/ecs/EntityList.d.ts.map +1 -0
  273. package/editor/view/ecs/HierarchicalEntityListView.d.ts +25 -0
  274. package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +1 -0
  275. package/editor/view/ecs/components/DatGuiController.d.ts +2 -0
  276. package/editor/view/ecs/components/DatGuiController.d.ts.map +1 -0
  277. package/editor/view/ecs/components/color/GaugeView.d.ts +9 -5
  278. package/editor/view/ecs/components/color/GaugeView.d.ts.map +1 -1
  279. package/editor/view/ecs/components/color/GaugeView.js +4 -4
  280. package/editor/view/ecs/components/common/NumberController.d.ts +9 -5
  281. package/editor/view/ecs/components/common/NumberController.d.ts.map +1 -1
  282. package/editor/view/ecs/components/common/NumberController.js +4 -4
  283. package/editor/view/ecs/components/common/NumericIntervalController.d.ts +10 -0
  284. package/editor/view/ecs/components/common/NumericIntervalController.d.ts.map +1 -0
  285. package/editor/view/ecs/components/common/TextController.d.ts.map +1 -1
  286. package/editor/view/library/MeshLibraryView.d.ts +16 -0
  287. package/editor/view/library/MeshLibraryView.d.ts.map +1 -0
  288. package/editor/view/library/mesh_library_drag.d.ts +21 -0
  289. package/editor/view/library/mesh_library_drag.d.ts.map +1 -0
  290. package/editor/view/library/model_thumbnail_source.d.ts +12 -0
  291. package/editor/view/library/model_thumbnail_source.d.ts.map +1 -0
  292. package/editor/view/makeEntityDecorators.d.ts +6 -0
  293. package/editor/view/makeEntityDecorators.d.ts.map +1 -0
  294. package/editor/view/node-graph/NodeGraphCamera.d.ts.map +1 -1
  295. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  296. package/editor/view/node-graph/NodeGraphSelection.d.ts.map +1 -1
  297. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  298. package/editor/view/node-graph/NodeView.d.ts.map +1 -1
  299. package/editor/view/node-graph/PortView.d.ts.map +1 -1
  300. package/editor/view/node-graph/actions/ConnectionCreateAction.d.ts.map +1 -1
  301. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
  302. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
  303. package/editor/view/node-graph/actions/NodeParameterSetAction.d.ts.map +1 -1
  304. package/editor/view/node-graph/actions/NodesMoveAction.d.ts.map +1 -1
  305. package/editor/view/node-graph/actions/SelectionSetAction.d.ts.map +1 -1
  306. package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
  307. package/editor/view/particles/ColorLutGradientView.d.ts +19 -0
  308. package/editor/view/particles/ColorLutGradientView.d.ts.map +1 -0
  309. package/editor/view/particles/ScalarLutCurveView.d.ts +19 -0
  310. package/editor/view/particles/ScalarLutCurveView.d.ts.map +1 -0
  311. package/editor/view/prepareMeshLibrary.d.ts +7 -0
  312. package/editor/view/prepareMeshLibrary.d.ts.map +1 -0
  313. package/editor/view/process/ProcessView.d.ts +14 -0
  314. package/editor/view/process/ProcessView.d.ts.map +1 -0
  315. package/editor/view/shell/EditorShellView.d.ts +18 -0
  316. package/editor/view/shell/EditorShellView.d.ts.map +1 -0
  317. package/editor/view/shell/SceneTreePanelView.d.ts +17 -0
  318. package/editor/view/shell/SceneTreePanelView.d.ts.map +1 -0
  319. package/editor/view/shell/ViewportPanelView.d.ts +18 -0
  320. package/editor/view/shell/ViewportPanelView.d.ts.map +1 -0
  321. package/editor/view/tools/ToolSettingsView.d.ts +22 -0
  322. package/editor/view/tools/ToolSettingsView.d.ts.map +1 -0
  323. package/editor/view/tools/ToolView.d.ts +13 -0
  324. package/editor/view/tools/ToolView.d.ts.map +1 -0
  325. package/editor/view/v2/SplitView.d.ts +2 -0
  326. package/editor/view/v2/SplitView.d.ts.map +1 -0
  327. package/package.json +9 -11
  328. package/samples/engine/README.md +113 -0
  329. package/samples/engine/first-scene/index.html +32 -0
  330. package/samples/engine/first-scene/main.js +152 -0
  331. package/src/core/assert.d.ts +2 -2
  332. package/src/core/binary/BitSet.d.ts +2 -2
  333. package/src/core/binary/BitSet.d.ts.map +1 -1
  334. package/src/core/binary/BitSet.js +1 -1
  335. package/src/core/bvh2/bvh3/BVH.d.ts +4 -0
  336. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  337. package/src/core/bvh2/bvh3/BVH.js +4 -0
  338. package/src/core/bvh2/bvh3/BvhClient.d.ts +4 -0
  339. package/src/core/bvh2/bvh3/BvhClient.d.ts.map +1 -1
  340. package/src/core/bvh2/bvh3/BvhClient.js +4 -0
  341. package/src/core/collection/array/array_sort_quick.d.ts +1 -1
  342. package/src/core/collection/list/List.d.ts +7 -3
  343. package/src/core/collection/list/List.d.ts.map +1 -1
  344. package/src/core/collection/list/List.js +6 -2
  345. package/src/core/collection/table/RowFirstTableSpec.d.ts.map +1 -1
  346. package/src/core/collection/table/RowFirstTableSpec.js +0 -4
  347. package/src/core/color/Color.d.ts +1 -0
  348. package/src/core/color/Color.d.ts.map +1 -1
  349. package/src/core/color/Color.js +4 -0
  350. package/src/core/events/signal/SignalBinding.d.ts +4 -0
  351. package/src/core/events/signal/SignalBinding.d.ts.map +1 -1
  352. package/src/core/events/signal/SignalBinding.js +4 -0
  353. package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts +5 -1
  354. package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
  355. package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +4 -0
  356. package/src/core/geom/3d/SurfacePoint3.d.ts +2 -2
  357. package/src/core/geom/3d/SurfacePoint3.d.ts.map +1 -1
  358. package/src/core/geom/3d/SurfacePoint3.js +1 -1
  359. package/src/core/geom/3d/aabb/AABB3.d.ts +63 -7
  360. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  361. package/src/core/geom/3d/aabb/AABB3.js +17 -3
  362. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +2 -2
  363. package/src/core/geom/3d/ray/Ray3.d.ts +4 -4
  364. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +10 -3
  365. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  366. package/src/core/geom/3d/shape/AbstractShape3D.js +9 -2
  367. package/src/core/geom/3d/shape/TransformedShape3D.d.ts +2 -2
  368. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +1 -1
  369. package/src/core/geom/Vector1.d.ts +4 -0
  370. package/src/core/geom/Vector1.d.ts.map +1 -1
  371. package/src/core/geom/Vector1.js +4 -0
  372. package/src/core/geom/Vector2.d.ts +4 -0
  373. package/src/core/geom/Vector2.d.ts.map +1 -1
  374. package/src/core/geom/Vector2.js +4 -0
  375. package/src/core/geom/Vector3.d.ts +4 -0
  376. package/src/core/geom/Vector3.d.ts.map +1 -1
  377. package/src/core/geom/Vector3.js +4 -0
  378. package/src/core/geom/Vector4.d.ts +4 -0
  379. package/src/core/geom/Vector4.d.ts.map +1 -1
  380. package/src/core/geom/Vector4.js +4 -0
  381. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts +6 -2
  382. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts.map +1 -1
  383. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +4 -0
  384. package/src/core/geom/packing/miniball/Subspan.d.ts +4 -4
  385. package/src/core/geom/packing/miniball/Subspan.d.ts.map +1 -1
  386. package/src/core/geom/packing/miniball/Subspan.js +2 -2
  387. package/src/core/math/interval/NumericInterval.d.ts +4 -0
  388. package/src/core/math/interval/NumericInterval.d.ts.map +1 -1
  389. package/src/core/math/interval/NumericInterval.js +4 -0
  390. package/src/core/math/random/roundFair.d.ts +2 -2
  391. package/src/core/math/random/roundFair.d.ts.map +1 -1
  392. package/src/core/math/random/roundFair.js +1 -1
  393. package/src/core/model/BoundedValue.d.ts +4 -0
  394. package/src/core/model/BoundedValue.d.ts.map +1 -1
  395. package/src/core/model/BoundedValue.js +4 -0
  396. package/src/core/model/ObservedBoolean.d.ts +4 -0
  397. package/src/core/model/ObservedBoolean.d.ts.map +1 -1
  398. package/src/core/model/ObservedBoolean.js +4 -0
  399. package/src/core/model/ObservedInteger.d.ts +4 -0
  400. package/src/core/model/ObservedInteger.d.ts.map +1 -1
  401. package/src/core/model/ObservedInteger.js +4 -0
  402. package/src/core/model/ObservedString.d.ts +4 -0
  403. package/src/core/model/ObservedString.d.ts.map +1 -1
  404. package/src/core/model/ObservedString.js +4 -0
  405. package/src/core/model/stat/Stat.d.ts +7 -3
  406. package/src/core/model/stat/Stat.d.ts.map +1 -1
  407. package/src/core/model/stat/Stat.js +4 -0
  408. package/src/engine/Engine.d.ts.map +1 -1
  409. package/src/engine/Engine.js +65 -0
  410. package/src/engine/EngineHarness.d.ts +8 -1
  411. package/src/engine/EngineHarness.d.ts.map +1 -1
  412. package/src/engine/EngineHarness.js +10 -14
  413. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts +2 -2
  414. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
  415. package/src/engine/animation/clip/ecd_bind_animation_curve.js +4 -4
  416. package/src/engine/asset/loaders/async_traverse_three_object.d.ts +2 -2
  417. package/src/engine/asset/loaders/async_traverse_three_object.d.ts.map +1 -1
  418. package/src/engine/asset/loaders/async_traverse_three_object.js +1 -1
  419. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts +7 -3
  420. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts.map +1 -1
  421. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.js +33 -3
  422. package/src/engine/control/first-person/DESIGN.md +20 -2
  423. package/src/engine/control/first-person/DESIGN_COLLISION.md +17 -0
  424. package/src/engine/control/first-person/collision/KinematicMover.d.ts +58 -11
  425. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  426. package/src/engine/control/first-person/collision/KinematicMover.js +97 -20
  427. package/src/engine/ecs/Entity.js +1 -1
  428. package/src/engine/ecs/EntityComponentDataset.d.ts +2 -2
  429. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  430. package/src/engine/ecs/EntityComponentDataset.js +1 -1
  431. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  432. package/src/engine/ecs/EntityManager.js +27 -3
  433. package/src/engine/ecs/animation/Animation.d.ts +17 -3
  434. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  435. package/src/engine/ecs/animation/Animation.js +26 -6
  436. package/src/engine/ecs/terrain/TerrainPreview.d.ts +4 -0
  437. package/src/engine/ecs/terrain/TerrainPreview.d.ts.map +1 -1
  438. package/src/engine/ecs/terrain/TerrainPreview.js +4 -0
  439. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +4 -4
  440. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  441. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +2 -2
  442. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts +3 -2
  443. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts.map +1 -1
  444. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.js +25 -2
  445. package/src/engine/ecs/transform/Transform64.d.ts +4 -4
  446. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  447. package/src/engine/ecs/transform/Transform64.js +2 -2
  448. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts +26 -0
  449. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  450. package/src/engine/graphics/ecs/decal/v2/Decal.js +26 -0
  451. package/src/engine/graphics/ecs/light/Light.d.ts +38 -1
  452. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  453. package/src/engine/graphics/ecs/light/Light.js +51 -1
  454. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts +3 -3
  455. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +1 -1
  456. package/src/engine/graphics/ecs/mesh/copyToVector3.js +2 -2
  457. package/src/engine/graphics/ecs/mesh/setMesh.d.ts +2 -2
  458. package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +1 -1
  459. package/src/engine/graphics/ecs/mesh/setMesh.js +1 -1
  460. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +2 -2
  461. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +1 -1
  462. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +1 -1
  463. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +3 -3
  464. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +1 -1
  465. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +2 -2
  466. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +2 -2
  467. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +1 -1
  468. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +1 -1
  469. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +2 -2
  470. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +1 -1
  471. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +1 -1
  472. package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts +2 -2
  473. package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts.map +1 -1
  474. package/src/engine/graphics/geometry/compute_geometry_polycount.js +1 -1
  475. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +3 -3
  476. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +1 -1
  477. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +2 -2
  478. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +4 -4
  479. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +1 -1
  480. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +3 -3
  481. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +3 -3
  482. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +1 -1
  483. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +2 -2
  484. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +4 -4
  485. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +1 -1
  486. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +3 -3
  487. package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts +2 -2
  488. package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts.map +1 -1
  489. package/src/engine/graphics/geometry/scaleGeometryToBox.js +1 -1
  490. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts +2 -2
  491. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts.map +1 -1
  492. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.js +1 -1
  493. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts +2 -2
  494. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts.map +1 -1
  495. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.js +1 -1
  496. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +4 -12
  497. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  498. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +2 -2
  499. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +5 -20
  500. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +1 -1
  501. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +24 -24
  502. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +1 -1
  503. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +16 -16
  504. package/src/engine/graphics/render/layers/RenderLayer.d.ts +4 -4
  505. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
  506. package/src/engine/graphics/render/layers/RenderLayer.js +2 -2
  507. package/src/engine/graphics/render/make_bvh_visibility_builder.js +1 -1
  508. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +1 -1
  509. package/src/engine/graphics/render/visibility/VisibilityComputer.js +1 -1
  510. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts +2 -2
  511. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts.map +1 -1
  512. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.js +1 -1
  513. package/src/engine/graphics3/DecalSystem.d.ts +8 -0
  514. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  515. package/src/engine/graphics3/DecalSystem.js +8 -0
  516. package/src/engine/graphics3/GraphicsEngine.d.ts +19 -8
  517. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  518. package/src/engine/graphics3/GraphicsEngine.js +22 -11
  519. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  520. package/src/engine/graphics3/LightSystem.js +11 -1
  521. package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts +4 -0
  522. package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts.map +1 -1
  523. package/src/engine/input/devices/gamepad/GamepadStickCalibration.js +4 -0
  524. package/src/engine/navigation/mesh/NavigationMesh.d.ts +90 -9
  525. package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -1
  526. package/src/engine/navigation/mesh/NavigationMesh.js +80 -8
  527. package/src/engine/network/NetworkSession.d.ts +60 -0
  528. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  529. package/src/engine/network/NetworkSession.js +141 -1
  530. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
  531. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  532. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
  533. package/src/engine/network/replication/Replicator.d.ts +18 -0
  534. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  535. package/src/engine/network/replication/Replicator.js +98 -0
  536. package/src/engine/physics/ecs/PhysicsSystem.d.ts +27 -0
  537. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  538. package/src/engine/physics/ecs/PhysicsSystem.js +27 -0
  539. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  540. package/src/engine/sound/SoundEngine.d.ts +24 -0
  541. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  542. package/src/engine/sound/SoundEngine.js +29 -11
  543. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts +12 -4
  544. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts.map +1 -1
  545. package/src/engine/sound/simulation/configureAcousticSimulation.js +10 -4
  546. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts +3 -1
  547. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts.map +1 -1
  548. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +27 -1
  549. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +34 -0
  550. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
  551. package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +61 -2
  552. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
  553. package/src/engine/sound/simulation/render/reverbImpulseResponse.js +9 -0
  554. package/src/shade/RENDERER_CONTRACT.md +584 -580
  555. package/src/shade/playground/avboit/README.md +117 -0
  556. package/src/shade/playground/avboit/index.html +215 -0
  557. package/src/shade/playground/avboit/main.d.ts +2 -0
  558. package/src/shade/playground/avboit/main.d.ts.map +1 -0
  559. package/src/shade/playground/avboit/main.js +875 -0
  560. package/src/shade/playground/particle_system/README.md +14 -3
  561. package/src/shade/playground/particle_system/index.html +1 -0
  562. package/src/shade/playground/particle_system/main.js +15 -2
  563. package/src/shade/playground/particle_system/particle_scene.d.ts +11 -2
  564. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  565. package/src/shade/playground/particle_system/particle_scene.js +126 -9
  566. package/src/shade/renderer/GraphicsContext.d.ts +1 -0
  567. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  568. package/src/shade/renderer/GraphicsContext.js +4 -0
  569. package/src/shade/renderer/Renderer.d.ts +17 -1
  570. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  571. package/src/shade/renderer/Renderer.js +29 -28
  572. package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
  573. package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
  574. package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
  575. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +13 -0
  576. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  577. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +13 -0
  578. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts +18 -0
  579. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
  580. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +18 -0
  581. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts +4 -0
  582. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts.map +1 -1
  583. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.js +4 -0
  584. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +12 -0
  585. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
  586. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +13 -0
  587. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  588. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  589. package/src/shade/renderer/particles/DESIGN.md +66 -15
  590. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +29 -5
  591. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  592. package/src/shade/renderer/particles/GPUParticleSystem.js +61 -6
  593. package/src/shade/renderer/particles/ParticleConstants.d.ts +31 -0
  594. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  595. package/src/shade/renderer/particles/ParticleConstants.js +33 -0
  596. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +61 -0
  597. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -0
  598. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +179 -0
  599. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts +63 -0
  600. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts.map +1 -0
  601. package/src/shade/renderer/particles/coherence/particle_program_buckets.js +116 -0
  602. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +59 -0
  603. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -0
  604. package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +344 -0
  605. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +27 -5
  606. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  607. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +27 -5
  608. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +13 -1
  609. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +1 -1
  610. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +15 -1
  611. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
  612. package/src/shade/renderer/particles/data/chunk_particle_emitter.js +3 -0
  613. package/src/shade/renderer/particles/graph_particles.d.ts +39 -11
  614. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  615. package/src/shade/renderer/particles/graph_particles.js +60 -20
  616. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +8 -1
  617. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  618. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +8 -1
  619. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +22 -2
  620. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  621. package/src/shade/renderer/particles/runtime/ProgramArena.js +54 -3
  622. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  623. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +32 -14
  624. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +2 -23
  625. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  626. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +40 -11
  627. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +6 -17
  628. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  629. package/src/shade/renderer/particles/sort/shader_particle_sort.js +60 -9
  630. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
  631. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  632. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -0
  633. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
  634. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  635. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
  636. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
  637. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
  638. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
  639. package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
  640. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
  641. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
  642. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
  643. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
  644. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
  645. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
  646. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
  647. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
  648. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
  649. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
  650. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
  651. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
  652. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
  653. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
  654. package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
  655. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
  656. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
  657. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
  658. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +107 -0
  659. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
  660. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
  661. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +463 -0
  662. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +509 -0
  663. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
  664. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
  665. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
  666. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
  667. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
  668. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
  669. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +38 -0
  670. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
  671. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +130 -0
  672. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
  673. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
  674. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
  675. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
  676. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
  677. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
  678. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
  679. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
  680. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
  681. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
  682. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
  683. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
  684. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
  685. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
  686. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
  687. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
  688. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
  689. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
  690. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
  691. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
  692. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
  693. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
  694. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
  695. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
  696. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
  697. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
  698. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
  699. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
  700. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
  701. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
  702. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
  703. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
  704. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
  705. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
  706. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
  707. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
  708. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts +20 -0
  709. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
  710. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
  711. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
  712. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
  713. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
  714. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
  715. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
  716. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
  717. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
  718. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
  719. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
  720. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
  721. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
  722. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
  723. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
  724. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
  725. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
  726. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +117 -0
  727. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
  728. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +935 -0
  729. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
  730. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
  731. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
  732. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
  733. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
  734. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
  735. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
  736. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
  737. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
  738. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
  739. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
  740. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
  741. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
  742. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
  743. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
  744. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
  745. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
  746. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +81 -0
  747. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
  748. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
  749. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +237 -0
  750. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
  751. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
  752. package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
  753. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  754. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
  755. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
  756. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
  757. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
  758. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +1 -1
  759. package/src/view/DOM.d.ts +69 -0
  760. package/src/view/DOM.d.ts.map +1 -0
  761. package/src/view/DOM.js +2 -1
  762. package/src/view/common/LocalizedLabelView.d.ts +50 -0
  763. package/src/view/common/LocalizedLabelView.d.ts.map +1 -0
  764. package/src/view/controller/controls/GuiControl.d.ts +19 -0
  765. package/src/view/controller/controls/GuiControl.d.ts.map +1 -0
  766. package/src/view/elements/FrameRateView.d.ts +45 -0
  767. package/src/view/elements/FrameRateView.d.ts.map +1 -0
  768. package/src/view/elements/FrameRateView.js +131 -0
  769. package/src/view/elements/SliderView.d.ts +37 -0
  770. package/src/view/elements/SliderView.d.ts.map +1 -0
  771. package/src/view/elements/SliderView.js +71 -0
  772. package/src/view/elements/navigation/ViewStack.d.ts +1 -1
  773. package/src/view/elements/navigation/ViewStack.js +1 -1
  774. package/src/view/elements/notify/NotificationView.d.ts +22 -0
  775. package/src/view/elements/notify/NotificationView.d.ts.map +1 -0
  776. package/src/view/tooltip/TooltipView.d.ts +5 -1
  777. package/src/view/tooltip/TooltipView.d.ts.map +1 -1
  778. package/src/view/tooltip/TooltipView.js +4 -0
  779. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
  780. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
  781. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
  782. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
  783. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
  784. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
  785. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
  786. package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
  787. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
  788. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
@@ -1,12 +1,22 @@
1
1
  import { assert } from "../../../core/assert.js";
2
+ import { BinaryBuffer } from "../../../core/binary/BinaryBuffer.js";
2
3
  import { Uint32Map } from "../../../core/collection/Uint32Map.js";
3
4
  import Signal from "../../../core/events/signal/Signal.js";
4
5
  import { AlwaysRelevantScope } from "../replication/ScopeFilter.js";
6
+ import { ActionRecordCursor } from "../sim/ActionRecordCursor.js";
5
7
  import { RewindEngine } from "../sim/RewindEngine.js";
6
8
  import { InputRing } from "../state/InputRing.js";
7
9
  import { TimeDilation } from "../time/TimeDilation.js";
8
10
  import { NetworkPeer } from "./NetworkPeer.js";
9
11
 
12
+ /**
13
+ * Ints per harvested record in {@link ServerAuthoritativeClient}'s replay index:
14
+ * action type id, sender id, and the offset of its payload.
15
+ *
16
+ * @type {number}
17
+ */
18
+ const HARVEST_STRIDE = 3;
19
+
10
20
  /**
11
21
  * Client-side orchestrator for the predict-reconcile model.
12
22
  *
@@ -27,6 +37,19 @@ import { NetworkPeer } from "./NetworkPeer.js";
27
37
  * {@link onReplay} handler re-executes the same SimActions the original
28
38
  * predict path produced.
29
39
  *
40
+ * - A replay also reapplies the records in the rewound window that ARRIVED
41
+ * from a peer, which {@link onReplay} cannot: it re-executes this client's
42
+ * own input, and the AUTH_STATE that precedes it carries one `network_id`.
43
+ * Without this step a rewind about one entity discards the owner's published
44
+ * state for every OTHER entity in the window — permanently, for anything
45
+ * published on change rather than every frame, because nothing re-sends it
46
+ * and nothing else restores it. This is the client half of the rule
47
+ * `SimAction` states and `ServerAuthoritativeServer.#read_historical`
48
+ * implements: a record's `sender_id` says whether it arrived, was authored,
49
+ * or was derived, and a replay reapplies the first two and recomputes the
50
+ * third. Here the authored half is `onReplay`'s job and the arrived half is
51
+ * this one's.
52
+ *
30
53
  * - A no-op short-circuit is built in: before doing the rewind+replay, the
31
54
  * orchestrator gives the user a chance to compute what the replay WOULD
32
55
  * produce via {@link onComputeExpected}; if that matches the current
@@ -55,6 +78,30 @@ export class ServerAuthoritativeClient {
55
78
  #expected_scratch;
56
79
  #measured_scratch;
57
80
 
81
+ /**
82
+ * Records of one log frame that arrived from a peer, indexed
83
+ * {@link HARVEST_STRIDE} ints apiece into {@link #harvest_payloads}. Filled
84
+ * by {@link #harvest_arrived} before the frame is reopened and drained by
85
+ * {@link #execute_harvested} once it is.
86
+ * @type {Int32Array}
87
+ */
88
+ #harvest_index = new Int32Array(HARVEST_STRIDE * 32);
89
+
90
+ /** @type {number} records currently described by {@link #harvest_index} */
91
+ #harvest_count = 0;
92
+
93
+ /**
94
+ * The harvested records' action payloads, back to back. A frame's bytes have
95
+ * to be copied out before the frame is reopened: opening it rewinds its
96
+ * buffer to zero and the re-execution then writes over exactly the bytes
97
+ * being read.
98
+ * @type {BinaryBuffer}
99
+ */
100
+ #harvest_payloads = new BinaryBuffer();
101
+
102
+ /** @type {ActionRecordCursor} */
103
+ #harvest_cursor = new ActionRecordCursor();
104
+
58
105
  // Counters
59
106
  /** @type {number} */
60
107
  reconcile_count = 0;
@@ -62,6 +109,22 @@ export class ServerAuthoritativeClient {
62
109
  /** @type {number} */
63
110
  replay_frame_count = 0;
64
111
 
112
+ /**
113
+ * Records that arrived from a peer and were reapplied by a replay, over the
114
+ * life of this client. Zero on a client whose peers publish nothing the
115
+ * rewind window covers; non-zero is the fix for the discard above doing
116
+ * work, and is what a test can assert on rather than inferring from a value.
117
+ * @type {number}
118
+ */
119
+ replayed_arrived_count = 0;
120
+
121
+ /**
122
+ * Reconciliations abandoned because the action log no longer held the frames
123
+ * the rewind needed. See {@link onReconcileAbandoned}.
124
+ * @type {number}
125
+ */
126
+ reconcile_abandoned_count = 0;
127
+
65
128
  /**
66
129
  * @param {{
67
130
  * world: EntityComponentDataset,
@@ -261,6 +324,30 @@ export class ServerAuthoritativeClient {
261
324
  */
262
325
  this.onReconcileComplete = new Signal();
263
326
 
327
+ /**
328
+ * Fires when a reconciliation is abandoned because the action log no
329
+ * longer holds the frames its rewind needed. Args:
330
+ * `(server_frame, network_id)`.
331
+ *
332
+ * This is a real loss of replicated state and not a hiccup: state a peer
333
+ * does not own reaches it on the action stream, and an owner that
334
+ * publishes on change never sends it again — so whatever that window
335
+ * carried for every entity other than `network_id` is gone. The server
336
+ * would normally back-fill via `RECOVERY_REQUEST`/`STATE_BURST`, which
337
+ * is request-driven, so something has to know to ask. That is what this
338
+ * signal is for; {@link reconcile_abandoned_count} is the same event as
339
+ * a counter.
340
+ *
341
+ * A client seeing this repeatedly is running further ahead of the server
342
+ * frame than its `frame_capacity` covers.
343
+ *
344
+ * @type {Signal}
345
+ */
346
+ this.onReconcileAbandoned = new Signal();
347
+
348
+ // One packet's worth of action payloads, grown on demand from there.
349
+ this.#harvest_payloads.setCapacity(1024);
350
+
264
351
  // Wire the AUTH_STATE handler to the algorithm above.
265
352
  this.peer.onAuthState.add((_peer_id, server_frame, network_id, buffer) => {
266
353
  this.#handle_auth_state(server_frame, network_id, buffer);
@@ -379,17 +466,51 @@ export class ServerAuthoritativeClient {
379
466
 
380
467
  // Real divergence: rewind, apply server's bytes, replay forward.
381
468
  const rewind_target = server_frame - 1;
469
+ let rewound = false;
382
470
  if (this.#current_frame > rewind_target) {
383
471
  try {
384
472
  this.rewind_engine.rewind_to(this.#current_frame, rewind_target);
473
+ rewound = true;
385
474
  } catch (e) {
386
- // The action_log probably rolled past server_frame. The
387
- // server would normally back-fill us via STATE_BURST; for now
388
- // skip this reconciliation.
475
+ /*
476
+ The action_log rolled past server_frame, so the window this
477
+ reconciliation needs no longer exists and skipping it is the
478
+ only option left. Counted and announced rather than swallowed:
479
+ what the window carried for every entity other than this one is
480
+ gone for good, and an application that cannot see that happen
481
+ cannot ask for the back-fill that would repair it.
482
+ */
483
+ this.reconcile_abandoned_count++;
484
+ this.onReconcileAbandoned.send2(server_frame, network_id);
389
485
  return;
390
486
  }
391
487
  }
392
488
 
489
+ /*
490
+ Frame `server_frame` was just undone and is NOT replayed below: the
491
+ AUTH_STATE is the server's state at the END of it, so re-running this
492
+ client's own input for that frame would apply that input twice.
493
+
494
+ Its ARRIVED records are the other half of the frame, and the half that
495
+ was being dropped. The bytes below repair one `network_id`; every other
496
+ entity the frame touched has nothing else to restore it. They go back in
497
+ BEFORE those bytes, so the authoritative value still wins wherever the
498
+ two describe the same component.
499
+
500
+ In the ordinary owner-scoped arrangement this is the frame that matters
501
+ most: the owner's records for a frame land in the log at the owner's
502
+ frame number, which is at or below `server_frame`, so they sit at the
503
+ very bottom of the rewound window rather than inside the replay range.
504
+ */
505
+ if (rewound && this.#harvest_arrived(server_frame) > 0) {
506
+ this.action_log.begin_frame(server_frame);
507
+ try {
508
+ this.#execute_harvested();
509
+ } finally {
510
+ this.action_log.end_frame();
511
+ }
512
+ }
513
+
393
514
  // Apply the server's authoritative state bytes. The handler does the
394
515
  // adapter-specific deserialize.
395
516
  this.onApplyAuthState.send3(server_frame, network_id, buffer);
@@ -397,6 +518,10 @@ export class ServerAuthoritativeClient {
397
518
  // Replay forward from (server_frame + 1) through current_frame.
398
519
  let replay_count = 0;
399
520
  for (let f = server_frame + 1; f <= this.#current_frame; f++) {
521
+ // Harvested before `begin_frame`, which rewinds the frame's buffer
522
+ // over the bytes being read. Nothing to harvest if nothing was undone.
523
+ const arrived = rewound ? this.#harvest_arrived(f) : 0;
524
+
400
525
  this.action_log.begin_frame(f);
401
526
  try {
402
527
  let input_reader = null;
@@ -405,6 +530,15 @@ export class ServerAuthoritativeClient {
405
530
  input_reader.position = 0;
406
531
  }
407
532
  this.onReplay.send2(f, input_reader);
533
+
534
+ /*
535
+ After the local input, which is the order the frame was written
536
+ in the first time: this client's prediction was logged as it
537
+ ticked the frame, and the owner's mutations for that frame
538
+ arrived later. It also leaves the owner's value last, which is
539
+ the one that should win where both touch a component.
540
+ */
541
+ if (arrived > 0) this.#execute_harvested();
408
542
  } finally {
409
543
  this.action_log.end_frame();
410
544
  }
@@ -416,6 +550,115 @@ export class ServerAuthoritativeClient {
416
550
  this.onReconcileComplete.send2(server_frame, replay_count);
417
551
  }
418
552
 
553
+ /**
554
+ * Copy the records of `frame` that arrived from a peer out of the action
555
+ * log, ready for {@link #execute_harvested} to put back.
556
+ *
557
+ * MUST be called before `action_log.begin_frame(frame)`. Opening a frame
558
+ * rewinds its buffer to zero without clearing it, and the re-execution
559
+ * writes over exactly the bytes this reads, so the payloads are copied into
560
+ * {@link #harvest_payloads} rather than read in place.
561
+ *
562
+ * Provenance decides what a replay does with a record, and this client keeps
563
+ * a narrower set than the server does:
564
+ *
565
+ * - a CONNECTED peer's id — it arrived from that peer, and nothing else
566
+ * here reproduces it. `onApplyAuthState` covers one `network_id` and
567
+ * {@link onReplay} covers this client's own input. Kept.
568
+ * - `SENDER_DERIVED` — output a replay recomputes. Skipped, same as
569
+ * `ServerAuthoritativeServer.#read_historical` skips it.
570
+ * - `SENDER_LOCAL`, and this client's own peer id — its own input, which
571
+ * {@link onReplay} reapplies from the sampled-action ledger. Skipped:
572
+ * reapplying it from the log as well would apply it twice.
573
+ *
574
+ * Connectedness is the test rather than a comparison against the local peer
575
+ * id because it is the same question stated directly — the sender byte of an
576
+ * arrived record is the peer it arrived from, and a client never connects to
577
+ * itself, so its own records can never match.
578
+ *
579
+ * @param {number} frame
580
+ * @returns {number} how many records were harvested
581
+ * @private
582
+ */
583
+ #harvest_arrived(frame) {
584
+ this.#harvest_count = 0;
585
+ this.#harvest_payloads.position = 0;
586
+
587
+ if (!this.action_log.has_frame(frame)) return 0;
588
+
589
+ const cursor = this.#harvest_cursor;
590
+ cursor.open(this.action_log, frame);
591
+ const bytes = cursor.buffer.raw_bytes;
592
+
593
+ while (cursor.next()) {
594
+ if (!this.peer.is_connected(cursor.sender_id)) continue;
595
+
596
+ if ((this.#harvest_count + 1) * HARVEST_STRIDE > this.#harvest_index.length) {
597
+ this.#grow_harvest_index();
598
+ }
599
+
600
+ const i = this.#harvest_count * HARVEST_STRIDE;
601
+ this.#harvest_index[i] = cursor.action_type_id;
602
+ this.#harvest_index[i + 1] = cursor.sender_id;
603
+ this.#harvest_index[i + 2] = this.#harvest_payloads.position;
604
+ this.#harvest_count++;
605
+
606
+ this.#harvest_payloads.writeBytes(bytes, cursor.payload_start, cursor.payload_len);
607
+ }
608
+
609
+ return this.#harvest_count;
610
+ }
611
+
612
+ /**
613
+ * Re-execute what {@link #harvest_arrived} took, in log order, into the
614
+ * currently-open frame.
615
+ *
616
+ * Going back through the executor is the point rather than an implementation
617
+ * detail: it captures each record's prior bytes again as it applies, so the
618
+ * reopened frame describes what is now live and the next rewind can undo it.
619
+ * A record whose action class is no longer registered is skipped — the same
620
+ * thing `Replicator.#apply_groups` does on the way in.
621
+ *
622
+ * @private
623
+ */
624
+ #execute_harvested() {
625
+ const payloads = this.#harvest_payloads;
626
+
627
+ for (let record = 0; record < this.#harvest_count; record++) {
628
+ const i = record * HARVEST_STRIDE;
629
+ const type_id = this.#harvest_index[i];
630
+ const sender_id = this.#harvest_index[i + 1];
631
+ const payload_start = this.#harvest_index[i + 2];
632
+
633
+ const klass = this.action_registry.klass_for(type_id);
634
+ if (klass === undefined) continue;
635
+
636
+ const action = this.action_registry.acquire(klass);
637
+ try {
638
+ payloads.position = payload_start;
639
+ action.deserialize(payloads);
640
+ // `execute` returns false when an authorization policy rejects
641
+ // the action, in which case nothing was applied or logged — so
642
+ // the counter follows the return value rather than the attempt.
643
+ if (this.executor.execute(action, sender_id)) {
644
+ this.replayed_arrived_count++;
645
+ }
646
+ } finally {
647
+ this.action_registry.release(action);
648
+ }
649
+ }
650
+ }
651
+
652
+ /**
653
+ * @private
654
+ */
655
+ #grow_harvest_index() {
656
+ const old = this.#harvest_index;
657
+ const next = new Int32Array(old.length * 2);
658
+ next.set(old);
659
+ this.#harvest_index = next;
660
+ }
661
+
419
662
  /**
420
663
  * Helper for the {@link onComputeExpected} handler: stash the
421
664
  * computed scalar so the orchestrator can read it. Called inside the
@@ -52,6 +52,24 @@ export class Replicator {
52
52
  is_entity_in_scope(peer_id: number, network_id: number): boolean;
53
53
  };
54
54
  });
55
+ /**
56
+ * Per-peer delivery accounting. Read it, log it, put it on a HUD, fail a test on it.
57
+ *
58
+ * `skipped_unapplied` is the one that matters: frames that reached this receiver and were
59
+ * dropped below the watermark without ever being applied. It should be zero. It is not zero
60
+ * when slices reorder on a sender pinned to the ring floor, which is what
61
+ * `max_packets_per_tick: 1` produces under jitter.
62
+ *
63
+ * `skipped_duplicate` is the healthy counterpart — the action stream's own redundancy arriving
64
+ * and being correctly ignored — and is expected to be large.
65
+ *
66
+ * @param {number} peer_id
67
+ * @returns {{skipped_unapplied: number, skipped_duplicate: number}}
68
+ */
69
+ delivery_stats(peer_id: number): {
70
+ skipped_unapplied: number;
71
+ skipped_duplicate: number;
72
+ };
55
73
  /**
56
74
  * Fired after each per-frame action group is fully applied via
57
75
  * {@link unpack_from_peer}. Args: `(peer_id, frame_number)`.
@@ -1 +1 @@
1
- {"version":3,"file":"Replicator.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/replication/Replicator.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH;IAkFI;;;;;;;;OAQG;IACH;;;;;;wCAHiD,MAAM,cAAc,MAAM,GAAG,OAAO;;OA8BpF;IA/ED;;;;;;;;;;;;;OAaG;IACH,gBAFU,MAAM,CAEc;IAE9B;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFqB,MAAM,gBAAgB,MAAM,kBAAkB,MAAM,aAAa,YAAY,kBAAkB,MAAM,eAAe,MAAM,KAAK,IAAI,CAE/H;IAmBrB;;OAEG;IACH,sBAA4B;IAE5B;;OAEG;IACH,mCAAsC;IAEtC;;OAEG;IACH,4BAAwB;IAExB;;OAEG;IACH,iCAA4B;IAE5B;;;;OAIG;IACH;oCAFwC,MAAM,cAAc,MAAM,GAAG,OAAO;MAE5C;IAGpC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,uBAVW,MAAM,eACN,MAAM,aACN,MAAM,cACN,YAAY,cACZ,MAAM,GACJ,MAAM,CA4ElB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,0BALW,MAAM,aACN,YAAY,iBACZ,MAAM,UACN;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,GAAC,IAAI,QAmEtE;IAyLD;;;;;;;OAOG;IACH,qBAFW,MAAM,QAKhB;;CA8CJ;mBAxlBkB,uCAAuC;6BAD7B,sCAAsC"}
1
+ {"version":3,"file":"Replicator.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/replication/Replicator.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH;IA4JI;;;;;;;;OAQG;IACH;;;;;;wCAHiD,MAAM,cAAc,MAAM,GAAG,OAAO;;OA8BpF;IA/HD;;;;;;;;;;;;;OAaG;IACH,wBAHW,MAAM,GACJ;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAC,CAUlE;IA0BD;;;;;;;;;;;;;OAaG;IACH,gBAFU,MAAM,CAEc;IAE9B;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFqB,MAAM,gBAAgB,MAAM,kBAAkB,MAAM,aAAa,YAAY,kBAAkB,MAAM,eAAe,MAAM,KAAK,IAAI,CAE/H;IAmBrB;;OAEG;IACH,sBAA4B;IAE5B;;OAEG;IACH,mCAAsC;IAEtC;;OAEG;IACH,4BAAwB;IAExB;;OAEG;IACH,iCAA4B;IAE5B;;;;OAIG;IACH;oCAFwC,MAAM,cAAc,MAAM,GAAG,OAAO;MAE5C;IAGpC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,uBAVW,MAAM,eACN,MAAM,aACN,MAAM,cACN,YAAY,cACZ,MAAM,GACJ,MAAM,CA4ElB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,0BALW,MAAM,aACN,YAAY,iBACZ,MAAM,UACN;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,GAAC,IAAI,QAmEtE;IAiND;;;;;;;OAOG;IACH,qBAFW,MAAM,QAKhB;;CA8CJ;mBA1rBkB,uCAAuC;6BAD7B,sCAAsC"}
@@ -93,6 +93,80 @@ export class Replicator {
93
93
  */
94
94
  #inbound = new Map();
95
95
 
96
+ /**
97
+ * Frames that arrived and were never applied, per peer, and the ones that were.
98
+ *
99
+ * **A skipped frame is not the same thing as a lost one, and until now neither was counted.**
100
+ * The action stream re-sends every unconfirmed frame each tick, so a frame arrives several
101
+ * times before its ack round-trips and every arrival after the first is skipped — correctly,
102
+ * and constantly. That is the normal case and it must not be counted as loss.
103
+ *
104
+ * What must be counted is the other one: a slice that arrives *after* a newer slice has raised
105
+ * the watermark past it, whose frames were therefore never applied and never will be, because
106
+ * its channel-level ack tells the sender they were delivered and nothing re-sends them. That is
107
+ * the failure `fb116d3a4` fixed for the default configuration and which
108
+ * `max_packets_per_tick: 1` still reproduces exactly — and the thing that made it expensive to
109
+ * find is that it is *silent*: a missing explosion looks like a rendering bug and nothing
110
+ * anywhere reports a shortfall.
111
+ *
112
+ * Telling the two apart needs one bit per frame in the window. `applied` is a ring of frame
113
+ * numbers indexed by `frame % capacity`, holding the frame that last wrote each slot, so a
114
+ * skipped frame can ask "was I ever applied?" in constant time and constant memory. A frame
115
+ * older than the window answers "no", which is right: it is beyond recovery either way.
116
+ *
117
+ * @type {Map<number, {applied: Int32Array, skipped_unapplied: number, skipped_duplicate: number}>}
118
+ * @private
119
+ */
120
+ #delivery = new Map();
121
+
122
+ /**
123
+ * Per-peer delivery accounting. Read it, log it, put it on a HUD, fail a test on it.
124
+ *
125
+ * `skipped_unapplied` is the one that matters: frames that reached this receiver and were
126
+ * dropped below the watermark without ever being applied. It should be zero. It is not zero
127
+ * when slices reorder on a sender pinned to the ring floor, which is what
128
+ * `max_packets_per_tick: 1` produces under jitter.
129
+ *
130
+ * `skipped_duplicate` is the healthy counterpart — the action stream's own redundancy arriving
131
+ * and being correctly ignored — and is expected to be large.
132
+ *
133
+ * @param {number} peer_id
134
+ * @returns {{skipped_unapplied: number, skipped_duplicate: number}}
135
+ */
136
+ delivery_stats(peer_id) {
137
+ const d = this.#delivery.get(peer_id);
138
+
139
+ if (d === undefined) {
140
+ return { skipped_unapplied: 0, skipped_duplicate: 0 };
141
+ }
142
+
143
+ return { skipped_unapplied: d.skipped_unapplied, skipped_duplicate: d.skipped_duplicate };
144
+ }
145
+
146
+ /**
147
+ * @param {number} peer_id
148
+ * @returns {{applied: Int32Array, skipped_unapplied: number, skipped_duplicate: number}}
149
+ * @private
150
+ */
151
+ #delivery_state(peer_id) {
152
+ let d = this.#delivery.get(peer_id);
153
+
154
+ if (d === undefined) {
155
+ const capacity = this.action_log.frame_capacity;
156
+
157
+ d = {
158
+ // -1 is "no frame has occupied this slot"; frame numbers are non-negative
159
+ applied: new Int32Array(capacity).fill(-1),
160
+ skipped_unapplied: 0,
161
+ skipped_duplicate: 0
162
+ };
163
+
164
+ this.#delivery.set(peer_id, d);
165
+ }
166
+
167
+ return d;
168
+ }
169
+
96
170
  /**
97
171
  * Fired after each per-frame action group is fully applied via
98
172
  * {@link unpack_from_peer}. Args: `(peer_id, frame_number)`.
@@ -396,6 +470,25 @@ export class Replicator {
396
470
  // corrupt the action-log prior-state capture (see #inbound).
397
471
  // The read cursor must still advance past this frame's actions.
398
472
  if (frame_number < min_frame) {
473
+ /*
474
+ Was this one already applied, or is it being lost right now?
475
+
476
+ Both look identical here — a frame below the watermark, walked past to keep the
477
+ read cursor aligned — and the difference is the whole of GAP-043's residual. The
478
+ ring says which: a slot still holding this frame number means it was applied and
479
+ this is the action stream's own redundancy doing its job; anything else means the
480
+ watermark moved past a frame that never ran, and nothing will re-send it because
481
+ its channel-level ack already told the sender it arrived.
482
+ */
483
+ const delivery = this.#delivery_state(peer_id);
484
+ const slot = frame_number % delivery.applied.length;
485
+
486
+ if (delivery.applied[slot] === frame_number) {
487
+ delivery.skipped_duplicate++;
488
+ } else {
489
+ delivery.skipped_unapplied++;
490
+ }
491
+
399
492
  for (let i = 0; i < action_count; i++) {
400
493
  if (in_buffer.position + ACTION_HEADER_BYTES > in_buffer_end) {
401
494
  throw new MalformedPacketError(`Replicator.unpack_from_peer: action header overruns packet (skip; frame ${frame_number}, action ${i}/${action_count})`);
@@ -443,6 +536,11 @@ export class Replicator {
443
536
  this.action_log.end_frame();
444
537
  }
445
538
 
539
+ // Record that it ran, so a later arrival of the same frame is counted as the action
540
+ // stream's redundancy rather than as a loss. See #delivery.
541
+ const delivery = this.#delivery_state(peer_id);
542
+ delivery.applied[frame_number % delivery.applied.length] = frame_number;
543
+
446
544
  // Fire AFTER end_frame so handlers see consistent state and can
447
545
  // safely query the action log for the just-applied frame.
448
546
  this.onFrameApplied.send2(peer_id, frame_number);
@@ -835,6 +835,33 @@ export class PhysicsSystem extends System<any> {
835
835
  * {@link InterpolationSystem} blends consecutive ticks from these snapshots.
836
836
  * Only awake (moving) bodies are recorded, so the log stays sparse. No-op
837
837
  * unless {@link interpolationLog} is wired.
838
+ *
839
+ * **A body created after this pass has no snapshot for the step it was born on, and renders
840
+ * from one snapshot for a step.** This pass runs at the end of `fixedUpdate`, and game code
841
+ * runs after it — that ordering is correct, the sim must read the solved poses — so a body
842
+ * spawned by game code is invisible to the tick it was spawned into. Its first record is the
843
+ * NEXT tick, and `InterpolationLog.interpolate` handles the missing half gracefully by falling
844
+ * back to whichever snapshot exists. That is the right primitive behaviour and it produces a
845
+ * bad picture: the entity is drawn at the *newer* tick for a whole frame budget, so it appears
846
+ * to jump a full step's travel and then hold still for one. Measured at 165 Hz by a port
847
+ * (GAP-036) as four frames of a rocket parked at the muzzle, reported by a player as
848
+ * "projectiles move with jerks".
849
+ *
850
+ * **Why this is documented rather than fixed, which is the part worth knowing.** The obvious
851
+ * fix — record a body's pose when it links — does not fit this log. {@link InterpolationLog} is
852
+ * a strictly monotonic tick ring: `begin_tick` throws while a tick is open, pages are
853
+ * contiguous ranges that the next page's bytes follow immediately, and `#ticks` is keyed by
854
+ * tick number — so re-opening the closed tick to append one body would overwrite that tick's
855
+ * metadata for every other body in it. The fix that does work is to move this pass out of
856
+ * `fixedUpdate` into a system registered after every simulation system, which is what a
857
+ * consumer hitting this did; that costs a second mandatory registration, which is a trade this
858
+ * engine has decided against elsewhere. Closing it properly means either a per-body "first
859
+ * tick" the blend can consult, or a log that accepts an out-of-order record.
860
+ *
861
+ * The workaround needs no engine change: put the body on the application's own timeline via a
862
+ * pose recorder registered last, since `__interp_restore` does not filter by `sourceId` and
863
+ * `PhysicsSystem` still restores the authoritative pose before it integrates.
864
+ *
838
865
  * @private
839
866
  */
840
867
  private __interp_record;
@@ -1 +1 @@
1
- {"version":3,"file":"PhysicsSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/PhysicsSystem.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PhysicsSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/PhysicsSystem.js"],"names":[],"mappings":"AAsGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAiRI,cAqBC;IApSD,sDAAsC;IACtC,kKAIE;IAEF;;;;OAIG;IACH,kBAHU,WAAW,CAGO;IAE5B;;;;OAIG;IACH,WAFU,GAAG,CAES;IAEtB;;;;OAIG;IACH,YAFU,GAAG,CAEU;IAEvB;;;;OAIG;IACH,oBAHU,aAAa,CAGS;IAEhC;;;;;OAKG;IACH,OAFU,QAAQ,CAEK;IAEvB;;;;OAIG;IACH,eAFU,kBAAkB,CAEa;IAEzC;;;;;OAKG;IACH,SAFU,aAAa,CAEO;IAE9B;;;;;;;;;OASG;IACH,gBAFU,eAAe,CAEc;IAEvC;;;;;;OAMG;IACH,2BAFU,MAAM,CAEiB;IAEjC;;;;OAIG;IACH,oBAFU,MAAM,CAES;IAEzB;;;;;;OAMG;IACH,UAFU,MAAM,CAEH;IAEb;;;;;OAKG;IACH,oBAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,oBAFU,MAAM,CAEO;IAEvB;;;;;;;OAOG;IACH,cAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,qBAFU,MAAM,CAES;IAEzB;;;;OAIG;IACH,0BAOE;IAEF;;;;OAIG;IACH,kBAFU,OAAO,CAEkB;IAEnC;;;;;OAKG;IACH,yBAAwB;IAExB;;;;;OAKG;IACH,UAFU,SAAS,EAAE,CAEP;IAEd;;;OAGG;IACH,uBAHU,SAAS,EAAE,CAGH;IAElB;;;;;;;;OAQG;IACH,uBAFU,MAAM,MAAM;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC,CAExE;IAE3B;;;;;OAKG;IACH,UAFU,OAAO,CAEH;IAEd;;;;;;OAMG;IACH,qBAAkB;IAElB;;;;;;;;;;;;;OAaG;IACH,wBAAqB;IAErB;;;;;;OAMG;IACH,iBAFU,MAAM,CAEI;IAEpB;;;;;;;;;;;;;;;;OAgBG;IACH,mBAFU,YAAY,CAEkB;IAExC;;;;OAIG;IACH,YAFU,OAAO,CAEC;IAElB;;;;;;;OAOG;IACH,iBAFU,YAAY,CAEgB;IAEtC;;;;;;;OAOG;IACH,kBAFU,mBAAiB,IAAI,CAEP;IAExB,yEAAyE;IACzE,gCAA4B;IAKxB;;;;OAIG;IACH,yBAA0C;IAG1C;;;;;;;;OAQG;IACH,0BAA4C;IAGhD;;;;;;;;;;;;;OAaG;IACH,sBA6BC;IAED;;;;;;;;;;;;;;OAcG;IACH,2BAGC;IAED;;;;;;;;;;OAUG;IACH,gCAOC;IAED;;;OAGG;IACH,cAFW,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAI9C;IAED;;;OAGG;IACH,+BAFqB,MAAM,WAAU,MAAM,aAAY,QAAQ,aAAY,QAAQ,KAAK,OAAO,QAI9F;IAED;;OAEG;IACH,8BAFuB,MAAM,WAAU,MAAM,aAAY,QAAQ,aAAY,QAAQ,KAAK,OAAO,CAIhG;IAED;;;;;;OAMG;IACH,iCA8BC;IAED;;;;OAIG;IACH,iCAIC;IAED;;;;;;;;;;;;;;;OAeG;IACH,yCAmBC;IAED;;;;;;;;;;OAUG;IACH,gBAJW,SAAS,aACT,SAAS,UACT,MAAM,QAkChB;IAED;;;;;;;OAOG;IACH,kBAJW,SAAS,aACT,SAAS,UACT,MAAM,QAyDhB;IAED;;;;;;;;;;;;;OAaG;IACH,6BALW,MAAM,YACN,QAAQ,aACR,SAAS,oBACT,MAAM,QAmBhB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,YACN,QAAQ,QAiClB;IAED;;;;;;;;OAQG;IACH,oCAEC;IAED;;;;;;;;;OASG;IACH,+BAyCC;IAED;;;;OAIG;IACH,iCAUC;IAED;;;;OAIG;IACH,yBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;OAGG;IACH,wBAEC;IAED;;;;;;;;;OASG;IACH,wBAHW,SAAS,WACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAU9C;IAED;;;;;;;;;;;OAWG;IACH,0BALW,SAAS,aACT,SAAS,WACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,cACpC,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAwC9C;IAED;;;;;;;;OAQG;IACH,uBAHW,SAAS,UACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAY9C;IAED;;;;;;;;;;;OAWG;IACH,wBALW,SAAS,aACT,SAAS,SACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,cACpC,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAuB9C;IAED;;;;;;OAMG;IACH,sBAHW,SAAS,SACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAQ9C;IAED;;;;;OAKG;IACH,6BAHW,SAAS,KACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAO9C;IAED;;;;;;;;OAQG;IACH,8BAHW,SAAS,KACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAO9C;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,mBAJW,SAAS,YACT,OAAO,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YACpC,aAAW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAgE1D;IAED;;;OAGG;IACH,gBAFW,SAAS,QAInB;IAED;;;;OAIG;IACH,iBAFW,SAAS,QAkBnB;IAED;;;;;;;;;;;;;;OAcG;IACH,oBAmCC;IAED;;;;;;;;;;;;;;OAcG;IACH,oCAwCC;IAED;;;;;;;;;;;;;;OAcG;IACH,kEAJmB,MAAM,YAAW,QAAQ,KAAG,OAAO,GAEzC,OAAO,CAInB;IAED;;;;;;;;;;;;;;OAcG;IACH,uDALW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,iDAE7B,MAAM,YAAW,QAAQ,KAAG,OAAO,GACzC,OAAO,CAInB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,0CAVW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YAE5B;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,UAErC,WAAW,GAAC,MAAM,EAAE,iBACpB,MAAM,oBACE,MAAM,YAAW,QAAQ,KAAG,OAAO,GAEzC,MAAM,CAIlB;IAED;;;;;;;;;;;OAWG;IACH,YAFa,IAAI,CAMhB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,qBA8DC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,0BAiCC;IAED;;;;;;;;;;;;OAYG;IACH,sBAoCC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,qBAgEC;IAED;;;;;;;;;;OAUG;IACH,kCA0FC;IAED;;;;;;;;;OASG;IACH,yBA+CC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,wBA6CC;IAmYL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CANtC;uBAhvEsB,qBAAqB;0BAClB,kCAAkC;0BAmCV,gBAAgB;4CArCtB,oDAAoD;yBAgCrD,eAAe;4BA5Bf,wBAAwB;oBAb/C,gCAAgC;8BAoBtB,6BAA6B;yBAHlC,2BAA2B;mCAIC,iCAAiC;8BAKxD,4BAA4B;gCAZd,4BAA4B;oBAPpD,+BAA+B;yBAiC1B,eAAe;+BAOT,qBAAqB"}
@@ -1839,6 +1839,33 @@ export class PhysicsSystem extends System {
1839
1839
  * {@link InterpolationSystem} blends consecutive ticks from these snapshots.
1840
1840
  * Only awake (moving) bodies are recorded, so the log stays sparse. No-op
1841
1841
  * unless {@link interpolationLog} is wired.
1842
+ *
1843
+ * **A body created after this pass has no snapshot for the step it was born on, and renders
1844
+ * from one snapshot for a step.** This pass runs at the end of `fixedUpdate`, and game code
1845
+ * runs after it — that ordering is correct, the sim must read the solved poses — so a body
1846
+ * spawned by game code is invisible to the tick it was spawned into. Its first record is the
1847
+ * NEXT tick, and `InterpolationLog.interpolate` handles the missing half gracefully by falling
1848
+ * back to whichever snapshot exists. That is the right primitive behaviour and it produces a
1849
+ * bad picture: the entity is drawn at the *newer* tick for a whole frame budget, so it appears
1850
+ * to jump a full step's travel and then hold still for one. Measured at 165 Hz by a port
1851
+ * (GAP-036) as four frames of a rocket parked at the muzzle, reported by a player as
1852
+ * "projectiles move with jerks".
1853
+ *
1854
+ * **Why this is documented rather than fixed, which is the part worth knowing.** The obvious
1855
+ * fix — record a body's pose when it links — does not fit this log. {@link InterpolationLog} is
1856
+ * a strictly monotonic tick ring: `begin_tick` throws while a tick is open, pages are
1857
+ * contiguous ranges that the next page's bytes follow immediately, and `#ticks` is keyed by
1858
+ * tick number — so re-opening the closed tick to append one body would overwrite that tick's
1859
+ * metadata for every other body in it. The fix that does work is to move this pass out of
1860
+ * `fixedUpdate` into a system registered after every simulation system, which is what a
1861
+ * consumer hitting this did; that costs a second mandatory registration, which is a trade this
1862
+ * engine has decided against elsewhere. Closing it properly means either a per-body "first
1863
+ * tick" the blend can consult, or a log that accepts an out-of-order record.
1864
+ *
1865
+ * The workaround needs no engine change: put the body on the application's own timeline via a
1866
+ * pose recorder registered last, since `__interp_restore` does not filter by `sourceId` and
1867
+ * `PhysicsSystem` still restores the authoritative pose before it integrates.
1868
+ *
1842
1869
  * @private
1843
1870
  */
1844
1871
  __interp_record() {
@@ -64,11 +64,11 @@ export class FluidObstacleSystem extends System<any> {
64
64
  /**
65
65
  * @param {FluidComponent} fluid
66
66
  */
67
- static "__#371@#refresh_masks"(fluid: FluidComponent): void;
67
+ static "__#372@#refresh_masks"(fluid: FluidComponent): void;
68
68
  /**
69
69
  * @param {FluidComponent} fluid
70
70
  */
71
- static "__#371@#clear_field"(fluid: FluidComponent): void;
71
+ static "__#372@#clear_field"(fluid: FluidComponent): void;
72
72
  /**
73
73
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
74
74
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -80,7 +80,7 @@ export class FluidObstacleSystem extends System<any> {
80
80
  * @param {number} inflation world-units SDF threshold
81
81
  * @param {Float64Array} point length-3 scratch
82
82
  */
83
- static "__#371@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
83
+ static "__#372@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
84
84
  /**
85
85
  * Write the obstacle's translation velocity onto every face of every cell
86
86
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -100,7 +100,7 @@ export class FluidObstacleSystem extends System<any> {
100
100
  * @param {number} wvy
101
101
  * @param {number} wvz
102
102
  */
103
- static "__#371@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
103
+ static "__#372@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
104
104
  constructor();
105
105
  dependencies: (typeof FluidObstacle)[];
106
106
  components_used: (ResourceAccessSpecification<typeof Transform> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
@@ -13,6 +13,30 @@ declare class SoundEngine {
13
13
  sopra: SopraEngine | null;
14
14
  context: AudioContext;
15
15
  destination: GainNode;
16
+ /**
17
+ * @param {number} value
18
+ */
19
+ set volume(arg: number);
20
+ /**
21
+ * The one master fader in the graph, and the only one worth reaching for.
22
+ *
23
+ * Everything is downstream of {@link destination}: {@link obtainSopra}
24
+ * passes it as the sopra bus tree's output, and a `ProbeReverbRenderer` is
25
+ * constructed against the same node, so the dry mix and the wet return both
26
+ * pass through this gain.
27
+ *
28
+ * The bus named `master` inside sopra is NOT this. The probe reverb's
29
+ * return joins the graph BELOW the bus tree, so `busGraph.setVolume('master', 0)`
30
+ * silences the dry signal and leaves the wet tail of every sound at full
31
+ * level — audible, and audible only in reverberant rooms.
32
+ *
33
+ * This was an `Object.defineProperties` block, which the declaration
34
+ * generator does not read, so `sound.volume = 0.5` was a compile error
35
+ * against a property that exists and works.
36
+ *
37
+ * @returns {number}
38
+ */
39
+ get volume(): number;
16
40
  /**
17
41
  * Create and own the sopra engine, built on this SoundEngine's existing AudioContext + master
18
42
  * destination (never a second context). Wired in by the sound systems, which supply an
@@ -1 +1 @@
1
- {"version":3,"file":"SoundEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/sound/SoundEngine.js"],"names":[],"mappings":";AAEA;;;;GAIG;AACH;IACI;;;;OAIG;IACH,OAFU,WAAW,GAAC,IAAI,CAEb;IAkBO,sBAWd;IAUF,sBAA2B;IAiB/B;;;;;;;;;;OAUG;IACH,6CAFa,WAAW,CAQvB;IAED;;;OAGG;IACH,kBAFY,MAAM,CAIjB;IAED;;;;OAIG;IACH,iBAFa,QAAQ,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,SAFa,QAAQ,GAAG,CAAC,CAWxB;CACJ;4BAzH2B,wBAAwB"}
1
+ {"version":3,"file":"SoundEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/sound/SoundEngine.js"],"names":[],"mappings":";AAEA;;;;GAIG;AACH;IACI;;;;OAIG;IACH,OAFU,WAAW,GAAC,IAAI,CAEb;IAkBO,sBAWd;IAUF,sBAA2B;IA4B/B;;OAEG;IACH,wBAEC;IA5BD;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBAEC;IASD;;;;;;;;;;OAUG;IACH,6CAFa,WAAW,CAQvB;IAED;;;OAGG;IACH,kBAFY,MAAM,CAIjB;IAED;;;;OAIG;IACH,iBAFa,QAAQ,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,SAFa,QAAQ,GAAG,CAAC,CAWxB;CACJ;4BA3I2B,wBAAwB"}