@woosh/meep-engine 2.169.1 → 2.169.2

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 (680) hide show
  1. package/editor/ecs/component/editors/NumericIntervalEditor.js +18 -35
  2. package/editor/ecs/component/editors/ObservedIntegerEditor.js +22 -43
  3. package/editor/ecs/component/editors/ObservedStringEditor.js +34 -51
  4. package/editor/ecs/component/editors/common/makeV3_editor.js +12 -30
  5. package/editor/ecs/component/editors/common/two_way_sync.js +50 -0
  6. package/editor/ecs/component/editors/geom/QuaternionEditor.js +20 -35
  7. package/editor/ecs/component/editors/geom/Vector1Editor.js +5 -28
  8. package/editor/ecs/component/editors/primitive/NumberEditor.js +15 -31
  9. package/editor/tools/paint/TerrainHeightPaintTool.js +22 -31
  10. package/editor/tools/paint/TerrainPaintTool.js +85 -13
  11. package/editor/tools/paint/TerrainTexturePaintTool.js +18 -29
  12. package/editor/view/ecs/components/TerrainController.js +1 -4
  13. package/package.json +1 -1
  14. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +738 -0
  15. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +79 -0
  16. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +93 -0
  17. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +80 -0
  18. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +164 -0
  19. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +69 -0
  20. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +102 -0
  21. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +129 -0
  22. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +72 -0
  23. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +74 -0
  24. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +169 -0
  25. package/src/DUPLICATION_AUDIT_2026_08_07.md +254 -0
  26. package/src/DUPLICATION_AUDIT_REMEDIATION.md +250 -0
  27. package/src/core/bvh2/bvh3/query/bvh_collect_user_data.js +2 -2
  28. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.js +77 -77
  29. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.js +90 -90
  30. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray_segment.js +94 -94
  31. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.js +86 -86
  32. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js +2 -2
  33. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_capsule.js +2 -2
  34. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_frustum.js +2 -2
  35. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_sphere.js +2 -2
  36. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.js +96 -96
  37. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray_segment.js +100 -100
  38. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +2 -2
  39. package/src/core/bvh8/aabb3_round_to_float32.d.ts +16 -0
  40. package/src/core/bvh8/aabb3_round_to_float32.d.ts.map +1 -0
  41. package/src/core/bvh8/aabb3_round_to_float32.js +22 -0
  42. package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -1
  43. package/src/core/bvh8/bvh8_geometry_validate.js +1 -12
  44. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -1
  45. package/src/core/bvh8/bvh8_geometry_validate_indirect.js +1 -12
  46. package/src/core/cache/Cache.d.ts +13 -0
  47. package/src/core/cache/Cache.d.ts.map +1 -1
  48. package/src/core/cache/Cache.js +13 -0
  49. package/src/core/color/operations/color_darken.d.ts +5 -2
  50. package/src/core/color/operations/color_darken.d.ts.map +1 -1
  51. package/src/core/color/operations/color_darken.js +24 -33
  52. package/src/core/color/operations/color_desaturate.d.ts +5 -2
  53. package/src/core/color/operations/color_desaturate.d.ts.map +1 -1
  54. package/src/core/color/operations/color_desaturate.js +24 -33
  55. package/src/core/color/operations/color_lighten.d.ts +5 -2
  56. package/src/core/color/operations/color_lighten.d.ts.map +1 -1
  57. package/src/core/color/operations/color_lighten.js +24 -33
  58. package/src/core/color/operations/color_saturate.d.ts +5 -2
  59. package/src/core/color/operations/color_saturate.d.ts.map +1 -1
  60. package/src/core/color/operations/color_saturate.js +24 -33
  61. package/src/core/color/operations/color_scale_okhsv_channel.d.ts +28 -0
  62. package/src/core/color/operations/color_scale_okhsv_channel.d.ts.map +1 -0
  63. package/src/core/color/operations/color_scale_okhsv_channel.js +45 -0
  64. package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
  65. package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +12 -0
  66. package/src/core/geom/2d/line/segment2_intersects_segment2_2d.d.ts.map +1 -1
  67. package/src/core/geom/2d/line/segment2_intersects_segment2_2d.js +25 -29
  68. package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.d.ts.map +1 -1
  69. package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.js +46 -51
  70. package/src/core/geom/2d/line/segment2_segment_intersection_fractions.d.ts +31 -0
  71. package/src/core/geom/2d/line/segment2_segment_intersection_fractions.d.ts.map +1 -0
  72. package/src/core/geom/2d/line/segment2_segment_intersection_fractions.js +52 -0
  73. package/src/core/geom/2d/quad-tree/qt_collect_by_circle.d.ts +6 -1
  74. package/src/core/geom/2d/quad-tree/qt_collect_by_circle.d.ts.map +1 -1
  75. package/src/core/geom/2d/quad-tree/qt_collect_by_circle.js +39 -65
  76. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts +15 -5
  77. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts.map +1 -1
  78. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.js +101 -70
  79. package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
  80. package/src/core/geom/2d/r-tree/StaticR2Tree.js +7 -3
  81. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.d.ts +7 -8
  82. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.d.ts.map +1 -1
  83. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.js +15 -51
  84. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.d.ts.map +1 -1
  85. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.js +13 -14
  86. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.d.ts.map +1 -1
  87. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.js +2 -17
  88. package/src/core/geom/3d/atlas/segment/atlas_chart_roundness_delta.d.ts +22 -0
  89. package/src/core/geom/3d/atlas/segment/atlas_chart_roundness_delta.d.ts.map +1 -0
  90. package/src/core/geom/3d/atlas/segment/atlas_chart_roundness_delta.js +30 -0
  91. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts +19 -0
  92. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts.map +1 -1
  93. package/src/core/geom/3d/atlas/segment/atlas_segment_charts.js +5 -9
  94. package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts.map +1 -1
  95. package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.js +4 -12
  96. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +5 -0
  97. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -1
  98. package/src/core/geom/3d/frustum/read_frustum_corner.js +8 -5
  99. package/src/core/geom/3d/line/line3_segment_segment_closest_point_pair.d.ts +33 -0
  100. package/src/core/geom/3d/line/line3_segment_segment_closest_point_pair.d.ts.map +1 -0
  101. package/src/core/geom/3d/line/line3_segment_segment_closest_point_pair.js +71 -0
  102. package/src/core/geom/3d/mat4/m4_compose.d.ts +5 -0
  103. package/src/core/geom/3d/mat4/m4_compose.d.ts.map +1 -1
  104. package/src/core/geom/3d/mat4/m4_compose.js +22 -53
  105. package/src/core/geom/3d/mat4/m4_decompose.d.ts +8 -0
  106. package/src/core/geom/3d/mat4/m4_decompose.d.ts.map +1 -1
  107. package/src/core/geom/3d/mat4/m4_decompose.js +84 -76
  108. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts +2 -0
  109. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts.map +1 -1
  110. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +10 -44
  111. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts +27 -0
  112. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts.map +1 -0
  113. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +67 -0
  114. package/src/core/geom/3d/plane/orient3d_fast.d.ts.map +1 -1
  115. package/src/core/geom/3d/plane/orient3d_fast.js +2 -22
  116. package/src/core/geom/3d/plane/orient3d_fast_point.d.ts +28 -0
  117. package/src/core/geom/3d/plane/orient3d_fast_point.d.ts.map +1 -0
  118. package/src/core/geom/3d/plane/orient3d_fast_point.js +47 -0
  119. package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts +48 -0
  120. package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts.map +1 -0
  121. package/src/core/geom/3d/quaternion/quat3_nlerp.js +72 -0
  122. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +9 -0
  123. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  124. package/src/core/geom/3d/shape/AbstractShape3D.js +44 -1
  125. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
  126. package/src/core/geom/3d/shape/BoxShape3D.js +2 -1
  127. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  128. package/src/core/geom/3d/shape/CapsuleShape3D.js +2 -1
  129. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +0 -1
  130. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  131. package/src/core/geom/3d/shape/ConvexHullShape3D.js +25 -56
  132. package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
  133. package/src/core/geom/3d/shape/CylinderShape3D.js +2 -1
  134. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  135. package/src/core/geom/3d/shape/HeightMapShape3D.js +3 -5
  136. package/src/core/geom/3d/shape/MeshShape3D.d.ts +0 -11
  137. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  138. package/src/core/geom/3d/shape/MeshShape3D.js +27 -106
  139. package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
  140. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
  141. package/src/core/geom/3d/shape/Triangle3D.js +10 -31
  142. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -1
  143. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +8 -57
  144. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts +8 -1
  145. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts.map +1 -1
  146. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +281 -272
  147. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadrics.d.ts.map +1 -1
  148. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadrics.js +3 -4
  149. package/src/core/geom/3d/topology/simplify/quadratic/quadric3_set_from_plane_through_point.d.ts +22 -0
  150. package/src/core/geom/3d/topology/simplify/quadratic/quadric3_set_from_plane_through_point.d.ts.map +1 -0
  151. package/src/core/geom/3d/topology/simplify/quadratic/quadric3_set_from_plane_through_point.js +27 -0
  152. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts +24 -0
  153. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts.map +1 -0
  154. package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.js +73 -0
  155. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -1
  156. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +2 -53
  157. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -1
  158. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +3 -4
  159. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.d.ts.map +1 -1
  160. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +3 -33
  161. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.d.ts.map +1 -1
  162. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.js +4 -37
  163. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -1
  164. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +3 -32
  165. package/src/core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.d.ts +32 -0
  166. package/src/core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.d.ts.map +1 -0
  167. package/src/core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js +66 -0
  168. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.d.ts.map +1 -1
  169. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.js +703 -728
  170. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.d.ts.map +1 -1
  171. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.js +13 -24
  172. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -1
  173. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +8 -54
  174. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts +35 -0
  175. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts.map +1 -0
  176. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.js +82 -0
  177. package/src/core/geom/3d/triangle/tri3_closest_point.d.ts +29 -0
  178. package/src/core/geom/3d/triangle/tri3_closest_point.d.ts.map +1 -0
  179. package/src/core/geom/3d/triangle/tri3_closest_point.js +65 -0
  180. package/src/core/geom/3d/triangle/tri3_flatten_isometric.d.ts +42 -0
  181. package/src/core/geom/3d/triangle/tri3_flatten_isometric.d.ts.map +1 -0
  182. package/src/core/geom/3d/triangle/tri3_flatten_isometric.js +79 -0
  183. package/src/core/geom/Vector2.d.ts.map +1 -1
  184. package/src/core/geom/Vector2.js +2 -1
  185. package/src/core/geom/random/random_orthonormal_basis.d.ts +21 -0
  186. package/src/core/geom/random/random_orthonormal_basis.d.ts.map +1 -0
  187. package/src/core/geom/random/random_orthonormal_basis.js +31 -0
  188. package/src/core/geom/vec2/v2_rotate.d.ts +18 -0
  189. package/src/core/geom/vec2/v2_rotate.d.ts.map +1 -0
  190. package/src/core/geom/vec2/v2_rotate.js +21 -0
  191. package/src/core/geom/vec2/v2_rotate_cos_sin.d.ts +19 -0
  192. package/src/core/geom/vec2/v2_rotate_cos_sin.d.ts.map +1 -0
  193. package/src/core/geom/vec2/v2_rotate_cos_sin.js +21 -0
  194. package/src/core/graph/csr/csr_graph_from_undirected_edge_list.d.ts +30 -0
  195. package/src/core/graph/csr/csr_graph_from_undirected_edge_list.d.ts.map +1 -0
  196. package/src/core/graph/csr/csr_graph_from_undirected_edge_list.js +94 -0
  197. package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
  198. package/src/core/graph/layout/CircleLayout.js +6 -29
  199. package/src/core/graph/layout/box/BoxLayouter.d.ts.map +1 -1
  200. package/src/core/graph/layout/box/BoxLayouter.js +2 -26
  201. package/src/core/graph/layout/box/position_box_next_to_box.d.ts.map +1 -1
  202. package/src/core/graph/layout/box/position_box_next_to_box.js +2 -1
  203. package/src/core/graph/layout/computeDisconnectedSubGraphs.d.ts.map +1 -1
  204. package/src/core/graph/layout/computeDisconnectedSubGraphs.js +14 -3
  205. package/src/core/graph/layout/graph_peel_topological_layer.d.ts +25 -0
  206. package/src/core/graph/layout/graph_peel_topological_layer.d.ts.map +1 -0
  207. package/src/core/graph/layout/graph_peel_topological_layer.js +45 -0
  208. package/src/core/math/hash/hash_mix2.d.ts +21 -0
  209. package/src/core/math/hash/hash_mix2.d.ts.map +1 -0
  210. package/src/core/math/hash/hash_mix2.js +22 -0
  211. package/src/core/math/hash/hash_mix3.d.ts +16 -0
  212. package/src/core/math/hash/hash_mix3.d.ts.map +1 -0
  213. package/src/core/math/hash/hash_mix3.js +19 -0
  214. package/src/core/math/lookup/LUT_HEATMAP.d.ts +17 -0
  215. package/src/core/math/lookup/LUT_HEATMAP.d.ts.map +1 -0
  216. package/src/core/math/lookup/LUT_HEATMAP.js +30 -0
  217. package/src/core/math/noise/curl_noise_3d.d.ts +6 -0
  218. package/src/core/math/noise/curl_noise_3d.d.ts.map +1 -1
  219. package/src/core/math/noise/curl_noise_3d.js +18 -27
  220. package/src/core/math/statistics/hammersley_sequence.d.ts +28 -16
  221. package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -1
  222. package/src/core/math/statistics/hammersley_sequence.js +53 -34
  223. package/src/core/science/units/MEASUREMENT_UNITS_SI.d.ts +3 -0
  224. package/src/core/science/units/MEASUREMENT_UNITS_SI.d.ts.map +1 -1
  225. package/src/core/science/units/MEASUREMENT_UNITS_SI.js +5 -16
  226. package/src/engine/animation/TransitionFunctions.d.ts +31 -0
  227. package/src/engine/animation/TransitionFunctions.d.ts.map +1 -1
  228. package/src/engine/animation/TransitionFunctions.js +44 -0
  229. package/src/engine/animation/curve/animation_curve_binary_codec.d.ts +29 -0
  230. package/src/engine/animation/curve/animation_curve_binary_codec.d.ts.map +1 -0
  231. package/src/engine/animation/curve/animation_curve_binary_codec.js +60 -0
  232. package/src/engine/animation/curve/draw/canvas_point_to_curve.d.ts +16 -0
  233. package/src/engine/animation/curve/draw/canvas_point_to_curve.d.ts.map +1 -0
  234. package/src/engine/animation/curve/draw/canvas_point_to_curve.js +22 -0
  235. package/src/engine/animation/curve/draw/curve_point_to_canvas.d.ts +27 -0
  236. package/src/engine/animation/curve/draw/curve_point_to_canvas.d.ts.map +1 -0
  237. package/src/engine/animation/curve/draw/curve_point_to_canvas.js +38 -0
  238. package/src/engine/animation/curve/draw/position_canvas_to_curve.d.ts +2 -0
  239. package/src/engine/animation/curve/draw/position_canvas_to_curve.d.ts.map +1 -1
  240. package/src/engine/animation/curve/draw/position_canvas_to_curve.js +22 -24
  241. package/src/engine/animation/curve/draw/position_curve_to_canvas.d.ts +2 -0
  242. package/src/engine/animation/curve/draw/position_curve_to_canvas.d.ts.map +1 -1
  243. package/src/engine/animation/curve/draw/position_curve_to_canvas.js +22 -25
  244. package/src/engine/animation/curve/editor/canvas2dDrawWorldAxisLabels.d.ts.map +1 -1
  245. package/src/engine/animation/curve/editor/canvas2dDrawWorldAxisLabels.js +3 -2
  246. package/src/engine/animation/curve/editor/canvas2dPlotCurvePoints.d.ts.map +1 -1
  247. package/src/engine/animation/curve/editor/canvas2dPlotCurvePoints.js +14 -14
  248. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +1 -1
  249. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +5 -0
  250. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
  251. package/src/engine/asset/loaders/GLTFAssetLoader.js +25 -51
  252. package/src/engine/asset/loaders/material/StaticMaterialCache.d.ts +3 -2
  253. package/src/engine/asset/loaders/material/StaticMaterialCache.d.ts.map +1 -1
  254. package/src/engine/asset/loaders/material/StaticMaterialCache.js +16 -55
  255. package/src/engine/asset/loaders/material/TextureCoalescer.d.ts +32 -0
  256. package/src/engine/asset/loaders/material/TextureCoalescer.d.ts.map +1 -0
  257. package/src/engine/asset/loaders/material/TextureCoalescer.js +68 -0
  258. package/src/engine/asset/loaders/material/traverseMaterialTextures.d.ts +10 -2
  259. package/src/engine/asset/loaders/material/traverseMaterialTextures.d.ts.map +1 -1
  260. package/src/engine/asset/loaders/material/traverseMaterialTextures.js +10 -2
  261. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  262. package/src/engine/control/first-person/abilities/Mantle.js +10 -26
  263. package/src/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.d.ts.map +1 -1
  264. package/src/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +5 -0
  265. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts +22 -2
  266. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.d.ts.map +1 -1
  267. package/src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +92 -41
  268. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +3 -1
  269. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts.map +1 -1
  270. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +14 -16
  271. package/src/engine/ecs/gui/parallax/GuiElementParallaxSystem.d.ts.map +1 -1
  272. package/src/engine/ecs/gui/parallax/GuiElementParallaxSystem.js +16 -29
  273. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +1 -1
  274. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +12 -74
  275. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
  276. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +10 -73
  277. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +38 -0
  278. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -0
  279. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +119 -0
  280. package/src/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.d.ts +0 -1
  281. package/src/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.d.ts.map +1 -1
  282. package/src/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +2 -14
  283. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts +12 -1
  284. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.d.ts.map +1 -1
  285. package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.js +14 -10
  286. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts.map +1 -1
  287. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.js +7 -28
  288. package/src/engine/graphics/ecs/highlight/renderer/HighlightDecodeShader.d.ts +1 -2
  289. package/src/engine/graphics/ecs/highlight/renderer/HighlightDecodeShader.d.ts.map +1 -1
  290. package/src/engine/graphics/ecs/highlight/renderer/HighlightDecodeShader.js +4 -12
  291. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.d.ts.map +1 -1
  292. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +2 -11
  293. package/src/engine/graphics/ecs/highlight/renderer/makeBlurShader_9.d.ts +1 -2
  294. package/src/engine/graphics/ecs/highlight/renderer/makeBlurShader_9.d.ts.map +1 -1
  295. package/src/engine/graphics/ecs/highlight/renderer/makeBlurShader_9.js +3 -11
  296. package/src/engine/graphics/ecs/highlight/renderer/makeDilationShader.d.ts +1 -2
  297. package/src/engine/graphics/ecs/highlight/renderer/makeDilationShader.d.ts.map +1 -1
  298. package/src/engine/graphics/ecs/highlight/renderer/makeDilationShader.js +3 -11
  299. package/src/engine/graphics/ecs/highlight/renderer/make_screen_space_quad_material.d.ts +33 -0
  300. package/src/engine/graphics/ecs/highlight/renderer/make_screen_space_quad_material.d.ts.map +1 -0
  301. package/src/engine/graphics/ecs/highlight/renderer/make_screen_space_quad_material.js +44 -0
  302. package/src/engine/graphics/ecs/highlight/system/HighlightSystemBase.d.ts +55 -0
  303. package/src/engine/graphics/ecs/highlight/system/HighlightSystemBase.d.ts.map +1 -0
  304. package/src/engine/graphics/ecs/highlight/system/HighlightSystemBase.js +205 -0
  305. package/src/engine/graphics/ecs/highlight/system/MeshHighlightSystem.d.ts +4 -45
  306. package/src/engine/graphics/ecs/highlight/system/MeshHighlightSystem.d.ts.map +1 -1
  307. package/src/engine/graphics/ecs/highlight/system/MeshHighlightSystem.js +39 -162
  308. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.d.ts +4 -51
  309. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.d.ts.map +1 -1
  310. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.js +34 -164
  311. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts +5 -57
  312. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
  313. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +48 -175
  314. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +1 -1
  315. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +7 -25
  316. package/src/engine/graphics/ecs/make_bvh_depth_range_computer.d.ts +26 -0
  317. package/src/engine/graphics/ecs/make_bvh_depth_range_computer.d.ts.map +1 -0
  318. package/src/engine/graphics/ecs/make_bvh_depth_range_computer.js +33 -0
  319. package/src/engine/graphics/ecs/mesh/MeshSystem.d.ts.map +1 -1
  320. package/src/engine/graphics/ecs/mesh/MeshSystem.js +2 -5
  321. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts.map +1 -1
  322. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +2 -5
  323. package/src/engine/graphics/ecs/render_layers_compute_depth_range.d.ts +35 -0
  324. package/src/engine/graphics/ecs/render_layers_compute_depth_range.d.ts.map +1 -0
  325. package/src/engine/graphics/ecs/render_layers_compute_depth_range.js +64 -0
  326. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
  327. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +2 -5
  328. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts.map +1 -1
  329. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.js +2 -5
  330. package/src/engine/graphics/ecs/water/WaterSystem.d.ts.map +1 -1
  331. package/src/engine/graphics/ecs/water/WaterSystem.js +2 -5
  332. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_nearest.d.ts.map +1 -1
  333. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_nearest.js +22 -94
  334. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_overlap_clipping_volume.d.ts.map +1 -1
  335. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_overlap_clipping_volume.js +17 -57
  336. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  337. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +17 -57
  338. package/src/engine/graphics/geometry/buffered/query/nearest_point_on_triangle_record.d.ts +30 -0
  339. package/src/engine/graphics/geometry/buffered/query/nearest_point_on_triangle_record.d.ts.map +1 -0
  340. package/src/engine/graphics/geometry/buffered/query/nearest_point_on_triangle_record.js +87 -0
  341. package/src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.d.ts.map +1 -1
  342. package/src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.js +11 -55
  343. package/src/engine/graphics/geometry/buffered/read_triangle_vertices.d.ts +29 -0
  344. package/src/engine/graphics/geometry/buffered/read_triangle_vertices.d.ts.map +1 -0
  345. package/src/engine/graphics/geometry/buffered/read_triangle_vertices.js +102 -0
  346. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderDepthV0.d.ts.map +1 -1
  347. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderDepthV0.js +17 -122
  348. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderLitV0.d.ts.map +1 -1
  349. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderLitV0.js +15 -194
  350. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderNormalsV0.d.ts.map +1 -1
  351. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderNormalsV0.js +12 -108
  352. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderPerPixelV0.d.ts.map +1 -1
  353. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderPerPixelV0.js +14 -183
  354. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderV0.d.ts.map +1 -1
  355. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderV0.js +12 -154
  356. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderViewportDepthV0.d.ts.map +1 -1
  357. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderViewportDepthV0.js +10 -94
  358. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderWireframeV0.d.ts.map +1 -1
  359. package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderWireframeV0.js +8 -72
  360. package/src/engine/graphics/impostors/octahedral/shader/glsl/common.glsl +10 -0
  361. package/src/engine/graphics/impostors/voxel/bake/read_atlas_to_samples.d.ts.map +1 -1
  362. package/src/engine/graphics/impostors/voxel/bake/read_atlas_to_samples.js +79 -58
  363. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderDepthV0.d.ts.map +1 -1
  364. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderDepthV0.js +11 -22
  365. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderLitV0.d.ts.map +1 -1
  366. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderLitV0.js +7 -16
  367. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderNormalsV0.d.ts.map +1 -1
  368. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderNormalsV0.js +5 -9
  369. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderV0.d.ts.map +1 -1
  370. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderV0.js +4 -19
  371. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderViewportDepthV0.d.ts.map +1 -1
  372. package/src/engine/graphics/impostors/voxel/shader/VoxelImpostorShaderViewportDepthV0.js +5 -9
  373. package/src/engine/graphics/material/SplatMaterial.d.ts.map +1 -1
  374. package/src/engine/graphics/material/SplatMaterial.js +2 -17
  375. package/src/engine/graphics/material/WaterMaterial.d.ts.map +1 -1
  376. package/src/engine/graphics/material/WaterMaterial.js +3 -18
  377. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.d.ts +4 -4
  378. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.d.ts.map +1 -1
  379. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.js +25 -70
  380. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts.map +1 -1
  381. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.js +2 -5
  382. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts +8 -11
  383. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.d.ts.map +1 -1
  384. package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.js +20 -21
  385. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts +39 -0
  386. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.d.ts.map +1 -0
  387. package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.js +45 -0
  388. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts +6 -8
  389. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.d.ts.map +1 -1
  390. package/src/engine/graphics/particles/node-based/particle/ParticleAttributeSpecification.js +2 -13
  391. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +1 -1
  392. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +16 -78
  393. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts +45 -0
  394. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  395. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.js +168 -0
  396. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
  397. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +11 -115
  398. package/src/engine/graphics/postprocess/threejs/shaders/CopyShader.d.ts +24 -16
  399. package/src/engine/graphics/postprocess/threejs/shaders/CopyShader.d.ts.map +1 -1
  400. package/src/engine/graphics/postprocess/threejs/shaders/CopyShader.js +15 -47
  401. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts +4 -0
  402. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.d.ts.map +1 -1
  403. package/src/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +4 -0
  404. package/src/engine/graphics/sh3/build_injected_shader.d.ts +51 -0
  405. package/src/engine/graphics/sh3/build_injected_shader.d.ts.map +1 -0
  406. package/src/engine/graphics/sh3/build_injected_shader.js +56 -0
  407. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -1
  408. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +10 -1
  409. package/src/engine/graphics/sh3/gi/material/chunk_lpv_get_irradiance_at.d.ts.map +1 -1
  410. package/src/engine/graphics/sh3/gi/material/chunk_lpv_get_irradiance_at.js +17 -0
  411. package/src/engine/graphics/sh3/gi/material/common.d.ts +1 -1
  412. package/src/engine/graphics/sh3/gi/material/common.js +6 -222
  413. package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.d.ts.map +1 -1
  414. package/src/engine/graphics/sh3/gi/material/space_fragment/build_fragment_shader.js +7 -11
  415. package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.d.ts.map +1 -1
  416. package/src/engine/graphics/sh3/gi/material/space_fragment/build_vertex_shader.js +27 -29
  417. package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.d.ts.map +1 -1
  418. package/src/engine/graphics/sh3/gi/material/space_vertex/build_fragment_shader.js +7 -11
  419. package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.d.ts.map +1 -1
  420. package/src/engine/graphics/sh3/gi/material/space_vertex/build_vertex_shader.js +7 -12
  421. package/src/engine/graphics/sh3/grid_dilate_average.d.ts +38 -0
  422. package/src/engine/graphics/sh3/grid_dilate_average.d.ts.map +1 -0
  423. package/src/engine/graphics/sh3/grid_dilate_average.js +175 -0
  424. package/src/engine/graphics/sh3/lightmap/lightmap_dilate.d.ts +4 -0
  425. package/src/engine/graphics/sh3/lightmap/lightmap_dilate.d.ts.map +1 -1
  426. package/src/engine/graphics/sh3/lightmap/lightmap_dilate.js +7 -70
  427. package/src/engine/graphics/sh3/lpg/light_probe_grid_dilate.d.ts +6 -0
  428. package/src/engine/graphics/sh3/lpg/light_probe_grid_dilate.d.ts.map +1 -1
  429. package/src/engine/graphics/sh3/lpg/light_probe_grid_dilate.js +14 -113
  430. package/src/engine/graphics/sh3/lpg/material/chunk_lpg_get_irradiance_at.d.ts.map +1 -1
  431. package/src/engine/graphics/sh3/lpg/material/chunk_lpg_get_irradiance_at.js +7 -0
  432. package/src/engine/graphics/sh3/lpg/material/space_fragment/build_fragment_shader.d.ts.map +1 -1
  433. package/src/engine/graphics/sh3/lpg/material/space_fragment/build_fragment_shader.js +5 -8
  434. package/src/engine/graphics/sh3/lpg/material/space_fragment/build_vertex_shader.d.ts.map +1 -1
  435. package/src/engine/graphics/sh3/lpg/material/space_fragment/build_vertex_shader.js +5 -8
  436. package/src/engine/graphics/sh3/lpg/material/space_vertex/build_fragment_shader.d.ts.map +1 -1
  437. package/src/engine/graphics/sh3/lpg/material/space_vertex/build_fragment_shader.js +5 -8
  438. package/src/engine/graphics/sh3/lpg/material/space_vertex/build_vertex_shader.d.ts.map +1 -1
  439. package/src/engine/graphics/sh3/lpg/material/space_vertex/build_vertex_shader.js +5 -8
  440. package/src/engine/graphics/sh3/lpv/depth/chunk_probe_depth_sampling.d.ts +38 -0
  441. package/src/engine/graphics/sh3/lpv/depth/chunk_probe_depth_sampling.d.ts.map +1 -0
  442. package/src/engine/graphics/sh3/lpv/depth/chunk_probe_depth_sampling.js +265 -0
  443. package/src/engine/graphics/sh3/lpv/depth/octahedral/shader/visualize.frag.glsl +11 -0
  444. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.d.ts.map +1 -1
  445. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/VLPDepthMapVisualisation.js +5 -1
  446. package/src/engine/graphics/sh3/lpv/depth/octahedral/v2/visualise.frag.glsl +189 -419
  447. package/src/engine/graphics/sh3/shader/visualize.frag.d.ts +1 -1
  448. package/src/engine/graphics/sh3/shader/visualize.frag.js +7 -0
  449. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts +102 -0
  450. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.d.ts.map +1 -0
  451. package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.js +277 -0
  452. package/src/engine/graphics/shaders/chunks/glsl_packing.d.ts +29 -0
  453. package/src/engine/graphics/shaders/chunks/glsl_packing.d.ts.map +1 -0
  454. package/src/engine/graphics/shaders/chunks/glsl_packing.js +30 -0
  455. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts +40 -0
  456. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.d.ts.map +1 -0
  457. package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.js +57 -0
  458. package/src/engine/graphics/shaders/lib/make_clouds_uniforms.d.ts +22 -0
  459. package/src/engine/graphics/shaders/lib/make_clouds_uniforms.d.ts.map +1 -0
  460. package/src/engine/graphics/shaders/lib/make_clouds_uniforms.js +39 -0
  461. package/src/engine/graphics/texture/attribute_spec_to_three_format.d.ts +6 -0
  462. package/src/engine/graphics/texture/attribute_spec_to_three_format.d.ts.map +1 -1
  463. package/src/engine/graphics/texture/attribute_spec_to_three_format.js +9 -9
  464. package/src/engine/graphics/texture/channel_count_to_format_prefix.d.ts +14 -0
  465. package/src/engine/graphics/texture/channel_count_to_format_prefix.d.ts.map +1 -0
  466. package/src/engine/graphics/texture/channel_count_to_format_prefix.js +26 -0
  467. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts.map +1 -1
  468. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.js +2 -20
  469. package/src/engine/graphics/texture/normalized_internal_format.d.ts.map +1 -1
  470. package/src/engine/graphics/texture/normalized_internal_format.js +2 -20
  471. package/src/engine/graphics/texture/sampler/convertTexture2Sampler2D.d.ts.map +1 -1
  472. package/src/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +9 -3
  473. package/src/engine/input/devices/gamepad/GamepadDeviceLayout.d.ts +54 -0
  474. package/src/engine/input/devices/gamepad/GamepadDeviceLayout.d.ts.map +1 -0
  475. package/src/engine/input/devices/gamepad/GamepadDeviceLayout.js +323 -0
  476. package/src/engine/input/devices/gamepad/GamepadHandle.d.ts +21 -2
  477. package/src/engine/input/devices/gamepad/GamepadHandle.d.ts.map +1 -1
  478. package/src/engine/input/devices/gamepad/GamepadHandle.js +39 -11
  479. package/src/engine/input/devices/gamepad/GamepadLayout.d.ts +128 -0
  480. package/src/engine/input/devices/gamepad/GamepadLayout.d.ts.map +1 -0
  481. package/src/engine/input/devices/gamepad/GamepadLayout.js +160 -0
  482. package/src/engine/input/devices/gamepad/GamepadStandardMapping.d.ts +10 -0
  483. package/src/engine/input/devices/gamepad/GamepadStandardMapping.d.ts.map +1 -1
  484. package/src/engine/input/devices/gamepad/GamepadStandardMapping.js +11 -0
  485. package/src/engine/input/devices/gamepad/GamepadStick.d.ts +5 -1
  486. package/src/engine/input/devices/gamepad/GamepadStick.d.ts.map +1 -1
  487. package/src/engine/input/devices/gamepad/GamepadStick.js +5 -1
  488. package/src/engine/input/devices/gamepad/gamepad_layout_database.d.ts +27 -0
  489. package/src/engine/input/devices/gamepad/gamepad_layout_database.d.ts.map +1 -0
  490. package/src/engine/input/devices/gamepad/gamepad_layout_database.js +144 -0
  491. package/src/engine/input/devices/gamepad/gamepad_read_hat_axis.d.ts +25 -0
  492. package/src/engine/input/devices/gamepad/gamepad_read_hat_axis.d.ts.map +1 -0
  493. package/src/engine/input/devices/gamepad/gamepad_read_hat_axis.js +61 -0
  494. package/src/engine/input/devices/gamepad/prototypeGamepadTester.d.ts +2 -0
  495. package/src/engine/input/devices/gamepad/prototypeGamepadTester.d.ts.map +1 -0
  496. package/src/engine/input/devices/gamepad/prototypeGamepadTester.js +2124 -0
  497. package/src/engine/input/ecs/util/TopDownCameraControllerHelper.d.ts.map +1 -1
  498. package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +3 -33
  499. package/src/engine/intelligence/behavior/util/RandomDelayBehavior.d.ts.map +1 -1
  500. package/src/engine/intelligence/behavior/util/RandomDelayBehavior.js +5 -0
  501. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
  502. package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +18 -19
  503. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
  504. package/src/engine/network/adapters/TransformInterpolationAdapter.js +18 -13
  505. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  506. package/src/engine/network/orchestrator/NetworkPeer.js +2 -1
  507. package/src/engine/network/sim/ActionLog.d.ts +9 -6
  508. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  509. package/src/engine/network/sim/ActionLog.js +43 -80
  510. package/src/engine/network/sim/SmoothingState.d.ts.map +1 -1
  511. package/src/engine/network/sim/SmoothingState.js +27 -28
  512. package/src/engine/network/state/FrameBufferRing.d.ts +84 -0
  513. package/src/engine/network/state/FrameBufferRing.d.ts.map +1 -0
  514. package/src/engine/network/state/FrameBufferRing.js +168 -0
  515. package/src/engine/network/state/InputRing.d.ts +14 -12
  516. package/src/engine/network/state/InputRing.d.ts.map +1 -1
  517. package/src/engine/network/state/InputRing.js +37 -76
  518. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  519. package/src/engine/network/transport/LoopbackTransport.js +10 -31
  520. package/src/engine/network/transport/Transport.d.ts +42 -2
  521. package/src/engine/network/transport/Transport.d.ts.map +1 -1
  522. package/src/engine/network/transport/Transport.js +87 -3
  523. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  524. package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -33
  525. package/src/engine/network/transport/adapters/SimulatedTransport.d.ts.map +1 -1
  526. package/src/engine/network/transport/adapters/SimulatedTransport.js +17 -28
  527. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -1
  528. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +6 -32
  529. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -1
  530. package/src/engine/network/transport/adapters/WebSocketTransport.js +6 -32
  531. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  532. package/src/engine/network/transport/adapters/WebTransportTransport.js +11 -22
  533. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  534. package/src/engine/physics/constraint/solve_constraints.js +18 -48
  535. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  536. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  537. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -1
  538. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +7 -0
  539. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  540. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +11 -18
  541. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  542. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +7 -0
  543. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  544. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +15 -57
  545. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -1
  546. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +7 -0
  547. package/src/engine/physics/fluid/solver/v3_grid_limit8_at_indices.d.ts +28 -0
  548. package/src/engine/physics/fluid/solver/v3_grid_limit8_at_indices.d.ts.map +1 -0
  549. package/src/engine/physics/fluid/solver/v3_grid_limit8_at_indices.js +38 -0
  550. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
  551. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +12 -14
  552. package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts.map +1 -1
  553. package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +9 -0
  554. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts +13 -1
  555. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
  556. package/src/engine/physics/mls-mpm/MLS_MPM.js +15 -4
  557. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  558. package/src/engine/physics/narrowphase/box_triangle_contact.js +9 -0
  559. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  560. package/src/engine/physics/narrowphase/capsule_contacts.js +10 -11
  561. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
  562. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +7 -12
  563. package/src/engine/physics/solver/apply_impulse_to_body.d.ts +36 -0
  564. package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -0
  565. package/src/engine/physics/solver/apply_impulse_to_body.js +86 -0
  566. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  567. package/src/engine/physics/solver/solve_contacts.js +1 -53
  568. package/src/engine/plugin/EnginePlugin.d.ts +3 -0
  569. package/src/engine/plugin/EnginePlugin.d.ts.map +1 -1
  570. package/src/engine/plugin/EnginePlugin.js +3 -0
  571. package/src/engine/save/storage/IndexedDBStorage.d.ts +1 -0
  572. package/src/engine/save/storage/IndexedDBStorage.d.ts.map +1 -1
  573. package/src/engine/save/storage/IndexedDBStorage.js +50 -50
  574. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
  575. package/src/engine/sound/ecs/SoundControllerSystem.js +2 -10
  576. package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
  577. package/src/engine/sound/simulation/AcousticSimulator.js +2 -1
  578. package/src/engine/sound/simulation/core/AcousticOccluderIndex.d.ts.map +1 -1
  579. package/src/engine/sound/simulation/core/AcousticOccluderIndex.js +4 -6
  580. package/src/engine/sound/simulation/core/OcclusionSolver.d.ts.map +1 -1
  581. package/src/engine/sound/simulation/core/OcclusionSolver.js +2 -9
  582. package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.d.ts.map +1 -1
  583. package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.js +9 -14
  584. package/src/engine/sound/simulation/probe/bakeReverbBands.d.ts.map +1 -1
  585. package/src/engine/sound/simulation/probe/bakeReverbBands.js +2 -6
  586. package/src/engine/sound/simulation/probe/bakeVisibility.d.ts.map +1 -1
  587. package/src/engine/sound/simulation/probe/bakeVisibility.js +4 -34
  588. package/src/engine/sound/simulation/probe/probe_densify_portals.d.ts.map +1 -1
  589. package/src/engine/sound/simulation/probe/probe_densify_portals.js +3 -6
  590. package/src/engine/sound/simulation/probe/probe_edge_key.d.ts +31 -0
  591. package/src/engine/sound/simulation/probe/probe_edge_key.d.ts.map +1 -0
  592. package/src/engine/sound/simulation/probe/probe_edge_key.js +38 -0
  593. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +10 -3
  594. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  595. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +10 -22
  596. package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts.map +1 -1
  597. package/src/engine/sound/simulation/probe/probe_visibility_augment.js +12 -48
  598. package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.d.ts.map +1 -1
  599. package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.js +4 -3
  600. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.d.ts +5 -4
  601. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.d.ts.map +1 -1
  602. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.js +23 -31
  603. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts +1 -8
  604. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
  605. package/src/engine/sound/simulation/render/reverbImpulseResponse.js +21 -31
  606. package/src/engine/sound/simulation/render/reverb_band_tails.d.ts +55 -0
  607. package/src/engine/sound/simulation/render/reverb_band_tails.d.ts.map +1 -0
  608. package/src/engine/sound/simulation/render/reverb_band_tails.js +93 -0
  609. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -1
  610. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +6 -22
  611. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  612. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +7 -3
  613. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -1
  614. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +7 -22
  615. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -1
  616. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +28 -0
  617. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  618. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +1 -5
  619. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -1
  620. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +1 -13
  621. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  622. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -8
  623. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +3 -0
  624. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -1
  625. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +26 -14
  626. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  627. package/src/engine/sound/sopra/runtime/BusGraph.js +21 -33
  628. package/src/engine/sound/sopra/runtime/EventInstance.js +1 -1
  629. package/src/engine/ui/apply_pointer_tilt_3d.d.ts +25 -0
  630. package/src/engine/ui/apply_pointer_tilt_3d.d.ts.map +1 -0
  631. package/src/engine/ui/apply_pointer_tilt_3d.js +50 -0
  632. package/src/engine/ui/bindings/processors/DomElementProcessorTilt3D.d.ts.map +1 -1
  633. package/src/engine/ui/bindings/processors/DomElementProcessorTilt3D.js +9 -26
  634. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  635. package/src/generation/filtering/numeric/CellFilterCache.js +4 -21
  636. package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
  637. package/src/generation/filtering/numeric/complex/CellFilterSobel.js +11 -20
  638. package/src/generation/filtering/numeric/math/CellFilterPower.d.ts +1 -1
  639. package/src/generation/filtering/numeric/math/CellFilterPower.d.ts.map +1 -1
  640. package/src/generation/filtering/numeric/math/CellFilterPower.js +1 -5
  641. package/src/generation/filtering/numeric/process/computeCellFilterGradient.d.ts.map +1 -1
  642. package/src/generation/filtering/numeric/process/computeCellFilterGradient.js +13 -15
  643. package/src/generation/filtering/numeric/process/computeCellFilterSobel.d.ts +20 -0
  644. package/src/generation/filtering/numeric/process/computeCellFilterSobel.d.ts.map +1 -0
  645. package/src/generation/filtering/numeric/process/computeCellFilterSobel.js +36 -0
  646. package/src/generation/filtering/numeric/util/CellFilterDisplaced.d.ts.map +1 -1
  647. package/src/generation/filtering/numeric/util/CellFilterDisplaced.js +11 -6
  648. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
  649. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +18 -36
  650. package/src/generation/filtering/numeric/util/write_cell_filter_to_sampler2d.d.ts +21 -0
  651. package/src/generation/filtering/numeric/util/write_cell_filter_to_sampler2d.d.ts.map +1 -0
  652. package/src/generation/filtering/numeric/util/write_cell_filter_to_sampler2d.js +47 -0
  653. package/src/generation/filtering/util/cell_filter_weights_pick.d.ts +25 -0
  654. package/src/generation/filtering/util/cell_filter_weights_pick.d.ts.map +1 -0
  655. package/src/generation/filtering/util/cell_filter_weights_pick.js +54 -0
  656. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
  657. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +14 -1
  658. package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
  659. package/src/generation/markers/GridActionRuleSet.js +10 -7
  660. package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
  661. package/src/generation/markers/GridCellActionPlaceMarker.js +10 -12
  662. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
  663. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +7 -42
  664. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
  665. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +11 -6
  666. package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
  667. package/src/generation/placement/GridCellPlacementRule.js +10 -7
  668. package/src/generation/placement/action/GridCellActionPlaceTags.d.ts.map +1 -1
  669. package/src/generation/placement/action/GridCellActionPlaceTags.js +10 -4
  670. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
  671. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +2 -38
  672. package/src/generation/placement/action/util/GridCellDisplacedAction.d.ts.map +1 -1
  673. package/src/generation/placement/action/util/GridCellDisplacedAction.js +11 -6
  674. package/src/generation/rules/cell/CellMatcherGridPattern.d.ts.map +1 -1
  675. package/src/generation/rules/cell/CellMatcherGridPattern.js +11 -4
  676. package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
  677. package/src/generation/theme/ThemeEngine.js +7 -12
  678. package/src/view/elements/Group.d.ts +24 -3
  679. package/src/view/elements/Group.d.ts.map +1 -1
  680. package/src/view/elements/Group.js +56 -34
@@ -1,11 +1,23 @@
1
+ /**
2
+ * Blurs another {@link PointFitnessFunction} by sampling it over an axis-aligned box centred on the
3
+ * query point and weighting the samples with a separable 3D gaussian.
4
+ *
5
+ * Sampling convention (shared with {@link CellFilterGaussianBlur}): the taps are centred on
6
+ * `(samples-1)/2` and spaced `size/(samples-1)` apart, so the outermost taps land exactly on the
7
+ * faces of the box and the tap pattern is symmetric about the query point.
8
+ *
9
+ * An axis with a zero `size` still gets its (minimum) taps, but they all land on the query point,
10
+ * so the axis contributes a constant factor that cancels in the normalisation — i.e. a `size_z` of
11
+ * 0 gives a plain 2D blur.
12
+ */
1
13
  export class PointFitnessGaussianBlur extends PointFitnessFunction {
2
14
  /**
3
15
  *
4
16
  * @param {PointFitnessFunction} source
5
- * @param {number} x
17
+ * @param {number} x size of the blur box along X, in world units
6
18
  * @param {number} y
7
19
  * @param {number} z
8
- * @param {number} [quality]
20
+ * @param {number} [quality] taps per world unit along each axis
9
21
  * @returns {PointFitnessGaussianBlur}
10
22
  */
11
23
  static from(source: PointFitnessFunction, x: number, y: number, z: number, quality?: number): PointFitnessGaussianBlur;
@@ -18,6 +30,14 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
18
30
  size_x: number;
19
31
  size_y: number;
20
32
  size_z: number;
33
+ /**
34
+ * Taps per world unit that {@link samples_x}/{@link samples_y}/{@link samples_z} were derived
35
+ * from. Kept only so the derivation can be reproduced (serialization records the box size and
36
+ * the quality, not the resulting tap counts); {@link evaluate} reads the sample counts.
37
+ *
38
+ * @type {number}
39
+ */
40
+ quality: number;
21
41
  /**
22
42
  *
23
43
  * @type {PointFitnessFunction}
@@ -1 +1 @@
1
- {"version":3,"file":"PointFitnessGaussianBlur.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js"],"names":[],"mappings":"AAIA;IAwBI;;;;;;;;OAQG;IACH,oBAPW,oBAAoB,KACpB,MAAM,KACN,MAAM,KACN,MAAM,YACN,MAAM,GACJ,wBAAwB,CAwBpC;IAnDG,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAElB,gBAAiB;IACjB,gBAAiB;IACjB,gBAAiB;IAGjB,eAAe;IACf,eAAe;IACf,eAAe;IAEf;;;OAGG;IACH,QAFU,oBAAoB,CAEZ;IAoCtB,mDA4DC;IAGL,aAAuC;CAFtC;qCA1HoC,4BAA4B"}
1
+ {"version":3,"file":"PointFitnessGaussianBlur.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;GAWG;AACH;IA6BI;;;;;;;;OAQG;IACH,oBAPW,oBAAoB,KACpB,MAAM,KACN,MAAM,KACN,MAAM,YACN,MAAM,GACJ,wBAAwB,CA8BpC;IAhED,kBAAc;IACd,kBAAc;IACd,kBAAc;IAEd,gBAAwB;IACxB,gBAAwB;IACxB,gBAAwB;IAExB,eAAW;IACX,eAAW;IACX,eAAW;IAEX;;;;;;OAMG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,QAFU,oBAAoB,CAEhB;IAyCd,mDA2DC;IAGL,aAAuC;CAFtC;qCA7KoC,4BAA4B"}
@@ -1,38 +1,84 @@
1
1
  import { PointFitnessFunction } from "../PointFitnessFunction.js";
2
2
  import { assert } from "../../../../core/assert.js";
3
3
  import { gaussian } from "../../../../core/math/gaussian.js";
4
+ import { max2 } from "../../../../core/math/max2.js";
5
+ import { nextOdd } from "../../../../core/math/nextOdd.js";
6
+
7
+ /**
8
+ * Number of taps to spread across one axis of the blur box.
9
+ *
10
+ * Forced odd so a tap lands exactly on the centre, and to at least 3 so the axis is actually
11
+ * sampled either side of centre. Matches {@link CellFilterGaussianBlur.from}.
12
+ *
13
+ * @param {number} extent size of the blur box along this axis, in world units
14
+ * @param {number} quality taps per world unit
15
+ * @returns {number} odd integer, at least 3
16
+ */
17
+ function axis_sample_count(extent, quality) {
18
+ return max2(3, nextOdd(Math.round(quality * extent)));
19
+ }
20
+
21
+ /**
22
+ * Standard deviation for an axis, in kernel-index units.
23
+ *
24
+ * The kernel spans `±(samples-1)/2` indices and should cover `±3` sigma of the gaussian, otherwise
25
+ * the taps sit on a near-flat part of the bell and the "blur" degenerates into a box filter.
26
+ *
27
+ * @param {number} samples
28
+ * @returns {number}
29
+ */
30
+ function axis_sigma(samples) {
31
+ return (samples - 1) / 6;
32
+ }
4
33
 
34
+ /**
35
+ * Blurs another {@link PointFitnessFunction} by sampling it over an axis-aligned box centred on the
36
+ * query point and weighting the samples with a separable 3D gaussian.
37
+ *
38
+ * Sampling convention (shared with {@link CellFilterGaussianBlur}): the taps are centred on
39
+ * `(samples-1)/2` and spaced `size/(samples-1)` apart, so the outermost taps land exactly on the
40
+ * faces of the box and the tap pattern is symmetric about the query point.
41
+ *
42
+ * An axis with a zero `size` still gets its (minimum) taps, but they all land on the query point,
43
+ * so the axis contributes a constant factor that cancels in the normalisation — i.e. a `size_z` of
44
+ * 0 gives a plain 2D blur.
45
+ */
5
46
  export class PointFitnessGaussianBlur extends PointFitnessFunction {
6
- constructor() {
7
- super();
8
47
 
9
- this.samples_x = 5;
10
- this.samples_y = 5;
11
- this.samples_z = 5;
48
+ samples_x = 5;
49
+ samples_y = 5;
50
+ samples_z = 5;
12
51
 
13
- this.sigma_x = 10;
14
- this.sigma_y = 10;
15
- this.sigma_z = 10;
52
+ sigma_x = axis_sigma(5);
53
+ sigma_y = axis_sigma(5);
54
+ sigma_z = axis_sigma(5);
16
55
 
56
+ size_x = 1;
57
+ size_y = 1;
58
+ size_z = 1;
17
59
 
18
- this.size_x = 1;
19
- this.size_y = 1;
20
- this.size_z = 1;
60
+ /**
61
+ * Taps per world unit that {@link samples_x}/{@link samples_y}/{@link samples_z} were derived
62
+ * from. Kept only so the derivation can be reproduced (serialization records the box size and
63
+ * the quality, not the resulting tap counts); {@link evaluate} reads the sample counts.
64
+ *
65
+ * @type {number}
66
+ */
67
+ quality = 5;
21
68
 
22
- /**
23
- *
24
- * @type {PointFitnessFunction}
25
- */
26
- this.source = null;
27
- }
69
+ /**
70
+ *
71
+ * @type {PointFitnessFunction}
72
+ */
73
+ source = null;
28
74
 
29
75
  /**
30
76
  *
31
77
  * @param {PointFitnessFunction} source
32
- * @param {number} x
78
+ * @param {number} x size of the blur box along X, in world units
33
79
  * @param {number} y
34
80
  * @param {number} z
35
- * @param {number} [quality]
81
+ * @param {number} [quality] taps per world unit along each axis
36
82
  * @returns {PointFitnessGaussianBlur}
37
83
  */
38
84
  static from(source, x, y, z, quality = 5) {
@@ -48,14 +94,20 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
48
94
 
49
95
  r.source = source;
50
96
 
51
- r.samples_x = x * quality;
52
- r.samples_y = y * quality;
53
- r.samples_z = z * quality;
97
+ r.quality = quality;
98
+
99
+ r.samples_x = axis_sample_count(x, quality);
100
+ r.samples_y = axis_sample_count(y, quality);
101
+ r.samples_z = axis_sample_count(z, quality);
54
102
 
55
103
  r.size_x = x;
56
104
  r.size_y = y;
57
105
  r.size_z = z;
58
106
 
107
+ r.sigma_x = axis_sigma(r.samples_x);
108
+ r.sigma_y = axis_sigma(r.samples_y);
109
+ r.sigma_z = axis_sigma(r.samples_z);
110
+
59
111
  return r;
60
112
  }
61
113
 
@@ -64,13 +116,17 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
64
116
  const samplesY = this.samples_y;
65
117
  const samplesZ = this.samples_z;
66
118
 
67
- const half_samples_x = (samplesX / 2);
68
- const half_samples_y = (samplesY / 2);
69
- const half_samples_z = (samplesZ / 2);
119
+ // taps are centred on the middle index, so they are symmetric about the query point
120
+ const half_samples_x = (samplesX - 1) * 0.5;
121
+ const half_samples_y = (samplesY - 1) * 0.5;
122
+ const half_samples_z = (samplesZ - 1) * 0.5;
123
+
124
+ // spacing that puts the outermost taps exactly on the faces of the blur box
125
+ const step_x = this.size_x / (samplesX - 1);
126
+ const step_y = this.size_y / (samplesY - 1);
127
+ const step_z = this.size_z / (samplesZ - 1);
70
128
 
71
- const sizeX = this.size_x;
72
- const sizeY = this.size_y;
73
- const sizeZ = this.size_z;
129
+ const source = this.source;
74
130
 
75
131
  let sum = 0;
76
132
  let powerTotal = 0;
@@ -81,18 +137,14 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
81
137
 
82
138
  const fz = gaussian(this.sigma_z, local_z);
83
139
 
84
- const nz = local_z / samplesZ;
85
-
86
- const offset_z = sizeZ * nz;
140
+ const offset_z = local_z * step_z;
87
141
 
88
142
  for (let iy = 0; iy < samplesY; iy++) {
89
143
  const local_y = iy - half_samples_y;
90
144
 
91
145
  const fy = gaussian(this.sigma_y, local_y);
92
146
 
93
- const ny = local_y / samplesY;
94
-
95
- const offset_y = sizeY * ny;
147
+ const offset_y = local_y * step_y;
96
148
 
97
149
  for (let ix = 0; ix < samplesX; ix++) {
98
150
 
@@ -100,15 +152,13 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
100
152
 
101
153
  const fx = gaussian(this.sigma_x, local_x);
102
154
 
103
- const nx = local_x / samplesX;
104
-
105
- const offset_x = sizeX * nx;
155
+ const offset_x = local_x * step_x;
106
156
 
107
157
  const power = fx * fy * fz;
108
158
 
109
159
  powerTotal += power;
110
160
 
111
- const sourceValue = this.source.evaluate(ecd, x + offset_x, y + offset_y, z + offset_z);
161
+ const sourceValue = source.evaluate(ecd, x + offset_x, y + offset_y, z + offset_z);
112
162
 
113
163
  sum += sourceValue * power;
114
164
 
@@ -116,9 +166,10 @@ export class PointFitnessGaussianBlur extends PointFitnessFunction {
116
166
  }
117
167
  }
118
168
 
119
- const result = sum / powerTotal;
120
-
121
- return result;
169
+ // dividing by the accumulated power is exactly what a pre-normalized kernel
170
+ // (see `core/math/build_gaussian_kernel_2d.js`) does; there is no `initialize` stage on
171
+ // PointFitnessFunction to precompute one into, so the weights are evaluated inline
172
+ return sum / powerTotal;
122
173
  }
123
174
  }
124
175
 
@@ -23,7 +23,9 @@ declare class HeadsUpDisplaySystem extends System<any> {
23
23
  shutdown(em: any): Promise<void>;
24
24
  startup(em: any): Promise<void>;
25
25
  /**
26
- * NOTE: for the sake of speed all of the matrix and vector multiplications have been inlined, readability of this method is pretty bad
26
+ * NOTE: for the sake of speed the projection multiplications have been inlined, readability of this method is pretty bad.
27
+ * The quaternion rotation is NOT inlined — {@link v3_quaternion_apply} already writes into a caller-supplied
28
+ * array, so it costs no allocation and there is nothing to gain from a private copy of the expansion.
27
29
  * @param {HeadsUpDisplay} hud
28
30
  * @param {Transform} transform
29
31
  * @param {ViewportPosition} vp
@@ -1 +1 @@
1
- {"version":3,"file":"HeadsUpDisplaySystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js"],"names":[],"mappings":";AAeA;;;;;GAKG;AACH;IASI;;;OAGG;IACH,4BAFW,cAAc,EAqBxB;IA/BD,wCAAgC;IAGhC,2HAGE;IAaE,yBAA8B;IAM9B;;;;OAIG;IACH,+BAAiD;IAGrD,iCAGC;IAED,gCAIC;IAED;;;;;;;OAOG;IACH,sCA6JC;IAED,6BAsBC;CACJ;uBA3PsB,iBAAiB;2BAIb,qBAAqB;uBAFzB,kBAAkB;4CALG,uDAAuD;6BAMtE,iCAAiC;+BAL/B,qCAAqC"}
1
+ {"version":3,"file":"HeadsUpDisplaySystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js"],"names":[],"mappings":";AAsBA;;;;;GAKG;AACH;IASI;;;OAGG;IACH,4BAFW,cAAc,EAqBxB;IA/BD,wCAAgC;IAGhC,2HAGE;IAaE,yBAA8B;IAM9B;;;;OAIG;IACH,+BAAiD;IAGrD,iCAGC;IAED,gCAIC;IAED;;;;;;;;;OASG;IACH,sCAkJC;IAED,6BAsBC;CACJ;uBAxPsB,iBAAiB;2BAIb,qBAAqB;uBAFzB,kBAAkB;4CALG,uDAAuD;6BAMtE,iCAAiC;+BAL/B,qCAAqC"}
@@ -1,4 +1,5 @@
1
1
  import { m4_multiply } from "../../../../core/geom/3d/mat4/m4_multiply.js";
2
+ import { v3_quaternion_apply } from "../../../../core/geom/vec3/v3_quaternion_apply.js";
2
3
  import { ResourceAccessKind } from "../../../../core/model/ResourceAccessKind.js";
3
4
  import { ResourceAccessSpecification } from "../../../../core/model/ResourceAccessSpecification.js";
4
5
  import { GraphicsEngine } from "../../../graphics/GraphicsEngine.js";
@@ -12,6 +13,12 @@ import { HeadsUpDisplayFlag } from "./HeadsUpDisplayFlag.js";
12
13
 
13
14
  const projection = new Float32Array(16);
14
15
 
16
+ /**
17
+ * Destination for {@link v3_quaternion_apply}; the world offset is rotated through here.
18
+ * @type {Float64Array}
19
+ */
20
+ const scratch_rotated_offset = new Float64Array(3);
21
+
15
22
 
16
23
  /**
17
24
  *
@@ -65,7 +72,9 @@ class HeadsUpDisplaySystem extends System {
65
72
  }
66
73
 
67
74
  /**
68
- * NOTE: for the sake of speed all of the matrix and vector multiplications have been inlined, readability of this method is pretty bad
75
+ * NOTE: for the sake of speed the projection multiplications have been inlined, readability of this method is pretty bad.
76
+ * The quaternion rotation is NOT inlined — {@link v3_quaternion_apply} already writes into a caller-supplied
77
+ * array, so it costs no allocation and there is nothing to gain from a private copy of the expansion.
69
78
  * @param {HeadsUpDisplay} hud
70
79
  * @param {Transform} transform
71
80
  * @param {ViewportPosition} vp
@@ -89,22 +98,11 @@ class HeadsUpDisplaySystem extends System {
89
98
 
90
99
  const q = transform.rotation;
91
100
 
92
- const qx = q.x;
93
- const qy = q.y;
94
- const qz = q.z;
95
- const qw = q.w;
96
-
97
- // calculate quat * vec
98
- const ix = qw * x + qy * z - qz * y;
99
- const iy = qw * y + qz * x - qx * z;
100
- const iz = qw * z + qx * y - qy * x;
101
- const iw = -qx * x - qy * y - qz * z;
102
-
103
- // calculate result * inverse quat
104
- x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
105
- y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
106
- z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
101
+ v3_quaternion_apply(scratch_rotated_offset, 0, x, y, z, q.x, q.y, q.z, q.w);
107
102
 
103
+ x = scratch_rotated_offset[0];
104
+ y = scratch_rotated_offset[1];
105
+ z = scratch_rotated_offset[2];
108
106
  }
109
107
 
110
108
  // add transform position to get final world position
@@ -1 +1 @@
1
- {"version":3,"file":"GuiElementParallaxSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/gui/parallax/GuiElementParallaxSystem.js"],"names":[],"mappings":"AAIA;IAGI;;;;OAIG;IACH,yCAeC;IAtBD,gEAAgD;IAW5C;;;OAGG;IACH,UAFU,OAAK,IAAI,CAEK;IAExB;;;OAGG;IACH,SAFU,gBAAc,IAAI,CAEN;IAG1B;;;;;OAKG;IACH,uBAJW,kBAAkB,WAClB,UAAU,UACV,MAAM,QA2ChB;IAED,6BAWC;CACJ;uBA1FsB,iBAAiB;uBACjB,kBAAkB;mCACN,yBAAyB"}
1
+ {"version":3,"file":"GuiElementParallaxSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/gui/parallax/GuiElementParallaxSystem.js"],"names":[],"mappings":"AAKA;IAGI;;;;OAIG;IACH,yCAeC;IAtBD,gEAAgD;IAW5C;;;OAGG;IACH,UAFU,OAAK,IAAI,CAEK;IAExB;;;OAGG;IACH,SAFU,gBAAc,IAAI,CAEN;IAG1B;;;;;OAKG;IACH,uBAJW,kBAAkB,WAClB,UAAU,UACV,MAAM,QA6BhB;IAED,6BAWC;CACJ;uBA5EsB,iBAAiB;uBACjB,kBAAkB;mCACN,yBAAyB"}
@@ -1,3 +1,4 @@
1
+ import { apply_pointer_tilt_3d } from "../../../ui/apply_pointer_tilt_3d.js";
1
2
  import { System } from "../../System.js";
2
3
  import GUIElement from "../GUIElement.js";
3
4
  import { GuiElementParallax } from "./GuiElementParallax.js";
@@ -37,43 +38,29 @@ export class GuiElementParallaxSystem extends System {
37
38
 
38
39
  const p = this.pointer.position;
39
40
 
40
- const pointer_x = p.x;
41
- const pointer_y = p.y;
42
-
43
41
  const viewport_side = this.viewport.size;
44
42
 
45
43
  const view = element.view;
46
44
 
45
+ const el = view.el;
46
+
47
47
  /**
48
48
  *
49
49
  * @type {ClientRect}
50
50
  */
51
- const rect = view.el.getBoundingClientRect();
52
-
53
- const center_x = rect.left + rect.width * 0.5;
54
- const center_y = rect.top + rect.height * 0.5;
55
-
56
-
57
- const viewport_center_x = viewport_side.x * 0.5;
58
- const viewport_center_y = viewport_side.y * 0.5;
59
-
60
- const delta_x = pointer_x - viewport_center_x;
61
- const delta_y = pointer_y - viewport_center_y;
62
-
63
-
64
- const tilt_x = (delta_y / viewport_center_y);
65
- const tilt_y = -(delta_x / viewport_center_x);
66
-
67
- const radius = Math.sqrt(tilt_x * tilt_x + tilt_y * tilt_y);
68
-
69
- const angle = radius * parallax.angle;
70
-
71
-
72
- const style = view.el.style;
73
-
74
- style.transformOrigin = '50% 50%';
75
- style.transform = `rotate3d(${tilt_x},${tilt_y},0,${angle}deg)`;
76
- style.transformStyle = 'preserve-3d';
51
+ const rect = el.getBoundingClientRect();
52
+
53
+ apply_pointer_tilt_3d(
54
+ el,
55
+ p.x, p.y,
56
+ rect.left + rect.width * 0.5, rect.top + rect.height * 0.5,
57
+ viewport_side.x, viewport_side.y,
58
+ parallax.angle,
59
+ 0
60
+ );
61
+
62
+ // children of a parallaxed element participate in the same 3d space
63
+ el.style.transformStyle = 'preserve-3d';
77
64
  }
78
65
 
79
66
  update(timeDelta) {
@@ -1 +1 @@
1
- {"version":3,"file":"OneBoneSurfaceAlignmentSolver.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js"],"names":[],"mappings":"AAqCA;;GAEG;AACH;IACI,0BA0KC;CACJ;yBA1MwB,eAAe"}
1
+ {"version":3,"file":"OneBoneSurfaceAlignmentSolver.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js"],"names":[],"mappings":"AAkCA;;GAEG;AACH;IACI,0BA+GC;CACJ;yBA/IwB,eAAe"}
@@ -1,13 +1,10 @@
1
1
  import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
2
2
  import Quaternion from "../../../core/geom/Quaternion.js";
3
- import { v3_displace_in_direction } from "../../../core/geom/vec3/v3_displace_in_direction.js";
4
- import { v3_dot } from "../../../core/geom/vec3/v3_dot.js";
5
- import { v3_length } from "../../../core/geom/vec3/v3_length.js";
6
3
  import Vector3 from "../../../core/geom/Vector3.js";
7
4
  import { clamp } from "../../../core/math/clamp.js";
8
- import { clamp01 } from "../../../core/math/clamp01.js";
9
5
  import { inverseLerp } from "../../../core/math/inverseLerp.js";
10
6
  import { findSkeletonBoneByType } from "../../graphics/ecs/mesh/SkeletonUtils.js";
7
+ import { ik_probe_terrain_contact } from "./ik_probe_terrain_contact.js";
11
8
  import { IKSolver } from "./IKSolver.js";
12
9
 
13
10
  const boneWorldPosition = new Vector3();
@@ -71,85 +68,26 @@ export class OneBoneSurfaceAlignmentSolver extends IKSolver {
71
68
  parentWorldPosition.y = parentBoneWM[13];
72
69
  parentWorldPosition.z = parentBoneWM[14];
73
70
 
74
- //compute direction for ray casting
75
- const directionX = boneWorldPosition.x - parentWorldPosition.x;
76
- const directionY = boneWorldPosition.y - parentWorldPosition.y;
77
- const directionZ = boneWorldPosition.z - parentWorldPosition.z;
78
-
79
-
80
- let contactExists = terrain.raycastFirstSync(
81
- contact,
82
- parentWorldPosition.x,
83
- parentWorldPosition.y,
84
- parentWorldPosition.z,
85
- directionX,
86
- directionY,
87
- directionZ
88
- );
89
-
90
- if (!contactExists) {
91
- //no contact
92
- return;
93
- }
94
-
95
- const contactPosition = contact.position;
96
- const contactNormal = contact.normal;
97
-
98
- //perform secondary cast from the bone, back along the surface normal
99
- contactExists = terrain.raycastFirstSync(
100
- contact,
101
- boneWorldPosition.x + contactNormal.x,
102
- boneWorldPosition.y + contactNormal.y,
103
- boneWorldPosition.z + contactNormal.z,
104
- -contactNormal.x,
105
- -contactNormal.y,
106
- -contactNormal.z
107
- );
108
-
109
- if (!contactExists) {
110
- //no contact
111
- return;
112
- }
113
-
114
-
115
71
  const bone_scale = boneWorldScale.length() * ONE_OVER_SQRT_3;
116
72
 
117
- const targetOffsetDistance = constraint.offset * bone_scale;
118
-
119
- v3_displace_in_direction(
73
+ //cast from the parent towards the bone to find the surface underneath it
74
+ let influence = ik_probe_terrain_contact(
120
75
  targetPosition,
121
- targetOffsetDistance,
122
- contactPosition.x, contactPosition.y, contactPosition.z,
123
- contactNormal.x, contactNormal.y, contactNormal.z
76
+ contact,
77
+ terrain,
78
+ parentWorldPosition,
79
+ boneWorldPosition,
80
+ constraint,
81
+ bone_scale
124
82
  );
125
83
 
126
- const delta_contact_c_x = targetPosition.x - boneWorldPosition.x;
127
- const delta_contact_c_y = targetPosition.y - boneWorldPosition.y;
128
- const delta_contact_c_z = targetPosition.z - boneWorldPosition.z;
129
-
130
- //check if current effector position is above the contact point
131
- const dot_contact_side = v3_dot(directionX, directionY, directionZ, delta_contact_c_x, delta_contact_c_y, delta_contact_c_z);
132
-
133
- const delta_contact_c_length = v3_length(delta_contact_c_x, delta_contact_c_y, delta_contact_c_z);
134
-
135
- let influence;
136
-
137
- if (dot_contact_side < 0) {
138
- //penetration detected
139
- influence = 1;
140
-
141
- } else {
142
- //no penetration, hovering case, use hover distance for influence
143
- const normalized_effector_distance = inverseLerp(0, bone_scale, delta_contact_c_length);
144
-
145
- influence = 1 - clamp01(constraint.distance.normalizeValue(normalized_effector_distance));
146
- }
147
-
148
84
  if (influence <= 0) {
149
- //no influence
85
+ //no contact, or no influence
150
86
  return;
151
87
  }
152
88
 
89
+ const contactNormal = contact.normal;
90
+
153
91
  r.copy(bone.quaternion);
154
92
 
155
93
  //we want to make bone align orthogonally to surface contact normal
@@ -1 +1 @@
1
- {"version":3,"file":"TwoBoneInverseKinematicsSolver.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js"],"names":[],"mappings":"AA8CA;IAGI,0BAuIC;CACJ;yBA9KwB,eAAe"}
1
+ {"version":3,"file":"TwoBoneInverseKinematicsSolver.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js"],"names":[],"mappings":"AA0CA;IAGI,0BA4EC;CACJ;yBAnHwB,eAAe"}
@@ -1,14 +1,10 @@
1
1
  import { assert } from "../../../core/assert.js";
2
2
  import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
3
3
  import Quaternion from "../../../core/geom/Quaternion.js";
4
- import { v3_displace_in_direction } from "../../../core/geom/vec3/v3_displace_in_direction.js";
5
- import { v3_dot } from "../../../core/geom/vec3/v3_dot.js";
6
- import { v3_length } from "../../../core/geom/vec3/v3_length.js";
7
4
  import Vector3 from "../../../core/geom/Vector3.js";
8
- import { clamp01 } from "../../../core/math/clamp01.js";
9
- import { inverseLerp } from "../../../core/math/inverseLerp.js";
10
5
  import { findSkeletonBoneByType } from "../../graphics/ecs/mesh/SkeletonUtils.js";
11
6
  import { two_joint_ik } from "../../physics/inverse_kinematics/two_joint_ik.js";
7
+ import { ik_probe_terrain_contact } from "./ik_probe_terrain_contact.js";
12
8
  import { IKSolver } from "./IKSolver.js";
13
9
 
14
10
  const boneWorldPositionC = new Vector3();
@@ -72,81 +68,22 @@ export class TwoBoneInverseKinematicsSolver extends IKSolver {
72
68
  computeGlobalTransform(boneB, boneWorldPositionB, globalRotationB, v3);
73
69
  computeGlobalTransform(boneC, boneWorldPositionC, globalRotationC, v3);
74
70
 
75
- //check if the there is a penetration with the terrain between the two bones
76
- const directionX = boneWorldPositionC.x - boneWorldPositionA.x;
77
- const directionY = boneWorldPositionC.y - boneWorldPositionA.y;
78
- const directionZ = boneWorldPositionC.z - boneWorldPositionA.z;
79
-
80
- let contactExists = terrain.raycastFirstSync(
81
- contact,
82
- boneWorldPositionA.x,
83
- boneWorldPositionA.y,
84
- boneWorldPositionA.z,
85
- directionX,
86
- directionY,
87
- directionZ
88
- );
89
-
90
- if (!contactExists) {
91
- //no contact
92
- return;
93
- }
94
-
95
- const contactPosition = contact.position;
96
- const contactNormal = contact.normal;
97
-
98
- //perform secondary cast from the bone, back along the surface normal
99
- contactExists = terrain.raycastFirstSync(
100
- contact,
101
- boneWorldPositionC.x + contactNormal.x,
102
- boneWorldPositionC.y + contactNormal.y,
103
- boneWorldPositionC.z + contactNormal.z,
104
- -contactNormal.x,
105
- -contactNormal.y,
106
- -contactNormal.z
107
- );
108
-
109
- if (!contactExists) {
110
- //no contact
111
- return;
112
- }
113
-
114
71
  //compute total length of the limb
115
72
  const limbLength = boneWorldPositionA.distanceTo(boneWorldPositionB) + boneWorldPositionB.distanceTo(boneWorldPositionC);
116
73
 
117
- const targetOffsetDistance = constraint.offset * limbLength;
118
-
119
- v3_displace_in_direction(
74
+ //check if there is a penetration with the terrain between the two bones
75
+ const influence = ik_probe_terrain_contact(
120
76
  targetPosition,
121
- targetOffsetDistance,
122
- contactPosition.x, contactPosition.y, contactPosition.z,
123
- contact.normal.x, contact.normal.y, contact.normal.z
77
+ contact,
78
+ terrain,
79
+ boneWorldPositionA,
80
+ boneWorldPositionC,
81
+ constraint,
82
+ limbLength
124
83
  );
125
84
 
126
- const delta_contact_c_x = targetPosition.x - boneWorldPositionC.x;
127
- const delta_contact_c_y = targetPosition.y - boneWorldPositionC.y;
128
- const delta_contact_c_z = targetPosition.z - boneWorldPositionC.z;
129
-
130
- //check if current effector position is above the contact point
131
- const dot_contact_side = v3_dot(directionX, directionY, directionZ, delta_contact_c_x, delta_contact_c_y, delta_contact_c_z);
132
-
133
- const delta_contact_c_length = v3_length(delta_contact_c_x, delta_contact_c_y, delta_contact_c_z);
134
-
135
- let influence;
136
-
137
- if (dot_contact_side < 0) {
138
- //penetration detected
139
- influence = 1;
140
-
141
- } else {
142
- //no penetration, hovering case, use hover distance for influence
143
- const normalized_effector_distance = inverseLerp(0, limbLength, delta_contact_c_length);
144
-
145
- influence = 1 - clamp01(constraint.distance.normalizeValue(normalized_effector_distance));
146
- }
147
-
148
85
  if (influence <= 0) {
149
- //no influence
86
+ //no contact, or no influence
150
87
  return;
151
88
  }
152
89
 
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Find where an IK chain meets the terrain and how strongly the solver should pull towards it.
3
+ *
4
+ * Two casts are made. The first travels from `origin` towards `effector` and establishes which
5
+ * surface the limb is over at all. The second starts just outside that surface, directly above the
6
+ * effector along the surface normal, and comes back down — that is what actually locates the point
7
+ * under the effector rather than the point under the limb's root, and it is what `out_contact` and
8
+ * `out_target` describe on return.
9
+ *
10
+ * The returned influence answers "how much of this correction should apply":
11
+ * - the effector is BELOW the surface (penetrating) → `1`, correct it fully;
12
+ * - the effector HOVERS above the surface → falls off from `1` to `0` across
13
+ * `constraint.distance`, measured as a fraction of `length_scale`, so the same constraint reads
14
+ * the same way for a long limb and a short one;
15
+ * - no surface was found at all → `0`.
16
+ *
17
+ * This exists because {@link TwoBoneInverseKinematicsSolver} and
18
+ * {@link OneBoneSurfaceAlignmentSolver} carried the identical ~70-line probe, comments and variable
19
+ * names included, differing only in which lengths they scaled by. The solvers now hold nothing but
20
+ * their rotation math.
21
+ *
22
+ * @param {Vector3} out_target receives the world position the effector should be moved to; only
23
+ * written when a non-zero influence is returned
24
+ * @param {SurfacePoint3} out_contact receives the surface contact from the SECOND cast; only
25
+ * written when a non-zero influence is returned. Solvers that need the contact normal (surface
26
+ * alignment) read it from here
27
+ * @param {Terrain} terrain
28
+ * @param {Vector3} origin start of the limb, the root bone's world position
29
+ * @param {Vector3} effector world position of the bone being placed. The probe direction is
30
+ * `effector - origin`, so these must not coincide
31
+ * @param {IKConstraint} constraint supplies `offset` (how far off the surface the effector rests)
32
+ * and `distance` (the hover band over which influence falls off)
33
+ * @param {number} length_scale limb length in world units; `constraint.offset` and the hover
34
+ * distance are both expressed relative to it. Must be greater than 0
35
+ * @returns {number} influence in `[0,1]`; `0` means "do nothing"
36
+ */
37
+ export function ik_probe_terrain_contact(out_target: Vector3, out_contact: SurfacePoint3, terrain: Terrain, origin: Vector3, effector: Vector3, constraint: IKConstraint, length_scale: number): number;
38
+ //# sourceMappingURL=ik_probe_terrain_contact.d.ts.map