custom-pixi-particles 8.7.2 → 8.7.3
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.
|
@@ -17,8 +17,6 @@ export default class DissolveEffect extends Container {
|
|
|
17
17
|
this.fragments = [];
|
|
18
18
|
this.isProcessing = false;
|
|
19
19
|
this.progress = 0;
|
|
20
|
-
// Determine bounds to set container size
|
|
21
|
-
const bounds = sourceSprite.getLocalBounds();
|
|
22
20
|
const pixelSize = (_a = options.pixelSize) !== null && _a !== void 0 ? _a : 2;
|
|
23
21
|
this.options = {
|
|
24
22
|
pixelSize,
|
|
@@ -28,35 +26,48 @@ export default class DissolveEffect extends Container {
|
|
|
28
26
|
lifetime: (_e = options.lifetime) !== null && _e !== void 0 ? _e : 1.5,
|
|
29
27
|
fadeOutDuration: (_f = options.fadeOutDuration) !== null && _f !== void 0 ? _f : 0.5,
|
|
30
28
|
direction: (_g = options.direction) !== null && _g !== void 0 ? _g : 'left-to-right',
|
|
31
|
-
windAngle: ((_h = options.windAngle) !== null && _h !== void 0 ? _h : -45) * (Math.PI / 180),
|
|
29
|
+
windAngle: ((_h = options.windAngle) !== null && _h !== void 0 ? _h : -45) * (Math.PI / 180),
|
|
32
30
|
};
|
|
31
|
+
// Copy transforms from source
|
|
33
32
|
this.x = sourceSprite.x;
|
|
34
33
|
this.y = sourceSprite.y;
|
|
35
34
|
this.rotation = sourceSprite.rotation;
|
|
35
|
+
this.scale.copyFrom(sourceSprite.scale);
|
|
36
|
+
this.pivot.copyFrom(sourceSprite.pivot);
|
|
36
37
|
}
|
|
37
38
|
prepare() {
|
|
38
39
|
const texture = this.sourceSprite.texture;
|
|
39
|
-
if (!texture || !texture.source)
|
|
40
|
+
if (!texture || !texture.source) {
|
|
41
|
+
console.warn('DissolveEffect: Texture source not found.');
|
|
40
42
|
return;
|
|
41
|
-
|
|
43
|
+
}
|
|
44
|
+
// In Pixi v8, 'resource' is the most reliable path to the raw image data.
|
|
45
|
+
// It can be an HTMLImageElement, HTMLCanvasElement, or ImageBitmap.
|
|
46
|
+
const sourceElement = texture.source.resource;
|
|
47
|
+
if (!sourceElement) {
|
|
48
|
+
console.warn('DissolveEffect: Could not find valid resource on texture.source.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
42
51
|
const { width, height } = texture.frame;
|
|
52
|
+
const canvas = document.createElement('canvas');
|
|
43
53
|
canvas.width = width;
|
|
44
54
|
canvas.height = height;
|
|
45
|
-
const ctx = canvas.getContext('2d');
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
56
|
+
// Draw the specific frame (important for Spritesheets/Atlases)
|
|
57
|
+
try {
|
|
58
|
+
ctx.drawImage(sourceElement, texture.frame.x, texture.frame.y, texture.frame.width, texture.frame.height, 0, 0, width, height);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
console.error('DissolveEffect: Failed to draw texture to canvas. This is likely a CORS issue.', e);
|
|
62
|
+
return;
|
|
51
63
|
}
|
|
52
64
|
const imgData = ctx.getImageData(0, 0, width, height).data;
|
|
53
65
|
const { pixelSize, edgeSoftness, direction } = this.options;
|
|
54
66
|
const anchorX = this.sourceSprite.anchor.x;
|
|
55
67
|
const anchorY = this.sourceSprite.anchor.y;
|
|
56
|
-
const scale = this.sourceSprite.scale.x;
|
|
57
68
|
for (let py = 0; py < height; py += pixelSize) {
|
|
58
69
|
for (let px = 0; px < width; px += pixelSize) {
|
|
59
|
-
const i = (py * width + px) * 4;
|
|
70
|
+
const i = (Math.floor(py) * width + Math.floor(px)) * 4;
|
|
60
71
|
if (imgData[i + 3] < 10)
|
|
61
72
|
continue;
|
|
62
73
|
let spatialFactor = 0;
|
|
@@ -81,11 +92,10 @@ export default class DissolveEffect extends Container {
|
|
|
81
92
|
}
|
|
82
93
|
const activationThreshold = spatialFactor * (1 - edgeSoftness) + Math.random() * edgeSoftness;
|
|
83
94
|
const sprite = new Sprite(Texture.WHITE);
|
|
84
|
-
sprite.width = sprite.height = pixelSize
|
|
85
|
-
// tslint:disable-next-line:no-bitwise
|
|
95
|
+
sprite.width = sprite.height = pixelSize;
|
|
86
96
|
sprite.tint = (imgData[i] << 16) | (imgData[i + 1] << 8) | imgData[i + 2];
|
|
87
|
-
const lx =
|
|
88
|
-
const ly =
|
|
97
|
+
const lx = px - width * anchorX;
|
|
98
|
+
const ly = py - height * anchorY;
|
|
89
99
|
const p = ParticlePool.global.pop();
|
|
90
100
|
p.reset();
|
|
91
101
|
p.x = lx;
|
|
@@ -100,6 +110,8 @@ export default class DissolveEffect extends Container {
|
|
|
100
110
|
initialY: ly,
|
|
101
111
|
});
|
|
102
112
|
this.addChild(sprite);
|
|
113
|
+
sprite.x = lx;
|
|
114
|
+
sprite.y = ly;
|
|
103
115
|
}
|
|
104
116
|
}
|
|
105
117
|
this.sourceSprite.visible = false;
|
|
@@ -107,6 +119,10 @@ export default class DissolveEffect extends Container {
|
|
|
107
119
|
start() {
|
|
108
120
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
121
|
this.prepare();
|
|
122
|
+
if (this.fragments.length === 0) {
|
|
123
|
+
this.finish();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
110
126
|
this.isProcessing = true;
|
|
111
127
|
return new Promise((resolve) => {
|
|
112
128
|
this.dissolveResolve = resolve;
|
|
@@ -118,9 +134,10 @@ export default class DissolveEffect extends Container {
|
|
|
118
134
|
if (!this.isProcessing)
|
|
119
135
|
return;
|
|
120
136
|
const dt = Ticker.shared.deltaMS / 1000;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
137
|
+
this.progress += dt * 0.7;
|
|
138
|
+
const { windAngle, driftStrength, noiseIntensity, fadeOutDuration } = this.options;
|
|
139
|
+
const windX = Math.cos(windAngle) * driftStrength;
|
|
140
|
+
const windY = Math.sin(windAngle) * driftStrength;
|
|
124
141
|
for (let i = this.fragments.length - 1; i >= 0; i--) {
|
|
125
142
|
const f = this.fragments[i];
|
|
126
143
|
const p = f.particle;
|
|
@@ -129,30 +146,21 @@ export default class DissolveEffect extends Container {
|
|
|
129
146
|
}
|
|
130
147
|
if (f.isActive) {
|
|
131
148
|
p.lifeTime += dt;
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const noiseY = (Math.random() - 0.5) * this.options.noiseIntensity;
|
|
137
|
-
p.x += (windX + noiseX) * dt;
|
|
138
|
-
p.y += (windY + noiseY) * dt;
|
|
149
|
+
const nx = (Math.random() - 0.5) * noiseIntensity;
|
|
150
|
+
const ny = (Math.random() - 0.5) * noiseIntensity;
|
|
151
|
+
p.x += (windX + nx) * dt;
|
|
152
|
+
p.y += (windY + ny) * dt;
|
|
139
153
|
f.sprite.x = p.x;
|
|
140
154
|
f.sprite.y = p.y;
|
|
141
|
-
// Alpha Fade
|
|
142
155
|
const lifeProg = p.lifeTime / p.maxLifeTime;
|
|
143
|
-
const fadeThreshold = 1 -
|
|
156
|
+
const fadeThreshold = 1 - fadeOutDuration / p.maxLifeTime;
|
|
144
157
|
if (lifeProg > fadeThreshold) {
|
|
145
158
|
f.sprite.alpha = Math.max(0, 1 - (lifeProg - fadeThreshold) / (1 - fadeThreshold));
|
|
146
159
|
}
|
|
147
|
-
// REMOVAL LOGIC: Check if lifetime ended
|
|
148
160
|
if (p.lifeTime >= p.maxLifeTime || f.sprite.alpha <= 0) {
|
|
149
161
|
this.removeFragment(i);
|
|
150
162
|
}
|
|
151
163
|
}
|
|
152
|
-
else {
|
|
153
|
-
f.sprite.x = f.initialX;
|
|
154
|
-
f.sprite.y = f.initialY;
|
|
155
|
-
}
|
|
156
164
|
}
|
|
157
165
|
if (this.fragments.length === 0) {
|
|
158
166
|
this.finish();
|
|
@@ -176,7 +184,7 @@ export default class DissolveEffect extends Container {
|
|
|
176
184
|
}
|
|
177
185
|
destroy(options) {
|
|
178
186
|
Ticker.shared.remove(this.update, this);
|
|
179
|
-
this.fragments.forEach((f
|
|
187
|
+
this.fragments.forEach((f) => {
|
|
180
188
|
if (f.particle)
|
|
181
189
|
ParticlePool.global.push(f.particle);
|
|
182
190
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DissolveEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/DissolveEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAyB1C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IAOnD,YACU,YAAoB,EAC5B,UAAkC,EAAE;;QAEpC,KAAK,EAAE,CAAA;QAHC,iBAAY,GAAZ,YAAY,CAAQ;QAPtB,cAAS,GAAmB,EAAE,CAAA;QAC9B,iBAAY,GAAY,KAAK,CAAA;QAE7B,aAAQ,GAAW,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"DissolveEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/DissolveEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAyB1C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IAOnD,YACU,YAAoB,EAC5B,UAAkC,EAAE;;QAEpC,KAAK,EAAE,CAAA;QAHC,iBAAY,GAAZ,YAAY,CAAQ;QAPtB,cAAS,GAAmB,EAAE,CAAA;QAC9B,iBAAY,GAAY,KAAK,CAAA;QAE7B,aAAQ,GAAW,CAAC,CAAA;QAS1B,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,CAAC,CAAA;QAExC,IAAI,CAAC,OAAO,GAAG;YACb,SAAS;YACT,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,mCAAI,GAAG;YACzC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,GAAG;YAC3C,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,EAAE;YAC5C,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,GAAG;YACjC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,GAAG;YAC/C,SAAS,EAAE,MAAA,OAAO,CAAC,SAAS,mCAAI,eAAe;YAC/C,SAAS,EAAE,CAAC,MAAA,OAAO,CAAC,SAAS,mCAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;SACxD,CAAA;QAED,8BAA8B;QAC9B,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC;IAEO,OAAO;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA;QAEzC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,aAAa,GAAI,OAAO,CAAC,MAAc,CAAC,QAAQ,CAAA;QAEtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;YAChF,OAAM;QACR,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAEtB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAE,CAAA;QAElE,+DAA+D;QAC/D,IAAI,CAAC;YACH,GAAG,CAAC,SAAS,CACX,aAAa,EACb,OAAO,CAAC,KAAK,CAAC,CAAC,EACf,OAAO,CAAC,KAAK,CAAC,CAAC,EACf,OAAO,CAAC,KAAK,CAAC,KAAK,EACnB,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,CAAC,EACD,CAAC,EACD,KAAK,EACL,MAAM,CACP,CAAA;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gFAAgF,EAAE,CAAC,CAAC,CAAA;YAClG,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAA;QAC1D,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAE3D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;QAE1C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;YAC9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;gBAEvD,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;oBAAE,SAAQ;gBAEjC,IAAI,aAAa,GAAG,CAAC,CAAA;gBACrB,QAAQ,SAAS,EAAE,CAAC;oBAClB,KAAK,eAAe;wBAClB,aAAa,GAAG,EAAE,GAAG,KAAK,CAAA;wBAC1B,MAAK;oBACP,KAAK,eAAe;wBAClB,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;wBAC9B,MAAK;oBACP,KAAK,eAAe;wBAClB,aAAa,GAAG,EAAE,GAAG,MAAM,CAAA;wBAC3B,MAAK;oBACP,KAAK,eAAe;wBAClB,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAA;wBAC/B,MAAK;oBACP,KAAK,YAAY;wBACf,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAA;wBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAA;wBAC1B,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;wBAC1D,MAAK;gBACT,CAAC;gBAED,MAAM,mBAAmB,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAA;gBAE7F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACxC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAA;gBACxC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAEzE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,CAAA;gBAC/B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO,CAAA;gBAEhC,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;gBACnC,CAAC,CAAC,KAAK,EAAE,CAAA;gBACT,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACR,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACR,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;gBAErC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,MAAM;oBACN,QAAQ,EAAE,CAAC;oBACX,mBAAmB;oBACnB,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,EAAE;oBACZ,QAAQ,EAAE,EAAE;iBACb,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACrB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;gBACb,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;YACf,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAA;IACnC,CAAC;IAEY,KAAK;;YAChB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,EAAE,CAAA;gBACb,OAAM;YACR,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAA;gBAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEO,MAAM;QACZ,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAM;QAE9B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;QACvC,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAA;QAEzB,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,aAAa,CAAA;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,aAAa,CAAA;QAEjD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;YAEpB,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC;gBAC1D,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAA;YACnB,CAAC;YAED,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAA;gBAEhB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,cAAc,CAAA;gBACjD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,cAAc,CAAA;gBAEjD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;gBACxB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;gBAExB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAChB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAEhB,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAA;gBAC3C,MAAM,aAAa,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,WAAW,CAAA;gBAEzD,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;oBAC7B,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;gBACpF,CAAC;gBAED,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;oBACvD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC/B,IAAI,CAAC,CAAC,QAAQ;YAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAC1B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACjC,CAAC;IAEO,MAAM;;QACZ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACvC,MAAA,IAAI,CAAC,eAAe,oDAAI,CAAA;IAC1B,CAAC;IAEe,OAAO,CAAC,OAAa;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,CAAC,QAAQ;gBAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAEM,MAAM,CAAO,QAAQ;6DAAC,MAAc,EAAE,UAAkC,EAAE;YAC/E,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAM;YAE1B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAEvC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QACpC,CAAC;KAAA;CACF"}
|
|
@@ -8,6 +8,7 @@ export interface IMeltEffectOptions {
|
|
|
8
8
|
duration?: number;
|
|
9
9
|
blurAmount?: number;
|
|
10
10
|
threshold?: number;
|
|
11
|
+
useCustomBlur?: boolean;
|
|
11
12
|
}
|
|
12
13
|
export default class MeltEffect extends Container {
|
|
13
14
|
private sourceSprite;
|
|
@@ -19,9 +20,15 @@ export default class MeltEffect extends Container {
|
|
|
19
20
|
private currentTime;
|
|
20
21
|
constructor(sourceSprite: Sprite, options?: IMeltEffectOptions);
|
|
21
22
|
private prepare;
|
|
23
|
+
private updateTexelSize;
|
|
22
24
|
start(): Promise<void>;
|
|
23
25
|
private update;
|
|
24
26
|
private removeFragment;
|
|
25
27
|
private finish;
|
|
28
|
+
destroy(options?: boolean | {
|
|
29
|
+
children?: boolean;
|
|
30
|
+
texture?: boolean;
|
|
31
|
+
baseTexture?: boolean;
|
|
32
|
+
}): void;
|
|
26
33
|
static melt(sprite: Sprite, options?: IMeltEffectOptions): Promise<void>;
|
|
27
34
|
}
|
|
@@ -7,77 +7,101 @@ 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 { Container, Filter, GlProgram, Rectangle, Sprite, Texture, Ticker } from 'pixi.js';
|
|
10
|
+
import { BlurFilter, Container, Filter, GlProgram, Rectangle, Sprite, Texture, Ticker } from 'pixi.js';
|
|
11
11
|
import ParticlePool from '../ParticlePool';
|
|
12
12
|
import Random from '../util/Random';
|
|
13
|
-
//
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
uniform vec4 uInputSize;
|
|
18
|
-
uniform vec4 uOutputFrame;
|
|
19
|
-
uniform vec4 uOutputTexture;
|
|
13
|
+
// Standard vertex shader for custom filters
|
|
14
|
+
const standardVertex = `
|
|
15
|
+
in vec2 aPosition;
|
|
16
|
+
out vec2 vTextureCoord;
|
|
20
17
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;
|
|
25
|
-
return vec4(position, 0.0, 1.0);
|
|
26
|
-
}
|
|
18
|
+
uniform vec4 uInputSize;
|
|
19
|
+
uniform vec4 uOutputFrame;
|
|
20
|
+
uniform vec4 uOutputTexture;
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
+
}
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
+
}
|
|
36
37
|
`;
|
|
37
|
-
//
|
|
38
|
+
// Custom blur (fallback) – uses texelSize scaling
|
|
38
39
|
const blurFrag = `
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
in vec2 vTextureCoord;
|
|
41
|
+
uniform sampler2D uTexture;
|
|
42
|
+
uniform vec2 uTexelSize;
|
|
43
|
+
uniform float uBlurRadius;
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
void main(void) {
|
|
46
|
+
vec4 sum = vec4(0.0);
|
|
47
|
+
float radius = uBlurRadius;
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
49
|
+
// 3×3 box blur
|
|
50
|
+
for (int x = -1; x <= 1; x++) {
|
|
51
|
+
for (int y = -1; y <= 1; y++) {
|
|
52
|
+
vec2 offset = vec2(float(x), float(y)) * uTexelSize * radius;
|
|
53
|
+
sum += texture(uTexture, vTextureCoord + offset);
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
gl_FragColor = sum / 9.0;
|
|
56
55
|
}
|
|
56
|
+
|
|
57
|
+
gl_FragColor = sum / 9.0;
|
|
58
|
+
}
|
|
57
59
|
`;
|
|
58
|
-
//
|
|
60
|
+
// Threshold fragment shader
|
|
59
61
|
const thresholdFrag = `
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
gl_FragColor = color;
|
|
71
|
-
}
|
|
62
|
+
in vec2 vTextureCoord;
|
|
63
|
+
uniform sampler2D uTexture;
|
|
64
|
+
uniform float threshold;
|
|
65
|
+
|
|
66
|
+
void main(void) {
|
|
67
|
+
vec4 color = texture(uTexture, vTextureCoord);
|
|
68
|
+
color.a = step(threshold, color.a);
|
|
69
|
+
gl_FragColor = color;
|
|
70
|
+
}
|
|
72
71
|
`;
|
|
73
72
|
export default class MeltEffect extends Container {
|
|
74
73
|
constructor(sourceSprite, options = {}) {
|
|
75
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
74
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
76
75
|
super();
|
|
77
76
|
this.sourceSprite = sourceSprite;
|
|
78
77
|
this.fragments = [];
|
|
79
78
|
this.isProcessing = false;
|
|
80
79
|
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
|
+
};
|
|
81
105
|
const cols = (_a = options.gridCols) !== null && _a !== void 0 ? _a : 15;
|
|
82
106
|
const rows = (_b = options.gridRows) !== null && _b !== void 0 ? _b : 15;
|
|
83
107
|
this.options = {
|
|
@@ -87,45 +111,64 @@ export default class MeltEffect extends Container {
|
|
|
87
111
|
viscosity: (_d = options.viscosity) !== null && _d !== void 0 ? _d : 0.98,
|
|
88
112
|
horizontalSpread: (_e = options.horizontalSpread) !== null && _e !== void 0 ? _e : 50,
|
|
89
113
|
duration: (_f = options.duration) !== null && _f !== void 0 ? _f : 2.5,
|
|
90
|
-
blurAmount: (_g = options.blurAmount) !== null && _g !== void 0 ? _g :
|
|
114
|
+
blurAmount: (_g = options.blurAmount) !== null && _g !== void 0 ? _g : 12,
|
|
91
115
|
threshold: (_h = options.threshold) !== null && _h !== void 0 ? _h : 0.5,
|
|
116
|
+
useCustomBlur: (_j = options.useCustomBlur) !== null && _j !== void 0 ? _j : false,
|
|
92
117
|
};
|
|
93
|
-
// We use a internal Container so we can apply filters to it
|
|
94
118
|
this.pContainer = new Container();
|
|
95
119
|
this.addChild(this.pContainer);
|
|
96
120
|
this.x = sourceSprite.x;
|
|
97
121
|
this.y = sourceSprite.y;
|
|
98
122
|
this.rotation = sourceSprite.rotation;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
123
|
+
this.scale.copyFrom(sourceSprite.scale);
|
|
124
|
+
// ─── Filters ────────────────────────────────────────────────
|
|
125
|
+
let blurFilter;
|
|
126
|
+
if (this.options.useCustomBlur) {
|
|
127
|
+
blurFilter = new Filter({
|
|
128
|
+
glProgram: new GlProgram({
|
|
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
|
+
}
|
|
109
148
|
const thresholdFilter = new Filter({
|
|
110
149
|
glProgram: new GlProgram({
|
|
150
|
+
vertex: standardVertex,
|
|
111
151
|
fragment: thresholdFrag,
|
|
112
|
-
vertex: defaultVertex,
|
|
113
152
|
}),
|
|
114
153
|
resources: {
|
|
115
|
-
|
|
154
|
+
thresholdUniforms: {
|
|
155
|
+
threshold: { value: this.options.threshold, type: 'f32' },
|
|
156
|
+
},
|
|
116
157
|
},
|
|
117
158
|
});
|
|
118
159
|
this.pContainer.filters = [blurFilter, thresholdFilter];
|
|
119
160
|
}
|
|
120
161
|
prepare() {
|
|
121
162
|
const texture = this.sourceSprite.texture;
|
|
163
|
+
// v8: no .valid property anymore; check source existence + basic validity
|
|
122
164
|
if (!texture || !texture.source)
|
|
123
165
|
return;
|
|
124
166
|
const { gridCols, gridRows, horizontalSpread } = this.options;
|
|
125
167
|
const texFrame = texture.frame;
|
|
126
168
|
const stepW = texFrame.width / gridCols;
|
|
127
169
|
const stepH = texFrame.height / gridRows;
|
|
128
|
-
const
|
|
170
|
+
const scaleX = this.sourceSprite.scale.x;
|
|
171
|
+
const scaleY = this.sourceSprite.scale.y;
|
|
129
172
|
const anchorX = this.sourceSprite.anchor.x;
|
|
130
173
|
const anchorY = this.sourceSprite.anchor.y;
|
|
131
174
|
for (let row = 0; row < gridRows; row++) {
|
|
@@ -136,20 +179,40 @@ export default class MeltEffect extends Container {
|
|
|
136
179
|
const fragTex = new Texture({ source: texture.source, frame: fragRect });
|
|
137
180
|
const sprite = new Sprite(fragTex);
|
|
138
181
|
sprite.anchor.set(0.5);
|
|
139
|
-
sprite.scale.set(
|
|
140
|
-
const lx = (x1 - texFrame.width * anchorX + stepW / 2) *
|
|
141
|
-
const ly = (y1 - texFrame.height * anchorY + stepH / 2) *
|
|
182
|
+
sprite.scale.set(scaleX, scaleY);
|
|
183
|
+
const lx = (x1 - texFrame.width * anchorX + stepW / 2) * scaleX;
|
|
184
|
+
const ly = (y1 - texFrame.height * anchorY + stepH / 2) * scaleY;
|
|
142
185
|
const p = ParticlePool.global.pop();
|
|
143
186
|
p.reset();
|
|
144
187
|
p.x = lx;
|
|
145
188
|
p.y = ly;
|
|
146
|
-
// High gravity, low horizontal velocity
|
|
147
189
|
p.velocity.set(Random.uniform(-horizontalSpread, horizontalSpread), Random.uniform(0, 50));
|
|
148
190
|
this.fragments.push({ sprite, particle: p });
|
|
149
191
|
this.pContainer.addChild(sprite);
|
|
150
192
|
}
|
|
151
193
|
}
|
|
152
194
|
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
|
+
}
|
|
153
216
|
}
|
|
154
217
|
start() {
|
|
155
218
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -161,37 +224,9 @@ export default class MeltEffect extends Container {
|
|
|
161
224
|
});
|
|
162
225
|
});
|
|
163
226
|
}
|
|
164
|
-
update() {
|
|
165
|
-
if (!this.isProcessing)
|
|
166
|
-
return;
|
|
167
|
-
const dt = Ticker.shared.deltaMS / 1000;
|
|
168
|
-
this.currentTime += dt;
|
|
169
|
-
for (let i = this.fragments.length - 1; i >= 0; i--) {
|
|
170
|
-
const f = this.fragments[i];
|
|
171
|
-
const p = f.particle;
|
|
172
|
-
// Gravity and Viscosity
|
|
173
|
-
p.velocity.y += this.options.gravity * dt;
|
|
174
|
-
p.velocity.x *= this.options.viscosity;
|
|
175
|
-
p.velocity.y *= this.options.viscosity;
|
|
176
|
-
p.x += p.velocity.x * dt;
|
|
177
|
-
p.y += p.velocity.y * dt;
|
|
178
|
-
f.sprite.x = p.x;
|
|
179
|
-
f.sprite.y = p.y;
|
|
180
|
-
// Gradually shrink fragments so the liquid "dries up"
|
|
181
|
-
const lifeRatio = 1 - this.currentTime / this.options.duration;
|
|
182
|
-
f.sprite.scale.set(this.sourceSprite.scale.x * lifeRatio);
|
|
183
|
-
if (lifeRatio <= 0) {
|
|
184
|
-
this.removeFragment(i);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
if (this.fragments.length === 0) {
|
|
188
|
-
this.finish();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
227
|
removeFragment(index) {
|
|
192
228
|
const f = this.fragments[index];
|
|
193
|
-
|
|
194
|
-
ParticlePool.global.push(f.particle);
|
|
229
|
+
ParticlePool.global.push(f.particle);
|
|
195
230
|
this.pContainer.removeChild(f.sprite);
|
|
196
231
|
f.sprite.destroy();
|
|
197
232
|
this.fragments.splice(index, 1);
|
|
@@ -202,6 +237,10 @@ export default class MeltEffect extends Container {
|
|
|
202
237
|
Ticker.shared.remove(this.update, this);
|
|
203
238
|
(_a = this.meltResolve) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
204
239
|
}
|
|
240
|
+
destroy(options) {
|
|
241
|
+
Ticker.shared.remove(this.update, this);
|
|
242
|
+
super.destroy(options);
|
|
243
|
+
}
|
|
205
244
|
static melt(sprite_1) {
|
|
206
245
|
return __awaiter(this, arguments, void 0, function* (sprite, options = {}) {
|
|
207
246
|
if (!sprite.parent)
|
|
@@ -211,6 +250,7 @@ export default class MeltEffect extends Container {
|
|
|
211
250
|
sprite.parent.addChildAt(effect, index);
|
|
212
251
|
yield effect.start();
|
|
213
252
|
effect.destroy({ children: true });
|
|
253
|
+
// sprite.destroy(); // Uncomment if you want to remove the original sprite too
|
|
214
254
|
});
|
|
215
255
|
}
|
|
216
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeltEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MeltEffect.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"MeltEffect.js","sourceRoot":"","sources":["../../../src/lib/effects/MeltEffect.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED