forked from: Happy Christmas, Merry Holidays!

by WindsorFarmer forked from Happy Christmas, Merry Holidays! (diff: 103)
BradSedito 2011
import net.hires.debug.Stats;
♥2 | Line 193 | Modified 2011-12-28 06:35:47 | MIT License
play

ActionScript3 source code

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

// forked from bradsedito's Happy Christmas, Merry Holidays!
// forked from neofatalist's Happy Christmas!
// BradSedito 2011



package 
{
    import flash.display.Sprite;
    import flash.events.*;
    import flash.utils.Timer;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    //import net.hires.debug.Stats;
       
    [SWF(backgroundColor=0x000000, width = '465', height = '465', frameRate = '101')]

    public class Main extends Sprite 
    {
        //internal var _stats:Stats = new Stats();
        internal var emitTime:int = 0.15;
        internal var emitter:Timer = new Timer(emitTime);   
        internal var flakes:Array;
        internal var snowLayer:Sprite;
        
        public var Trace:Tracer;
             
        public function Main() 
        {
           // stage.addChild( _stats );
            addChild(new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000))); 
            addEventListener(Event.ADDED_TO_STAGE, init);
            addEventListener(Event.REMOVED_FROM_STAGE, dispose)
        }
        
        internal function init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            emitter.start();
            emitter.addEventListener(TimerEvent.TIMER, emit)
            flakes = new Array();
            snowLayer = new Sprite();
            addChild(snowLayer)
            Trace = new Tracer();
            addChild(Trace);
            Trace.x = stage.stageWidth * 0.5 - Trace.width*0.5;
            Trace.y = stage.stageHeight * 0.5 - Trace.height*0.5;
        }
        
        internal function emit(e:TimerEvent):void{
            if(numChildren-1 < 400){        
                var i:Number = flakes.length;
                snowLayer.addChild(flakes[i] = new particle())
                flakes[i].x = -100 + Math.floor(Math.random()*1000);
                flakes[i].z = (Math.random() * 900 )+ 550;
                flakes[i].y = -700;
                flakes[i].addEventListener("melted", shovel);
                flakes[i]._id=i;  
                Trace.add("new emit", 0xff0000);              
                
            }
        }

        internal function shovel(e:Event):void
        {
            e.target.removeEventListener("melted", shovel);
            snowLayer.removeChild(Sprite(e.target));
            
            for(var i:Number =0; i<flakes.length; i++){
                if(flakes[i]._id == e.target._id) flakes = flakes.filter(scrape)
            }    
        }
        
        internal function scrape(e:*, index:int, arr:Array):Boolean{
            return (e.onStage == true);
        }            
       
        internal function dispose(e:Event):void{
            for(var i:Number = 0; i< flakes.length; i++)  removeChild(flakes[i])
            
            flakes= null;
            removeEventListener(Event.REMOVED_FROM_STAGE, dispose)
        }
    }
}
import flash.events.MouseEvent;

import flash.display.Sprite;
import flash.events.Event;
import flash.filters.*;
import flash.geom.Matrix;
import flash.display.GradientType;

 class particle extends Sprite{
    internal var rect:Sprite = new Sprite();
    internal var onStage:Boolean = false;        
    internal var xVel:Number = (Math.random()*2)-1;
    internal var yVel:Number= 2.5;
    internal var zVel:Number = Math.random()*5 - 2.6;
    internal var fil:BlurFilter = new BlurFilter();
    internal var _id:Number;

    public function particle() {
        addEventListener(Event.ADDED_TO_STAGE, added);
        addEventListener(Event.REMOVED_FROM_STAGE, dispose);            
    }
        
    internal function added(e:Event):void{
        var mat:Matrix= new Matrix();
        var colors:Array = [0xEEEEEE,0xFFFFFF];
        var alphas:Array = [1,0];
        var circRad:Number = 10;
        var ratios:Array = [0,255];            

        mat.createGradientBox(2*circRad, 2*circRad, 0, -circRad, -circRad);
        graphics.lineStyle();
        graphics.beginGradientFill(GradientType.RADIAL,colors,alphas,ratios,mat);
        graphics.drawCircle(0,0,circRad);
        graphics.endFill();
            
        addEventListener(Event.ENTER_FRAME, loop)
        onStage=true;
        cacheAsBitmap = true;
    }
        
    internal function loop(e:Event):void{
        if(y < 650){
            y+=(yVel +(z/900));
            x+=xVel;
            z+=zVel;
                                
            yVel+= .01;
            xVel += (Math.random()*1)-.5;
            zVel += (Math.random()*1) - .5;
            if( y < -800 || x < -500 || x > 1800 || z > 2000 || z < -2000 ){dispatchEvent(new Event("melted"))};
        }else{
            alpha  -= .02;
            if(scaleX < 2) scaleX += .04;
            if(scaleY > .25)scaleY -= .02;                
            if(alpha < 0) {dispatchEvent(new Event("melted"))};
        }   
    }        
        
    internal function dispose(e:Event):void{
            fil = null;
            onStage=false;
            removeEventListener(Event.ENTER_FRAME, loop)
            removeEventListener(Event.ADDED_TO_STAGE, added);
            removeEventListener(Event.REMOVED_FROM_STAGE, dispose);
    }
}

import flash.display.Sprite;
import flash.text.*;

class Tracer extends Sprite
{
    public var txtFmt:TextFormat;
    public var panel:Sprite;
    private var lineNumber:Number = 0xA00000;
    private var lines:Array;
    public var panelTxt:TextField
    private var topTxt:TextField;
    
    public function Tracer()
    {    
        lines = new Array();
        txtFmt = new TextFormat();
        txtFmt.font = "Times New Roman";
        txtFmt.size = "16";
        txtFmt.color = 0xffffff;
        txtFmt.align = TextFormatAlign.CENTER
            
        panel = new Sprite();
        addChild(panel);
        topTxt = new TextField();
        topTxt.selectable = false;
        topTxt.width = 220;
        topTxt.defaultTextFormat = txtFmt;
        topTxt.text = "Tracer Online trace()";
        //topTxt.border = true;
        //topTxt.borderColor = 0x00aaff;
        
        topTxt.autoSize =  TextFieldAutoSize.CENTER;
        
        panel.addChild(topTxt);
        
        panelTxt = new TextField();
        panel.addChild(panelTxt);
        panelTxt.width = 220;
        panelTxt.height = 300;
        panelTxt.border = true;
        panelTxt.borderColor = 0x00ffff;
        panelTxt.y = topTxt.height;
        txtFmt.align = TextFormatAlign.LEFT;
        panelTxt.defaultTextFormat = txtFmt;
        panelTxt.multiline = true;       
        
        panel.addEventListener(MouseEvent.MOUSE_DOWN, panelDrag);
        panel.addEventListener(MouseEvent.MOUSE_UP, panelDrop);
    }
    
    private function panelDrag(e:Event):void
    {
        panel.startDrag();
    }
    
    private function panelDrop(e:Event):void
    {
        panel.stopDrag();
    }
    
    public function add(strg:String=undefined, clr:Number=undefined):void
    {
        lineNumber++;
        
        if(!strg)
        {
            strg = ".";
        }
        if(clr)
        {
            txtFmt.color = clr;
            panelTxt.setTextFormat(txtFmt);
        }

        lines.push(lineNumber + " " +strg);  
         
        if(lines.length>panelTxt.height)
        {
             lines.splice(0, 1); 
        }
        
        panelTxt.htmlText = "";

        for(var i:int = 0; i< lines.length;i++)
        {
            panelTxt.htmlText += (lines[i]);
        }        
    }
}