In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Happy Birthday, Carey!

Get Adobe Flash player
by bradsedito 14 Nov 2012
/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2MO0
 */






// 
// Copyright (C) BradSedito 2012. All rights reserved. (Don't steal code. That's lame.)

package 
{
    import flash.display.*;
    import flash.text.*;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.geom.ColorTransform;
    import flash.geom.Point;
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    import flash.display.StageQuality;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.utils.Timer;
    import flash.utils.getTimer;
    import org.papervision3d.core.effects.BitmapLayerEffect; 
    import org.papervision3d.core.effects.BitmapColorEffect;
    import org.papervision3d.core.effects.utils.BitmapClearMode;
    import org.papervision3d.core.geom.Pixels;
    import org.papervision3d.core.geom.renderables.Pixel3D;
    import org.papervision3d.view.BasicView; 
    import org.papervision3d.view.layer.BitmapEffectLayer; 
    //import net.hires.debug.Stats;
    
    [SWF(width="800", height="600", backgroundColor="0x000000", frameRate="60")]


    public class TextDot3D extends BasicView 
    {
        private var _pixels:Pixels;
        private var _rotateX:Number = 0;
        private var _rotateY:Number = 0;
        private var _pixel3Ds:Array/*Pixel3D*/ = [];        
        private var _particles:Array/*Particle*/ = [];
        private var _startTime:int;
        private var _flg:Boolean = false;
        private var _bmd:BitmapData;
        private var _pre:Number;
        private var _i:int;
        private var _a:Number;
        private var _y:Number;
        private var _x:Number;
        private var _c:uint;
        
        private var _textW:Number;
        private var _textH:Number;
        private const GROUND_NUM:int = 70;
        private const CAMERA_DISTANCE:int = -170;    
        
        public function TextDot3D() {    
            super(0, 0, true, true);            
            stage.quality = StageQuality.BEST;
             
            if (!stage)
                addEventListener(Event.ADDED_TO_STAGE, init);
            else
                init();
        }

        private function init(e:Event = null):void {    
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            camera.z = CAMERA_DISTANCE;            
            
            var _layer:BitmapEffectLayer = new BitmapEffectLayer(viewport, stage.stageWidth, stage.stageHeight, true, 0, BitmapClearMode.CLEAR_PRE, false);
            viewport.containerSprite.addLayer(_layer);
            _layer.addEffect(new BitmapColorEffect(1, 1, 1, .93));
            _layer.addEffect(new BitmapLayerEffect(new BlurFilter(16, 16, 1), false));
            _pixels = new Pixels(_layer);
            scene.addChild(_pixels);    
            
            createText();        
            
            createBody(-6, 1, 0xFFCCCC00);            
            createFrame(-5.5, 1, 0xFFFF0066);
            createFrame(-5, 1, 0xFFFF0066);
            createFrame(-4.5, 1, 0xFFFF0066);
            createFrame(-4, 1, 0xFFFF0066);
            createFrame(-3.5, 1, 0xFFFF0066);
            createFrame(-3, 1, 0xFFFF0066);
            createFrame(-2.5, 1, 0xFFFF0066);
            createFrame(-2, 1, 0xFFFF0066);
            createFrame(-1.5, 1, 0xFFFF0066);
            createFrame(-1, 1, 0xFFFF0066);
            createFrame(-.5, 1, 0xFFFF0066);
            createFrame(0, 1, 0xFFFF0066);
            createFrame(0.5, 1, 0xFFFF0066);
            createFrame(1, 1, 0xFFFF0066);
            createFrame(1.5, 1, 0xFFFF0066);
            createFrame(2, 1, 0xFFFF0066);
            createFrame(2.5, 1, 0xFFFF0066);
            createFrame(3, 1, 0xFFFF0066);
            createFrame(3.5, 1, 0xFFFF0066);
            createFrame(4, 1, 0xFFFF0066);
            createFrame(4.5, 1, 0xFFFF0066);
            createFrame(5, 1, 0xFFFF0066);
            createFrame(5.5, 1, 0xFFFF0066);
            createBody(6, 1, 0xFFFFFFFF);    
            
            upDate();
            
            stage.addEventListener(MouseEvent.CLICK, onClickHandler);        
            
            startRendering();    
            
            //addChild(new Stats());
        }    
        
                
        //========================================================================
        // ClickHandler
        //========================================================================
        private function onClickHandler(e:MouseEvent = null):void {
            _startTime = getTimer();
            _flg = true;;
        }        

        override protected function onRenderTick(event:Event = null):void { 
            renderer.renderScene(scene, _camera, viewport);

            _rotateX += (- viewport.containerSprite.mouseX - _rotateX) * 0.1;
            _rotateY += (- viewport.containerSprite.mouseY - 170 - _rotateY) * 0.1;
            _pixels.rotationY = _rotateX;
            _pixels.rotationX = _rotateY;
            
            if (_flg) {
                sandAnimation();
                upDate();
            }
        }        

        private function upDate():void {
            _pixels.removeAllpixels();
            var len:int = _particles.length;
            for (_i = 0; _i < len; _i++) {
                var p:Particle = _particles[_i];
                var px:Pixel3D;
                if (_pixel3Ds[_i]) {
                    px = _pixel3Ds[_i];
                    px.color = p.c;
                    px.x = p.x;
                    px.y = p.y;
                    px.z = p.z;
                }else {
                    _pixel3Ds[_i] = new Pixel3D(p.c, p.x, p.y, p.z);
                };
                px = _pixel3Ds[_i];
                _pixels.addPixel3D(px);
            }            
        }
        //========================================================================
        //========================================================================
        private function createText():void {
            var sprite:Sprite = new Sprite(); 
            var tf:TextField = new TextField();
            tf.defaultTextFormat = new TextFormat("Arial", 20, 0x000000, true);
            tf.autoSize = TextFieldAutoSize.LEFT;
            tf.text = "Happy Birthday \nCAREY! \n:)";
            tf.x = -1;
            tf.y = 1;
            _textW = tf.textWidth; 
            _textH = tf.textHeight;            
            sprite.addChild(tf);
            
            _bmd = new BitmapData(_textW + 5, _textH + 10, false, 0xFFFFFF);
            _bmd.draw(sprite);
        }        
        //========================================================================
        //========================================================================
        private function createBody(depth:Number = 0, distance:Number = 2, color:Number = NaN):void {
            var p:Particle;
            
            var w:Number = _textW * .5;
            var h:Number = _textH * .5;            
                
            for ( _y = 0; _y < _textH; _y += distance ) {
                for ( _x = 0; _x < _textW; _x += distance ) {
                    _c = _bmd.getPixel( _x, _y );
                    if (_c != 0xFFFFFF) {
                        _c = color || rgb2argb(_c, 1);    
                        if (_particles[_i]) {
                            p = _particles[_i];
                            p.c = _c;
                            p.x = _x - w;
                            p.y = _y - h;
                            p.z = depth;
                        }else {
                            _particles[_i] = new Particle(_x - w, _y - h, depth, _c);
                        };
                        _i++;                    
                    }
                }
            }
        }        
        //========================================================================
        //========================================================================
        private function createFrame(depth:Number = 4, distance:Number = 1, color:Number = NaN):void {    
            var p:Particle;
            
            var w:Number = _textW * .5;
            var h:Number = _textH * .5;                    
            
            for ( _y = 0; _y < _textH; _y += distance ) {
                for ( _x = 0; _x < _textW; _x += distance ) {
                    _c = _bmd.getPixel( _x, _y );
                    if (_c != 0xFFFFFF) {
                        _a = (_y == 0)?0:_x - w - _pre;
                        if (_a > distance || _a < - distance) {
                            _c = color || rgb2argb(_c, 1);    
                            if (_particles[_i]) {
                                p = _particles[_i];
                                p.c = _c;
                                p.x = _x - w;
                                p.y = _y - h;
                                p.z = depth;
                            }else {
                                _particles[_i] = new Particle(_x - w, _y - h, depth, _c);
                            }
                            _i++;                    
                        }
                        _pre = _x - w;
                    }
                }
            }
            
            for ( _x = 0; _x < _textW; _x += distance ) {
                for ( _y = 0; _y < _textH; _y += distance ) {
                    _c = _bmd.getPixel( _x, _y );
                    if (_c != 0xFFFFFF) {
                        _a = (_x == 0)?0:_y - h - _pre;
                        if(_a > distance || _a < - distance) {
                            _c = color || rgb2argb(_c, 1);    
                            if (_particles[_i]) {
                                p = _particles[_i];
                                p.c = _c;
                                p.x = _x - w;
                                p.y = _y - h;
                                p.z = depth;
                            }else {
                                _particles[_i] = new Particle(_x - w, _y - h, depth, _c);
                            }
                            _i++;                    
                        }
                        _pre = _y - h;
                    }
                }
            }
            
            for ( _y = _textH; _y > 0; _y -= distance ) {
                for ( _x = _textW; _x > 0; _x -= distance ) {
                    _c = _bmd.getPixel( _x, _y );
                    if (_c != 0xFFFFFF) {
                        _a = (_y == _textH)?0:_x - w - _pre;
                        if (_a > distance || _a < - distance) {
                            _c = color || rgb2argb(_c, 1);    
                            if (_particles[_i]) {
                                p = _particles[_i];
                                p.c = _c;
                                p.x = _x - w;
                                p.y = _y - h;
                                p.z = depth;
                            }else {
                                _particles[_i] = new Particle(_x - w, _y - h, depth, _c);
                            }
                            _i++;                    
                        }
                    }
                }
            }
            
            for ( _x = _textW; _x > 0; _x -= distance ) {
                for ( _y = _textH; _y > 0; _y -= distance ) {
                    _c = _bmd.getPixel( _x, _y );
                    if (_c != 0xFFFFFF) {
                        _a = (_x == _textW)?0:_y - h - _pre;
                        if (_a > distance || _a < - distance) {
                            _c = color || rgb2argb(_c, 1);    
                            if (_particles[_i]) {
                                p = _particles[_i];
                                p.c = _c;
                                p.x = _x - w;
                                p.y = _y - h;
                                p.z = depth;
                            }else {
                                _particles[_i] = new Particle(_x - w, _y - h, depth, _c);
                            }
                            _i++;                    
                        }
                        _pre = _y - h;
                    }
                }
            }
        }        

        private function sandAnimation():void 
        { 
            camera.z += (-70 - camera.z) * .2;            

            var now:int = getTimer();
            var len:int = _particles.length;
            for ( _i = 0; _i < len; _i++ ) {
                var p:Particle = _particles[_i];
                if (p.y < GROUND_NUM) {
                    var x_delay :Number  =  (1 - ((p.x + _textW * .6) / _textW )) * 40000;
                    var z_delay :Number  =  (1 - ((p.z + 8 * .5) / 8 )) * 2000;
                    var delay   :Number  =  x_delay + z_delay;
                  //var delay:Number   =  x_delay + y_delay + z_delay;
                    if (_startTime + delay > now) continue ;
                    p.vy = p.vy * p.af + p.g;
                    p.y += p.vy;
                }else {
                    p.y = GROUND_NUM;
                    p.vx = p.vx * p.gf * (Math.random() - .5) * 3;
                    p.x += p.vx;
                    p.vz = p.vz * p.gf * (Math.random() - .5) * 3;
                    p.z += p.vz;
                }
            }
        }        

        private function rgb2argb(rgb:uint, alpha:Number):uint {
            return ((alpha * 0xff) << 24) + rgb;
        }
    }
}

class Particle {
    public var x:Number;
    public var y:Number;
    public var z:Number;
    public var c:int;    
    public var g:Number  = .98;
    public var af:Number = .99;
    public var gf:Number = .999999;
    public var vx:Number = 8;
    public var vy:Number = 4;    
    public var vz:Number = 8;
    
    public function Particle(_x:Number, _y:Number, _z:Number, _c:int) {
        x = _x;
        y = _y;
        z = _z;
        c = _c;
    }
}