@nodetool-ai/game-renderer 0.8.4-a24.2 → 0.8.4

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 (175) hide show
  1. package/README.md +13 -0
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/audio/player.d.ts +1 -0
  4. package/dist/audio/player.d.ts.map +1 -1
  5. package/dist/audio/player.js +13 -2
  6. package/dist/audio/player.js.map +1 -1
  7. package/dist/build-fingerprint.d.ts +3 -0
  8. package/dist/build-fingerprint.d.ts.map +1 -0
  9. package/dist/build-fingerprint.js +9 -0
  10. package/dist/build-fingerprint.js.map +1 -0
  11. package/dist/build-tauri.d.ts +3 -1
  12. package/dist/build-tauri.d.ts.map +1 -1
  13. package/dist/build-tauri.js +54 -8
  14. package/dist/build-tauri.js.map +1 -1
  15. package/dist/build.d.ts +4 -1
  16. package/dist/build.d.ts.map +1 -1
  17. package/dist/build.js +24 -11
  18. package/dist/build.js.map +1 -1
  19. package/dist/build3d.d.ts +2 -0
  20. package/dist/build3d.d.ts.map +1 -1
  21. package/dist/build3d.js +21 -6
  22. package/dist/build3d.js.map +1 -1
  23. package/dist/canvas2d.d.ts +1 -0
  24. package/dist/canvas2d.d.ts.map +1 -1
  25. package/dist/canvas2d.js +15 -10
  26. package/dist/canvas2d.js.map +1 -1
  27. package/dist/export-media.d.ts +7 -0
  28. package/dist/export-media.d.ts.map +1 -0
  29. package/dist/export-media.js +73 -0
  30. package/dist/export-media.js.map +1 -0
  31. package/dist/frame.d.ts +5 -0
  32. package/dist/frame.d.ts.map +1 -1
  33. package/dist/frame.js +7 -1
  34. package/dist/frame.js.map +1 -1
  35. package/dist/game3d-capture-page.js +306 -276
  36. package/dist/game3d-player.js +399 -350
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/lighting.d.ts.map +1 -1
  42. package/dist/lighting.js +4 -3
  43. package/dist/lighting.js.map +1 -1
  44. package/dist/mouse-input.d.ts +18 -0
  45. package/dist/mouse-input.d.ts.map +1 -0
  46. package/dist/mouse-input.js +135 -0
  47. package/dist/mouse-input.js.map +1 -0
  48. package/dist/node.d.ts.map +1 -1
  49. package/dist/node.js +2 -2
  50. package/dist/node.js.map +1 -1
  51. package/dist/node3d.d.ts.map +1 -1
  52. package/dist/node3d.js +5 -3
  53. package/dist/node3d.js.map +1 -1
  54. package/dist/particles/particles3d.d.ts +12 -10
  55. package/dist/particles/particles3d.d.ts.map +1 -1
  56. package/dist/particles/particles3d.js +81 -60
  57. package/dist/particles/particles3d.js.map +1 -1
  58. package/dist/particles/pass3d.d.ts +6 -4
  59. package/dist/particles/pass3d.d.ts.map +1 -1
  60. package/dist/particles/pass3d.js +28 -15
  61. package/dist/particles/pass3d.js.map +1 -1
  62. package/dist/particles/render2d.d.ts +3 -2
  63. package/dist/particles/render2d.d.ts.map +1 -1
  64. package/dist/particles/render2d.js +9 -2
  65. package/dist/particles/render2d.js.map +1 -1
  66. package/dist/particles/simulator.d.ts +13 -1
  67. package/dist/particles/simulator.d.ts.map +1 -1
  68. package/dist/particles/simulator.js +173 -44
  69. package/dist/particles/simulator.js.map +1 -1
  70. package/dist/particles/transparency3d.d.ts +17 -0
  71. package/dist/particles/transparency3d.d.ts.map +1 -0
  72. package/dist/particles/transparency3d.js +117 -0
  73. package/dist/particles/transparency3d.js.map +1 -0
  74. package/dist/player-v1.js +275 -256
  75. package/dist/renderer3d/animation/index.d.ts +2 -0
  76. package/dist/renderer3d/animation/index.d.ts.map +1 -1
  77. package/dist/renderer3d/animation/index.js +24 -10
  78. package/dist/renderer3d/animation/index.js.map +1 -1
  79. package/dist/renderer3d/assets/image-preparation.d.ts +9 -0
  80. package/dist/renderer3d/assets/image-preparation.d.ts.map +1 -1
  81. package/dist/renderer3d/assets/image-preparation.js +14 -4
  82. package/dist/renderer3d/assets/image-preparation.js.map +1 -1
  83. package/dist/renderer3d/assets/instances.d.ts.map +1 -1
  84. package/dist/renderer3d/assets/instances.js +38 -1
  85. package/dist/renderer3d/assets/instances.js.map +1 -1
  86. package/dist/renderer3d/decals/geometry.d.ts +27 -0
  87. package/dist/renderer3d/decals/geometry.d.ts.map +1 -0
  88. package/dist/renderer3d/decals/geometry.js +142 -0
  89. package/dist/renderer3d/decals/geometry.js.map +1 -0
  90. package/dist/renderer3d/decals/index.d.ts +29 -0
  91. package/dist/renderer3d/decals/index.d.ts.map +1 -0
  92. package/dist/renderer3d/decals/index.js +284 -0
  93. package/dist/renderer3d/decals/index.js.map +1 -0
  94. package/dist/renderer3d/environment/height-fog.d.ts +14 -0
  95. package/dist/renderer3d/environment/height-fog.d.ts.map +1 -0
  96. package/dist/renderer3d/environment/height-fog.js +114 -0
  97. package/dist/renderer3d/environment/height-fog.js.map +1 -0
  98. package/dist/renderer3d/environment/index.d.ts.map +1 -1
  99. package/dist/renderer3d/environment/index.js +4 -1
  100. package/dist/renderer3d/environment/index.js.map +1 -1
  101. package/dist/renderer3d/environment/sky.d.ts +1 -0
  102. package/dist/renderer3d/environment/sky.d.ts.map +1 -1
  103. package/dist/renderer3d/environment/sky.js +33 -16
  104. package/dist/renderer3d/environment/sky.js.map +1 -1
  105. package/dist/renderer3d/import.d.ts.map +1 -1
  106. package/dist/renderer3d/import.js +19 -3
  107. package/dist/renderer3d/import.js.map +1 -1
  108. package/dist/renderer3d/index.d.ts.map +1 -1
  109. package/dist/renderer3d/index.js +27 -4
  110. package/dist/renderer3d/index.js.map +1 -1
  111. package/dist/renderer3d/material-hooks.d.ts +8 -0
  112. package/dist/renderer3d/material-hooks.d.ts.map +1 -0
  113. package/dist/renderer3d/material-hooks.js +53 -0
  114. package/dist/renderer3d/material-hooks.js.map +1 -0
  115. package/dist/renderer3d/pipeline.d.ts +1 -0
  116. package/dist/renderer3d/pipeline.d.ts.map +1 -1
  117. package/dist/renderer3d/pipeline.js.map +1 -1
  118. package/dist/renderer3d/preparation.d.ts +1 -0
  119. package/dist/renderer3d/preparation.d.ts.map +1 -1
  120. package/dist/renderer3d/preparation.js +37 -4
  121. package/dist/renderer3d/preparation.js.map +1 -1
  122. package/dist/renderer3d/scene-sync.d.ts.map +1 -1
  123. package/dist/renderer3d/scene-sync.js +16 -1
  124. package/dist/renderer3d/scene-sync.js.map +1 -1
  125. package/dist/renderer3d/shadows/cascades.d.ts +2 -1
  126. package/dist/renderer3d/shadows/cascades.d.ts.map +1 -1
  127. package/dist/renderer3d/shadows/cascades.js +19 -37
  128. package/dist/renderer3d/shadows/cascades.js.map +1 -1
  129. package/dist/renderer3d/shadows/index.d.ts +1 -0
  130. package/dist/renderer3d/shadows/index.d.ts.map +1 -1
  131. package/dist/renderer3d/shadows/index.js +3 -2
  132. package/dist/renderer3d/shadows/index.js.map +1 -1
  133. package/dist/renderer3d/types.d.ts +1 -0
  134. package/dist/renderer3d/types.d.ts.map +1 -1
  135. package/dist/save-storage.d.ts.map +1 -1
  136. package/dist/save-storage.js +23 -7
  137. package/dist/save-storage.js.map +1 -1
  138. package/dist/smoke.d.ts.map +1 -1
  139. package/dist/smoke.js +27 -12
  140. package/dist/smoke.js.map +1 -1
  141. package/dist/standalone-assets.d.ts +25 -0
  142. package/dist/standalone-assets.d.ts.map +1 -0
  143. package/dist/standalone-assets.js +111 -0
  144. package/dist/standalone-assets.js.map +1 -0
  145. package/dist/standalone-frame.d.ts +7 -0
  146. package/dist/standalone-frame.d.ts.map +1 -0
  147. package/dist/standalone-frame.js +2 -0
  148. package/dist/standalone-frame.js.map +1 -0
  149. package/dist/standalone-player.d.ts +3 -2
  150. package/dist/standalone-player.d.ts.map +1 -1
  151. package/dist/standalone-player.js +246 -76
  152. package/dist/standalone-player.js.map +1 -1
  153. package/dist/standalone-player3d.d.ts +4 -3
  154. package/dist/standalone-player3d.d.ts.map +1 -1
  155. package/dist/standalone-player3d.js +193 -115
  156. package/dist/standalone-player3d.js.map +1 -1
  157. package/dist/touch-controls.d.ts +10 -1
  158. package/dist/touch-controls.d.ts.map +1 -1
  159. package/dist/touch-controls.js +98 -10
  160. package/dist/touch-controls.js.map +1 -1
  161. package/dist/touch-input.d.ts +13 -0
  162. package/dist/touch-input.d.ts.map +1 -0
  163. package/dist/touch-input.js +71 -0
  164. package/dist/touch-input.js.map +1 -0
  165. package/dist/ui/controller.d.ts +7 -0
  166. package/dist/ui/controller.d.ts.map +1 -1
  167. package/dist/ui/controller.js +40 -9
  168. package/dist/ui/controller.js.map +1 -1
  169. package/dist/webgpu/lighting.d.ts +1 -1
  170. package/dist/webgpu/lighting.d.ts.map +1 -1
  171. package/dist/webgpu/lighting.js +4 -3
  172. package/dist/webgpu/lighting.js.map +1 -1
  173. package/dist/webgpu.js +1 -1
  174. package/dist/webgpu.js.map +1 -1
  175. package/package.json +5 -5
@@ -55,11 +55,18 @@ export declare class ParticleSimulator {
55
55
  /** Emitter ids of each entity in the last sync, in document order. */
56
56
  private readonly emitterOrder;
57
57
  private total;
58
+ private data;
59
+ private next;
60
+ private previous;
61
+ private free;
62
+ private freeCount;
58
63
  private readonly sample;
59
64
  private readonly color;
60
65
  constructor(options: ParticleSimulatorOptions);
61
66
  /** Live particles across every emitter. */
62
67
  get count(): number;
68
+ /** Particle slots reserved by typed-array storage, including unused capacity. */
69
+ get allocatedParticleCapacity(): number;
63
70
  /** Live particles of one emitter. */
64
71
  countOf(entityId: string, emitterId: string): number;
65
72
  /**
@@ -77,9 +84,14 @@ export declare class ParticleSimulator {
77
84
  */
78
85
  step(seconds: number): void;
79
86
  /** Visits every live particle in world space. */
80
- forEachParticle(visit: (particle: Readonly<ParticleView>) => void): void;
87
+ forEachParticle(visit: (particle: Readonly<ParticleView>) => void, interpolation?: number): void;
81
88
  /** Removes every emitter and particle. */
82
89
  clear(): void;
90
+ /** Marks the death chains reachable from live world particles before collecting detached definitions. */
91
+ private collectDetached;
92
+ private allocate;
93
+ /** Swap-removes the last particle's payload, preserving the original per-emitter iteration order. */
94
+ private remove;
83
95
  private findInstance;
84
96
  private advance;
85
97
  /** Emits the rate and bursts that fall in [time, time + dt), wrapping looping cycles, plus pending counts. */
@@ -1 +1 @@
1
- {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/particles/simulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/particles/simulator.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@ import { sampleParticleShape } from "./shapes.js";
4
4
  export const DEFAULT_MAX_SCENE_PARTICLES = 8192;
5
5
  /** Longest interval one `step` simulates, so a long pause cannot turn into thousands of emission cycles. */
6
6
  export const MAX_PARTICLE_STEP_SECONDS = 0.25;
7
- const STRIDE = 14;
7
+ const STRIDE = 19;
8
8
  const PX = 0, PY = 1, PZ = 2, VX = 3, VY = 4, VZ = 5, AGE = 6, LIFE = 7, SIZE = 8, ROT = 9, SPIN = 10, CR = 11, CG = 12, CB = 13;
9
+ const PREVIOUS_X = 14, PREVIOUS_Y = 15, PREVIOUS_Z = 16, PREVIOUS_ROTATION = 17, PREVIOUS_AGE = 18;
9
10
  const SAME_TIME = 1e-9;
10
11
  const IDENTITY = [0, 0, 0, 1];
11
12
  /**
@@ -19,6 +20,11 @@ export class ParticleSimulator {
19
20
  /** Emitter ids of each entity in the last sync, in document order. */
20
21
  emitterOrder = new Map();
21
22
  total = 0;
23
+ data = new Float64Array(0);
24
+ next = new Int32Array(0);
25
+ previous = new Int32Array(0);
26
+ free = new Int32Array(0);
27
+ freeCount = 0;
22
28
  sample = { px: 0, py: 0, pz: 0, dx: 0, dy: 1, dz: 0 };
23
29
  color = { r: 0, g: 0, b: 0 };
24
30
  constructor(options) {
@@ -29,6 +35,10 @@ export class ParticleSimulator {
29
35
  get count() {
30
36
  return this.total;
31
37
  }
38
+ /** Particle slots reserved by typed-array storage, including unused capacity. */
39
+ get allocatedParticleCapacity() {
40
+ return this.data.length / STRIDE;
41
+ }
32
42
  /** Live particles of one emitter. */
33
43
  countOf(entityId, emitterId) {
34
44
  return this.instances.get(instanceKey(entityId, emitterId))?.count ?? 0;
@@ -52,7 +62,8 @@ export class ParticleSimulator {
52
62
  entityId: source.entityId,
53
63
  definition,
54
64
  random: new ParticleRandom(particleSeed(source.entityId, definition.id)),
55
- data: new Float64Array(definition.maxParticles * STRIDE),
65
+ head: -1,
66
+ tail: -1,
56
67
  count: 0,
57
68
  time: 0,
58
69
  playing: definition.playOnStart,
@@ -60,30 +71,24 @@ export class ParticleSimulator {
60
71
  pending: 0,
61
72
  attached: true,
62
73
  position: source.position,
63
- rotation: source.rotation
74
+ rotation: source.rotation,
75
+ previousPosition: source.position,
76
+ previousRotation: source.rotation
64
77
  };
65
78
  this.instances.set(key, instance);
66
79
  }
67
- if (definition.maxParticles !== instance.definition.maxParticles) {
68
- const data = new Float64Array(definition.maxParticles * STRIDE);
69
- const kept = Math.min(instance.count, definition.maxParticles);
70
- data.set(instance.data.subarray(0, kept * STRIDE));
71
- this.total -= instance.count - kept;
72
- instance.data = data;
73
- instance.count = kept;
80
+ while (instance.count > definition.maxParticles) {
81
+ this.remove(instance, instance.tail);
74
82
  }
75
83
  instance.definition = definition;
84
+ instance.previousPosition = instance.position;
85
+ instance.previousRotation = instance.rotation;
76
86
  instance.position = source.position;
77
87
  instance.rotation = source.rotation;
78
88
  instance.attached = true;
79
89
  }
80
90
  }
81
- for (const [key, instance] of this.instances) {
82
- if (!instance.attached && (instance.definition.space === "local" || instance.count === 0)) {
83
- this.total -= instance.count;
84
- this.instances.delete(key);
85
- }
86
- }
91
+ this.collectDetached();
87
92
  }
88
93
  /** Applies `particles` presentation events from a session. Other event kinds are ignored. */
89
94
  emit(events) {
@@ -133,43 +138,46 @@ export class ParticleSimulator {
133
138
  this.schedule(instance, dt);
134
139
  }
135
140
  }
136
- for (const [key, instance] of this.instances) {
137
- if (!instance.attached && instance.count === 0) {
138
- this.instances.delete(key);
139
- }
140
- }
141
+ this.collectDetached();
141
142
  }
142
143
  /** Visits every live particle in world space. */
143
- forEachParticle(visit) {
144
+ forEachParticle(visit, interpolation = 1) {
145
+ const alpha = Math.max(0, Math.min(1, interpolation));
144
146
  for (const instance of this.instances.values()) {
145
147
  const definition = instance.definition;
146
- const data = instance.data;
148
+ const data = this.data;
149
+ const position = { x: mix(instance.previousPosition.x, instance.position.x, alpha),
150
+ y: mix(instance.previousPosition.y, instance.position.y, alpha), z: mix(instance.previousPosition.z, instance.position.z, alpha) };
151
+ const rotation = interpolateRotation(instance.previousRotation, instance.rotation, alpha);
147
152
  const view = { entityId: instance.entityId, emitterId: definition.id, emitter: definition,
148
153
  x: 0, y: 0, z: 0, vx: 0, vy: 0, vz: 0, size: 0, rotation: 0, r: 0, g: 0, b: 0, opacity: 0, life: 0 };
149
- for (let index = 0; index < instance.count; index += 1) {
150
- const base = index * STRIDE;
151
- const life = Math.min(1, data[base + AGE] / data[base + LIFE]);
154
+ for (let slot = instance.head; slot !== -1; slot = this.next[slot]) {
155
+ const base = slot * STRIDE;
156
+ const life = Math.min(1, mix(data[base + PREVIOUS_AGE], data[base + AGE], alpha) / data[base + LIFE]);
152
157
  const speed = definition.speedOverLifetime ? evaluateParticleCurve(definition.speedOverLifetime, life) : 1;
158
+ const x = mix(data[base + PREVIOUS_X], data[base + PX], alpha);
159
+ const y = mix(data[base + PREVIOUS_Y], data[base + PY], alpha);
160
+ const z = mix(data[base + PREVIOUS_Z], data[base + PZ], alpha);
153
161
  if (definition.space === "local") {
154
- const point = transformPoint(instance.rotation, instance.position, data[base + PX], data[base + PY], data[base + PZ]);
162
+ const point = transformPoint(rotation, position, x, y, z);
155
163
  view.x = point.x;
156
164
  view.y = point.y;
157
165
  view.z = point.z;
158
- const velocity = rotate(instance.rotation, data[base + VX] * speed, data[base + VY] * speed, data[base + VZ] * speed);
166
+ const velocity = rotate(rotation, data[base + VX] * speed, data[base + VY] * speed, data[base + VZ] * speed);
159
167
  view.vx = velocity.x;
160
168
  view.vy = velocity.y;
161
169
  view.vz = velocity.z;
162
170
  }
163
171
  else {
164
- view.x = data[base + PX];
165
- view.y = data[base + PY];
166
- view.z = data[base + PZ];
172
+ view.x = x;
173
+ view.y = y;
174
+ view.z = z;
167
175
  view.vx = data[base + VX] * speed;
168
176
  view.vy = data[base + VY] * speed;
169
177
  view.vz = data[base + VZ] * speed;
170
178
  }
171
179
  view.size = data[base + SIZE] * (definition.sizeOverLifetime ? evaluateParticleCurve(definition.sizeOverLifetime, life) : 1);
172
- view.rotation = data[base + ROT];
180
+ view.rotation = mix(data[base + PREVIOUS_ROTATION], data[base + ROT], alpha);
173
181
  view.r = data[base + CR];
174
182
  view.g = data[base + CG];
175
183
  view.b = data[base + CB];
@@ -190,6 +198,80 @@ export class ParticleSimulator {
190
198
  this.instances.clear();
191
199
  this.emitterOrder.clear();
192
200
  this.total = 0;
201
+ this.data = new Float64Array(0);
202
+ this.next = new Int32Array(0);
203
+ this.previous = new Int32Array(0);
204
+ this.free = new Int32Array(0);
205
+ this.freeCount = 0;
206
+ }
207
+ /** Marks the death chains reachable from live world particles before collecting detached definitions. */
208
+ collectDetached() {
209
+ const retained = new Set();
210
+ const pending = [];
211
+ for (const instance of this.instances.values()) {
212
+ if (instance.attached || (instance.definition.space === "world" && instance.count > 0)) {
213
+ retained.add(instance);
214
+ pending.push(instance);
215
+ }
216
+ }
217
+ for (let index = 0; index < pending.length; index += 1) {
218
+ const instance = pending[index];
219
+ for (const death of instance.definition.onDeath) {
220
+ const child = this.instances.get(instanceKey(instance.entityId, death.emitter));
221
+ if (child && child.definition.space === "world" && !retained.has(child)) {
222
+ retained.add(child);
223
+ pending.push(child);
224
+ }
225
+ }
226
+ }
227
+ for (const [key, instance] of this.instances) {
228
+ if (!retained.has(instance)) {
229
+ while (instance.count > 0) {
230
+ this.remove(instance, instance.tail);
231
+ }
232
+ this.instances.delete(key);
233
+ }
234
+ }
235
+ }
236
+ allocate() {
237
+ if (this.freeCount === 0) {
238
+ const oldCapacity = this.allocatedParticleCapacity;
239
+ const capacity = Math.min(this.maxSceneParticles, Math.max(1, oldCapacity * 2));
240
+ if (capacity <= oldCapacity) {
241
+ throw new Error("Particle storage exhausted");
242
+ }
243
+ const data = new Float64Array(capacity * STRIDE);
244
+ data.set(this.data);
245
+ this.data = data;
246
+ const next = new Int32Array(capacity);
247
+ next.set(this.next);
248
+ this.next = next;
249
+ const previous = new Int32Array(capacity);
250
+ previous.set(this.previous);
251
+ this.previous = previous;
252
+ this.free = new Int32Array(capacity);
253
+ for (let slot = capacity - 1; slot >= oldCapacity; slot -= 1) {
254
+ this.free[this.freeCount++] = slot;
255
+ }
256
+ }
257
+ return this.free[--this.freeCount];
258
+ }
259
+ /** Swap-removes the last particle's payload, preserving the original per-emitter iteration order. */
260
+ remove(instance, slot) {
261
+ const tail = instance.tail;
262
+ if (slot !== tail) {
263
+ this.data.copyWithin(slot * STRIDE, tail * STRIDE, (tail + 1) * STRIDE);
264
+ }
265
+ instance.tail = this.previous[tail];
266
+ if (instance.tail === -1) {
267
+ instance.head = -1;
268
+ }
269
+ else {
270
+ this.next[instance.tail] = -1;
271
+ }
272
+ this.free[this.freeCount++] = tail;
273
+ instance.count -= 1;
274
+ this.total -= 1;
193
275
  }
194
276
  findInstance(entityId, emitterId) {
195
277
  if (emitterId !== undefined) {
@@ -201,13 +283,13 @@ export class ParticleSimulator {
201
283
  }
202
284
  advance(instance, dt, deaths) {
203
285
  const definition = instance.definition;
204
- const data = instance.data;
286
+ const data = this.data;
205
287
  const flat = this.dimension === "2d";
206
288
  const gx = definition.gravity.x, gy = definition.gravity.y, gz = flat ? 0 : definition.gravity.z;
207
289
  const damping = definition.drag > 0 ? 1 / (1 + definition.drag * dt) : 1;
208
- let index = 0;
209
- while (index < instance.count) {
210
- const base = index * STRIDE;
290
+ let slot = instance.head;
291
+ while (slot !== -1) {
292
+ const base = slot * STRIDE;
211
293
  const age = data[base + AGE] + dt;
212
294
  if (age >= data[base + LIFE]) {
213
295
  if (definition.onDeath.length > 0) {
@@ -218,14 +300,18 @@ export class ParticleSimulator {
218
300
  deaths.push({ entityId: instance.entityId, emitter: sub.emitter, count: sub.count, ...point });
219
301
  }
220
302
  }
221
- const last = (instance.count - 1) * STRIDE;
222
- if (last !== base) {
223
- data.copyWithin(base, last, last + STRIDE);
303
+ const tail = instance.tail;
304
+ this.remove(instance, slot);
305
+ if (slot === tail) {
306
+ slot = -1;
224
307
  }
225
- instance.count -= 1;
226
- this.total -= 1;
227
308
  continue;
228
309
  }
310
+ data[base + PREVIOUS_X] = data[base + PX];
311
+ data[base + PREVIOUS_Y] = data[base + PY];
312
+ data[base + PREVIOUS_Z] = data[base + PZ];
313
+ data[base + PREVIOUS_ROTATION] = data[base + ROT];
314
+ data[base + PREVIOUS_AGE] = data[base + AGE];
229
315
  data[base + AGE] = age;
230
316
  data[base + VX] = (data[base + VX] + gx * dt) * damping;
231
317
  data[base + VY] = (data[base + VY] + gy * dt) * damping;
@@ -235,7 +321,7 @@ export class ParticleSimulator {
235
321
  data[base + PY] += data[base + VY] * speed * dt;
236
322
  data[base + PZ] += data[base + VZ] * speed * dt;
237
323
  data[base + ROT] += data[base + SPIN] * dt;
238
- index += 1;
324
+ slot = this.next[slot];
239
325
  }
240
326
  }
241
327
  /** Emits the rate and bursts that fall in [time, time + dt), wrapping looping cycles, plus pending counts. */
@@ -317,8 +403,18 @@ export class ParticleSimulator {
317
403
  direction = { x: shape.dx, y: shape.dy, z: shape.dz };
318
404
  }
319
405
  const flat = this.dimension === "2d";
320
- const base = instance.count * STRIDE;
321
- const data = instance.data;
406
+ const slot = this.allocate();
407
+ this.previous[slot] = instance.tail;
408
+ this.next[slot] = -1;
409
+ if (instance.tail === -1) {
410
+ instance.head = slot;
411
+ }
412
+ else {
413
+ this.next[instance.tail] = slot;
414
+ }
415
+ instance.tail = slot;
416
+ const base = slot * STRIDE;
417
+ const data = this.data;
322
418
  data[base + PX] = position.x;
323
419
  data[base + PY] = position.y;
324
420
  data[base + PZ] = flat ? 0 : position.z;
@@ -333,11 +429,44 @@ export class ParticleSimulator {
333
429
  data[base + CR] = color.r;
334
430
  data[base + CG] = color.g;
335
431
  data[base + CB] = color.b;
432
+ data[base + PREVIOUS_X] = data[base + PX];
433
+ data[base + PREVIOUS_Y] = data[base + PY];
434
+ data[base + PREVIOUS_Z] = data[base + PZ];
435
+ data[base + PREVIOUS_ROTATION] = rotation;
436
+ data[base + PREVIOUS_AGE] = 0;
336
437
  instance.count += 1;
337
438
  this.total += 1;
338
439
  return true;
339
440
  }
340
441
  }
442
+ function mix(previous, current, alpha) {
443
+ if (alpha === 0) {
444
+ return previous;
445
+ }
446
+ if (alpha === 1) {
447
+ return current;
448
+ }
449
+ return previous + (current - previous) * alpha;
450
+ }
451
+ function interpolateRotation(previous, current, alpha) {
452
+ if (alpha === 0) {
453
+ return previous;
454
+ }
455
+ if (alpha === 1) {
456
+ return current;
457
+ }
458
+ const dot = previous.reduce((sum, value, index) => sum + value * current[index], 0);
459
+ const sign = dot < 0 ? -1 : 1;
460
+ const cosine = Math.min(1, Math.abs(dot));
461
+ const angle = Math.acos(cosine);
462
+ const sine = Math.sin(angle);
463
+ const from = sine > 1e-6 ? Math.sin((1 - alpha) * angle) / sine : 1 - alpha;
464
+ const to = sign * (sine > 1e-6 ? Math.sin(alpha * angle) / sine : alpha);
465
+ const result = [previous[0] * from + current[0] * to, previous[1] * from + current[1] * to,
466
+ previous[2] * from + current[2] * to, previous[3] * from + current[3] * to];
467
+ const length = Math.hypot(...result);
468
+ return [result[0] / length, result[1] / length, result[2] / length, result[3] / length];
469
+ }
341
470
  /** Emitter sources from a 2D or 3D render frame. 2D rotation turns about Z. */
342
471
  export function particleSourcesFromFrame(frame) {
343
472
  if ("dimension" in frame) {
@@ -1 +1 @@
1
- {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/particles/simulator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAoD,MAAM,aAAa,CAAC;AAgDpG,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,4GAA4G;AAC5G,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACjI,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,QAAQ,GAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AA0BlD;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACnB,SAAS,CAAoB;IAC7B,iBAAiB,CAAS;IAClB,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChE,sEAAsE;IACrD,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC7D,KAAK,GAAG,CAAC,CAAC;IACD,MAAM,GAAwB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3E,KAAK,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAE7D,YAAY,OAAiC;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,2BAA2B,CAAC;IACpF,CAAC;IAED,2CAA2C;IAC3C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,qCAAqC;IACrC,OAAO,CAAC,QAAgB,EAAE,SAAiB;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,OAAyC;QAC5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/F,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACnD,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG;wBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU;wBACV,MAAM,EAAE,IAAI,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;wBACxE,IAAI,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC;wBACxD,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,CAAC;wBACP,OAAO,EAAE,UAAU,CAAC,WAAW;wBAC/B,WAAW,EAAE,CAAC;wBACd,OAAO,EAAE,CAAC;wBACV,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC;oBACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,UAAU,CAAC,YAAY,KAAK,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;oBACjE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;oBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;oBACpC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;oBACrB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;gBACxB,CAAC;gBACD,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;gBACjC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACpC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACpC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1F,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,IAAI,CAAC,MAA4C;QAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;gBAClB,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC;gBACzB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChF,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC7E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;wBACjC,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,eAAe,CAAC,KAAiD;QAC/D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;YACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,IAAI,GAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU;gBACrG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACvG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3G,IAAI,UAAU,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;oBACtH,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;oBACtH,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBAClC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBAClC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7H,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACzB,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,wBAAwB,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtF,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;gBACnB,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,SAA6B;QAClE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,qFAAqF;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC;IAEO,OAAO,CAAC,QAAyB,EAAE,EAAU,EAAE,MAAe;QACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QACrC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,KAAK,OAAO;wBACxC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;wBACzG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;oBACnE,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;wBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;oBACjG,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;gBAC3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBACD,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;YACxD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;YACxD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;YACxD,MAAM,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9H,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,8GAA8G;IACtG,QAAQ,CAAC,QAAyB,EAAE,EAAU;QACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QACrB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,wGAAwG;YACxG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;YAC7E,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;YAC3B,QAAQ,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;YAC3D,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;YACjE,OAAO,IAAI,KAAK,CAAC;YACjB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBACrD,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAC/C,IAAI,EAAE,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC;wBACpD,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,IAAI,MAAM,CAAC;YACpB,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YACpB,IAAI,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,GAAG,SAAS,EAAE,CAAC;gBACrD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;oBACpB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,8FAA8F;IACtF,KAAK,CAAC,QAAyB,EAAE,MAAuB;QAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,IAAI,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,mBAAmB,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzC,kBAAkB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACzC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACzC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3C,CAAC;QACD,IAAI,QAAwB,CAAC;QAC7B,IAAI,SAAyB,CAAC;QAC9B,IAAI,UAAU,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;YAC3C,QAAQ,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;YACtF,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACnH,QAAQ,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACtF,SAAS,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1B,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,KAA0C;IACjF,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS;YACxD,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;YACxI,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACpH,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgC;IAC1D,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,SAAiB;IACtD,OAAO,GAAG,QAAQ,SAAS,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,CAAqB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IACpE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO;QACL,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,CAAqB,EAAE,MAAsB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IACpG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAqB,EAAE,MAAsB,EAAE,KAAqB;IACjG,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC"}
1
+ {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/particles/simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as THREE from "three";
2
+ import type { RenderItem } from "three/src/renderers/webgl/WebGLRenderLists.js";
3
+ /** Merges particle runs into Three's object-sorted transparency, without changing scene materials or transforms. */
4
+ export declare class ParticleTransparency3D {
5
+ private readonly runs;
6
+ private readonly projected;
7
+ private readonly center;
8
+ private readonly projectionView;
9
+ private readonly frustum;
10
+ clear(): void;
11
+ add(object: THREE.Object3D, depth: number, order: number, camera: THREE.Camera): void;
12
+ /** Ordinary items retain Three's group/render order, depth and id comparisons. Equal-depth particles retain field order. */
13
+ readonly compare: (a: RenderItem, b: RenderItem) => number;
14
+ /** Only the default ordering bucket can interleave with particles. Other buckets retain their explicit priority. */
15
+ depths(scene: THREE.Scene, camera: THREE.Camera, particles: THREE.Object3D): number[];
16
+ }
17
+ //# sourceMappingURL=transparency3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transparency3d.d.ts","sourceRoot":"","sources":["../../src/particles/transparency3d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAEhF,oHAAoH;AACpH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2D;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAE/C,KAAK,IAAI,IAAI,CAAuB;IAEpC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAIpF;IAED,4HAA4H;IAC5H,QAAQ,CAAC,OAAO,MAAO,UAAU,KAAK,UAAU,KAAG,MAAM,CAYvD;IAEF,oHAAoH;IACpH,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,CAuCpF;CACF"}
@@ -0,0 +1,117 @@
1
+ import * as THREE from "three";
2
+ /** Merges particle runs into Three's object-sorted transparency, without changing scene materials or transforms. */
3
+ export class ParticleTransparency3D {
4
+ runs = new Map();
5
+ projected = new THREE.Vector4();
6
+ center = new THREE.Vector3();
7
+ projectionView = new THREE.Matrix4();
8
+ frustum = new THREE.Frustum();
9
+ clear() { this.runs.clear(); }
10
+ add(object, depth, order, camera) {
11
+ this.projected.set(0, 0, -depth, 1).applyMatrix4(camera.projectionMatrix);
12
+ // Three r185 sorts Vector4 clip-space z, without the perspective divide.
13
+ this.runs.set(object, { z: this.projected.z, order });
14
+ }
15
+ /** Ordinary items retain Three's group/render order, depth and id comparisons. Equal-depth particles retain field order. */
16
+ compare = (a, b) => {
17
+ if (a.groupOrder !== b.groupOrder) {
18
+ return a.groupOrder - b.groupOrder;
19
+ }
20
+ if (a.renderOrder !== b.renderOrder) {
21
+ return a.renderOrder - b.renderOrder;
22
+ }
23
+ const first = this.runs.get(a.object);
24
+ const second = this.runs.get(b.object);
25
+ const depth = (second?.z ?? b.z) - (first?.z ?? a.z);
26
+ if (depth !== 0) {
27
+ return depth;
28
+ }
29
+ if (first && second) {
30
+ return first.order - second.order;
31
+ }
32
+ // At a boundary, ordinary items precede particles at the same depth. This is also the packer's split rule.
33
+ if (first) {
34
+ return 1;
35
+ }
36
+ if (second) {
37
+ return -1;
38
+ }
39
+ return a.id - b.id;
40
+ };
41
+ /** Only the default ordering bucket can interleave with particles. Other buckets retain their explicit priority. */
42
+ depths(scene, camera, particles) {
43
+ if (scene.matrixWorldAutoUpdate) {
44
+ scene.updateMatrixWorld();
45
+ }
46
+ this.projectionView.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
47
+ this.frustum.setFromProjectionMatrix(this.projectionView, camera.coordinateSystem, camera.reversedDepth);
48
+ const depths = [];
49
+ const pending = [{ object: scene, groupOrder: 0 }];
50
+ while (pending.length > 0) {
51
+ const entry = pending.pop();
52
+ if (!entry) {
53
+ break;
54
+ }
55
+ const { object } = entry;
56
+ if (!object.visible || object === particles) {
57
+ continue;
58
+ }
59
+ let groupOrder = entry.groupOrder;
60
+ if (object.layers.test(camera.layers)) {
61
+ if (object instanceof THREE.Group) {
62
+ groupOrder = object.renderOrder;
63
+ }
64
+ if (groupOrder === 0 && object.renderOrder === 0) {
65
+ if (object instanceof THREE.Sprite && transparent(object.material)
66
+ && (!object.frustumCulled || this.frustum.intersectsSprite(object))) {
67
+ this.center.setFromMatrixPosition(object.matrixWorld);
68
+ depths.push(-this.center.applyMatrix4(camera.matrixWorldInverse).z);
69
+ }
70
+ else if ((object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points)
71
+ && hasTransparentDraw(object) && (!object.frustumCulled || this.frustum.intersectsObject(object))) {
72
+ // Match WebGLRenderer.projectObject: object bounds for instancing/skinning, geometry bounds otherwise.
73
+ if (object instanceof THREE.InstancedMesh || object instanceof THREE.SkinnedMesh) {
74
+ if (object.boundingSphere === null) {
75
+ object.computeBoundingSphere();
76
+ }
77
+ if (!object.boundingSphere) {
78
+ continue;
79
+ }
80
+ this.center.copy(object.boundingSphere.center);
81
+ }
82
+ else {
83
+ if (object.geometry.boundingSphere === null) {
84
+ object.geometry.computeBoundingSphere();
85
+ }
86
+ if (!object.geometry.boundingSphere) {
87
+ continue;
88
+ }
89
+ this.center.copy(object.geometry.boundingSphere.center);
90
+ }
91
+ this.center.applyMatrix4(object.matrixWorld).applyMatrix4(camera.matrixWorldInverse);
92
+ depths.push(-this.center.z);
93
+ }
94
+ }
95
+ }
96
+ for (const child of object.children) {
97
+ pending.push({ object: child, groupOrder });
98
+ }
99
+ }
100
+ return depths;
101
+ }
102
+ }
103
+ function transparent(material) {
104
+ // Three renders transmission in a separate list before ordinary transparent objects.
105
+ return material.visible && material.transparent && !(material instanceof THREE.MeshPhysicalMaterial && material.transmission > 0);
106
+ }
107
+ function hasTransparentDraw(object) {
108
+ const material = object.material;
109
+ if (!Array.isArray(material)) {
110
+ return transparent(material);
111
+ }
112
+ return object.geometry.groups.some(group => {
113
+ const entry = material[group.materialIndex ?? 0];
114
+ return entry !== undefined && transparent(entry);
115
+ });
116
+ }
117
+ //# sourceMappingURL=transparency3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transparency3d.js","sourceRoot":"","sources":["../../src/particles/transparency3d.ts"],"names":[],"mappings":"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"}