pixi-particles-engine 0.1.2 → 0.1.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.
- package/dist/behaviour.js +2 -1
- package/dist/behaviour.js.map +1 -1
- package/dist/behaviours/alpha-behaviour.js +5 -1
- package/dist/behaviours/alpha-behaviour.js.map +1 -1
- package/dist/behaviours/alpha-curve-behaviour.js +7 -3
- package/dist/behaviours/alpha-curve-behaviour.js.map +1 -1
- package/dist/behaviours/curved-behaviour/curve-key-frame.js +2 -1
- package/dist/behaviours/curved-behaviour/curve-key-frame.js.map +1 -1
- package/dist/behaviours/curved-behaviour/curve-sampler.js +11 -7
- package/dist/behaviours/curved-behaviour/curve-sampler.js.map +1 -1
- package/dist/behaviours/movement-behaviours/gravity-behaviour.js +7 -3
- package/dist/behaviours/movement-behaviours/gravity-behaviour.js.map +1 -1
- package/dist/behaviours/movement-behaviours/movement-curve-behaviour.js +8 -4
- package/dist/behaviours/movement-behaviours/movement-curve-behaviour.js.map +1 -1
- package/dist/behaviours/movement-behaviours/radial-burst-behaviour.js +8 -4
- package/dist/behaviours/movement-behaviours/radial-burst-behaviour.js.map +1 -1
- package/dist/behaviours/scale-curve-behaviour.js +7 -3
- package/dist/behaviours/scale-curve-behaviour.js.map +1 -1
- package/dist/behaviours/spawn-behaviours/circle-spawn-behaviour.js +5 -1
- package/dist/behaviours/spawn-behaviours/circle-spawn-behaviour.js.map +1 -1
- package/dist/behaviours/spawn-behaviours/rectangle-spawn-behaviour.js +5 -1
- package/dist/behaviours/spawn-behaviours/rectangle-spawn-behaviour.js.map +1 -1
- package/dist/behaviours/static-behaviours/static-rotation-behaviour.js +5 -1
- package/dist/behaviours/static-behaviours/static-rotation-behaviour.js.map +1 -1
- package/dist/behaviours/static-behaviours/static-scale-behaviour.js +5 -1
- package/dist/behaviours/static-behaviours/static-scale-behaviour.js.map +1 -1
- package/dist/emitter.js +10 -6
- package/dist/emitter.js.map +1 -1
- package/dist/index.js +34 -18
- package/dist/index.js.map +1 -1
- package/dist/px-particle.js +6 -2
- package/dist/px-particle.js.map +1 -1
- package/dist/texture-provider.js +2 -1
- package/dist/texture-provider.js.map +1 -1
- package/dist/texture-providers/animated-texture-provider.js +7 -3
- package/dist/texture-providers/animated-texture-provider.js.map +1 -1
- package/dist/texture-providers/single-texture-provider.js +7 -3
- package/dist/texture-providers/single-texture-provider.js.map +1 -1
- package/dist/texture-providers/weighted-texture-provider.js +8 -4
- package/dist/texture-providers/weighted-texture-provider.js.map +1 -1
- package/dist/utils.js +5 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -2
- package/dist/behaviours/behaviour-utils.d.ts +0 -1
- package/dist/behaviours/behaviour-utils.d.ts.map +0 -1
- package/dist/behaviours/behaviour-utils.js +0 -2
- package/dist/behaviours/behaviour-utils.js.map +0 -1
package/dist/behaviour.js
CHANGED
package/dist/behaviour.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviour.js","sourceRoot":"","sources":["../src/behaviour.ts"],"names":[],"mappings":""
|
|
1
|
+
{"version":3,"file":"behaviour.js","sourceRoot":"","sources":["../src/behaviour.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AlphaBehaviour = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Linearly fades alpha from startAlpha -> endAlpha over particle lifetime.
|
|
3
6
|
*/
|
|
4
|
-
|
|
7
|
+
class AlphaBehaviour {
|
|
5
8
|
constructor(startAlpha = 1, endAlpha = 0) {
|
|
6
9
|
this.requires = { color: true };
|
|
7
10
|
this.priority = 50;
|
|
@@ -18,4 +21,5 @@ export class AlphaBehaviour {
|
|
|
18
21
|
p.alpha = this.startAlpha + (this.endAlpha - this.startAlpha) * t;
|
|
19
22
|
}
|
|
20
23
|
}
|
|
24
|
+
exports.AlphaBehaviour = AlphaBehaviour;
|
|
21
25
|
//# sourceMappingURL=alpha-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/alpha-behaviour.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"alpha-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/alpha-behaviour.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,cAAc;IAQvB,YAAY,UAAU,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC;QAPxB,aAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAE3B,aAAQ,GAAG,EAAE,CAAC;QAEvB,eAAU,GAAG,CAAC,CAAC;QACf,aAAQ,GAAG,CAAC,CAAC;QAGhB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAEM,OAAO,CAAC,CAAa,EAAE,QAAiB;QAC3C,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,CAAa,EAAE,GAAW,EAAE,QAAiB;QACvD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;CACJ;AArBD,wCAqBC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AlphaCurveBehaviour = void 0;
|
|
4
|
+
const curve_sampler_1 = require("./curved-behaviour/curve-sampler");
|
|
2
5
|
/**
|
|
3
6
|
* Alpha over lifetime driven by a curve.
|
|
4
7
|
*
|
|
5
8
|
* Keyframes are sampled using normalized lifetime t in [0..1].
|
|
6
9
|
* Output is clamped to [0..1].
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
class AlphaCurveBehaviour {
|
|
9
12
|
constructor(keyframes, opts) {
|
|
10
13
|
/** Alpha changes over time, so ParticleContainer must treat color as dynamic. */
|
|
11
14
|
this.requires = { color: true };
|
|
12
15
|
this.priority = 50;
|
|
13
16
|
// Always clamp alpha to [0..1]
|
|
14
|
-
this.curve = new Curve(keyframes, { ...opts, clamp: { min: 0, max: 1 } });
|
|
17
|
+
this.curve = new curve_sampler_1.Curve(keyframes, { ...opts, clamp: { min: 0, max: 1 } });
|
|
15
18
|
}
|
|
16
19
|
onSpawn(p) {
|
|
17
20
|
p.alpha = this.curve.sample(0);
|
|
@@ -21,4 +24,5 @@ export class AlphaCurveBehaviour {
|
|
|
21
24
|
p.alpha = this.curve.sample(t);
|
|
22
25
|
}
|
|
23
26
|
}
|
|
27
|
+
exports.AlphaCurveBehaviour = AlphaCurveBehaviour;
|
|
24
28
|
//# sourceMappingURL=alpha-curve-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha-curve-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/alpha-curve-behaviour.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"alpha-curve-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/alpha-curve-behaviour.ts"],"names":[],"mappings":";;;AAGA,oEAAyD;AAGzD;;;;;GAKG;AACH,MAAa,mBAAmB;IAQ5B,YAAY,SAA0B,EAAE,IAAmB;QAP3D,iFAAiF;QACjE,aAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAE3B,aAAQ,GAAG,EAAE,CAAC;QAK1B,+BAA+B;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAK,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAEM,OAAO,CAAC,CAAa;QACxB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,CAAa,EAAE,GAAY,EAAE,QAAkB;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;CACJ;AArBD,kDAqBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curve-key-frame.js","sourceRoot":"","sources":["../../../src/behaviours/curved-behaviour/curve-key-frame.ts"],"names":[],"mappings":""
|
|
1
|
+
{"version":3,"file":"curve-key-frame.js","sourceRoot":"","sources":["../../../src/behaviours/curved-behaviour/curve-key-frame.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Curve = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
2
5
|
/**
|
|
3
6
|
* Lightweight curve sampler for keyframed 1D values over normalized time [0..1].
|
|
4
7
|
*
|
|
@@ -6,14 +9,14 @@ import { Utils } from "../../utils";
|
|
|
6
9
|
* - Endpoints at t=0 and t=1 are ensured (added if missing).
|
|
7
10
|
* - Each segment can have its own easing function.
|
|
8
11
|
*/
|
|
9
|
-
|
|
12
|
+
class Curve {
|
|
10
13
|
constructor(keyframes, opts) {
|
|
11
14
|
this.defaultEase = opts?.defaultEase;
|
|
12
15
|
this.clamp = opts?.clamp;
|
|
13
16
|
// Normalize and sort keyframes.
|
|
14
17
|
const cleaned = (keyframes ?? [])
|
|
15
18
|
.map((k) => ({
|
|
16
|
-
time: Utils.clamp01(k.time),
|
|
19
|
+
time: utils_1.Utils.clamp01(k.time),
|
|
17
20
|
value: k.value,
|
|
18
21
|
ease: k.ease,
|
|
19
22
|
}))
|
|
@@ -36,7 +39,7 @@ export class Curve {
|
|
|
36
39
|
* Input is clamped to [0..1].
|
|
37
40
|
*/
|
|
38
41
|
sample(t01) {
|
|
39
|
-
const t = Utils.clamp01(t01);
|
|
42
|
+
const t = utils_1.Utils.clamp01(t01);
|
|
40
43
|
// Find which segment [k0..k1] contains t.
|
|
41
44
|
const i = this.findSegmentIndex(t);
|
|
42
45
|
const k0 = this.keys[i];
|
|
@@ -46,13 +49,13 @@ export class Curve {
|
|
|
46
49
|
return this.clampValue(k1.value);
|
|
47
50
|
// Normalize t into segment space [0..1].
|
|
48
51
|
let u = (t - k0.time) / span;
|
|
49
|
-
u = Utils.clamp01(u);
|
|
52
|
+
u = utils_1.Utils.clamp01(u);
|
|
50
53
|
// Apply easing for this segment (if any).
|
|
51
54
|
const ease = k0.ease ?? this.defaultEase;
|
|
52
55
|
if (ease)
|
|
53
|
-
u = Utils.clamp01(ease(u));
|
|
56
|
+
u = utils_1.Utils.clamp01(ease(u));
|
|
54
57
|
// Linear interpolation between segment endpoints.
|
|
55
|
-
const v = Utils.lerp(k0.value, k1.value, u);
|
|
58
|
+
const v = utils_1.Utils.lerp(k0.value, k1.value, u);
|
|
56
59
|
return this.clampValue(v);
|
|
57
60
|
}
|
|
58
61
|
/**
|
|
@@ -72,4 +75,5 @@ export class Curve {
|
|
|
72
75
|
return Math.min(this.clamp.max, Math.max(this.clamp.min, v));
|
|
73
76
|
}
|
|
74
77
|
}
|
|
78
|
+
exports.Curve = Curve;
|
|
75
79
|
//# sourceMappingURL=curve-sampler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curve-sampler.js","sourceRoot":"","sources":["../../../src/behaviours/curved-behaviour/curve-sampler.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"curve-sampler.js","sourceRoot":"","sources":["../../../src/behaviours/curved-behaviour/curve-sampler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GravityCurveBehaviour = void 0;
|
|
4
|
+
const curve_sampler_1 = require("../curved-behaviour/curve-sampler");
|
|
2
5
|
/**
|
|
3
6
|
* Applies an acceleration (gx, gy) scaled by a curve over lifetime.
|
|
4
7
|
*
|
|
@@ -13,13 +16,13 @@ import { Curve } from "../curved-behaviour/curve-sampler";
|
|
|
13
16
|
* - Custom "pull" forces controlled by a curve
|
|
14
17
|
*
|
|
15
18
|
*/
|
|
16
|
-
|
|
19
|
+
class GravityCurveBehaviour {
|
|
17
20
|
constructor(gx, gy, strengthKeyframes, opts) {
|
|
18
21
|
this.requires = { position: true };
|
|
19
22
|
this.priority = 0;
|
|
20
23
|
this.gx = gx;
|
|
21
24
|
this.gy = gy;
|
|
22
|
-
this.strength = new Curve(strengthKeyframes, opts);
|
|
25
|
+
this.strength = new curve_sampler_1.Curve(strengthKeyframes, opts);
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
28
|
* Called every frame for each particle.
|
|
@@ -32,4 +35,5 @@ export class GravityCurveBehaviour {
|
|
|
32
35
|
p.vy += this.gy * s * dt;
|
|
33
36
|
}
|
|
34
37
|
}
|
|
38
|
+
exports.GravityCurveBehaviour = GravityCurveBehaviour;
|
|
35
39
|
//# sourceMappingURL=gravity-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gravity-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/gravity-behaviour.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"gravity-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/gravity-behaviour.ts"],"names":[],"mappings":";;;AAGA,qEAA0D;AAE1D;;;;;;;;;;;;;GAaG;AACH,MAAa,qBAAqB;IAW9B,YAAY,EAAU,EAAE,EAAU,EAAE,iBAAkC,EAAE,IAAmB;QAV3E,aAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9B,aAAQ,GAAG,CAAC,CAAC;QAUzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,CAAa,EAAE,EAAU;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAElC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;CACJ;AA5BD,sDA4BC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MovementCurveBehaviour = void 0;
|
|
4
|
+
const curve_sampler_1 = require("../curved-behaviour/curve-sampler");
|
|
2
5
|
/**
|
|
3
6
|
* Drives particle velocity directly using curves over lifetime.
|
|
4
7
|
*
|
|
@@ -14,12 +17,12 @@ import { Curve } from "../curved-behaviour/curve-sampler";
|
|
|
14
17
|
* if you want gravity to modify the curve-driven motion.
|
|
15
18
|
*
|
|
16
19
|
*/
|
|
17
|
-
|
|
20
|
+
class MovementCurveBehaviour {
|
|
18
21
|
constructor(vxKeyframes, vyKeyframes, opts) {
|
|
19
22
|
this.requires = { position: true };
|
|
20
23
|
this.priority = -10;
|
|
21
|
-
this.vxCurve = new Curve(vxKeyframes, opts);
|
|
22
|
-
this.vyCurve = new Curve(vyKeyframes, opts);
|
|
24
|
+
this.vxCurve = new curve_sampler_1.Curve(vxKeyframes, opts);
|
|
25
|
+
this.vyCurve = new curve_sampler_1.Curve(vyKeyframes, opts);
|
|
23
26
|
}
|
|
24
27
|
update(p, dt) {
|
|
25
28
|
const t = p.life > 0 ? p.age / p.life : 1;
|
|
@@ -27,4 +30,5 @@ export class MovementCurveBehaviour {
|
|
|
27
30
|
p.vy = this.vyCurve.sample(t);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
33
|
+
exports.MovementCurveBehaviour = MovementCurveBehaviour;
|
|
30
34
|
//# sourceMappingURL=movement-curve-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movement-curve-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/movement-curve-behaviour.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"movement-curve-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/movement-curve-behaviour.ts"],"names":[],"mappings":";;;AAGA,qEAA0D;AAE1D;;;;;;;;;;;;;;GAcG;AACH,MAAa,sBAAsB;IAO/B,YAAY,WAA4B,EAAE,WAA4B,EAAE,IAAmB;QAN3E,aAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9B,aAAQ,GAAG,CAAC,EAAE,CAAC;QAM3B,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,CAAa,EAAE,EAAU;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;CACJ;AAlBD,wDAkBC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RadialBurstBehaviour = void 0;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
2
5
|
/**
|
|
3
6
|
* Initializes particle velocity on spawn in a radial/cone burst.
|
|
4
7
|
*
|
|
@@ -9,7 +12,7 @@ import { Utils } from "../../utils";
|
|
|
9
12
|
* Notes:
|
|
10
13
|
* - This behaviour does NOT move particles directly; the emitter integrates vx/vy each tick.
|
|
11
14
|
*/
|
|
12
|
-
|
|
15
|
+
class RadialBurstBehaviour {
|
|
13
16
|
constructor(minSpeed, maxSpeed, direction = 0, spread = Math.PI * 2) {
|
|
14
17
|
this.priority = -80;
|
|
15
18
|
this.requires = { position: true };
|
|
@@ -33,10 +36,11 @@ export class RadialBurstBehaviour {
|
|
|
33
36
|
}
|
|
34
37
|
onSpawn(p) {
|
|
35
38
|
const half = this.spread * 0.5;
|
|
36
|
-
const angle = this.direction + Utils.rand(-half, half);
|
|
37
|
-
const speed = Utils.rand(this.minSpeed, this.maxSpeed);
|
|
39
|
+
const angle = this.direction + utils_1.Utils.rand(-half, half);
|
|
40
|
+
const speed = utils_1.Utils.rand(this.minSpeed, this.maxSpeed);
|
|
38
41
|
p.vx = Math.cos(angle) * speed;
|
|
39
42
|
p.vy = Math.sin(angle) * speed;
|
|
40
43
|
}
|
|
41
44
|
}
|
|
45
|
+
exports.RadialBurstBehaviour = RadialBurstBehaviour;
|
|
42
46
|
//# sourceMappingURL=radial-burst-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radial-burst-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/radial-burst-behaviour.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"radial-burst-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/movement-behaviours/radial-burst-behaviour.ts"],"names":[],"mappings":";;;AAEA,uCAAoC;AAGpC;;;;;;;;;GASG;AACH,MAAa,oBAAoB;IA0B7B,YAAY,QAAgB,EAAE,QAAgB,EAAE,YAAoB,CAAC,EAAE,SAAiB,IAAI,CAAC,EAAE,GAAG,CAAC;QAzBnF,aAAQ,GAAG,CAAC,EAAE,CAAC;QAExB,aAAQ,GAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAQzD;;;;;WAKG;QACI,cAAS,GAAW,CAAC,CAAC;QAE7B;;;;WAIG;QACI,WAAM,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAGhC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,OAAO,CAAC,CAAa;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,aAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,aAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;CACJ;AAzCD,oDAyCC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScaleCurveBehaviour = void 0;
|
|
4
|
+
const curve_sampler_1 = require("./curved-behaviour/curve-sampler");
|
|
2
5
|
/**
|
|
3
6
|
* Uniform scale over lifetime driven by a curve.
|
|
4
7
|
*
|
|
5
8
|
* Samples a curve using normalized lifetime t in [0..1] and applies:
|
|
6
9
|
* scaleX = scaleY = curve(t)
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
class ScaleCurveBehaviour {
|
|
9
12
|
constructor(keyframes, opts) {
|
|
10
13
|
this.requires = { vertex: true };
|
|
11
14
|
this.priority = 50;
|
|
12
|
-
this.curve = new Curve(keyframes, { ...opts });
|
|
15
|
+
this.curve = new curve_sampler_1.Curve(keyframes, { ...opts });
|
|
13
16
|
}
|
|
14
17
|
onSpawn(p) {
|
|
15
18
|
const s = this.curve.sample(0);
|
|
@@ -23,4 +26,5 @@ export class ScaleCurveBehaviour {
|
|
|
23
26
|
p.scaleY = s;
|
|
24
27
|
}
|
|
25
28
|
}
|
|
29
|
+
exports.ScaleCurveBehaviour = ScaleCurveBehaviour;
|
|
26
30
|
//# sourceMappingURL=scale-curve-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale-curve-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/scale-curve-behaviour.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"scale-curve-behaviour.js","sourceRoot":"","sources":["../../src/behaviours/scale-curve-behaviour.ts"],"names":[],"mappings":";;;AAGA,oEAAyD;AAGzD;;;;;GAKG;AACH,MAAa,mBAAmB;IAO5B,YAAY,SAA0B,EAAE,IAAmB;QAN3C,aAAQ,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAE5B,aAAQ,GAAG,EAAE,CAAC;QAK1B,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAK,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,OAAO,CAAC,CAAa;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,CAAa,EAAE,GAAY,EAAE,QAAkB;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,CAAC;CACJ;AAvBD,kDAuBC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CircleSpawnBehaviour = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Spawns particles uniformly within a circle centered at (0, 0).
|
|
3
6
|
*
|
|
@@ -5,7 +8,7 @@
|
|
|
5
8
|
* (without sqrt you'd get clustering toward the center).
|
|
6
9
|
*
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
class CircleSpawnBehaviour {
|
|
9
12
|
constructor(radius) {
|
|
10
13
|
this.radius = radius;
|
|
11
14
|
this.priority = -100;
|
|
@@ -17,4 +20,5 @@ export class CircleSpawnBehaviour {
|
|
|
17
20
|
p.y = Math.sin(angle) * r;
|
|
18
21
|
}
|
|
19
22
|
}
|
|
23
|
+
exports.CircleSpawnBehaviour = CircleSpawnBehaviour;
|
|
20
24
|
//# sourceMappingURL=circle-spawn-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle-spawn-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/spawn-behaviours/circle-spawn-behaviour.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"circle-spawn-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/spawn-behaviours/circle-spawn-behaviour.ts"],"names":[],"mappings":";;;AAGA;;;;;;GAMG;AACH,MAAa,oBAAoB;IAG7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAF3B,aAAQ,GAAG,CAAC,GAAG,CAAC;IAEc,CAAC;IAExC,OAAO,CAAC,CAAa;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAEjD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACJ;AAbD,oDAaC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RectangleSpawnBehaviour = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Spawns particles uniformly inside a rectangle centered at (0, 0).
|
|
3
6
|
* */
|
|
4
|
-
|
|
7
|
+
class RectangleSpawnBehaviour {
|
|
5
8
|
constructor(width, height) {
|
|
6
9
|
this.width = width;
|
|
7
10
|
this.height = height;
|
|
@@ -18,4 +21,5 @@ export class RectangleSpawnBehaviour {
|
|
|
18
21
|
return min + Math.random() * (max - min);
|
|
19
22
|
}
|
|
20
23
|
}
|
|
24
|
+
exports.RectangleSpawnBehaviour = RectangleSpawnBehaviour;
|
|
21
25
|
//# sourceMappingURL=rectangle-spawn-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rectangle-spawn-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/spawn-behaviours/rectangle-spawn-behaviour.ts"],"names":[],"mappings":"AAGA;;KAEK;AACL,
|
|
1
|
+
{"version":3,"file":"rectangle-spawn-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/spawn-behaviours/rectangle-spawn-behaviour.ts"],"names":[],"mappings":";;;AAGA;;KAEK;AACL,MAAa,uBAAuB;IAGhC,YACqB,KAAa,EACb,MAAc;QADd,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QAJnB,aAAQ,GAAG,CAAC,GAAG,CAAC;IAK7B,CAAC;IAEG,OAAO,CAAC,CAAa;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAE7B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAClC,IAAI,CAAC,GAAW,EAAE,GAAW;QACjC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;CACJ;AApBD,0DAoBC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StaticRotationBehaviour = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Sets a particle's angular velocity at spawn time.
|
|
3
6
|
*
|
|
@@ -5,7 +8,7 @@
|
|
|
5
8
|
* Instead, it initializes `angleV`, which the emitter integrates each tick.
|
|
6
9
|
*
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
class StaticRotationBehaviour {
|
|
9
12
|
/**
|
|
10
13
|
* @param speed
|
|
11
14
|
* - number → fixed angular velocity (radians/sec)
|
|
@@ -21,4 +24,5 @@ export class StaticRotationBehaviour {
|
|
|
21
24
|
p.angleV = s;
|
|
22
25
|
}
|
|
23
26
|
}
|
|
27
|
+
exports.StaticRotationBehaviour = StaticRotationBehaviour;
|
|
24
28
|
//# sourceMappingURL=static-rotation-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-rotation-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/static-behaviours/static-rotation-behaviour.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"static-rotation-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/static-behaviours/static-rotation-behaviour.ts"],"names":[],"mappings":";;;AAGA;;;;;;GAMG;AACH,MAAa,uBAAuB;IAKhC;;;;OAIG;IACH,YAAmB,KAA4C;QAA5C,UAAK,GAAL,KAAK,CAAuC;QAT/C,aAAQ,GAAG,CAAC,EAAE,CAAC;QAEf,aAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAOoB,CAAC;IAE5D,OAAO,CAAC,CAAa;QACxB,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3H,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,CAAC;CACJ;AAjBD,0DAiBC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StaticScaleBehaviour = void 0;
|
|
1
4
|
/**
|
|
2
5
|
* Sets particle scale at spawn time.
|
|
3
6
|
*
|
|
4
7
|
*/
|
|
5
|
-
|
|
8
|
+
class StaticScaleBehaviour {
|
|
6
9
|
constructor(spawnScale) {
|
|
7
10
|
this.priority = -60;
|
|
8
11
|
this.spawnScale = spawnScale;
|
|
@@ -12,4 +15,5 @@ export class StaticScaleBehaviour {
|
|
|
12
15
|
p.scaleY = this.spawnScale;
|
|
13
16
|
}
|
|
14
17
|
}
|
|
18
|
+
exports.StaticScaleBehaviour = StaticScaleBehaviour;
|
|
15
19
|
//# sourceMappingURL=static-scale-behaviour.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-scale-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/static-behaviours/static-scale-behaviour.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"static-scale-behaviour.js","sourceRoot":"","sources":["../../../src/behaviours/static-behaviours/static-scale-behaviour.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,oBAAoB;IAK7B,YAAY,UAAkB;QAJd,aAAQ,GAAG,CAAC,EAAE,CAAC;QAK3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,OAAO,CAAC,CAAa;QACxB,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,CAAC;CACJ;AAbD,oDAaC"}
|
package/dist/emitter.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Emitter = void 0;
|
|
4
|
+
const pixi_js_1 = require("pixi.js");
|
|
5
|
+
const px_particle_1 = require("./px-particle");
|
|
3
6
|
/**
|
|
4
7
|
* Emitter is a ParticleContainer that owns a pool of {@link PxParticle} instances.
|
|
5
8
|
*
|
|
@@ -9,7 +12,7 @@ import { PxParticle } from "./px-particle";
|
|
|
9
12
|
* - Update active particles each tick (movement, behaviours, textures).
|
|
10
13
|
* - Recycle dead particles back into the pool.
|
|
11
14
|
*/
|
|
12
|
-
|
|
15
|
+
class Emitter extends pixi_js_1.ParticleContainer {
|
|
13
16
|
constructor(options, textureProvider) {
|
|
14
17
|
super({
|
|
15
18
|
label: "Emitter",
|
|
@@ -61,7 +64,7 @@ export class Emitter extends ParticleContainer {
|
|
|
61
64
|
* The actual texture may be replaced on spawn by the provider.
|
|
62
65
|
*/
|
|
63
66
|
for (let i = 0; i < this.maxParticles; i++) {
|
|
64
|
-
const p = new PxParticle({ texture: this.textureProvider.initialTexture() });
|
|
67
|
+
const p = new px_particle_1.PxParticle({ texture: this.textureProvider.initialTexture() });
|
|
65
68
|
this.pool.push(p);
|
|
66
69
|
}
|
|
67
70
|
/**
|
|
@@ -71,7 +74,7 @@ export class Emitter extends ParticleContainer {
|
|
|
71
74
|
*
|
|
72
75
|
* NOTE: currently updateEmitter is still public and can be called manually.
|
|
73
76
|
*/
|
|
74
|
-
this.ticker = options.ticker ?? Ticker.shared;
|
|
77
|
+
this.ticker = options.ticker ?? pixi_js_1.Ticker.shared;
|
|
75
78
|
if (this.mode !== "manual") {
|
|
76
79
|
this.attachTicker();
|
|
77
80
|
}
|
|
@@ -296,7 +299,7 @@ export class Emitter extends ParticleContainer {
|
|
|
296
299
|
this.updateEmitterBound = this.updateEmitter.bind(this);
|
|
297
300
|
}
|
|
298
301
|
if (!this.ticker) {
|
|
299
|
-
this.ticker = Ticker.shared;
|
|
302
|
+
this.ticker = pixi_js_1.Ticker.shared;
|
|
300
303
|
}
|
|
301
304
|
this.ticker.add(this.updateEmitterBound);
|
|
302
305
|
this.tickerAttached = true;
|
|
@@ -337,4 +340,5 @@ export class Emitter extends ParticleContainer {
|
|
|
337
340
|
super.destroy(options);
|
|
338
341
|
}
|
|
339
342
|
}
|
|
343
|
+
exports.Emitter = Emitter;
|
|
340
344
|
//# sourceMappingURL=emitter.js.map
|
package/dist/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParticleContainer, ParticleContainerOptions, ParticleProperties, Ticker } from \"pixi.js\";\r\nimport { Behaviour } from \"./behaviour\";\r\nimport { TextureProvider } from \"./texture-provider\";\r\nimport { PxParticle } from \"./px-particle\";\r\n\r\n/**\r\n * How this emitter produces particles over time:\r\n * - \"rate\": continuously emits at a fixed particles-per-second\r\n * - \"wave\": emits discrete bursts (\"waves\") every interval\r\n * - \"manual\": user code calls emitBurst/emitWave; no ticker hookup\r\n */\r\nexport type EmissionMode = \"rate\" | \"wave\" | \"manual\";\r\n\r\n/**\r\n * Configuration passed to {@link Emitter}.\r\n *\r\n * Notes:\r\n * - In \"rate\" mode, you must provide `ratePerSecond`\r\n * - In \"wave\" mode, you should provide `waveInterval` and `particlesPerWave`\r\n * - In \"manual\" mode, the emitter will NOT auto-update; you trigger emission yourself\r\n */\r\nexport interface EmitterOptions {\r\n /**\r\n * Options forwarded to PixiJS ParticleContainer.\r\n * You can set blendMode, position, etc.\r\n *\r\n * NOTE: dynamicProperties are computed automatically based on behaviours + texture provider.\r\n */\r\n containerOptions?: ParticleContainerOptions;\r\n\r\n /** Maximum number of particles alive at the same time. Also defines the pool size. */\r\n maxParticles: number;\r\n\r\n /** Emission strategy (rate / wave / manual). */\r\n mode: EmissionMode;\r\n\r\n /**\r\n * Particles per second when mode === \"rate\".\r\n */\r\n ratePerSecond?: number;\r\n\r\n /**\r\n * Seconds between waves when mode === \"wave\".\r\n * If omitted, a default is used.\r\n */\r\n waveInterval?: number;\r\n\r\n /**\r\n * How many particles are spawned each wave when mode === \"wave\".\r\n * If omitted, defaults to 1.\r\n */\r\n particlesPerWave?: number;\r\n\r\n /** Particle lifetime in seconds. Each particle chooses a random value in [min, max]. */\r\n lifetime: { min: number; max: number };\r\n\r\n /**\r\n * If true, the emitter automatically emits according to its mode.\r\n * If false, particles can still be spawned using manual methods.\r\n */\r\n emitting?: boolean;\r\n\r\n /**\r\n * Clamp delta-time to avoid huge simulation jumps (tab pause, breakpoint, slow frame, etc).\r\n * This prevents spawning a massive burst and \"teleporting\" particles.\r\n */\r\n maxDeltaSeconds?: number;\r\n\r\n /**\r\n * Behaviours are modular systems applied to particles.\r\n * Typical responsibilities:\r\n * - initialize properties at spawn (velocity, scale, alpha, etc)\r\n * - update properties each frame (curves, gravity, drag, etc)\r\n *\r\n * Behaviours can also declare \"requires\" to enable ParticleContainer dynamicProperties.\r\n */\r\n behaviours?: Behaviour[];\r\n\r\n /**\r\n * If true, particles are added at index 0 (behind existing children).\r\n * Useful for layering (e.g. smoke behind sparks).\r\n */\r\n addAtBack?: boolean;\r\n\r\n /**\r\n * Optional custom ticker (e.g. your app ticker).\r\n * If omitted, uses Ticker.shared.\r\n */\r\n ticker?: Ticker;\r\n}\r\n\r\n/**\r\n * Internally we keep behaviours in a stable sorted array:\r\n * - prio: behaviour priority (lower runs earlier)\r\n * - order: insertion order to break ties (stable ordering)\r\n */\r\ntype SortedBehaviour = { b: Behaviour; order: number; prio: number };\r\n\r\n/**\r\n * ParticleContainer dynamicProperties config.\r\n * Pixi uses this to know which particle attributes must be re-uploaded to GPU each frame.\r\n */\r\ntype DynamicProps = ParticleProperties & Record<string, boolean>;\r\n\r\n/**\r\n * Emitter is a ParticleContainer that owns a pool of {@link PxParticle} instances.\r\n *\r\n * Core responsibilities:\r\n * - Keep a pool of particles to avoid allocations during gameplay.\r\n * - Emit particles according to the selected EmissionMode.\r\n * - Update active particles each tick (movement, behaviours, textures).\r\n * - Recycle dead particles back into the pool.\r\n */\r\nexport class Emitter extends ParticleContainer {\r\n /** Pool capacity / maximum concurrent particles. */\r\n private maxParticles: number;\r\n\r\n /** Current emission mode. */\r\n private mode: EmissionMode;\r\n\r\n /** Particles per second for mode=\"rate\". */\r\n public ratePerSecond?: number;\r\n\r\n /** Wave interval (seconds) for mode=\"wave\". */\r\n public waveInterval?: number;\r\n\r\n /** Particles per wave for mode=\"wave\". */\r\n public particlesPerWave?: number;\r\n\r\n /** Lifetime range (seconds) used for each spawned particle. */\r\n private lifetime: { min: number; max: number };\r\n\r\n /**\r\n * If true, emission is automatic (rate/wave).\r\n * If false, update still runs but no new particles are spawned.\r\n */\r\n public emitting?: boolean;\r\n\r\n /** Delta clamp to keep simulation stable on long frames. */\r\n private maxDeltaSeconds: number;\r\n\r\n /** Whether new particles should be added behind existing particles. */\r\n public addAtBack?: boolean;\r\n\r\n /** Ticker driving updates when not in manual mode. */\r\n private ticker: Ticker;\r\n\r\n /** Responsible for choosing textures and (optionally) updating animated textures. */\r\n private textureProvider: TextureProvider;\r\n\r\n /** Inactive particle pool (reused). */\r\n private readonly pool: PxParticle[] = [];\r\n\r\n /** Active particles currently simulated and rendered. */\r\n private readonly active: PxParticle[] = [];\r\n\r\n /**\r\n * Sorted behaviours (priority + stable insertion order).\r\n * Behaviours are applied in order every frame.\r\n */\r\n private behaviours: SortedBehaviour[] = [];\r\n private nextBehaviourOrder = 0;\r\n\r\n /** Accumulator used to compute spawn counts in rate mode. */\r\n private emitAcc = 0;\r\n\r\n /** Accumulator used to track time between waves in wave mode. */\r\n private waveAcc = 0;\r\n\r\n private updateEmitterBound?: (ticker: Ticker) => void;\r\n private tickerAttached = false;\r\n\r\n constructor(options: EmitterOptions, textureProvider: TextureProvider) {\r\n super({\r\n label: \"Emitter\",\r\n ...options.containerOptions,\r\n\r\n /**\r\n * Important optimization:\r\n * We enable only the dynamic properties that are actually needed\r\n * (based on behaviours + texture provider requirements).\r\n */\r\n dynamicProperties: Emitter.computeDynamicProperties(options.behaviours ?? [], textureProvider),\r\n });\r\n\r\n this.maxParticles = options.maxParticles;\r\n this.mode = options.mode;\r\n this.ratePerSecond = options.ratePerSecond;\r\n this.waveInterval = options.waveInterval;\r\n this.particlesPerWave = options.particlesPerWave;\r\n this.lifetime = options.lifetime;\r\n this.emitting = options.emitting;\r\n this.maxDeltaSeconds = options.maxDeltaSeconds ?? 0.1;\r\n this.addAtBack = options.addAtBack;\r\n\r\n this.textureProvider = textureProvider;\r\n\r\n // Register behaviours (sorted by priority + stable order).\r\n if (options.behaviours) {\r\n for (const behaviour of options.behaviours) {\r\n this.addBehaviour(behaviour);\r\n }\r\n }\r\n\r\n /**\r\n * Pre-allocate particles upfront:\r\n * - avoids runtime allocations / GC spikes\r\n * - allows \"maxParticles\" to be a hard cap\r\n *\r\n * Each pooled particle gets an initial texture (required by Pixi Particle).\r\n * The actual texture may be replaced on spawn by the provider.\r\n */\r\n for (let i = 0; i < this.maxParticles; i++) {\r\n const p = new PxParticle({ texture: this.textureProvider.initialTexture() });\r\n this.pool.push(p);\r\n }\r\n\r\n /**\r\n * In manual mode we do NOT attach to a ticker.\r\n * User code calls emitBurst/emitWave and also needs to call updateEmitter manually\r\n * (or you can provide a separate public update method if you prefer).\r\n *\r\n * NOTE: currently updateEmitter is still public and can be called manually.\r\n */\r\n this.ticker = options.ticker ?? Ticker.shared;\r\n if (this.mode !== \"manual\") {\r\n this.attachTicker();\r\n }\r\n }\r\n\r\n /**\r\n * Adds a behaviour and inserts it into the sorted execution order.\r\n * Priority controls order; ties are resolved by insertion order.\r\n */\r\n private addBehaviour(b: Behaviour): this {\r\n this.behaviours.push({\r\n b,\r\n order: this.nextBehaviourOrder++,\r\n prio: b.priority ?? 0,\r\n });\r\n\r\n // lower priority runs earlier\r\n this.behaviours.sort((a, c) => a.prio - c.prio || a.order - c.order);\r\n\r\n // Optional init hook for behaviour to cache references or precompute curves.\r\n b.init?.(this);\r\n return this;\r\n }\r\n\r\n /**\r\n * Ticker callback: advances simulation and handles emission.\r\n *\r\n * The emitter uses ticker.deltaMS (milliseconds between frames) converted to seconds.\r\n * We clamp dt to maxDeltaSeconds to avoid large jumps and excessive spawning.\r\n */\r\n public updateEmitter(ticker: Ticker): void {\r\n const maxDt = this.maxDeltaSeconds;\r\n let dt = ticker.deltaMS / 1000;\r\n\r\n // Clamp dt for stability (e.g. tab in background).\r\n if (dt > maxDt) dt = maxDt;\r\n if (dt <= 0) return;\r\n\r\n // Spawn new particles if enabled.\r\n if (this.emitting) this.emitParticles(dt);\r\n\r\n /**\r\n * Update particles & kill dead ones.\r\n * Iterate backwards so we can remove by index safely.\r\n */\r\n for (let i = this.active.length - 1; i >= 0; i--) {\r\n const p = this.active[i];\r\n\r\n // Texture provider may animate / swap textures per frame.\r\n this.textureProvider.update?.(p, dt);\r\n\r\n // Base integrator: apply velocity and angular velocity.\r\n // Behaviours can also modify velocity, position, rotation, etc.\r\n p.age += dt;\r\n p.x += p.vx * dt;\r\n p.y += p.vy * dt;\r\n p.rotation += p.angleV * dt;\r\n\r\n // Apply behaviours in sorted order.\r\n for (const entry of this.behaviours) entry.b.update?.(p, dt, this);\r\n\r\n // Kill particle if it exceeded its lifetime.\r\n if (p.age >= p.life) {\r\n this.killAtIndex(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits particles according to the emitter's mode.\r\n * This method is called automatically each tick when emitting=true.\r\n */\r\n private emitParticles(dt: number): void {\r\n if (this.mode === \"rate\") {\r\n const rate = this.ratePerSecond ?? 0;\r\n if (rate <= 0) return;\r\n\r\n /**\r\n * Accumulate fractional time and convert into \"how many particles should we emit\".\r\n * This produces stable emission even with variable frame rates.\r\n */\r\n this.emitAcc += dt;\r\n const want = Math.floor(this.emitAcc * rate);\r\n if (want <= 0) return;\r\n\r\n // Keep the remainder time after spawning `want` particles.\r\n this.emitAcc -= want / rate;\r\n\r\n for (let i = 0; i < want; i++) this.spawnOne();\r\n return;\r\n }\r\n\r\n if (this.mode === \"wave\") {\r\n const interval = this.waveInterval ?? 0.25;\r\n const perWave = this.particlesPerWave ?? 1;\r\n if (interval <= 0 || perWave <= 0) return;\r\n\r\n // Emit full waves when the accumulated time crosses the interval.\r\n this.waveAcc += dt;\r\n while (this.waveAcc >= interval) {\r\n this.waveAcc -= interval;\r\n for (let i = 0; i < perWave; i++) this.spawnOne();\r\n }\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Spawns a single particle from the pool.\r\n *\r\n * IMPORTANT:\r\n * - If the pool is empty, spawning is skipped (hard cap).\r\n * - Texture is selected by TextureProvider at spawn time.\r\n * - Behaviours' onSpawn hooks initialize per-particle state.\r\n */\r\n private spawnOne(): void {\r\n const p = this.pool.pop();\r\n if (!p) return;\r\n\r\n if (this.textureProvider.textureForSpawn) p.texture = this.textureProvider.textureForSpawn(p);\r\n\r\n p.onSpawn();\r\n\r\n // Allow behaviours to initialize the particle for this spawn.\r\n for (const behaviour of this.behaviours) behaviour.b.onSpawn?.(p, this);\r\n\r\n // Add particle to the container (front or back).\r\n if (this.addAtBack) {\r\n this.addParticleAt(p, 0);\r\n } else {\r\n this.addParticle(p);\r\n }\r\n\r\n // Randomize lifetime in [min, max].\r\n const { min, max } = this.lifetime;\r\n p.life = min + Math.random() * Math.max(0, max - min);\r\n\r\n this.active.push(p);\r\n }\r\n\r\n /**\r\n * Kills and recycles a particle at a given index in the active list.\r\n *\r\n * Order of operations:\r\n * 1) behaviour kill hooks (reverse order, mirroring teardown)\r\n * 2) provider kill hook\r\n * 3) reset particle instance\r\n * 4) remove from container + active list\r\n * 5) return to pool\r\n */\r\n private killAtIndex(activeIndex: number): void {\r\n const p = this.active[activeIndex];\r\n\r\n // Call behaviours' teardown in reverse to match common init/apply ordering expectations.\r\n for (let i = this.behaviours.length - 1; i >= 0; i--) {\r\n this.behaviours[i].b.onKill?.(p, this);\r\n }\r\n\r\n this.textureProvider.onKill?.(p);\r\n\r\n p.onKill();\r\n\r\n this.removeParticle(p);\r\n\r\n /**\r\n * Remove from active list using \"swap remove\":\r\n * - O(1)\r\n * - does not preserve ordering (fine for particle sims)\r\n */\r\n const last = this.active.length - 1;\r\n if (activeIndex !== last) this.active[activeIndex] = this.active[last];\r\n this.active.pop();\r\n\r\n this.pool.push(p);\r\n }\r\n\r\n /**\r\n * Immediately kills all active particles and resets emission accumulators.\r\n * Useful when restarting an effect or changing scenes.\r\n */\r\n public clearParticles(): void {\r\n this.emitAcc = 0;\r\n this.waveAcc = 0;\r\n\r\n while (this.active.length > 0) {\r\n this.killAtIndex(this.active.length - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Manual emission helpers.\r\n * Only relevant if mode === \"manual\" or emitting === false.\r\n */\r\n public emitBurst(count: number): void {\r\n for (let i = 0; i < count; i++) this.spawnOne();\r\n }\r\n\r\n public emitWave(): void {\r\n const n = this.particlesPerWave ?? 0;\r\n for (let i = 0; i < n; i++) this.spawnOne();\r\n }\r\n\r\n /**\r\n * Computes ParticleContainer dynamicProperties from:\r\n * - TextureProvider.requires\r\n * - each Behaviour.requires\r\n *\r\n * Keeping these minimal is important for performance:\r\n * enabling extra dynamic properties can increase per-frame GPU uploads.\r\n */\r\n private static computeDynamicProperties(behaviours: Behaviour[], provider: TextureProvider): DynamicProps {\r\n const props: DynamicProps = {\r\n position: false,\r\n rotation: false,\r\n vertex: false,\r\n uvs: false,\r\n color: false,\r\n };\r\n\r\n // Texture provider may require updates like uvs (animated textures) or vertex.\r\n if (provider.requires) {\r\n for (const key in provider.requires) {\r\n props[key] = true;\r\n }\r\n }\r\n\r\n // Behaviours declare which GPU-updated properties they touch over time.\r\n for (const b of behaviours) {\r\n if (!b.requires) continue;\r\n\r\n for (const key in b.requires) {\r\n props[key] = true;\r\n }\r\n }\r\n\r\n return props;\r\n }\r\n\r\n /**\r\n * Attaches the emitter update loop to the configured ticker.\r\n */\r\n private attachTicker(): void {\r\n if (this.tickerAttached) return;\r\n if (!this.updateEmitterBound) {\r\n this.updateEmitterBound = this.updateEmitter.bind(this);\r\n }\r\n\r\n if (!this.ticker) {\r\n this.ticker = Ticker.shared;\r\n }\r\n\r\n this.ticker.add(this.updateEmitterBound);\r\n this.tickerAttached = true;\r\n }\r\n\r\n /**\r\n * Detaches the emitter update loop from the ticker.\r\n */\r\n private detachTicker(): void {\r\n if (!this.tickerAttached) return;\r\n if (!this.ticker || !this.updateEmitterBound) return;\r\n this.ticker.remove(this.updateEmitterBound);\r\n this.tickerAttached = false;\r\n }\r\n\r\n /**\r\n * Changes the emission mode at runtime.\r\n *\r\n * - Switching to \"manual\" detaches the ticker.\r\n * - Switching to \"rate\" or \"wave\" attaches the ticker.\r\n *\r\n */\r\n public setMode(mode: EmissionMode): void {\r\n if (this.mode === mode) return;\r\n\r\n const wasManual = this.mode === \"manual\";\r\n const willBeManual = mode === \"manual\";\r\n\r\n this.mode = mode;\r\n\r\n if (!wasManual && willBeManual) {\r\n this.detachTicker();\r\n } else if (wasManual && !willBeManual) {\r\n this.attachTicker();\r\n }\r\n }\r\n\r\n public override destroy(options?: any): void {\r\n this.detachTicker();\r\n super.destroy(options);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./behaviour"), exports);
|
|
18
|
+
__exportStar(require("./emitter"), exports);
|
|
19
|
+
__exportStar(require("./texture-provider"), exports);
|
|
20
|
+
__exportStar(require("./behaviours/alpha-behaviour"), exports);
|
|
21
|
+
__exportStar(require("./behaviours/alpha-curve-behaviour"), exports);
|
|
22
|
+
__exportStar(require("./behaviours/scale-curve-behaviour"), exports);
|
|
23
|
+
__exportStar(require("./behaviours/curved-behaviour/curve-key-frame"), exports);
|
|
24
|
+
__exportStar(require("./behaviours/curved-behaviour/curve-sampler"), exports);
|
|
25
|
+
__exportStar(require("./behaviours/movement-behaviours/gravity-behaviour"), exports);
|
|
26
|
+
__exportStar(require("./behaviours/movement-behaviours/movement-curve-behaviour"), exports);
|
|
27
|
+
__exportStar(require("./behaviours/movement-behaviours/radial-burst-behaviour"), exports);
|
|
28
|
+
__exportStar(require("./behaviours/spawn-behaviours/circle-spawn-behaviour"), exports);
|
|
29
|
+
__exportStar(require("./behaviours/spawn-behaviours/rectangle-spawn-behaviour"), exports);
|
|
30
|
+
__exportStar(require("./behaviours/static-behaviours/static-rotation-behaviour"), exports);
|
|
31
|
+
__exportStar(require("./behaviours/static-behaviours/static-scale-behaviour"), exports);
|
|
32
|
+
__exportStar(require("./texture-providers/animated-texture-provider"), exports);
|
|
33
|
+
__exportStar(require("./texture-providers/single-texture-provider"), exports);
|
|
34
|
+
__exportStar(require("./texture-providers/weighted-texture-provider"), exports);
|
|
19
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B;AAC1B,qDAAmC;AACnC,+DAA6C;AAC7C,qEAAmD;AACnD,qEAAmD;AACnD,gFAA8D;AAC9D,8EAA4D;AAC5D,qFAAmE;AACnE,4FAA0E;AAC1E,0FAAwE;AACxE,uFAAqE;AACrE,0FAAwE;AACxE,2FAAyE;AACzE,wFAAsE;AACtE,gFAA8D;AAC9D,8EAA4D;AAC5D,gFAA8D"}
|
package/dist/px-particle.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PxParticle = void 0;
|
|
4
|
+
const pixi_js_1 = require("pixi.js");
|
|
2
5
|
/**
|
|
3
6
|
* PxParticle extends PixiJS {@link Particle} with simulation state.
|
|
4
7
|
*
|
|
@@ -11,7 +14,7 @@ import { Particle } from "pixi.js";
|
|
|
11
14
|
* Particles are never destroyed during runtime.
|
|
12
15
|
* They are recycled via onKill() and reused via onSpawn().
|
|
13
16
|
*/
|
|
14
|
-
|
|
17
|
+
class PxParticle extends pixi_js_1.Particle {
|
|
15
18
|
constructor(options) {
|
|
16
19
|
// Center anchor by default
|
|
17
20
|
options.anchorX = 0.5;
|
|
@@ -73,4 +76,5 @@ export class PxParticle extends Particle {
|
|
|
73
76
|
this.y = 0;
|
|
74
77
|
}
|
|
75
78
|
}
|
|
79
|
+
exports.PxParticle = PxParticle;
|
|
76
80
|
//# sourceMappingURL=px-particle.js.map
|
package/dist/px-particle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"px-particle.js","sourceRoot":"","sources":["../src/px-particle.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"px-particle.js","sourceRoot":"","sources":["../src/px-particle.ts"],"names":[],"mappings":";;;AAAA,qCAAoD;AAYpD;;;;;;;;;;;GAWG;AACH,MAAa,UAAW,SAAQ,kBAAQ;IAsBpC,YAAY,OAAwB;QAChC,2BAA2B;QAC3B,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC;QACtB,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QA1BnB,2BAA2B;QACpB,QAAG,GAAG,CAAC,CAAC;QAEf,uEAAuE;QAChE,SAAI,GAAG,CAAC,CAAC;QAEhB,8CAA8C;QACvC,OAAE,GAAG,CAAC,CAAC;QAEd,8CAA8C;QACvC,OAAE,GAAG,CAAC,CAAC;QAEd,8CAA8C;QACvC,WAAM,GAAG,CAAC,CAAC;QAed,kCAAkC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM;QACT,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC3C,CAAC;IAED;;;;;;;;OAQG;IACI,OAAO;QACV,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAEvC,qBAAqB;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAErB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;CACJ;AAnFD,gCAmFC"}
|
package/dist/texture-provider.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture-provider.js","sourceRoot":"","sources":["../src/texture-provider.ts"],"names":[],"mappings":""
|
|
1
|
+
{"version":3,"file":"texture-provider.js","sourceRoot":"","sources":["../src/texture-provider.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnimatedTextureProvider = void 0;
|
|
4
|
+
const pixi_js_1 = require("pixi.js");
|
|
2
5
|
/**
|
|
3
6
|
* Flipbook-style animated texture provider.
|
|
4
7
|
*
|
|
@@ -13,7 +16,7 @@ import { Texture } from "pixi.js";
|
|
|
13
16
|
*
|
|
14
17
|
* so the Emitter enables the correct ParticleContainer dynamicProperties.
|
|
15
18
|
*/
|
|
16
|
-
|
|
19
|
+
class AnimatedTextureProvider {
|
|
17
20
|
constructor(options) {
|
|
18
21
|
/** UV updates are required because textures change during lifetime. */
|
|
19
22
|
this.requires = { uvs: true };
|
|
@@ -22,7 +25,7 @@ export class AnimatedTextureProvider {
|
|
|
22
25
|
this.frames = [];
|
|
23
26
|
for (let i = start; i < options.numberOfFrames + start; i++) {
|
|
24
27
|
const alias = `${options.texturePrefix}${i.toString().padStart(padLength, "0")}`;
|
|
25
|
-
this.frames.push(Texture.from(alias));
|
|
28
|
+
this.frames.push(pixi_js_1.Texture.from(alias));
|
|
26
29
|
}
|
|
27
30
|
if (this.frames.length === 0) {
|
|
28
31
|
throw new Error("AnimatedTextureProvider: no frames generated");
|
|
@@ -69,4 +72,5 @@ export class AnimatedTextureProvider {
|
|
|
69
72
|
p.animatedParticleState = undefined;
|
|
70
73
|
}
|
|
71
74
|
}
|
|
75
|
+
exports.AnimatedTextureProvider = AnimatedTextureProvider;
|
|
72
76
|
//# sourceMappingURL=animated-texture-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/animated-texture-provider.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"animated-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/animated-texture-provider.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAsDlC;;;;;;;;;;;;;GAaG;AACH,MAAa,uBAAuB;IAahC,YAAY,OAAuC;QAZnD,uEAAuE;QACvD,aAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAYrC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QAEhF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IACrC,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,eAAe,CAAC,CAAa;QAChC,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,CAAa,EAAE,EAAU;QACnC,IAAI,CAAC,CAAC,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO;QAEhE,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,IAAI,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEnG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,CAAa;QACvB,CAAC,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,CAAC;CACJ;AA7ED,0DA6EC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SingleTextureProvider = void 0;
|
|
4
|
+
const pixi_js_1 = require("pixi.js");
|
|
2
5
|
/**
|
|
3
6
|
* Always returns the same texture for every particle.
|
|
4
7
|
* Useful for simple effects (sparks, smoke puffs, etc).
|
|
5
8
|
*/
|
|
6
|
-
|
|
9
|
+
class SingleTextureProvider {
|
|
7
10
|
constructor(textureId) {
|
|
8
11
|
this.textureId = textureId;
|
|
9
|
-
this.texture = Texture.from(textureId);
|
|
12
|
+
this.texture = pixi_js_1.Texture.from(textureId);
|
|
10
13
|
}
|
|
11
14
|
initialTexture() {
|
|
12
15
|
return this.texture;
|
|
13
16
|
}
|
|
14
17
|
}
|
|
18
|
+
exports.SingleTextureProvider = SingleTextureProvider;
|
|
15
19
|
//# sourceMappingURL=single-texture-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/single-texture-provider.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"single-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/single-texture-provider.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAGlC;;;GAGG;AACH,MAAa,qBAAqB;IAM9B,YAAY,SAAiB;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,iBAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAdD,sDAcC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WeightedTextureProvider = void 0;
|
|
4
|
+
const pixi_js_1 = require("pixi.js");
|
|
2
5
|
/**
|
|
3
6
|
* Chooses a random texture at spawn time using weighted probabilities.
|
|
4
7
|
*
|
|
5
8
|
* - Good for variety (different spark shapes, debris pieces, etc.)
|
|
6
9
|
* - Selection happens only on spawn (not per frame)
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
class WeightedTextureProvider {
|
|
9
12
|
constructor(items, fallbackTextureId) {
|
|
10
13
|
this.totalWeight = 0;
|
|
11
|
-
this.fallback = Texture.from(fallbackTextureId);
|
|
14
|
+
this.fallback = pixi_js_1.Texture.from(fallbackTextureId);
|
|
12
15
|
// Pre-cache textures and compute total weight (ignoring negatives)
|
|
13
16
|
this.items = items.map((it) => ({
|
|
14
|
-
texture: Texture.from(it.textureId),
|
|
17
|
+
texture: pixi_js_1.Texture.from(it.textureId),
|
|
15
18
|
weight: Math.max(0, it.weight),
|
|
16
19
|
}));
|
|
17
20
|
for (const it of this.items)
|
|
@@ -33,4 +36,5 @@ export class WeightedTextureProvider {
|
|
|
33
36
|
return this.items[this.items.length - 1].texture;
|
|
34
37
|
}
|
|
35
38
|
}
|
|
39
|
+
exports.WeightedTextureProvider = WeightedTextureProvider;
|
|
36
40
|
//# sourceMappingURL=weighted-texture-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weighted-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/weighted-texture-provider.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"weighted-texture-provider.js","sourceRoot":"","sources":["../../src/texture-providers/weighted-texture-provider.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAUlC;;;;;GAKG;AACH,MAAa,uBAAuB;IAMhC,YAAY,KAAwB,EAAE,iBAAyB;QAFvD,gBAAW,GAAG,CAAC,CAAC;QAGpB,IAAI,CAAC,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEhD,mEAAmE;QACnE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,OAAO,EAAE,iBAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;SACjC,CAAC,CAAC,CAAC;QAEJ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC;IAC/D,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,eAAe,CAAC,EAAc;QACjC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QAE3E,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAEzC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;YACf,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,oCAAoC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,CAAC;IACtD,CAAC;CACJ;AAnCD,0DAmCC"}
|
package/dist/utils.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Utils = void 0;
|
|
4
|
+
class Utils {
|
|
2
5
|
static lerp(a, b, t) {
|
|
3
6
|
return a + (b - a) * t;
|
|
4
7
|
}
|
|
@@ -9,4 +12,5 @@ export class Utils {
|
|
|
9
12
|
return min + Math.random() * (max - min);
|
|
10
13
|
}
|
|
11
14
|
}
|
|
15
|
+
exports.Utils = Utils;
|
|
12
16
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IACP,MAAM,CAAC,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,CAAS;QAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,GAAW,EAAE,GAAW;QACvC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;CACJ;AAZD,sBAYC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pixi-particles-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "High-performance PixiJS v8 particle engine with behaviours and pooling",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"particle-system",
|
|
20
20
|
"webgl"
|
|
21
21
|
],
|
|
22
|
-
"type": "
|
|
22
|
+
"type": "commonjs",
|
|
23
23
|
"main": "./dist/index.js",
|
|
24
24
|
"types": "./dist/index.d.ts",
|
|
25
25
|
"exports": {
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
],
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc -p tsconfig.json",
|
|
39
|
+
"prepare": "npm run build",
|
|
39
40
|
"prepublishOnly": "npm run build",
|
|
40
41
|
"watch": "tsc -w -p tsconfig.json"
|
|
41
42
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=behaviour-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"behaviour-utils.d.ts","sourceRoot":"","sources":["../../src/behaviours/behaviour-utils.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"behaviour-utils.js","sourceRoot":"","sources":["../../src/behaviours/behaviour-utils.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|