@woosh/meep-engine 3.40.0 → 3.42.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 (539) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/selection/editor_pick.d.ts.map +1 -1
  4. package/editor/selection/editor_pick.js +2 -1
  5. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  6. package/editor/tools/TransformToolV2.js +7 -1
  7. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  8. package/editor/tools/engine/ToolEngine.js +10 -0
  9. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  10. package/editor/tools/v2/TransformControls.js +7 -20
  11. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
  12. package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
  13. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  14. package/editor/view/ecs/EntityEditor.js +3 -1
  15. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  16. package/editor/view/node-graph/NodeGraphView.js +28 -12
  17. package/package.json +1 -1
  18. package/samples/engine/first-scene/index.html +4 -1
  19. package/samples/engine/first-scene/main.js +14 -9
  20. package/src/core/binary/utf8/utf8_decode.js +3 -3
  21. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
  22. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
  23. package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
  24. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
  25. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  26. package/src/core/collection/RingBuffer.js +4 -0
  27. package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
  28. package/src/core/collection/array/array_contains_duplicates.js +2 -1
  29. package/src/core/collection/array/array_copy.d.ts.map +1 -1
  30. package/src/core/collection/array/array_copy.js +23 -0
  31. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
  32. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
  34. package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
  35. package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
  36. package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
  37. package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
  38. package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
  39. package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
  40. package/src/core/collection/array/weightedRandomFromArray.js +9 -1
  41. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  42. package/src/core/collection/heap/BinaryHeap.js +4 -0
  43. package/src/core/collection/list/List.d.ts.map +1 -1
  44. package/src/core/collection/list/List.js +4 -2
  45. package/src/core/collection/set/ArraySet.js +1 -1
  46. package/src/core/collection/set/HashSet.d.ts +1 -1
  47. package/src/core/collection/set/HashSet.d.ts.map +1 -1
  48. package/src/core/collection/set/HashSet.js +4 -2
  49. package/src/core/debug/matchers/IsEqual.js +1 -1
  50. package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
  51. package/src/core/debug/matchers/IsIterableContaining.js +61 -74
  52. package/src/core/events/signal/SignalBinding.js +101 -101
  53. package/src/core/function/extractFunctionBody.js +13 -13
  54. package/src/core/function/objectsEqual.d.ts.map +1 -1
  55. package/src/core/function/objectsEqual.js +15 -14
  56. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  57. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
  58. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  59. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
  60. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  61. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
  62. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
  63. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
  64. package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
  65. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
  66. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
  67. package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
  68. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
  69. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
  70. package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
  71. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
  72. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  73. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
  74. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
  75. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
  76. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
  77. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
  78. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
  79. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
  80. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
  81. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
  82. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
  83. package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
  84. package/src/core/math/noise/curl_noise_3dt.js +20 -10
  85. package/src/core/math/noise/sdnoise.d.ts +16 -5
  86. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  87. package/src/core/math/noise/sdnoise.js +43 -9
  88. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
  89. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  90. package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
  91. package/src/engine/Engine.d.ts.map +1 -1
  92. package/src/engine/Engine.js +6 -2
  93. package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
  94. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  95. package/src/engine/animation/curve/AnimationCurve.js +6 -1
  96. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
  97. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  98. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
  99. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  100. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
  101. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  102. package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
  103. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  104. package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
  105. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  106. package/src/engine/control/first-person/abilities/Slide.js +1 -0
  107. package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
  108. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  109. package/src/engine/control/first-person/abilities/WallRun.js +13 -1
  110. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
  111. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  112. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
  113. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
  114. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  115. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
  116. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  117. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
  118. package/src/engine/ecs/EntityManager.d.ts +9 -1
  119. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  120. package/src/engine/ecs/EntityManager.js +44 -42
  121. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  122. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
  123. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
  124. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
  125. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  126. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
  127. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
  128. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
  129. package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
  130. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
  131. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
  132. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
  133. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
  134. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
  135. package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
  136. package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
  137. package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
  138. package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
  139. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
  140. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
  141. package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
  142. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
  143. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
  144. package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
  145. package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
  146. package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
  147. package/src/engine/ecs/ik/IKGoal.js +83 -0
  148. package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
  149. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
  150. package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
  151. package/src/engine/ecs/ik/PLAN.md +179 -0
  152. package/src/engine/ecs/parent/EntityNode.js +3 -3
  153. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  154. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  155. package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
  156. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
  157. package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
  158. package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
  159. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
  160. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
  161. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
  162. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
  163. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
  164. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
  165. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  166. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +9 -2
  167. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
  168. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
  169. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
  170. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  171. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
  172. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  173. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
  174. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  175. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
  176. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
  177. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  178. package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
  179. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  180. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
  181. package/src/engine/ecs/transform/T64WorldCache.js +139 -139
  182. package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
  183. package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
  184. package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
  185. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
  186. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
  187. package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
  188. package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
  189. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
  190. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
  191. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
  192. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
  193. package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
  194. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  195. package/src/engine/graphics/ecs/water/Water.js +17 -0
  196. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  197. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
  198. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
  199. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
  200. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
  201. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
  202. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
  203. package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
  204. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
  205. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
  206. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
  207. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
  208. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
  209. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  210. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
  211. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
  212. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
  213. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
  214. package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
  215. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  216. package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
  217. package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
  218. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  219. package/src/engine/graphics3/AnimationSystem.js +360 -352
  220. package/src/engine/graphics3/WaterSystem.d.ts +12 -3
  221. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  222. package/src/engine/graphics3/WaterSystem.js +78 -46
  223. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  224. package/src/engine/input/devices/PointerDevice.js +29 -4
  225. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
  226. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
  227. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
  228. package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
  229. package/src/engine/physics/cloth/PLAN.md +16 -1
  230. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
  231. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  232. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
  233. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
  234. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
  236. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
  237. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  238. package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
  239. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  240. package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
  241. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
  242. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  243. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
  244. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
  245. package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
  246. package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
  247. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  248. package/src/engine/physics/constraint/solve_constraints.js +1 -83
  249. package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
  250. package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
  251. package/src/engine/physics/ecs/ContactProbe.js +103 -0
  252. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
  253. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
  254. package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
  255. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
  256. package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
  257. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  258. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  259. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
  260. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  261. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
  262. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
  263. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
  264. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
  265. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  266. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
  267. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
  268. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
  269. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
  270. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
  271. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
  272. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
  273. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
  274. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
  275. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
  276. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
  277. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
  278. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
  279. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
  280. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
  281. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
  282. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
  283. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
  284. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
  285. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
  286. package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
  287. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
  288. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  289. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
  290. package/src/engine/ui/DraggableAspect.d.ts +5 -1
  291. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  292. package/src/engine/ui/DraggableAspect.js +61 -4
  293. package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
  294. package/src/format/image/avif/heif/ItemProperty.js +1 -1
  295. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  296. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
  297. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
  298. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  299. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
  300. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  301. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
  302. package/src/shade/playground/water_refraction/README.md +10 -11
  303. package/src/shade/playground/water_refraction/main.js +9 -8
  304. package/src/shade/playground/water_refraction/world.js +1 -1
  305. package/src/shade/playground/water_surface/README.md +43 -0
  306. package/src/shade/playground/water_surface/index.html +30 -0
  307. package/src/shade/playground/water_surface/main.d.ts +2 -0
  308. package/src/shade/playground/water_surface/main.d.ts.map +1 -0
  309. package/src/shade/playground/water_surface/main.js +154 -0
  310. package/src/shade/playground/water_surface/world.d.ts +44 -0
  311. package/src/shade/playground/water_surface/world.d.ts.map +1 -0
  312. package/src/shade/playground/water_surface/world.js +160 -0
  313. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
  314. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
  315. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +10 -4
  316. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  317. package/src/shade/renderer/animation/GPUAnimationManager.js +251 -23
  318. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
  319. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  320. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
  321. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  322. package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
  323. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
  324. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
  325. package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
  326. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
  327. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  328. package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
  329. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
  330. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  331. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
  332. package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
  333. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
  334. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  335. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
  336. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  337. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
  338. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  339. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  340. package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
  341. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
  342. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  343. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
  344. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
  345. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
  346. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
  347. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
  348. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  349. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
  350. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
  351. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  352. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
  353. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
  354. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
  355. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  356. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
  357. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  358. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
  359. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  360. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
  361. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  362. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
  363. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  364. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
  365. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
  366. package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
  367. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
  368. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  369. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
  370. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  371. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
  372. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
  373. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  374. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
  375. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
  376. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  377. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
  378. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
  379. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
  380. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
  381. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
  382. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
  383. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
  384. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
  385. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
  386. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
  387. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
  388. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  389. package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
  390. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
  391. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
  393. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
  394. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
  396. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  397. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
  398. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
  399. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  400. package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
  401. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
  402. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  403. package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
  404. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
  405. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
  406. package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
  407. package/src/shade/renderer/water/shader_water.d.ts +0 -1
  408. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  409. package/src/shade/renderer/water/shader_water.js +201 -72
  410. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
  411. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
  412. package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
  413. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
  414. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
  415. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
  416. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
  417. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
  418. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
  419. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
  420. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  421. package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
  422. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
  423. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
  424. package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
  425. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
  426. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
  427. package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
  428. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
  429. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
  430. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
  431. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
  432. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
  433. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
  434. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
  435. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
  436. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
  437. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
  438. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
  439. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
  440. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
  441. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
  442. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
  443. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
  444. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
  445. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
  446. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
  447. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
  448. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
  449. package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
  450. package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
  451. package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
  452. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
  453. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
  454. package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
  455. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
  456. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
  457. package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
  458. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
  459. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
  460. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
  461. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
  462. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
  463. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
  464. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
  465. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
  466. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
  467. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
  468. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
  469. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
  470. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
  471. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
  472. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
  473. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
  474. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
  475. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
  476. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  477. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
  478. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  479. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
  480. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
  481. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
  482. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
  483. package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
  484. package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
  485. package/src/engine/ecs/ik/IKConstraint.js +0 -95
  486. package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
  487. package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
  488. package/src/engine/ecs/ik/IKProblem.js +0 -58
  489. package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
  490. package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
  491. package/src/engine/ecs/ik/IKSolver.js +0 -9
  492. package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
  493. package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
  494. package/src/engine/ecs/ik/InverseKinematics.js +0 -119
  495. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
  496. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
  497. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
  498. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
  499. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
  500. package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
  501. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
  502. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
  503. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
  504. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
  505. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
  506. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
  507. package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
  508. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
  509. package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
  510. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
  511. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
  512. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
  513. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
  514. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
  515. package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
  516. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
  517. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
  518. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
  519. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
  520. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
  521. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
  522. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
  523. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
  524. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
  525. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
  526. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
  527. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
  528. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
  529. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
  530. package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
  531. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
  532. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
  533. package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
  534. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
  535. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
  536. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
  537. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
  538. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
  539. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Finds where a cast from a reference meets the world, and puts the entity it is on there.
3
+ *
4
+ * Every tick {@link ContactProbeSystem} casts a sphere of {@link radius} — a ray, at 0 — from the
5
+ * reference's world position plus {@link offset}, along {@link direction}, for {@link distance}, through
6
+ * the physics system's colliders. On a hit the entity is placed at the contact on the surface, turned
7
+ * as the reference is and tilted so the reference's up is the surface's normal. On a miss it is placed
8
+ * where the reference is. It knows nothing about who reads it: a foot reaching for the ground, a decal,
9
+ * an AI checking its footing.
10
+ *
11
+ * - The entity is placed through its own {@link TransformAttachment}, whose parent is up to the rig.
12
+ * - The character's own colliders are passed through: those whose lifetime ({@link ParentEntity})
13
+ * leads to the same root as the probe's own.
14
+ * - The reference may be a bone a clip drives: its pose is evaluated exactly, as the GPU shows it. It
15
+ * must not be a bone a CPU writer holds (IK, cloth), or the probe would read that writer's answer
16
+ * and the writer would chase its own output.
17
+ *
18
+ * Entity ids are transient, so this is never saved.
19
+ *
20
+ * @author Alex Goldring
21
+ * @copyright Company Named Limited (c) 2026
22
+ */
23
+ export class ContactProbe {
24
+ /**
25
+ * @param {{reference:number, offset:number[], direction:number[], distance:number, radius:number}} options
26
+ * every field required
27
+ * @returns {ContactProbe}
28
+ */
29
+ static from({ reference, offset, direction, distance, radius }: {
30
+ reference: number;
31
+ offset: number[];
32
+ direction: number[];
33
+ distance: number;
34
+ radius: number;
35
+ }): ContactProbe;
36
+ /**
37
+ * The entity the cast starts from.
38
+ * @type {number}
39
+ */
40
+ reference: number;
41
+ /**
42
+ * Where the cast starts, relative to the reference's world position, in world axes.
43
+ * @readonly
44
+ * @type {Float64Array}
45
+ */
46
+ readonly offset: Float64Array;
47
+ /**
48
+ * Which way the cast goes, in world, of unit length.
49
+ * @readonly
50
+ * @type {Float64Array}
51
+ */
52
+ readonly direction: Float64Array;
53
+ /**
54
+ * How far the cast reaches.
55
+ * @type {number}
56
+ */
57
+ distance: number;
58
+ /**
59
+ * The radius of the sphere cast; 0 casts a ray.
60
+ * @type {number}
61
+ */
62
+ radius: number;
63
+ /**
64
+ * Whether the last cast met anything. Written by {@link ContactProbeSystem}.
65
+ * @type {boolean}
66
+ */
67
+ hit: boolean;
68
+ }
69
+ export namespace ContactProbe {
70
+ let typeName: string;
71
+ let serializable: boolean;
72
+ }
73
+ //# sourceMappingURL=ContactProbe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactProbe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbe.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAuCI;;;;OAIG;IACH,gEAJW;QAAC,SAAS,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,SAAS,EAAC,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,CAAA;KAAC,GAErF,YAAY,CAuBxB;IAhED;;;OAGG;IACH,WAFU,MAAM,CAED;IAEf;;;;OAIG;IACH,iBAFU,YAAY,CAEO;IAE7B;;;;OAIG;IACH,oBAFU,YAAY,CAEgB;IAEtC;;;OAGG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,KAFU,OAAO,CAEL;CA6Bf;;kBAIS,MAAM;sBAMN,OAAO"}
@@ -0,0 +1,103 @@
1
+ import { assert } from "../../../core/assert.js";
2
+
3
+ /**
4
+ * Finds where a cast from a reference meets the world, and puts the entity it is on there.
5
+ *
6
+ * Every tick {@link ContactProbeSystem} casts a sphere of {@link radius} — a ray, at 0 — from the
7
+ * reference's world position plus {@link offset}, along {@link direction}, for {@link distance}, through
8
+ * the physics system's colliders. On a hit the entity is placed at the contact on the surface, turned
9
+ * as the reference is and tilted so the reference's up is the surface's normal. On a miss it is placed
10
+ * where the reference is. It knows nothing about who reads it: a foot reaching for the ground, a decal,
11
+ * an AI checking its footing.
12
+ *
13
+ * - The entity is placed through its own {@link TransformAttachment}, whose parent is up to the rig.
14
+ * - The character's own colliders are passed through: those whose lifetime ({@link ParentEntity})
15
+ * leads to the same root as the probe's own.
16
+ * - The reference may be a bone a clip drives: its pose is evaluated exactly, as the GPU shows it. It
17
+ * must not be a bone a CPU writer holds (IK, cloth), or the probe would read that writer's answer
18
+ * and the writer would chase its own output.
19
+ *
20
+ * Entity ids are transient, so this is never saved.
21
+ *
22
+ * @author Alex Goldring
23
+ * @copyright Company Named Limited (c) 2026
24
+ */
25
+ export class ContactProbe {
26
+ /**
27
+ * The entity the cast starts from.
28
+ * @type {number}
29
+ */
30
+ reference = -1;
31
+
32
+ /**
33
+ * Where the cast starts, relative to the reference's world position, in world axes.
34
+ * @readonly
35
+ * @type {Float64Array}
36
+ */
37
+ offset = new Float64Array(3);
38
+
39
+ /**
40
+ * Which way the cast goes, in world, of unit length.
41
+ * @readonly
42
+ * @type {Float64Array}
43
+ */
44
+ direction = Float64Array.of(0, -1, 0);
45
+
46
+ /**
47
+ * How far the cast reaches.
48
+ * @type {number}
49
+ */
50
+ distance = 0;
51
+
52
+ /**
53
+ * The radius of the sphere cast; 0 casts a ray.
54
+ * @type {number}
55
+ */
56
+ radius = 0;
57
+
58
+ /**
59
+ * Whether the last cast met anything. Written by {@link ContactProbeSystem}.
60
+ * @type {boolean}
61
+ */
62
+ hit = false;
63
+
64
+ /**
65
+ * @param {{reference:number, offset:number[], direction:number[], distance:number, radius:number}} options
66
+ * every field required
67
+ * @returns {ContactProbe}
68
+ */
69
+ static from({ reference, offset, direction, distance, radius }) {
70
+ assert.isNonNegativeInteger(reference, 'reference');
71
+ assert.equal(offset.length, 3, 'offset is [x, y, z]');
72
+ assert.equal(direction.length, 3, 'direction is [x, y, z]');
73
+ assert.ok(Math.abs(Math.hypot(direction[0], direction[1], direction[2]) - 1) < 1e-9, 'direction is of unit length');
74
+ assert.ok(distance > 0, 'distance is positive');
75
+ assert.ok(radius >= 0, 'radius is not negative');
76
+
77
+ const probe = new ContactProbe();
78
+
79
+ probe.reference = reference;
80
+ probe.offset[0] = offset[0];
81
+ probe.offset[1] = offset[1];
82
+ probe.offset[2] = offset[2];
83
+ probe.direction[0] = direction[0];
84
+ probe.direction[1] = direction[1];
85
+ probe.direction[2] = direction[2];
86
+ probe.distance = distance;
87
+ probe.radius = radius;
88
+
89
+ return probe;
90
+ }
91
+ }
92
+
93
+ /**
94
+ * @readonly
95
+ * @type {string}
96
+ */
97
+ ContactProbe.typeName = "ContactProbe";
98
+
99
+ /**
100
+ * Entity ids are transient: serialization is not applicable.
101
+ * @type {boolean}
102
+ */
103
+ ContactProbe.serializable = false;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Casts each {@link ContactProbe} and places its entity at what the cast meets.
3
+ *
4
+ * Runs in `update`, where the clips' times for the tick are set: a reference a clip drives is
5
+ * evaluated exactly (`T64WorldCache`), as the GPU draws it.
6
+ *
7
+ * **Register it before a system that reads where it puts its entities** and that writes
8
+ * `TransformAttachment` too, IK's among them. Both read and write `TransformAttachment`, so the
9
+ * order declared access derives leaves the two a cycle, and between them the scheduler keeps the
10
+ * order they were registered in.
11
+ *
12
+ * @author Alex Goldring
13
+ * @copyright Company Named Limited (c) 2026
14
+ */
15
+ export class ContactProbeSystem extends System<any> {
16
+ constructor();
17
+ dependencies: (typeof TransformAttachment | typeof ContactProbe)[];
18
+ components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof AnimationGraphController> | ResourceAccessSpecification<typeof Animation> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof ContactProbe>)[];
19
+ /**
20
+ * @param {ContactProbe} probe
21
+ * @param {TransformAttachment} attachment
22
+ * @param {number} entity
23
+ */
24
+ link(probe: ContactProbe, attachment: TransformAttachment, entity: number): void;
25
+ /**
26
+ * @param {ContactProbe} probe
27
+ * @param {TransformAttachment} attachment
28
+ * @param {number} entity
29
+ */
30
+ unlink(probe: ContactProbe, attachment: TransformAttachment, entity: number): void;
31
+ update(time_delta_seconds: any): void;
32
+ #private;
33
+ }
34
+ import { System } from "../../ecs/System.js";
35
+ import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
36
+ import { ContactProbe } from "./ContactProbe.js";
37
+ import { Transform64 } from "../../ecs/transform/Transform64.js";
38
+ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
39
+ import { Collider } from "./Collider.js";
40
+ import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
41
+ import { Animation } from "../../ecs/animation/Animation.js";
42
+ import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
43
+ import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
44
+ //# sourceMappingURL=ContactProbeSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"AAqEA;;;;;;;;;;;;;GAaG;AACH;;IAEI,mEAAmD;IAEnD,2bASE;IAyCF;;;;OAIG;IACH,YAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAUhB;IAED;;;;OAIG;IACH,cAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAWhB;IAED,sCA2BC;;CAiKJ;uBA1VsB,qBAAqB;oCAER,uDAAuD;6BAY9D,mBAAmB;4BALzC,oCAAoC;4CAbC,oDAAoD;yBAiBvE,eAAe;yCAHC,uDAAuD;0BAbtE,kCAAkC;kCAC1B,oCAAoC;6BACzC,kCAAkC"}
@@ -0,0 +1,397 @@
1
+ import { quat3_multiply } from "../../../core/geom/3d/quaternion/quat3_multiply.js";
2
+ import { quat3_shortest_arc } from "../../../core/geom/3d/quaternion/quat3_shortest_arc.js";
3
+ import { Ray3 } from "../../../core/geom/3d/ray/Ray3.js";
4
+ import { SphereShape3D } from "../../../core/geom/3d/shape/SphereShape3D.js";
5
+ import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
6
+ import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
7
+ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
8
+ import { Animation } from "../../ecs/animation/Animation.js";
9
+ import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
10
+ import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
11
+ import { System } from "../../ecs/System.js";
12
+ import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "../../ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
13
+ import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
14
+ import { T64WorldCache } from "../../ecs/transform/T64WorldCache.js";
15
+ import {
16
+ Transform64,
17
+ TRANSFORM64_ROTATION_OFFSET,
18
+ TRANSFORM64_SCALE_OFFSET,
19
+ TRANSFORM64_TRANSLATION_OFFSET
20
+ } from "../../ecs/transform/Transform64.js";
21
+ import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
22
+ import { collect_entity_playbacks } from "../../graphics3/pose/collect_entity_playbacks.js";
23
+ import { PhysicsSurfacePoint } from "../queries/PhysicsSurfacePoint.js";
24
+ import { Collider } from "./Collider.js";
25
+ import { ContactProbe } from "./ContactProbe.js";
26
+ import { PhysicsSystem } from "./PhysicsSystem.js";
27
+
28
+ /**
29
+ * One linked probe and what its casts need.
30
+ */
31
+ class ProbeRecord {
32
+ /**
33
+ * @type {number}
34
+ */
35
+ entity = -1;
36
+
37
+ /**
38
+ * @type {ContactProbe|null}
39
+ */
40
+ probe = null;
41
+
42
+ /**
43
+ * @type {TransformAttachment|null}
44
+ */
45
+ attachment = null;
46
+
47
+ /**
48
+ * The sphere a non-zero radius casts.
49
+ * @type {SphereShape3D}
50
+ */
51
+ sphere = SphereShape3D.from(1);
52
+ }
53
+
54
+ const ray = new Ray3();
55
+ const surface = new PhysicsSurfacePoint();
56
+
57
+ const reference_world = new Transform64();
58
+ const parent_world = new Transform64();
59
+
60
+ const scratch_q = new Float64Array(4);
61
+ const scratch_arc = new Float64Array(4);
62
+ const scratch_v = new Float64Array(3);
63
+
64
+ /**
65
+ * The cast's sphere turns with nothing: its orientation is the identity.
66
+ * @type {Float64Array}
67
+ */
68
+ const NO_TURN = Float64Array.of(0, 0, 0, 1);
69
+
70
+ /**
71
+ * Casts each {@link ContactProbe} and places its entity at what the cast meets.
72
+ *
73
+ * Runs in `update`, where the clips' times for the tick are set: a reference a clip drives is
74
+ * evaluated exactly (`T64WorldCache`), as the GPU draws it.
75
+ *
76
+ * **Register it before a system that reads where it puts its entities** and that writes
77
+ * `TransformAttachment` too, IK's among them. Both read and write `TransformAttachment`, so the
78
+ * order declared access derives leaves the two a cycle, and between them the scheduler keeps the
79
+ * order they were registered in.
80
+ *
81
+ * @author Alex Goldring
82
+ * @copyright Company Named Limited (c) 2026
83
+ */
84
+ export class ContactProbeSystem extends System {
85
+
86
+ dependencies = [ContactProbe, TransformAttachment];
87
+
88
+ components_used = [
89
+ ResourceAccessSpecification.from(ContactProbe, ResourceAccessKind.Read | ResourceAccessKind.Write),
90
+ ResourceAccessSpecification.from(TransformAttachment, ResourceAccessKind.Read | ResourceAccessKind.Write),
91
+ ResourceAccessSpecification.from(Transform64, ResourceAccessKind.Read),
92
+ ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read),
93
+ ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
94
+ ResourceAccessSpecification.from(Collider, ResourceAccessKind.Read),
95
+ ResourceAccessSpecification.from(Animation, ResourceAccessKind.Read),
96
+ ResourceAccessSpecification.from(AnimationGraphController, ResourceAccessKind.Read),
97
+ ];
98
+
99
+ /**
100
+ * @type {ProbeRecord[]}
101
+ */
102
+ #records = [];
103
+
104
+ /**
105
+ * The root of the probe being cast: colliders whose lifetime leads to it are passed through.
106
+ * @type {number}
107
+ */
108
+ #owner = -1;
109
+
110
+ /**
111
+ * {@link #accept}, bound once.
112
+ * @type {function(number, Collider):boolean}
113
+ */
114
+ #filter = (entity, collider) => this.#accept(entity);
115
+
116
+ /**
117
+ * Exact worlds per model, for one tick.
118
+ * @type {Map<number, T64WorldCache>}
119
+ */
120
+ #caches = new Map();
121
+
122
+ /**
123
+ * @type {T64WorldCache[]}
124
+ */
125
+ #cache_list = [];
126
+
127
+ /**
128
+ * @type {Map<number, PosePlayback[]>}
129
+ */
130
+ #playbacks = new Map();
131
+
132
+ /**
133
+ * Which models' playbacks were collected this tick.
134
+ * @type {Set<number>}
135
+ */
136
+ #collected = new Set();
137
+
138
+ /**
139
+ * @param {ContactProbe} probe
140
+ * @param {TransformAttachment} attachment
141
+ * @param {number} entity
142
+ */
143
+ link(probe, attachment, entity) {
144
+ const record = new ProbeRecord();
145
+
146
+ record.entity = entity;
147
+ record.probe = probe;
148
+ record.attachment = attachment;
149
+
150
+ this.#records.push(record);
151
+ }
152
+
153
+ /**
154
+ * @param {ContactProbe} probe
155
+ * @param {TransformAttachment} attachment
156
+ * @param {number} entity
157
+ */
158
+ unlink(probe, attachment, entity) {
159
+ const records = this.#records;
160
+
161
+ for (let i = 0; i < records.length; i++) {
162
+ if (records[i].entity === entity) {
163
+ records.splice(i, 1);
164
+ return;
165
+ }
166
+ }
167
+ }
168
+
169
+ update(time_delta_seconds) {
170
+ const em = this.entityManager;
171
+ const dataset = em.dataset;
172
+
173
+ if (dataset === null || dataset === undefined) {
174
+ return;
175
+ }
176
+
177
+ const physics = em.getSystem(PhysicsSystem);
178
+
179
+ if (physics === null) {
180
+ return;
181
+ }
182
+
183
+ const caches = this.#cache_list;
184
+
185
+ for (let i = 0; i < caches.length; i++) {
186
+ caches[i].invalidate();
187
+ }
188
+
189
+ this.#collected.clear();
190
+
191
+ const records = this.#records;
192
+
193
+ for (let i = 0; i < records.length; i++) {
194
+ this.#cast(records[i], physics, dataset);
195
+ }
196
+ }
197
+
198
+ /**
199
+ * @param {number} entity
200
+ * @returns {boolean} whether the cast may stop at this body
201
+ */
202
+ #accept(entity) {
203
+ return root_of(this.entityManager.dataset, entity) !== this.#owner;
204
+ }
205
+
206
+ /**
207
+ * @param {ProbeRecord} record
208
+ * @param {PhysicsSystem} physics
209
+ * @param {EntityComponentDataset} dataset
210
+ */
211
+ #cast(record, physics, dataset) {
212
+ const probe = record.probe;
213
+ const reference = probe.reference;
214
+
215
+ if (!dataset.entityExists(reference)) {
216
+ probe.hit = false;
217
+ return;
218
+ }
219
+
220
+ this.#world_of(reference_world, reference);
221
+
222
+ const ox = reference_world[TRANSFORM64_TRANSLATION_OFFSET] + probe.offset[0];
223
+ const oy = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 1] + probe.offset[1];
224
+ const oz = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 2] + probe.offset[2];
225
+
226
+ const dx = probe.direction[0], dy = probe.direction[1], dz = probe.direction[2];
227
+
228
+ ray.setOrigin(ox, oy, oz);
229
+ ray.setDirection(dx, dy, dz);
230
+ ray.tMax = probe.distance;
231
+
232
+ this.#owner = root_of(dataset, record.entity);
233
+
234
+ let hit;
235
+
236
+ if (probe.radius === 0) {
237
+ hit = physics.raycast(ray, surface, this.#filter);
238
+ } else {
239
+ record.sphere.radius = probe.radius;
240
+
241
+ hit = physics.shapeCast(ray, record.sphere, NO_TURN, surface, this.#filter);
242
+ }
243
+
244
+ probe.hit = hit;
245
+
246
+ // where the entity goes, and how it is turned, in world
247
+ let px, py, pz;
248
+
249
+ const rx = reference_world[TRANSFORM64_ROTATION_OFFSET];
250
+ const ry = reference_world[TRANSFORM64_ROTATION_OFFSET + 1];
251
+ const rz = reference_world[TRANSFORM64_ROTATION_OFFSET + 2];
252
+ const rw = reference_world[TRANSFORM64_ROTATION_OFFSET + 3];
253
+
254
+ if (hit) {
255
+ const nx = surface.normal[0], ny = surface.normal[1], nz = surface.normal[2];
256
+
257
+ // a sphere's centre stands off the surface by its radius
258
+ px = surface.position[0] - nx * probe.radius;
259
+ py = surface.position[1] - ny * probe.radius;
260
+ pz = surface.position[2] - nz * probe.radius;
261
+
262
+ // the reference, tilted so that its up is the surface's
263
+ quat3_shortest_arc(scratch_arc, 0, 0, 1, 0, nx, ny, nz);
264
+ quat3_multiply(scratch_q, 0, scratch_arc[0], scratch_arc[1], scratch_arc[2], scratch_arc[3], rx, ry, rz, rw);
265
+ } else {
266
+ px = reference_world[TRANSFORM64_TRANSLATION_OFFSET];
267
+ py = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 1];
268
+ pz = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 2];
269
+
270
+ scratch_q[0] = rx;
271
+ scratch_q[1] = ry;
272
+ scratch_q[2] = rz;
273
+ scratch_q[3] = rw;
274
+ }
275
+
276
+ this.#place(record, px, py, pz, dataset);
277
+ }
278
+
279
+ /**
280
+ * Write the entity's offset so its world pose is `p` turned by `scratch_q`.
281
+ *
282
+ * @param {ProbeRecord} record
283
+ * @param {number} px
284
+ * @param {number} py
285
+ * @param {number} pz
286
+ * @param {EntityComponentDataset} dataset
287
+ */
288
+ #place(record, px, py, pz, dataset) {
289
+ const parent = record.attachment.parent;
290
+
291
+ this.#world_of(parent_world, parent);
292
+
293
+ // conj(R_p)
294
+ const cx = -parent_world[TRANSFORM64_ROTATION_OFFSET];
295
+ const cy = -parent_world[TRANSFORM64_ROTATION_OFFSET + 1];
296
+ const cz = -parent_world[TRANSFORM64_ROTATION_OFFSET + 2];
297
+ const cw = parent_world[TRANSFORM64_ROTATION_OFFSET + 3];
298
+
299
+ // uniform scale, as TransformAttachment composes
300
+ const inverse_scale = 1 / parent_world[TRANSFORM64_SCALE_OFFSET];
301
+
302
+ v3_quaternion_apply(
303
+ scratch_v, 0,
304
+ (px - parent_world[TRANSFORM64_TRANSLATION_OFFSET]) * inverse_scale,
305
+ (py - parent_world[TRANSFORM64_TRANSLATION_OFFSET + 1]) * inverse_scale,
306
+ (pz - parent_world[TRANSFORM64_TRANSLATION_OFFSET + 2]) * inverse_scale,
307
+ cx, cy, cz, cw
308
+ );
309
+
310
+ quat3_multiply(scratch_arc, 0, cx, cy, cz, cw, scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
311
+
312
+ const local = record.attachment.transform;
313
+
314
+ local.setTranslation(scratch_v[0], scratch_v[1], scratch_v[2]);
315
+ local.setRotation(scratch_arc[0], scratch_arc[1], scratch_arc[2], scratch_arc[3]);
316
+ local.updateMatrix();
317
+
318
+ dataset.sendEvent(record.entity, TRANSFORM_ATTACHMENT_EVENT_CHANGE);
319
+ }
320
+
321
+ /**
322
+ * The entity's world pose this tick, exactly, under its own model's clips.
323
+ *
324
+ * @param {Transform64} result
325
+ * @param {number} entity
326
+ */
327
+ #world_of(result, entity) {
328
+ const dataset = this.entityManager.dataset;
329
+
330
+ const model = model_of(dataset, entity);
331
+
332
+ let cache = this.#caches.get(model);
333
+
334
+ if (cache === undefined) {
335
+ cache = new T64WorldCache();
336
+ this.#caches.set(model, cache);
337
+ this.#cache_list.push(cache);
338
+ }
339
+
340
+ let playbacks = this.#playbacks.get(model);
341
+
342
+ if (playbacks === undefined) {
343
+ playbacks = [];
344
+ this.#playbacks.set(model, playbacks);
345
+ }
346
+
347
+ if (!this.#collected.has(model)) {
348
+ this.#collected.add(model);
349
+
350
+ playbacks.length = 0;
351
+
352
+ collect_entity_playbacks(playbacks, this.entityManager, model);
353
+ }
354
+
355
+ cache.evaluate(result, dataset, entity, playbacks);
356
+ }
357
+ }
358
+
359
+ /**
360
+ * The entity whose clips drive `entity`: the model its lifetime belongs to, or itself.
361
+ *
362
+ * @param {EntityComponentDataset} dataset
363
+ * @param {number} entity
364
+ * @returns {number}
365
+ */
366
+ function model_of(dataset, entity) {
367
+ const owner = dataset.getComponent(entity, ParentEntity);
368
+
369
+ if (owner === undefined || owner === null) {
370
+ return entity;
371
+ }
372
+
373
+ return owner.entity;
374
+ }
375
+
376
+ /**
377
+ * The top of the lifetime chain an entity belongs to.
378
+ *
379
+ * @param {EntityComponentDataset} dataset
380
+ * @param {number} entity
381
+ * @returns {number}
382
+ */
383
+ function root_of(dataset, entity) {
384
+ let e = entity;
385
+
386
+ for (let guard = 0; guard < 1024; guard++) {
387
+ const owner = dataset.getComponent(e, ParentEntity);
388
+
389
+ if (owner === undefined || owner === null || owner.entity < 0) {
390
+ return e;
391
+ }
392
+
393
+ e = owner.entity;
394
+ }
395
+
396
+ return e;
397
+ }
@@ -20,7 +20,7 @@
20
20
  * origin} becomes system-managed in this case.
21
21
  *
22
22
  * NOTE on layout: sibling physics ECS code lives under `engine/ecs/*` (see
23
- * `engine/ecs/ik/InverseKinematicsSystem.js`). This component is placed inside the
23
+ * `engine/ecs/ik/IKGoalSystem.js`). This component is placed inside the
24
24
  * fluid package because edits to the ECS folder were out-of-scope when it was first
25
25
  * written. Moving it under `engine/ecs/fluid/` later is a pure relocation.
26
26
  */
@@ -24,7 +24,7 @@ import { FluidField } from "../FluidField.js";
24
24
  * origin} becomes system-managed in this case.
25
25
  *
26
26
  * NOTE on layout: sibling physics ECS code lives under `engine/ecs/*` (see
27
- * `engine/ecs/ik/InverseKinematicsSystem.js`). This component is placed inside the
27
+ * `engine/ecs/ik/IKGoalSystem.js`). This component is placed inside the
28
28
  * fluid package because edits to the ECS folder were out-of-scope when it was first
29
29
  * written. Moving it under `engine/ecs/fluid/` later is a pure relocation.
30
30
  */
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
66
66
  /**
67
67
  * @param {FluidComponent} fluid
68
68
  */
69
- static "__#423@#refresh_masks"(fluid: FluidComponent): void;
69
+ static "__#429@#refresh_masks"(fluid: FluidComponent): void;
70
70
  /**
71
71
  * @param {FluidComponent} fluid
72
72
  */
73
- static "__#423@#clear_field"(fluid: FluidComponent): void;
73
+ static "__#429@#clear_field"(fluid: FluidComponent): void;
74
74
  /**
75
75
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
76
76
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
82
82
  * @param {number} inflation world-units SDF threshold
83
83
  * @param {Float64Array} point length-3 scratch
84
84
  */
85
- static "__#423@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
85
+ static "__#429@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
86
86
  /**
87
87
  * Write the obstacle's translation velocity onto every face of every cell
88
88
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
102
102
  * @param {number} wvy
103
103
  * @param {number} wvz
104
104
  */
105
- static "__#423@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
105
+ static "__#429@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
106
106
  constructor();
107
107
  dependencies: (typeof FluidObstacle)[];
108
108
  components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
@@ -1 +1 @@
1
- {"version":3,"file":"v3_grid_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,4DAbW,YAAY,EAAE,WACd,YAAY,EAAE,aACd,YAAY,aACZ,YAAY,aACZ,YAAY,mBACZ,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAgHpB"}
1
+ {"version":3,"file":"v3_grid_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,4DAbW,YAAY,EAAE,WACd,YAAY,EAAE,aACd,YAAY,aACZ,YAAY,aACZ,YAAY,mBACZ,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAuHpB"}