@woosh/meep-engine 2.56.0 → 2.57.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 (228) hide show
  1. package/editor/ecs/component/editors/ColorEditor.js +1 -1
  2. package/editor/ecs/component/editors/ImagePathEditor.js +2 -2
  3. package/editor/ecs/component/editors/{LargeStrongEditor.js → LargeStringEditor.js} +1 -1
  4. package/editor/tools/GridPaintTool.js +3 -3
  5. package/editor/tools/TopDownCameraControlTool.js +1 -1
  6. package/editor/tools/TransformTool.js +1 -1
  7. package/editor/tools/engine/Tool.js +9 -23
  8. package/editor/tools/engine/ToolEngine.js +5 -7
  9. package/editor/tools/paint/TerrainHeightPaintTool.js +2 -2
  10. package/editor/tools/paint/TerrainPaintTool.js +2 -2
  11. package/editor/tools/paint/TerrainTexturePaintTool.js +2 -2
  12. package/package.json +1 -1
  13. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +1 -1
  14. package/src/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +1 -1
  15. package/src/core/bvh2/traversal/__process_point_if_within_planes.js +1 -1
  16. package/src/core/cache/LoadingCache.js +3 -2
  17. package/src/core/collection/array/arraySetSortingDiff.spec.js +12 -12
  18. package/src/core/collection/array/weightedRandomFromArray.js +2 -2
  19. package/src/core/color/Color.js +6 -6
  20. package/src/core/color/YCbCr/YCbCr.spec.js +16 -0
  21. package/src/core/color/{YCbCr_to_rgb_uint24.js → YCbCr/YCbCr_to_rgb_uint24.js} +6 -6
  22. package/src/core/color/YCbCr/rgb_to_YCbCr_uint24.js +16 -0
  23. package/src/core/color/{hex2rgb.js → hex/hex2rgb.js} +1 -1
  24. package/src/core/color/{rgb2hex.js → hex/rgb2hex.js} +1 -1
  25. package/src/core/color/{hsv2rgb.js → hsv/hsv2rgb.js} +3 -3
  26. package/src/core/color/hsv/rgb2hsv.js +49 -0
  27. package/src/core/color/{kelvin_to_rgb.js → kelvin/kelvin_to_rgb.js} +1 -1
  28. package/src/core/color/{kelvin_to_rgb.spec.js → kelvin/kelvin_to_rgb.spec.js} +2 -2
  29. package/src/core/color/{prototype_kelvin_to_rgb.js → kelvin/prototype_kelvin_to_rgb.js} +5 -5
  30. package/src/core/color/{rgb_to_kelvin.spec.js → kelvin/rgb_to_kelvin.spec.js} +1 -1
  31. package/src/core/color/{parseColor.js → parse_color.js} +4 -4
  32. package/src/core/color/parse_color.spec.js +18 -0
  33. package/src/core/color/rgb2uint24.js +3 -3
  34. package/src/core/color/sRGB/sRGB.spec.js +16 -0
  35. package/src/core/color/xyz/XYZ.spec.js +16 -0
  36. package/src/core/color/xyz/rgb_to_xyz.js +15 -0
  37. package/src/core/color/xyz/xyz_to_rgb.js +14 -0
  38. package/src/core/events/signal/Signal.js +5 -0
  39. package/src/core/events/signal/{signalAggregateByTimeWindow.js → signal_aggregate_by_time_window.js} +1 -1
  40. package/src/core/events/signal/{SignalUtils.js → signal_filter.js} +1 -2
  41. package/src/core/geom/2d/spline_bezier2_2d.js +26 -0
  42. package/src/core/geom/2d/spline_bezier2_2d.spec.js +16 -0
  43. package/src/core/geom/3d/SurfacePoint3.js +1 -1
  44. package/src/core/geom/3d/aabb/aabb3_compute_plane_side.js +1 -1
  45. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +1 -1
  46. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +1 -1
  47. package/src/core/geom/3d/compute_circle_bounding_box.js +1 -1
  48. package/src/core/geom/3d/cone/computeConeBoundingBox.js +1 -1
  49. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  50. package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +1 -1
  51. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +1 -1
  52. package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  53. package/src/core/geom/3d/normal/spherical/sphere_map_transform.js +1 -1
  54. package/src/core/geom/3d/plane/is_point_within_planes.js +1 -1
  55. package/src/core/geom/3d/plane/lerp_planes_to_array.js +1 -1
  56. package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +1 -1
  57. package/src/core/geom/3d/plane/plane3_compute_line_segment_intersection.js +1 -1
  58. package/src/core/geom/3d/plane/plane3_compute_ray_intersection.js +1 -1
  59. package/src/core/geom/3d/plane/plane3_lerp.js +2 -2
  60. package/src/core/geom/3d/plane/plane3_projectPoint.js +1 -1
  61. package/src/core/geom/3d/plane/plane3_slerp.js +3 -3
  62. package/src/core/geom/3d/ray/ray_computeNearestPointToPoint.js +1 -1
  63. package/src/core/geom/3d/ray/ray_distance_to_point.js +1 -1
  64. package/src/core/geom/3d/shape/UnionShape3D.js +3 -3
  65. package/src/core/geom/3d/shape/UnitCubeShape3D.js +1 -1
  66. package/src/core/geom/3d/shape/UnitSphereShape3D.js +1 -1
  67. package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
  68. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -0
  69. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.js +1 -1
  70. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +1 -1
  71. package/src/core/geom/3d/tetrahedra/compute_circumsphere.js +1 -1
  72. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +1 -0
  73. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +10 -2
  74. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +1 -1
  75. package/src/core/geom/3d/topology/samples/sampleFloodFill.js +1 -1
  76. package/src/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
  77. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
  78. package/src/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +2 -2
  79. package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
  80. package/src/core/geom/3d/topology/util/compute_face_connection_weight.js +2 -2
  81. package/src/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
  82. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
  83. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +1 -1
  84. package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
  85. package/src/core/geom/Quaternion.js +1 -1
  86. package/src/core/geom/Vector3.js +7 -7
  87. package/src/core/geom/Vector3.spec.js +68 -1
  88. package/src/core/geom/mat2/m2_add.js +17 -0
  89. package/src/core/geom/mat2/m2_determinant.js +8 -0
  90. package/src/core/geom/mat2/m2_multiply.js +17 -0
  91. package/src/core/geom/mat2/m2_multiply_scalar.js +18 -0
  92. package/src/core/geom/mat2/m2_multiply_transposed.js +18 -0
  93. package/src/core/geom/mat2/m2_sub_transposed.js +17 -0
  94. package/src/{view → core/geom/mat3}/m3_cm_compose_transform.js +0 -29
  95. package/src/core/geom/mat3/m3_cm_extract_rotation.js +8 -0
  96. package/src/core/geom/mat3/m3_cm_from_translation.js +19 -0
  97. package/src/{view/multiplyMatrices3.js → core/geom/mat3/m3_multiply.js} +2 -2
  98. package/src/{view → core/geom/mat3}/m3_rm_compose_transform.js +0 -9
  99. package/src/core/geom/mat3/m3_rm_extract_scale.js +7 -0
  100. package/src/core/geom/{3d/vector/allocate_v3.js → vec3/v3_allocate.js} +1 -1
  101. package/src/core/geom/{v3_angle_between.js → vec3/v3_angle_between.js} +1 -1
  102. package/src/core/geom/vec3/v3_dot_array_array.js +20 -0
  103. package/src/core/geom/{v3_lerp.js → vec3/v3_lerp.js} +1 -1
  104. package/src/core/graph/SquareMatrix.js +26 -3
  105. package/src/core/graph/SquareMatrix.spec.js +52 -2
  106. package/src/core/math/clamp01.js +1 -0
  107. package/src/core/math/fract.js +3 -1
  108. package/src/core/math/inverseLerp.js +7 -5
  109. package/src/core/math/lerp.js +5 -5
  110. package/src/core/math/physics/spring/computeHookeForce.js +9 -0
  111. package/src/core/math/remap.js +19 -0
  112. package/src/core/math/remap.spec.js +15 -0
  113. package/src/core/math/smoothStep.spec.js +16 -0
  114. package/src/core/math/spline/spline_bezier2.js +13 -0
  115. package/src/core/math/spline/spline_bezier2.spec.js +13 -0
  116. package/src/core/model/object/compareValues.js +2 -2
  117. package/src/core/model/object/read_property.js +10 -2
  118. package/src/core/model/object/write_property.js +3 -23
  119. package/src/core/model/object/write_property.spec.js +26 -0
  120. package/src/core/primitives/numbers/number_pretty_print.spec.js +19 -0
  121. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
  122. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
  123. package/src/engine/ecs/systems/SteeringSystem.js +1 -1
  124. package/src/engine/ecs/terrain/ecs/splat/SplatMapOptimizerDebugger.js +1 -1
  125. package/src/engine/graphics/ecs/camera/Camera.js +1 -1
  126. package/src/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  127. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +3 -11
  128. package/src/engine/graphics/ecs/highlight/Highlight.js +20 -102
  129. package/src/engine/graphics/ecs/mesh/Mesh.js +12 -18
  130. package/src/engine/graphics/ecs/mesh/MeshSystem.js +41 -26
  131. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +1 -1
  132. package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +1 -1
  133. package/src/engine/graphics/ecs/path/tube/build/makeTubeGeometry.js +1 -1
  134. package/src/engine/graphics/ecs/path/tube/build/make_cap.js +3 -3
  135. package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +1 -1
  136. package/src/engine/graphics/geometry/MikkT/InitTriInfo.js +5 -6
  137. package/src/engine/graphics/geometry/MikkT/MikkTSpace.js +3 -3
  138. package/src/engine/graphics/geometry/MikkT/NormalizeSafe.js +1 -2
  139. package/src/engine/graphics/geometry/MikkT/STSpace.js +3 -3
  140. package/src/engine/graphics/geometry/MikkT/v3_scale_dot_sub_normalize.js +2 -2
  141. package/src/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +1 -1
  142. package/src/engine/graphics/geometry/clipping/ClippedGeometry.js +1 -1
  143. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +102 -95
  144. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +25 -0
  145. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -35
  146. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +39 -2
  147. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +22 -6
  148. package/src/engine/graphics/render/forward_plus/LightManager.js +1 -1
  149. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -2
  150. package/src/engine/graphics/render/forward_plus/prototype/prototypeLightManager.js +3 -3
  151. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +1 -1
  152. package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
  153. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +3 -2
  154. package/src/engine/graphics/sh3/LightProbeVolume.js +1 -1
  155. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +2 -2
  156. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +2 -2
  157. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +1 -1
  158. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
  159. package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +1 -1
  160. package/src/engine/graphics/sh3/sky/hosek/data.js +3744 -0
  161. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +10 -3786
  162. package/src/engine/graphics/texture/atlas/AbstractTextureAtlas.js +1 -1
  163. package/src/engine/graphics/texture/atlas/AtlasPatch.js +0 -1
  164. package/src/engine/graphics/texture/atlas/AtlasPatchFlag.js +8 -1
  165. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +25 -0
  166. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +54 -0
  167. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +101 -160
  168. package/src/engine/graphics/texture/atlas/TextureAtlas.js +18 -1
  169. package/src/engine/graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js +22 -0
  170. package/src/engine/graphics/util/projectSphere.js +1 -1
  171. package/src/engine/navigation/ecs/components/Path.js +1 -1
  172. package/src/engine/options/OptionGroup.js +10 -0
  173. package/src/engine/physics/mls-mpm/MLS_MPM.js +11 -106
  174. package/src/engine/reference/v2/Reference.js +6 -2
  175. package/src/engine/sound/ecs/emitter/SoundEmitter.js +7 -7
  176. package/src/engine/sound/ecs/emitter/SoundTrack.js +6 -6
  177. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +1 -1
  178. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -4
  179. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +2 -2
  180. package/src/generation/theme/ThemeEngine.js +2 -2
  181. package/src/generation/theme/ThemeEngine.spec.js +7 -0
  182. package/src/view/View.js +21 -13
  183. package/src/view/elements/ColorPickerView.js +2 -2
  184. package/src/view/minimap/gl/MarkerGL.js +20 -18
  185. package/src/view/minimap/gl/MinimapMarkersGL.js +2 -1
  186. package/editor/tools/FoliagePaintTool.js +0 -168
  187. package/editor/tools/engine/ToolStateMachine.js +0 -53
  188. package/src/core/NumberFormat.js +0 -4
  189. package/src/core/color/rgb2hsv.js +0 -47
  190. package/src/core/color/rgb_to_YCbCr_uint24.js +0 -16
  191. package/src/core/fsm/StateMachine.js +0 -440
  192. package/src/core/fsm/Transition.js +0 -65
  193. package/src/core/geom/Bezier.js +0 -24
  194. package/src/core/geom/Bezier.spec.js +0 -16
  195. package/src/core/math/spline/quadraticCurve.js +0 -11
  196. package/src/core/math/spline/quadraticCurve.spec.js +0 -13
  197. package/src/core/primitives/numbers/compareNumbers.js +0 -9
  198. package/src/engine/graphics/ecs/decal/Decal.js +0 -10
  199. package/src/engine/graphics/ecs/decal/DecalSystem.js +0 -99
  200. package/src/engine/graphics/ecs/decal/threejs/DecalGeometry.js +0 -298
  201. package/src/engine/graphics/ecs/trail/Trail.js +0 -83
  202. package/src/engine/graphics/ecs/trail/TrailMaterial.js +0 -67
  203. package/src/engine/graphics/ecs/trail/TrailMaterial2.js +0 -73
  204. package/src/engine/graphics/ecs/trail/TrailSystem.js +0 -162
  205. package/src/engine/graphics/ecs/water2/NodeWaterShader1.js +0 -213
  206. package/src/engine/graphics/ecs/water2/shader/JBWaterShader.js +0 -315
  207. package/src/engine/graphics/geometry/MikkT/Length.js +0 -10
  208. package/src/engine/graphics/texture/ImageLoader.js +0 -33
  209. package/src/engine/graphics/three/DDSLoader.js +0 -286
  210. package/src/engine/graphics/three/Water2.js +0 -343
  211. package/src/engine/physics/spring/computeHookeForce.js +0 -9
  212. package/src/engine/reference/v1/ReferenceManager.js +0 -124
  213. /package/src/core/color/{hex2rgb.spec.js → hex/hex2rgb.spec.js} +0 -0
  214. /package/src/core/color/{rgb2hex.spec.js → hex/rgb2hex.spec.js} +0 -0
  215. /package/src/core/color/{hsv2rgb.spec.js → hsv/hsv2rgb.spec.js} +0 -0
  216. /package/src/core/color/{rgb_to_kelvin.js → kelvin/rgb_to_kelvin.js} +0 -0
  217. /package/src/core/color/{linear_to_sRGB.js → sRGB/linear_to_sRGB.js} +0 -0
  218. /package/src/core/color/{sRGB_to_linear.js → sRGB/sRGB_to_linear.js} +0 -0
  219. /package/src/core/geom/{m3_determinant.js → mat3/m3_determinant.js} +0 -0
  220. /package/src/core/geom/{v3_distance.js → vec3/v3_distance.js} +0 -0
  221. /package/src/core/geom/{v3_distance_above_plane.js → vec3/v3_distance_above_plane.js} +0 -0
  222. /package/src/core/geom/{v3_distance_above_plane.spec.js → vec3/v3_distance_above_plane.spec.js} +0 -0
  223. /package/src/core/geom/{v3_distance_sqr.d.ts → vec3/v3_distance_sqr.d.ts} +0 -0
  224. /package/src/core/geom/{v3_distance_sqr.js → vec3/v3_distance_sqr.js} +0 -0
  225. /package/src/core/geom/{v3_dot.js → vec3/v3_dot.js} +0 -0
  226. /package/src/core/geom/{v3_length.js → vec3/v3_length.js} +0 -0
  227. /package/src/core/geom/{v3_length_sqr.js → vec3/v3_length_sqr.js} +0 -0
  228. /package/src/core/geom/{v3_slerp.js → vec3/v3_slerp.js} +0 -0
@@ -1,105 +1,10 @@
1
1
  import { clamp } from "../../../core/math/clamp.js";
2
-
3
- /**
4
- *
5
- * @param {number[]} a 2d matrix
6
- * @returns {number}
7
- */
8
- function determinant(a) {
9
- return a[0] * a[3] - a[1] * a[2]
10
- }
11
-
12
- /**
13
- *
14
- * @param {number[]} r
15
- * @param {number[]} a
16
- * @param {number[]} b
17
- */
18
- function m2_multiply(r, a, b) {
19
- const v0 = a[0] * b[0] + a[1] * b[2];
20
- const v1 = a[0] * b[1] + a[1] * b[3];
21
- const v2 = a[2] * b[0] + a[3] * b[2];
22
- const v3 = a[2] * b[1] + a[3] * b[3];
23
-
24
- r[0] = v0;
25
- r[1] = v1;
26
- r[2] = v2;
27
- r[3] = v3;
28
- }
29
-
30
- /**
31
- * Second argument will be transposed before multiplication
32
- * @param {number[]} r
33
- * @param {number[]} a
34
- * @param {number[]} b
35
- */
36
- function m2_multiply_t(r, a, b) {
37
- const v0 = a[0] * b[0] + a[1] * b[1];
38
- const v1 = a[0] * b[2] + a[1] * b[3];
39
- const v2 = a[2] * b[0] + a[3] * b[1];
40
- const v3 = a[2] * b[2] + a[3] * b[3];
41
-
42
- r[0] = v0;
43
- r[1] = v1;
44
- r[2] = v2;
45
- r[3] = v3;
46
- }
47
-
48
- /**
49
- *
50
- * @param {number[]} r
51
- * @param {number[]} a
52
- * @param {number} s
53
- */
54
- function m2_multiply_scalar(r, a, s) {
55
-
56
- const v0 = a[0] * s;
57
- const v1 = a[1] * s;
58
- const v2 = a[2] * s;
59
- const v3 = a[3] * s;
60
-
61
- r[0] = v0;
62
- r[1] = v1;
63
- r[2] = v2;
64
- r[3] = v3;
65
- }
66
-
67
- /**
68
- *
69
- * @param {number[]} r
70
- * @param {number[]} a
71
- * @param {number[]} b
72
- */
73
- function m2_add(r, a, b) {
74
- const v0 = a[0] + b[0];
75
- const v1 = a[1] + b[1];
76
- const v2 = a[2] + b[2];
77
- const v3 = a[3] + b[3];
78
-
79
- r[0] = v0;
80
- r[1] = v1;
81
- r[2] = v2;
82
- r[3] = v3;
83
- }
84
-
85
-
86
- /**
87
- * Trasposes second matrix before subtraction
88
- * @param {number[]} r
89
- * @param {number[]} a
90
- * @param {number[]} b
91
- */
92
- function m2_sub_ta(r, a, b) {
93
- const v0 = a[0] - b[0];
94
- const v1 = a[2] - b[1];
95
- const v2 = a[1] - b[2];
96
- const v3 = a[3] - b[3];
97
-
98
- r[0] = v0;
99
- r[1] = v1;
100
- r[2] = v2;
101
- r[3] = v3;
102
- }
2
+ import { m2_multiply } from "../../../core/geom/mat2/m2_multiply.js";
3
+ import { m2_multiply_transposed } from "../../../core/geom/mat2/m2_multiply_transposed.js";
4
+ import { m2_determinant } from "../../../core/geom/mat2/m2_determinant.js";
5
+ import { m2_multiply_scalar } from "../../../core/geom/mat2/m2_multiply_scalar.js";
6
+ import { m2_add } from "../../../core/geom/mat2/m2_add.js";
7
+ import { m2_sub_transposed } from "../../../core/geom/mat2/m2_sub_transposed.js";
103
8
 
104
9
 
105
10
  /**
@@ -354,14 +259,14 @@ export class MLS_MPMSolver {
354
259
  // Cauchy stress times dt and inv_dx
355
260
  // original taichi: stress = -4*inv_dx*inv_dx*dt*vol*( 2*mu*(p.F-r)*transposed(p.F) + lambda*(J-1)*J )
356
261
  // (in taichi matrices are coded transposed)
357
- const J = determinant(p.F); // Current volume
262
+ const J = m2_determinant(p.F); // Current volume
358
263
  polar_decomp_noS(r, p.F); // Polar decomp. for fixed corotated model
359
264
  const k1 = -4 * inv_dx * inv_dx * dt * vol;
360
265
  const k2 = lambda * (J - 1) * J;
361
266
 
362
267
 
363
268
  //compute stress
364
- m2_sub_ta(m2_temp0, p.F, r);
269
+ m2_sub_transposed(m2_temp0, p.F, r);
365
270
 
366
271
  m2_multiply(m2_temp0, m2_temp0, p.F);
367
272
 
@@ -571,11 +476,11 @@ export class MLS_MPMSolver {
571
476
  sig[i + 2 * i] = clamp(sig[i + 2 * i], 1.0 - 2.5e-2, 1.0 + 7.5e-3);
572
477
  }
573
478
 
574
- const oldJ = determinant(F);
479
+ const oldJ = m2_determinant(F);
575
480
  // original taichi: F = svd_u * sig * transposed(svd_v)
576
481
  m2_multiply(m2_temp0, svd_u, sig);
577
- m2_multiply_t(p.F, m2_temp0, svd_v);
578
- const Jp_new = clamp(p.Jp * oldJ / determinant(p.F), 0.6, 20.0);
482
+ m2_multiply_transposed(p.F, m2_temp0, svd_v);
483
+ const Jp_new = clamp(p.Jp * oldJ / m2_determinant(p.F), 0.6, 20.0);
579
484
  p.Jp = Jp_new;
580
485
  }
581
486
  }
@@ -13,7 +13,7 @@ export class Reference {
13
13
  #onReleased = new Signal();
14
14
 
15
15
  /**
16
- *
16
+ * Actual value being held
17
17
  * @type {T}
18
18
  * @private
19
19
  */
@@ -27,7 +27,7 @@ export class Reference {
27
27
  */
28
28
  #is_bound = false;
29
29
 
30
- get bound(){
30
+ get bound() {
31
31
  return this.#is_bound;
32
32
  }
33
33
 
@@ -65,6 +65,10 @@ export class Reference {
65
65
  return this.#value;
66
66
  }
67
67
 
68
+ /**
69
+ * Release value being referenced. After this the held value is set to null
70
+ * This method is idempotent, calling it multiple times is safe
71
+ */
68
72
  release() {
69
73
  if (!this.#is_bound) {
70
74
  // not bound
@@ -21,7 +21,7 @@ import { computeStringHash } from "../../../../core/primitives/strings/computeSt
21
21
  import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
22
22
  import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
23
23
  import { compareStrings } from "../../../../core/primitives/strings/compareStrings.js";
24
- import { compareNumbers } from "../../../../core/primitives/numbers/compareNumbers.js";
24
+ import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
25
25
 
26
26
  /**
27
27
  * Convert decibel to percentage volume
@@ -159,36 +159,36 @@ export class SoundEmitter {
159
159
  return channel;
160
160
  }
161
161
 
162
- const distanceMin = compareNumbers(this.__distanceMin, other.__distanceMin);
162
+ const distanceMin = number_compare_ascending(this.__distanceMin, other.__distanceMin);
163
163
 
164
164
  if (distanceMin !== 0) {
165
165
  return distanceMin;
166
166
  }
167
- const distanceMax = compareNumbers(this.__distanceMax, other.__distanceMax);
167
+ const distanceMax = number_compare_ascending(this.__distanceMax, other.__distanceMax);
168
168
 
169
169
  if (distanceMax !== 0) {
170
170
  return distanceMax;
171
171
  }
172
172
 
173
- const panningModel = compareNumbers(this.panningModel, other.panningModel);
173
+ const panningModel = number_compare_ascending(this.panningModel, other.panningModel);
174
174
 
175
175
  if (panningModel !== 0) {
176
176
  return panningModel;
177
177
  }
178
178
 
179
- const attenuation = compareNumbers(this.attenuation, other.attenuation);
179
+ const attenuation = number_compare_ascending(this.attenuation, other.attenuation);
180
180
 
181
181
  if (attenuation !== 0) {
182
182
  return attenuation;
183
183
  }
184
184
 
185
- const flags = compareNumbers(this.flags, other.flags);
185
+ const flags = number_compare_ascending(this.flags, other.flags);
186
186
 
187
187
  if (flags !== 0) {
188
188
  return flags;
189
189
  }
190
190
 
191
- const volume = compareNumbers(this.volume.getValue(), other.volume.getValue());
191
+ const volume = number_compare_ascending(this.volume.getValue(), other.volume.getValue());
192
192
 
193
193
  if (volume !== 0) {
194
194
  return volume;
@@ -5,7 +5,7 @@ import { computeStringHash } from "../../../../core/primitives/strings/computeSt
5
5
  import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
6
6
  import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
7
7
  import { compareStrings } from "../../../../core/primitives/strings/compareStrings.js";
8
- import { compareNumbers } from "../../../../core/primitives/numbers/compareNumbers.js";
8
+ import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
9
9
 
10
10
  const DEFAULT_FLAGS = SoundTrackFlags.StartWhenReady;
11
11
 
@@ -120,8 +120,8 @@ export class SoundTrack {
120
120
  // Make the sound source use the buffer and start playing it.
121
121
  nodes.source.buffer = this.#buffer;
122
122
 
123
- nodes.source.onended = ()=> {
124
- if(!looping){
123
+ nodes.source.onended = () => {
124
+ if (!looping) {
125
125
  this.clearFlag(SoundTrackFlags.Playing);
126
126
  this.on.ended.send1(this);
127
127
  }
@@ -167,7 +167,7 @@ export class SoundTrack {
167
167
  return url;
168
168
  }
169
169
 
170
- const time = compareNumbers(this.time, other.time);
170
+ const time = number_compare_ascending(this.time, other.time);
171
171
 
172
172
  if (time !== 0) {
173
173
  return time;
@@ -179,13 +179,13 @@ export class SoundTrack {
179
179
  return channel;
180
180
  }
181
181
 
182
- const volume = compareNumbers(this.__volume, other.__volume);
182
+ const volume = number_compare_ascending(this.__volume, other.__volume);
183
183
 
184
184
  if (volume !== 0) {
185
185
  return volume;
186
186
  }
187
187
 
188
- const flags = compareNumbers(this.flags, other.flags);
188
+ const flags = number_compare_ascending(this.flags, other.flags);
189
189
 
190
190
  if (flags !== 0) {
191
191
  return flags;
@@ -1,7 +1,7 @@
1
1
  import { CellFilter } from "../../CellFilter.js";
2
2
  import Vector3 from "../../../../core/geom/Vector3.js";
3
3
  import { assert } from "../../../../core/assert.js";
4
- import { v3_angle_between } from "../../../../core/geom/v3_angle_between.js";
4
+ import { v3_angle_between } from "../../../../core/geom/vec3/v3_angle_between.js";
5
5
 
6
6
  /**
7
7
  * Distance from the reference point where support points will be sampled to compute derivative
@@ -1,5 +1,3 @@
1
- import { inverseLerp } from "../../../../core/math/inverseLerp.js";
2
- import { lerp } from "../../../../core/math/lerp.js";
3
1
  import { seededRandom } from "../../../../core/math/random/seededRandom.js";
4
2
  import { GridTaskGenerator } from "../../GridTaskGenerator.js";
5
3
  import TaskGroup from "../../../../core/process/task/TaskGroup.js";
@@ -24,6 +22,7 @@ import { MirGridLayers } from "../../../../../samples/generation/grid/MirGridLay
24
22
  import { actionTask } from "../../../../core/process/task/util/actionTask.js";
25
23
  import { countTask } from "../../../../core/process/task/util/countTask.js";
26
24
  import { groupArrayBy } from "../../../../core/collection/array/groupArrayBy.js";
25
+ import { remap } from "../../../../core/math/remap.js";
27
26
 
28
27
  const NODE_TYPE_ROAD_CONNECTOR = 'Road Connector';
29
28
 
@@ -427,8 +426,7 @@ function drawPath(path, actions, traversable, grid) {
427
426
  for (let i = 0; i < n; i++) {
428
427
  const index = pathIndices[i];
429
428
 
430
- const f = inverseLerp(0, n, i);
431
- const thickness = lerp(sourceThickness, targetThickness, f);
429
+ const thickness = remap(0, n, sourceThickness, targetThickness, i);
432
430
 
433
431
  const thickness_0 = Math.floor(thickness / 2);
434
432
  const thickness_1 = Math.ceil(thickness / 2);
@@ -1,8 +1,8 @@
1
1
  import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
2
2
  import { GridCellAction } from "../../GridCellAction.js";
3
- import { compareNumbers } from "../../../../../core/primitives/numbers/compareNumbers.js";
4
3
  import { assert } from "../../../../../core/assert.js";
5
4
  import { binarySearchHighIndex } from "../../../../../core/collection/array/binarySearchHighIndex.js";
5
+ import { number_compare_ascending } from "../../../../../core/primitives/numbers/number_compare_ascending.js";
6
6
 
7
7
  /**
8
8
  *
@@ -111,7 +111,7 @@ export class CellActionSelectWeightedRandom extends GridCellAction {
111
111
 
112
112
  const targetWeight = this.__random() * totalWeight;
113
113
 
114
- const index = binarySearchHighIndex(evaluatedWeights, targetWeight, compareNumbers, 0, n - 1);
114
+ const index = binarySearchHighIndex(evaluatedWeights, targetWeight, number_compare_ascending, 0, n - 1);
115
115
 
116
116
  const targetElement = elements[index];
117
117
 
@@ -5,7 +5,6 @@ import { TerrainLayerRuleAggregator } from "./TerrainLayerRuleAggregator.js";
5
5
  import { Sampler2D } from "../../engine/graphics/texture/sampler/Sampler2D.js";
6
6
  import Task from "../../core/process/task/Task.js";
7
7
  import { TaskSignal } from "../../core/process/task/TaskSignal.js";
8
- import { compareNumbers } from "../../core/primitives/numbers/compareNumbers.js";
9
8
  import TaskGroup from "../../core/process/task/TaskGroup.js";
10
9
  import Future from "../../core/process/Future.js";
11
10
  import { optimizeIndividualMeshesEntitiesToInstances } from "../../engine/ecs/foliage/ecs/InstancedMeshUtils.js";
@@ -20,6 +19,7 @@ import { actionTask } from "../../core/process/task/util/actionTask.js";
20
19
  import { countTask } from "../../core/process/task/util/countTask.js";
21
20
  import { emptyTask } from "../../core/process/task/util/emptyTask.js";
22
21
  import { futureTask } from "../../core/process/task/util/futureTask.js";
22
+ import { number_compare_ascending } from "../../core/primitives/numbers/number_compare_ascending.js";
23
23
 
24
24
  /**
25
25
  *
@@ -431,7 +431,7 @@ export class ThemeEngine {
431
431
  //select a theme
432
432
  const t = randomFloatBetween(random, 0, influenceSum);
433
433
 
434
- const themeIndex = binarySearchLowIndex(themeInfluence, t, compareNumbers);
434
+ const themeIndex = binarySearchLowIndex(themeInfluence, t, number_compare_ascending);
435
435
 
436
436
  const themeArea = themeAreas[themeIndex];
437
437
 
@@ -0,0 +1,7 @@
1
+ import { ThemeEngine } from "./ThemeEngine.js";
2
+
3
+ test("constructor does not throw", () => {
4
+
5
+ new ThemeEngine();
6
+
7
+ });
package/src/view/View.js CHANGED
@@ -10,7 +10,8 @@ import Signal from "../core/events/signal/Signal.js";
10
10
  import { SignalBinding } from "../core/events/signal/SignalBinding.js";
11
11
  import { assert } from "../core/assert.js";
12
12
  import Vector1 from "../core/geom/Vector1.js";
13
- import { m3_cm_compose_transform } from "./m3_cm_compose_transform.js";
13
+
14
+ import { m3_cm_compose_transform } from "../core/geom/mat3/m3_cm_compose_transform.js";
14
15
 
15
16
 
16
17
  const scratch_m3_0 = new Float32Array(9);
@@ -362,10 +363,10 @@ class View {
362
363
  * @returns {View}
363
364
  */
364
365
  addChild(child) {
365
- assert.notEqual(child, undefined, 'child is undefined');
366
- assert.notEqual(child, null, 'child is null');
367
- assert.ok(typeof child, 'object', `child must be an object, isntead was '${typeof child}'`);
368
- assert.ok(child instanceof View, 'child is not an instance of View');
366
+ assert.defined(child, 'child');
367
+ assert.notNull(child, 'child');
368
+ assert.isInstanceOf(child, View, 'child');
369
+ assert.equal(child.isLinked, false, 'child is already linked somewhere');
369
370
 
370
371
  child.parent = this;
371
372
 
@@ -425,18 +426,25 @@ class View {
425
426
  /**
426
427
  *
427
428
  * @param {View} child
429
+ * @returns {boolean}
428
430
  */
429
431
  removeChild(child) {
430
- const i = this.children.indexOf(child);
431
- if (i !== -1) {
432
- this.children.splice(i, 1);
433
- this.el.removeChild(child.el);
434
- child.unlink();
432
+ const children = this.children;
435
433
 
436
- child.parent = null;
437
- } else {
438
- console.warn('Child not found. this:', this, 'child:', child);
434
+ const i = children.indexOf(child);
435
+
436
+ if (i === -1) {
437
+ //console.warn('Child not found. this:', this, 'child:', child);
438
+ return false;
439
439
  }
440
+
441
+ children.splice(i, 1);
442
+ this.el.removeChild(child.el);
443
+ child.unlink();
444
+
445
+ child.parent = null;
446
+
447
+ return true;
440
448
  }
441
449
 
442
450
  /**
@@ -2,8 +2,8 @@ import GuiControl from "../controller/controls/GuiControl.js";
2
2
  import { GaugeView } from "../../../editor/view/ecs/components/color/GaugeView.js";
3
3
  import Vector1 from "../../core/geom/Vector1.js";
4
4
  import { drawCheckers } from "../../../editor/view/ecs/components/particles/ColorParameterLUTController.js";
5
- import { hsv2rgb } from "../../core/color/hsv2rgb.js";
6
- import { rgb2hsv } from "../../core/color/rgb2hsv.js";
5
+ import { hsv2rgb } from "../../core/color/hsv/hsv2rgb.js";
6
+ import { rgb2hsv } from "../../core/color/hsv/rgb2hsv.js";
7
7
 
8
8
 
9
9
  export class ColorPickerView extends GuiControl {
@@ -1,4 +1,5 @@
1
1
  import { MarkerGLAttributes } from "./MarkerGLAttributes.js";
2
+ import { Reference } from "../../../engine/reference/v2/Reference.js";
2
3
 
3
4
  function logPatchLoadError(e) {
4
5
  console.error('Failed to load patch:', e);
@@ -24,21 +25,23 @@ export function MarkerGL(marker, transform, entity, id, manager) {
24
25
 
25
26
  this.id = id;
26
27
 
27
- this.patch = null;
28
+ /**
29
+ *
30
+ * @type {Reference<AtlasPatch>}
31
+ */
32
+ this.patch = Reference.NULL;
28
33
 
29
34
  this.manager = manager;
30
35
  this.particles = manager.particles;
31
36
 
32
37
  this.active = false;
33
38
 
34
- const self = this;
35
-
36
- this.updatePosition = function () {
39
+ this.updatePosition = () => {
37
40
 
38
41
  const position = transform.position;
39
42
 
40
- self.particles.executeOperationWriteAttribute_Vector3(
41
- self.id,
43
+ this.particles.executeOperationWriteAttribute_Vector3(
44
+ this.id,
42
45
  MarkerGLAttributes.AttributePosition,
43
46
  position.x,
44
47
  1,
@@ -48,26 +51,27 @@ export function MarkerGL(marker, transform, entity, id, manager) {
48
51
  manager.needsRender = true;
49
52
  };
50
53
 
51
- this.updateIcon = function (newURL, oldURL) {
54
+ this.updateIcon = (newURL, oldURL) => {
52
55
  const atlasManager = manager.atlasManager;
53
56
 
54
- if (oldURL !== null) {
55
- atlasManager.release(oldURL);
56
- }
57
+ this.patch.release();
57
58
 
58
59
  atlasManager
59
60
  .acquire(newURL)
60
- .then(function (patch) {
61
+ .then((patch) => {
62
+ this.patch = patch;
63
+
61
64
  //check if marker is still active
62
- if (!self.active) {
65
+ if (!this.active) {
63
66
  //marker is dead
64
67
  return;
65
68
  }
66
69
 
67
- const patchUv = patch.uv;
68
70
 
69
- self.particles.executeOperationWriteAttribute_Vector4(
70
- self.id,
71
+ const patchUv = patch.getValue().uv;
72
+
73
+ this.particles.executeOperationWriteAttribute_Vector4(
74
+ this.id,
71
75
  MarkerGLAttributes.AttributePatch,
72
76
  patchUv.position.x,
73
77
  patchUv.position.y,
@@ -76,8 +80,6 @@ export function MarkerGL(marker, transform, entity, id, manager) {
76
80
  );
77
81
 
78
82
  manager.needsRender = true;
79
-
80
- self.patch = patch;
81
83
  }, logPatchLoadError);
82
84
  };
83
85
  }
@@ -110,5 +112,5 @@ MarkerGL.prototype.shutdown = function () {
110
112
  this.marker.iconURL.onChanged.remove(this.updateIcon);
111
113
 
112
114
  //release reference to icon
113
- this.manager.atlasManager.release(this.marker.iconURL.getValue());
115
+ this.patch.release();
114
116
  };
@@ -225,7 +225,8 @@ export class MinimapMarkersGL extends MinimapWorldLayer {
225
225
  updateSprites() {
226
226
 
227
227
  this.markers.forEach((marker) => {
228
- const patch = marker.patch;
228
+ const patch = marker.patch.getValue();
229
+
229
230
  if (patch !== null) {
230
231
  /**
231
232
  * @type {Rectangle}