@woosh/meep-engine 2.138.20 → 2.139.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/package.json +1 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +3 -0
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  280. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  281. package/src/engine/graphics/ecs/light/Light.js +27 -0
  282. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  283. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  284. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  285. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  286. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  287. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  288. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  289. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  290. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  291. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  292. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  293. package/src/engine/physics/PLAN.md +236 -0
  294. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  295. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  296. package/src/engine/physics/body/BodyStorage.js +427 -0
  297. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  298. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  299. package/src/engine/physics/broadphase/PairList.js +97 -0
  300. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  301. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  302. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  303. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  304. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  305. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  306. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  307. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  308. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  309. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  310. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  311. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  312. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  313. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  314. package/src/engine/physics/ecs/BodyKind.js +24 -0
  315. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  316. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  317. package/src/engine/physics/ecs/Collider.js +136 -0
  318. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  319. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  320. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  321. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  322. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  323. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  324. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  325. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  326. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  327. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  328. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  329. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  330. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  331. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  332. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  333. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  334. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  335. package/src/engine/physics/ecs/RigidBody.js +240 -0
  336. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  337. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  338. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  339. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  340. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  341. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  342. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  343. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  344. package/src/engine/physics/ecs/SleepState.js +12 -0
  345. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  346. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  347. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  348. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  349. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  350. package/src/engine/physics/events/diff_manifolds.js +50 -0
  351. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  352. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  353. package/src/engine/physics/fluid/FluidField.js +510 -66
  354. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  355. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  356. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  357. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  358. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  359. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  360. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  361. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  362. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  363. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  364. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  365. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  366. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  367. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  368. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  369. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  370. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  371. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  372. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  373. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  374. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  375. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  376. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  377. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  378. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  379. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  380. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  381. package/src/engine/physics/fluid/prototype.js +102 -91
  382. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  383. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  384. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  385. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  386. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  387. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  388. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  389. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  394. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  395. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  396. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  418. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  419. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  420. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  421. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  422. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  423. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  424. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  425. package/src/engine/physics/integration/integrate_position.js +48 -0
  426. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  427. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  428. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  429. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  430. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  431. package/src/engine/physics/integration/quat_integrate.js +62 -0
  432. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  433. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  434. package/src/engine/physics/island/IslandBuilder.js +411 -0
  435. package/src/engine/physics/island/union_find.d.ts +51 -0
  436. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  437. package/src/engine/physics/island/union_find.js +76 -0
  438. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  439. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  440. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  441. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  442. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  443. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  444. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  445. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  446. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  447. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  448. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  449. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  450. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  451. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  452. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  453. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  454. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  455. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  456. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  457. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  458. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  459. package/src/engine/physics/queries/raycast.d.ts +20 -0
  460. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  461. package/src/engine/physics/queries/raycast.js +249 -0
  462. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  463. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  464. package/src/engine/physics/solver/friction_cone.js +37 -0
  465. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  466. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  467. package/src/engine/physics/solver/solve_contacts.js +598 -0
  468. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  469. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  470. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  471. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  472. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  477. package/src/engine/ecs/components/Motion.d.ts +0 -21
  478. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  479. package/src/engine/ecs/components/Motion.js +0 -27
  480. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  481. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  482. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  483. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  484. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  485. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  486. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  487. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  488. package/src/engine/physics/fluid/Fluid.js +0 -221
  489. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  490. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  491. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -1,95 +1,455 @@
1
- import { v3_grid_apply_diffusion } from "./solver/v3_grid_apply_diffusion.js";
2
- import { v3_grid_apply_advection_forward } from "./solver/v3_grid_apply_advection_forward.js";
3
-
4
-
5
- export class FluidSimulator {
6
-
7
- /**
8
- *
9
- * @type {ArrayBuffer|null}
10
- */
11
- buffer = null;
12
-
13
- ensure_buffer(size) {
14
- if (this.buffer === null || this.buffer.byteLength < size) {
15
- this.buffer = new ArrayBuffer(size);
16
- }
17
- }
18
-
19
- /**
20
- *
21
- * @param {FluidField} field
22
- * @param {number} time_delta_in_seconds
23
- */
24
- step(field, time_delta_in_seconds) {
25
- // create buffer big enough to store all attribute twice
26
- const resolution = field.resolution;
27
-
28
- const attribute_cell_count = resolution[0] * resolution[1] * resolution[2];
29
- const attribute_byte_size = attribute_cell_count * 4;
30
- const field_byte_size = field.getAttributeCount() * attribute_byte_size;
31
-
32
- this.ensure_buffer(field_byte_size * 2);
33
-
34
- const sim_buffer = this.buffer;
35
-
36
- // remember current data
37
- new Uint8Array(sim_buffer, 0, field_byte_size).set(new Uint8Array(field.buffer, 0, field_byte_size))
38
-
39
- let ping_pong_index = 0;
40
-
41
- const DIFFUSE_STEPS = 2;
42
-
43
- for (let i = 0; i < 3; i++) {
44
- // perform diffusion
45
- let source = new Float32Array(sim_buffer, attribute_byte_size * i, attribute_cell_count)
46
- let target = new Float32Array(sim_buffer, field_byte_size + attribute_byte_size * i, attribute_cell_count);
47
-
48
- const ping_pong = [source, target];
49
-
50
- ping_pong_index = 0;
51
-
52
- for (let j = 0; j < DIFFUSE_STEPS; j++) {
53
-
54
- source = ping_pong[ping_pong_index % 2];
55
- target = ping_pong[(ping_pong_index + 1) % 2];
56
-
57
- v3_grid_apply_diffusion(target, source, resolution);
58
-
59
- ping_pong_index++;
60
- }
61
-
62
- }
63
-
64
- ping_pong_index = DIFFUSE_STEPS;
65
-
66
- const inputs = [];
67
- const outputs = [];
68
-
69
- for (let i = 0; i < 3; i++) {
70
- const source = ping_pong_index % 2
71
- const target = (ping_pong_index + 1) % 2
72
-
73
- inputs[i] = new Float32Array(
74
- sim_buffer, source * field_byte_size + attribute_byte_size * i, attribute_cell_count
75
- );
76
-
77
- outputs[i] = new Float32Array(
78
- sim_buffer, target * field_byte_size + attribute_byte_size * i, attribute_cell_count
79
- );
80
- }
81
-
82
- ping_pong_index++;
83
-
84
- // advection
85
- v3_grid_apply_advection_forward(outputs, inputs, resolution, time_delta_in_seconds);
86
-
87
-
88
- if (ping_pong_index % 2 !== 0) {
89
- // data is not at source
90
- field.attachBuffer(sim_buffer, field_byte_size);
91
- } else {
92
- field.attachBuffer(sim_buffer, 0);
93
- }
94
- }
95
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { optimal_sor_omega } from "./solver/optimal_sor_omega.js";
3
+ import { v3_grid_apply_advection_forward } from "./solver/v3_grid_apply_advection_forward.js";
4
+ import { v3_grid_apply_diffusion } from "./solver/v3_grid_apply_diffusion.js";
5
+ import { v3_grid_apply_scalar_advection } from "./solver/v3_grid_apply_scalar_advection.js";
6
+ import { v3_grid_compute_divergence } from "./solver/v3_grid_compute_divergence.js";
7
+ import { v3_grid_solve_pressure } from "./solver/v3_grid_solve_pressure.js";
8
+ import { v3_grid_solve_pressure_pcg } from "./solver/v3_grid_solve_pressure_pcg.js";
9
+ import { v3_grid_subtract_pressure_gradient } from "./solver/v3_grid_subtract_pressure_gradient.js";
10
+
11
+ /**
12
+ * Pressure solver selection. Both solve the same A·p = -div system over the
13
+ * same neighbour-mask topology; the difference is convergence rate and per-iter
14
+ * cost.
15
+ *
16
+ * - `"sor"` — red-black Successive Over-Relaxation, our long-standing
17
+ * default. One sweep is cheap (~3-5 µs/cell at 128³), convergence is
18
+ * O(N) iterations for fixed accuracy.
19
+ *
20
+ * - `"mic-pcg"` — Modified Incomplete Cholesky preconditioned Conjugate
21
+ * Gradient. ~2× the per-iter cost of SOR, but converges in O(√N) iters
22
+ * (typically 8-12 vs SOR's 30+ at 128³), so a net 1.5-2× speedup at
23
+ * quality parity for production grids. Allocates 5 additional N-sized
24
+ * scratch buffers (r, z, s, As, precon).
25
+ *
26
+ * @enum {string}
27
+ */
28
+ export const PressureSolver = {
29
+ SOR: "sor",
30
+ MICPCG: "mic-pcg",
31
+ };
32
+
33
+ /**
34
+ * Cell-centered 3D Stable Fluids solver (Stam, 1999/2003).
35
+ *
36
+ * Holds tuning knobs plus transient working memory (per-step velocity snapshots,
37
+ * divergence, ping-pong scratch). None of that working memory carries information
38
+ * across step boundaries — its value is overwritten before being read on the next
39
+ * step. Replacing the simulator instance between two steps of the same field
40
+ * produces an identical result (the only cross-step state, `pressure`, lives on
41
+ * the field). Scratch is cached by cell-count so per-step allocation stays at zero.
42
+ *
43
+ * Per step:
44
+ * 1. Apply external forces (effectors mutate field velocity).
45
+ * 2. Diffuse velocity (viscosity; skipped when `velocity_diffusion_rate == 0`).
46
+ * 3. Project (pressure solve + gradient subtract) to enforce ∇·v ≈ 0.
47
+ * 4. Self-advect velocity (semi-Lagrangian back-trace).
48
+ * 5. Project again (advection introduces small divergence).
49
+ * 6. For each scalar attribute on the field: optionally diffuse, then advect.
50
+ *
51
+ * Pressure is warm-started from the previous step's solution (`field.pressure`),
52
+ * which converges much faster than starting from zero once the flow reaches a
53
+ * quasi-steady state.
54
+ *
55
+ * Compute model: synchronous, main-thread. Cost scales linearly with cell count and
56
+ * with iteration counts. The pressure SOR sweep count is auto-scaled to grid size
57
+ * (see {@link pressure_iteration_scale}) so the per-cell budget stays roughly flat
58
+ * across resolutions instead of over-spending at 32³ and under-spending at 256³.
59
+ */
60
+ /**
61
+ * Minimum iteration count when `pressure_iteration_scale > 0`. Picked so very
62
+ * small grids (8³, 16³) still get enough sweeps to converge — at those sizes
63
+ * `scale * max_res` underflows the practical "useful work" zone. For grids
64
+ * larger than `floor / scale` the scale formula dominates and this constant
65
+ * stops mattering. Caller may inspect / override if a per-deployment minimum
66
+ * makes sense.
67
+ *
68
+ * @type {number}
69
+ */
70
+ export const PRESSURE_ITERATIONS_FLOOR = 8;
71
+
72
+ export class FluidSimulator {
73
+
74
+ /**
75
+ * Implicit-diffusion coefficient (= viscosity * dt-like scaling). 0 disables.
76
+ * @type {number}
77
+ */
78
+ velocity_diffusion_rate = 0;
79
+
80
+ /**
81
+ * Jacobi iterations for the velocity diffusion solve. Only consulted when
82
+ * `velocity_diffusion_rate > 0`.
83
+ * @type {number}
84
+ */
85
+ velocity_diffusion_iterations = 4;
86
+
87
+ /**
88
+ * Implicit-diffusion coefficient applied uniformly to all scalar attributes. 0
89
+ * disables. Semi-Lagrangian advection already introduces visible numerical
90
+ * diffusion, so leaving this at 0 is usually fine.
91
+ * @type {number}
92
+ */
93
+ scalar_diffusion_rate = 0;
94
+
95
+ /**
96
+ * @type {number}
97
+ */
98
+ scalar_diffusion_iterations = 4;
99
+
100
+ /**
101
+ * Which pressure solver to use. `PressureSolver.SOR` (default) is the
102
+ * baseline red-black Successive Over-Relaxation. `PressureSolver.MICPCG`
103
+ * switches to Modified Incomplete Cholesky preconditioned Conjugate
104
+ * Gradient, which typically converges in 1/3 the iterations at 2× per-iter
105
+ * cost (net ~1.5-2× faster wall time at quality parity on production
106
+ * grids). MIC-PCG allocates an additional 5 N-sized scratch buffers, so
107
+ * peak memory is higher.
108
+ *
109
+ * Switching at runtime is supported but flushes the warm-started pressure
110
+ * meaning for one step (both solvers warm-start from `field.pressure`,
111
+ * but the convergence trajectory is different — first frame after a
112
+ * switch will look "fresh", not warm).
113
+ *
114
+ * @type {string}
115
+ */
116
+ pressure_solver = PressureSolver.SOR;
117
+
118
+ /**
119
+ * Run the pressure projection *before* self-advection in addition to after.
120
+ *
121
+ * The Stam (1999/2003) reference solver projects twice per step:
122
+ *
123
+ * [forces] → [diffuse] → **project₁** → [advect] → **project₂** → [scalars]
124
+ *
125
+ * `project₁` ensures the velocity field that's *fed into* semi-Lagrangian
126
+ * advection is divergence-free, so back-traced trajectories follow a physical
127
+ * flow. `project₂` cleans up the small divergence advection re-introduces.
128
+ *
129
+ * Skipping `project₁` (this flag = false) cuts the pressure-solve cost roughly
130
+ * in half — at default settings, pressure is ~80% of step() time, and the two
131
+ * projections share that ~evenly. The cost is that effectors' splatted
132
+ * impulses (which inject divergence) and any post-diffusion residual get
133
+ * carried into advection un-projected, then have to be cleaned up by the
134
+ * single post-advection projection.
135
+ *
136
+ * In practice:
137
+ * - If diffusion is OFF (rate=0) and effectors are gentle (gentle wind, no
138
+ * big impulses), the visual quality cost is small. The post-advection
139
+ * project handles everything in roughly the same number of iterations.
140
+ * - If diffusion is ON, or you have strong impulses (explosions, large
141
+ * wakes), the second-only solver is asked to fix everything in one pass
142
+ * and may visibly under-converge — flicker, "pumping", or divergent
143
+ * vortices.
144
+ *
145
+ * Default `true` (= Stam reference behavior) for correctness; flip to `false`
146
+ * if profiling shows pressure as a bottleneck and quality A/B looks acceptable.
147
+ *
148
+ * @type {boolean}
149
+ */
150
+ project_before_advection = true;
151
+
152
+ /**
153
+ * Adaptive scaling factor for the pressure Poisson SOR sweep count. The actual
154
+ * iteration count per `project()` call is
155
+ *
156
+ * iters = max(PRESSURE_ITERATIONS_FLOOR, ceil(pressure_iteration_scale * max(rx, ry, rz)))
157
+ *
158
+ * unless `pressure_iteration_scale <= 0`, in which case projection is skipped
159
+ * entirely (useful for tests that need to inspect un-projected velocity or
160
+ * tear-down scenarios).
161
+ *
162
+ * Why scaled by resolution? Red-black SOR with the optimal omega converges
163
+ * geometrically with a rate that depends on grid size — the iterations needed
164
+ * to reach a given residual scale roughly as `O(N)` where N is the max grid
165
+ * extent. A fixed iteration count therefore over-spends at small grids and
166
+ * under-spends at large ones; the default value of 30 (from the pre-adaptive
167
+ * era) was right for ~128³ but wasteful at 32³ and marginal at 256³.
168
+ *
169
+ * Default scale `0.25` plus floor `8` chosen empirically against the bench
170
+ * sweep in `bench.spec.js` (`pressure_iterations convergence + step() cost`)
171
+ * — it's the smallest setting that keeps a stress-test divergent velocity
172
+ * field stable under continuous stepping across the 32³ → 128³ range. For a
173
+ * gentler real-world flow you can drop the scale further; for cold-start
174
+ * spawn frames or scenes with heavy impulses, bump it up.
175
+ *
176
+ * @type {number}
177
+ */
178
+ pressure_iteration_scale = 0.25;
179
+
180
+ // ────────────────────────────────────────────────────────────────────────────
181
+ // Transient scratch — overwritten before read on every step. Cached by
182
+ // cell-count so we don't allocate per step. Their value never crosses a step
183
+ // boundary; if it did it would belong on the field (see `field.pressure`).
184
+ // ────────────────────────────────────────────────────────────────────────────
185
+
186
+ #scratch_cells = 0;
187
+
188
+ /** @type {Float32Array|null} */ #prev_x = null;
189
+ /** @type {Float32Array|null} */ #prev_y = null;
190
+ /** @type {Float32Array|null} */ #prev_z = null;
191
+ /** @type {Float32Array|null} */ #divergence = null;
192
+ /** @type {Float32Array|null} */ #diffusion_scratch = null;
193
+ /** @type {Float32Array|null} */ #scalar_scratch = null;
194
+
195
+ // PCG-only scratch (allocated lazily on first MICPCG-enabled project call).
196
+ #pcg_scratch_cells = 0;
197
+ /** @type {Float32Array|null} */ #pcg_r = null;
198
+ /** @type {Float32Array|null} */ #pcg_z = null;
199
+ /** @type {Float32Array|null} */ #pcg_s = null;
200
+ /** @type {Float32Array|null} */ #pcg_As = null;
201
+ /** @type {Float32Array|null} */ #pcg_precon = null;
202
+
203
+ /**
204
+ * Grow the cached scratch buffers if the requested size exceeds what's allocated.
205
+ * Idempotent and monotonic — never shrinks. Called at the top of {@link step} and
206
+ * {@link project} so user code never has to think about it.
207
+ * @param {number} cell_count
208
+ */
209
+ #ensure_scratch(cell_count) {
210
+ if (this.#scratch_cells >= cell_count) {
211
+ return;
212
+ }
213
+ this.#scratch_cells = cell_count;
214
+ this.#prev_x = new Float32Array(cell_count);
215
+ this.#prev_y = new Float32Array(cell_count);
216
+ this.#prev_z = new Float32Array(cell_count);
217
+ this.#divergence = new Float32Array(cell_count);
218
+ this.#diffusion_scratch = new Float32Array(cell_count);
219
+ this.#scalar_scratch = new Float32Array(cell_count);
220
+ }
221
+
222
+ /**
223
+ * Lazily allocate the PCG-specific scratch (5 N-sized Float32 buffers).
224
+ * Idempotent and monotonic.
225
+ * @param {number} cell_count
226
+ */
227
+ #ensure_pcg_scratch(cell_count) {
228
+ if (this.#pcg_scratch_cells >= cell_count) {
229
+ return;
230
+ }
231
+ this.#pcg_scratch_cells = cell_count;
232
+ this.#pcg_r = new Float32Array(cell_count);
233
+ this.#pcg_z = new Float32Array(cell_count);
234
+ this.#pcg_s = new Float32Array(cell_count);
235
+ this.#pcg_As = new Float32Array(cell_count);
236
+ this.#pcg_precon = new Float32Array(cell_count);
237
+ }
238
+
239
+ /**
240
+ * Re-allocate the divergence scratch buffer if its element type doesn't match
241
+ * the field's pressure type. Lets `half_precision_pressure` on the field carry
242
+ * through into the SOR inner-loop bandwidth (the solver reads divergence and
243
+ * writes pressure of the same dtype).
244
+ *
245
+ * @param {FluidField} field
246
+ */
247
+ #ensure_divergence_matches(field) {
248
+ const desired_ctor = field.pressure.constructor;
249
+ const cell_count = field.cellCount();
250
+ if (this.#divergence === null
251
+ || this.#divergence.constructor !== desired_ctor
252
+ || this.#divergence.length < cell_count) {
253
+ this.#divergence = new desired_ctor(cell_count);
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Resolve the per-call SOR iteration count from {@link pressure_iteration_scale}
259
+ * and the field's resolution. Public so callers can budget frame time or query
260
+ * the actual cost in advance.
261
+ *
262
+ * - `scale <= 0` → 0 (projection disabled).
263
+ * - `scale > 0` → `max(PRESSURE_ITERATIONS_FLOOR, ceil(scale * max(rx, ry, rz)))`.
264
+ *
265
+ * @param {number} res_x
266
+ * @param {number} res_y
267
+ * @param {number} res_z
268
+ * @return {number} non-negative integer iteration count.
269
+ */
270
+ resolvePressureIterations(res_x, res_y, res_z) {
271
+ const scale = this.pressure_iteration_scale;
272
+ if (scale <= 0) {
273
+ return 0;
274
+ }
275
+ const max_res = res_x > res_y ? (res_x > res_z ? res_x : res_z) : (res_y > res_z ? res_y : res_z);
276
+ const scaled = Math.ceil(scale * max_res);
277
+ return scaled > PRESSURE_ITERATIONS_FLOOR ? scaled : PRESSURE_ITERATIONS_FLOOR;
278
+ }
279
+
280
+ /**
281
+ * Project the field's velocity to be (approximately) divergence-free. Exposed
282
+ * because tests and external code may need to project on demand (e.g., after
283
+ * splatting an out-of-band impulse). `field.pressure` is read as the warm-start
284
+ * initial guess and written with the new solution.
285
+ * @param {FluidField} field
286
+ */
287
+ project(field) {
288
+ this.#ensure_scratch(field.cellCount());
289
+ this.#ensure_divergence_matches(field);
290
+
291
+ const res = field.getResolution();
292
+ const solid = field.solid;
293
+ const iterations = this.resolvePressureIterations(res[0], res[1], res[2]);
294
+
295
+ if (iterations === 0) {
296
+ return;
297
+ }
298
+
299
+ // Pre-bake the per-cell neighbourhood mask consumed by the pressure SOR
300
+ // loop. One O(N) byte-pass amortized across `iterations` SOR sweeps;
301
+ // saves six boundary checks plus six solid-neighbour checks per cell per
302
+ // iteration. See FluidField.solid_neighbour_mask.
303
+ field.recomputeSolidNeighbourMask();
304
+
305
+ v3_grid_compute_divergence(
306
+ this.#divergence,
307
+ field.velocity_x, field.velocity_y, field.velocity_z,
308
+ res[0], res[1], res[2],
309
+ solid
310
+ );
311
+
312
+ if (this.pressure_solver === PressureSolver.MICPCG) {
313
+ this.#ensure_pcg_scratch(field.cellCount());
314
+ v3_grid_solve_pressure_pcg(
315
+ field.pressure, this.#divergence,
316
+ res[0], res[1], res[2],
317
+ iterations,
318
+ field.solid_neighbour_mask,
319
+ this.#pcg_r, this.#pcg_z, this.#pcg_s, this.#pcg_As, this.#pcg_precon
320
+ );
321
+ } else {
322
+ v3_grid_solve_pressure(
323
+ field.pressure, this.#divergence,
324
+ res[0], res[1], res[2],
325
+ iterations,
326
+ optimal_sor_omega(res[0], res[1], res[2]),
327
+ field.solid_neighbour_mask
328
+ );
329
+ }
330
+
331
+ v3_grid_subtract_pressure_gradient(
332
+ field.velocity_x, field.velocity_y, field.velocity_z,
333
+ field.pressure,
334
+ res[0], res[1], res[2],
335
+ solid
336
+ );
337
+ }
338
+
339
+ /**
340
+ * Diffuse a single velocity component in-place, using `source_copy_buf` as the
341
+ * "before" snapshot and `#diffusion_scratch` as the ping-pong scratch.
342
+ * @param {Float32Array} component
343
+ * @param {Float32Array} source_copy_buf
344
+ * @param {number[]} res
345
+ * @param {Uint8Array} solid
346
+ */
347
+ #diffuse_velocity_component(component, source_copy_buf, res, solid) {
348
+ source_copy_buf.set(component);
349
+ v3_grid_apply_diffusion(
350
+ component, source_copy_buf, this.#diffusion_scratch,
351
+ res[0], res[1], res[2],
352
+ this.velocity_diffusion_rate,
353
+ this.velocity_diffusion_iterations,
354
+ solid
355
+ );
356
+ }
357
+
358
+ /**
359
+ * Advance the simulation by one timestep.
360
+ *
361
+ * @param {FluidField} field
362
+ * @param {number} time_delta seconds (or grid-cells-per-velocity-unit;
363
+ * caller defines the convention)
364
+ * @param {AbstractFluidEffector[]} effectors Pass `[]` for no external forces.
365
+ * @param {Float32Array|number[]} world_to_grid Column-major 4×4 affine sending
366
+ * world-space points into this
367
+ * field's grid space. Passed through
368
+ * to each effector's `apply`. Pass
369
+ * `M4_IDENTITY` when effectors are
370
+ * already configured in grid space.
371
+ */
372
+ step(field, time_delta, effectors, world_to_grid) {
373
+ assert.defined(field, "field");
374
+ assert.notNull(field, "field");
375
+ assert.isNumber(time_delta, "time_delta");
376
+ assert.greaterThanOrEqual(time_delta, 0, "time_delta");
377
+ assert.isArray(effectors, "effectors");
378
+ assert.defined(world_to_grid, "world_to_grid");
379
+ assert.notNull(world_to_grid, "world_to_grid");
380
+
381
+ if (time_delta === 0) {
382
+ return;
383
+ }
384
+
385
+ const cell_count = field.cellCount();
386
+ assert.greaterThan(cell_count, 0, "field has not been built");
387
+
388
+ this.#ensure_scratch(cell_count);
389
+
390
+ const res = field.getResolution();
391
+
392
+ // 1. External forces.
393
+ for (let i = 0; i < effectors.length; i++) {
394
+ effectors[i].apply(field, time_delta, world_to_grid);
395
+ }
396
+
397
+ const solid = field.solid;
398
+
399
+ // 2. Velocity diffusion (viscosity). Cheap to skip when disabled.
400
+ if (this.velocity_diffusion_rate > 0 && this.velocity_diffusion_iterations > 0) {
401
+ this.#diffuse_velocity_component(field.velocity_x, this.#prev_x, res, solid);
402
+ this.#diffuse_velocity_component(field.velocity_y, this.#prev_y, res, solid);
403
+ this.#diffuse_velocity_component(field.velocity_z, this.#prev_z, res, solid);
404
+ }
405
+
406
+ // 3. Project to enforce incompressibility before advection. Skipping this
407
+ // is a perf knob (~halves the pressure cost) at the price of advection
408
+ // seeing a slightly-divergent input. See `project_before_advection`.
409
+ if (this.project_before_advection) {
410
+ this.project(field);
411
+ }
412
+
413
+ // 4. Self-advect velocity (semi-Lagrangian back-trace through the projected field).
414
+ this.#prev_x.set(field.velocity_x);
415
+ this.#prev_y.set(field.velocity_y);
416
+ this.#prev_z.set(field.velocity_z);
417
+
418
+ v3_grid_apply_advection_forward(
419
+ [field.velocity_x, field.velocity_y, field.velocity_z],
420
+ [this.#prev_x, this.#prev_y, this.#prev_z],
421
+ res[0], res[1], res[2],
422
+ time_delta,
423
+ solid
424
+ );
425
+
426
+ // 5. Re-project after advection.
427
+ this.project(field);
428
+
429
+ // 6. Transport each passive scalar by the now-finalized velocity field.
430
+ const scalars = field.getScalarAttributes();
431
+ for (let i = 0; i < scalars.length; i++) {
432
+ const attr = scalars[i];
433
+
434
+ if (this.scalar_diffusion_rate > 0 && this.scalar_diffusion_iterations > 0) {
435
+ this.#scalar_scratch.set(attr.data);
436
+ v3_grid_apply_diffusion(
437
+ attr.data, this.#scalar_scratch, this.#diffusion_scratch,
438
+ res[0], res[1], res[2],
439
+ this.scalar_diffusion_rate,
440
+ this.scalar_diffusion_iterations,
441
+ solid
442
+ );
443
+ }
444
+
445
+ this.#scalar_scratch.set(attr.data);
446
+ v3_grid_apply_scalar_advection(
447
+ attr.data, this.#scalar_scratch,
448
+ field.velocity_x, field.velocity_y, field.velocity_z,
449
+ res[0], res[1], res[2],
450
+ time_delta,
451
+ solid
452
+ );
453
+ }
454
+ }
455
+ }
@@ -1,16 +1,39 @@
1
+ /**
2
+ * Debug view: renders each z-slice of a 3D field as a 2D canvas tile, with up to four
3
+ * channels mapped to RGBA. Used by {@link prototype.js}; not a production runtime view.
4
+ *
5
+ * The visualiser is data-agnostic — it takes an array of one to four Float32Array
6
+ * channels, each of length `res_x * res_y * res_z`, and a per-channel mapping to colour
7
+ * via {@link setDrawMethod}. Default mapping clamps to `[0, 1]` per channel and writes
8
+ * opaque pixels.
9
+ */
1
10
  export class SliceVisualiser extends EmptyView {
11
+ constructor();
12
+ /**
13
+ * Replace the per-pixel transform. The function receives the destination RGBA
14
+ * `Uint8ClampedArray`, the byte offset of the current pixel within it, a Float32Array
15
+ * of channel samples for that pixel, and the configured channel count.
16
+ * @param {(out: Uint8ClampedArray, out_offset: number, sample: Float32Array, channel_count: number) => void} fn
17
+ */
18
+ setDrawMethod(fn: (out: Uint8ClampedArray, out_offset: number, sample: Float32Array, channel_count: number) => void): void;
2
19
  /**
20
+ * Attach the channels and resolution to visualise. Recomputes the layout and
21
+ * rebuilds the per-slice canvases (creating or destroying child views as needed).
3
22
  *
23
+ * @param {Float32Array[]} channels 1-4 channels; each length = res_x * res_y * res_z.
24
+ * @param {number[]} resolution `[res_x, res_y, res_z]`
25
+ */
26
+ setChannels(channels: Float32Array[], resolution: number[]): void;
27
+ /**
28
+ * Render the current channel data into each per-slice canvas. Cheap to call every
29
+ * frame for small grids; expensive at high resolutions.
4
30
  */
5
- constructor();
6
31
  draw(): void;
7
- layout(): void;
8
32
  /**
9
- *
10
- * @param {ArrayBuffer} data
11
- * @param {number[]} resolution
33
+ * Reflow the per-slice canvases into a 2D grid that fits the view's current width.
34
+ * Called automatically on link and on size change; safe to invoke manually.
12
35
  */
13
- setData(data: ArrayBuffer, resolution: number[]): void;
36
+ layout(): void;
14
37
  #private;
15
38
  }
16
39
  import EmptyView from "../../../view/elements/EmptyView.js";
@@ -1 +1 @@
1
- {"version":3,"file":"SliceVisualiser.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/fluid/SliceVisualiser.js"],"names":[],"mappings":"AAMA;IAsBI;;OAEG;IACH,cAMC;IAED,aAgCC;IAED,eAkBC;IAED;;;;OAIG;IACH,cAHW,WAAW,cACX,MAAM,EAAE,QAkElB;;CAEJ;sBAjKqB,qCAAqC"}
1
+ {"version":3,"file":"SliceVisualiser.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/fluid/SliceVisualiser.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH;IAqCI,cAKC;IAED;;;;;OAKG;IACH,wBAFiB,iBAAiB,cAAc,MAAM,UAAU,YAAY,iBAAiB,MAAM,KAAK,IAAI,QAI3G;IAED;;;;;;OAMG;IACH,sBAHW,YAAY,EAAE,cACd,MAAM,EAAE,QAsDlB;IAED;;;OAGG;IACH,aA6BC;IAED;;;OAGG;IACH,eAmBC;;CACJ;sBAzLqB,qCAAqC"}