@aura3d/physics 2.0.0 → 2.0.1

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 (73) hide show
  1. package/package.json +2 -2
  2. package/dist/CharacterController.d.ts +0 -135
  3. package/dist/CharacterController.d.ts.map +0 -1
  4. package/dist/CharacterController.js +0 -609
  5. package/dist/CharacterController.js.map +0 -1
  6. package/dist/ClothFixtures.d.ts +0 -87
  7. package/dist/ClothFixtures.d.ts.map +0 -1
  8. package/dist/ClothFixtures.js +0 -264
  9. package/dist/ClothFixtures.js.map +0 -1
  10. package/dist/Crowd.d.ts +0 -64
  11. package/dist/Crowd.d.ts.map +0 -1
  12. package/dist/Crowd.js +0 -209
  13. package/dist/Crowd.js.map +0 -1
  14. package/dist/FireSmokeFixtures.d.ts +0 -103
  15. package/dist/FireSmokeFixtures.d.ts.map +0 -1
  16. package/dist/FireSmokeFixtures.js +0 -271
  17. package/dist/FireSmokeFixtures.js.map +0 -1
  18. package/dist/FluidFixtures.d.ts +0 -75
  19. package/dist/FluidFixtures.d.ts.map +0 -1
  20. package/dist/FluidFixtures.js +0 -219
  21. package/dist/FluidFixtures.js.map +0 -1
  22. package/dist/FractureFixtures.d.ts +0 -68
  23. package/dist/FractureFixtures.d.ts.map +0 -1
  24. package/dist/FractureFixtures.js +0 -199
  25. package/dist/FractureFixtures.js.map +0 -1
  26. package/dist/NarrowPhase.d.ts +0 -11
  27. package/dist/NarrowPhase.d.ts.map +0 -1
  28. package/dist/NarrowPhase.js +0 -565
  29. package/dist/NarrowPhase.js.map +0 -1
  30. package/dist/Navigation.d.ts +0 -67
  31. package/dist/Navigation.d.ts.map +0 -1
  32. package/dist/Navigation.js +0 -261
  33. package/dist/Navigation.js.map +0 -1
  34. package/dist/PathFollowDriver.d.ts +0 -162
  35. package/dist/PathFollowDriver.d.ts.map +0 -1
  36. package/dist/PathFollowDriver.js +0 -163
  37. package/dist/PathFollowDriver.js.map +0 -1
  38. package/dist/PhysicsSandboxFixtures.d.ts +0 -53
  39. package/dist/PhysicsSandboxFixtures.d.ts.map +0 -1
  40. package/dist/PhysicsSandboxFixtures.js +0 -280
  41. package/dist/PhysicsSandboxFixtures.js.map +0 -1
  42. package/dist/PlatformerFixtures.d.ts +0 -70
  43. package/dist/PlatformerFixtures.d.ts.map +0 -1
  44. package/dist/PlatformerFixtures.js +0 -120
  45. package/dist/PlatformerFixtures.js.map +0 -1
  46. package/dist/RacingLineProfile.d.ts +0 -116
  47. package/dist/RacingLineProfile.d.ts.map +0 -1
  48. package/dist/RacingLineProfile.js +0 -181
  49. package/dist/RacingLineProfile.js.map +0 -1
  50. package/dist/SoftBodyFixtures.d.ts +0 -70
  51. package/dist/SoftBodyFixtures.d.ts.map +0 -1
  52. package/dist/SoftBodyFixtures.js +0 -272
  53. package/dist/SoftBodyFixtures.js.map +0 -1
  54. package/dist/Steering.d.ts +0 -161
  55. package/dist/Steering.d.ts.map +0 -1
  56. package/dist/Steering.js +0 -347
  57. package/dist/Steering.js.map +0 -1
  58. package/dist/VehicleDynamics.d.ts +0 -162
  59. package/dist/VehicleDynamics.d.ts.map +0 -1
  60. package/dist/VehicleDynamics.js +0 -363
  61. package/dist/VehicleDynamics.js.map +0 -1
  62. package/dist/VehicleMotion.d.ts +0 -125
  63. package/dist/VehicleMotion.d.ts.map +0 -1
  64. package/dist/VehicleMotion.js +0 -373
  65. package/dist/VehicleMotion.js.map +0 -1
  66. package/dist/solverless-entry.d.ts +0 -41
  67. package/dist/solverless-entry.d.ts.map +0 -1
  68. package/dist/solverless-entry.js +0 -40
  69. package/dist/solverless-entry.js.map +0 -1
  70. package/dist/world-entry.d.ts +0 -31
  71. package/dist/world-entry.d.ts.map +0 -1
  72. package/dist/world-entry.js +0 -30
  73. package/dist/world-entry.js.map +0 -1
@@ -1,163 +0,0 @@
1
- /**
2
- * Turns a path plus a speed target into steering, throttle and brake for `createVehicleMotion`.
3
- *
4
- * ## Why this exists
5
- *
6
- * The library shipped the two hard halves of AI driving — `createVehicleMotion` for the tyre and
7
- * yaw dynamics, `createRacingLineProfile` for the speed a corner can be taken at — and nothing to
8
- * join them. Every racing route therefore hand-rolled its own driver, and hand-rolled drivers all
9
- * fail the same way. The obvious formulation, a Stanley controller that steers on
10
- * `headingError + atan2(crossTrack, speed)`, is stable on gentle curves and diverges on a hairpin:
11
- *
12
- * 1. Heading error grows faster than the car can rotate, so the steering command saturates.
13
- * 2. Saturated at full lock, the controller has no authority left and the car runs wide.
14
- * 3. Once outside the road the nearest point on the path stops advancing, so `progress` latches.
15
- * A latched progress freezes the speed target and the curvature feedforward.
16
- * 4. The now-constant cross-track term flips sign every frame as the car crosses the path
17
- * centreline, and the car saws away from the track at full lock — measured on the certified
18
- * circuit as progress stuck at 0.2789 for 8,700 consecutive frames while lateral offset grew to
19
- * 43 units, i.e. 98 road widths from a 0.439-wide road.
20
- *
21
- * The failure is not the vehicle's. Held at a fixed speed, the same car corners at radius
22
- * 0.32-0.55 against a hairpin that demands 0.80, so it has ~40% radius margin. It was the
23
- * controller throwing that margin away.
24
- *
25
- * ## What this does instead
26
- *
27
- * Pure pursuit: aim at a point a lookahead distance *along the path* and solve the arc that reaches
28
- * it. This is bounded by construction — the arc to a point at a known distance has a known
29
- * curvature, so the command cannot run away the way an unbounded error term can. Three properties
30
- * matter for the hairpin case:
31
- *
32
- * - **Lookahead scales with speed** (`lookaheadTime * speed`, clamped to `[minLookahead,
33
- * maxLookahead]`). Time-based lookahead means the car looks a fixed duration ahead rather than a
34
- * fixed distance, which is what makes one gain work at both 2 and 12 units/second.
35
- * - **The target is measured along arc length, not straight-line distance.** On a hairpin the point
36
- * 0.8 units ahead along the road is nearly behind the car in a straight line; chord-based
37
- * lookahead skips the corner entirely and cuts to the exit.
38
- * - **Progress advances monotonically** from the driver's own integrated distance, so being off the
39
- * road cannot latch it. This is the direct fix for failure 3 above: the driver keeps a running
40
- * distance and only accepts a measured progress that is ahead of it, within a rejoin window.
41
- *
42
- * Speed control is a PI-free proportional law with an explicit brake/throttle split, because a
43
- * single signed axis fed to a vehicle that has separate `driveForce` and `brakeForce` produces
44
- * asymmetric response that reads as the car refusing to slow for corners.
45
- *
46
- * The driver is pure and allocation-free per step: no `three`, no renderer, no route names, no
47
- * game-specific branch. Any path that can answer "where am I along you" and "what is your point at
48
- * distance d" can be driven, which is why the input is two callbacks rather than a route type.
49
- */
50
- function clamp(value, min, max) {
51
- return value < min ? min : value > max ? max : value;
52
- }
53
- function wrapAngle(value) {
54
- let angle = value;
55
- while (angle > Math.PI)
56
- angle -= 2 * Math.PI;
57
- while (angle < -Math.PI)
58
- angle += 2 * Math.PI;
59
- return angle;
60
- }
61
- export function createPathFollowDriver(options) {
62
- const length = options.length;
63
- if (!Number.isFinite(length) || length <= 0) {
64
- throw new Error(`createPathFollowDriver requires a positive length, received ${String(options.length)}`);
65
- }
66
- const closed = options.closed !== false;
67
- const wheelbase = Math.max(1e-4, options.wheelbase);
68
- const maxSteerAngle = Math.max(1e-4, options.maxSteerAngle);
69
- const lookaheadTime = options.lookaheadTime ?? 0.25;
70
- const minLookahead = options.minLookahead ?? Math.max(wheelbase * 0.7, length / 160);
71
- const maxLookahead = Math.max(minLookahead, options.maxLookahead ?? length / 8);
72
- const crossTrackGain = options.crossTrackGain ?? 2.5;
73
- const speedGain = options.speedGain ?? 2;
74
- const speedPreviewTime = options.speedPreviewTime ?? 0.35;
75
- const rejoinWindow = options.rejoinWindow ?? length * 0.08;
76
- let travelled = 0;
77
- let laps = 0;
78
- function advance(measured) {
79
- if (!closed) {
80
- travelled = Math.max(travelled, measured);
81
- return travelled;
82
- }
83
- /*
84
- * `measured` is a nearest-point match on a wrapped path, so it can legitimately jump backwards
85
- * across the start line. Compare in the wrapped frame and only accept forward motion, or a
86
- * backward step small enough to be a genuine correction rather than a stale match from the far
87
- * side of the circuit.
88
- */
89
- const currentWrapped = ((travelled % length) + length) % length;
90
- let delta = measured - currentWrapped;
91
- if (delta > length / 2)
92
- delta -= length;
93
- if (delta < -length / 2)
94
- delta += length;
95
- if (delta > 0 || delta > -rejoinWindow) {
96
- travelled += delta;
97
- const nextLaps = Math.floor(travelled / length);
98
- if (nextLaps > laps)
99
- laps = nextLaps;
100
- }
101
- return travelled;
102
- }
103
- return {
104
- kind: "aura-path-follow-driver",
105
- get lapsCompleted() {
106
- return laps;
107
- },
108
- reset(distance = 0) {
109
- travelled = distance;
110
- laps = 0;
111
- },
112
- step(state) {
113
- const contact = options.contactAt(state.x, state.z);
114
- const distance = advance(contact.distance);
115
- const speed = Math.max(0, state.speed);
116
- const lookahead = clamp(lookaheadTime * speed, minLookahead, maxLookahead);
117
- const aim = options.sampleAt(distance + lookahead);
118
- /*
119
- * Pure pursuit: with the aim point expressed in the car's frame, the arc through it has
120
- * curvature `2 * lateralOffset / chord^2`. Deriving curvature from the geometry rather than
121
- * from a heading-error gain is what bounds the command: a reachable point yields a reachable
122
- * arc.
123
- */
124
- const dx = aim.x - state.x;
125
- const dy = aim.y - state.z;
126
- const cosH = Math.cos(state.heading);
127
- const sinH = Math.sin(state.heading);
128
- const forward = dx * cosH + dy * sinH;
129
- const lateralToAim = -dx * sinH + dy * cosH;
130
- const chordSquared = dx * dx + dy * dy;
131
- let curvature = chordSquared > 1e-9 ? (2 * lateralToAim) / chordSquared : 0;
132
- /*
133
- * If the aim point is behind the car the arc solution degenerates — it points the car at a
134
- * target it has already passed and can produce a near-zero command exactly when the car most
135
- * needs to turn. Fall back to closing the heading error to the path tangent, which always has
136
- * the right sign.
137
- */
138
- if (forward <= 0) {
139
- curvature = Math.sign(wrapAngle(aim.heading - state.heading) || 1) * (1 / Math.max(1e-4, wheelbase));
140
- }
141
- const steerFromArc = Math.atan(wheelbase * curvature);
142
- const crossTerm = Math.atan2(crossTrackGain * -contact.signedOffset, Math.max(0.5, speed));
143
- const steer = clamp((steerFromArc + crossTerm) / maxSteerAngle, -1, 1);
144
- const previewDistance = distance + Math.max(lookahead, speedPreviewTime * speed);
145
- const targetSpeed = options.speedAt(previewDistance);
146
- const speedError = targetSpeed - speed;
147
- const throttle = speedError > 0 ? Math.min(1, speedError * speedGain) : 0;
148
- const brake = speedError < 0 ? Math.min(1, -speedError * speedGain) : 0;
149
- return {
150
- throttle,
151
- brake,
152
- steer,
153
- distance,
154
- progress: closed ? (((distance / length) % 1) + 1) % 1 : clamp(distance / length, 0, 1),
155
- signedOffset: contact.signedOffset,
156
- targetSpeed,
157
- lookahead,
158
- saturated: Math.abs(steer) >= 0.999
159
- };
160
- }
161
- };
162
- }
163
- //# sourceMappingURL=PathFollowDriver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PathFollowDriver.js","sourceRoot":"","sources":["../../../../packages/physics/src/PathFollowDriver.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- export type PhysicsSandboxSpawnerPreset = "box" | "sphere" | "capsule" | "cylinder-proxy" | "tower" | "pyramid" | "wall" | "chain" | "newtons-cradle" | "dominoes" | "wrecking-ball" | "vehicle" | "ragdoll";
2
- export type PhysicsSandboxTool = "grab" | "push" | "freeze" | "delete" | "explode" | "slice";
3
- export interface PhysicsSandboxFixtureOptions {
4
- readonly seed?: number;
5
- readonly steps?: number;
6
- }
7
- export interface PhysicsSandboxSpawnSummary {
8
- readonly preset: PhysicsSandboxSpawnerPreset;
9
- readonly bodies: number;
10
- readonly dynamicBodies: number;
11
- readonly staticBodies: number;
12
- readonly colliders: number;
13
- readonly constraints: number;
14
- readonly visualKinds: readonly string[];
15
- readonly colliderKinds: readonly string[];
16
- }
17
- export interface PhysicsSandboxToolSummary {
18
- readonly tool: PhysicsSandboxTool;
19
- readonly supported: boolean;
20
- readonly affectedBodies: number;
21
- readonly selectedBodyId?: number;
22
- readonly impulseMagnitude?: number;
23
- readonly deletedBodies?: number;
24
- readonly frozenBodies?: number;
25
- readonly blocker?: string;
26
- }
27
- export interface PhysicsSandboxFixture {
28
- readonly id: "external-parity-old-branch-physics-sandbox-fixture";
29
- readonly source: "origin-master-physics-sandbox-tools-spawners-adapted";
30
- readonly spawners: readonly PhysicsSandboxSpawnSummary[];
31
- readonly tools: readonly PhysicsSandboxToolSummary[];
32
- readonly metrics: {
33
- readonly bodyCountBeforeTools: number;
34
- readonly bodyCountAfterTools: number;
35
- readonly colliderCountAfterTools: number;
36
- readonly constraintCountAfterTools: number;
37
- readonly dynamicBodiesAfterTools: number;
38
- readonly sleepingBodiesAfterTools: number;
39
- readonly contactsAfterSteps: number;
40
- readonly broadphasePairsAfterSteps: number;
41
- readonly kineticEnergyAfterSteps: number;
42
- readonly maxContactPenetrationAfterSteps: number;
43
- readonly totalSpawnedBodies: number;
44
- readonly totalSpawnerConstraints: number;
45
- readonly supportedToolCount: number;
46
- readonly blockedToolCount: number;
47
- };
48
- readonly unsupportedAdvancedSimulations: readonly ["cloth", "soft-body", "fluid", "fracture"];
49
- readonly hash: string;
50
- readonly claimBoundary: string;
51
- }
52
- export declare function samplePhysicsSandboxFixture(options?: PhysicsSandboxFixtureOptions): PhysicsSandboxFixture;
53
- //# sourceMappingURL=PhysicsSandboxFixtures.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PhysicsSandboxFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsSandboxFixtures.ts"],"names":[],"mappings":"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"}
@@ -1,280 +0,0 @@
1
- import { PhysicsWorld } from "./PhysicsWorld.js";
2
- import { Shape } from "./Shape.js";
3
- export function samplePhysicsSandboxFixture(options = {}) {
4
- const seed = integer(options.seed ?? 0x3d2025, "seed");
5
- const steps = integer(options.steps ?? 24, "steps");
6
- if (steps < 0 || steps > 240)
7
- throw new RangeError("Physics sandbox fixture steps must be in the [0, 240] range.");
8
- const world = new PhysicsWorld({ gravity: [0, -9.81, 0], fixedDelta: 1 / 60, solverIterations: 6 });
9
- const records = [];
10
- const constraints = [];
11
- const ground = world.createRigidBody({ type: "static", position: [0, -0.15, 0] });
12
- world.createCollider(ground, { shape: Shape.box(8, 0.15, 2), material: { friction: 0.9, restitution: 0 } });
13
- spawnBasic(world, records, "box", [-4.2, 1.2, 0], Shape.box(0.32, 0.32, 0.32), "box", 1);
14
- spawnBasic(world, records, "sphere", [-3.45, 1.25, 0], Shape.sphere(0.32), "sphere", 1);
15
- spawnBasic(world, records, "capsule", [-2.7, 1.35, 0], Shape.capsule(0.22, 0.38), "capsule", 1);
16
- spawnBasic(world, records, "cylinder-proxy", [-1.95, 1.3, 0], Shape.capsule(0.28, 0.26), "cylinder", 1);
17
- spawnTower(world, records, [-4.5, 0.25, 0], 5);
18
- spawnPyramid(world, records, [-2.7, 0.25, 0], 4);
19
- spawnWall(world, records, [-0.6, 0.25, 0], 5, 3);
20
- spawnChain(world, records, constraints, [1.5, 3.1, 0], [3.0, 2.2, 0], 6);
21
- spawnNewtonsCradle(world, records, constraints, [0.9, 4.2, 0], 4);
22
- spawnDominoes(world, records, [2.1, 0.45, 0], 8);
23
- spawnWreckingBall(world, records, constraints, [4.0, 3.5, 0], 2.4);
24
- spawnVehicle(world, records, constraints, [-0.2, 2.0, 0]);
25
- spawnRagdoll(world, records, constraints, [3.7, 1.6, 0]);
26
- const bodyCountBeforeTools = world.snapshot().stats.bodies;
27
- const tools = applyToolSequence(world, seed);
28
- for (let step = 0; step < steps; step += 1)
29
- world.step(1 / 60);
30
- const snapshot = world.snapshot();
31
- const spawners = summarizeSpawners(records, constraints, world);
32
- const supportedToolCount = tools.filter((tool) => tool.supported).length;
33
- const blockedToolCount = tools.length - supportedToolCount;
34
- const metrics = {
35
- bodyCountBeforeTools,
36
- bodyCountAfterTools: snapshot.stats.bodies,
37
- colliderCountAfterTools: snapshot.stats.colliders,
38
- constraintCountAfterTools: snapshot.stats.constraints,
39
- dynamicBodiesAfterTools: snapshot.bodies.filter((body) => body.type === "dynamic").length,
40
- sleepingBodiesAfterTools: snapshot.stats.sleepingBodies,
41
- contactsAfterSteps: snapshot.stats.contacts,
42
- broadphasePairsAfterSteps: snapshot.stats.broadphasePairs,
43
- kineticEnergyAfterSteps: Number(snapshot.stats.kineticEnergy.toFixed(4)),
44
- maxContactPenetrationAfterSteps: Number(snapshot.stats.maxContactPenetration.toFixed(5)),
45
- totalSpawnedBodies: records.length,
46
- totalSpawnerConstraints: constraints.length,
47
- supportedToolCount,
48
- blockedToolCount
49
- };
50
- return {
51
- id: "external-parity-old-branch-physics-sandbox-fixture",
52
- source: "origin-master-physics-sandbox-tools-spawners-adapted",
53
- spawners,
54
- tools,
55
- metrics,
56
- unsupportedAdvancedSimulations: ["cloth", "soft-body", "fluid", "fracture"],
57
- hash: hashFixture(spawners, tools, metrics),
58
- claimBoundary: "Deterministic current-engine fixture adapted from old physics sandbox spawners and tools. It proves bounded rigid-body spawn presets, hinge/spring constraints, and supported tool telemetry; it does not claim soft body, cloth, fluid, fracture, full interactive editor tools, or Unity/Unreal physics-sandbox parity."
59
- };
60
- }
61
- function spawnBasic(world, records, preset, position, shape, visualKind, mass) {
62
- const body = world.createRigidBody({ position, mass, linearDamping: 0.02, angularDamping: 0.02 });
63
- world.createCollider(body, { shape, material: { friction: 0.72, restitution: 0.05 } });
64
- records.push({ preset, body, visualKind, colliderKind: preset === "cylinder-proxy" ? "cylinder-proxy" : shape.kind });
65
- return body;
66
- }
67
- function spawnTower(world, records, origin, height) {
68
- for (let index = 0; index < height; index += 1) {
69
- spawnBasic(world, records, "tower", [origin[0], origin[1] + index * 0.46, origin[2]], Shape.box(0.36, 0.22, 0.32), "box", 1);
70
- }
71
- }
72
- function spawnPyramid(world, records, origin, levels) {
73
- for (let level = 0; level < levels; level += 1) {
74
- const width = levels - level;
75
- for (let x = 0; x < width; x += 1) {
76
- spawnBasic(world, records, "pyramid", [
77
- origin[0] + (x - (width - 1) / 2) * 0.44,
78
- origin[1] + level * 0.46,
79
- origin[2]
80
- ], Shape.box(0.2, 0.22, 0.25), "box", 1);
81
- }
82
- }
83
- }
84
- function spawnWall(world, records, origin, width, height) {
85
- for (let y = 0; y < height; y += 1) {
86
- const boxesInRow = width - (y % 2);
87
- for (let x = 0; x < boxesInRow; x += 1) {
88
- spawnBasic(world, records, "wall", [
89
- origin[0] + (x - (boxesInRow - 1) / 2) * 0.42 + (y % 2) * 0.21,
90
- origin[1] + y * 0.42,
91
- origin[2]
92
- ], Shape.box(0.2, 0.2, 0.2), "brick", 1);
93
- }
94
- }
95
- }
96
- function spawnChain(world, records, constraints, start, end, segments) {
97
- let previous;
98
- for (let index = 0; index < segments; index += 1) {
99
- const t = (index + 0.5) / segments;
100
- const body = spawnBasic(world, records, "chain", lerpVec3(start, end, t), Shape.box(0.12, 0.12, 0.32), "chain-link", 0.5);
101
- if (previous) {
102
- world.createConstraint({ type: "hinge", bodyA: previous, bodyB: body, stiffness: 0.85 });
103
- constraints.push({ preset: "chain" });
104
- }
105
- previous = body;
106
- }
107
- }
108
- function spawnNewtonsCradle(world, records, constraints, origin, balls) {
109
- for (let index = 0; index < balls; index += 1) {
110
- const x = origin[0] + (index - (balls - 1) / 2) * 0.42;
111
- const anchor = world.createRigidBody({ type: "static", position: [x, origin[1], origin[2]] });
112
- world.createCollider(anchor, { shape: Shape.box(0.06, 0.06, 0.06) });
113
- records.push({ preset: "newtons-cradle", body: anchor, visualKind: "anchor", colliderKind: "box" });
114
- const ball = spawnBasic(world, records, "newtons-cradle", [x, origin[1] - 1.1, origin[2]], Shape.sphere(0.18), "sphere", 1);
115
- world.createConstraint({ type: "hinge", bodyA: anchor, bodyB: ball, stiffness: 0.9 });
116
- constraints.push({ preset: "newtons-cradle" });
117
- }
118
- }
119
- function spawnDominoes(world, records, start, count) {
120
- for (let index = 0; index < count; index += 1) {
121
- spawnBasic(world, records, "dominoes", [start[0] + index * 0.22, start[1], start[2]], Shape.box(0.05, 0.34, 0.18), "domino", 0.5);
122
- }
123
- }
124
- function spawnWreckingBall(world, records, constraints, position, chainLength) {
125
- const anchor = world.createRigidBody({ type: "static", position });
126
- world.createCollider(anchor, { shape: Shape.box(0.08, 0.08, 0.08) });
127
- records.push({ preset: "wrecking-ball", body: anchor, visualKind: "anchor", colliderKind: "box" });
128
- const ball = spawnBasic(world, records, "wrecking-ball", [position[0] + 0.55, position[1] - chainLength, position[2]], Shape.sphere(0.34), "sphere", 8);
129
- world.createConstraint({ type: "spring", bodyA: anchor, bodyB: ball, restLength: chainLength, stiffness: 0.55 });
130
- constraints.push({ preset: "wrecking-ball" });
131
- }
132
- function spawnVehicle(world, records, constraints, position) {
133
- const chassis = spawnBasic(world, records, "vehicle", position, Shape.box(0.56, 0.16, 0.32), "chassis", 5);
134
- for (const offset of [[-0.38, -0.24, -0.32], [-0.38, -0.24, 0.32], [0.38, -0.24, -0.32], [0.38, -0.24, 0.32]]) {
135
- const wheel = spawnBasic(world, records, "vehicle", [position[0] + offset[0], position[1] + offset[1], position[2] + offset[2]], Shape.sphere(0.15), "wheel", 0.5);
136
- world.createConstraint({ type: "hinge", bodyA: chassis, bodyB: wheel, stiffness: 0.75 });
137
- constraints.push({ preset: "vehicle" });
138
- }
139
- }
140
- function spawnRagdoll(world, records, constraints, position) {
141
- const torso = spawnBasic(world, records, "ragdoll", position, Shape.box(0.22, 0.36, 0.16), "torso", 5);
142
- const parts = [
143
- ["head", [0, 0.58, 0], Shape.sphere(0.18), 1],
144
- ["left-arm", [-0.36, 0.14, 0], Shape.capsule(0.08, 0.28), 1],
145
- ["right-arm", [0.36, 0.14, 0], Shape.capsule(0.08, 0.28), 1],
146
- ["left-leg", [-0.16, -0.56, 0], Shape.capsule(0.09, 0.34), 1],
147
- ["right-leg", [0.16, -0.56, 0], Shape.capsule(0.09, 0.34), 1]
148
- ];
149
- for (const [visualKind, offset, shape, mass] of parts) {
150
- const body = spawnBasic(world, records, "ragdoll", [position[0] + offset[0], position[1] + offset[1], position[2] + offset[2]], shape, visualKind, mass);
151
- world.createConstraint({ type: "hinge", bodyA: torso, bodyB: body, stiffness: 0.72 });
152
- constraints.push({ preset: "ragdoll" });
153
- }
154
- }
155
- function applyToolSequence(world, seed) {
156
- const tools = [];
157
- const dynamicBodies = () => world.bodies().filter((body) => body.type === "dynamic");
158
- const grabTarget = [0.25 + hash01(seed, 1) * 0.25, 2.15, 0];
159
- const grabbed = nearestBody(dynamicBodies(), [0, 2, 0]);
160
- if (grabbed) {
161
- grabbed.setVelocity([
162
- (grabTarget[0] - grabbed.position[0]) * 3.5,
163
- (grabTarget[1] - grabbed.position[1]) * 3.5,
164
- 0
165
- ]);
166
- }
167
- tools.push({
168
- tool: "grab",
169
- supported: grabbed !== undefined,
170
- affectedBodies: grabbed ? 1 : 0,
171
- selectedBodyId: grabbed?.id,
172
- blocker: "Current RigidBody type is immutable, so this fixture proves velocity-targeted grab telemetry rather than old kinematic type switching."
173
- });
174
- const pushPoint = [0, 1.2, 0];
175
- let pushed = 0;
176
- let impulseMagnitude = 0;
177
- for (const body of dynamicBodies()) {
178
- const distance = distanceVec3(body.position, pushPoint);
179
- if (distance <= 2.5 && distance > 1e-6) {
180
- const direction = scaleVec3(subVec3(body.position, pushPoint), 1 / distance);
181
- const impulse = scaleVec3(direction, Number(((2.5 - distance) * 0.38).toFixed(4)));
182
- body.applyImpulse(impulse);
183
- impulseMagnitude += Math.hypot(...impulse);
184
- pushed += 1;
185
- }
186
- }
187
- tools.push({ tool: "push", supported: true, affectedBodies: pushed, impulseMagnitude: Number(impulseMagnitude.toFixed(4)) });
188
- const freezeCandidates = dynamicBodies().slice(0, 3);
189
- for (const body of freezeCandidates) {
190
- body.setVelocity([0, 0, 0]);
191
- body.setAngularVelocity([0, 0, 0]);
192
- body.sleeping = true;
193
- }
194
- tools.push({ tool: "freeze", supported: true, affectedBodies: freezeCandidates.length, frozenBodies: freezeCandidates.length });
195
- const deleteTarget = dynamicBodies().at(-1);
196
- if (deleteTarget)
197
- world.removeRigidBody(deleteTarget.id);
198
- tools.push({ tool: "delete", supported: deleteTarget !== undefined, affectedBodies: deleteTarget ? 1 : 0, selectedBodyId: deleteTarget?.id, deletedBodies: deleteTarget ? 1 : 0 });
199
- const explodePoint = [1.2, 1.2, 0];
200
- let exploded = 0;
201
- let explosionImpulse = 0;
202
- for (const body of dynamicBodies()) {
203
- const distance = distanceVec3(body.position, explodePoint);
204
- if (distance <= 3.25 && distance > 1e-6) {
205
- const direction = scaleVec3(subVec3(body.position, explodePoint), 1 / distance);
206
- const impulse = scaleVec3(direction, Number(((3.25 - distance) * 0.52).toFixed(4)));
207
- body.applyImpulse(impulse);
208
- explosionImpulse += Math.hypot(...impulse);
209
- exploded += 1;
210
- }
211
- }
212
- tools.push({ tool: "explode", supported: true, affectedBodies: exploded, impulseMagnitude: Number(explosionImpulse.toFixed(4)) });
213
- tools.push({
214
- tool: "slice",
215
- supported: false,
216
- affectedBodies: 0,
217
- blocker: "Old slice tool only drew/specified a cut gesture; current physics has no convex decomposition or fracture pipeline."
218
- });
219
- return tools;
220
- }
221
- function summarizeSpawners(records, constraints, world) {
222
- const summaries = [];
223
- const liveBodyIds = new Set(world.bodies().map((body) => body.id));
224
- for (const preset of unique(records.map((record) => record.preset))) {
225
- const presetRecords = records.filter((record) => record.preset === preset && liveBodyIds.has(record.body.id));
226
- summaries.push({
227
- preset,
228
- bodies: presetRecords.length,
229
- dynamicBodies: presetRecords.filter((record) => record.body.type === "dynamic").length,
230
- staticBodies: presetRecords.filter((record) => record.body.type === "static").length,
231
- colliders: presetRecords.length,
232
- constraints: constraints.filter((constraint) => constraint.preset === preset).length,
233
- visualKinds: unique(presetRecords.map((record) => record.visualKind)).sort(),
234
- colliderKinds: unique(presetRecords.map((record) => record.colliderKind)).sort()
235
- });
236
- }
237
- return summaries;
238
- }
239
- function nearestBody(bodies, target) {
240
- return [...bodies].sort((left, right) => distanceVec3(left.position, target) - distanceVec3(right.position, target) || left.id - right.id)[0];
241
- }
242
- function lerpVec3(start, end, t) {
243
- return [
244
- start[0] + (end[0] - start[0]) * t,
245
- start[1] + (end[1] - start[1]) * t,
246
- start[2] + (end[2] - start[2]) * t
247
- ];
248
- }
249
- function distanceVec3(left, right) {
250
- return Math.hypot(left[0] - right[0], left[1] - right[1], left[2] - right[2]);
251
- }
252
- function subVec3(left, right) {
253
- return [left[0] - right[0], left[1] - right[1], left[2] - right[2]];
254
- }
255
- function scaleVec3(value, scale) {
256
- return [value[0] * scale, value[1] * scale, value[2] * scale];
257
- }
258
- function unique(values) {
259
- return [...new Set(values)];
260
- }
261
- function hashFixture(...parts) {
262
- const text = JSON.stringify(parts);
263
- let hash = 0x811c9dc5;
264
- for (let index = 0; index < text.length; index += 1) {
265
- hash ^= text.charCodeAt(index);
266
- hash = Math.imul(hash, 0x01000193) >>> 0;
267
- }
268
- return hash.toString(16).padStart(8, "0");
269
- }
270
- function hash01(seed, salt) {
271
- let value = Math.imul(seed + salt * 1013904223, 1664525) + 1013904223;
272
- value = Math.imul(value ^ (value >>> 13), 1274126177);
273
- return ((value ^ (value >>> 16)) >>> 0) / 4294967296;
274
- }
275
- function integer(value, label) {
276
- if (!Number.isInteger(value))
277
- throw new RangeError(`Physics sandbox fixture ${label} must be an integer.`);
278
- return value;
279
- }
280
- //# sourceMappingURL=PhysicsSandboxFixtures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PhysicsSandboxFixtures.js","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsSandboxFixtures.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- export type PlatformerAnimationState = "idle" | "walk" | "run" | "jump" | "fall" | "doubleJump" | "wallSlide" | "land";
2
- export type PlatformerPlatformKind = "static" | "moving" | "rotating" | "falling" | "bouncy" | "disappearing";
3
- export type PlatformerCollectibleKind = "coin" | "gem" | "power-up";
4
- export interface PlatformerFixtureOptions {
5
- readonly seed?: number;
6
- readonly elapsedSeconds?: number;
7
- }
8
- export interface PlatformerPlatformSummary {
9
- readonly kind: PlatformerPlatformKind;
10
- readonly count: number;
11
- }
12
- export interface PlatformerCollectibleSummary {
13
- readonly kind: PlatformerCollectibleKind;
14
- readonly count: number;
15
- readonly scoreValue: number;
16
- }
17
- export interface PlatformerControllerFixture {
18
- readonly id: "external-parity-old-branch-platformer-controller-fixture";
19
- readonly source: "origin-master-platformer-controller-adapted";
20
- readonly config: {
21
- readonly walkSpeed: number;
22
- readonly runSpeed: number;
23
- readonly jumpForce: number;
24
- readonly doubleJumpForce: number;
25
- readonly wallJumpForce: number;
26
- readonly airControl: number;
27
- readonly coyoteTimeSeconds: number;
28
- readonly jumpBufferSeconds: number;
29
- readonly maxFallSpeed: number;
30
- };
31
- readonly controller: {
32
- readonly grounded: boolean;
33
- readonly coyoteJumpAccepted: boolean;
34
- readonly bufferedJumpAccepted: boolean;
35
- readonly doubleJumpAccepted: boolean;
36
- readonly wallJumpAccepted: boolean;
37
- readonly horizontalSpeed: number;
38
- readonly verticalVelocity: number;
39
- readonly stateSequence: readonly PlatformerAnimationState[];
40
- readonly finalState: PlatformerAnimationState;
41
- };
42
- readonly camera: {
43
- readonly distance: number;
44
- readonly minDistance: number;
45
- readonly maxDistance: number;
46
- readonly height: number;
47
- readonly followSpeed: number;
48
- readonly verticalAngle: number;
49
- readonly collisionAdjustedDistance: number;
50
- readonly shakeAmount: number;
51
- readonly lockOnSupported: boolean;
52
- };
53
- readonly level: {
54
- readonly startPosition: readonly [number, number, number];
55
- readonly goalPosition: readonly [number, number, number];
56
- readonly platformSummaries: readonly PlatformerPlatformSummary[];
57
- readonly collectibleSummaries: readonly PlatformerCollectibleSummary[];
58
- readonly checkpointCount: number;
59
- readonly hazardCount: number;
60
- readonly movingPlatformPathCount: number;
61
- readonly totalPlatforms: number;
62
- readonly totalCollectibles: number;
63
- readonly totalScoreValue: number;
64
- readonly goalDistance: number;
65
- };
66
- readonly hash: string;
67
- readonly claimBoundary: string;
68
- }
69
- export declare function samplePlatformerControllerFixture(options?: PlatformerFixtureOptions): PlatformerControllerFixture;
70
- //# sourceMappingURL=PlatformerFixtures.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlatformerFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/PlatformerFixtures.ts"],"names":[],"mappings":"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"}