@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
package/dist/Crowd.js ADDED
@@ -0,0 +1,209 @@
1
+ import { arriveSteering } from "./Steering.js";
2
+ export class CrowdSimulation {
3
+ agents = [];
4
+ neighborRadius;
5
+ maxNeighbors;
6
+ separationWeight;
7
+ alignmentWeight;
8
+ cohesionWeight;
9
+ formationWeight;
10
+ maxForce;
11
+ formation;
12
+ lastNeighbors = new Map();
13
+ lastSlots = new Map();
14
+ constructor(options = {}) {
15
+ this.neighborRadius = positive(options.neighborRadius ?? 0.55, "neighborRadius");
16
+ this.maxNeighbors = Math.max(1, Math.floor(options.maxNeighbors ?? 6));
17
+ this.separationWeight = nonNegative(options.separationWeight ?? 1.8, "separationWeight");
18
+ this.alignmentWeight = nonNegative(options.alignmentWeight ?? 0.55, "alignmentWeight");
19
+ this.cohesionWeight = nonNegative(options.cohesionWeight ?? 0.42, "cohesionWeight");
20
+ this.formationWeight = nonNegative(options.formationWeight ?? 0.85, "formationWeight");
21
+ this.maxForce = positive(options.maxForce ?? 1.2, "maxForce");
22
+ }
23
+ addAgent(options) {
24
+ if (this.agents.some((agent) => agent.id === options.id))
25
+ throw new Error(`Crowd agent already exists: ${options.id}`);
26
+ this.agents.push({
27
+ id: options.id,
28
+ position: options.position,
29
+ velocity: options.velocity ?? [0, 0],
30
+ radius: positive(options.radius ?? 0.1, "radius"),
31
+ maxSpeed: positive(options.maxSpeed ?? 0.65, "maxSpeed"),
32
+ priority: nonNegative(options.priority ?? 50, "priority")
33
+ });
34
+ }
35
+ removeAgent(id) {
36
+ const index = this.agents.findIndex((agent) => agent.id === id);
37
+ if (index < 0)
38
+ return false;
39
+ this.agents.splice(index, 1);
40
+ this.lastNeighbors.delete(id);
41
+ this.lastSlots.delete(id);
42
+ return true;
43
+ }
44
+ setFormation(options) {
45
+ this.formation = options;
46
+ }
47
+ update(deltaSeconds) {
48
+ const dt = Math.max(0, deltaSeconds);
49
+ const neighborsById = new Map(this.agents.map((agent) => [agent.id, this.neighborsFor(agent)]));
50
+ const slots = formationSlots(this.agents.length, this.formation);
51
+ this.lastNeighbors = neighborsById;
52
+ this.lastSlots = new Map(this.agents.map((agent, index) => [agent.id, slots[index] ?? agent.position]));
53
+ for (let index = 0; index < this.agents.length; index += 1) {
54
+ const agent = this.agents[index];
55
+ const neighbors = neighborsById.get(agent.id) ?? [];
56
+ const slot = slots[index] ?? agent.position;
57
+ const force = clampMagnitude(addMany([
58
+ scale(separationForce(agent, neighbors), this.separationWeight),
59
+ scale(alignmentForce(agent, neighbors), this.alignmentWeight),
60
+ scale(cohesionForce(agent, neighbors), this.cohesionWeight),
61
+ scale(formationForce(agent, slot), this.formationWeight)
62
+ ]), this.maxForce);
63
+ const priorityDamping = Math.max(0.35, Math.min(1, agent.priority / 100));
64
+ const velocity = clampMagnitude([
65
+ agent.velocity[0] + force[0] * dt * priorityDamping,
66
+ agent.velocity[1] + force[1] * dt * priorityDamping
67
+ ], agent.maxSpeed);
68
+ agent.velocity = velocity;
69
+ agent.position = [
70
+ round3(agent.position[0] + velocity[0] * dt),
71
+ round3(agent.position[1] + velocity[1] * dt)
72
+ ];
73
+ }
74
+ return this.snapshot();
75
+ }
76
+ snapshot() {
77
+ const agentSnapshots = this.agents.map((agent) => {
78
+ const neighbors = this.lastNeighbors.get(agent.id) ?? [];
79
+ return {
80
+ id: agent.id,
81
+ position: [round3(agent.position[0]), round3(agent.position[1])],
82
+ velocity: [round3(agent.velocity[0]), round3(agent.velocity[1])],
83
+ speed: round3(length(agent.velocity)),
84
+ neighborCount: neighbors.length,
85
+ formationSlot: this.lastSlots.get(agent.id) ?? agent.position
86
+ };
87
+ });
88
+ const neighborPairs = agentSnapshots.reduce((sum, agent) => sum + agent.neighborCount, 0) / 2;
89
+ const averageSpeed = agentSnapshots.length > 0
90
+ ? agentSnapshots.reduce((sum, agent) => sum + agent.speed, 0) / agentSnapshots.length
91
+ : 0;
92
+ return {
93
+ agentCount: agentSnapshots.length,
94
+ neighborPairs: round3(neighborPairs),
95
+ averageNeighbors: agentSnapshots.length > 0 ? round3((neighborPairs * 2) / agentSnapshots.length) : 0,
96
+ averageSpeed: round3(averageSpeed),
97
+ maxSpeed: round3(Math.max(0, ...agentSnapshots.map((agent) => agent.speed))),
98
+ formationType: this.formation?.type ?? "none",
99
+ center: centerOf(agentSnapshots.map((agent) => agent.position)),
100
+ agents: agentSnapshots
101
+ };
102
+ }
103
+ neighborsFor(agent) {
104
+ return this.agents
105
+ .filter((candidate) => candidate !== agent && distance(agent.position, candidate.position) <= this.neighborRadius)
106
+ .sort((left, right) => distance(agent.position, left.position) - distance(agent.position, right.position) || left.id.localeCompare(right.id))
107
+ .slice(0, this.maxNeighbors);
108
+ }
109
+ }
110
+ function separationForce(agent, neighbors) {
111
+ const contributions = neighbors.map((neighbor) => {
112
+ const away = subtract(agent.position, neighbor.position);
113
+ const gap = Math.max(0.001, length(away) - agent.radius - neighbor.radius);
114
+ return scale(normalize(away), 1 / gap);
115
+ });
116
+ return normalize(addMany(contributions));
117
+ }
118
+ function alignmentForce(agent, neighbors) {
119
+ if (neighbors.length === 0)
120
+ return [0, 0];
121
+ const average = scale(addMany(neighbors.map((neighbor) => neighbor.velocity)), 1 / neighbors.length);
122
+ return subtract(clampMagnitude(average, agent.maxSpeed), agent.velocity);
123
+ }
124
+ function cohesionForce(agent, neighbors) {
125
+ if (neighbors.length === 0)
126
+ return [0, 0];
127
+ const center = centerOf(neighbors.map((neighbor) => neighbor.position));
128
+ return arriveSteering({ position: agent.position, velocity: agent.velocity, target: center, maxSpeed: agent.maxSpeed, slowingRadius: 0.45 }).force;
129
+ }
130
+ function formationForce(agent, slot) {
131
+ return arriveSteering({ position: agent.position, velocity: agent.velocity, target: slot, maxSpeed: agent.maxSpeed, slowingRadius: 0.35, tolerance: 0.025 }).force;
132
+ }
133
+ function formationSlots(count, formation) {
134
+ if (!formation)
135
+ return [];
136
+ const spacing = formation.spacing ?? 0.24;
137
+ const forward = normalize(formation.forward ?? [1, 0]);
138
+ const right = [forward[1], -forward[0]];
139
+ return Array.from({ length: count }, (_, index) => {
140
+ switch (formation.type) {
141
+ case "line":
142
+ return offset(formation.center, right, (index - (count - 1) / 2) * spacing);
143
+ case "column":
144
+ return offset(formation.center, forward, -index * spacing);
145
+ case "circle": {
146
+ const angle = (Math.PI * 2 * index) / Math.max(1, count);
147
+ return [round3(formation.center[0] + Math.cos(angle) * spacing), round3(formation.center[1] + Math.sin(angle) * spacing)];
148
+ }
149
+ case "wedge": {
150
+ if (index === 0)
151
+ return formation.center;
152
+ const side = index % 2 === 0 ? 1 : -1;
153
+ const row = Math.ceil(index / 2);
154
+ return add(offset(formation.center, forward, -row * spacing), scale(right, side * row * spacing));
155
+ }
156
+ }
157
+ });
158
+ }
159
+ function offset(origin, direction, amount) {
160
+ return [round3(origin[0] + direction[0] * amount), round3(origin[1] + direction[1] * amount)];
161
+ }
162
+ function add(left, right) {
163
+ return [round3(left[0] + right[0]), round3(left[1] + right[1])];
164
+ }
165
+ function subtract(left, right) {
166
+ return [left[0] - right[0], left[1] - right[1]];
167
+ }
168
+ function scale(value, scalar) {
169
+ return [value[0] * scalar, value[1] * scalar];
170
+ }
171
+ function addMany(values) {
172
+ return values.reduce((sum, value) => [sum[0] + value[0], sum[1] + value[1]], [0, 0]);
173
+ }
174
+ function distance(left, right) {
175
+ return length(subtract(left, right));
176
+ }
177
+ function length(value) {
178
+ return Math.hypot(value[0], value[1]);
179
+ }
180
+ function normalize(value) {
181
+ const magnitude = length(value);
182
+ return magnitude === 0 ? [0, 0] : [value[0] / magnitude, value[1] / magnitude];
183
+ }
184
+ function clampMagnitude(value, maxMagnitude) {
185
+ const magnitude = length(value);
186
+ if (magnitude === 0 || magnitude <= maxMagnitude)
187
+ return value;
188
+ return scale(value, maxMagnitude / magnitude);
189
+ }
190
+ function centerOf(points) {
191
+ if (points.length === 0)
192
+ return [0, 0];
193
+ const sum = points.reduce((total, point) => [total[0] + point[0], total[1] + point[1]], [0, 0]);
194
+ return [round3(sum[0] / points.length), round3(sum[1] / points.length)];
195
+ }
196
+ function positive(value, name) {
197
+ if (!Number.isFinite(value) || value <= 0)
198
+ throw new RangeError(`Crowd ${name} must be a finite positive number.`);
199
+ return value;
200
+ }
201
+ function nonNegative(value, name) {
202
+ if (!Number.isFinite(value) || value < 0)
203
+ throw new RangeError(`Crowd ${name} must be a finite non-negative number.`);
204
+ return value;
205
+ }
206
+ function round3(value) {
207
+ return Number(value.toFixed(3));
208
+ }
209
+ //# sourceMappingURL=Crowd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Crowd.js","sourceRoot":"","sources":["../../../../packages/physics/src/Crowd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2C,MAAM,YAAY,CAAC;AA2DrF,MAAM,OAAO,eAAe;IACT,MAAM,GAAsB,EAAE,CAAC;IAC/B,cAAc,CAAS;IACvB,YAAY,CAAS;IACrB,gBAAgB,CAAS;IACzB,eAAe,CAAS;IACxB,cAAc,CAAS;IACvB,eAAe,CAAS;IACxB,QAAQ,CAAS;IAC1B,SAAS,CAAoC;IAC7C,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC9D,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAErD,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACzF,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACpF,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACvF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,OAA0B;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,QAAQ,CAAC;YACjD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC;YACxD,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,OAA0C;QACrD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,YAAoB;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAExG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;YAClC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC;YAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC;gBACnC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAC/D,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC7D,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC;gBAC3D,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;aACzD,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,cAAc,CAAC;gBAC9B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,eAAe;gBACnD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,eAAe;aACpD,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC1B,KAAK,CAAC,QAAQ,GAAG;gBACf,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aAC7C,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACzD,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAU;gBACzE,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAU;gBACzE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrC,aAAa,EAAE,SAAS,CAAC,MAAM;gBAC/B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ;aAC9D,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9F,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;YACrF,CAAC,CAAC,CAAC,CAAC;QACN,OAAO;YACL,UAAU,EAAE,cAAc,CAAC,MAAM;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;YACpC,gBAAgB,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrG,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,MAAM;YAC7C,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,EAAE,cAAc;SACvB,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,KAAsB;QACzC,OAAO,IAAI,CAAC,MAAM;aACf,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;aACjH,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC5I,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;CACF;AAED,SAAS,eAAe,CAAC,KAAsB,EAAE,SAAqC;IACpF,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB,EAAE,SAAqC;IACnF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACrG,OAAO,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,KAAsB,EAAE,SAAqC;IAClF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,OAAO,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AACrJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB,EAAE,IAAmB;IACjE,OAAO,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;AACrK,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAA4C;IACjF,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAChD,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;YAC9E,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;YAC7D,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAC5H,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,KAAK,KAAK,CAAC;oBAAE,OAAO,SAAS,CAAC,MAAM,CAAC;gBACzC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,MAAqB,EAAE,SAAyB,EAAE,MAAc;IAC9E,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,GAAG,CAAC,IAAmB,EAAE,KAAqB;IACrD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmB,EAAE,KAAoB;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,KAAK,CAAC,KAAqB,EAAE,MAAc;IAClD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,OAAO,CAAC,MAAiC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmB,EAAE,KAAoB;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,MAAM,CAAC,KAAqB;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,KAAqB;IACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB,EAAE,YAAoB;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,IAAI,YAAY;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAgC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChH,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAY;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,SAAS,IAAI,oCAAoC,CAAC,CAAC;IACnH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,IAAY;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,SAAS,IAAI,wCAAwC,CAAC,CAAC;IACtH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { PhysicsWorld } from "./PhysicsWorld.js";
2
+ export type ECSTransformLike = {
3
+ position: [number, number, number];
4
+ };
5
+ export type ECSPhysicsBinding = {
6
+ readonly bodyId: number;
7
+ readonly transform: ECSTransformLike;
8
+ readonly mode?: "dynamic" | "kinematic";
9
+ };
10
+ export declare class ECSPhysicsBridge {
11
+ private readonly bindings;
12
+ bind(binding: ECSPhysicsBinding): void;
13
+ unbind(bodyId: number): void;
14
+ pushKinematic(world: Pick<PhysicsWorld, "getBody">): void;
15
+ pullDynamic(world: Pick<PhysicsWorld, "getBody">, alpha?: number): void;
16
+ }
17
+ //# sourceMappingURL=ECSPhysicsBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSPhysicsBridge.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/ECSPhysicsBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACzC,CAAC;AAEF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAEjE,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAOtC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI;IASzD,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,KAAK,SAAI,GAAG,IAAI;CAenE"}
@@ -0,0 +1,37 @@
1
+ import { interpolatePosition } from "./ScenePhysicsBridge.js";
2
+ export class ECSPhysicsBridge {
3
+ bindings = new Map();
4
+ bind(binding) {
5
+ if (this.bindings.has(binding.bodyId)) {
6
+ throw new Error(`Body ${binding.bodyId} is already bound to an ECS transform.`);
7
+ }
8
+ this.bindings.set(binding.bodyId, binding);
9
+ }
10
+ unbind(bodyId) {
11
+ this.bindings.delete(bodyId);
12
+ }
13
+ pushKinematic(world) {
14
+ for (const binding of this.bindings.values()) {
15
+ if (binding.mode !== "kinematic") {
16
+ continue;
17
+ }
18
+ world.getBody(binding.bodyId)?.setPosition(binding.transform.position);
19
+ }
20
+ }
21
+ pullDynamic(world, alpha = 1) {
22
+ for (const binding of this.bindings.values()) {
23
+ if (binding.mode === "kinematic") {
24
+ continue;
25
+ }
26
+ const body = world.getBody(binding.bodyId);
27
+ if (!body) {
28
+ continue;
29
+ }
30
+ const interpolated = interpolatePosition(body.previousPosition, body.position, alpha);
31
+ binding.transform.position[0] = interpolated[0];
32
+ binding.transform.position[1] = interpolated[1];
33
+ binding.transform.position[2] = interpolated[2];
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=ECSPhysicsBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSPhysicsBridge.js","sourceRoot":"","sources":["../../../../packages/physics/src/ECSPhysicsBridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAa9D,MAAM,OAAO,gBAAgB;IACV,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEjE,IAAI,CAAC,OAA0B;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,CAAC,MAAM,wCAAwC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,KAAoC;QAChD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAoC,EAAE,KAAK,GAAG,CAAC;QACzD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtF,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,103 @@
1
+ export interface FireSmokeFixtureOptions {
2
+ readonly seed?: number;
3
+ readonly gridResolution?: readonly [number, number, number];
4
+ readonly elapsedSeconds?: number;
5
+ readonly sourceCount?: number;
6
+ }
7
+ export interface FireSmokeFixture {
8
+ readonly id: "external-parity-old-branch-fire-smoke-fixture";
9
+ readonly source: "origin-master-fire-smoke-volume-adapted";
10
+ readonly sourceFiles: readonly [
11
+ "origin/master:src/simulation/fire/FireSimulation.ts",
12
+ "origin/master:src/simulation/fire/FireParticleSystem.ts",
13
+ "origin/master:src/simulation/fire/TemperatureField.ts",
14
+ "origin/master:src/simulation/fire/TurbulenceSimulation.ts",
15
+ "origin/master:src/simulation/smoke/SmokeSimulation.ts",
16
+ "origin/master:src/simulation/smoke/SmokeGrid.ts",
17
+ "origin/master:src/simulation/smoke/SmokeRenderer.ts"
18
+ ];
19
+ readonly config: {
20
+ readonly solver: "bounded-fire-smoke-telemetry";
21
+ readonly ambientTemperature: number;
22
+ readonly combustionTemperature: number;
23
+ readonly ignitionTemperature: number;
24
+ readonly fuelConsumptionRate: number;
25
+ readonly buoyancyStrength: number;
26
+ readonly turbulenceStrength: number;
27
+ readonly smokeGenerationRate: number;
28
+ readonly coolingRate: number;
29
+ readonly diffusionRate: number;
30
+ readonly smokePressureIterations: number;
31
+ readonly vorticityStrength: number;
32
+ readonly smokeDissipationRate: number;
33
+ readonly particleEmissionRate: number;
34
+ readonly particleLifetime: number;
35
+ readonly maxParticles: number;
36
+ readonly rayMarchMaxSteps: number;
37
+ readonly rayMarchStepSize: number;
38
+ };
39
+ readonly grid: {
40
+ readonly resolution: readonly [number, number, number];
41
+ readonly cellCount: number;
42
+ readonly sourceCount: number;
43
+ readonly hotCellSamples: readonly FireSmokeHotCellSample[];
44
+ };
45
+ readonly fire: {
46
+ readonly activeFuelCells: number;
47
+ readonly burningCells: number;
48
+ readonly averageTemperature: number;
49
+ readonly maxTemperature: number;
50
+ readonly fuelConsumed: number;
51
+ readonly smokeGenerated: number;
52
+ readonly buoyancyImpulse: number;
53
+ readonly turbulenceEnergy: number;
54
+ readonly coolingLoss: number;
55
+ readonly diffusionEstimate: number;
56
+ };
57
+ readonly particles: {
58
+ readonly emittedParticles: number;
59
+ readonly activeParticles: number;
60
+ readonly emberParticles: number;
61
+ readonly averageLifetime: number;
62
+ readonly averageSize: number;
63
+ readonly maxTemperature: number;
64
+ readonly uploadBytes: number;
65
+ };
66
+ readonly smoke: {
67
+ readonly densityCells: number;
68
+ readonly totalDensity: number;
69
+ readonly maxDensity: number;
70
+ readonly averageVelocityMagnitude: number;
71
+ readonly divergenceBeforeProjection: number;
72
+ readonly divergenceAfterProjection: number;
73
+ readonly pressureIterations: number;
74
+ readonly vorticityCells: number;
75
+ readonly buoyancyForceEstimate: number;
76
+ readonly dissipationLoss: number;
77
+ };
78
+ readonly volumeRendering: {
79
+ readonly rayMarchSteps: number;
80
+ readonly stepSize: number;
81
+ readonly sampledDensity: number;
82
+ readonly transmittance: number;
83
+ readonly scattering: number;
84
+ readonly shadowSamples: number;
85
+ readonly shadowTransmittance: number;
86
+ readonly alpha: number;
87
+ readonly volumetricRendererClaimed: false;
88
+ readonly productionLightingClaimed: false;
89
+ };
90
+ readonly blockedClaims: readonly string[];
91
+ readonly hash: string;
92
+ readonly claimBoundary: string;
93
+ }
94
+ export interface FireSmokeHotCellSample {
95
+ readonly index: number;
96
+ readonly cell: readonly [number, number, number];
97
+ readonly temperature: number;
98
+ readonly fuel: number;
99
+ readonly smokeDensity: number;
100
+ readonly velocity: readonly [number, number, number];
101
+ }
102
+ export declare function sampleFireSmokeFixture(options?: FireSmokeFixtureOptions): FireSmokeFixture;
103
+ //# sourceMappingURL=FireSmokeFixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FireSmokeFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/FireSmokeFixtures.ts"],"names":[],"mappings":"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"}