Skip to content

Commit 43dd0a6

Browse files
committed
Easing transtions for particles
1 parent 56e026e commit 43dd0a6

2 files changed

Lines changed: 46 additions & 9 deletions

File tree

v3/src/gameobjects/emitter/Particle.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var Particle = new Class({
1111
this.y = y;
1212
this.velocityX = 0.0;
1313
this.velocityY = 0.0;
14-
this.angularVelocity = 0.0;
1514
this.rotation = 0.0;
1615
this.scaleX = 1.0;
1716
this.scaleY = 1.0;
@@ -23,13 +22,15 @@ var Particle = new Class({
2322
this.start = {
2423
tint: 0xFFFFFF,
2524
alpha: 1.0,
26-
scale: 1.0
25+
scale: 1.0,
26+
angle: 0.0
2727
};
2828

2929
this.end = {
3030
tint: 0xFFFFFF,
3131
alpha: 1.0,
32-
scale: 1.0
32+
scale: 1.0,
33+
angle: 0.0
3334
};
3435
},
3536

@@ -51,13 +52,15 @@ var Particle = new Class({
5152
this.start = {
5253
tint: 0xFFFFFF,
5354
alpha: 1.0,
54-
scale: 1.0
55+
scale: 1.0,
56+
angle: 0.0
5557
};
5658

5759
this.end = {
5860
tint: 0xFFFFFF,
5961
alpha: 1.0,
60-
scale: 1.0
62+
scale: 1.0,
63+
angle: 0.0
6164
};
6265
return this;
6366
},

v3/src/gameobjects/emitter/ParticleEmitter.js

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ var Render = require('./ParticleEmitterRender');
66
var Particle = require('./Particle');
77
var Between = require('../../math/Between');
88
var StableSort = require('../../utils/array/StableSort');
9+
var Easing = require('../../math/easing');
10+
var GetEaseFunction = require('../../tween/builder/GetEaseFunction');
911

1012
var ParticleEmitter = new Class({
1113

@@ -45,10 +47,37 @@ var ParticleEmitter = new Class({
4547
this.gravityY = 0;
4648
this.life = 1.0;
4749
this.deathCallback = null;
50+
this.easingFunctionAlpha = Easing.Linear;
51+
this.easingFunctionScale = Easing.Linear;
52+
this.easingFunctionRotation = Easing.Linear;
4853
this.setTexture(texture, frame);
4954
this.setPosition(x, y);
5055
},
5156

57+
setEase: function (easeName, easeParam)
58+
{
59+
var ease = GetEaseFunction(easeName, easeParam);
60+
61+
this.easingFunctionAlpha = ease;
62+
this.easingFunctionScale = ease;
63+
this.easingFunctionRotation = ease;
64+
},
65+
66+
setAlphaEase: function (easeName, easeParam)
67+
{
68+
this.easingFunctionAlpha = GetEaseFunction(easeName, easeParam);
69+
},
70+
71+
setScaleEase: function (easeName, easeParam)
72+
{
73+
this.easingFunctionScale = GetEaseFunction(easeName, easeParam);
74+
},
75+
76+
setRotationEase: function (easeName, easeParam)
77+
{
78+
this.easingFunctionRotation = GetEaseFunction(easeName, easeParam);
79+
},
80+
5281
setSpeed: function (min, max)
5382
{
5483
this.minSpeed = min;
@@ -165,7 +194,6 @@ var ParticleEmitter = new Class({
165194
particle = new Particle(this.x, this.y);
166195
}
167196

168-
particle.rotation = Between(this.minPartAngle, this.maxPartAngle) * Math.PI / 180;
169197
particle.velocityX = vx;
170198
particle.velocityY = vy;
171199
particle.life = Math.max(this.life, Number.MIN_VALUE);
@@ -176,6 +204,8 @@ var ParticleEmitter = new Class({
176204
particle.scaleY = this.minScale;
177205
particle.start.alpha = this.minAlpha;
178206
particle.end.alpha = this.maxAlpha;
207+
particle.start.rotation = this.minPartAngle * Math.PI / 180;
208+
particle.end.rotation = this.maxPartAngle * Math.PI / 180;
179209
particle.color = (particle.color & 0x00FFFFFF) | (((this.minAlpha * 0xFF)|0) << 24);
180210
particle.index = this.alive.length;
181211

@@ -203,15 +233,19 @@ var ParticleEmitter = new Class({
203233
particle.velocityY += gravityY;
204234
particle.x += particle.velocityX * emitterStep;
205235
particle.y += particle.velocityY * emitterStep;
206-
particle.rotation += particle.angularVelocity * emitterStep;
207236
particle.normLifeStep = particle.lifeStep / particle.life;
208237

209238
var norm = 1.0 - particle.normLifeStep;
210-
var alphaf = (particle.end.alpha - particle.start.alpha) * norm + particle.start.alpha;
211-
var scale = (particle.end.scale - particle.start.scale) * norm + particle.start.scale;
239+
var alphaEase = this.easingFunctionAlpha(norm);
240+
var scaleEase = this.easingFunctionScale(norm);
241+
var rotationEase = this.easingFunctionRotation(norm);
242+
var alphaf = (particle.end.alpha - particle.start.alpha) * alphaEase + particle.start.alpha;
243+
var scale = (particle.end.scale - particle.start.scale) * scaleEase + particle.start.scale;
244+
var rotation = (particle.end.rotation - particle.start.rotation) * rotationEase + particle.start.rotation;
212245

213246
particle.scaleX = particle.scaleY = scale;
214247
particle.color = (particle.color & 0x00FFFFFF) | (((alphaf * 0xFF)|0) << 24);
248+
particle.rotation = rotation;
215249

216250
if (particle.lifeStep <= 0)
217251
{

0 commit comments

Comments
 (0)