@woosh/meep-engine 3.14.4 → 3.14.6

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 (717) 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/mat4/m4_rigidity_defect.d.ts +30 -0
  363. package/src/core/geom/3d/mat4/m4_rigidity_defect.d.ts.map +1 -0
  364. package/src/core/geom/3d/mat4/m4_rigidity_defect.js +71 -0
  365. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +2 -2
  366. package/src/core/geom/3d/ray/Ray3.d.ts +4 -4
  367. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +10 -3
  368. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  369. package/src/core/geom/3d/shape/AbstractShape3D.js +9 -2
  370. package/src/core/geom/3d/shape/TransformedShape3D.d.ts +2 -2
  371. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +1 -1
  372. package/src/core/geom/Vector1.d.ts +4 -0
  373. package/src/core/geom/Vector1.d.ts.map +1 -1
  374. package/src/core/geom/Vector1.js +4 -0
  375. package/src/core/geom/Vector2.d.ts +4 -0
  376. package/src/core/geom/Vector2.d.ts.map +1 -1
  377. package/src/core/geom/Vector2.js +4 -0
  378. package/src/core/geom/Vector3.d.ts +4 -0
  379. package/src/core/geom/Vector3.d.ts.map +1 -1
  380. package/src/core/geom/Vector3.js +4 -0
  381. package/src/core/geom/Vector4.d.ts +4 -0
  382. package/src/core/geom/Vector4.d.ts.map +1 -1
  383. package/src/core/geom/Vector4.js +4 -0
  384. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts +6 -2
  385. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts.map +1 -1
  386. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +4 -0
  387. package/src/core/geom/packing/miniball/Subspan.d.ts +4 -4
  388. package/src/core/geom/packing/miniball/Subspan.d.ts.map +1 -1
  389. package/src/core/geom/packing/miniball/Subspan.js +2 -2
  390. package/src/core/math/interval/NumericInterval.d.ts +4 -0
  391. package/src/core/math/interval/NumericInterval.d.ts.map +1 -1
  392. package/src/core/math/interval/NumericInterval.js +4 -0
  393. package/src/core/math/random/roundFair.d.ts +2 -2
  394. package/src/core/math/random/roundFair.d.ts.map +1 -1
  395. package/src/core/math/random/roundFair.js +1 -1
  396. package/src/core/model/BoundedValue.d.ts +4 -0
  397. package/src/core/model/BoundedValue.d.ts.map +1 -1
  398. package/src/core/model/BoundedValue.js +4 -0
  399. package/src/core/model/ObservedBoolean.d.ts +4 -0
  400. package/src/core/model/ObservedBoolean.d.ts.map +1 -1
  401. package/src/core/model/ObservedBoolean.js +4 -0
  402. package/src/core/model/ObservedInteger.d.ts +4 -0
  403. package/src/core/model/ObservedInteger.d.ts.map +1 -1
  404. package/src/core/model/ObservedInteger.js +4 -0
  405. package/src/core/model/ObservedString.d.ts +4 -0
  406. package/src/core/model/ObservedString.d.ts.map +1 -1
  407. package/src/core/model/ObservedString.js +4 -0
  408. package/src/core/model/stat/Stat.d.ts +7 -3
  409. package/src/core/model/stat/Stat.d.ts.map +1 -1
  410. package/src/core/model/stat/Stat.js +4 -0
  411. package/src/engine/Engine.d.ts.map +1 -1
  412. package/src/engine/Engine.js +65 -0
  413. package/src/engine/EngineHarness.d.ts +8 -1
  414. package/src/engine/EngineHarness.d.ts.map +1 -1
  415. package/src/engine/EngineHarness.js +10 -14
  416. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts +2 -2
  417. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
  418. package/src/engine/animation/clip/ecd_bind_animation_curve.js +4 -4
  419. package/src/engine/asset/loaders/async_traverse_three_object.d.ts +2 -2
  420. package/src/engine/asset/loaders/async_traverse_three_object.d.ts.map +1 -1
  421. package/src/engine/asset/loaders/async_traverse_three_object.js +1 -1
  422. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts +7 -3
  423. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts.map +1 -1
  424. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.js +33 -3
  425. package/src/engine/control/first-person/DESIGN.md +20 -2
  426. package/src/engine/control/first-person/DESIGN_COLLISION.md +17 -0
  427. package/src/engine/control/first-person/collision/KinematicMover.d.ts +58 -11
  428. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  429. package/src/engine/control/first-person/collision/KinematicMover.js +97 -20
  430. package/src/engine/ecs/Entity.js +1 -1
  431. package/src/engine/ecs/EntityComponentDataset.d.ts +2 -2
  432. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  433. package/src/engine/ecs/EntityComponentDataset.js +1 -1
  434. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  435. package/src/engine/ecs/EntityManager.js +27 -3
  436. package/src/engine/ecs/animation/Animation.d.ts +17 -3
  437. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  438. package/src/engine/ecs/animation/Animation.js +26 -6
  439. package/src/engine/ecs/terrain/TerrainPreview.d.ts +4 -0
  440. package/src/engine/ecs/terrain/TerrainPreview.d.ts.map +1 -1
  441. package/src/engine/ecs/terrain/TerrainPreview.js +4 -0
  442. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +4 -4
  443. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  444. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +2 -2
  445. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts +3 -2
  446. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts.map +1 -1
  447. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.js +25 -2
  448. package/src/engine/ecs/transform/Transform64.d.ts +4 -4
  449. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  450. package/src/engine/ecs/transform/Transform64.js +2 -2
  451. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts +26 -0
  452. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  453. package/src/engine/graphics/ecs/decal/v2/Decal.js +26 -0
  454. package/src/engine/graphics/ecs/light/Light.d.ts +38 -1
  455. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  456. package/src/engine/graphics/ecs/light/Light.js +51 -1
  457. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts +3 -3
  458. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +1 -1
  459. package/src/engine/graphics/ecs/mesh/copyToVector3.js +2 -2
  460. package/src/engine/graphics/ecs/mesh/setMesh.d.ts +2 -2
  461. package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +1 -1
  462. package/src/engine/graphics/ecs/mesh/setMesh.js +1 -1
  463. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +2 -2
  464. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +1 -1
  465. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +1 -1
  466. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +3 -3
  467. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +1 -1
  468. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +2 -2
  469. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +2 -2
  470. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +1 -1
  471. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +1 -1
  472. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +2 -2
  473. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +1 -1
  474. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +1 -1
  475. package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts +2 -2
  476. package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts.map +1 -1
  477. package/src/engine/graphics/geometry/compute_geometry_polycount.js +1 -1
  478. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +3 -3
  479. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +1 -1
  480. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +2 -2
  481. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +4 -4
  482. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +1 -1
  483. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +3 -3
  484. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +3 -3
  485. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +1 -1
  486. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +2 -2
  487. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +4 -4
  488. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +1 -1
  489. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +3 -3
  490. package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts +2 -2
  491. package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts.map +1 -1
  492. package/src/engine/graphics/geometry/scaleGeometryToBox.js +1 -1
  493. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts +2 -2
  494. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts.map +1 -1
  495. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.js +1 -1
  496. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts +2 -2
  497. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts.map +1 -1
  498. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.js +1 -1
  499. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +4 -12
  500. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  501. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +2 -2
  502. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +5 -20
  503. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +1 -1
  504. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +24 -24
  505. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +1 -1
  506. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +16 -16
  507. package/src/engine/graphics/render/layers/RenderLayer.d.ts +4 -4
  508. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
  509. package/src/engine/graphics/render/layers/RenderLayer.js +2 -2
  510. package/src/engine/graphics/render/make_bvh_visibility_builder.js +1 -1
  511. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +1 -1
  512. package/src/engine/graphics/render/visibility/VisibilityComputer.js +1 -1
  513. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts +2 -2
  514. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts.map +1 -1
  515. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.js +1 -1
  516. package/src/engine/graphics3/DecalSystem.d.ts +8 -0
  517. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  518. package/src/engine/graphics3/DecalSystem.js +8 -0
  519. package/src/engine/graphics3/GraphicsEngine.d.ts +19 -8
  520. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  521. package/src/engine/graphics3/GraphicsEngine.js +22 -11
  522. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  523. package/src/engine/graphics3/LightSystem.js +11 -1
  524. package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts +4 -0
  525. package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts.map +1 -1
  526. package/src/engine/input/devices/gamepad/GamepadStickCalibration.js +4 -0
  527. package/src/engine/navigation/mesh/NavigationMesh.d.ts +90 -9
  528. package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -1
  529. package/src/engine/navigation/mesh/NavigationMesh.js +80 -8
  530. package/src/engine/network/NetworkSession.d.ts +60 -0
  531. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  532. package/src/engine/network/NetworkSession.js +141 -1
  533. package/src/engine/network/orchestrator/NetworkPeer.d.ts +56 -8
  534. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  535. package/src/engine/network/orchestrator/NetworkPeer.js +263 -67
  536. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +6 -1
  537. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  538. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +6 -0
  539. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +13 -7
  540. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  541. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +103 -138
  542. package/src/engine/network/replication/Replicator.d.ts +47 -6
  543. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  544. package/src/engine/network/replication/Replicator.js +362 -107
  545. package/src/engine/network/sim/ActionLog.d.ts +2 -0
  546. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  547. package/src/engine/network/sim/ActionLog.js +2 -0
  548. package/src/engine/network/sim/ActionRecordCursor.d.ts +82 -0
  549. package/src/engine/network/sim/ActionRecordCursor.d.ts.map +1 -0
  550. package/src/engine/network/sim/ActionRecordCursor.js +120 -0
  551. package/src/engine/network/sim/RewindEngine.d.ts.map +1 -1
  552. package/src/engine/network/sim/RewindEngine.js +13 -29
  553. package/src/engine/network/sim/SimActionExecutor.d.ts +2 -3
  554. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  555. package/src/engine/network/sim/SimActionExecutor.js +10 -11
  556. package/src/engine/physics/ecs/PhysicsSystem.d.ts +27 -0
  557. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  558. package/src/engine/physics/ecs/PhysicsSystem.js +27 -0
  559. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  560. package/src/engine/sound/SoundEngine.d.ts +24 -0
  561. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  562. package/src/engine/sound/SoundEngine.js +29 -11
  563. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts +12 -4
  564. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts.map +1 -1
  565. package/src/engine/sound/simulation/configureAcousticSimulation.js +10 -4
  566. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts +3 -1
  567. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts.map +1 -1
  568. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +27 -1
  569. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +34 -0
  570. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
  571. package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +61 -2
  572. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
  573. package/src/engine/sound/simulation/render/reverbImpulseResponse.js +9 -0
  574. package/src/shade/playground/particle_system/README.md +14 -3
  575. package/src/shade/playground/particle_system/index.html +1 -0
  576. package/src/shade/playground/particle_system/main.js +15 -2
  577. package/src/shade/playground/particle_system/particle_scene.d.ts +11 -2
  578. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  579. package/src/shade/playground/particle_system/particle_scene.js +164 -46
  580. package/src/shade/playground/skinned_mesh_soup/README.md +39 -18
  581. package/src/shade/playground/skinned_mesh_soup/index.html +9 -6
  582. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  583. package/src/shade/playground/skinned_mesh_soup/main.js +16 -13
  584. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +8 -2
  585. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  586. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +23 -4
  587. package/src/shade/renderer/GraphicsContext.d.ts +1 -0
  588. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  589. package/src/shade/renderer/GraphicsContext.js +4 -0
  590. package/src/shade/renderer/Renderer.d.ts +1 -1
  591. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  592. package/src/shade/renderer/animation/GPUAnimationManager.js +1958 -1796
  593. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +357 -0
  594. package/src/shade/renderer/animation/skin_bind_transform.d.ts +25 -0
  595. package/src/shade/renderer/animation/skin_bind_transform.d.ts.map +1 -0
  596. package/src/shade/renderer/animation/skin_bind_transform.js +33 -0
  597. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +67 -0
  598. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -0
  599. package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +199 -0
  600. package/src/shade/renderer/animation/skin_frame_defect.d.ts +34 -0
  601. package/src/shade/renderer/animation/skin_frame_defect.d.ts.map +1 -0
  602. package/src/shade/renderer/animation/skin_frame_defect.js +132 -0
  603. package/src/shade/renderer/animation/skin_joint_matrix.d.ts +24 -0
  604. package/src/shade/renderer/animation/skin_joint_matrix.d.ts.map +1 -0
  605. package/src/shade/renderer/animation/skin_joint_matrix.js +46 -0
  606. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts +70 -0
  607. package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +1 -0
  608. package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +216 -0
  609. package/src/shade/renderer/animation/skin_test_fixtures.d.ts +86 -0
  610. package/src/shade/renderer/animation/skin_test_fixtures.d.ts.map +1 -0
  611. package/src/shade/renderer/animation/skin_test_fixtures.js +250 -0
  612. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +18 -4
  613. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts.map +1 -1
  614. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +18 -4
  615. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +13 -0
  616. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  617. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +13 -0
  618. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts +18 -0
  619. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
  620. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +18 -0
  621. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts +4 -0
  622. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts.map +1 -1
  623. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.js +4 -0
  624. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +12 -0
  625. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
  626. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +13 -0
  627. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  628. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  629. package/src/shade/renderer/particles/DESIGN.md +71 -20
  630. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +29 -5
  631. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  632. package/src/shade/renderer/particles/GPUParticleSystem.js +61 -6
  633. package/src/shade/renderer/particles/ParticleConstants.d.ts +31 -0
  634. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  635. package/src/shade/renderer/particles/ParticleConstants.js +33 -0
  636. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +61 -0
  637. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -0
  638. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +179 -0
  639. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts +63 -0
  640. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts.map +1 -0
  641. package/src/shade/renderer/particles/coherence/particle_program_buckets.js +116 -0
  642. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +59 -0
  643. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -0
  644. package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +344 -0
  645. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +27 -5
  646. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  647. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +27 -5
  648. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +13 -1
  649. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +1 -1
  650. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +15 -1
  651. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
  652. package/src/shade/renderer/particles/data/chunk_particle_emitter.js +3 -0
  653. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +43 -0
  654. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -0
  655. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +44 -0
  656. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +33 -59
  657. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  658. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +185 -118
  659. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +15 -10
  660. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  661. package/src/shade/renderer/particles/graph/compile_particle_graph.js +205 -170
  662. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +44 -0
  663. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -0
  664. package/src/shade/renderer/particles/graph/particle_graph_authoring.js +108 -0
  665. package/src/shade/renderer/particles/graph_particles.d.ts +39 -11
  666. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  667. package/src/shade/renderer/particles/graph_particles.js +60 -20
  668. package/src/shade/renderer/particles/particle_prototype.d.ts.map +1 -1
  669. package/src/shade/renderer/particles/particle_prototype.js +181 -180
  670. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +8 -1
  671. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  672. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +8 -1
  673. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +22 -2
  674. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  675. package/src/shade/renderer/particles/runtime/ProgramArena.js +54 -3
  676. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
  677. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  678. package/src/shade/renderer/particles/runtime/create_particle_effect.js +19 -19
  679. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  680. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +32 -14
  681. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +2 -23
  682. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  683. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +40 -11
  684. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +6 -17
  685. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  686. package/src/shade/renderer/particles/sort/shader_particle_sort.js +60 -9
  687. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +1 -1
  688. package/src/shade/renderer/scene/SkinnedMesh.d.ts +11 -0
  689. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
  690. package/src/shade/renderer/scene/SkinnedMesh.js +11 -0
  691. package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.d.ts +33 -3
  692. package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.d.ts.map +1 -1
  693. package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.js +58 -37
  694. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +1 -1
  695. package/src/view/DOM.d.ts +69 -0
  696. package/src/view/DOM.d.ts.map +1 -0
  697. package/src/view/DOM.js +2 -1
  698. package/src/view/common/LocalizedLabelView.d.ts +50 -0
  699. package/src/view/common/LocalizedLabelView.d.ts.map +1 -0
  700. package/src/view/controller/controls/GuiControl.d.ts +19 -0
  701. package/src/view/controller/controls/GuiControl.d.ts.map +1 -0
  702. package/src/view/elements/FrameRateView.d.ts +45 -0
  703. package/src/view/elements/FrameRateView.d.ts.map +1 -0
  704. package/src/view/elements/FrameRateView.js +131 -0
  705. package/src/view/elements/SliderView.d.ts +37 -0
  706. package/src/view/elements/SliderView.d.ts.map +1 -0
  707. package/src/view/elements/SliderView.js +71 -0
  708. package/src/view/elements/navigation/ViewStack.d.ts +1 -1
  709. package/src/view/elements/navigation/ViewStack.js +1 -1
  710. package/src/view/elements/notify/NotificationView.d.ts +22 -0
  711. package/src/view/elements/notify/NotificationView.d.ts.map +1 -0
  712. package/src/view/tooltip/TooltipView.d.ts +5 -1
  713. package/src/view/tooltip/TooltipView.d.ts.map +1 -1
  714. package/src/view/tooltip/TooltipView.js +4 -0
  715. package/src/shade/renderer/particles/graph/ParticleGraph.d.ts +0 -54
  716. package/src/shade/renderer/particles/graph/ParticleGraph.d.ts.map +0 -1
  717. package/src/shade/renderer/particles/graph/ParticleGraph.js +0 -99
@@ -1,3 +1,56 @@
1
+ /**
2
+ * A navigable surface, plus queries over it.
3
+ *
4
+ * ## What the builder expects, and how to check that you gave it that
5
+ *
6
+ * {@link build} wants a **manifold walkable surface**. Two things follow from that, and neither is
7
+ * enforced here, because a full manifold check costs more than most builds and whether to pay it is
8
+ * the caller's call — not something every valid input should be charged for. What follows is how to
9
+ * pay it when you want to.
10
+ *
11
+ * **1. A surface, not a pile of solids.** Level geometry from a brush-based editor is a set of
12
+ * interpenetrating closed VOLUMES: a floor brush is not a floor, it is a sealed box whose top
13
+ * happens to be one, with the wall brush beside it buried in its side. Feeding those in directly
14
+ * produces a navmesh that routes almost nothing — measured at 5% of spawn pairs on one map, and 32%
15
+ * on another. Extracting the walkable surface first is two filters and about forty lines: keep
16
+ * triangles whose normal passes your walk threshold (0.7 is the usual constant, and is what
17
+ * `agent_max_climb_angle` defaults near), and drop those whose space above is solid. That moved the
18
+ * same map from 5% to 48%.
19
+ *
20
+ * Render geometry is not a substitute. On the same measurement it produced an EMPTY navmesh, from
21
+ * an input that repair had made near-perfect — 8 islands over 3,301 faces with 99% in the largest.
22
+ * An empty build is a legitimate answer to bad input and is reported as zero faces.
23
+ *
24
+ * **2. Manifold, and welded.** `core/geom/3d/topology` is the repair toolkit and the order matters:
25
+ * `bt_merge_vertices_by_distance`, then `bt_mesh_fuse_duplicate_edges`, then
26
+ * `bt_mesh_resolve_t_junctions` — whose own docblock states both the problem (faces of differing
27
+ * sizes touching at a single vertex are DISCONNECTED to edge-based neighbour queries) and the
28
+ * recipe (run it after an initial merge/fuse, then fuse again; the mesh must be triangulated).
29
+ * `bt_mesh_vertex_merge_distance` documents why a hand-rolled snap is worse than the tool: below
30
+ * the float32 step a tolerance silently degenerates into an exact-bits match and leaves the surface
31
+ * cracked.
32
+ *
33
+ * Note that repair cannot invent connectivity that is not in its input. `bt_mesh_resolve_t_junctions`
34
+ * splits BOUNDARY edges — ones with exactly one face — so a soup of closed convex brushes has none
35
+ * and it reports zero splits, correctly. And welding cannot UNION overlapping coplanar patches: two
36
+ * floor brushes that overlap contribute two surfaces occupying the same space, they do not abut, and
37
+ * no vertex merge joins them. Closing that needs a boolean union or a voxel rasterisation, which is
38
+ * upstream of this class.
39
+ *
40
+ * **3. Check it, if you want to.** `bt_mesh_validate` and `bt_mesh_is_manifold` answer the question
41
+ * directly. Running one of them at build time is worth it, because {@link find_path} on a
42
+ * non-manifold surface can read a released vertex and **throw from inside Polyanya** rather than
43
+ * report no path — measured at 17 of 72 spawn pairs on one map's unrepaired brushes.
44
+ *
45
+ * **4. And consider whether you want a navmesh at all.** For brush-based level geometry a waypoint
46
+ * graph built by *tracing* — asking the collision system whether a player-sized box gets from here
47
+ * to there — routed 100% of spawn pairs where the repaired navmesh routed 48%, because a trace does
48
+ * not care whether the world is one surface or a hundred overlapping ones. That is available to
49
+ * anyone whose engine has a shape cast, which is everyone reading this.
50
+ *
51
+ * All of the above is measured; it is the substance of GAP-016, reported from a port that got it
52
+ * wrong twice before getting it right.
53
+ */
1
54
  export class NavigationMesh {
2
55
  topology: BinaryTopology;
3
56
  /**
@@ -6,16 +59,36 @@ export class NavigationMesh {
6
59
  */
7
60
  bvh: BVH;
8
61
  /**
9
- * Build from given scene geometry
10
- * @param {BinaryTopology} source
11
- * @param {number} [agent_radius]
12
- * @param {number} [agent_height]
13
- * @param {number} [agent_max_step_height] agent can bridge vertical gaps in topology, such as stepping up a stair
14
- * @param {number} [agent_max_step_distance] agent can bridge lateral gaps in topology, such as stepping over a hole in the floor
15
- * @param {number} [agent_max_climb_angle] In radians, how steep of an angle can the agent go up by
16
- * @param {Vector3} [up] Defines world's "UP" direction, this is what the agent will respect for climbing constraint
62
+ * Build from given scene geometry.
63
+ *
64
+ * The source is expected to be a manifold walkable SURFACE, not a soup of
65
+ * solids: a build over interpenetrating closed volumes produces few or no
66
+ * connected faces, and an input that is not manifold can make
67
+ * {@link find_path} read a released vertex and throw from inside Polyanya.
68
+ * `core/geom/3d/topology` carries both the repair tools
69
+ * (`bt_merge_vertices_by_distance`, `bt_mesh_fuse_duplicate_edges`,
70
+ * `bt_mesh_resolve_t_junctions`) and the checks (`bt_mesh_validate`,
71
+ * `bt_mesh_is_manifold`). Neither is run here — a full manifold check costs
72
+ * more than most builds, and whether to pay it is the caller's call.
73
+ *
74
+ * @param {Object} options
75
+ * @param {BinaryTopology} options.source
76
+ * @param {number} [options.agent_radius]
77
+ * @param {number} [options.agent_height]
78
+ * @param {number} [options.agent_max_step_height] agent can bridge vertical gaps in topology, such as stepping up a stair
79
+ * @param {number} [options.agent_max_step_distance] agent can bridge lateral gaps in topology, such as stepping over a hole in the floor
80
+ * @param {number} [options.agent_max_climb_angle] In radians, how steep of an angle can the agent go up by
81
+ * @param {Vector3} [options.up] Defines world's "UP" direction, this is what the agent will respect for climbing constraint
17
82
  */
18
- build({ source, agent_radius, agent_height, agent_max_step_height, agent_max_step_distance, agent_max_climb_angle, up, }: BinaryTopology): void;
83
+ build({ source, agent_radius, agent_height, agent_max_step_height, agent_max_step_distance, agent_max_climb_angle, up, }: {
84
+ source: BinaryTopology;
85
+ agent_radius?: number;
86
+ agent_height?: number;
87
+ agent_max_step_height?: number;
88
+ agent_max_step_distance?: number;
89
+ agent_max_climb_angle?: number;
90
+ up?: Vector3;
91
+ }): void;
19
92
  /**
20
93
  * Compute a walkable path between the two points.
21
94
  * The result is a sequence of 3d points written into `output`. The first and last points are the
@@ -28,6 +101,13 @@ export class NavigationMesh {
28
101
  * through folds. It is intrinsic to the surface — no global "up" is assumed — so it is correct on
29
102
  * sloped and folded navmeshes as well as flat ones.
30
103
  *
104
+ * **PRECONDITION: the surface is manifold.** This is not checked — the check costs more than
105
+ * most queries and charging every valid call for it is the wrong trade — but a non-manifold
106
+ * surface can make this read a released vertex and THROW from four frames inside Polyanya
107
+ * rather than return 0. If you are not certain of your input, run `bt_mesh_validate` /
108
+ * `bt_mesh_is_manifold` once at build time rather than defensively here. See the class
109
+ * docblock for the repair order.
110
+ *
31
111
  * @param {Float32Array} output packed XYZ triples
32
112
  * @param {number} start_x
33
113
  * @param {number} start_y
@@ -41,4 +121,5 @@ export class NavigationMesh {
41
121
  }
42
122
  import { BinaryTopology } from "../../../core/geom/3d/topology/struct/binary/BinaryTopology.js";
43
123
  import { BVH } from "../../../core/bvh2/bvh3/BVH.js";
124
+ import Vector3 from "../../../core/geom/Vector3.js";
44
125
  //# sourceMappingURL=NavigationMesh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationMesh.d.ts","sourceRoot":"","sources":["../../../../../src/engine/navigation/mesh/NavigationMesh.js"],"names":[],"mappings":"AAyCA;IAEI,yBAAgC;IAEhC;;;OAGG;IACH,KAFU,GAAG,CAEG;IAEhB;;;;;;;;;OASG;IACH,0HARW,cAAc,QA8BxB;IAGD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBATW,YAAY,WACZ,MAAM,WACN,MAAM,WACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,GACJ,MAAM,CAqClB;CAEJ;+BA/I4C,gEAAgE;oBADzF,gCAAgC"}
1
+ {"version":3,"file":"NavigationMesh.d.ts","sourceRoot":"","sources":["../../../../../src/engine/navigation/mesh/NavigationMesh.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH;IAEI,yBAAgC;IAEhC;;;OAGG;IACH,KAFU,GAAG,CAEG;IAEhB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QARmC,MAAM,EAA9B,cAAc;QACG,YAAY,GAA7B,MAAM;QACW,YAAY,GAA7B,MAAM;QACW,qBAAqB,GAAtC,MAAM;QACW,uBAAuB,GAAxC,MAAM;QACW,qBAAqB,GAAtC,MAAM;QACY,EAAE,GAApB,OAAO;aAwBjB;IAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,kBATW,YAAY,WACZ,MAAM,WACN,MAAM,WACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,GACJ,MAAM,CAqClB;CAEJ;+BAvN4C,gEAAgE;oBADzF,gCAAgC;oBAEhC,+BAA+B"}
@@ -39,6 +39,59 @@ function nudge_into_face(mesh, face, point) {
39
39
  point[2] += (cz - point[2]) * FACE_INTERIOR_PULL;
40
40
  }
41
41
 
42
+ /**
43
+ * A navigable surface, plus queries over it.
44
+ *
45
+ * ## What the builder expects, and how to check that you gave it that
46
+ *
47
+ * {@link build} wants a **manifold walkable surface**. Two things follow from that, and neither is
48
+ * enforced here, because a full manifold check costs more than most builds and whether to pay it is
49
+ * the caller's call — not something every valid input should be charged for. What follows is how to
50
+ * pay it when you want to.
51
+ *
52
+ * **1. A surface, not a pile of solids.** Level geometry from a brush-based editor is a set of
53
+ * interpenetrating closed VOLUMES: a floor brush is not a floor, it is a sealed box whose top
54
+ * happens to be one, with the wall brush beside it buried in its side. Feeding those in directly
55
+ * produces a navmesh that routes almost nothing — measured at 5% of spawn pairs on one map, and 32%
56
+ * on another. Extracting the walkable surface first is two filters and about forty lines: keep
57
+ * triangles whose normal passes your walk threshold (0.7 is the usual constant, and is what
58
+ * `agent_max_climb_angle` defaults near), and drop those whose space above is solid. That moved the
59
+ * same map from 5% to 48%.
60
+ *
61
+ * Render geometry is not a substitute. On the same measurement it produced an EMPTY navmesh, from
62
+ * an input that repair had made near-perfect — 8 islands over 3,301 faces with 99% in the largest.
63
+ * An empty build is a legitimate answer to bad input and is reported as zero faces.
64
+ *
65
+ * **2. Manifold, and welded.** `core/geom/3d/topology` is the repair toolkit and the order matters:
66
+ * `bt_merge_vertices_by_distance`, then `bt_mesh_fuse_duplicate_edges`, then
67
+ * `bt_mesh_resolve_t_junctions` — whose own docblock states both the problem (faces of differing
68
+ * sizes touching at a single vertex are DISCONNECTED to edge-based neighbour queries) and the
69
+ * recipe (run it after an initial merge/fuse, then fuse again; the mesh must be triangulated).
70
+ * `bt_mesh_vertex_merge_distance` documents why a hand-rolled snap is worse than the tool: below
71
+ * the float32 step a tolerance silently degenerates into an exact-bits match and leaves the surface
72
+ * cracked.
73
+ *
74
+ * Note that repair cannot invent connectivity that is not in its input. `bt_mesh_resolve_t_junctions`
75
+ * splits BOUNDARY edges — ones with exactly one face — so a soup of closed convex brushes has none
76
+ * and it reports zero splits, correctly. And welding cannot UNION overlapping coplanar patches: two
77
+ * floor brushes that overlap contribute two surfaces occupying the same space, they do not abut, and
78
+ * no vertex merge joins them. Closing that needs a boolean union or a voxel rasterisation, which is
79
+ * upstream of this class.
80
+ *
81
+ * **3. Check it, if you want to.** `bt_mesh_validate` and `bt_mesh_is_manifold` answer the question
82
+ * directly. Running one of them at build time is worth it, because {@link find_path} on a
83
+ * non-manifold surface can read a released vertex and **throw from inside Polyanya** rather than
84
+ * report no path — measured at 17 of 72 spawn pairs on one map's unrepaired brushes.
85
+ *
86
+ * **4. And consider whether you want a navmesh at all.** For brush-based level geometry a waypoint
87
+ * graph built by *tracing* — asking the collision system whether a player-sized box gets from here
88
+ * to there — routed 100% of spawn pairs where the repaired navmesh routed 48%, because a trace does
89
+ * not care whether the world is one surface or a hundred overlapping ones. That is available to
90
+ * anyone whose engine has a shape cast, which is everyone reading this.
91
+ *
92
+ * All of the above is measured; it is the substance of GAP-016, reported from a port that got it
93
+ * wrong twice before getting it right.
94
+ */
42
95
  export class NavigationMesh {
43
96
 
44
97
  topology = new BinaryTopology();
@@ -50,14 +103,26 @@ export class NavigationMesh {
50
103
  bvh = new BVH();
51
104
 
52
105
  /**
53
- * Build from given scene geometry
54
- * @param {BinaryTopology} source
55
- * @param {number} [agent_radius]
56
- * @param {number} [agent_height]
57
- * @param {number} [agent_max_step_height] agent can bridge vertical gaps in topology, such as stepping up a stair
58
- * @param {number} [agent_max_step_distance] agent can bridge lateral gaps in topology, such as stepping over a hole in the floor
59
- * @param {number} [agent_max_climb_angle] In radians, how steep of an angle can the agent go up by
60
- * @param {Vector3} [up] Defines world's "UP" direction, this is what the agent will respect for climbing constraint
106
+ * Build from given scene geometry.
107
+ *
108
+ * The source is expected to be a manifold walkable SURFACE, not a soup of
109
+ * solids: a build over interpenetrating closed volumes produces few or no
110
+ * connected faces, and an input that is not manifold can make
111
+ * {@link find_path} read a released vertex and throw from inside Polyanya.
112
+ * `core/geom/3d/topology` carries both the repair tools
113
+ * (`bt_merge_vertices_by_distance`, `bt_mesh_fuse_duplicate_edges`,
114
+ * `bt_mesh_resolve_t_junctions`) and the checks (`bt_mesh_validate`,
115
+ * `bt_mesh_is_manifold`). Neither is run here — a full manifold check costs
116
+ * more than most builds, and whether to pay it is the caller's call.
117
+ *
118
+ * @param {Object} options
119
+ * @param {BinaryTopology} options.source
120
+ * @param {number} [options.agent_radius]
121
+ * @param {number} [options.agent_height]
122
+ * @param {number} [options.agent_max_step_height] agent can bridge vertical gaps in topology, such as stepping up a stair
123
+ * @param {number} [options.agent_max_step_distance] agent can bridge lateral gaps in topology, such as stepping over a hole in the floor
124
+ * @param {number} [options.agent_max_climb_angle] In radians, how steep of an angle can the agent go up by
125
+ * @param {Vector3} [options.up] Defines world's "UP" direction, this is what the agent will respect for climbing constraint
61
126
  */
62
127
  build({
63
128
  source,
@@ -96,6 +161,13 @@ export class NavigationMesh {
96
161
  * through folds. It is intrinsic to the surface — no global "up" is assumed — so it is correct on
97
162
  * sloped and folded navmeshes as well as flat ones.
98
163
  *
164
+ * **PRECONDITION: the surface is manifold.** This is not checked — the check costs more than
165
+ * most queries and charging every valid call for it is the wrong trade — but a non-manifold
166
+ * surface can make this read a released vertex and THROW from four frames inside Polyanya
167
+ * rather than return 0. If you are not certain of your input, run `bt_mesh_validate` /
168
+ * `bt_mesh_is_manifold` once at build time rather than defensively here. See the class
169
+ * docblock for the repair order.
170
+ *
99
171
  * @param {Float32Array} output packed XYZ triples
100
172
  * @param {number} start_x
101
173
  * @param {number} start_y
@@ -419,10 +419,70 @@ export class NetworkSession {
419
419
  * @returns {TimeDilation}
420
420
  */
421
421
  get time_dilation(): TimeDilation;
422
+ /**
423
+ * How many entities this session treats as somebody else's — the set that is blended at render
424
+ * time and normalized before simulation.
425
+ *
426
+ * Exposed because its being empty is the observable symptom of a client that thinks it owns the
427
+ * host's world, and there was no way to see it from outside. Zero here on a connected client
428
+ * that has received a snapshot means nothing will be interpolated and the client is about to
429
+ * send the host its own state back.
430
+ *
431
+ * @returns {number}
432
+ */
433
+ get remote_entity_count(): number;
434
+ /**
435
+ * Per-peer delivery accounting, for a game that wants to know whether the wire is actually
436
+ * delivering what it was handed.
437
+ *
438
+ * `skipped_unapplied` should be zero. It counts frames that reached this peer and were dropped
439
+ * below the applied watermark without ever running — which happens when slices reorder on a
440
+ * sender pinned to the ring floor, and which the sender cannot see, because the channel-level
441
+ * ack for the packet returns either way and credits those frames as delivered.
442
+ *
443
+ * Until this existed the shortfall was invisible from both ends: it was found by a consumer
444
+ * counting events dispatched on the host against events applied on the client, and a missing
445
+ * explosion looks like a rendering bug. Set `max_packets_per_tick: 1` and this climbs under
446
+ * jitter; on the default it should stay at zero.
447
+ *
448
+ * `skipped_duplicate` is the healthy counterpart and is expected to be large — it is the action
449
+ * stream's own redundancy arriving and being correctly ignored.
450
+ *
451
+ * @param {number} peer_id
452
+ * @returns {{skipped_unapplied: number, skipped_duplicate: number}}
453
+ */
454
+ delivery_stats(peer_id: number): {
455
+ skipped_unapplied: number;
456
+ skipped_duplicate: number;
457
+ };
422
458
  /**
423
459
  * Most recent locally-completed sim frame.
424
460
  */
425
461
  get current_frame(): number;
462
+ /**
463
+ * Move this session's frame counter to `frame`.
464
+ *
465
+ * **Joining a match in progress needs this and there was no way to do it.** The host is at
466
+ * frame 6,000; a client has to start tagging its inputs near 6,000 or the host discards every
467
+ * one of them — `ServerAuthoritativeServer.tick` trims pending actions older than
468
+ * `sim_frame - frame_capacity + 1`, and a client tagging frame 0 against a host at 6,000 has
469
+ * every input dropped **silently**. It moves on its own screen, never moves on the host's, and
470
+ * no signal fires: `onPendingActionDropped` covers the future-lead and capacity bounds, not
471
+ * this one.
472
+ *
473
+ * Everything needed was already there except the setter. INITIAL_SYNC carries the host's frame,
474
+ * `NetworkPeer` writes it, and `onInitialSync` dispatches it — and the handler named it
475
+ * `_frame_number` and dropped it on the floor. `#local_frame` being `#`-private meant an
476
+ * application could not set it either, so the only lever left was ticking the session forward
477
+ * with the input sampler silenced until its counter caught up: 28,801 calls and 62 ms of wall
478
+ * clock for an hour-old host. Reported as GAP-042.
479
+ *
480
+ * A client now seeks automatically on INITIAL_SYNC. This is the manual door, for a caller that
481
+ * computes its own lead.
482
+ *
483
+ * @param {number} frame
484
+ */
485
+ seek_to_frame(frame: number): void;
426
486
  #private;
427
487
  }
428
488
  import { UUID } from "../ecs/guid/UUID.js";
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkSession.d.ts","sourceRoot":"","sources":["../../../../src/engine/network/NetworkSession.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetworkSession.d.ts","sourceRoot":"","sources":["../../../../src/engine/network/NetworkSession.js"],"names":[],"mappings":"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"}
@@ -792,10 +792,26 @@ export class NetworkSession {
792
792
  // action-stream processing, and finalize any in-flight Tier-3
793
793
  // resync state.
794
794
  if (this.role === NetworkSessionRole.Client) {
795
- this.#peer.onInitialSync.add((_peer_id, session_token, _frame_number, buf, payload_end) => {
795
+ this.#peer.onInitialSync.add((_peer_id, session_token, frame_number, buf, payload_end) => {
796
796
  const token = new UUID();
797
797
  token.data = session_token;
798
798
  this.session_token = token;
799
+
800
+ /*
801
+ Align to the host's clock. This argument has always been on the wire and in this
802
+ signature -- it was named `_frame_number` and dropped -- and without it a client
803
+ joining a match in progress tags its inputs from 0 against a host at frame 6,000,
804
+ which trims every one of them silently. GAP-042.
805
+
806
+ The lead is the buffer depth the time dilation is already steering toward: an
807
+ input authored now arrives in the host's future, and this is how far ahead it has
808
+ to be tagged to land in the window rather than behind it. It only has to be in the
809
+ right neighbourhood -- `TimeDilation` converges on the real depth from the host's
810
+ feedback within a second or two -- but starting six thousand frames out is not a
811
+ neighbourhood, which is what made this total rather than approximate.
812
+ */
813
+ this.seek_to_frame(frame_number + 1 + this.#time_dilation.target_buffer_depth);
814
+
799
815
  this.#apply_initial_sync(buf, payload_end);
800
816
  // Reconnecting counts as well as Resyncing: a host that has
801
817
  // finished with our old session readmits us as a fresh peer,
@@ -1236,6 +1252,45 @@ export class NetworkSession {
1236
1252
  return this.#time_dilation;
1237
1253
  }
1238
1254
 
1255
+ /**
1256
+ * How many entities this session treats as somebody else's — the set that is blended at render
1257
+ * time and normalized before simulation.
1258
+ *
1259
+ * Exposed because its being empty is the observable symptom of a client that thinks it owns the
1260
+ * host's world, and there was no way to see it from outside. Zero here on a connected client
1261
+ * that has received a snapshot means nothing will be interpolated and the client is about to
1262
+ * send the host its own state back.
1263
+ *
1264
+ * @returns {number}
1265
+ */
1266
+ get remote_entity_count() {
1267
+ return this.#remote_entities.size;
1268
+ }
1269
+
1270
+ /**
1271
+ * Per-peer delivery accounting, for a game that wants to know whether the wire is actually
1272
+ * delivering what it was handed.
1273
+ *
1274
+ * `skipped_unapplied` should be zero. It counts frames that reached this peer and were dropped
1275
+ * below the applied watermark without ever running — which happens when slices reorder on a
1276
+ * sender pinned to the ring floor, and which the sender cannot see, because the channel-level
1277
+ * ack for the packet returns either way and credits those frames as delivered.
1278
+ *
1279
+ * Until this existed the shortfall was invisible from both ends: it was found by a consumer
1280
+ * counting events dispatched on the host against events applied on the client, and a missing
1281
+ * explosion looks like a rendering bug. Set `max_packets_per_tick: 1` and this climbs under
1282
+ * jitter; on the default it should stay at zero.
1283
+ *
1284
+ * `skipped_duplicate` is the healthy counterpart and is expected to be large — it is the action
1285
+ * stream's own redundancy arriving and being correctly ignored.
1286
+ *
1287
+ * @param {number} peer_id
1288
+ * @returns {{skipped_unapplied: number, skipped_duplicate: number}}
1289
+ */
1290
+ delivery_stats(peer_id) {
1291
+ return this.#peer.replicator.delivery_stats(peer_id);
1292
+ }
1293
+
1239
1294
  /**
1240
1295
  * Most recent locally-completed sim frame.
1241
1296
  */
@@ -1244,6 +1299,36 @@ export class NetworkSession {
1244
1299
  return this.#local_frame - 1;
1245
1300
  }
1246
1301
 
1302
+ /**
1303
+ * Move this session's frame counter to `frame`.
1304
+ *
1305
+ * **Joining a match in progress needs this and there was no way to do it.** The host is at
1306
+ * frame 6,000; a client has to start tagging its inputs near 6,000 or the host discards every
1307
+ * one of them — `ServerAuthoritativeServer.tick` trims pending actions older than
1308
+ * `sim_frame - frame_capacity + 1`, and a client tagging frame 0 against a host at 6,000 has
1309
+ * every input dropped **silently**. It moves on its own screen, never moves on the host's, and
1310
+ * no signal fires: `onPendingActionDropped` covers the future-lead and capacity bounds, not
1311
+ * this one.
1312
+ *
1313
+ * Everything needed was already there except the setter. INITIAL_SYNC carries the host's frame,
1314
+ * `NetworkPeer` writes it, and `onInitialSync` dispatches it — and the handler named it
1315
+ * `_frame_number` and dropped it on the floor. `#local_frame` being `#`-private meant an
1316
+ * application could not set it either, so the only lever left was ticking the session forward
1317
+ * with the input sampler silenced until its counter caught up: 28,801 calls and 62 ms of wall
1318
+ * clock for an hour-old host. Reported as GAP-042.
1319
+ *
1320
+ * A client now seeks automatically on INITIAL_SYNC. This is the manual door, for a caller that
1321
+ * computes its own lead.
1322
+ *
1323
+ * @param {number} frame
1324
+ */
1325
+ seek_to_frame(frame) {
1326
+ assert.isNonNegativeInteger(frame, 'frame');
1327
+
1328
+ this.#local_frame = frame;
1329
+ this.#local_frame_accum = 0;
1330
+ }
1331
+
1247
1332
  // ----------------------------------------------------------------
1248
1333
  // Internal: identity observer (component-driven spawn/despawn)
1249
1334
  // ----------------------------------------------------------------
@@ -1555,6 +1640,33 @@ export class NetworkSession {
1555
1640
  this.world.addComponentToEntity(local_entity_id, component);
1556
1641
  } else {
1557
1642
  adapter.deserialize(buffer, existing);
1643
+
1644
+ /*
1645
+ Re-decide what this entity is to us.
1646
+
1647
+ Ownership DOES arrive — `NetworkIdentity` is auto-replicated as type_id 0 and
1648
+ the snapshot carries `owner_peer_id` in its payload. What did not happen is the
1649
+ consequence: `#on_identity_attached` computes remote-set membership once, when
1650
+ the component is ATTACHED, and this branch runs for an entity that already had
1651
+ one. So the field was corrected and the decision it feeds was not.
1652
+
1653
+ That branch is not an edge case, it is the normal one for any client that
1654
+ pre-builds its entities — which every client must, because nothing is
1655
+ replicated into existence (GAP-038). The client fills a pool before connecting,
1656
+ `#on_identity_attached` fills each negative owner with the LOCAL peer's id, the
1657
+ snapshot then corrects every one of them, and `#remote_entities` stays empty.
1658
+
1659
+ Two silent failures follow, and neither names ownership. Nothing is
1660
+ interpolated. And the client's outbound stream carries the host's own state
1661
+ back to it a few frames stale — the replicator logs every action it APPLIES,
1662
+ correctly, and `flush_outbound` packs that same log for every peer — so the
1663
+ host applies its own state to itself. Observed by the reporting port as the
1664
+ host's player teleporting 64 units downward and falling out of the level, which
1665
+ reads as a physics bug for as long as you let it. GAP-040.
1666
+ */
1667
+ if (ComponentClass === NetworkIdentity) {
1668
+ this.#apply_ownership(local_entity_id, existing.owner_peer_id);
1669
+ }
1558
1670
  }
1559
1671
  }
1560
1672
 
@@ -1564,6 +1676,34 @@ export class NetworkSession {
1564
1676
  }
1565
1677
  }
1566
1678
 
1679
+ /**
1680
+ * Set an entity's owner and bring the remote-entity set into line with it.
1681
+ *
1682
+ * Ownership decides two separate things — whether the entity is blended at render time
1683
+ * (`#remote_entities`) and whether it is sent to a given peer (`OwnerAwareScope`) — and only the
1684
+ * second one re-reads the field. This keeps the first honest when ownership arrives, or changes,
1685
+ * after the component was attached.
1686
+ *
1687
+ * @param {number} entity_id
1688
+ * @param {number} owner_peer_id
1689
+ * @private
1690
+ */
1691
+ #apply_ownership(entity_id, owner_peer_id) {
1692
+ const identity = this.world.getComponent(entity_id, NetworkIdentity);
1693
+
1694
+ if (identity === undefined || identity === null) {
1695
+ return;
1696
+ }
1697
+
1698
+ identity.owner_peer_id = owner_peer_id;
1699
+
1700
+ if (owner_peer_id === this.local_peer_id) {
1701
+ this.#remote_entities.delete(entity_id);
1702
+ } else {
1703
+ this.#remote_entities.add(entity_id);
1704
+ }
1705
+ }
1706
+
1567
1707
  /**
1568
1708
  *
1569
1709
  * @param {number} peer_id
@@ -59,10 +59,20 @@ export const ResumeRejectReason: Readonly<{
59
59
  * range is confirmed only when `unacked` reaches zero without `abandoned`
60
60
  * having been set by a loss along the way.
61
61
  *
62
- * @typedef {{frame_end: number, unacked: number, abandoned: boolean}} PendingAck
63
- * @property {number} frame_end last frame in the packed range `[start, frame_end]`
64
- * @property {number} unacked seqs of this send not yet acked or declared lost
65
- * @property {boolean} abandoned at least one seq was declared lost, so the
62
+ * A tick may make several sends to one peer, each carrying the next slice of
63
+ * the owed range (see {@link NetworkPeer#flush_outbound}). They confirm
64
+ * independently, and the baseline advances only through slices confirmed in
65
+ * order a later slice landing says nothing about an earlier one still in
66
+ * flight. `head` marks the first slice of a tick, whose start is the pack
67
+ * start itself; see {@link NetworkPeer#__credit_confirmed}.
68
+ *
69
+ * @typedef {{frame_start: number, frame_end: number, head: boolean, unacked: number, abandoned: boolean}} PendingAck
70
+ * @property {number} frame_start first frame in the packed range
71
+ * @property {number} frame_end last frame in the packed range
72
+ * @property {boolean} head this send began at the pack start, so nothing
73
+ * sendable lies before it and its confirmation credits outright
74
+ * @property {number} unacked seqs of this send not yet acked or declared lost
75
+ * @property {boolean} abandoned at least one seq was declared lost, so the
66
76
  * message is forfeit and must never advance the baseline
67
77
  */
68
78
  /**
@@ -102,9 +112,10 @@ export class NetworkPeer {
102
112
  * initial_buffer_size?: number,
103
113
  * mutation_ledger?: MutationLedger|null,
104
114
  * changed_set_capacity?: number,
115
+ * max_packets_per_tick?: number,
105
116
  * }} options
106
117
  */
107
- constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, changed_set_capacity, }: {
118
+ constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, changed_set_capacity, max_packets_per_tick, }: {
108
119
  world: EntityComponentDataset;
109
120
  binary_registry: BinarySerializationRegistry;
110
121
  replicated_components: Function[];
@@ -116,6 +127,7 @@ export class NetworkPeer {
116
127
  initial_buffer_size?: number;
117
128
  mutation_ledger?: MutationLedger | null;
118
129
  changed_set_capacity?: number;
130
+ max_packets_per_tick?: number;
119
131
  });
120
132
  /** @type {EntityComponentDataset} */
121
133
  world: EntityComponentDataset;
@@ -127,6 +139,32 @@ export class NetworkPeer {
127
139
  slot_table: ReplicationSlotTable;
128
140
  /** @type {ActionLog} */
129
141
  action_log: ActionLog;
142
+ /**
143
+ * Most action-stream packets {@link flush_outbound} may send one peer
144
+ * in a tick. Each carries the next slice of what the peer is owed and
145
+ * is confirmed on its own, so this caps how fast a peer that has
146
+ * fallen behind catches up: a slice is re-sent every tick until its ack
147
+ * returns, so a peer is confirmed at most this many packets of frames
148
+ * per round trip, against the one frame per tick the simulation
149
+ * produces. One packet a tick keeps up only while a round trip's frames
150
+ * fit one packet; past that the owed range grows until it meets the
151
+ * ring floor and frames are lost.
152
+ *
153
+ * It is also the bandwidth ceiling under catch-up — this many MTUs per
154
+ * tick per peer — and it has to stay inside the channel's ack window.
155
+ * A peer's ack header covers its latest 33 seqs, so with a peer that
156
+ * replies once a tick, `33 / max_packets_per_tick` consecutive lost
157
+ * replies leave a delivered packet outside the window and it is
158
+ * declared lost: a wasted re-send rather than a defect, since the
159
+ * receiver skips frames it has already applied. Eight tolerates three
160
+ * such losses in a row (one tick in sixteen at 50% loss, one in ten
161
+ * thousand at 10%), and lets a 60 Hz stream at 100 ms RTT carry a full
162
+ * packet of actions per frame. Lower it for peers that reply less often
163
+ * than every tick.
164
+ *
165
+ * @type {number}
166
+ */
167
+ max_packets_per_tick: number;
130
168
  /**
131
169
  * Optional per-tick mutation tracker. When a `MutationLedger` is supplied,
132
170
  * this peer records each tick's affected network IDs into a fresh
@@ -325,9 +363,10 @@ export class NetworkPeer {
325
363
  * by the caller. Records the tick's accumulated mutations into the
326
364
  * MutationLedger (if configured), then packs frames
327
365
  * `[last_acked+1, current_frame]` for each peer via
328
- * `Replicator.pack_for_peer`, bounded to one channel packet. Empty packs
329
- * (no in-scope actions) are not sent. Clears the per-tick changed-entity
330
- * set after recording.
366
+ * `Replicator.pack_for_peer` into up to {@link max_packets_per_tick}
367
+ * channel packets, each the next slice of that range. Empty packs (no
368
+ * in-scope actions) are not sent. Clears the per-tick changed-entity set
369
+ * after recording.
331
370
  *
332
371
  * @param {number} current_frame
333
372
  */
@@ -456,9 +495,18 @@ export class NetworkPeer {
456
495
  * the receiver reassembles a fragmented message all-or-nothing, so the frame
457
496
  * range is confirmed only when `unacked` reaches zero without `abandoned`
458
497
  * having been set by a loss along the way.
498
+ *
499
+ * A tick may make several sends to one peer, each carrying the next slice of
500
+ * the owed range (see {@link NetworkPeerflush_outbound }). They confirm
501
+ * independently, and the baseline advances only through slices confirmed in
502
+ * order — a later slice landing says nothing about an earlier one still in
503
+ * flight. `head` marks the first slice of a tick, whose start is the pack
504
+ * start itself; see {@link NetworkPeer__credit_confirmed }.
459
505
  */
460
506
  export type PendingAck = {
507
+ frame_start: number;
461
508
  frame_end: number;
509
+ head: boolean;
462
510
  unacked: number;
463
511
  abandoned: boolean;
464
512
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":"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"}