home *** CD-ROM | disk | FTP | other *** search
- package asCode
- {
- import flash.display.*;
- import flash.geom.*;
- import flash.utils.*;
-
- internal class particleManagerClass
- {
- private static var EFFECTOR_PUSH_AWAY:int = 0;
-
- private static var EFFECTOR_PUSH_DIRECTION:int = 2;
-
- private static var EFFECTOR_MAGNET:int = 1;
-
- private var particleHolder:BitmapData;
-
- private var particleDict:Dictionary;
-
- private var tempParticleSprite:Sprite;
-
- private var newParticle:particleClass;
-
- private var renderMatrix:Matrix;
-
- private var gravityAngle:Number;
-
- private var gravitySpeed:Number;
-
- private var particleSize:Number;
-
- private var particleCounter:Number;
-
- private var _particleBitmapLoc:Point;
-
- private var _particleXSize:int;
-
- private var _particleYSize:int;
-
- private var particleSpriteSheet:BitmapData;
-
- private var alphaBitmap:BitmapData;
-
- private var _effectorClassRef:effectorClass;
-
- private var effectorArray:Array;
-
- private var radians:Number;
-
- private var newSpeed:Number;
-
- private var pushX:Number;
-
- private var pushY:Number;
-
- private var particleDetailsArray:Array;
-
- private var zeroPoint:Point;
-
- private var _particleSize:Point;
-
- private var copyRect:Rectangle;
-
- private var pCount:int;
-
- private var particleScale:Number;
-
- private var trot:Number;
-
- private var tempLoc:Point;
-
- private var cTransform:ColorTransform;
-
- private var P_ELECTRICAL:int = 1;
-
- private var P_WANDERING_LINE:int = 2;
-
- private var P_LINE:int = 3;
-
- private var P_FALLING:int = 4;
-
- private var P_WANDERING:int = 5;
-
- private var P_GROWING:int = 6;
-
- private var P_WHITE_SMOKE:int = 7;
-
- private var P_METEOR:int = 8;
-
- private var P_BLUE_FLASH:int = 9;
-
- private var P_FLASH:int = 10;
-
- private var P_FLICKER:int = 11;
-
- private var P_SNOW:int = 12;
-
- public function particleManagerClass(param1:BitmapData, param2:BitmapData)
- {
- renderMatrix = new Matrix();
- _particleBitmapLoc = new Point();
- zeroPoint = new Point();
- _particleSize = new Point();
- copyRect = new Rectangle(0,0,10,10);
- tempLoc = new Point();
- cTransform = new ColorTransform();
- super();
- particleHolder = param1;
- particleDict = new Dictionary(true);
- particleSize = 10;
- particleCounter = 0;
- particleSpriteSheet = param2;
- effectorArray = new Array();
- }
-
- public function clearEffectors() : void
- {
- var _loc2_:MovieClip = null;
- var _loc1_:int = int(effectorArray.length);
- while(_loc1_--)
- {
- _effectorClassRef = effectorArray[_loc1_];
- _loc2_ = _effectorClassRef.getClip();
- _loc2_.parent.removeChild(_loc2_);
- effectorArray.splice(_loc1_,1);
- }
- }
-
- public function createEffector(param1:Number, param2:Number, param3:MovieClip, param4:int, param5:Number, param6:Number, param7:Number) : *
- {
- _effectorClassRef = new effectorClass(param1,param2,param3,param4,param5,param6,param7);
- effectorArray.push(_effectorClassRef);
- }
-
- public function applyEffector(param1:effectorClass, param2:Object) : void
- {
- var _loc3_:Point = param1.getLoc();
- var _loc4_:Point = param2.getLoc();
- var _loc5_:Number = _loc3_.x - _loc4_.x;
- var _loc6_:Number = _loc3_.y - _loc4_.y;
- var _loc7_:Number = Math.floor(Math.sqrt(_loc5_ * _loc5_ + _loc6_ * _loc6_));
- var _loc8_:Number = param1.getRange();
- if(_loc7_ < _loc8_)
- {
- switch(param1.getEffectorType())
- {
- case EFFECTOR_PUSH_AWAY:
- radians = Math.atan2(_loc6_,_loc5_);
- newSpeed = param1.getStrength() - param1.getStrength() / _loc7_;
- pushX = Math.cos(radians) * -newSpeed;
- pushY = Math.sin(radians) * -newSpeed;
- param2.effectParticle(pushX,pushY);
- break;
- case EFFECTOR_MAGNET:
- radians = Math.atan2(_loc6_,_loc5_);
- newSpeed = param1.getStrength() - param1.getStrength() / _loc7_;
- pushX = Math.cos(radians) * newSpeed;
- pushY = Math.sin(radians) * newSpeed;
- param2.effectParticle(pushX,pushY);
- break;
- case EFFECTOR_PUSH_DIRECTION:
- radians = param1.getRadians();
- newSpeed = param1.getStrength() - param1.getStrength() / _loc7_;
- pushX = Math.cos(radians) * newSpeed;
- pushY = Math.sin(radians) * newSpeed;
- param2.effectParticle(pushX,pushY);
- }
- }
- }
-
- public function killAllParticles() : void
- {
- var _loc1_:Object = null;
- for each(_loc1_ in particleDict)
- {
- delete particleDict[_loc1_];
- }
- }
-
- public function createParticles(param1:Number, param2:Number, param3:int, param4:int) : *
- {
- while(param3--)
- {
- generateParticle(param1,param2,param4);
- }
- }
-
- public function manageParticles(param1:Number) : int
- {
- var _loc2_:Object = null;
- var _loc3_:int = 0;
- var _loc4_:int = 0;
- var _loc5_:int = 0;
- var _loc6_:BitmapData = null;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- var _loc9_:Number = NaN;
- var _loc10_:Number = NaN;
- var _loc11_:Number = NaN;
- var _loc12_:Number = NaN;
- var _loc13_:Number = NaN;
- var _loc14_:Number = NaN;
- var _loc15_:int = 0;
- pCount = 0;
- for each(_loc2_ in particleDict)
- {
- ++pCount;
- if(!_loc2_.alive)
- {
- delete particleDict[_loc2_];
- }
- else
- {
- _loc2_.adjustParticleY(param1);
- _loc2_.moveit();
- _loc3_ = int(effectorArray.length);
- while(_loc3_--)
- {
- _effectorClassRef = effectorArray[_loc3_];
- _loc15_ = _effectorClassRef.getEffectorType();
- applyEffector(_effectorClassRef,_loc2_);
- }
- _particleSize = _loc2_.getSize();
- _particleBitmapLoc = _loc2_.getSheetloc();
- particleScale = _loc2_.getScale();
- _loc4_ = Math.floor(_particleSize.x * particleScale);
- _loc5_ = Math.floor(_particleSize.y * particleScale);
- if(_loc4_ < 1)
- {
- _loc4_ = 1;
- }
- if(_loc5_ < 1)
- {
- _loc5_ = 1;
- }
- _loc6_ = new BitmapData(_particleSize.x,_particleSize.y,true,0);
- copyRect.x = _particleBitmapLoc.x;
- copyRect.y = _particleBitmapLoc.y;
- copyRect.width = _particleSize.x;
- copyRect.height = _particleSize.y;
- _loc6_.copyPixels(particleSpriteSheet,copyRect,zeroPoint,null,null,true);
- tempLoc = _loc2_.getLoc();
- cTransform.alphaMultiplier = _loc2_.getAlpha();
- renderMatrix.identity();
- renderMatrix.scale(particleScale,particleScale);
- trot = _loc2_.getRot() / 180 * Math.PI;
- renderMatrix.rotate(trot);
- _loc7_ = copyRect.width / 2 * particleScale;
- _loc8_ = copyRect.height / 2 * particleScale;
- _loc9_ = Math.cos(trot);
- _loc10_ = Math.sin(trot);
- _loc11_ = _loc9_ * _loc7_;
- _loc12_ = _loc10_ * _loc7_;
- _loc13_ = _loc10_ * _loc8_;
- _loc14_ = _loc9_ * _loc8_;
- renderMatrix.translate(tempLoc.x - (_loc11_ - _loc12_) + _loc7_,tempLoc.y - (_loc13_ + _loc14_) + _loc8_);
- particleHolder.draw(_loc6_,renderMatrix,cTransform);
- }
- }
- return pCount;
- }
-
- internal function generateParticle(param1:Number, param2:Number, param3:int) : *
- {
- _particleBitmapLoc = new Point(0,0);
- _particleXSize = 10;
- _particleYSize = 10;
- switch(param3)
- {
- case P_SNOW:
- _particleBitmapLoc.x = Math.floor(Math.random() * 3) * 10;
- _particleBitmapLoc.y = 0;
- _particleXSize = 10;
- _particleYSize = 10;
- break;
- case P_ELECTRICAL:
- _particleBitmapLoc.x = 120 + Math.floor(Math.random() * 3) * 10;
- _particleBitmapLoc.y = 0;
- _particleXSize = 10;
- _particleYSize = 6;
- break;
- case P_FALLING:
- _particleBitmapLoc.x = 40 + Math.floor(Math.random() * 3) * 2;
- _particleBitmapLoc.y = 0;
- _particleYSize = _particleXSize = 4;
- break;
- case P_WANDERING:
- _particleBitmapLoc.x = 40 + Math.floor(Math.random() * 3) * 2;
- _particleBitmapLoc.y = 4;
- _particleYSize = _particleXSize = 4;
- break;
- case P_GROWING:
- _particleBitmapLoc.x = 60;
- _particleBitmapLoc.y = 0;
- _particleYSize = _particleXSize = 20;
- break;
- case P_BLUE_FLASH:
- _particleBitmapLoc.x = 60;
- _particleBitmapLoc.y = 20;
- _particleYSize = _particleXSize = 20;
- break;
- case P_FLASH:
- _particleBitmapLoc.x = 0;
- _particleBitmapLoc.y = 30;
- _particleYSize = _particleXSize = 40;
- break;
- case P_WANDERING_LINE:
- _particleBitmapLoc.x = 100;
- _particleBitmapLoc.y = 0;
- _particleXSize = 20;
- _particleYSize = 10;
- break;
- case P_LINE:
- _particleBitmapLoc.x = 80;
- _particleBitmapLoc.y = Math.floor(Math.random() * 3) * 7;
- _particleXSize = 20;
- _particleYSize = 7;
- break;
- case P_FLICKER:
- _particleBitmapLoc.x = 0;
- _particleBitmapLoc.y = 40;
- _particleXSize = 40;
- _particleYSize = 40;
- break;
- case P_WHITE_SMOKE:
- _particleBitmapLoc.x = Math.floor(Math.random() * 3) * 20;
- _particleBitmapLoc.y = 80;
- _particleYSize = _particleXSize = 20;
- break;
- case P_METEOR:
- _particleBitmapLoc.x = Math.floor(Math.random() * 3) * 20 + 60;
- _particleBitmapLoc.y = 80;
- _particleYSize = _particleXSize = 20;
- }
- newParticle = new particleClass(param1,param2,param3,_particleXSize,_particleYSize,_particleBitmapLoc.x,_particleBitmapLoc.y);
- particleDict[newParticle] = newParticle;
- ++particleCounter;
- }
- }
- }
-
-