@woosh/meep-engine 3.14.5 → 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 (636) 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/replication/Replicator.d.ts +18 -0
  531. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  532. package/src/engine/network/replication/Replicator.js +98 -0
  533. package/src/engine/physics/ecs/PhysicsSystem.d.ts +27 -0
  534. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  535. package/src/engine/physics/ecs/PhysicsSystem.js +27 -0
  536. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  537. package/src/engine/sound/SoundEngine.d.ts +24 -0
  538. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  539. package/src/engine/sound/SoundEngine.js +29 -11
  540. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts +12 -4
  541. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts.map +1 -1
  542. package/src/engine/sound/simulation/configureAcousticSimulation.js +10 -4
  543. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts +3 -1
  544. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts.map +1 -1
  545. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +27 -1
  546. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +34 -0
  547. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
  548. package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +61 -2
  549. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
  550. package/src/engine/sound/simulation/render/reverbImpulseResponse.js +9 -0
  551. package/src/shade/playground/particle_system/README.md +14 -3
  552. package/src/shade/playground/particle_system/index.html +1 -0
  553. package/src/shade/playground/particle_system/main.js +15 -2
  554. package/src/shade/playground/particle_system/particle_scene.d.ts +11 -2
  555. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  556. package/src/shade/playground/particle_system/particle_scene.js +126 -9
  557. package/src/shade/renderer/GraphicsContext.d.ts +1 -0
  558. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  559. package/src/shade/renderer/GraphicsContext.js +4 -0
  560. package/src/shade/renderer/Renderer.d.ts +1 -1
  561. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +13 -0
  562. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  563. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +13 -0
  564. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts +18 -0
  565. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
  566. package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +18 -0
  567. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts +4 -0
  568. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts.map +1 -1
  569. package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.js +4 -0
  570. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +12 -0
  571. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
  572. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +13 -0
  573. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  574. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  575. package/src/shade/renderer/particles/DESIGN.md +66 -15
  576. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +29 -5
  577. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  578. package/src/shade/renderer/particles/GPUParticleSystem.js +61 -6
  579. package/src/shade/renderer/particles/ParticleConstants.d.ts +31 -0
  580. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  581. package/src/shade/renderer/particles/ParticleConstants.js +33 -0
  582. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +61 -0
  583. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -0
  584. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +179 -0
  585. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts +63 -0
  586. package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts.map +1 -0
  587. package/src/shade/renderer/particles/coherence/particle_program_buckets.js +116 -0
  588. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +59 -0
  589. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -0
  590. package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +344 -0
  591. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +27 -5
  592. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  593. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +27 -5
  594. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +13 -1
  595. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +1 -1
  596. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +15 -1
  597. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
  598. package/src/shade/renderer/particles/data/chunk_particle_emitter.js +3 -0
  599. package/src/shade/renderer/particles/graph_particles.d.ts +39 -11
  600. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  601. package/src/shade/renderer/particles/graph_particles.js +60 -20
  602. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +8 -1
  603. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  604. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +8 -1
  605. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +22 -2
  606. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  607. package/src/shade/renderer/particles/runtime/ProgramArena.js +54 -3
  608. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  609. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +32 -14
  610. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +2 -23
  611. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  612. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +40 -11
  613. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +6 -17
  614. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  615. package/src/shade/renderer/particles/sort/shader_particle_sort.js +60 -9
  616. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +1 -1
  617. package/src/view/DOM.d.ts +69 -0
  618. package/src/view/DOM.d.ts.map +1 -0
  619. package/src/view/DOM.js +2 -1
  620. package/src/view/common/LocalizedLabelView.d.ts +50 -0
  621. package/src/view/common/LocalizedLabelView.d.ts.map +1 -0
  622. package/src/view/controller/controls/GuiControl.d.ts +19 -0
  623. package/src/view/controller/controls/GuiControl.d.ts.map +1 -0
  624. package/src/view/elements/FrameRateView.d.ts +45 -0
  625. package/src/view/elements/FrameRateView.d.ts.map +1 -0
  626. package/src/view/elements/FrameRateView.js +131 -0
  627. package/src/view/elements/SliderView.d.ts +37 -0
  628. package/src/view/elements/SliderView.d.ts.map +1 -0
  629. package/src/view/elements/SliderView.js +71 -0
  630. package/src/view/elements/navigation/ViewStack.d.ts +1 -1
  631. package/src/view/elements/navigation/ViewStack.js +1 -1
  632. package/src/view/elements/notify/NotificationView.d.ts +22 -0
  633. package/src/view/elements/notify/NotificationView.d.ts.map +1 -0
  634. package/src/view/tooltip/TooltipView.d.ts +5 -1
  635. package/src/view/tooltip/TooltipView.d.ts.map +1 -1
  636. package/src/view/tooltip/TooltipView.js +4 -0
@@ -7,6 +7,8 @@ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourc
7
7
  import {
8
8
  PARTICLE_RECORD_HEADER_EMITTER,
9
9
  PARTICLE_RECORD_WORD_COUNT,
10
+ PARTICLE_SIMULATE_WORKGROUP_SIZE,
11
+ PARTICLE_SIM_PAD_SLOT,
10
12
  PARTICLE_VM_INSTRUCTION_WORDS,
11
13
  } from "../ParticleConstants.js";
12
14
  import { PARTICLE_COUNTER } from "../data/PARTICLE_COUNTERS.js";
@@ -15,18 +17,37 @@ import { chunk_particle_context, chunk_particle_curve_disabled } from "./chunk_p
15
17
  /**
16
18
  * The particle simulate pass — Destiny-style single execution shader.
17
19
  *
18
- * One dispatch processes the entire alive list across every emitter. Per particle: read its owning
20
+ * One dispatch processes every live particle across every emitter. Per particle: read its owning
19
21
  * emitter, set up the VM context + RNG, run that emitter's compiled UPDATE program over the record,
20
22
  * then compact — killed particles are pushed back to the dead (free) list, survivors are appended to
21
23
  * the new alive list. There is exactly one pipeline regardless of how many distinct effects exist,
22
24
  * because behaviour is data (the bytecode program), not code.
23
25
  *
24
- * The input length is read from `counters[ALIVE_IN]` — the previous frame's final alive count,
25
- * snapshotted on the GPU by the build-indirect pass — NOT from a CPU uniform. A CPU-provided count
26
- * is inevitably stale (readback latency) and corrupts the pool: under-counting orphans the tail of
27
- * the alive list (slots leak into limbo), over-counting re-simulates stale entries and double-frees
28
- * their slots. Dispatch this shader with `dispatchWorkgroupsIndirect` using the args the
29
- * build-indirect pass wrote last frame, so thread count and bound agree by construction.
26
+ * ## The input list
27
+ *
28
+ * `sim_list` is NOT the raw alive list. It is the program-coherent indirection list the coherence
29
+ * pass (`../coherence/`) built at the end of last frame: the same pool slots, reordered so that
30
+ * particles running one VM program sit together, each run padded out to a whole workgroup. That is
31
+ * what keeps a wave from spanning two programs, which would make the interpreter's opcode `switch`
32
+ * diverge and multiply the register file's `v_movrels` waterfall by the number of distinct register
33
+ * indices in the wave.
34
+ *
35
+ * Padding entries carry {@link PARTICLE_SIM_PAD_SLOT} and are dropped BEFORE the compaction
36
+ * atomics, so a padding lane never appends to the alive list and never pushes a slot onto the free
37
+ * list — pushing the sentinel would put `0xffffffff` on the free list for a later emit to hand out
38
+ * as a record base. Returning early is safe for the lanes that remain: padding only ever appears in
39
+ * the tail of a bucket, and every real lane in that wave belongs to that one bucket, so the `switch`
40
+ * the survivors execute is uniform regardless.
41
+ *
42
+ * ## Sizing
43
+ *
44
+ * The input length is read from `counters[ALIVE_IN]` — the padded length of that list, snapshotted
45
+ * on the GPU by the build-indirect pass — NOT from a CPU uniform. A CPU-provided count is inevitably
46
+ * stale (readback latency) and corrupts the pool: under-counting orphans the tail of the list (slots
47
+ * leak into limbo), over-counting re-simulates stale entries and double-frees their slots. Dispatch
48
+ * this shader with `dispatchWorkgroupsIndirect` using the args the build-indirect pass wrote last
49
+ * frame from that same value, so thread count and bound agree by construction — and, because the
50
+ * padded length is a whole number of workgroups, agree exactly.
30
51
  *
31
52
  * All structured reads go through `array<u32>` for emulator-testability. Curve sampling uses the
32
53
  * pluggable `particle_vm_sample_curve` — here the no-op provider; the feature swaps in the
@@ -35,7 +56,7 @@ import { chunk_particle_context, chunk_particle_curve_disabled } from "./chunk_p
35
56
  * @type {ComputeShader}
36
57
  */
37
58
 
38
- export const PARTICLE_SIMULATE_WORKGROUP_SIZE = 64;
59
+ export { PARTICLE_SIMULATE_WORKGROUP_SIZE };
39
60
 
40
61
  /**
41
62
  * Per-dispatch, 12 bytes, read-only — see shader_particle_emit for why the three travel
@@ -58,7 +79,7 @@ resources.createGroup()
58
79
  .addStorageBuffer("program", WebGPUArray.u32, false)
59
80
  .addStorageBuffer("vm_constants", WebGPUArray.u32, false)
60
81
  .addStorageBuffer("pool", WebGPUArray.u32, true)
61
- .addStorageBuffer("alive_in", WebGPUArray.u32, false)
82
+ .addStorageBuffer("sim_list", WebGPUArray.u32, false)
62
83
  .addStorageBuffer("alive_out", WebGPUArray.u32, true)
63
84
  .addStorageBuffer("dead", WebGPUArray.u32, true)
64
85
  .addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true);
@@ -71,14 +92,22 @@ const PARTICLE_INSTRUCTION_WORDS : u32 = ${PARTICLE_VM_INSTRUCTION_WORDS}u;
71
92
  const COUNTER_ALIVE : u32 = ${PARTICLE_COUNTER.ALIVE}u;
72
93
  const COUNTER_DEAD : u32 = ${PARTICLE_COUNTER.DEAD}u;
73
94
  const COUNTER_ALIVE_IN : u32 = ${PARTICLE_COUNTER.ALIVE_IN}u;
95
+ const PARTICLE_SIM_PAD_SLOT : u32 = ${PARTICLE_SIM_PAD_SLOT}u;
74
96
 
75
97
  @compute @workgroup_size(${PARTICLE_SIMULATE_WORKGROUP_SIZE}, 1, 1)
76
98
  fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
77
99
  let i = gid.x;
78
- // The exact alive-list length, snapshotted on-GPU last frame — never a stale CPU value.
100
+ // The exact input length, snapshotted on-GPU last frame — never a stale CPU value.
79
101
  if (i >= atomicLoad(&counters[COUNTER_ALIVE_IN])) { return; }
80
102
 
81
- let slot = alive_in[i];
103
+ let slot = sim_list[i];
104
+
105
+ // A lane the coherence pass padded the bucket out with. Leave BEFORE the compaction atomics
106
+ // below: appending here would put the sentinel on the alive or the free list, and the free list
107
+ // would then hand 0xffffffff to an emit as a record base. The lanes that stay all belong to the
108
+ // one bucket this wave covers, so their program — and the interpreter's switch — is uniform.
109
+ if (slot == PARTICLE_SIM_PAD_SLOT) { return; }
110
+
82
111
  let record_base = slot * PARTICLE_RECORD_WORDS;
83
112
  let emitter_index = pool[record_base + PARTICLE_HEADER_EMITTER];
84
113
 
@@ -1,23 +1,12 @@
1
+ export const PARTICLE_SORT_WORKGROUP_SIZE: 64;
1
2
  /**
2
- * Depth-sort shaders. Three passes bracket a `csdldf` prefix scan:
3
- *
4
- * 0. {@link shader_particle_sort_reset} every frame, write the histogram's `{count}` field
5
- * (= bucket count, which the csdldf scan reads to size itself) and zero the histogram bins and
6
- * the scatter cursor. Without this the scan consumes garbage counts and the scatter compounds
7
- * last frame's ranks — the buffers are only zeroed by WebGPU on CREATION, not per frame.
8
- * 1. {@link shader_particle_sort_histogram} — per alive particle, project its render position into
9
- * view space, quantise the depth into a back-to-front bucket (far first), store the bucket in
10
- * `keys`, and atomically bump the per-bucket `histogram`.
11
- * 2. graph_prefix_scan_csdldf turns the histogram into inclusive prefix sums.
12
- * 3. {@link shader_particle_sort_scatter} — per particle, read its bucket, take the exclusive
13
- * offset from the scanned histogram and an atomic per-bucket rank, and write the particle's slot
14
- * into `sorted` at that position.
3
+ * Dispatch this over `PREFIX_SCAN_CSDLDF_HEADER_WORDS + round_up_4(bucket_count)` threads, not over
4
+ * `bucket_count`: its widest loop is the scan header plus the bins rounded up to the whole vec4 the
5
+ * last bin lands in. Under-dispatching leaves the tail of that vec4 holding last frame's counts,
6
+ * and the scan adds them in.
15
7
  *
16
- * The `csdldf` scan uses subgroup ops and isn't runnable under the emulator; the reset, histogram
17
- * and scatter passes are, and the CPU reference {@link ./particle_counting_sort.js} pins the
18
- * algorithm.
8
+ * @type {ComputeShader}
19
9
  */
20
- export const PARTICLE_SORT_WORKGROUP_SIZE: 64;
21
10
  export const shader_particle_sort_reset: ComputeShader;
22
11
  export const shader_particle_sort_histogram: ComputeShader;
23
12
  export const shader_particle_sort_scatter: ComputeShader;
@@ -1 +1 @@
1
- {"version":3,"file":"shader_particle_sort.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/sort/shader_particle_sort.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,8CAA+C;AAkC/C,uDAIG;AAyEH,2DAIG;AAqCH,yDAIG;8BAvL2B,+BAA+B"}
1
+ {"version":3,"file":"shader_particle_sort.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/sort/shader_particle_sort.js"],"names":[],"mappings":"AAsDA,8CAA+C;AAgD/C;;;;;;;GAOG;AACH,yCAFU,aAAa,CAMpB;AA0EH,2DAIG;AAyCH,yDAIG;8BA1O2B,+BAA+B"}
@@ -4,6 +4,7 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
4
4
  import { ComputeShader } from "../../shader/ComputeShader.js";
5
5
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
6
6
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { PREFIX_SCAN_CSDLDF_HEADER_WORDS } from "../../gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
7
8
  import { PARTICLE_RECORD_HEADER_EMITTER, PARTICLE_RECORD_WORD_COUNT } from "../ParticleConstants.js";
8
9
  import { EMITTER_ATTRIBUTE_ABSENT } from "../data/PARTICLE_EMITTER_LAYOUT.js";
9
10
  import { chunk_particle_emitter } from "../data/chunk_particle_emitter.js";
@@ -11,10 +12,11 @@ import { chunk_particle_emitter } from "../data/chunk_particle_emitter.js";
11
12
  /**
12
13
  * Depth-sort shaders. Three passes bracket a `csdldf` prefix scan:
13
14
  *
14
- * 0. {@link shader_particle_sort_reset} — every frame, write the histogram's `{count}` field
15
- * (= bucket count, which the csdldf scan reads to size itself) and zero the histogram bins and
16
- * the scatter cursor. Without this the scan consumes garbage counts and the scatter compounds
17
- * last frame's ranks — the buffers are only zeroed by WebGPU on CREATION, not per frame.
15
+ * 0. {@link shader_particle_sort_reset} — every frame, write the histogram's `{count, elements}`
16
+ * header (the bucket count the csdldf scan sizes itself from), clear the header padding and the
17
+ * bins, and zero the scatter cursor. Without this the scan consumes garbage counts and the
18
+ * scatter compounds last frame's ranks — the buffers are only zeroed by WebGPU on CREATION, not
19
+ * per frame.
18
20
  * 1. {@link shader_particle_sort_histogram} — per alive particle, project its render position into
19
21
  * view space, quantise the depth into a back-to-front bucket (far first), store the bucket in
20
22
  * `keys`, and atomically bump the per-bucket `histogram`.
@@ -23,11 +25,33 @@ import { chunk_particle_emitter } from "../data/chunk_particle_emitter.js";
23
25
  * offset from the scanned histogram and an atomic per-bucket rank, and write the particle's slot
24
26
  * into `sorted` at that position.
25
27
  *
28
+ * ## The buffer the four passes share
29
+ *
30
+ * The histogram IS the scan's `{count: u32, elements: array<vec4u>}`, bound flat here as
31
+ * `array<atomic<u32>>` because these passes need atomics on it. `elements` is `@align(16)`, so bin
32
+ * `b` is word {@link PREFIX_SCAN_CSDLDF_HEADER_WORDS}` + b` and words 1..3 are padding the scan
33
+ * never reads. Every pass below steps over that header by hand; the reset clears whole vec4s of
34
+ * bins, because whole vec4s is what the scan loads.
35
+ *
36
+ * ## This is the render order
37
+ *
38
+ * The camera-dependent back-to-front list the billboard draw consumes. `../coherence/` produces the
39
+ * simulation order from the same three-phase shape — different buffers, different passes, different
40
+ * counter slots (`PARTICLE_COUNTER.SORTED` against `PARTICLE_COUNTER.SIM_PADDED`), on purpose.
41
+ *
26
42
  * The `csdldf` scan uses subgroup ops and isn't runnable under the emulator; the reset, histogram
27
43
  * and scatter passes are, and the CPU reference {@link ./particle_counting_sort.js} pins the
28
44
  * algorithm.
29
45
  */
30
46
 
47
+ /** @type {number} words of `{count, elements}` header in front of the scan's bins */
48
+ const HEADER = PREFIX_SCAN_CSDLDF_HEADER_WORDS;
49
+
50
+ /** The header stride every pass in this file interpolates. */
51
+ const COMMON = /* wgsl */ `
52
+ const SORT_HEADER_WORDS : u32 = ${HEADER}u;
53
+ `;
54
+
31
55
  export const PARTICLE_SORT_WORKGROUP_SIZE = 64;
32
56
 
33
57
  // --- reset pass ---
@@ -48,20 +72,42 @@ reset_resources.createGroup()
48
72
  .addStorageBuffer("histogram", WebGPUArray.from(atomic_u32), true)
49
73
  .addStorageBuffer("cursor", WebGPUArray.from(atomic_u32), true);
50
74
  const reset_body = CodeChunk.from(/* wgsl */ `
75
+ ${COMMON}
76
+
51
77
  @compute @workgroup_size(${PARTICLE_SORT_WORKGROUP_SIZE}, 1, 1)
52
78
  fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
53
79
  let i = gid.x;
80
+
54
81
  if (i == 0u) {
55
82
  // The {count, elements} header the csdldf scan sizes itself from.
56
83
  atomicStore(&histogram[0], settings.u_bucket_count);
57
84
  }
85
+
86
+ // Header padding: never read by the scan, but it shares the buffer and the pool may have left
87
+ // something in it.
88
+ if (i > 0u && i < SORT_HEADER_WORDS) {
89
+ atomicStore(&histogram[i], 0u);
90
+ }
91
+
92
+ // The scan reads whole vec4s, so the bins are cleared up to the vec4 the last one lands in.
93
+ if (i < ((settings.u_bucket_count + 3u) & 0xfffffffcu)) {
94
+ atomicStore(&histogram[SORT_HEADER_WORDS + i], 0u);
95
+ }
96
+
58
97
  if (i < settings.u_bucket_count) {
59
- atomicStore(&histogram[1u + i], 0u);
60
98
  atomicStore(&cursor[i], 0u);
61
99
  }
62
100
  }
63
101
  `);
64
102
 
103
+ /**
104
+ * Dispatch this over `PREFIX_SCAN_CSDLDF_HEADER_WORDS + round_up_4(bucket_count)` threads, not over
105
+ * `bucket_count`: its widest loop is the scan header plus the bins rounded up to the whole vec4 the
106
+ * last bin lands in. Under-dispatching leaves the tail of that vec4 holding last frame's counts,
107
+ * and the scan adds them in.
108
+ *
109
+ * @type {ComputeShader}
110
+ */
65
111
  export const shader_particle_sort_reset = ComputeShader.from({
66
112
  label: "Particle Sort Reset",
67
113
  resources: reset_resources,
@@ -105,6 +151,7 @@ histogram_resources.createGroup()
105
151
  .addStorageBuffer("keys", WebGPUArray.u32, true)
106
152
  .addStorageBuffer("histogram", WebGPUArray.from(atomic_u32), true);
107
153
  const histogram_body = CodeChunk.from(/* wgsl */ `
154
+ ${COMMON}
108
155
  const PARTICLE_RECORD_WORDS : u32 = ${PARTICLE_RECORD_WORD_COUNT}u;
109
156
  const PARTICLE_HEADER_EMITTER : u32 = ${PARTICLE_RECORD_HEADER_EMITTER}u;
110
157
  const PARTICLE_ATTRIBUTE_ABSENT : u32 = ${EMITTER_ATTRIBUTE_ABSENT}u;
@@ -135,7 +182,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
135
182
  let bucket = min(u32(clamped * f32(settings.u_bucket_count)), settings.u_bucket_count - 1u);
136
183
 
137
184
  keys[i] = bucket;
138
- atomicAdd(&histogram[1u + bucket], 1u);
185
+ atomicAdd(&histogram[SORT_HEADER_WORDS + bucket], 1u);
139
186
  }
140
187
  `, [chunk_particle_emitter]);
141
188
 
@@ -166,15 +213,19 @@ scatter_resources.createGroup()
166
213
  .addStorageBuffer("cursor", WebGPUArray.from(atomic_u32), true)
167
214
  .addStorageBuffer("sorted", WebGPUArray.u32, true);
168
215
  const scatter_body = CodeChunk.from(/* wgsl */ `
216
+ ${COMMON}
217
+
169
218
  @compute @workgroup_size(${PARTICLE_SORT_WORKGROUP_SIZE}, 1, 1)
170
219
  fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
171
220
  let i = gid.x;
172
221
  if (i >= settings.u_count) { return; }
173
222
 
174
223
  let bucket = keys[i];
175
- // Exclusive offset = inclusive prefix sum up to bucket-1. With the count field at index 0 the
176
- // scanned inclusive value for bucket b lives at index (1+b), so bucket b-1 is at index b.
177
- let exclusive = select(0u, scanned[bucket], bucket > 0u);
224
+
225
+ // The scan is inclusive, so bucket b's exclusive offset is bucket b-1's inclusive value, one
226
+ // word earlier. For bucket 0 the index lands on the last header word — in bounds, and unused,
227
+ // because select() takes the 0 branch there.
228
+ let exclusive = select(0u, scanned[SORT_HEADER_WORDS + bucket - 1u], bucket > 0u);
178
229
  let rank = atomicAdd(&cursor[bucket], 1u);
179
230
  sorted[exclusive + rank] = alive[i];
180
231
  }
@@ -139,7 +139,7 @@ export class CPUBitmapData {
139
139
  * to decide what `textureDimensions` should return.
140
140
  * @returns {1 | 2 | 3}
141
141
  */
142
- get dimensionality(): 2 | 1 | 3;
142
+ get dimensionality(): 1 | 2 | 3;
143
143
  /**
144
144
  * Linear element index of the first channel of pixel `(x, y, z)`.
145
145
  * Caller is responsible for bounds checking.
@@ -0,0 +1,69 @@
1
+ export default domify;
2
+ export function DOM(argument: any, namespace: any): this;
3
+ export class DOM {
4
+ constructor(argument: any, namespace: any);
5
+ /**
6
+ *
7
+ * @type {Element}
8
+ */
9
+ el: Element;
10
+ /**
11
+ *
12
+ * @param {string} [elName=div]
13
+ * @returns {DOM}
14
+ */
15
+ createChild(elName?: string): DOM;
16
+ append(child: any): this;
17
+ remove(child: any): this;
18
+ text(text: any): this;
19
+ /**
20
+ *
21
+ * @param {string} querySelector
22
+ * @returns {DOM|null}
23
+ */
24
+ select(querySelector: string): DOM | null;
25
+ /**
26
+ *
27
+ * @param {string} name
28
+ * @returns {DOM}
29
+ */
30
+ addClass(name: string): DOM;
31
+ removeClass(name: any): this;
32
+ /**
33
+ *
34
+ * @param {string} name
35
+ * @param {boolean} flag
36
+ * @returns {DOM}
37
+ */
38
+ setClass(name: string, flag: boolean): DOM;
39
+ css(hash: any): this;
40
+ attr(hash: any): this;
41
+ clone(): DOM;
42
+ /**
43
+ * removes all children
44
+ * @returns {DOM}
45
+ */
46
+ clear(): DOM;
47
+ /**
48
+ *
49
+ * @param eventName
50
+ * @param handler
51
+ * @returns {DOM}
52
+ */
53
+ on(eventName: any, handler: any): DOM;
54
+ /**
55
+ *
56
+ * @param eventName
57
+ * @param handler
58
+ * @returns {DOM}
59
+ */
60
+ off(eventName: any, handler: any): DOM;
61
+ }
62
+ /**
63
+ *
64
+ * @param {String|Element} [x=div]
65
+ * @param {String} [namespace]
66
+ * @returns {DOM}
67
+ */
68
+ declare function domify(x?: string | Element, namespace?: string): DOM;
69
+ //# sourceMappingURL=DOM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DOM.d.ts","sourceRoot":"","sources":["../../../src/view/DOM.js"],"names":[],"mappings":";AACA,yDAoBC;;IApBD,2CAoBC;IANG;;;OAGG;IACH,IAFU,OAAO,CAEL;IAIhB;;;;OAIG;IACH,qBAHW,MAAM,GACJ,GAAG,CAMf;IAaD,yBAIC;IACD,yBAIC;IAED,sBAGC;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACJ,GAAG,GAAC,IAAI,CAUpB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,GAAG,CAKf;IAED,6BAGC;IAED;;;;;OAKG;IACH,eAJW,MAAM,QACN,OAAO,GACL,GAAG,CAMf;IAED,qBAOC;IAED,sBAQC;IAED,aAEC;IAED;;;OAGG;IACH,SAFa,GAAG,CAQf;IAED;;;;;OAKG;IACH,kCAFa,GAAG,CAMf;IACD;;;;;OAKG;IACH,mCAFa,GAAG,CAMf;;AAED;;;;;GAKG;AACH,4BAJW,SAAO,OAAO,uBAEZ,GAAG,CAIf"}
package/src/view/DOM.js CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- const DOM = function (argument, namespace) {
2
+ function DOM(argument, namespace) {
3
3
  let el;
4
4
  if (typeof argument === "string") {
5
5
  if (namespace === undefined) {
@@ -169,4 +169,5 @@ function domify(x, namespace) {
169
169
  return new DOM(x, namespace);
170
170
  }
171
171
 
172
+ export { DOM };
172
173
  export default domify;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @extends View
3
+ */
4
+ export class LocalizedLabelView extends View {
5
+ /**
6
+ *
7
+ * @param {string} id
8
+ * @param {object} [seed]
9
+ * @param {Localization} [localization]
10
+ * @param {string[]} [classList]
11
+ * @param {GMLEngine} [gml] if supplied, string will be compiled first
12
+ * @param {string} [tag=div] HTML element tag
13
+ */
14
+ constructor({ id, seed, localization, classList, gml, tag }: string);
15
+ /**
16
+ * @private
17
+ * @type {Localization}
18
+ */
19
+ private localization;
20
+ /**
21
+ *
22
+ * @type {GMLEngine}
23
+ */
24
+ gml: GMLEngine;
25
+ /**
26
+ *
27
+ * @type {Object}
28
+ */
29
+ seed: any;
30
+ /**
31
+ *
32
+ * @type {string}
33
+ */
34
+ key: string;
35
+ $el: import("../DOM.js").DOM;
36
+ el: Element;
37
+ needsUpdate: boolean;
38
+ /**
39
+ * Cached locale key
40
+ * @type {String}
41
+ * @private
42
+ */
43
+ private __localeKey;
44
+ updateLocale(): void;
45
+ setLocalization(localization: any): void;
46
+ setKey(key: any): void;
47
+ update(): void;
48
+ }
49
+ import View from "../View.js";
50
+ //# sourceMappingURL=LocalizedLabelView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalizedLabelView.d.ts","sourceRoot":"","sources":["../../../../src/view/common/LocalizedLabelView.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;;;;;;OAQG;IACH,6DAPW,MAAM,EAoEhB;IAxDG;;;OAGG;IACH,qBAAwB;IAExB;;;OAGG;IACH,eAAc;IAEd;;;OAGG;IACH,UAAgB;IAEhB;;;OAGG;IACH,KAFU,MAAM,CAEH;IAKb,6BAAc;IAEd,YAAgB;IAKhB,qBAAuB;IAavB;;;;OAIG;IACH,oBAAuB;IAM3B,qBAOC;IAED,yCAeC;IAED,uBAaC;IAED,eAgCC;CACJ;iBAxJgB,YAAY"}
@@ -0,0 +1,19 @@
1
+ export default GuiControl;
2
+ declare class GuiControl extends View {
3
+ dRoot: import("../../DOM.js").DOM;
4
+ el: Element;
5
+ model: ObservedValue;
6
+ /**
7
+ * @template {T}
8
+ * @param {string} text
9
+ * @param {T} control
10
+ * @returns {T}
11
+ */
12
+ addLabeledControlVertical(text: string, control: T): T;
13
+ }
14
+ declare namespace GuiControl {
15
+ let CSS_CLASS_NAME: string;
16
+ }
17
+ import View from '../../View.js';
18
+ import ObservedValue from '../../../core/model/ObservedValue.js';
19
+ //# sourceMappingURL=GuiControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuiControl.d.ts","sourceRoot":"","sources":["../../../../../src/view/controller/controls/GuiControl.js"],"names":[],"mappings":";AAKA;IAOQ,kCAAkB;IAClB,YAAkB;IAElB,qBAAoC;IAGxC;;;;;OAKG;IACH,gCAJW,MAAM,iBAahB;CACJ;;;;iBA/BgB,eAAe;0BAHN,sCAAsC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * A frame-rate readout: one number, updated twice a second.
3
+ *
4
+ * This replaces `stats.js`, which the engine used to pull in for the same job.
5
+ * That package was declared `optional` in `peerDependenciesMeta` and imported
6
+ * unconditionally at the top of {@link EngineHarness}, so *evaluating* the
7
+ * module that is in practice this engine's entry point required an optional
8
+ * dependency whether or not a counter was ever asked for. Under Vite — where a
9
+ * consumer must exclude a ~6000-module package from dependency pre-bundling,
10
+ * which also stops the scanner discovering that package's own CommonJS
11
+ * dependencies — the result was a module-evaluation failure naming a package
12
+ * the application had never referenced, and a blank page. Reported from a port
13
+ * as GAP-003.
14
+ *
15
+ * A graph was never the point. The number is.
16
+ *
17
+ * The counter binds itself: pass the signal that fires once per rendered frame
18
+ * and the binding is linked and unlinked with the view, so removing it from the
19
+ * view stack stops the work.
20
+ *
21
+ * @author Alex Goldring
22
+ * @copyright Company Named Limited (c) 2026
23
+ */
24
+ export class FrameRateView extends EmptyView {
25
+ /**
26
+ * @param {Object} [options]
27
+ * @param {Signal} [options.frame_signal] fires once per rendered frame;
28
+ * typically `engine.graphics.on.postRender`. Bound for the lifetime of the
29
+ * view's link, so it stops counting when the view leaves the stack.
30
+ */
31
+ constructor({ frame_signal }?: {
32
+ frame_signal?: Signal;
33
+ });
34
+ /**
35
+ * Count one frame, and refresh the readout if the window has closed.
36
+ *
37
+ * Safe to call directly — a caller driving its own loop can use this
38
+ * instead of handing a signal to the constructor.
39
+ */
40
+ sample(): void;
41
+ #private;
42
+ }
43
+ export type Signal = import("../../core/events/signal/Signal.js").default;
44
+ import EmptyView from "./EmptyView.js";
45
+ //# sourceMappingURL=FrameRateView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameRateView.d.ts","sourceRoot":"","sources":["../../../../src/view/elements/FrameRateView.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAiCI;;;;;OAKG;IACH;QAJ4B,YAAY,GAA7B,MAAM;OAuBhB;IAED;;;;;OAKG;IACH,eA0BC;;CACJ;qBA/HY,OAAO,oCAAoC,EAAE,OAAO;sBAH3C,gBAAgB"}
@@ -0,0 +1,131 @@
1
+ import EmptyView from "./EmptyView.js";
2
+
3
+ /**
4
+ * @typedef {import("../../core/events/signal/Signal.js").default} Signal
5
+ */
6
+
7
+ /**
8
+ * How long a sample window is. Short enough to react to a stall, long enough
9
+ * that the number is readable rather than a blur — a per-frame readout is a
10
+ * counter nobody can actually read.
11
+ * @type {number}
12
+ */
13
+ const WINDOW_MILLISECONDS = 500;
14
+
15
+ /**
16
+ * A frame-rate readout: one number, updated twice a second.
17
+ *
18
+ * This replaces `stats.js`, which the engine used to pull in for the same job.
19
+ * That package was declared `optional` in `peerDependenciesMeta` and imported
20
+ * unconditionally at the top of {@link EngineHarness}, so *evaluating* the
21
+ * module that is in practice this engine's entry point required an optional
22
+ * dependency whether or not a counter was ever asked for. Under Vite — where a
23
+ * consumer must exclude a ~6000-module package from dependency pre-bundling,
24
+ * which also stops the scanner discovering that package's own CommonJS
25
+ * dependencies — the result was a module-evaluation failure naming a package
26
+ * the application had never referenced, and a blank page. Reported from a port
27
+ * as GAP-003.
28
+ *
29
+ * A graph was never the point. The number is.
30
+ *
31
+ * The counter binds itself: pass the signal that fires once per rendered frame
32
+ * and the binding is linked and unlinked with the view, so removing it from the
33
+ * view stack stops the work.
34
+ *
35
+ * @author Alex Goldring
36
+ * @copyright Company Named Limited (c) 2026
37
+ */
38
+ export class FrameRateView extends EmptyView {
39
+ /**
40
+ * Frames counted since the window opened.
41
+ * @private
42
+ * @type {number}
43
+ */
44
+ #frames = 0;
45
+
46
+ /**
47
+ * When the current window opened, on the same clock the samples are taken
48
+ * against.
49
+ * @private
50
+ * @type {number}
51
+ */
52
+ #window_opened = 0;
53
+
54
+ /**
55
+ * Whether a window is open at all. A separate flag rather than a sentinel
56
+ * value in {@link #window_opened}, because `performance.now()` legitimately
57
+ * returns 0 on the first call in a fresh context and a zero sentinel would
58
+ * then re-open the window instead of counting the frame.
59
+ * @private
60
+ * @type {boolean}
61
+ */
62
+ #counting = false;
63
+
64
+ /**
65
+ * Last value written to the DOM, so an unchanged rate costs no write.
66
+ * @private
67
+ * @type {number}
68
+ */
69
+ #displayed = -1;
70
+
71
+ /**
72
+ * @param {Object} [options]
73
+ * @param {Signal} [options.frame_signal] fires once per rendered frame;
74
+ * typically `engine.graphics.on.postRender`. Bound for the lifetime of the
75
+ * view's link, so it stops counting when the view leaves the stack.
76
+ */
77
+ constructor({ frame_signal } = {}) {
78
+ super({ classList: ["frame-rate-view"] });
79
+
80
+ this.css({
81
+ position: "absolute",
82
+ left: 0,
83
+ top: 0,
84
+ padding: "2px 6px",
85
+ font: "12px monospace",
86
+ color: "#fff",
87
+ background: "rgba(0,0,0,0.5)",
88
+ pointerEvents: "none"
89
+ });
90
+
91
+ this.el.textContent = "--";
92
+
93
+ if (frame_signal !== undefined) {
94
+ this.bindSignal(frame_signal, this.sample, this);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Count one frame, and refresh the readout if the window has closed.
100
+ *
101
+ * Safe to call directly — a caller driving its own loop can use this
102
+ * instead of handing a signal to the constructor.
103
+ */
104
+ sample() {
105
+ const now = performance.now();
106
+
107
+ if (!this.#counting) {
108
+ this.#counting = true;
109
+ this.#window_opened = now;
110
+ return;
111
+ }
112
+
113
+ this.#frames++;
114
+
115
+ const elapsed = now - this.#window_opened;
116
+
117
+ if (elapsed < WINDOW_MILLISECONDS) {
118
+ return;
119
+ }
120
+
121
+ const rate = Math.round((this.#frames * 1000) / elapsed);
122
+
123
+ if (rate !== this.#displayed) {
124
+ this.el.textContent = `${rate} FPS`;
125
+ this.#displayed = rate;
126
+ }
127
+
128
+ this.#frames = 0;
129
+ this.#window_opened = now;
130
+ }
131
+ }