Section 1
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 2
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 3
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "2.0.0.0";
}
}//package mx.core
Section 4
//Explosion (Explosion)
package {
import flash.display.*;
import flash.geom.*;
public class Explosion {
private const P_COUNT:int = 3000;
private const EXPLOSION_MAX_VELOCITY:Number = 2;
private const EXPLOSION_MAX_HEAT:int = 2;
private const PARTICLE_DAMP_MOVE:Number = 0.99;
private const EXPLOSION_RADIUS:int = 24;
private const PARTICLE_DAMP_ENERGIE:Number = 0.97;
private const PARTICLE_CHAOTIC_MOVE:Number = 0.1825;
private const PCOUNT_EACH_FRAME:int = 100;
private var c_particles:Array;
private var t_particles:Array;
private var transform:ColorTransform;
private var energie:Number;
public function Explosion(_arg1:Number, _arg2:Number){
init(_arg1, _arg2);
}
private function init(_arg1:Number, _arg2:Number):void{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Particle;
var _local7:int;
t_particles = new Array();
c_particles = new Array();
energie = 1;
_local7 = 0;
while (_local7 < P_COUNT) {
_local3 = ((Math.random() * Math.PI) * 2);
_local4 = (Math.random() * EXPLOSION_MAX_VELOCITY);
_local5 = (Math.random() * EXPLOSION_RADIUS);
_local6 = new Particle((_arg1 + (Math.sin(_local3) * _local5)), (_arg2 + (Math.cos(_local3) * _local5)), (Math.sin(_local3) * _local4), ((Math.cos(_local3) * _local4) - (Math.random() * EXPLOSION_MAX_HEAT)), 1, PARTICLE_DAMP_ENERGIE);
t_particles.push(_local6);
_local7++;
};
}
public function render(_arg1:BitmapData):void{
var _local2:Particle;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:int;
var _local8:int;
if (t_particles.length >= PCOUNT_EACH_FRAME){
c_particles = c_particles.concat(t_particles.splice(-(PCOUNT_EACH_FRAME)));
} else {
if (t_particles.length > 0){
c_particles = t_particles.splice();
};
};
_local8 = c_particles.length;
while (--_local8 > -1) {
_local2 = c_particles[_local8];
_local3 = _local2.sx;
_local4 = _local2.sy;
_local5 = _local2.vx;
_local6 = _local2.vy;
_local5 = (_local5 + ((Math.random() / (0.5 / PARTICLE_CHAOTIC_MOVE)) - PARTICLE_CHAOTIC_MOVE));
_local6 = (_local6 + ((Math.random() / (0.5 / PARTICLE_CHAOTIC_MOVE)) - PARTICLE_CHAOTIC_MOVE));
if (_local2.energie < 0.1){
c_particles.splice(_local8, 1);
};
_local2.energie = (_local2.energie * _local2.energieDamp);
_arg1.setPixel(_local3, _local4, int((_local2.energie * 0xFF)));
_local3 = (_local3 + _local5);
_local4 = (_local4 + _local6);
_local5 = (_local5 * PARTICLE_DAMP_MOVE);
_local6 = (_local6 * PARTICLE_DAMP_MOVE);
_local2.sx = _local3;
_local2.sy = _local4;
_local2.vx = _local5;
_local2.vy = _local6;
};
}
}
}//package
Section 5
//Gradient (Gradient)
package {
import flash.display.*;
import flash.geom.*;
public class Gradient {
private static const IDENTITY:Matrix = new Matrix();
public static function getArray(_arg1:Array, _arg2:Array, _arg3:Array):Array{
var _local4:Array;
var _local5:Shape;
var _local6:Matrix;
var _local7:BitmapData;
var _local8:Graphics;
var _local9:uint;
var _local10:int;
_local4 = new Array();
_local5 = new Shape();
_local6 = new Matrix();
_local7 = new BitmapData(0x0100, 1, true, 0);
_local8 = _local5.graphics;
_local6.createGradientBox(0x0100, 0x0100, 0, 0, 0);
_local8.clear();
_local8.beginGradientFill("linear", _arg1, _arg2, _arg3, _local6);
_local8.drawRect(0, 0, 0x0100, 0x0100);
_local8.endFill();
_local7.draw(_local5, IDENTITY);
_local10 = 0;
while (_local10 < 0x0100) {
_local9 = _local7.getPixel32(_local10, 0);
_local4.push(_local9);
_local10++;
};
return (_local4);
}
}
}//package
Section 6
//Main (Main)
package {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.media.*;
public class Main extends Sprite {
private const EXPLOSION_BLUR_QUALITY:int = 1;
private const ORIGIN:Point;
private const HEIGHT:int = 384;
private const EXPLOSION_BLUR_STRENGTH:int = 2;
private const WIDTH:int = 384;
private var output:BitmapData;
private var explosions:Array;
private var buffer:BitmapData;
private var blur:BlurFilter;
private var fireColors:Array;
private var explosionSound:Sound;
private var ExplosionSoundAsset:Class;
public function Main(){
ORIGIN = new Point();
ExplosionSoundAsset = Main_ExplosionSoundAsset;
super();
init();
}
private function init():void{
buffer = new BitmapData(WIDTH, HEIGHT, false, 0);
output = new BitmapData(WIDTH, HEIGHT, false, 0);
explosionSound = Sound(new ExplosionSoundAsset());
blur = new BlurFilter(EXPLOSION_BLUR_STRENGTH, EXPLOSION_BLUR_STRENGTH, EXPLOSION_BLUR_QUALITY);
fireColors = Gradient.getArray([0, 0, 0x333333, 0xFF0000, 0xFFFF00, 0xFFFFFF], [0, 0, 1, 1, 1, 1], [0, 34, 68, 85, 136, 0xFF]);
addChild(new Bitmap(output));
explosions = new Array();
stage.addEventListener(MouseEvent.MOUSE_DOWN, createExplosion);
stage.addEventListener(Event.ENTER_FRAME, render);
}
private function createExplosion(_arg1:Event):void{
var _local2:Explosion;
_local2 = new Explosion(mouseX, mouseY);
explosions.push(_local2);
explosionSound.play();
}
private function render(_arg1:Event):void{
var _local2:Explosion;
var _local3:int;
_local3 = explosions.length;
while (--_local3 > -1) {
_local2 = explosions[_local3];
_local2.render(buffer);
};
buffer.applyFilter(buffer, buffer.rect, ORIGIN, blur);
output.copyPixels(buffer, buffer.rect, ORIGIN);
output.paletteMap(output, output.rect, ORIGIN, [], [], fireColors, []);
}
}
}//package
Section 7
//Main_ExplosionSoundAsset (Main_ExplosionSoundAsset)
package {
import mx.core.*;
public class Main_ExplosionSoundAsset extends SoundAsset {
}
}//package
Section 8
//Particle (Particle)
package {
public class Particle {
public var vx:Number;
public var vy:Number;
public var sx:Number;
public var sy:Number;
public var energie:Number;
public var energieDamp:Number;
public function Particle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){
this.sx = _arg1;
this.sy = _arg2;
this.vx = _arg3;
this.vy = _arg4;
this.energie = _arg5;
this.energieDamp = _arg6;
}
}
}//package