@@ -6,6 +6,8 @@ var Render = require('./ParticleEmitterRender');
66var Particle = require ( './Particle' ) ;
77var Between = require ( '../../math/Between' ) ;
88var StableSort = require ( '../../utils/array/StableSort' ) ;
9+ var Easing = require ( '../../math/easing' ) ;
10+ var GetEaseFunction = require ( '../../tween/builder/GetEaseFunction' ) ;
911
1012var 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