custom-pixi-particles 4.41.0 → 4.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -56,6 +56,12 @@ export default class Model {
56
56
  x: number;
57
57
  y: number;
58
58
  } | null;
59
+ /**
60
+ * Incremented when the host tab becomes visible again after being hidden.
61
+ * Behaviours use this to resync state after a pause (avoids delta spikes / stale wrap tracking).
62
+ */
63
+ visibilityResumeGeneration: number;
64
+ signalVisibilityResume(): void;
59
65
  /** Sets {@link toroidalCanvasBounds} from render buffer size (centered rect). */
60
66
  setToroidalCanvasBoundsFromSize(width: number, height: number): void;
61
67
  clearToroidalCanvasBounds(): void;
package/dist/lib/Model.js CHANGED
@@ -35,6 +35,14 @@ export default class Model {
35
35
  * Updated by Renderer.updatePosition when the host passes cursor/follow-mouse updates.
36
36
  */
37
37
  this.pointerWorld = null;
38
+ /**
39
+ * Incremented when the host tab becomes visible again after being hidden.
40
+ * Behaviours use this to resync state after a pause (avoids delta spikes / stale wrap tracking).
41
+ */
42
+ this.visibilityResumeGeneration = 0;
43
+ }
44
+ signalVisibilityResume() {
45
+ this.visibilityResumeGeneration += 1;
38
46
  }
39
47
  /** Sets {@link toroidalCanvasBounds} from render buffer size (centered rect). */
40
48
  setToroidalCanvasBoundsFromSize(width, height) {
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/lib/Model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/lib/Model.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import Particle from '../Particle';
3
+ import type Model from '../Model';
3
4
  import { Color, Point } from '../util';
4
5
  export type TemperatureZoneShapeType = 'circle' | 'square' | 'rectangle';
5
6
  export type TemperatureZone = {
@@ -16,21 +17,32 @@ export type TemperatureZone = {
16
17
  * TemperatureBehaviour adjusts particle velocity and color
17
18
  * based on whether they are in a hot or cold zone.
18
19
  *
19
- * Gradual color mode is designed to run after ColorBehaviour (lower priority):
20
- * ColorBehaviour sets the natural particle color first, then this behaviour
21
- * blends zone tint on top and eases back to the live natural color on exit.
20
+ * Runs after ColorBehaviour and ToroidalWrapBehaviour (lower priority):
21
+ * base color and final position are known before zone tinting is applied.
22
22
  */
23
23
  export default class TemperatureBehaviour extends Behaviour {
24
24
  enabled: boolean;
25
+ /** Below ToroidalWrapBehaviour (45) so zone checks use post-wrap positions. */
25
26
  priority: number;
26
27
  zones: TemperatureZone[];
27
28
  /** When true, particle color eases toward zone / outside colors instead of snapping. */
28
29
  gradualColorTransition: boolean;
29
30
  /** Blend speed toward the target color (higher = faster). */
30
31
  colorTransitionSpeed: number;
32
+ private _reconciledVisibilityResumeGeneration;
31
33
  init(particle: Particle): void;
32
- apply(particle: Particle, deltaTime?: number): void;
34
+ apply(particle: Particle, deltaTime?: number, model?: Model): void;
35
+ onParticlesUpdated(model?: Model): void;
33
36
  private applyGradualOutsideColor;
37
+ private getOutsideTarget;
38
+ private getRestoreOutsideColor;
39
+ /**
40
+ * True when the particle is outside all zones but still carries zone tint
41
+ * (state desync, toroidal wrap, or mid-blend).
42
+ */
43
+ private shouldInstantRestore;
44
+ private hasResidualZoneTint;
45
+ private syncColorSkip;
34
46
  private clearGradualColorState;
35
47
  private findActiveZone;
36
48
  private zoneColor;
@@ -40,6 +52,8 @@ export default class TemperatureBehaviour extends Behaviour {
40
52
  private stepBlendToward;
41
53
  private getBlendT;
42
54
  private lerp;
55
+ private colorsNear;
56
+ private colorDistSq;
43
57
  private matchesAnyZoneColor;
44
58
  private matchesAnyZoneColorValue;
45
59
  isInZone(particle: Particle, zone: TemperatureZone): boolean;
@@ -4,20 +4,21 @@ import behaviourNames from './BehaviourNames';
4
4
  * TemperatureBehaviour adjusts particle velocity and color
5
5
  * based on whether they are in a hot or cold zone.
6
6
  *
7
- * Gradual color mode is designed to run after ColorBehaviour (lower priority):
8
- * ColorBehaviour sets the natural particle color first, then this behaviour
9
- * blends zone tint on top and eases back to the live natural color on exit.
7
+ * Runs after ColorBehaviour and ToroidalWrapBehaviour (lower priority):
8
+ * base color and final position are known before zone tinting is applied.
10
9
  */
11
10
  export default class TemperatureBehaviour extends Behaviour {
12
11
  constructor() {
13
12
  super(...arguments);
14
13
  this.enabled = true;
15
- this.priority = 50;
14
+ /** Below ToroidalWrapBehaviour (45) so zone checks use post-wrap positions. */
15
+ this.priority = 40;
16
16
  this.zones = [];
17
17
  /** When true, particle color eases toward zone / outside colors instead of snapping. */
18
18
  this.gradualColorTransition = false;
19
19
  /** Blend speed toward the target color (higher = faster). */
20
20
  this.colorTransitionSpeed = 6;
21
+ this._reconciledVisibilityResumeGeneration = -1;
21
22
  }
22
23
  init(particle) {
23
24
  const p = particle;
@@ -26,29 +27,47 @@ export default class TemperatureBehaviour extends Behaviour {
26
27
  p._temperatureBlend = 0;
27
28
  p._temperatureOutsideColor = null;
28
29
  p._temperatureLastZoneColor = null;
30
+ p._toroidalJustWrapped = false;
31
+ particle.skipColorBehaviour = false;
29
32
  }
30
- apply(particle, deltaTime = 1 / 60) {
31
- var _a, _b, _c;
33
+ apply(particle, deltaTime = 1 / 60, model) {
34
+ var _a, _b, _c, _d;
32
35
  if (!this.enabled || !this.zones || !this.zones.length)
33
36
  return;
34
37
  const p = particle;
38
+ const justWrapped = p._toroidalJustWrapped === true;
39
+ if (justWrapped) {
40
+ p._toroidalJustWrapped = false;
41
+ }
35
42
  const activeZone = this.findActiveZone(particle);
36
43
  const naturalColor = this.copyColor(particle);
37
44
  const wasInZone = p._temperatureInZone === true;
45
+ const visibilityResume = ((_a = model === null || model === void 0 ? void 0 : model.visibilityResumeGeneration) !== null && _a !== void 0 ? _a : 0) > this._reconciledVisibilityResumeGeneration;
46
+ let residualTint = !activeZone && this.hasResidualZoneTint(particle, p, wasInZone, justWrapped);
47
+ if (!activeZone &&
48
+ visibilityResume &&
49
+ (wasInZone || this.matchesAnyZoneColorValue(naturalColor, 12))) {
50
+ residualTint = true;
51
+ }
38
52
  if (!activeZone) {
39
53
  if (this.gradualColorTransition) {
40
- if (wasInZone) {
54
+ if (residualTint) {
41
55
  p._temperatureTransitioningOut = true;
42
56
  }
43
57
  this.applyGradualOutsideColor(particle, p, naturalColor, deltaTime);
44
58
  }
45
- else if (wasInZone && p._temperatureOutsideColor && this.matchesAnyZoneColor(particle)) {
46
- this.writeColor(particle, p._temperatureOutsideColor);
59
+ else if (residualTint) {
60
+ const restoreColor = this.getRestoreOutsideColor(p, naturalColor);
61
+ if (restoreColor &&
62
+ (justWrapped && wasInZone || this.shouldInstantRestore(particle, naturalColor))) {
63
+ this.writeColor(particle, restoreColor);
64
+ }
47
65
  }
48
- else if (!wasInZone) {
66
+ else if (!wasInZone && !residualTint && !this.matchesAnyZoneColorValue(naturalColor)) {
49
67
  p._temperatureOutsideColor = naturalColor;
50
68
  }
51
69
  p._temperatureInZone = false;
70
+ this.syncColorSkip(particle, p, false);
52
71
  if (!this.gradualColorTransition) {
53
72
  this.clearGradualColorState(particle, p);
54
73
  }
@@ -56,37 +75,53 @@ export default class TemperatureBehaviour extends Behaviour {
56
75
  }
57
76
  if (this.gradualColorTransition) {
58
77
  p._temperatureTransitioningOut = false;
59
- if (!wasInZone || !p._temperatureOutsideColor) {
78
+ if (!wasInZone) {
60
79
  p._temperatureOutsideColor = naturalColor;
80
+ if (((_b = p._temperatureBlend) !== null && _b !== void 0 ? _b : 0) <= 0) {
81
+ p._temperatureBlend = 0;
82
+ }
61
83
  }
62
- if (!wasInZone && ((_a = p._temperatureBlend) !== null && _a !== void 0 ? _a : 0) <= 0) {
63
- p._temperatureBlend = 0;
84
+ else if (!p._temperatureOutsideColor) {
85
+ p._temperatureOutsideColor = naturalColor;
64
86
  }
65
87
  }
66
88
  else if (!wasInZone) {
67
89
  p._temperatureOutsideColor = naturalColor;
68
90
  }
91
+ else if (justWrapped && !this.matchesAnyZoneColorValue(naturalColor, 12)) {
92
+ // Wrapped into a zone from a non-tinted color — refresh outside reference.
93
+ p._temperatureOutsideColor = naturalColor;
94
+ }
69
95
  particle.velocity.x *= activeZone.velocity.x;
70
96
  particle.velocity.y *= activeZone.velocity.y;
71
97
  const zoneColor = this.zoneColor(activeZone);
72
98
  p._temperatureLastZoneColor = zoneColor;
73
99
  if (this.gradualColorTransition) {
74
- const blend = this.stepBlendToward((_b = p._temperatureBlend) !== null && _b !== void 0 ? _b : 0, 1, deltaTime);
100
+ const blend = this.stepBlendToward((_c = p._temperatureBlend) !== null && _c !== void 0 ? _c : 0, 1, deltaTime);
75
101
  p._temperatureBlend = blend;
76
- const outside = (_c = p._temperatureOutsideColor) !== null && _c !== void 0 ? _c : naturalColor;
102
+ const outside = (_d = p._temperatureOutsideColor) !== null && _d !== void 0 ? _d : naturalColor;
77
103
  this.writeColor(particle, this.mixColors(outside, zoneColor, blend));
78
104
  }
79
105
  else {
80
106
  this.writeColor(particle, zoneColor);
81
- p._temperatureBlend = 1;
82
107
  }
83
108
  p._temperatureInZone = true;
109
+ this.syncColorSkip(particle, p, true);
110
+ }
111
+ onParticlesUpdated(model) {
112
+ var _a;
113
+ const resumeGeneration = (_a = model === null || model === void 0 ? void 0 : model.visibilityResumeGeneration) !== null && _a !== void 0 ? _a : 0;
114
+ if (resumeGeneration > this._reconciledVisibilityResumeGeneration) {
115
+ this._reconciledVisibilityResumeGeneration = resumeGeneration;
116
+ }
84
117
  }
85
118
  applyGradualOutsideColor(particle, p, naturalColor, deltaTime) {
86
- var _a, _b, _c, _d;
119
+ var _a, _b, _c;
87
120
  const transitioningOut = p._temperatureTransitioningOut === true;
88
121
  const startBlend = transitioningOut ? ((_a = p._temperatureBlend) !== null && _a !== void 0 ? _a : 1) : ((_b = p._temperatureBlend) !== null && _b !== void 0 ? _b : 0);
89
- if (!transitioningOut && !this.matchesAnyZoneColorValue(naturalColor)) {
122
+ if (!transitioningOut &&
123
+ !this.matchesAnyZoneColorValue(naturalColor) &&
124
+ !this.hasResidualZoneTint(particle, p, false, false)) {
90
125
  p._temperatureOutsideColor = naturalColor;
91
126
  }
92
127
  const blend = this.stepBlendToward(startBlend, 0, deltaTime);
@@ -95,22 +130,98 @@ export default class TemperatureBehaviour extends Behaviour {
95
130
  p._temperatureBlend = 0;
96
131
  p._temperatureTransitioningOut = false;
97
132
  p._temperatureLastZoneColor = null;
133
+ this.syncColorSkip(particle, p, false);
98
134
  return;
99
135
  }
100
- const outside = transitioningOut
101
- ? naturalColor
102
- : ((_c = p._temperatureOutsideColor) !== null && _c !== void 0 ? _c : naturalColor);
103
- const zone = (_d = p._temperatureLastZoneColor) !== null && _d !== void 0 ? _d : outside;
136
+ const outside = this.getOutsideTarget(p, naturalColor);
137
+ const zone = (_c = p._temperatureLastZoneColor) !== null && _c !== void 0 ? _c : outside;
104
138
  this.writeColor(particle, this.mixColors(outside, zone, blend));
105
139
  if (blend <= 0.001) {
106
140
  p._temperatureBlend = 0;
107
141
  p._temperatureTransitioningOut = false;
108
142
  p._temperatureLastZoneColor = null;
143
+ this.syncColorSkip(particle, p, false);
144
+ return;
145
+ }
146
+ this.syncColorSkip(particle, p, false);
147
+ }
148
+ getOutsideTarget(p, naturalColor) {
149
+ var _a, _b;
150
+ if (p._temperatureTransitioningOut === true) {
151
+ return (_a = this.getRestoreOutsideColor(p, naturalColor)) !== null && _a !== void 0 ? _a : naturalColor;
109
152
  }
153
+ return (_b = p._temperatureOutsideColor) !== null && _b !== void 0 ? _b : naturalColor;
154
+ }
155
+ getRestoreOutsideColor(p, naturalColor) {
156
+ const outside = p._temperatureOutsideColor;
157
+ if (!outside)
158
+ return null;
159
+ if (!this.matchesAnyZoneColorValue(outside, 12))
160
+ return outside;
161
+ // Outside reference was corrupted (e.g. saved while zone-tinted after a wrap).
162
+ if (!this.matchesAnyZoneColorValue(naturalColor, 12))
163
+ return naturalColor;
164
+ return null;
165
+ }
166
+ /**
167
+ * True when the particle is outside all zones but still carries zone tint
168
+ * (state desync, toroidal wrap, or mid-blend).
169
+ */
170
+ shouldInstantRestore(particle, naturalColor) {
171
+ if (this.matchesAnyZoneColorValue(naturalColor, 12))
172
+ return true;
173
+ const p = particle;
174
+ const outside = p._temperatureOutsideColor;
175
+ const zone = p._temperatureLastZoneColor;
176
+ if (!outside || !zone)
177
+ return false;
178
+ if (this.colorsNear(naturalColor, outside))
179
+ return false;
180
+ if (this.colorsNear(naturalColor, zone, 12))
181
+ return true;
182
+ const distToZone = this.colorDistSq(naturalColor, zone);
183
+ const distToOutside = this.colorDistSq(naturalColor, outside);
184
+ return distToZone < distToOutside * 0.35 && distToZone <= 3600;
185
+ }
186
+ hasResidualZoneTint(particle, p, wasInZone, justWrapped) {
187
+ var _a;
188
+ if (justWrapped)
189
+ return true;
190
+ if (p._temperatureTransitioningOut === true)
191
+ return true;
192
+ if (this.gradualColorTransition && ((_a = p._temperatureBlend) !== null && _a !== void 0 ? _a : 0) > 0.001)
193
+ return true;
194
+ if (this.matchesAnyZoneColorValue(this.copyColor(particle), 12))
195
+ return true;
196
+ const outside = p._temperatureOutsideColor;
197
+ const zone = p._temperatureLastZoneColor;
198
+ if (!outside || !zone) {
199
+ return wasInZone && this.matchesAnyZoneColorValue(this.copyColor(particle), 12);
200
+ }
201
+ const current = this.copyColor(particle);
202
+ if (this.colorsNear(current, outside))
203
+ return false;
204
+ if (this.colorsNear(current, zone, 12))
205
+ return true;
206
+ const distToZone = this.colorDistSq(current, zone);
207
+ const distToOutside = this.colorDistSq(current, outside);
208
+ return distToZone < distToOutside * 0.35 && distToZone <= 3600;
209
+ }
210
+ syncColorSkip(particle, p, inZone) {
211
+ var _a;
212
+ if (!this.gradualColorTransition) {
213
+ particle.skipColorBehaviour = inZone;
214
+ return;
215
+ }
216
+ const blend = (_a = p._temperatureBlend) !== null && _a !== void 0 ? _a : 0;
217
+ particle.skipColorBehaviour =
218
+ inZone || p._temperatureTransitioningOut === true || blend > 0.001;
110
219
  }
111
220
  clearGradualColorState(particle, p) {
112
221
  p._temperatureBlend = 0;
113
- p._temperatureLastZoneColor = null;
222
+ if (!this.hasResidualZoneTint(particle, p, false, false)) {
223
+ p._temperatureLastZoneColor = null;
224
+ }
114
225
  }
115
226
  findActiveZone(particle) {
116
227
  for (const zone of this.zones) {
@@ -169,13 +280,26 @@ export default class TemperatureBehaviour extends Behaviour {
169
280
  lerp(start, end, t) {
170
281
  return start + (end - start) * t;
171
282
  }
172
- matchesAnyZoneColor(particle) {
173
- return this.matchesAnyZoneColorValue(this.copyColor(particle));
283
+ colorsNear(a, b, tolerance = 2) {
284
+ return (Math.abs(a.r - b.r) <= tolerance &&
285
+ Math.abs(a.g - b.g) <= tolerance &&
286
+ Math.abs(a.b - b.b) <= tolerance &&
287
+ Math.abs(a.alpha - b.alpha) <= 0.02);
288
+ }
289
+ colorDistSq(a, b) {
290
+ const dr = a.r - b.r;
291
+ const dg = a.g - b.g;
292
+ const db = a.b - b.b;
293
+ const da = (a.alpha - b.alpha) * 255;
294
+ return dr * dr + dg * dg + db * db + da * da;
295
+ }
296
+ matchesAnyZoneColor(particle, tolerance = 2) {
297
+ return this.matchesAnyZoneColorValue(this.copyColor(particle), tolerance);
174
298
  }
175
- matchesAnyZoneColorValue(color) {
299
+ matchesAnyZoneColorValue(color, tolerance = 2) {
176
300
  for (const zone of this.zones) {
177
301
  const zoneColor = this.zoneColor(zone);
178
- if (color.r === zoneColor.r && color.g === zoneColor.g && color.b === zoneColor.b) {
302
+ if (this.colorsNear(color, zoneColor, tolerance)) {
179
303
  return true;
180
304
  }
181
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TemperatureBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/TemperatureBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TemperatureBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/TemperatureBehaviour.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,27 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import Particle from '../Particle';
3
3
  import type Model from '../Model';
4
- import type TurbulencePool from '../util/turbulencePool';
5
4
  /**
6
5
  * Toroidal screen/world wrap: particles that fully leave an axis-aligned rectangle
7
6
  * re-enter on the opposite side while still fully outside the view (no visible jump).
8
- * Uses sprite bounds when available; falls back to particle size. Runs after
9
- * {@link PositionBehaviour} (lower priority). Syncs {@link Particle.movement} with
10
- * wrapped {@link Particle.x}/{@link Particle.y} (same pattern as {@link BounceBehaviour}).
11
- * Do not combine with bounce on the same axis.
7
+ * Renderers hide sprites that do not overlap the viewport so teleports are never seen.
12
8
  */
13
9
  export default class ToroidalWrapBehaviour extends Behaviour {
14
10
  enabled: boolean;
15
11
  priority: number;
16
12
  wrapX: boolean;
17
13
  wrapY: boolean;
18
- /**
19
- * When true, bounds come from {@link Model.toroidalCanvasBounds} (set each frame from
20
- * `canvasSizeProvider` / renderer size). Manual min/max are ignored until turned off.
21
- */
22
14
  useCanvasBounds: boolean;
23
15
  minX: number;
24
16
  maxX: number;
25
17
  minY: number;
26
18
  maxY: number;
27
- /** Shrinks the effective wrap rect inward (helps large sprites). */
28
19
  inset: number;
29
- init: (_particle: Particle, _model: Model, _turbulencePool: TurbulencePool) => void;
20
+ private _insideX;
21
+ private _insideY;
22
+ private _handledVisibilityResumeGeneration;
23
+ init: (particle: Particle, _model: Model, _turbulencePool: unknown) => void;
24
+ onParticleRemoved: (particle: Particle) => void;
30
25
  apply: (particle: Particle, _deltaTime: number, model: Model) => void;
31
26
  getName(): string;
32
27
  getProps(): {
@@ -1,13 +1,10 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import BehaviourNames from './BehaviourNames';
3
- import { getToroidalEdgeExtents, wrapToroidalAxis } from '../util/toroidalWrapExtents';
3
+ import { getToroidalEdgeExtents, resolveToroidalBounds, wrapToroidalAxis, } from '../util/toroidalWrapExtents';
4
4
  /**
5
5
  * Toroidal screen/world wrap: particles that fully leave an axis-aligned rectangle
6
6
  * re-enter on the opposite side while still fully outside the view (no visible jump).
7
- * Uses sprite bounds when available; falls back to particle size. Runs after
8
- * {@link PositionBehaviour} (lower priority). Syncs {@link Particle.movement} with
9
- * wrapped {@link Particle.x}/{@link Particle.y} (same pattern as {@link BounceBehaviour}).
10
- * Do not combine with bounce on the same axis.
7
+ * Renderers hide sprites that do not overlap the viewport so teleports are never seen.
11
8
  */
12
9
  export default class ToroidalWrapBehaviour extends Behaviour {
13
10
  constructor() {
@@ -16,48 +13,67 @@ export default class ToroidalWrapBehaviour extends Behaviour {
16
13
  this.priority = 45;
17
14
  this.wrapX = true;
18
15
  this.wrapY = true;
19
- /**
20
- * When true, bounds come from {@link Model.toroidalCanvasBounds} (set each frame from
21
- * `canvasSizeProvider` / renderer size). Manual min/max are ignored until turned off.
22
- */
23
16
  this.useCanvasBounds = false;
24
17
  this.minX = -400;
25
18
  this.maxX = 400;
26
19
  this.minY = -300;
27
20
  this.maxY = 300;
28
- /** Shrinks the effective wrap rect inward (helps large sprites). */
29
21
  this.inset = 0;
30
- this.init = (_particle, _model, _turbulencePool) => {
31
- //
22
+ this._insideX = new Map();
23
+ this._insideY = new Map();
24
+ this._handledVisibilityResumeGeneration = -1;
25
+ this.init = (particle, _model, _turbulencePool) => {
26
+ this._insideX.delete(particle.uid);
27
+ this._insideY.delete(particle.uid);
28
+ };
29
+ this.onParticleRemoved = (particle) => {
30
+ this._insideX.delete(particle.uid);
31
+ this._insideY.delete(particle.uid);
32
32
  };
33
33
  this.apply = (particle, _deltaTime, model) => {
34
+ var _a;
34
35
  if (!this.enabled)
35
36
  return;
36
- const fromCanvas = this.useCanvasBounds && model.toroidalCanvasBounds;
37
- const base = fromCanvas ? model.toroidalCanvasBounds : { minX: this.minX, maxX: this.maxX, minY: this.minY, maxY: this.maxY };
38
- const minX = base.minX + this.inset;
39
- const maxX = base.maxX - this.inset;
40
- const minY = base.minY + this.inset;
41
- const maxY = base.maxY - this.inset;
37
+ const resumeGeneration = (_a = model.visibilityResumeGeneration) !== null && _a !== void 0 ? _a : 0;
38
+ if (resumeGeneration > this._handledVisibilityResumeGeneration) {
39
+ this._handledVisibilityResumeGeneration = resumeGeneration;
40
+ this._insideX.clear();
41
+ this._insideY.clear();
42
+ }
43
+ const bounds = resolveToroidalBounds(this, model.toroidalCanvasBounds);
44
+ if (!bounds)
45
+ return;
42
46
  const extents = getToroidalEdgeExtents(particle);
43
- let x = particle.x;
44
- let y = particle.y;
47
+ const renderOffsetX = particle.x - particle.movement.x;
48
+ const renderOffsetY = particle.y - particle.movement.y;
49
+ let visualX = particle.movement.x + renderOffsetX;
50
+ let visualY = particle.movement.y + renderOffsetY;
45
51
  let mx = particle.movement.x;
46
52
  let my = particle.movement.y;
47
- if (this.wrapX && maxX > minX) {
48
- const wrapped = wrapToroidalAxis(x, mx, minX, maxX, extents.left, extents.right, particle.velocity.x);
49
- x = wrapped.position;
53
+ if (this.wrapX) {
54
+ const wrapped = wrapToroidalAxis(visualX, mx, bounds.minX, bounds.maxX, extents.left, extents.right, this._insideX.get(particle.uid));
55
+ visualX = wrapped.position;
50
56
  mx = wrapped.movement;
57
+ this._insideX.set(particle.uid, wrapped.inside);
58
+ if (wrapped.didWrap) {
59
+ ;
60
+ particle._toroidalJustWrapped = true;
61
+ }
51
62
  }
52
- if (this.wrapY && maxY > minY) {
53
- const wrapped = wrapToroidalAxis(y, my, minY, maxY, extents.top, extents.bottom, particle.velocity.y);
54
- y = wrapped.position;
63
+ if (this.wrapY) {
64
+ const wrapped = wrapToroidalAxis(visualY, my, bounds.minY, bounds.maxY, extents.top, extents.bottom, this._insideY.get(particle.uid));
65
+ visualY = wrapped.position;
55
66
  my = wrapped.movement;
67
+ this._insideY.set(particle.uid, wrapped.inside);
68
+ if (wrapped.didWrap) {
69
+ ;
70
+ particle._toroidalJustWrapped = true;
71
+ }
56
72
  }
57
- particle.x = x;
58
- particle.y = y;
59
73
  particle.movement.x = mx;
60
74
  particle.movement.y = my;
75
+ particle.x = visualX;
76
+ particle.y = visualY;
61
77
  };
62
78
  }
63
79
  getName() {
@@ -1 +1 @@
1
- {"version":3,"file":"ToroidalWrapBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ToroidalWrapBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToroidalWrapBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ToroidalWrapBehaviour.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ class Emitter extends eventemitter3 {
50
50
  * @param {number} deltaTime - Time elapsed since the last update
51
51
  */
52
52
  update(deltaTime) {
53
+ var _a;
53
54
  if (!this._play)
54
55
  return;
55
56
  this._behaviourFrameSeq = (this._behaviourFrameSeq + 1) | 0;
@@ -57,6 +58,8 @@ class Emitter extends eventemitter3 {
57
58
  this.emitParticles(deltaTime);
58
59
  this.behaviours.update(deltaTime, this._model);
59
60
  this.updateParticles(deltaTime);
61
+ const temperature = this.behaviours.getByName('TemperatureBehaviour');
62
+ (_a = temperature === null || temperature === void 0 ? void 0 : temperature.onParticlesUpdated) === null || _a === void 0 ? void 0 : _a.call(temperature, this._model);
60
63
  this.duration.update(deltaTime);
61
64
  if (this.duration.isTimeElapsed() && this.list.isEmpty()) {
62
65
  this.stop();