home *** CD-ROM | disk | FTP | other *** search
- package core.objects
- {
- import core.CoreEngine;
- import core.events.CoreEvent;
- import flash.display.Sprite;
- import flash.events.EventDispatcher;
- import flash.geom.ColorTransform;
-
- public class BounceParticle extends EventDispatcher
- {
-
-
- private var engine:CoreEngine;
-
- private var totalLifeTime:uint;
-
- private var gravity:Number;
-
- private var magnitude:Number;
-
- private var angle:Number;
-
- private var dx:Number;
-
- private var dy:Number;
-
- private var rot:Number;
-
- private var lifeTime:uint;
-
- private var x:Number;
-
- private var y:Number;
-
- private var skin:Sprite;
-
- public function BounceParticle(x:Number, y:Number)
- {
- super();
- this.x = x;
- this.y = y;
- init();
- }
-
- private function updateHandler(e:CoreEvent) : void
- {
- magnitude *= 0.95;
- skin.rotation += rot;
- skin.scaleX *= 0.98;
- skin.scaleY *= 0.96;
- var obj:Object = fly(angle,magnitude);
- skin.x += obj.movx;
- skin.y += obj.movy + gravity;
- gravity += 0.3;
- ++lifeTime;
- if(lifeTime > totalLifeTime)
- {
- destroy();
- }
- }
-
- private function destroy(e:CoreEvent = null) : void
- {
- skin.parent.removeChild(skin);
- engine.dispatcher.removeEventListener(CoreEvent.UPDATE,updateHandler);
- engine.dispatcher.removeEventListener(CoreEvent.DESTROY,destroy);
- }
-
- private function fly(ang1:Number, mag1:Number) : Object
- {
- return {
- "movx":mag1 * Math.cos(ang1 * Math.PI / 180),
- "movy":mag1 * Math.sin(ang1 * Math.PI / 180)
- };
- }
-
- private function createSkin() : Sprite
- {
- var SkinClass:Class = engine.assets.getAssetClass("CollideParticleAsset");
- var skin:Sprite = new SkinClass();
- engine.canvas.effectsContainer.addChild(skin);
- return skin;
- }
-
- private function init() : void
- {
- engine = CoreEngine.getInstance();
- engine.dispatcher.addEventListener(CoreEvent.UPDATE,updateHandler);
- engine.dispatcher.addEventListener(CoreEvent.DESTROY,destroy);
- skin = createSkin();
- skin.x = x;
- skin.y = y;
- var rbcol:Number = Math.ceil(Math.random() * 5 - 2.5);
- var gbcol:Number = Math.ceil(Math.random() * 5 - 2.5);
- var bbcol:Number = Math.ceil(Math.random() * 5 - 2.5);
- var colorTransform:ColorTransform = new ColorTransform();
- colorTransform.color = 16777215;
- skin.transform.colorTransform = colorTransform;
- dx = -2 + Math.random() * 4;
- dy = -2 + Math.random() * 4;
- angle = -30 + Math.random() * 60;
- magnitude = -10 + Math.random() * 20;
- rot = -45 + Math.random() * 90;
- skin.rotation = Math.random() * 360;
- skin.alpha = 0.6 + Math.random() * 0.35;
- skin.scaleX = 1 + Math.random() * 1.7;
- skin.scaleY = 1 + Math.random() * 1.7;
- gravity = -2;
- lifeTime = 0;
- totalLifeTime = 40 + Math.round(Math.random() * 100);
- }
- }
- }
-