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

forked from: Jellyfish Clock

...
@author Greek Fellows
Get Adobe Flash player
by sekiryou 12 Apr 2012
/**
 * Copyright sekiryou ( http://wonderfl.net/user/sekiryou )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xnts
 */

// forked from GreekFellows's Jellyfish Clock
package 
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFormat;
    
    /**
     * ...
     * @author Greek Fellows
     */
    public class Main extends Sprite 
    {
        private var txt_colors:Array;
        private var bg_colors:Array;
        private var ind:int;
        
        private var last_time:Object;
        private var current_time:Object;
        private var date:Date;
        
        private var current:MovieClip;
        private var uncurrent:MovieClip;
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            // a simple clock... though i don't know why i named it jellyfish
            
            this.bg_colors = [0x000000, 0x333333, 0x666666, 0x999999, 0xcccccc, 0xffffff];
            this.txt_colors = [0xffffff, 0xffffff, 0xffffff, 0x000000, 0x000000, 0x000000];
            this.ind = Math.floor(Math.random() * this.bg_colors.length);
            
            this.date = new Date();
            
            this.last_time = { h:this.date.getHours(), m:this.date.getMinutes(), s:this.date.getSeconds() };
            this.current_time = { h:this.date.getHours(), m:this.date.getMinutes(), s:this.date.getSeconds() };
            
            panel();
            this.addEventListener(Event.ENTER_FRAME,showtime);
        }
        
        private function showtime(e:Event):void {
            this.date = new Date();
            this.current_time = { h:this.date.getHours(), m:this.date.getMinutes(), s:this.date.getSeconds() };
            if (this.current_time.h != this.last_time.h||this.current_time.m != this.last_time.m||this.current_time.s != this.last_time.s) {
                this.last_time.h = this.current_time.h;
                this.last_time.m = this.current_time.m;
                this.last_time.s = this.current_time.s;
                
                panel();
            }
            
            if (this.numChildren > 1) {
                for (var a:int = 0; a < this.numChildren; a++) {
                    if (this.getChildAt(a) != this.current && this.getChildAt(a) != this.uncurrent) {
                        this.removeChild(this.getChildAt(a));
                    }
                }
            }
        }
        
        private function panel():void {
            // time used...
            var time:String = "";
            if (this.date.getHours().toString().length == 1) {
                time += ("0" + this.date.getHours().toString());
            } else {
                time += this.date.getHours().toString();
            }
            time += ":";
            if (this.date.getMinutes().toString().length == 1) {
                time += ("0" + this.date.getMinutes().toString());
            } else {
                time += this.date.getMinutes().toString();
            }
            time += ":";
            if (this.date.getSeconds().toString().length == 1) {
                time += ("0" + this.date.getSeconds().toString());
            } else {
                time += this.date.getSeconds().toString();
            }
            
            // the sprite 600*400 in size that shows current time
            var sprite:MovieClip = new MovieClip();
            
            // txt_clock is for the time, txt_author is for declaring that the author of this marvellous code is Greek Fellows
            var txt_clock:TextField = new TextField();
            var txt_author:TextField = new TextField();
            
            // set the text
            txt_clock.text = time;
            txt_author.text = "GREEK FELLOWS";
            
            // formats respectively for the text fields
            // mostly the two formats are the same, except the size
            var tf_clock:TextFormat = new TextFormat();
            var tf_author:TextFormat = new TextFormat();
            
            tf_clock.align = "center";
            tf_clock.color = this.txt_colors[this.ind];
            tf_clock.font = "Static";
            tf_clock.size = 24;
            
            tf_author.align = "center";
            tf_author.color = this.txt_colors[this.ind];
            tf_author.font = "Static";
            tf_author.size = 16;
            
            // set format (kinda make me remember the applyFormat in as2...)
            txt_clock.setTextFormat(tf_clock);
            txt_author.setTextFormat(tf_author);
            
            // set width
            txt_clock.width = 200;
            txt_author.width = 200;
            
            // set height
            txt_clock.height = 30;
            txt_author.height = 20;
            
            // set x
            txt_clock.x = - txt_clock.width / 2;
            txt_author.x = - txt_author.width / 2;
            
            // set y
            txt_clock.y = -25;
            txt_author.y = 5;
            
            // the text fields are unselectable
            txt_clock.selectable = false;
            txt_author.selectable = false;
            
            // sprite, add text fields as children!
            sprite.addChild(txt_clock);
            sprite.addChild(txt_author);
            
            // fill the colors
            sprite.graphics.beginFill(this.bg_colors[this.ind], 1);
            sprite.graphics.drawRect( -300, -200, 600, 400);
            sprite.graphics.endFill();
            
            // set the sprite to the middle
            sprite.x = 300;
            sprite.y = 200;
            
            // set the sprite to the current movie clip
            // set the last sprite to the "uncurrent" movie clip
            if (this.current != null) {
                this.uncurrent = this.current;
            }
            this.current = sprite;
            
            // move the sprite to give it a "swoop-in" effect
            this.addEventListener(Event.ENTER_FRAME, swoop);
            this.swoop(null);
            
            // myself add the sprite as a child
            this.addChild(sprite);
            
            // from the colors selection, delete used one
            this.bg_colors.splice(this.ind, 1);
            this.txt_colors.splice(this.ind, 1);
            
            // if there's no color in the selection, fill it up again
            if (this.bg_colors.length <= 0) {
                this.bg_colors = [0x000000, 0x333333, 0x666666, 0x999999, 0xcccccc, 0xffffff];
                this.txt_colors = [0xffffff, 0xffffff, 0xffffff, 0x000000, 0x000000, 0x000000];
            }
            
            // the chosen color decided by the index randomized
            this.ind = Math.floor(Math.random() * this.bg_colors.length);
        }
        
        private function swoop(e:Event):void {
            var targ:MovieClip = MovieClip(this.current);
            
            if (targ.gx == undefined) {
                targ.gx = targ.x;
                targ.gy = targ.y;
                
                switch (Math.floor(Math.random() * 4)) {
                    case 0:
                        targ.x = 300;
                        targ.y = 600;
                        break;
                    
                    case 1:
                        targ.x = 300;
                        targ.y = -200;
                        break;
                    
                    case 2:
                        targ.x = 900;
                        targ.y = 200;
                        break;
                    
                    case 3:
                        targ.x = -300;
                        targ.y = 200;
                        break;
                }
                
                targ.ax = (targ.gx - targ.x) / 120;
                targ.ay = (targ.gy - targ.y) / 120;
                targ.divide = 15;
            }
            
            targ.x += targ.ax * targ.divide;
            targ.y += targ.ay * targ.divide;
            
            if (targ.divide < 0) {
                targ.x = targ.gx;
                targ.y = targ.gy;
                if (this.uncurrent != null) {
                    this.removeChild(this.uncurrent);
                }
                this.removeEventListener(Event.ENTER_FRAME, swoop);
            } else {
                targ.divide-= 1;
            }
        }
    }
}