forked from: [INFINITY TANK BATTLE] FIRE BULLET
forked from [INFINITY TANK BATTLE] FIRE BULLET (diff: 203)
ActionScript3 source code
/**
* Copyright tezzutezzu ( http://wonderfl.net/user/tezzutezzu )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/99C0
*/
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
[SWF(backgroundColor='0')]
public class Fire extends Sprite {
private const FADE:Number = 0.1;
private const SCALE:Number = 0.35;
private const DISTORTION:Number = 1;
private const AMOUNT:Number = 0.2;
private const SPREAD:Number = 0.2;
private const SMOKE:Number = 0.5;
private var src:*;
private var canvas:Bitmap;
private var main_bmp:BitmapData;
private var tmp_bmp:BitmapData;
private var perlin_bmp:BitmapData;
private var _matrix:Matrix;
private var _Pt:Point;
private var _ctf:ColorTransform;
private var _cmf:ColorMatrixFilter;
private var _dmf:DisplacementMapFilter;
private var _blur:BlurFilter;
private var _target:DisplayObject;
private var originalW:Number;
private var originalH:Number;
private var translate:Matrix = new Matrix();
private var gf:GlowFilter;
private var t:Number = 0;
public function Fire( _src:DisplayObject = null ) {
if ( !_src ) {
src = new Sprite();
src.graphics.beginFill( 0xFFFFFF, 1 );
src.graphics.drawEllipse( 0, 0, 80, 100 );
src.graphics.endFill();
} else {
src = _src;
}
canvas = new Bitmap();
_target = src;
//canvas.x = stage.stageWidth / 2;
//canvas.y = stage.stageHeight / 2;
addChildAt( canvas, numChildren-2);
//canvas.visible = false;
_matrix = new Matrix();
_Pt = new Point();
init();
start();
}
public function getBMD():BitmapData {
return this.canvas.bitmapData;
}
private function start():void {
addEventListener( Event.ENTER_FRAME, burn );
}
private function init():void {
if ( main_bmp ) {
main_bmp.dispose();
main_bmp = null;
tmp_bmp.dispose();
tmp_bmp = null;
perlin_bmp.dispose();
perlin_bmp = null;
}
originalW = _target.width;
originalH = _target.height;
var w:Number = originalW * 6;
var h:Number = originalH * 6;
main_bmp = new BitmapData( w, h, true, 0 );
tmp_bmp = main_bmp.clone();
perlin_bmp = new BitmapData( w * 3, h * 3, false, 0 );
canvas.bitmapData = main_bmp;
perlin_bmp.perlinNoise( 30 * SCALE, 20 * SCALE, 1, -Math.random() * 100 | 0, false, true, 1 | 2, false );
perlin_bmp.colorTransform( perlin_bmp.rect, new ColorTransform( 1, 1 - AMOUNT * 0.5, 1, 1, 0, 0, 0, 0 ));
_cmf = new ColorMatrixFilter([1-0.65*FADE,0.2,0,0,-10,
0,1-0.65*FADE,0,0,0,
0,0,0.8-0.55*FADE,0,0,
0,0.1,0,1,-25+SMOKE*24 ]);
_ctf = new ColorTransform( 0, 0,0, 1, 255, 255, 220, 0 );
_dmf = new DisplacementMapFilter( perlin_bmp, _Pt, 1, 2, 14 * DISTORTION, -30, DisplacementMapFilterMode.CLAMP );
_blur = new BlurFilter( 32 * SPREAD, 32 * SPREAD, 1 );
}
private function burn( e:Event ):void {
var size:Number = Math.cos(t+=0.2)
src.graphics.clear();
src.graphics.beginFill( 0xFFFFFF, 1 );
src.graphics.drawEllipse( 0, 0, 80, size * 100);
src.graphics.endFill();
_matrix.tx = stage.mouseX - originalW*.5
_matrix.ty = stage.mouseY - originalH*.5
_target.transform.matrix.tx =_matrix.tx;
_target.transform.matrix.ty =_matrix.ty;
var dM:Matrix = _target.transform.matrix;
tmp_bmp.fillRect( tmp_bmp.rect, 0 );
_ctf.alphaOffset = -Math.random() * 200 | 0;
tmp_bmp.draw( _target, dM, _ctf, "add" );
tmp_bmp.applyFilter( tmp_bmp, tmp_bmp.rect, _Pt, _blur );
main_bmp.draw( tmp_bmp, _matrix, null, "add");
_dmf.mapPoint = new Point( -Math.random() * ( perlin_bmp.width - main_bmp.width ) | 0, -Math.random() * ( perlin_bmp.height - main_bmp.height ) | 0 );
main_bmp.applyFilter( main_bmp, main_bmp.rect, _Pt, _dmf );
main_bmp.applyFilter( main_bmp, main_bmp.rect, _Pt, _cmf );
}
}
}