@woosh/meep-engine 2.152.0 → 2.154.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.
- package/package.json +1 -1
- package/src/core/color/Color.d.ts +26 -6
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +38 -6
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +112 -0
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +325 -0
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts +4 -0
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
- package/src/engine/physics/PLAN.md +4 -4
- package/src/engine/physics/body/BodyStorage.d.ts +3 -1
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
- package/src/engine/physics/body/BodyStorage.js +452 -450
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +6 -5
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +9 -1
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +237 -238
- package/src/engine/physics/computeInterceptPoint.d.ts.map +1 -1
- package/src/engine/physics/computeInterceptPoint.js +8 -3
- package/src/engine/physics/contact/ManifoldStore.d.ts +0 -16
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +1 -38
- package/src/engine/physics/ecs/BodyKind.d.ts +3 -2
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +25 -24
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +4 -5
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +15 -16
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +5 -30
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +13 -45
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +85 -81
- package/src/engine/physics/ecs/is_sensor.d.ts +18 -0
- package/src/engine/physics/ecs/is_sensor.d.ts.map +1 -0
- package/src/engine/physics/ecs/is_sensor.js +27 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +2 -1
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
- package/src/engine/physics/events/ContactEventBuffer.js +84 -83
- package/src/engine/physics/gjk/gjk.d.ts +0 -26
- package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
- package/src/engine/physics/gjk/gjk.js +3 -52
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +16 -0
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -0
- package/src/engine/physics/gjk/gjk_epa_penetration.js +255 -0
- package/src/engine/physics/gjk/minkowski_support.d.ts +4 -9
- package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -1
- package/src/engine/physics/gjk/minkowski_support.js +70 -75
- package/src/engine/physics/gjk/mpr.d.ts +1 -1
- package/src/engine/physics/gjk/mpr.d.ts.map +1 -1
- package/src/engine/physics/gjk/mpr.js +362 -344
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +431 -428
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +4 -81
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +4 -39
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +459 -462
- package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/clip_against_axis_uv.js +4 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +83 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +425 -0
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -0
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/convex_decomposition.js +293 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts +41 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +106 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +8 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +105 -102
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +29 -0
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +69 -0
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +152 -145
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +132 -123
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +16 -17
- package/src/engine/physics/queries/raycast.d.ts +5 -0
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +16 -8
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +13 -7
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +8 -11
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +339 -333
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +0 -13
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +0 -1
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +0 -399
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box_box_manifold.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_box_manifold.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"box_box_manifold.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_box_manifold.js"],"names":[],"mappings":"AAiHA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sCAvBW,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,GACJ,OAAO,CAghBnB;AArlBD;;;GAGG;AACH,iCAFU,MAAM,CAEoD"}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
} from "../../../core/geom/3d/line/line3_closest_points_segment_segment.js";
|
|
4
4
|
import { quat3_to_matrix3 } from "../../../core/geom/3d/quaternion/quat3_to_matrix3.js";
|
|
5
5
|
import { clip_against_axis_uv } from "./clip_against_axis_uv.js";
|
|
6
|
+
import { reduce_manifold_contacts } from "./reduce_manifold_contacts.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Multi-point manifold construction for two oriented bounding boxes.
|
|
@@ -614,7 +615,7 @@ export function box_box_manifold(
|
|
|
614
615
|
}
|
|
615
616
|
|
|
616
617
|
// ---- Reduce to ≤ MAX_CONTACTS by best-deepest + perimeter ----
|
|
617
|
-
const kept =
|
|
618
|
+
const kept = reduce_manifold_contacts(candidates, cand_count, 4, MAX_CONTACTS);
|
|
618
619
|
|
|
619
620
|
// ---- Emit: contact-on-incident is the candidate's world point;
|
|
620
621
|
// contact-on-reference is the same point projected onto the ref plane.
|
|
@@ -668,83 +669,5 @@ function out_empty(out) {
|
|
|
668
669
|
return true; // overlap exists per SAT, just no clipped manifold
|
|
669
670
|
}
|
|
670
671
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
* 1. Sort by depth descending; deepest stays at index 0.
|
|
674
|
-
* 2. From the remaining, greedily pick the points that maximise the spread
|
|
675
|
-
* (sum of squared distances to already-kept points). This approximates
|
|
676
|
-
* the maximum-area heuristic without needing the actual area.
|
|
677
|
-
*
|
|
678
|
-
* @param {number} n input count
|
|
679
|
-
* @returns {number} kept count (min(n, MAX_CONTACTS))
|
|
680
|
-
*/
|
|
681
|
-
function reduce_contacts(n) {
|
|
682
|
-
if (n <= MAX_CONTACTS) return n;
|
|
683
|
-
|
|
684
|
-
// Find deepest, swap into slot 0.
|
|
685
|
-
let deepest_idx = 0;
|
|
686
|
-
let deepest_val = candidates[3];
|
|
687
|
-
for (let i = 1; i < n; i++) {
|
|
688
|
-
|
|
689
|
-
if (candidates[i * 4 + 3] > deepest_val) {
|
|
690
|
-
deepest_val = candidates[i * 4 + 3];
|
|
691
|
-
deepest_idx = i;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
if (deepest_idx !== 0) {
|
|
697
|
-
swap_candidate(0, deepest_idx);
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
// Greedy: for slot k in 1..MAX_CONTACTS-1, pick the remaining candidate
|
|
701
|
-
// whose min-distance-sq-to-already-kept-set is largest.
|
|
702
|
-
for (let k = 1; k < MAX_CONTACTS; k++) {
|
|
703
|
-
|
|
704
|
-
let best_score = -1;
|
|
705
|
-
let best_i = -1;
|
|
706
|
-
|
|
707
|
-
for (let i = k; i < n; i++) {
|
|
708
|
-
let min_d2 = Infinity;
|
|
709
|
-
|
|
710
|
-
for (let j = 0; j < k; j++) {
|
|
711
|
-
const dx = candidates[i * 4] - candidates[j * 4];
|
|
712
|
-
const dy = candidates[i * 4 + 1] - candidates[j * 4 + 1];
|
|
713
|
-
const dz = candidates[i * 4 + 2] - candidates[j * 4 + 2];
|
|
714
|
-
const d2 = dx * dx + dy * dy + dz * dz;
|
|
715
|
-
if (d2 < min_d2) min_d2 = d2;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
if (min_d2 > best_score) {
|
|
719
|
-
best_score = min_d2;
|
|
720
|
-
best_i = i;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
if (best_i !== k) {
|
|
726
|
-
swap_candidate(k, best_i);
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
return MAX_CONTACTS;
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
function swap_candidate(a, b) {
|
|
733
|
-
const a4 = a * 4;
|
|
734
|
-
const b4 = b * 4;
|
|
735
|
-
|
|
736
|
-
const ax = candidates[a4];
|
|
737
|
-
const ay = candidates[a4 + 1];
|
|
738
|
-
const az = candidates[a4 + 2];
|
|
739
|
-
const ad = candidates[a4 + 3];
|
|
740
|
-
|
|
741
|
-
candidates[a4] = candidates[b4];
|
|
742
|
-
candidates[a4 + 1] = candidates[b4 + 1];
|
|
743
|
-
candidates[a4 + 2] = candidates[b4 + 2];
|
|
744
|
-
candidates[a4 + 3] = candidates[b4 + 3];
|
|
745
|
-
|
|
746
|
-
candidates[b4] = ax;
|
|
747
|
-
candidates[b4 + 1] = ay;
|
|
748
|
-
candidates[b4 + 2] = az;
|
|
749
|
-
candidates[b4 + 3] = ad;
|
|
750
|
-
}
|
|
672
|
+
// Contact reduction (deepest + farthest-point spread) is shared with
|
|
673
|
+
// convex_convex_manifold via reduce_manifold_contacts (stride 4).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box_triangle_contact.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_triangle_contact.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"box_triangle_contact.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_triangle_contact.js"],"names":[],"mappings":"AAsJA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,0CAtBW,MAAM,EAAE,GAAC,YAAY,OACrB,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAuJnB;AAnQD;;;GAGG;AACH,sCAFU,MAAM,CAEyD"}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
} from "../../../core/geom/3d/line/line3_closest_points_segment_segment.js";
|
|
4
4
|
import { quat3_to_matrix3 } from "../../../core/geom/3d/quaternion/quat3_to_matrix3.js";
|
|
5
5
|
import { clip_against_axis_uv } from "./clip_against_axis_uv.js";
|
|
6
|
+
import { reduce_manifold_contacts } from "./reduce_manifold_contacts.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Multi-point manifold construction for an oriented box vs. a triangle.
|
|
@@ -139,46 +140,10 @@ function clip_against_half_plane_uv(points_in, point_count, points_out, line_ox,
|
|
|
139
140
|
* whose minimum distance to the already-kept set (in 3D space) is
|
|
140
141
|
* largest — approximates max-perimeter / max-area selection.
|
|
141
142
|
*/
|
|
143
|
+
// Contact reduction (deepest + farthest-point spread) is shared via
|
|
144
|
+
// reduce_manifold_contacts (stride 7 here).
|
|
142
145
|
function reduce_contacts(n) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
function swap(i, j) {
|
|
146
|
-
if (i === j) return;
|
|
147
|
-
const oi = i * 7;
|
|
148
|
-
const oj = j * 7;
|
|
149
|
-
for (let k = 0; k < 7; k++) {
|
|
150
|
-
const t = candidates[oi + k];
|
|
151
|
-
candidates[oi + k] = candidates[oj + k];
|
|
152
|
-
candidates[oj + k] = t;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Move deepest to slot 0.
|
|
157
|
-
let deepest_idx = 0;
|
|
158
|
-
let deepest_val = candidates[6];
|
|
159
|
-
for (let i = 1; i < n; i++) {
|
|
160
|
-
const d = candidates[i * 7 + 6];
|
|
161
|
-
if (d > deepest_val) { deepest_val = d; deepest_idx = i; }
|
|
162
|
-
}
|
|
163
|
-
swap(0, deepest_idx);
|
|
164
|
-
|
|
165
|
-
for (let k = 1; k < MAX_CONTACTS; k++) {
|
|
166
|
-
let best_score = -1;
|
|
167
|
-
let best_i = -1;
|
|
168
|
-
for (let i = k; i < n; i++) {
|
|
169
|
-
let min_d2 = Infinity;
|
|
170
|
-
for (let j = 0; j < k; j++) {
|
|
171
|
-
const dx = candidates[i * 7] - candidates[j * 7];
|
|
172
|
-
const dy = candidates[i * 7 + 1] - candidates[j * 7 + 1];
|
|
173
|
-
const dz = candidates[i * 7 + 2] - candidates[j * 7 + 2];
|
|
174
|
-
const d2 = dx * dx + dy * dy + dz * dz;
|
|
175
|
-
if (d2 < min_d2) min_d2 = d2;
|
|
176
|
-
}
|
|
177
|
-
if (min_d2 > best_score) { best_score = min_d2; best_i = i; }
|
|
178
|
-
}
|
|
179
|
-
swap(k, best_i);
|
|
180
|
-
}
|
|
181
|
-
return MAX_CONTACTS;
|
|
146
|
+
return reduce_manifold_contacts(candidates, n, CONTACT_STRIDE, MAX_CONTACTS);
|
|
182
147
|
}
|
|
183
148
|
|
|
184
149
|
// --- main --------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capsule_contacts.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/capsule_contacts.js"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;;GAeG;AACH,2CAVW,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,eACN,MAAM,QAOhB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,4CAhBW,MAAM,EAAE,GAAC,YAAY,QACrB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,MAAM,YACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,MAAM,GACJ,OAAO,CA6CnB;AAMD;;;;;GAKG;AACH,6CAHW,MAAM,EAAE,GAAC,YAAY,yNACnB,OAAO,CAuEnB;AAOD;;;;;;;;;;;;;GAaG;AACH,yCAHW,MAAM,EAAE,GAAC,YAAY,4NACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"capsule_contacts.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/capsule_contacts.js"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;;GAeG;AACH,2CAVW,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,eACN,MAAM,QAOhB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,4CAhBW,MAAM,EAAE,GAAC,YAAY,QACrB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,MAAM,YACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,MAAM,GACJ,OAAO,CA6CnB;AAMD;;;;;GAKG;AACH,6CAHW,MAAM,EAAE,GAAC,YAAY,yNACnB,OAAO,CAuEnB;AAOD;;;;;;;;;;;;;GAaG;AACH,yCAHW,MAAM,EAAE,GAAC,YAAY,4NACnB,OAAO,CA4FnB;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,gDAtBW,YAAY,QACZ,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,MAAM,YACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,GACJ,MAAM,CAsElB;AAnJD;;;;;;;;;;GAUG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;;;GAKG;AACH,uCAFU,MAAM,CAE0B"}
|