From ec4e880f2283999b115ca11641e12820603a1648 Mon Sep 17 00:00:00 2001 From: moly <0700689@live.abertay.ac.uk> Date: Mon, 17 Sep 2012 19:58:45 +0100 Subject: [PATCH 1/6] Missing usage of particleClass in FlxEmitter FlxEmitter now uses the custom particle class to recycle instead of FlxParticle. Fixed FlixelCommunity/flixel#6, AdamAtomic/flixel#226 --- org/flixel/FlxEmitter.as | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index f39ee31d..babeab2c 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -123,7 +123,7 @@ package org.flixel minRotation = -360; maxRotation = 360; gravity = 0; - particleClass = null; + particleClass = FlxParticle; particleDrag = new FlxPoint(); frequency = 0.1; lifespan = 3; @@ -177,10 +177,7 @@ package org.flixel var i:uint = 0; while(i < Quantity) { - if(particleClass == null) - particle = new FlxParticle(); - else - particle = new particleClass(); + particle = new particleClass(); if(Multiple) { randomFrame = FlxG.random()*totalFrames; @@ -290,7 +287,7 @@ package org.flixel */ public function emitParticle():void { - var particle:FlxParticle = recycle(FlxParticle) as FlxParticle; + var particle:FlxParticle = recycle(particleClass) as FlxParticle; particle.lifespan = lifespan; particle.elasticity = bounce; particle.reset(x - (particle.width>>1) + FlxG.random()*width, y - (particle.height>>1) + FlxG.random()*height); From 1d8d5564b629b182dd3ba36e3f62b34be83d2f23 Mon Sep 17 00:00:00 2001 From: moly <0700689@live.abertay.ac.uk> Date: Tue, 18 Sep 2012 19:00:32 +0100 Subject: [PATCH 2/6] Added error message if particleClass does not extend FlxParticle --- org/flixel/FlxEmitter.as | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index babeab2c..41e06ec0 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -177,7 +177,14 @@ package org.flixel var i:uint = 0; while(i < Quantity) { - particle = new particleClass(); + particle = new particleClass() as FlxParticle; + + if(particle == null) + { + FlxG.log("ERROR: particleClass must extend FlxParticle"); + return this; + } + if(Multiple) { randomFrame = FlxG.random()*totalFrames; @@ -288,6 +295,13 @@ package org.flixel public function emitParticle():void { var particle:FlxParticle = recycle(particleClass) as FlxParticle; + + if(particle == null) + { + FlxG.log("ERROR: particleClass must extend FlxParticle"); + return; + } + particle.lifespan = lifespan; particle.elasticity = bounce; particle.reset(x - (particle.width>>1) + FlxG.random()*width, y - (particle.height>>1) + FlxG.random()*height); From 26d43329ca1d3f83ed4ec176699a8b70559e710c Mon Sep 17 00:00:00 2001 From: "Andreas Renberg (IQAndreas)" Date: Sun, 23 Sep 2012 22:22:00 +0200 Subject: [PATCH 3/6] Move `particleClass` to a getter/setter Also moved around the error messages for said member. --- org/flixel/FlxEmitter.as | 45 +++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index 41e06ec0..712723f5 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -77,11 +77,6 @@ package org.flixel * How much each particle should bounce. 1 = full bounce, 0 = no bounce. */ public var bounce:Number; - /** - * Set your own particle class type here. - * Default is FlxParticle. - */ - public var particleClass:Class; /** * Internal helper for deciding how many particles to launch. */ @@ -123,7 +118,6 @@ package org.flixel minRotation = -360; maxRotation = 360; gravity = 0; - particleClass = FlxParticle; particleDrag = new FlxPoint(); frequency = 0.1; lifespan = 3; @@ -179,12 +173,6 @@ package org.flixel { particle = new particleClass() as FlxParticle; - if(particle == null) - { - FlxG.log("ERROR: particleClass must extend FlxParticle"); - return this; - } - if(Multiple) { randomFrame = FlxG.random()*totalFrames; @@ -295,13 +283,6 @@ package org.flixel public function emitParticle():void { var particle:FlxParticle = recycle(particleClass) as FlxParticle; - - if(particle == null) - { - FlxG.log("ERROR: particleClass must extend FlxParticle"); - return; - } - particle.lifespan = lifespan; particle.elasticity = bounce; particle.reset(x - (particle.width>>1) + FlxG.random()*width, y - (particle.height>>1) + FlxG.random()*height); @@ -329,6 +310,32 @@ package org.flixel particle.onEmit(); } + /** + * Internal variable for tracking the class to create when generating particles. + */ + protected var _particleClass:Class; + + /** + * Set your own particle class type here. + * Default is FlxParticle. + */ + public function get particleClass():Class + { + return _particleClass || FlxParticle; + } + public function set particleClass(value:Class):void + { + var testParticle:* = new value(); + if (testParticle is FlxParticle) + { + _particleClass = value; + } + else + { + FlxG.log("ERROR: `" + getQualifiedClassName(testParticle) "` must extend `FlxParticle` in order to be used in a FlxEmitter."); + } + } + /** * A more compact way of setting the width and height of the emitter. * From e614fd4f63a37d747039f92f1a95ef6145eb4dfe Mon Sep 17 00:00:00 2001 From: moly <0700689@live.abertay.ac.uk> Date: Thu, 27 Sep 2012 22:06:07 +0100 Subject: [PATCH 4/6] tidy up FlxEmitter --- org/flixel/FlxEmitter.as | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index 712723f5..9ea901dc 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -97,6 +97,11 @@ package org.flixel * Internal point object, handy for reusing for memory mgmt purposes. */ protected var _point:FlxPoint; + /** + * Internal variable for tracking the class to create when generating particles. + */ + protected var _particleClass:Class; + /** * Creates a new FlxEmitter object at a specific position. @@ -118,6 +123,7 @@ package org.flixel minRotation = -360; maxRotation = 360; gravity = 0; + _particleClass = FlxParticle; particleDrag = new FlxPoint(); frequency = 0.1; lifespan = 3; @@ -310,29 +316,25 @@ package org.flixel particle.onEmit(); } - /** - * Internal variable for tracking the class to create when generating particles. - */ - protected var _particleClass:Class; - /** * Set your own particle class type here. * Default is FlxParticle. */ public function get particleClass():Class { - return _particleClass || FlxParticle; + return _particleClass; } + public function set particleClass(value:Class):void { - var testParticle:* = new value(); - if (testParticle is FlxParticle) + var testParticle:FlxParticle = new value() as FlxParticle; + if (testParticle != null) { _particleClass = value; } else { - FlxG.log("ERROR: `" + getQualifiedClassName(testParticle) "` must extend `FlxParticle` in order to be used in a FlxEmitter."); + FlxG.log("ERROR: " + value + " must extend FlxParticle in order to be used in a FlxEmitter."); } } From 258da808231b28613f52c153f11562c4f53b074e Mon Sep 17 00:00:00 2001 From: moly <0700689@live.abertay.ac.uk> Date: Mon, 15 Oct 2012 15:33:28 +0100 Subject: [PATCH 5/6] added fix for FlixelCommunity/flixel#47, added FlxU.getClassName --- org/flixel/FlxEmitter.as | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index 9ea901dc..005872f0 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -151,7 +151,7 @@ package org.flixel /** * This function generates a new array of particle sprites to attach to the emitter. * - * @param Graphics If you opted to not pre-configure an array of FlxSprite objects, you can simply pass in a particle image or sprite sheet. + * @param Graphics If you opted to not pre-configure an array of FlxParticle objects, you can simply pass in a particle image or sprite sheet. * @param Quantity The number of particles to generate when using the "create from image" option. * @param BakedRotations How many frames of baked rotation to use (boosts performance). Set to zero to not use baked rotations. * @param Multiple Whether the image in the Graphics param is a single particle or a bunch of particles (if it's a bunch, they need to be square!). @@ -317,7 +317,7 @@ package org.flixel } /** - * Set your own particle class type here. + * Set your own particle class type here. The custom class must extend FlxParticle. * Default is FlxParticle. */ public function get particleClass():Class @@ -327,14 +327,14 @@ package org.flixel public function set particleClass(value:Class):void { - var testParticle:FlxParticle = new value() as FlxParticle; - if (testParticle != null) + var testParticle:Object = new value(); + if (testParticle is FlxParticle) { _particleClass = value; } else { - FlxG.log("ERROR: " + value + " must extend FlxParticle in order to be used in a FlxEmitter."); + FlxG.log("ERROR: " + FlxU.getClassName(testParticle, true) + " must extend FlxParticle in order to be used in a FlxEmitter."); } } From 7157514c52dbb6387bb554f20fdef10e5cc1112f Mon Sep 17 00:00:00 2001 From: moly <0700689@live.abertay.ac.uk> Date: Mon, 15 Oct 2012 15:42:09 +0100 Subject: [PATCH 6/6] quick fix for flxemitter --- org/flixel/FlxEmitter.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org/flixel/FlxEmitter.as b/org/flixel/FlxEmitter.as index 005872f0..598914ca 100644 --- a/org/flixel/FlxEmitter.as +++ b/org/flixel/FlxEmitter.as @@ -143,7 +143,7 @@ package org.flixel minParticleSpeed = null; maxParticleSpeed = null; particleDrag = null; - particleClass = null; + _particleClass = null; _point = null; super.destroy(); }