Blaster

by GreekFellows
♥0 | Line 90 | Modified 2013-01-24 21:58:43 | MIT License
play

ActionScript3 source code

/**
 * Copyright GreekFellows ( http://wonderfl.net/user/GreekFellows )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3Nnh
 */

package {

    import flash.geom.Point;

    import flash.geom.Rectangle;

    import flash.display.Bitmap;

    import flash.display.BitmapData;

    import flash.events.Event;

    import flash.display.Sprite;

    

    public class Absorption extends Sprite {

        public var core:Sprite;

        public var holes:Array;

        public var particles:Array;

        

        public var canvas:Sprite;

        public var sourceBitmapData:BitmapData;

        public var renderBitmapData:BitmapData;

        public var bitmap:Bitmap;

        

        public const PARTICLES_MAX:int = 100;

        

        public function Absorption() {

            core = new Sprite();

            holes = [];

            particles = [];

            

            canvas = new Sprite();

            sourceBitmapData = new BitmapData(465, 465);

            renderBitmapData = new BitmapData(465, 465);

            bitmap = new Bitmap(renderBitmapData);

            this.addChild(bitmap);

            

            this.addEventListener(Event.ENTER_FRAME, everything);

        }

        

        public function everything(e:Event):void {

            // add particles if there aren't 10 (variable) of them

            if (particles.length < PARTICLES_MAX) {

                if (true) {

                    // through thorough consideration

                    // decided to shoot them out from the bottom right corner

                    particles.push(

                                   {

                                       x:445,

                                       y:445,

                                       ax:-Math.random() * 50 / 100,

                                       ay:-Math.random() * 50 / 100,

                                       radius:Math.ceil(Math.random() * 5),

                                       bounces:5

                                   }

                                   );

                }

            }

            

            canvas.graphics.clear();

            canvas.graphics.beginFill(0, 1);

            canvas.graphics.drawRect(0, 0, 465, 465);

            canvas.graphics.endFill();

            

            // move and draw particles

            for (var pi:int = 0; pi < particles.length; pi++) {

                var cpar:Object = particles[pi];

                

                // move!

                cpar.x += cpar.ax;

                cpar.y += cpar.ay;

                

                cpar.ax += (Math.random() * 100 - 50) / 100;

                cpar.ay += (Math.random() * 100 - 50) / 100;

                

                if (cpar.x < 0 || cpar.x > 465 || cpar.y < 0 || cpar.y > 465) {

                    if (cpar.bounces-- <= 0) {

                        particles.splice(pi, 1);

                        break;

                    } else {

                        if (cpar.x < 0) {

                            cpar.x = 0;

                            cpar.ax = Math.abs(cpar.ax);

                        }

                        if (cpar.x < 465) {

                            cpar.x = 465;

                            cpar.ax = -Math.abs(cpar.ax);

                        }

                        if (cpar.y < 0) {

                            cpar.y = 0;

                            cpar.ay = Math.abs(cpar.ay);

                        }

                        if (cpar.y < 465) {

                            cpar.y = 465;

                            cpar.ay = -Math.abs(cpar.ay);

                        }

                    }

                }

                

                if (Math.abs(cpar.ax) > 10) {

                    cpar.ax *= 0.5;

                }

                if (Math.abs(cpar.ay) > 10) {

                    cpar.ay *= 0.5;

                }

                

                // draw!

                canvas.graphics.beginFill(0xffffff, 1);

                canvas.graphics.drawCircle(cpar.x, cpar.y, cpar.radius);

                canvas.graphics.endFill();

            }

            

            sourceBitmapData.draw(canvas);

            renderBitmapData.copyPixels(sourceBitmapData, new Rectangle(0, 0, 465, 465), new Point(0, 0));

        }

    }

}