custom-pixi-particles 8.7.8 → 8.8.0
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/lib/behaviour/SpawnBehaviour.d.ts +4 -0
- package/dist/lib/behaviour/SpawnBehaviour.js +7 -2
- package/dist/lib/behaviour/SpawnBehaviour.js.map +1 -1
- package/dist/lib/effects/DissolveEffect.d.ts +2 -2
- package/dist/lib/effects/DissolveEffect.js +44 -47
- package/dist/lib/effects/DissolveEffect.js.map +1 -1
- package/dist/lib/effects/GhostEffect.js +3 -5
- package/dist/lib/effects/GhostEffect.js.map +1 -1
- package/dist/lib/effects/GlitchEffect.d.ts +2 -2
- package/dist/lib/effects/GlitchEffect.js +15 -8
- package/dist/lib/effects/GlitchEffect.js.map +1 -1
- package/dist/lib/effects/MagneticAssemblyEffect.d.ts +2 -2
- package/dist/lib/effects/MagneticAssemblyEffect.js +13 -7
- package/dist/lib/effects/MagneticAssemblyEffect.js.map +1 -1
- package/dist/lib/effects/MeltEffect.d.ts +0 -7
- package/dist/lib/effects/MeltEffect.js +82 -151
- package/dist/lib/effects/MeltEffect.js.map +1 -1
- package/dist/lib/effects/ShatterEffect.d.ts +2 -2
- package/dist/lib/effects/ShatterEffect.js +33 -24
- package/dist/lib/effects/ShatterEffect.js.map +1 -1
- package/dist/lib/emitter/Emitter.js +2 -2
- package/dist/lib/emitter/Emitter.js.map +1 -1
- package/dist/lib/pixi/Renderer.d.ts +4 -3
- package/dist/lib/pixi/Renderer.js +14 -8
- package/dist/lib/pixi/Renderer.js.map +1 -1
- package/dist/lib/pixi/TestRenderer.d.ts +3 -2
- package/dist/lib/pixi/TestRenderer.js +5 -5
- package/dist/lib/pixi/TestRenderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlitchEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/GlitchEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"GlitchEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/GlitchEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ParticleContainer, Sprite } from 'pixi.js';
|
|
2
2
|
export type AssemblyMode = 'random-scatter' | 'from-center' | 'off-screen' | 'vortex';
|
|
3
3
|
export interface IMagneticAssemblyOptions {
|
|
4
4
|
gridCols?: number;
|
|
@@ -10,7 +10,7 @@ export interface IMagneticAssemblyOptions {
|
|
|
10
10
|
mode?: AssemblyMode;
|
|
11
11
|
startAlpha?: number;
|
|
12
12
|
}
|
|
13
|
-
export default class MagneticAssemblyEffect extends
|
|
13
|
+
export default class MagneticAssemblyEffect extends ParticleContainer {
|
|
14
14
|
private sourceSprite;
|
|
15
15
|
private fragments;
|
|
16
16
|
private isProcessing;
|
|
@@ -7,19 +7,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { ParticleContainer, Rectangle, Sprite, Texture, Ticker } from 'pixi.js';
|
|
11
11
|
import ParticlePool from '../ParticlePool';
|
|
12
12
|
import Random from '../util/Random';
|
|
13
|
-
export default class MagneticAssemblyEffect extends
|
|
13
|
+
export default class MagneticAssemblyEffect extends ParticleContainer {
|
|
14
14
|
constructor(sourceSprite, options = {}) {
|
|
15
15
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
16
|
-
|
|
16
|
+
const cols = (_a = options.gridCols) !== null && _a !== void 0 ? _a : 10;
|
|
17
|
+
const rows = (_b = options.gridRows) !== null && _b !== void 0 ? _b : 10;
|
|
18
|
+
super(cols * rows, {
|
|
19
|
+
vertices: true,
|
|
20
|
+
position: true,
|
|
21
|
+
uvs: true,
|
|
22
|
+
alpha: true,
|
|
23
|
+
rotation: true,
|
|
24
|
+
});
|
|
17
25
|
this.sourceSprite = sourceSprite;
|
|
18
26
|
this.fragments = [];
|
|
19
27
|
this.isProcessing = false;
|
|
20
28
|
this.currentTime = 0;
|
|
21
|
-
const cols = (_a = options.gridCols) !== null && _a !== void 0 ? _a : 10;
|
|
22
|
-
const rows = (_b = options.gridRows) !== null && _b !== void 0 ? _b : 10;
|
|
23
29
|
this.options = {
|
|
24
30
|
gridCols: cols,
|
|
25
31
|
gridRows: rows,
|
|
@@ -37,7 +43,7 @@ export default class MagneticAssemblyEffect extends Container {
|
|
|
37
43
|
}
|
|
38
44
|
prepare() {
|
|
39
45
|
const texture = this.sourceSprite.texture;
|
|
40
|
-
if (!texture || !texture.
|
|
46
|
+
if (!texture || !texture.valid)
|
|
41
47
|
return;
|
|
42
48
|
const { gridCols, gridRows, scatterRange, mode, stagger } = this.options;
|
|
43
49
|
const texFrame = texture.frame;
|
|
@@ -52,7 +58,7 @@ export default class MagneticAssemblyEffect extends Container {
|
|
|
52
58
|
const y1 = Math.floor(row * stepH);
|
|
53
59
|
// Create sub-texture
|
|
54
60
|
const fragRect = new Rectangle(texFrame.x + x1, texFrame.y + y1, stepW, stepH);
|
|
55
|
-
const fragTex = new Texture(
|
|
61
|
+
const fragTex = new Texture(texture.baseTexture, fragRect);
|
|
56
62
|
const sprite = new Sprite(fragTex);
|
|
57
63
|
sprite.anchor.set(0.5);
|
|
58
64
|
sprite.scale.set(scale);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MagneticAssemblyEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MagneticAssemblyEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MagneticAssemblyEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MagneticAssemblyEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ export interface IMeltEffectOptions {
|
|
|
8
8
|
duration?: number;
|
|
9
9
|
blurAmount?: number;
|
|
10
10
|
threshold?: number;
|
|
11
|
-
useCustomBlur?: boolean;
|
|
12
11
|
}
|
|
13
12
|
export default class MeltEffect extends Container {
|
|
14
13
|
private sourceSprite;
|
|
@@ -20,16 +19,10 @@ export default class MeltEffect extends Container {
|
|
|
20
19
|
private currentTime;
|
|
21
20
|
constructor(sourceSprite: Sprite, options?: IMeltEffectOptions);
|
|
22
21
|
private prepare;
|
|
23
|
-
private updateTexelSize;
|
|
24
22
|
start(): Promise<void>;
|
|
25
23
|
melt(): Promise<void>;
|
|
26
24
|
private update;
|
|
27
25
|
private removeFragment;
|
|
28
26
|
private finish;
|
|
29
|
-
destroy(options?: boolean | {
|
|
30
|
-
children?: boolean;
|
|
31
|
-
texture?: boolean;
|
|
32
|
-
baseTexture?: boolean;
|
|
33
|
-
}): void;
|
|
34
27
|
static melt(sprite: Sprite, options?: IMeltEffectOptions): Promise<void>;
|
|
35
28
|
}
|
|
@@ -7,101 +7,54 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { Container, Filter, ParticleContainer, Rectangle, Sprite, Texture, Ticker } from 'pixi.js';
|
|
11
11
|
import ParticlePool from '../ParticlePool';
|
|
12
12
|
import Random from '../util/Random';
|
|
13
|
-
//
|
|
14
|
-
const standardVertex = `
|
|
15
|
-
in vec2 aPosition;
|
|
16
|
-
out vec2 vTextureCoord;
|
|
17
|
-
|
|
18
|
-
uniform vec4 uInputSize;
|
|
19
|
-
uniform vec4 uOutputFrame;
|
|
20
|
-
uniform vec4 uOutputTexture;
|
|
21
|
-
|
|
22
|
-
vec4 filterVertexPosition(void) {
|
|
23
|
-
vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;
|
|
24
|
-
position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;
|
|
25
|
-
position.y = (position.y * (2.0 / uOutputTexture.z / uOutputTexture.y)) - uOutputTexture.z;
|
|
26
|
-
return vec4(position, 0.0, 1.0);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
vec2 filterTextureCoord(void) {
|
|
30
|
-
return aPosition * (uOutputFrame.zw * uInputSize.zw);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
void main(void) {
|
|
34
|
-
gl_Position = filterVertexPosition();
|
|
35
|
-
vTextureCoord = filterTextureCoord();
|
|
36
|
-
}
|
|
37
|
-
`;
|
|
38
|
-
// Custom blur (fallback) – uses texelSize scaling
|
|
13
|
+
// Simple blur shader (box blur)
|
|
39
14
|
const blurFrag = `
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
uniform
|
|
43
|
-
uniform float
|
|
15
|
+
precision mediump float;
|
|
16
|
+
varying vec2 vTextureCoord;
|
|
17
|
+
uniform sampler2D uSampler;
|
|
18
|
+
uniform float uBlur;
|
|
44
19
|
|
|
45
|
-
void main(void) {
|
|
46
|
-
|
|
47
|
-
|
|
20
|
+
void main(void) {
|
|
21
|
+
vec4 sum = vec4(0.0);
|
|
22
|
+
float blurAmount = uBlur * 0.01; // Scale blur amount
|
|
48
23
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
24
|
+
// Sample 9 pixels in a 3x3 grid
|
|
25
|
+
for(int i = -1; i <= 1; i++) {
|
|
26
|
+
for(int j = -1; j <= 1; j++) {
|
|
27
|
+
vec2 offset = vec2(float(i), float(j)) * blurAmount;
|
|
28
|
+
sum += texture2D(uSampler, vTextureCoord + offset);
|
|
29
|
+
}
|
|
54
30
|
}
|
|
55
|
-
}
|
|
56
31
|
|
|
57
|
-
|
|
58
|
-
}
|
|
32
|
+
gl_FragColor = sum / 9.0;
|
|
33
|
+
}
|
|
59
34
|
`;
|
|
60
|
-
//
|
|
35
|
+
// Simple threshold shader to create the "Metaball" effect
|
|
61
36
|
const thresholdFrag = `
|
|
62
|
-
|
|
63
|
-
uniform sampler2D
|
|
64
|
-
uniform float threshold;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
37
|
+
varying vec2 vTextureCoord;
|
|
38
|
+
uniform sampler2D uSampler;
|
|
39
|
+
uniform float threshold;
|
|
40
|
+
void main(void) {
|
|
41
|
+
vec4 color = texture2D(uSampler, vTextureCoord);
|
|
42
|
+
if (color.a > threshold) {
|
|
43
|
+
color.a = 1.0;
|
|
44
|
+
} else {
|
|
45
|
+
color.a = 0.0;
|
|
46
|
+
}
|
|
47
|
+
gl_FragColor = color;
|
|
48
|
+
}
|
|
71
49
|
`;
|
|
72
50
|
export default class MeltEffect extends Container {
|
|
73
51
|
constructor(sourceSprite, options = {}) {
|
|
74
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
52
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
75
53
|
super();
|
|
76
54
|
this.sourceSprite = sourceSprite;
|
|
77
55
|
this.fragments = [];
|
|
78
56
|
this.isProcessing = false;
|
|
79
57
|
this.currentTime = 0;
|
|
80
|
-
this.update = () => {
|
|
81
|
-
if (!this.isProcessing)
|
|
82
|
-
return;
|
|
83
|
-
const dt = Ticker.shared.deltaMS / 1000;
|
|
84
|
-
this.currentTime += dt;
|
|
85
|
-
for (let i = this.fragments.length - 1; i >= 0; i--) {
|
|
86
|
-
const f = this.fragments[i];
|
|
87
|
-
const p = f.particle;
|
|
88
|
-
p.velocity.y += this.options.gravity * dt;
|
|
89
|
-
p.velocity.x *= this.options.viscosity;
|
|
90
|
-
p.velocity.y *= this.options.viscosity;
|
|
91
|
-
p.x += p.velocity.x * dt;
|
|
92
|
-
p.y += p.velocity.y * dt;
|
|
93
|
-
f.sprite.x = p.x;
|
|
94
|
-
f.sprite.y = p.y;
|
|
95
|
-
const lifeRatio = Math.max(0, 1 - this.currentTime / this.options.duration);
|
|
96
|
-
f.sprite.scale.set(this.sourceSprite.scale.x * lifeRatio, this.sourceSprite.scale.y * lifeRatio);
|
|
97
|
-
if (lifeRatio <= 0) {
|
|
98
|
-
this.removeFragment(i);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (this.fragments.length === 0) {
|
|
102
|
-
this.finish();
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
58
|
const cols = (_a = options.gridCols) !== null && _a !== void 0 ? _a : 15;
|
|
106
59
|
const rows = (_b = options.gridRows) !== null && _b !== void 0 ? _b : 15;
|
|
107
60
|
this.options = {
|
|
@@ -111,64 +64,39 @@ export default class MeltEffect extends Container {
|
|
|
111
64
|
viscosity: (_d = options.viscosity) !== null && _d !== void 0 ? _d : 0.98,
|
|
112
65
|
horizontalSpread: (_e = options.horizontalSpread) !== null && _e !== void 0 ? _e : 50,
|
|
113
66
|
duration: (_f = options.duration) !== null && _f !== void 0 ? _f : 2.5,
|
|
114
|
-
blurAmount: (_g = options.blurAmount) !== null && _g !== void 0 ? _g :
|
|
67
|
+
blurAmount: (_g = options.blurAmount) !== null && _g !== void 0 ? _g : 6,
|
|
115
68
|
threshold: (_h = options.threshold) !== null && _h !== void 0 ? _h : 0.5,
|
|
116
|
-
useCustomBlur: (_j = options.useCustomBlur) !== null && _j !== void 0 ? _j : false,
|
|
117
69
|
};
|
|
118
|
-
|
|
70
|
+
// We use a internal ParticleContainer so we can apply filters to it
|
|
71
|
+
this.pContainer = new ParticleContainer(cols * rows, {
|
|
72
|
+
vertices: true,
|
|
73
|
+
position: true,
|
|
74
|
+
uvs: true,
|
|
75
|
+
alpha: true,
|
|
76
|
+
tint: true,
|
|
77
|
+
});
|
|
119
78
|
this.addChild(this.pContainer);
|
|
120
79
|
this.x = sourceSprite.x;
|
|
121
80
|
this.y = sourceSprite.y;
|
|
122
81
|
this.rotation = sourceSprite.rotation;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
vertex: standardVertex,
|
|
130
|
-
fragment: blurFrag,
|
|
131
|
-
}),
|
|
132
|
-
resources: {
|
|
133
|
-
blurUniforms: {
|
|
134
|
-
uBlurRadius: { value: this.options.blurAmount, type: 'f32' },
|
|
135
|
-
uTexelSize: { value: new Float32Array([1 / 256, 1 / 256]), type: 'vec2<f32>' },
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
// Recommended: built-in BlurFilter (isotropic blur on both axes)
|
|
142
|
-
blurFilter = new BlurFilter({
|
|
143
|
-
strength: this.options.blurAmount,
|
|
144
|
-
quality: 4, // 2–6 (higher = better quality, slower)
|
|
145
|
-
kernelSize: 5, // 5,7,9,11,13,15
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
const thresholdFilter = new Filter({
|
|
149
|
-
glProgram: new GlProgram({
|
|
150
|
-
vertex: standardVertex,
|
|
151
|
-
fragment: thresholdFrag,
|
|
152
|
-
}),
|
|
153
|
-
resources: {
|
|
154
|
-
thresholdUniforms: {
|
|
155
|
-
threshold: { value: this.options.threshold, type: 'f32' },
|
|
156
|
-
},
|
|
157
|
-
},
|
|
82
|
+
// Apply the Metaball Hook: Blur + Threshold
|
|
83
|
+
const blurFilter = new Filter(undefined, blurFrag, {
|
|
84
|
+
uBlur: this.options.blurAmount,
|
|
85
|
+
});
|
|
86
|
+
const thresholdFilter = new Filter(undefined, thresholdFrag, {
|
|
87
|
+
threshold: this.options.threshold,
|
|
158
88
|
});
|
|
159
89
|
this.pContainer.filters = [blurFilter, thresholdFilter];
|
|
160
90
|
}
|
|
161
91
|
prepare() {
|
|
162
92
|
const texture = this.sourceSprite.texture;
|
|
163
|
-
|
|
164
|
-
if (!texture || !texture.source)
|
|
93
|
+
if (!texture || !texture.valid)
|
|
165
94
|
return;
|
|
166
95
|
const { gridCols, gridRows, horizontalSpread } = this.options;
|
|
167
96
|
const texFrame = texture.frame;
|
|
168
97
|
const stepW = texFrame.width / gridCols;
|
|
169
98
|
const stepH = texFrame.height / gridRows;
|
|
170
|
-
const
|
|
171
|
-
const scaleY = this.sourceSprite.scale.y;
|
|
99
|
+
const scale = this.sourceSprite.scale.x;
|
|
172
100
|
const anchorX = this.sourceSprite.anchor.x;
|
|
173
101
|
const anchorY = this.sourceSprite.anchor.y;
|
|
174
102
|
for (let row = 0; row < gridRows; row++) {
|
|
@@ -176,43 +104,23 @@ export default class MeltEffect extends Container {
|
|
|
176
104
|
const x1 = Math.floor(col * stepW);
|
|
177
105
|
const y1 = Math.floor(row * stepH);
|
|
178
106
|
const fragRect = new Rectangle(texFrame.x + x1, texFrame.y + y1, stepW, stepH);
|
|
179
|
-
const fragTex = new Texture(
|
|
107
|
+
const fragTex = new Texture(texture.baseTexture, fragRect);
|
|
180
108
|
const sprite = new Sprite(fragTex);
|
|
181
109
|
sprite.anchor.set(0.5);
|
|
182
|
-
sprite.scale.set(
|
|
183
|
-
const lx = (x1 - texFrame.width * anchorX + stepW / 2) *
|
|
184
|
-
const ly = (y1 - texFrame.height * anchorY + stepH / 2) *
|
|
110
|
+
sprite.scale.set(scale);
|
|
111
|
+
const lx = (x1 - texFrame.width * anchorX + stepW / 2) * scale;
|
|
112
|
+
const ly = (y1 - texFrame.height * anchorY + stepH / 2) * scale;
|
|
185
113
|
const p = ParticlePool.global.pop();
|
|
186
114
|
p.reset();
|
|
187
115
|
p.x = lx;
|
|
188
116
|
p.y = ly;
|
|
117
|
+
// High gravity, low horizontal velocity
|
|
189
118
|
p.velocity.set(Random.uniform(-horizontalSpread, horizontalSpread), Random.uniform(0, 50));
|
|
190
119
|
this.fragments.push({ sprite, particle: p });
|
|
191
120
|
this.pContainer.addChild(sprite);
|
|
192
121
|
}
|
|
193
122
|
}
|
|
194
123
|
this.sourceSprite.visible = false;
|
|
195
|
-
if (this.options.useCustomBlur) {
|
|
196
|
-
this.updateTexelSize();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
updateTexelSize() {
|
|
200
|
-
var _a, _b;
|
|
201
|
-
if (!this.options.useCustomBlur)
|
|
202
|
-
return;
|
|
203
|
-
// Approximate texel size based on source sprite dimensions
|
|
204
|
-
const w = this.sourceSprite.width * Math.abs(this.sourceSprite.scale.x) || 256;
|
|
205
|
-
const h = this.sourceSprite.height * Math.abs(this.sourceSprite.scale.y) || 256;
|
|
206
|
-
const texelX = 1.0 / w;
|
|
207
|
-
const texelY = 1.0 / h;
|
|
208
|
-
const blur = (_a = this.pContainer.filters) === null || _a === void 0 ? void 0 : _a[0];
|
|
209
|
-
if (blur && 'blurUniforms' in (blur.resources || {})) {
|
|
210
|
-
const uniforms = blur.resources.blurUniforms;
|
|
211
|
-
if ((_b = uniforms === null || uniforms === void 0 ? void 0 : uniforms.uTexelSize) === null || _b === void 0 ? void 0 : _b.value) {
|
|
212
|
-
uniforms.uTexelSize.value[0] = texelX;
|
|
213
|
-
uniforms.uTexelSize.value[1] = texelY;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
124
|
}
|
|
217
125
|
start() {
|
|
218
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -229,9 +137,37 @@ export default class MeltEffect extends Container {
|
|
|
229
137
|
return this.start();
|
|
230
138
|
});
|
|
231
139
|
}
|
|
140
|
+
update() {
|
|
141
|
+
if (!this.isProcessing)
|
|
142
|
+
return;
|
|
143
|
+
const dt = Ticker.shared.deltaMS / 1000;
|
|
144
|
+
this.currentTime += dt;
|
|
145
|
+
for (let i = this.fragments.length - 1; i >= 0; i--) {
|
|
146
|
+
const f = this.fragments[i];
|
|
147
|
+
const p = f.particle;
|
|
148
|
+
// Gravity and Viscosity
|
|
149
|
+
p.velocity.y += this.options.gravity * dt;
|
|
150
|
+
p.velocity.x *= this.options.viscosity;
|
|
151
|
+
p.velocity.y *= this.options.viscosity;
|
|
152
|
+
p.x += p.velocity.x * dt;
|
|
153
|
+
p.y += p.velocity.y * dt;
|
|
154
|
+
f.sprite.x = p.x;
|
|
155
|
+
f.sprite.y = p.y;
|
|
156
|
+
// Gradually shrink fragments so the liquid "dries up"
|
|
157
|
+
const lifeRatio = 1 - this.currentTime / this.options.duration;
|
|
158
|
+
f.sprite.scale.set(this.sourceSprite.scale.x * lifeRatio);
|
|
159
|
+
if (lifeRatio <= 0) {
|
|
160
|
+
this.removeFragment(i);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (this.fragments.length === 0) {
|
|
164
|
+
this.finish();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
232
167
|
removeFragment(index) {
|
|
233
168
|
const f = this.fragments[index];
|
|
234
|
-
|
|
169
|
+
if (f.particle)
|
|
170
|
+
ParticlePool.global.push(f.particle);
|
|
235
171
|
this.pContainer.removeChild(f.sprite);
|
|
236
172
|
f.sprite.destroy();
|
|
237
173
|
this.fragments.splice(index, 1);
|
|
@@ -242,10 +178,6 @@ export default class MeltEffect extends Container {
|
|
|
242
178
|
Ticker.shared.remove(this.update, this);
|
|
243
179
|
(_a = this.meltResolve) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
244
180
|
}
|
|
245
|
-
destroy(options) {
|
|
246
|
-
Ticker.shared.remove(this.update, this);
|
|
247
|
-
super.destroy(options);
|
|
248
|
-
}
|
|
249
181
|
static melt(sprite_1) {
|
|
250
182
|
return __awaiter(this, arguments, void 0, function* (sprite, options = {}) {
|
|
251
183
|
if (!sprite.parent)
|
|
@@ -255,7 +187,6 @@ export default class MeltEffect extends Container {
|
|
|
255
187
|
sprite.parent.addChildAt(effect, index);
|
|
256
188
|
yield effect.start();
|
|
257
189
|
effect.destroy({ children: true });
|
|
258
|
-
// sprite.destroy(); // Uncomment if you want to remove the original sprite too
|
|
259
190
|
});
|
|
260
191
|
}
|
|
261
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeltEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MeltEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MeltEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MeltEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ParticleContainer, Sprite } from 'pixi.js';
|
|
2
2
|
export type ShatterMode = 'radial' | 'directional' | 'swirl';
|
|
3
3
|
export interface IShatterEffectOptions {
|
|
4
4
|
gridCols?: number;
|
|
@@ -21,7 +21,7 @@ export interface IShatterEffectOptions {
|
|
|
21
21
|
enableRotation?: boolean;
|
|
22
22
|
rotationStrength?: number;
|
|
23
23
|
}
|
|
24
|
-
export default class ShatterEffect extends
|
|
24
|
+
export default class ShatterEffect extends ParticleContainer {
|
|
25
25
|
private sourceSprite;
|
|
26
26
|
private fragments;
|
|
27
27
|
private isExploded;
|
|
@@ -7,37 +7,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { ParticleContainer, Rectangle, Sprite, Texture, Ticker } from 'pixi.js';
|
|
11
11
|
import ParticlePool from '../ParticlePool';
|
|
12
12
|
import Random from '../util/Random';
|
|
13
|
-
export default class ShatterEffect extends
|
|
13
|
+
export default class ShatterEffect extends ParticleContainer {
|
|
14
14
|
constructor(sourceSprite, options = {}) {
|
|
15
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
16
|
-
super();
|
|
17
|
-
this.fragments = [];
|
|
18
|
-
this.isExploded = false;
|
|
19
|
-
this.isCleanedUp = false;
|
|
15
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
20
16
|
const cols = (_a = options.gridCols) !== null && _a !== void 0 ? _a : 10;
|
|
21
17
|
const rows = (_b = options.gridRows) !== null && _b !== void 0 ? _b : 10;
|
|
22
18
|
const needsRotation = (_c = options.enableRotation) !== null && _c !== void 0 ? _c : true;
|
|
19
|
+
const needsAlpha = ((_d = options.fadeOutDuration) !== null && _d !== void 0 ? _d : 0.5) > 0;
|
|
20
|
+
const needsTint = options.endTint !== undefined && options.endTint !== 0xffffff;
|
|
21
|
+
super(cols * rows, {
|
|
22
|
+
vertices: true,
|
|
23
|
+
position: true,
|
|
24
|
+
uvs: true,
|
|
25
|
+
rotation: needsRotation,
|
|
26
|
+
alpha: needsAlpha,
|
|
27
|
+
tint: needsTint,
|
|
28
|
+
});
|
|
29
|
+
this.fragments = [];
|
|
30
|
+
this.isExploded = false;
|
|
31
|
+
this.isCleanedUp = false;
|
|
23
32
|
this.sourceSprite = sourceSprite;
|
|
24
33
|
this.options = {
|
|
25
34
|
gridCols: cols,
|
|
26
35
|
gridRows: rows,
|
|
27
|
-
explosionPower: (
|
|
28
|
-
friction: (
|
|
29
|
-
gravity: (
|
|
30
|
-
turbulence: (
|
|
31
|
-
lifetime: (
|
|
32
|
-
fadeOutDuration: (
|
|
33
|
-
mode: (
|
|
34
|
-
explosionOrigin: (
|
|
35
|
-
blastDirection: (
|
|
36
|
-
swirlStrength: (
|
|
37
|
-
randomizeScale: (
|
|
38
|
-
endTint: (
|
|
36
|
+
explosionPower: (_e = options.explosionPower) !== null && _e !== void 0 ? _e : 1000,
|
|
37
|
+
friction: (_f = options.friction) !== null && _f !== void 0 ? _f : 0.96,
|
|
38
|
+
gravity: (_g = options.gravity) !== null && _g !== void 0 ? _g : 800,
|
|
39
|
+
turbulence: (_h = options.turbulence) !== null && _h !== void 0 ? _h : 0.2,
|
|
40
|
+
lifetime: (_j = options.lifetime) !== null && _j !== void 0 ? _j : 2.0,
|
|
41
|
+
fadeOutDuration: (_k = options.fadeOutDuration) !== null && _k !== void 0 ? _k : 0.5,
|
|
42
|
+
mode: (_l = options.mode) !== null && _l !== void 0 ? _l : 'radial',
|
|
43
|
+
explosionOrigin: (_m = options.explosionOrigin) !== null && _m !== void 0 ? _m : { x: 0.5, y: 0.5 },
|
|
44
|
+
blastDirection: (_o = options.blastDirection) !== null && _o !== void 0 ? _o : 0,
|
|
45
|
+
swirlStrength: (_p = options.swirlStrength) !== null && _p !== void 0 ? _p : 0,
|
|
46
|
+
randomizeScale: (_q = options.randomizeScale) !== null && _q !== void 0 ? _q : false,
|
|
47
|
+
endTint: (_r = options.endTint) !== null && _r !== void 0 ? _r : 0xffffff,
|
|
39
48
|
enableRotation: needsRotation,
|
|
40
|
-
rotationStrength: (
|
|
49
|
+
rotationStrength: (_s = options.rotationStrength) !== null && _s !== void 0 ? _s : 1.0,
|
|
41
50
|
};
|
|
42
51
|
this.x = this.sourceSprite.x;
|
|
43
52
|
this.y = this.sourceSprite.y;
|
|
@@ -46,7 +55,7 @@ export default class ShatterEffect extends Container {
|
|
|
46
55
|
}
|
|
47
56
|
createFragments() {
|
|
48
57
|
const texture = this.sourceSprite.texture;
|
|
49
|
-
if (!texture || !texture.
|
|
58
|
+
if (!texture || !texture.valid)
|
|
50
59
|
return;
|
|
51
60
|
const scale = this.sourceSprite.scale.x;
|
|
52
61
|
const texFrame = texture.frame;
|
|
@@ -68,7 +77,7 @@ export default class ShatterEffect extends Container {
|
|
|
68
77
|
continue;
|
|
69
78
|
// Create a sub-texture for this fragment
|
|
70
79
|
const fragRect = new Rectangle(texFrame.x + x1, texFrame.y + y1, currentFragW, currentFragH);
|
|
71
|
-
const fragTex = new Texture(
|
|
80
|
+
const fragTex = new Texture(texture.baseTexture, fragRect);
|
|
72
81
|
const sprite = new Sprite(fragTex);
|
|
73
82
|
sprite.anchor.set(0.5);
|
|
74
83
|
const finalScale = this.options.randomizeScale ? scale * Random.uniform(0.8, 1.2) : scale;
|
|
@@ -193,8 +202,8 @@ export default class ShatterEffect extends Container {
|
|
|
193
202
|
if (f.sprite) {
|
|
194
203
|
this.removeChild(f.sprite);
|
|
195
204
|
// Note: We destroy the unique fragment texture to prevent memory leaks,
|
|
196
|
-
// but NOT the
|
|
197
|
-
f.sprite.texture.destroy();
|
|
205
|
+
// but NOT the baseTexture.
|
|
206
|
+
f.sprite.texture.destroy(false);
|
|
198
207
|
f.sprite.destroy();
|
|
199
208
|
}
|
|
200
209
|
this.fragments.splice(index, 1);
|