@woosh/meep-engine 3.44.0 → 3.46.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 (447) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/assert.d.ts.map +1 -1
  4. package/src/core/assert.js +5 -1
  5. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  6. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  7. package/src/core/binary/hash/XXH128Hash.js +4 -55
  8. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  9. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  10. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  11. package/src/core/binary/hash/crc32.d.ts +1 -15
  12. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  13. package/src/core/binary/hash/crc32.js +4 -96
  14. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  15. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  16. package/src/core/binary/hash/xxh3_128.js +4 -341
  17. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  18. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  19. package/src/core/binary/hash/xxh3_64.js +4 -241
  20. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  21. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  22. package/src/core/binary/hash/xxh3_common.js +90 -476
  23. package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
  24. package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
  25. package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
  26. package/src/core/collection/array/combine_hash.d.ts +6 -0
  27. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  28. package/src/core/collection/array/combine_hash.js +6 -0
  29. package/src/core/function/FunctionCompiler.js +2 -2
  30. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
  31. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
  32. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
  33. package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
  34. package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
  35. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
  36. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
  37. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
  38. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  39. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  40. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  41. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  42. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  43. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  44. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
  45. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
  46. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
  47. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
  48. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
  49. package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
  50. package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
  51. package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
  52. package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
  53. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
  54. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
  55. package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
  56. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
  57. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
  58. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
  59. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
  60. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
  61. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
  62. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
  63. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
  64. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
  65. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
  66. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
  67. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
  68. package/src/core/geom/ConicRay.js +2 -2
  69. package/src/core/geom/Vector4.d.ts.map +1 -1
  70. package/src/core/geom/Vector4.js +8 -5
  71. package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
  72. package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
  73. package/src/core/geom/vec3/v3_distance_array.js +19 -0
  74. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
  75. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
  76. package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
  77. package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
  78. package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
  79. package/src/core/geom/vec3/v3_reject_array.js +32 -0
  80. package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
  81. package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
  82. package/src/core/graph/csr/csr_build_incidence.js +71 -0
  83. package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
  84. package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
  85. package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
  86. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
  87. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
  88. package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
  89. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  90. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  91. package/src/core/math/hash/XXH128Hash.js +55 -0
  92. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  93. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  94. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  95. package/src/core/math/hash/crc32.d.ts +16 -0
  96. package/src/core/math/hash/crc32.d.ts.map +1 -0
  97. package/src/core/math/hash/crc32.js +96 -0
  98. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  99. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  100. package/src/core/math/hash/xxh3_128.js +341 -0
  101. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  102. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  103. package/src/core/math/hash/xxh3_64.js +241 -0
  104. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  105. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  106. package/src/core/math/hash/xxh3_common.js +476 -0
  107. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
  108. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
  109. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
  110. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  111. package/src/core/math/max2_exact.d.ts +15 -0
  112. package/src/core/math/max2_exact.d.ts.map +1 -0
  113. package/src/core/math/max2_exact.js +30 -0
  114. package/src/core/math/min2_exact.d.ts +20 -0
  115. package/src/core/math/min2_exact.d.ts.map +1 -0
  116. package/src/core/math/min2_exact.js +35 -0
  117. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  118. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  119. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  120. package/src/engine/asset/AssetDescription.js +2 -2
  121. package/src/engine/ecs/animation/Animation.js +2 -2
  122. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  123. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  124. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  125. package/src/engine/ecs/gui/GUIElement.js +7 -5
  126. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  127. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  128. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  129. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  130. package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
  131. package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
  132. package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
  133. package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
  134. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  135. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  136. package/src/engine/ecs/transform/Transform64.js +5 -4
  137. package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
  138. package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
  139. package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
  140. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  141. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  142. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  143. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  144. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  145. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  146. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  147. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  148. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  149. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  150. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  151. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
  152. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
  153. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
  154. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  155. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  156. package/src/engine/graphics3/AnimationGraphSystem.d.ts +5 -0
  157. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  158. package/src/engine/graphics3/AnimationGraphSystem.js +48 -2
  159. package/src/engine/graphics3/AnimationSystem.d.ts +5 -0
  160. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  161. package/src/engine/graphics3/AnimationSystem.js +47 -2
  162. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  163. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  164. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  165. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  166. package/src/engine/graphics3/register_clips.d.ts +29 -0
  167. package/src/engine/graphics3/register_clips.d.ts.map +1 -1
  168. package/src/engine/graphics3/register_clips.js +52 -0
  169. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  170. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  171. package/src/engine/interpolation/Interpolated.js +2 -2
  172. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
  173. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  174. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
  175. package/src/engine/physics/cloth/PLAN.md +10 -8
  176. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
  177. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -1
  178. package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +51 -19
  179. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  180. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +16 -2
  181. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -1
  182. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +19 -24
  183. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
  184. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  185. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
  186. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  187. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
  188. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
  189. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
  190. package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
  191. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  192. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +16 -61
  193. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  194. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  195. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  196. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  197. package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
  198. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
  199. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
  200. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  201. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
  202. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  203. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  204. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  205. package/src/engine/physics/cloth/ecs/ClothWorld.js +40 -130
  206. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  207. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +17 -58
  208. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  209. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +3 -3
  210. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  211. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +44 -104
  212. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -1
  213. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +6 -13
  214. package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -1
  215. package/src/engine/physics/cloth/ecs/cloth_holds.js +15 -40
  216. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  217. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +45 -79
  218. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  219. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +7 -27
  220. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  221. package/src/engine/physics/cloth/ecs/cloth_write_back.js +30 -62
  222. package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
  224. package/src/engine/physics/cloth/playground/collide_main.js +2 -28
  225. package/src/engine/physics/cloth/playground/garment_main.js +4 -19
  226. package/src/engine/physics/cloth/playground/main.js +6 -48
  227. package/src/engine/physics/cloth/playground/rig_main.js +947 -955
  228. package/src/engine/physics/cloth/playground/wind_main.js +8 -7
  229. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  230. package/src/engine/physics/cloth/solver/ClothState.js +16 -76
  231. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
  232. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
  233. package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
  234. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/solver/cloth_contact_find.js +3 -2
  236. package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/solver/cloth_hold_line.js +2 -14
  238. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
  239. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
  240. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
  241. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
  242. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
  243. package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
  244. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
  245. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
  246. package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
  247. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  248. package/src/engine/physics/cloth/solver/cloth_self_find.js +6 -55
  249. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  250. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
  251. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  252. package/src/engine/physics/cloth/solver/cloth_step.js +6 -28
  253. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  254. package/src/engine/physics/cloth/solver/cloth_step_instance.js +2 -3
  255. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
  256. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
  257. package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
  258. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
  259. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
  260. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
  261. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
  262. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
  263. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
  264. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  265. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
  266. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
  267. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  268. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
  269. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +3 -1
  270. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
  271. package/src/engine/physics/cloth/wind/cloth_sample_air.js +40 -62
  272. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  273. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
  274. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  275. package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
  276. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  277. package/src/engine/physics/fluid/FluidField.js +7 -5
  278. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  279. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  280. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
  281. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
  282. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
  283. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
  284. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
  285. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
  286. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  287. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  288. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  289. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  290. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  291. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  292. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  293. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  294. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
  295. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
  296. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  297. package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
  298. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  299. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
  300. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
  301. package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
  302. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  303. package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
  304. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  305. package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
  306. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  307. package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
  308. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  309. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  310. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  311. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  312. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  313. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  314. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  315. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  316. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  317. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  318. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  319. package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
  320. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  321. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  322. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  323. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  324. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  325. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  326. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  327. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  328. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  329. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  330. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  331. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  332. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  333. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  334. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  335. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
  336. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  337. package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
  338. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
  339. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  340. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  341. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  342. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  343. package/src/format/image/png/PNGReader.js +644 -644
  344. package/src/format/image/png/crc32.d.ts +1 -1
  345. package/src/format/image/png/crc32.js +7 -8
  346. package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
  347. package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
  348. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  349. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  350. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  351. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  352. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  353. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  354. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  355. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  356. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  357. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  358. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  359. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  360. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  361. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  362. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  363. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  364. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  365. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  366. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  367. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  368. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  369. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  370. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  371. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  372. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  373. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  374. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  375. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  376. package/src/shade/playground/image_decode_bench/main.js +2 -1
  377. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
  378. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
  379. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  380. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
  381. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
  382. package/src/shade/playground/ssr_variance/statistics.js +2 -1
  383. package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
  384. package/src/shade/playground/texture_encode/main.js +2 -1
  385. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  386. package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
  387. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  388. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
  389. package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
  390. package/src/shade/renderer/camera/Camera.js +2 -2
  391. package/src/shade/renderer/geometry/Attribute.js +2 -2
  392. package/src/shade/renderer/geometry/Geometry.js +2 -2
  393. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  394. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  395. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
  396. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
  397. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
  398. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
  399. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
  400. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
  401. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
  402. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
  403. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
  404. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
  405. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
  406. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
  407. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
  408. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
  409. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  410. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  411. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  412. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  413. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  414. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
  415. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  416. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  417. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
  418. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
  419. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  420. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  421. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  422. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  423. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  424. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  426. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  427. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  428. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  429. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  430. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  431. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  432. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  433. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  434. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  435. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  436. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  437. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  438. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  439. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  440. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  441. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  442. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  443. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  444. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  445. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  446. package/src/view/common/HTMLElementCacheKey.js +4 -3
  447. package/src/view/minimap/MinimapMarker.js +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClip.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/animation/animator/AnimationClip.js"],"names":[],"mappings":"AAMA;IACI;;;OAGG;IACH,6BAAW;IAEX;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,OAFU,MAAM,GAAC,iBAAiB,CAExB;IAEV;;;;;;;;;;;;;;;;;;;OAmBG;IACH,8BALW,MAAM,sCAEN,MAAM,SACN,MAAM,QAoGhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,SACxB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,OAAO,CAInB;IAGD;;;;OAIG;IACH,cAHW,aAAa,GACX,OAAO,CAYnB;IAED;;OAEG;IACH,QAFa,MAAM,CASlB;CACJ;kCAzNiC,wBAAwB"}
1
+ {"version":3,"file":"AnimationClip.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/animation/animator/AnimationClip.js"],"names":[],"mappings":"AAOA;IACI;;;OAGG;IACH,6BAAW;IAEX;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,OAFU,MAAM,GAAC,iBAAiB,CAExB;IAEV;;;;;;;;;;;;;;;;;;;OAmBG;IACH,8BALW,MAAM,sCAEN,MAAM,SACN,MAAM,QAoGhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,SACxB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,OAAO,CAInB;IAGD;;;;OAIG;IACH,cAHW,aAAa,GACX,OAAO,CAYnB;IAED;;OAEG;IACH,QAFa,MAAM,CAWlB;CACJ;kCA3NiC,wBAAwB"}
@@ -1,4 +1,5 @@
1
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
2
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
2
3
  import { min2 } from "../../../../../core/math/min2.js";
3
4
  import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
4
5
  import { AnimationClipFlag } from "./AnimationClipFlag.js";
@@ -211,10 +212,12 @@ export class AnimationClip {
211
212
  * @returns {number}
212
213
  */
213
214
  hash() {
214
- return combine_hash(
215
- this.flags,
216
- computeHashFloat(this.weight),
217
- computeHashFloat(this.timeScale),
215
+ return hash_mix2(
216
+ hash_mix3(
217
+ this.flags,
218
+ computeHashFloat(this.weight),
219
+ computeHashFloat(this.timeScale)
220
+ ),
218
221
  this.def.hash()
219
222
  );
220
223
  }
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
2
2
  import { computeHashArray } from "../../../../../core/collection/array/computeHashArray.js";
3
3
  import { isArrayEqual } from "../../../../../core/collection/array/isArrayEqual.js";
4
4
  import { invokeObjectHash } from "../../../../../core/model/object/invokeObjectHash.js";
@@ -106,7 +106,7 @@ export class AnimationClipDefinition {
106
106
  * @returns {number}
107
107
  */
108
108
  hash() {
109
- return combine_hash(
109
+ return hash_mix3(
110
110
  computeStringHash(this.name),
111
111
  computeHashArray(this.notifications, invokeObjectHash),
112
112
  computeHashArray(this.tags, computeStringHash)
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
2
2
  import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
3
3
 
4
4
  export class AnimationNotification {
@@ -33,7 +33,7 @@ export class AnimationNotification {
33
33
  * @returns {number}
34
34
  */
35
35
  hash() {
36
- return combine_hash(
36
+ return hash_mix2(
37
37
  computeHashFloat(this.time),
38
38
  this.def.hash()
39
39
  );
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
2
2
  import { computeObjectHash } from "../../../../../core/math/hash/computeObjectHash.js";
3
3
  import { objectDeepEquals } from "../../../../../core/model/object/objectDeepEquals.js";
4
4
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
@@ -34,7 +34,7 @@ export class AnimationNotificationDefinition {
34
34
  * @returns {number}
35
35
  */
36
36
  hash() {
37
- return combine_hash(
37
+ return hash_mix2(
38
38
  computeStringHash(this.event),
39
39
  computeObjectHash(this.data)
40
40
  );
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix3 } from "../../../../../../../core/math/hash/hash_mix3.js";
2
2
  import { computeHashArray } from "../../../../../../../core/collection/array/computeHashArray.js";
3
3
  import { isArrayEqual } from "../../../../../../../core/collection/array/isArrayEqual.js";
4
4
  import { invokeObjectHash } from "../../../../../../../core/model/object/invokeObjectHash.js";
@@ -54,7 +54,7 @@ export class AnimationGraphDefinition {
54
54
  * @returns {number}
55
55
  */
56
56
  hash() {
57
- return combine_hash(
57
+ return hash_mix3(
58
58
  this.startingSate.hash(),
59
59
  computeHashArray(this.states, invokeObjectHash),
60
60
  computeHashArray(this.transitions, invokeObjectHash)
@@ -1,4 +1,4 @@
1
- import { combine_hash } from "../../../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../../../../../core/math/hash/hash_mix2.js";
2
2
  import { AnimationStateType } from "../AnimationStateType.js";
3
3
 
4
4
  export class AnimationStateDefinition {
@@ -82,7 +82,7 @@ export class AnimationStateDefinition {
82
82
  * @returns {number}
83
83
  */
84
84
  hash() {
85
- return combine_hash(
85
+ return hash_mix2(
86
86
  this.type,
87
87
  this.motion.hash()
88
88
  );
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationTransitionDefinition.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js"],"names":[],"mappings":"AAIA;IACI;;;OAGG;IACH,OAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,UAFU,MAAM,CAED;IAEf;;;OAGG;IACH,iCAAc;IAEd;;;OAGG;IACH,iCAAc;IAEd;;;;OAIG;IACH,cAHW,6BAA6B,GAC3B,OAAO,CAYnB;IAED;;OAEG;IACH,QAFa,MAAM,CASlB;CACJ"}
1
+ {"version":3,"file":"AnimationTransitionDefinition.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js"],"names":[],"mappings":"AAKA;IACI;;;OAGG;IACH,OAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,UAFU,MAAM,CAED;IAEf;;;OAGG;IACH,iCAAc;IAEd;;;OAGG;IACH,iCAAc;IAEd;;;;OAIG;IACH,cAHW,6BAA6B,GAC3B,OAAO,CAYnB;IAED;;OAEG;IACH,QAFa,MAAM,CAWlB;CACJ"}
@@ -1,4 +1,5 @@
1
- import { combine_hash } from "../../../../../../../core/collection/array/combine_hash.js";
1
+ import { hash_mix2 } from "../../../../../../../core/math/hash/hash_mix2.js";
2
+ import { hash_mix3 } from "../../../../../../../core/math/hash/hash_mix3.js";
2
3
  import { computeHashFloat } from "../../../../../../../core/primitives/numbers/computeHashFloat.js";
3
4
  import { computeStringHash } from "../../../../../../../core/primitives/strings/computeStringHash.js";
4
5
 
@@ -48,10 +49,12 @@ export class AnimationTransitionDefinition {
48
49
  * @returns {number}
49
50
  */
50
51
  hash() {
51
- return combine_hash(
52
- computeStringHash(this.event),
53
- computeHashFloat(this.duration),
54
- this.source.hash(),
52
+ return hash_mix2(
53
+ hash_mix3(
54
+ computeStringHash(this.event),
55
+ computeHashFloat(this.duration),
56
+ this.source.hash()
57
+ ),
55
58
  this.target.hash()
56
59
  );
57
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Decal.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/decal/v2/Decal.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IAmGI,+BAMC;IAvGD;;;;;;;OAOG;IACH,KAFU,MAAM,CAEP;IAET;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;;;OAKG;IACH,SAFU,MAAM,CAEH;IAEb;;;;OAIG;IACH,cAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,OAFU,KAAK,CAEe;IAE9B;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;OAEG;IACH,WAFU,MAAM,CAEF;IAEd;;OAEG;IACH,gBAFU,KAAK,CAEwB;IAEvC;;;;OAIG;IACH,oBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,yBAAwB;IAExB;;;;OAIG;IACH,qBAAoB;IAEpB;;;;;;OAMG;IACH,yBAEC;IAUD;;;;;;;;;;;;MAcC;IAED;;;;;;;;;;;;aA+CC;IAED,eAkBC;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAenB;CACJ;;;;sBAnPqB,oCAAoC"}
1
+ {"version":3,"file":"Decal.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/decal/v2/Decal.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IAmGI,+BAMC;IAvGD;;;;;;;OAOG;IACH,KAFU,MAAM,CAEP;IAET;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;;;OAKG;IACH,SAFU,MAAM,CAEH;IAEb;;;;OAIG;IACH,cAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,OAFU,KAAK,CAEe;IAE9B;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;OAEG;IACH,WAFU,MAAM,CAEF;IAEd;;OAEG;IACH,gBAFU,KAAK,CAEwB;IAEvC;;;;OAIG;IACH,oBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,yBAAwB;IAExB;;;;OAIG;IACH,qBAAoB;IAEpB;;;;;;OAMG;IACH,yBAEC;IAUD;;;;;;;;;;;;MAcC;IAED;;;;;;;;;;;;aA+CC;IAED,eAkBC;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAenB;CACJ;;;;sBApPqB,oCAAoC"}
@@ -2,7 +2,8 @@ import { Color } from "../../../../../core/color/Color.js";
2
2
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
3
3
  import { assert } from "../../../../../core/assert.js";
4
4
  import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
5
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
5
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
6
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
6
7
 
7
8
  /**
8
9
  * A projected surface decal.
@@ -203,21 +204,21 @@ export class Decal {
203
204
  }
204
205
 
205
206
  hash() {
206
- return combine_hash(
207
+ return hash_mix3(
207
208
  computeStringHash(this.uri) ^ this.color.hash(),
208
- combine_hash(
209
- combine_hash(
209
+ hash_mix2(
210
+ hash_mix2(
210
211
  computeStringHash(this.uri_albedo),
211
212
  computeStringHash(this.uri_normal)
212
213
  ),
213
- combine_hash(
214
+ hash_mix2(
214
215
  computeStringHash(this.uri_orm),
215
216
  computeStringHash(this.uri_emissive)
216
217
  )
217
218
  ),
218
- combine_hash(
219
- combine_hash(computeHashFloat(this.roughness), computeHashFloat(this.metalness)),
220
- combine_hash(this.emissive_color.hash(), computeHashFloat(this.emissive_intensity))
219
+ hash_mix2(
220
+ hash_mix2(computeHashFloat(this.roughness), computeHashFloat(this.metalness)),
221
+ hash_mix2(this.emissive_color.hash(), computeHashFloat(this.emissive_intensity))
221
222
  )
222
223
  );
223
224
  }
@@ -17,6 +17,8 @@
17
17
  * to synthesise some arbitrary unit vector and hand it over as though it were a
18
18
  * measurement.
19
19
  *
20
+ * An indexed form of {@link tri3_compute_normal_area_weighted_array}, which holds the arithmetic.
21
+ *
20
22
  * Single-face callers — a raycast normal, a plane side test — want
21
23
  * {@link geometry_construct_triangle_normal} instead.
22
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"geometry_construct_triangle_normal_area_weighted.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,sEARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,aACN,MAAM,EAAE,GAAC,YAAY,GACnB,IAAI,CAwBhB"}
1
+ {"version":3,"file":"geometry_construct_triangle_normal_area_weighted.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sEARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,aACN,MAAM,EAAE,GAAC,YAAY,GACnB,IAAI,CAShB"}
@@ -1,3 +1,5 @@
1
+ import { tri3_compute_normal_area_weighted_array } from "../../../core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js";
2
+
1
3
  /**
2
4
  * The face normal of an indexed triangle, NOT normalised — the raw
3
5
  * `(c - b) × (a - b)`, whose magnitude is twice the triangle's area.
@@ -17,6 +19,8 @@
17
19
  * to synthesise some arbitrary unit vector and hand it over as though it were a
18
20
  * measurement.
19
21
  *
22
+ * An indexed form of {@link tri3_compute_normal_area_weighted_array}, which holds the arithmetic.
23
+ *
20
24
  * Single-face callers — a raycast normal, a plane side test — want
21
25
  * {@link geometry_construct_triangle_normal} instead.
22
26
  *
@@ -29,25 +33,10 @@
29
33
  * @returns {void}
30
34
  */
31
35
  export function geometry_construct_triangle_normal_area_weighted(out, out_offset, a, b, c, positions) {
32
-
33
- const a_address = a * 3;
34
- const b_address = b * 3;
35
- const c_address = c * 3;
36
-
37
- const bx = positions[b_address];
38
- const by = positions[b_address + 1];
39
- const bz = positions[b_address + 2];
40
-
41
- const cb_x = positions[c_address] - bx;
42
- const cb_y = positions[c_address + 1] - by;
43
- const cb_z = positions[c_address + 2] - bz;
44
-
45
- const ab_x = positions[a_address] - bx;
46
- const ab_y = positions[a_address + 1] - by;
47
- const ab_z = positions[a_address + 2] - bz;
48
-
49
- // the same winding `tri3_compute_normal` uses, so the direction agrees
50
- out[out_offset] = cb_y * ab_z - cb_z * ab_y;
51
- out[out_offset + 1] = cb_z * ab_x - cb_x * ab_z;
52
- out[out_offset + 2] = cb_x * ab_y - cb_y * ab_x;
36
+ tri3_compute_normal_area_weighted_array(
37
+ out, out_offset,
38
+ positions, a * 3,
39
+ positions, b * 3,
40
+ positions, c * 3
41
+ );
53
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextureResourceDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js"],"names":[],"mappings":"AAMA;IAoEI;;;;;;kCAiBC;IAnFD;;;OAGG;IACH,QAFU,MAAM,CAEL;IACX;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,QAFU,cAAc,CAEM;IAE9B;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,eAFU,MAAM,CAE0B;IAe1C;;;;OAIG;IACH,cAHW,yBAAyB,GACvB,OAAO,CAkBnB;CAqBJ;mCAzFkC,yBAAyB;+BAH7B,mDAAmD"}
1
+ {"version":3,"file":"TextureResourceDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js"],"names":[],"mappings":"AAOA;IAsEI;;;;;;kCAiBC;IArFD;;;OAGG;IACH,QAFU,MAAM,CAEL;IACX;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,QAFU,cAAc,CAEM;IAE9B;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,eAFU,MAAM,CAE0B;IAiB1C;;;;OAIG;IACH,cAHW,yBAAyB,GACvB,OAAO,CAkBnB;CAqBJ;mCA3FkC,yBAAyB;+BAJ7B,mDAAmD"}
@@ -1,5 +1,6 @@
1
1
  import { BinaryDataType } from "../../../../../core/binary/type/BinaryDataType.js";
2
- import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
2
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
3
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
3
4
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
4
5
  import { ResourceDescriptor } from "./ResourceDescriptor.js";
5
6
  import { TextureInitialState } from "./TextureInitialState.js";
@@ -40,11 +41,13 @@ export class TextureResourceDescriptor extends ResourceDescriptor {
40
41
  }
41
42
 
42
43
  hash() {
43
- return combine_hash(
44
- this.width,
45
- this.height,
46
- computeStringHash(this.format),
47
- this.channel_count,
44
+ return hash_mix2(
45
+ hash_mix3(
46
+ this.width,
47
+ this.height,
48
+ computeStringHash(this.format)
49
+ ),
50
+ this.channel_count
48
51
  )
49
52
  }
50
53
 
@@ -6,6 +6,10 @@
6
6
  * components, whoever put them there — a model `MeshSystem` loaded, or a rig built in code. New
7
7
  * clips are a new component, which this system sees as the entity leaving and coming back.
8
8
  *
9
+ * **Every node the clips key holds a row here** ({@link hold_clip_targets}), from the graph being
10
+ * bound to the clips until they go. A clip binds only once all of them do, and a keyed node outside
11
+ * every skin with nothing drawn under it — a socket, say — is held by no other system.
12
+ *
9
13
  * **It is the CPU that plays the animation and the GPU that draws it.** Shade can advance a clip
10
14
  * itself, and this never asks it to — `AnimationClipFlags.Playing` is left clear and every audible
11
15
  * clip's time is written down each frame from the controller's own clock. That is I-4: the pose
@@ -66,6 +70,7 @@ export class AnimationGraphSystem extends System<any> {
66
70
  * @param {number} entity
67
71
  */
68
72
  unlink(controller: AnimationGraphController, clips: AnimationClips, entity: number): void;
73
+ startup(entityManager: any): Promise<void>;
69
74
  shutdown(entityManager: any): Promise<void>;
70
75
  #private;
71
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationGraphSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/AnimationGraphSystem.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAkBI;;;OAGG;IACH,oDAgBC;IAPG,0EAA8D;IAI9D,gFAEC;IAGL;;;;;;;;;OASG;IACH,iBAJW,wBAAwB,SACxB,cAAc,UACd,MAAM,QAchB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,6BANW,YAAY,EAAE,UACd,MAAM,GACJ,OAAO,CAgDnB;IAED;;;;OAIG;IACH,mBAJW,wBAAwB,SACxB,cAAc,UACd,MAAM,QAYhB;IAED,4CAQC;;CAkJJ;uBAzUsB,kBAAkB;yCAEA,yCAAyC;+BADnD,+BAA+B;4CAHlB,iDAAiD;6BAChE,qDAAqD"}
1
+ {"version":3,"file":"AnimationGraphSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/AnimationGraphSystem.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAyBI;;;OAGG;IACH,oDAgBC;IAPG,0EAA8D;IAI9D,gFAEC;IAGL;;;;;;;;;OASG;IACH,iBAJW,wBAAwB,SACxB,cAAc,UACd,MAAM,QAehB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,6BANW,YAAY,EAAE,UACd,MAAM,GACJ,OAAO,CAgDnB;IAED;;;;OAIG;IACH,mBAJW,wBAAwB,SACxB,cAAc,UACd,MAAM,QAkBhB;IAED,2CAaC;IAED,4CAWC;;CA2JJ;uBAvXsB,kBAAkB;yCAEA,yCAAyC;+BADnD,+BAA+B;4CAHlB,iDAAiD;6BAChE,qDAAqD"}
@@ -6,7 +6,8 @@ import { System } from "../ecs/System.js";
6
6
  import { AnimationClips } from "./animation/AnimationClips.js";
7
7
  import { AnimationGraphController } from "./animation/AnimationGraphController.js";
8
8
  import { write_graph_playback } from "./animation/write_graph_playback.js";
9
- import { register_clips, unregister_clips } from "./register_clips.js";
9
+ import { hold_clip_targets, register_clips, release_clip_targets, unregister_clips } from "./register_clips.js";
10
+ import { RowChains } from "./RowChains.js";
10
11
 
11
12
  /**
12
13
  * Drives every entity's {@link AnimationGraphController}: runs its clock, and tells the renderer
@@ -16,6 +17,10 @@ import { register_clips, unregister_clips } from "./register_clips.js";
16
17
  * components, whoever put them there — a model `MeshSystem` loaded, or a rig built in code. New
17
18
  * clips are a new component, which this system sees as the entity leaving and coming back.
18
19
  *
20
+ * **Every node the clips key holds a row here** ({@link hold_clip_targets}), from the graph being
21
+ * bound to the clips until they go. A clip binds only once all of them do, and a keyed node outside
22
+ * every skin with nothing drawn under it — a socket, say — is held by no other system.
23
+ *
19
24
  * **It is the CPU that plays the animation and the GPU that draws it.** Shade can advance a clip
20
25
  * itself, and this never asks it to — `AnimationClipFlags.Playing` is left clear and every audible
21
26
  * clip's time is written down each frame from the controller's own clock. That is I-4: the pose
@@ -41,10 +46,17 @@ export class AnimationGraphSystem extends System {
41
46
  #scene;
42
47
 
43
48
  /**
44
- * @type {Map<number, {controller: AnimationGraphController, clips: ShadeAnimationClip[], bound: boolean, clip_registration: ClipRegistration|null, slots: Int32Array, played_slots: Int32Array, clip_ids: Int32Array, weights: Float32Array, poses: PosePlayback[]}>}
49
+ * @type {Map<number, {controller: AnimationGraphController, clips: ShadeAnimationClip[], bound: boolean, held: boolean, clip_registration: ClipRegistration|null, slots: Int32Array, played_slots: Int32Array, clip_ids: Int32Array, weights: Float32Array, poses: PosePlayback[]}>}
45
50
  */
46
51
  #entries = new Map();
47
52
 
53
+ /**
54
+ * The chains of the nodes the clips key. Null until the system has a dataset.
55
+ *
56
+ * @type {RowChains|null}
57
+ */
58
+ #chains = null;
59
+
48
60
  /**
49
61
  * @param {GraphicsEngine} graphics
50
62
  * @param {Scene} scene
@@ -82,6 +94,7 @@ export class AnimationGraphSystem extends System {
82
94
  controller,
83
95
  clips: clips.clips,
84
96
  bound: false,
97
+ held: false,
85
98
  clip_registration: null,
86
99
  slots: new Int32Array(0),
87
100
  played_slots: new Int32Array(0),
@@ -172,11 +185,32 @@ export class AnimationGraphSystem extends System {
172
185
 
173
186
  if (entry !== undefined) {
174
187
  this.#release_clips(entry);
188
+
189
+ if (entry.held) {
190
+ release_clip_targets(this.#chains, entry.clips);
191
+
192
+ entry.held = false;
193
+ }
175
194
  }
176
195
 
177
196
  this.#entries.delete(entity);
178
197
  }
179
198
 
199
+ async startup(entityManager) {
200
+ // the scene's rows are this dataset's entities; the first system to place one says so
201
+ const dataset = entityManager.dataset;
202
+ const scene = this.#scene;
203
+
204
+ assert.ok(
205
+ scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
206
+ 'the scene is bound to another dataset'
207
+ );
208
+
209
+ scene.dataset = dataset;
210
+
211
+ this.#chains = new RowChains(dataset);
212
+ }
213
+
180
214
  async shutdown(entityManager) {
181
215
  for (const entry of this.#entries.values()) {
182
216
  entry.controller.unlink();
@@ -185,6 +219,9 @@ export class AnimationGraphSystem extends System {
185
219
  }
186
220
 
187
221
  this.#entries.clear();
222
+
223
+ this.#chains.destroy();
224
+ this.#chains = null;
188
225
  }
189
226
 
190
227
  /**
@@ -223,6 +260,9 @@ export class AnimationGraphSystem extends System {
223
260
  // that fires an ability while the renderer is being replaced still fires it.
224
261
  const manager = context === null ? null : context.animation_manager;
225
262
 
263
+ // a new context after a restart is acquired in whole; until there is one, holds are recorded
264
+ this.#chains.bind(context === null ? null : context.rows);
265
+
226
266
  for (const [entity, entry] of this.#entries) {
227
267
  if (!entry.bound) {
228
268
  this.#bind_clips(entry, entity, ecd);
@@ -302,6 +342,12 @@ export class AnimationGraphSystem extends System {
302
342
  entry.poses = clips.map(() => new PosePlayback());
303
343
 
304
344
  entry.bound = true;
345
+
346
+ // past the throw above, so a graph that cannot be bound holds nothing; and before anything
347
+ // registers, so the clips bind in the update that registers them
348
+ hold_clip_targets(this.#chains, clips);
349
+
350
+ entry.held = true;
305
351
  }
306
352
 
307
353
  /**
@@ -11,6 +11,10 @@
11
11
  * components, whoever put them there — a model `MeshSystem` loaded, or a rig built in code. New
12
12
  * clips are a new component, which this system sees as the entity leaving and coming back.
13
13
  *
14
+ * **Every node the clips key holds a row here** ({@link hold_clip_targets}), from the clips being
15
+ * taken up until they go. A clip binds only once all of them do, and a keyed node outside every skin
16
+ * with nothing drawn under it is held by no other system.
17
+ *
14
18
  * **It is the CPU that plays the animation and the GPU that draws it.** Shade can advance a clip
15
19
  * itself, and this never asks it to — `AnimationClipFlags.Playing` is left clear and every audible
16
20
  * clip's time is written down each frame from the player's own clock. That is I-4: the pose
@@ -76,6 +80,7 @@ export class AnimationSystem extends System<any> {
76
80
  * @param {number} entity
77
81
  */
78
82
  unlink(component: Animation, clips: AnimationClips, entity: number): void;
83
+ startup(entityManager: any): Promise<void>;
79
84
  shutdown(entityManager: any): Promise<void>;
80
85
  #private;
81
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/AnimationSystem.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAkBI;;;OAGG;IACH,oDAgBC;IAPG,2DAA+C;IAI/C,iEAEC;IAGL;;;;;;;;OAQG;IACH,qBAHW,MAAM,GACJ,cAAc,CAU1B;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,6BANW,YAAY,EAAE,UACd,MAAM,GACJ,OAAO,CAyCnB;IAED;;;;;;;;OAQG;IACH,gBAJW,SAAS,SACT,cAAc,UACd,MAAM,QAYhB;IAED;;;;OAIG;IACH,kBAJW,SAAS,SACT,cAAc,UACd,MAAM,QAUhB;IAED,4CAMC;;CAsKJ;uBAxWsB,kBAAkB;0BADf,+BAA+B;+BAE1B,+BAA+B;4CAJlB,iDAAiD;6BAChE,qDAAqD"}
1
+ {"version":3,"file":"AnimationSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/AnimationSystem.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAyBI;;;OAGG;IACH,oDAgBC;IAPG,2DAA+C;IAI/C,iEAEC;IAGL;;;;;;;;OAQG;IACH,qBAHW,MAAM,GACJ,cAAc,CAU1B;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,6BANW,YAAY,EAAE,UACd,MAAM,GACJ,OAAO,CAyCnB;IAED;;;;;;;;OAQG;IACH,gBAJW,SAAS,SACT,cAAc,UACd,MAAM,QAahB;IAED;;;;OAIG;IACH,kBAJW,SAAS,SACT,cAAc,UACd,MAAM,QAgBhB;IAED,2CAaC;IAED,4CASC;;CA8KJ;uBArZsB,kBAAkB;0BADf,+BAA+B;+BAE1B,+BAA+B;4CAJlB,iDAAiD;6BAChE,qDAAqD"}
@@ -7,7 +7,8 @@ import { System } from "../ecs/System.js";
7
7
  import { AnimationClips } from "./animation/AnimationClips.js";
8
8
  import { ClipListPlayer } from "./animation/ClipListPlayer.js";
9
9
  import { write_clip_playback } from "./animation/write_clip_playback.js";
10
- import { register_clips, unregister_clips } from "./register_clips.js";
10
+ import { hold_clip_targets, register_clips, release_clip_targets, unregister_clips } from "./register_clips.js";
11
+ import { RowChains } from "./RowChains.js";
11
12
 
12
13
  /**
13
14
  * @type {ClipPlayback[]}
@@ -27,6 +28,10 @@ const NOTHING = Object.freeze([]);
27
28
  * components, whoever put them there — a model `MeshSystem` loaded, or a rig built in code. New
28
29
  * clips are a new component, which this system sees as the entity leaving and coming back.
29
30
  *
31
+ * **Every node the clips key holds a row here** ({@link hold_clip_targets}), from the clips being
32
+ * taken up until they go. A clip binds only once all of them do, and a keyed node outside every skin
33
+ * with nothing drawn under it is held by no other system.
34
+ *
30
35
  * **It is the CPU that plays the animation and the GPU that draws it.** Shade can advance a clip
31
36
  * itself, and this never asks it to — `AnimationClipFlags.Playing` is left clear and every audible
32
37
  * clip's time is written down each frame from the player's own clock. That is I-4: the pose
@@ -51,10 +56,17 @@ export class AnimationSystem extends System {
51
56
  #scene;
52
57
 
53
58
  /**
54
- * @type {Map<number, {player: ClipListPlayer, clips: ShadeAnimationClip[], bound: boolean, clip_registration: ClipRegistration|null, played_slots: Int32Array, written: Float32Array, poses: PosePlayback[]}>}
59
+ * @type {Map<number, {player: ClipListPlayer, clips: ShadeAnimationClip[], bound: boolean, held: boolean, clip_registration: ClipRegistration|null, played_slots: Int32Array, written: Float32Array, poses: PosePlayback[]}>}
55
60
  */
56
61
  #entries = new Map();
57
62
 
63
+ /**
64
+ * The chains of the nodes the clips key. Null until the system has a dataset.
65
+ *
66
+ * @type {RowChains|null}
67
+ */
68
+ #chains = null;
69
+
58
70
  /**
59
71
  * @param {GraphicsEngine} graphics
60
72
  * @param {Scene} scene
@@ -169,6 +181,7 @@ export class AnimationSystem extends System {
169
181
  player: ClipListPlayer.from(component),
170
182
  clips: clips.clips,
171
183
  bound: false,
184
+ held: false,
172
185
  clip_registration: null,
173
186
  played_slots: new Int32Array(0),
174
187
  written: new Float32Array(0),
@@ -186,17 +199,41 @@ export class AnimationSystem extends System {
186
199
 
187
200
  if (entry !== undefined) {
188
201
  this.#release_clips(entry);
202
+
203
+ if (entry.held) {
204
+ release_clip_targets(this.#chains, entry.clips);
205
+
206
+ entry.held = false;
207
+ }
189
208
  }
190
209
 
191
210
  this.#entries.delete(entity);
192
211
  }
193
212
 
213
+ async startup(entityManager) {
214
+ // the scene's rows are this dataset's entities; the first system to place one says so
215
+ const dataset = entityManager.dataset;
216
+ const scene = this.#scene;
217
+
218
+ assert.ok(
219
+ scene.dataset === null || scene.dataset === undefined || scene.dataset === dataset,
220
+ 'the scene is bound to another dataset'
221
+ );
222
+
223
+ scene.dataset = dataset;
224
+
225
+ this.#chains = new RowChains(dataset);
226
+ }
227
+
194
228
  async shutdown(entityManager) {
195
229
  for (const entry of this.#entries.values()) {
196
230
  this.#release_clips(entry);
197
231
  }
198
232
 
199
233
  this.#entries.clear();
234
+
235
+ this.#chains.destroy();
236
+ this.#chains = null;
200
237
  }
201
238
 
202
239
  /**
@@ -328,6 +365,11 @@ export class AnimationSystem extends System {
328
365
  entry.poses = clips.map(() => new PosePlayback());
329
366
 
330
367
  entry.bound = true;
368
+
369
+ // before anything registers, so the clips bind in the update that registers them
370
+ hold_clip_targets(this.#chains, clips);
371
+
372
+ entry.held = true;
331
373
  }
332
374
 
333
375
  /**
@@ -342,6 +384,9 @@ export class AnimationSystem extends System {
342
384
  // that ends while the renderer is being replaced still says so.
343
385
  const manager = context === null ? null : context.animation_manager;
344
386
 
387
+ // a new context after a restart is acquired in whole; until there is one, holds are recorded
388
+ this.#chains.bind(context === null ? null : context.rows);
389
+
345
390
  for (const [entity, entry] of this.#entries) {
346
391
  if (!entry.bound) {
347
392
  this.#bind(entry, entity, ecd);