@aura3d/physics 1.0.6

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 (147) hide show
  1. package/README.md +26 -0
  2. package/dist/CharacterController.d.ts +52 -0
  3. package/dist/CharacterController.d.ts.map +1 -0
  4. package/dist/CharacterController.js +146 -0
  5. package/dist/CharacterController.js.map +1 -0
  6. package/dist/ClothFixtures.d.ts +87 -0
  7. package/dist/ClothFixtures.d.ts.map +1 -0
  8. package/dist/ClothFixtures.js +264 -0
  9. package/dist/ClothFixtures.js.map +1 -0
  10. package/dist/Collider.d.ts +27 -0
  11. package/dist/Collider.d.ts.map +1 -0
  12. package/dist/Collider.js +45 -0
  13. package/dist/Collider.js.map +1 -0
  14. package/dist/CollisionEvents.d.ts +26 -0
  15. package/dist/CollisionEvents.d.ts.map +1 -0
  16. package/dist/CollisionEvents.js +46 -0
  17. package/dist/CollisionEvents.js.map +1 -0
  18. package/dist/CollisionVolumes.d.ts +57 -0
  19. package/dist/CollisionVolumes.d.ts.map +1 -0
  20. package/dist/CollisionVolumes.js +159 -0
  21. package/dist/CollisionVolumes.js.map +1 -0
  22. package/dist/Constraint.d.ts +31 -0
  23. package/dist/Constraint.d.ts.map +1 -0
  24. package/dist/Constraint.js +103 -0
  25. package/dist/Constraint.js.map +1 -0
  26. package/dist/Constraints.d.ts +2 -0
  27. package/dist/Constraints.d.ts.map +1 -0
  28. package/dist/Constraints.js +2 -0
  29. package/dist/Constraints.js.map +1 -0
  30. package/dist/Crowd.d.ts +64 -0
  31. package/dist/Crowd.d.ts.map +1 -0
  32. package/dist/Crowd.js +209 -0
  33. package/dist/Crowd.js.map +1 -0
  34. package/dist/ECSPhysicsBridge.d.ts +17 -0
  35. package/dist/ECSPhysicsBridge.d.ts.map +1 -0
  36. package/dist/ECSPhysicsBridge.js +37 -0
  37. package/dist/ECSPhysicsBridge.js.map +1 -0
  38. package/dist/FireSmokeFixtures.d.ts +103 -0
  39. package/dist/FireSmokeFixtures.d.ts.map +1 -0
  40. package/dist/FireSmokeFixtures.js +271 -0
  41. package/dist/FireSmokeFixtures.js.map +1 -0
  42. package/dist/FluidFixtures.d.ts +75 -0
  43. package/dist/FluidFixtures.d.ts.map +1 -0
  44. package/dist/FluidFixtures.js +219 -0
  45. package/dist/FluidFixtures.js.map +1 -0
  46. package/dist/FractureFixtures.d.ts +68 -0
  47. package/dist/FractureFixtures.d.ts.map +1 -0
  48. package/dist/FractureFixtures.js +199 -0
  49. package/dist/FractureFixtures.js.map +1 -0
  50. package/dist/HitboxWorld.d.ts +250 -0
  51. package/dist/HitboxWorld.d.ts.map +1 -0
  52. package/dist/HitboxWorld.js +771 -0
  53. package/dist/HitboxWorld.js.map +1 -0
  54. package/dist/KinematicBody.d.ts +157 -0
  55. package/dist/KinematicBody.d.ts.map +1 -0
  56. package/dist/KinematicBody.js +405 -0
  57. package/dist/KinematicBody.js.map +1 -0
  58. package/dist/KinematicWorld.d.ts +58 -0
  59. package/dist/KinematicWorld.d.ts.map +1 -0
  60. package/dist/KinematicWorld.js +246 -0
  61. package/dist/KinematicWorld.js.map +1 -0
  62. package/dist/Navigation.d.ts +67 -0
  63. package/dist/Navigation.d.ts.map +1 -0
  64. package/dist/Navigation.js +261 -0
  65. package/dist/Navigation.js.map +1 -0
  66. package/dist/PhysicsDebugDraw.d.ts +11 -0
  67. package/dist/PhysicsDebugDraw.d.ts.map +1 -0
  68. package/dist/PhysicsDebugDraw.js +64 -0
  69. package/dist/PhysicsDebugDraw.js.map +1 -0
  70. package/dist/PhysicsSandboxFixtures.d.ts +53 -0
  71. package/dist/PhysicsSandboxFixtures.d.ts.map +1 -0
  72. package/dist/PhysicsSandboxFixtures.js +280 -0
  73. package/dist/PhysicsSandboxFixtures.js.map +1 -0
  74. package/dist/PhysicsStepper.d.ts +15 -0
  75. package/dist/PhysicsStepper.d.ts.map +1 -0
  76. package/dist/PhysicsStepper.js +37 -0
  77. package/dist/PhysicsStepper.js.map +1 -0
  78. package/dist/PhysicsWorld.d.ts +101 -0
  79. package/dist/PhysicsWorld.d.ts.map +1 -0
  80. package/dist/PhysicsWorld.js +868 -0
  81. package/dist/PhysicsWorld.js.map +1 -0
  82. package/dist/PlatformerFixtures.d.ts +70 -0
  83. package/dist/PlatformerFixtures.d.ts.map +1 -0
  84. package/dist/PlatformerFixtures.js +120 -0
  85. package/dist/PlatformerFixtures.js.map +1 -0
  86. package/dist/Raycast.d.ts +23 -0
  87. package/dist/Raycast.d.ts.map +1 -0
  88. package/dist/Raycast.js +271 -0
  89. package/dist/Raycast.js.map +1 -0
  90. package/dist/RigidBody.d.ts +69 -0
  91. package/dist/RigidBody.d.ts.map +1 -0
  92. package/dist/RigidBody.js +255 -0
  93. package/dist/RigidBody.js.map +1 -0
  94. package/dist/ScenePhysicsBridge.d.ts +42 -0
  95. package/dist/ScenePhysicsBridge.d.ts.map +1 -0
  96. package/dist/ScenePhysicsBridge.js +168 -0
  97. package/dist/ScenePhysicsBridge.js.map +1 -0
  98. package/dist/Shape.d.ts +50 -0
  99. package/dist/Shape.d.ts.map +1 -0
  100. package/dist/Shape.js +128 -0
  101. package/dist/Shape.js.map +1 -0
  102. package/dist/SoftBodyFixtures.d.ts +70 -0
  103. package/dist/SoftBodyFixtures.d.ts.map +1 -0
  104. package/dist/SoftBodyFixtures.js +272 -0
  105. package/dist/SoftBodyFixtures.js.map +1 -0
  106. package/dist/Steering.d.ts +161 -0
  107. package/dist/Steering.d.ts.map +1 -0
  108. package/dist/Steering.js +347 -0
  109. package/dist/Steering.js.map +1 -0
  110. package/dist/VehicleDynamics.d.ts +152 -0
  111. package/dist/VehicleDynamics.d.ts.map +1 -0
  112. package/dist/VehicleDynamics.js +335 -0
  113. package/dist/VehicleDynamics.js.map +1 -0
  114. package/dist/index.d.ts +29 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +29 -0
  117. package/dist/index.js.map +1 -0
  118. package/package.json +17 -0
  119. package/src/CharacterController.ts +184 -0
  120. package/src/ClothFixtures.ts +359 -0
  121. package/src/Collider.ts +67 -0
  122. package/src/CollisionEvents.ts +70 -0
  123. package/src/CollisionVolumes.ts +218 -0
  124. package/src/Constraint.ts +120 -0
  125. package/src/Constraints.ts +1 -0
  126. package/src/Crowd.ts +283 -0
  127. package/src/ECSPhysicsBridge.ts +53 -0
  128. package/src/FireSmokeFixtures.ts +382 -0
  129. package/src/FluidFixtures.ts +301 -0
  130. package/src/FractureFixtures.ts +277 -0
  131. package/src/HitboxWorld.ts +1179 -0
  132. package/src/KinematicBody.ts +553 -0
  133. package/src/KinematicWorld.ts +310 -0
  134. package/src/Navigation.ts +321 -0
  135. package/src/PhysicsDebugDraw.ts +71 -0
  136. package/src/PhysicsSandboxFixtures.ts +394 -0
  137. package/src/PhysicsStepper.ts +47 -0
  138. package/src/PhysicsWorld.ts +986 -0
  139. package/src/PlatformerFixtures.ts +205 -0
  140. package/src/Raycast.ts +315 -0
  141. package/src/RigidBody.ts +311 -0
  142. package/src/ScenePhysicsBridge.ts +207 -0
  143. package/src/Shape.ts +182 -0
  144. package/src/SoftBodyFixtures.ts +363 -0
  145. package/src/Steering.ts +531 -0
  146. package/src/VehicleDynamics.ts +524 -0
  147. package/src/index.ts +28 -0
@@ -0,0 +1,280 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicsSandboxFixtures.js","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsSandboxFixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { PhysicsWorld } from "./PhysicsWorld.js";
2
+ export type PhysicsStepperResult = {
3
+ readonly steps: number;
4
+ readonly alpha: number;
5
+ readonly droppedTime: number;
6
+ };
7
+ export declare class PhysicsStepper {
8
+ readonly fixedDelta: number;
9
+ readonly maxSubSteps: number;
10
+ private accumulator;
11
+ constructor(fixedDelta: number, maxSubSteps?: number);
12
+ advance(deltaSeconds: number, world: Pick<PhysicsWorld, "step">): PhysicsStepperResult;
13
+ reset(): void;
14
+ }
15
+ //# sourceMappingURL=PhysicsStepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicsStepper.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsStepper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,qBAAa,cAAc;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,WAAW,CAAK;gBAEZ,UAAU,EAAE,MAAM,EAAE,WAAW,SAAI;IAW/C,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,oBAAoB;IAmBtF,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,37 @@
1
+ export class PhysicsStepper {
2
+ fixedDelta;
3
+ maxSubSteps;
4
+ accumulator = 0;
5
+ constructor(fixedDelta, maxSubSteps = 5) {
6
+ if (!Number.isFinite(fixedDelta) || fixedDelta <= 0) {
7
+ throw new Error("fixedDelta must be a finite positive number.");
8
+ }
9
+ if (!Number.isInteger(maxSubSteps) || maxSubSteps <= 0) {
10
+ throw new Error("maxSubSteps must be a positive integer.");
11
+ }
12
+ this.fixedDelta = fixedDelta;
13
+ this.maxSubSteps = maxSubSteps;
14
+ }
15
+ advance(deltaSeconds, world) {
16
+ if (!Number.isFinite(deltaSeconds) || deltaSeconds < 0) {
17
+ throw new Error("deltaSeconds must be finite and non-negative.");
18
+ }
19
+ this.accumulator += deltaSeconds;
20
+ let steps = 0;
21
+ while (this.accumulator + 1e-12 >= this.fixedDelta && steps < this.maxSubSteps) {
22
+ world.step(this.fixedDelta);
23
+ this.accumulator -= this.fixedDelta;
24
+ steps += 1;
25
+ }
26
+ let droppedTime = 0;
27
+ if (this.accumulator >= this.fixedDelta) {
28
+ droppedTime = this.accumulator;
29
+ this.accumulator = 0;
30
+ }
31
+ return { steps, alpha: this.accumulator / this.fixedDelta, droppedTime };
32
+ }
33
+ reset() {
34
+ this.accumulator = 0;
35
+ }
36
+ }
37
+ //# sourceMappingURL=PhysicsStepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicsStepper.js","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsStepper.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,cAAc;IAChB,UAAU,CAAS;IACnB,WAAW,CAAS;IACrB,WAAW,GAAG,CAAC,CAAC;IAExB,YAAY,UAAkB,EAAE,WAAW,GAAG,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,YAAoB,EAAE,KAAiC;QAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,101 @@
1
+ import { Collider, type ColliderDescriptor } from "./Collider.js";
2
+ import { type CollisionEvent, type Contact } from "./CollisionEvents.js";
3
+ import { Constraint, type ConstraintDescriptor } from "./Constraint.js";
4
+ import { type RaycastHit, type RaycastOptions, type SphereCastHit } from "./Raycast.js";
5
+ import { RigidBody, type RigidBodyDescriptor, type RigidBodySnapshot } from "./RigidBody.js";
6
+ import { type Vec3 } from "./Shape.js";
7
+ export type PhysicsWorldDescriptor = {
8
+ readonly backend?: PhysicsBackendPreference;
9
+ readonly gravity?: Vec3;
10
+ readonly fixedDelta?: number;
11
+ readonly solverIterations?: number;
12
+ readonly enableSleeping?: boolean;
13
+ readonly sleepVelocityThreshold?: number;
14
+ readonly sleepDelay?: number;
15
+ };
16
+ export type PhysicsBackend = "cannon-es" | "aura-js";
17
+ export type PhysicsBackendPreference = PhysicsBackend | "auto";
18
+ export type PhysicsBackendSelection = {
19
+ readonly requested: PhysicsBackendPreference;
20
+ readonly active: PhysicsBackend;
21
+ readonly fallback?: string;
22
+ readonly deterministic: boolean;
23
+ readonly jsFallbackAvailable: boolean;
24
+ };
25
+ export type PhysicsStepStats = {
26
+ readonly steps: number;
27
+ readonly bodies: number;
28
+ readonly colliders: number;
29
+ readonly constraints: number;
30
+ readonly broadphasePairs: number;
31
+ readonly broadphaseFiniteColliders: number;
32
+ readonly broadphaseInfiniteColliders: number;
33
+ readonly broadphaseCandidateTests: number;
34
+ readonly broadphaseActiveMax: number;
35
+ readonly broadphaseRejectedByBounds: number;
36
+ readonly contacts: number;
37
+ readonly events: number;
38
+ readonly sleepingBodies: number;
39
+ readonly kineticEnergy: number;
40
+ readonly maxContactPenetration: number;
41
+ };
42
+ export type PhysicsSnapshot = {
43
+ readonly backend: PhysicsBackendSelection;
44
+ readonly bodies: readonly RigidBodySnapshot[];
45
+ readonly contacts: readonly Contact[];
46
+ readonly stats: PhysicsStepStats;
47
+ };
48
+ export declare class PhysicsWorld {
49
+ readonly gravity: [number, number, number];
50
+ readonly fixedDelta: number;
51
+ private readonly solverIterations;
52
+ private readonly enableSleeping;
53
+ private readonly sleepVelocityThreshold;
54
+ private readonly sleepDelay;
55
+ private readonly bodiesById;
56
+ private readonly collidersById;
57
+ private readonly constraintsList;
58
+ private readonly bodyColliders;
59
+ private readonly eventQueue;
60
+ private readonly requestedBackend;
61
+ private backendSelection;
62
+ private cannonWorld;
63
+ private readonly cannonBodiesByAuraId;
64
+ private nextBodyId;
65
+ private nextColliderId;
66
+ private lastEvents;
67
+ private lastBroadphasePairs;
68
+ private lastBroadphaseProfile;
69
+ private steps;
70
+ constructor(descriptor?: PhysicsWorldDescriptor);
71
+ createRigidBody(descriptor?: RigidBodyDescriptor): RigidBody;
72
+ createCollider(body: RigidBody | number, descriptor: ColliderDescriptor): Collider;
73
+ createConstraint(descriptor: ConstraintDescriptor): Constraint;
74
+ getBody(id: number): RigidBody | undefined;
75
+ getCollider(id: number): Collider | undefined;
76
+ bodies(): readonly RigidBody[];
77
+ colliders(): readonly Collider[];
78
+ private bodyValues;
79
+ private colliderValues;
80
+ constraints(): readonly Constraint[];
81
+ removeRigidBody(id: number): void;
82
+ removeCollider(id: number): void;
83
+ step(dt?: number): readonly CollisionEvent[];
84
+ drainEvents(): readonly CollisionEvent[];
85
+ raycast(origin: Vec3, direction: Vec3, options?: RaycastOptions): RaycastHit | undefined;
86
+ raycastAll(origin: Vec3, direction: Vec3, options?: RaycastOptions): readonly RaycastHit[];
87
+ sphereCast(origin: Vec3, radius: number, direction: Vec3, options?: RaycastOptions): SphereCastHit | undefined;
88
+ sphereCastAll(origin: Vec3, radius: number, direction: Vec3, options?: RaycastOptions): readonly SphereCastHit[];
89
+ snapshot(): PhysicsSnapshot;
90
+ private detectContacts;
91
+ private collectPotentialPairs;
92
+ private resolveContact;
93
+ private effectiveMaterial;
94
+ private applyImpulsePair;
95
+ private updateSleeping;
96
+ private createCannonBody;
97
+ private addCannonCollider;
98
+ private disableCannonBackend;
99
+ private stepCannon;
100
+ }
101
+ //# sourceMappingURL=PhysicsWorld.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicsWorld.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/PhysicsWorld.ts"],"names":[],"mappings":"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"}