flash on 2013-3-30

by hemingway
♥0 | Line 239 | Modified 2013-03-30 09:10:39 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.display.*;
    import flash.filters.*;
    import flash.events.*;
    import flash.utils.*;
    import flash.geom.*;

    public class Main extends Sprite
    {
        public static var PANEL_TARGET :Object;
        public static var PANEL_STATE :Boolean;
        
        private var _output :Output;
        private var _panel :Panel;
        private var _panelBuffer :Sprite;
        private var _bufferArray :Array;
        
        protected var _rotDenom :int;
        protected var _prevMouse :Point;
        protected var _currMouse :Point;
        
        public function Main()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
            PANEL_STATE = false;
        
            _output = new Output("");
            
            _rotDenom = 16;
            _prevMouse = new Point();
            _currMouse = new Point();
            _bufferArray = [];
        }
        
        public function addedToStage($e:*) :void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStage);    
            
            addChild(_output);
            
            for (var $x:int = 1; $x<=3; $x++)
            {
                for (var $y:int = 1; $y<=3; $y++)
                {
                    _panelBuffer = new Sprite();
                    _panelBuffer.x = ($x*93+46.5);
                    _panelBuffer.y = ($y*93+46.5);
                    _bufferArray.push(_panelBuffer); 
                    _panel = new Panel((-_panelBuffer.x + 93), (-_panelBuffer.y + 93), ((93*3)-5), ((93*3)- 5));
                    _panel.x -= 46.5;
                    _panel.y -= 46.5;
                    
                    _panelBuffer.addChild(_panel);
                    addChild(_panelBuffer);                    
                }
            }
            
            addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        }
        
        public function onMouseMove($e:MouseEvent) :void
        {
            _currMouse = new Point($e.stageX, $e.stageY);

            if (_prevMouse != null)
            {
                for (var $:int = 1; $<numChildren; $++)
                {
                    var $panel :Object = getChildAt($);
                    
                    for (var $$:int = 0; $$<_bufferArray.length; $$++)
                    {
                        if ($panel == _bufferArray[$$])
                        {
                            $panel.rotationY = int(($panel.x-_currMouse.x)/_rotDenom);
                            $panel.rotationX = int((_currMouse.y-$panel.y)/_rotDenom);
                        }
                    }
                }
            }    
            
            _prevMouse = _currMouse;
        }
        
        public function onMouseDown($e:MouseEvent) :void
        {
            for (var $:int = 0; $<numChildren; $++)
            {
                (getChildAt($) != PANEL_TARGET && getChildAt($) != _output) ? ((PANEL_STATE) ? addEventListener(Event.ENTER_FRAME, onFrame) : (removeEventListener(Event.ENTER_FRAME, onFrame), getChildAt($).visible = false)) : null;
            }
        }
        
        public function onFrame($e:*) :void
        {
            for (var $:int = 0; $<numChildren; $++)
            {
                (getChildAt($) != PANEL_TARGET && getChildAt($) != _output) ? ((PANEL_STATE) ? null : (getChildAt($).visible = true)) : null;
            }
        }
    }
}

import flash.display.*;
import flash.filters.*;
import flash.events.*;
import flash.utils.*;
import flash.geom.*;
import flash.text.*;

class Panel extends Sprite
{
    protected var _color :Number;
    protected var _openX :Number;
    protected var _openY :Number;
    protected var _width :Number;
    protected var _height :Number;
    protected var _closedX :Number;
    protected var _closedY :Number;
    protected var _openWidth :Number;
    protected var _openHeight :Number;
    protected var _closedWidth :Number;
    protected var _closedHeight :Number;
    protected var _transition :Boolean;
    
    public function Panel($openX:Number, $openY:Number, $openWidth:Number, $openHeight:Number)
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);

        _openX = $openX;
        _openY = $openY;
        _color = 0xCCCCCC;
        _width = (($openWidth / 3) - 5);
        _height = (($openHeight / 3) -5);
        _closedX = -46.5;
        _closedY = -46.5;
        _openWidth = $openWidth;
        _openHeight = $openHeight;
        _closedWidth = _width;
        _closedHeight = _height;
        _transition = false;
    }
    
    public function addedToStage($e:*) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        init();
        
        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
    }
    
    public function init() :void
    {
        graphics.clear();
        graphics.beginFill(_color);
        graphics.drawRect(0, 0, _width, _height);
        graphics.endFill();
    }
    
    public function fullTransition() :void
    {
        var $a :Boolean;
        var $b :Boolean;
        var $c :Boolean;
        var $d :Boolean;
        
        switch (_transition)
        {
            case true: //opened -> closed
                (x <= _closedX) ? (x += int((((_closedX)+2) - x)/2)) : $a = true;
                (y <= _closedY) ? (y += int((((_closedY)+2) - y)/2)) : $b = true;
                (width >= _closedWidth) ? (width -= int((width - (_closedWidth-2))/2)) : $c = true;
                (height >= _closedHeight) ? (height -= int((height - (_closedHeight-2))/2)) : $d = true;
                
                ($a == true && $b == true && $c == true && $d == true) ? (_transition = Main.PANEL_STATE = false, removeEventListener(Event.ENTER_FRAME, mouseDownBuffer)) : null;
            break;
            
            case false: //closed -> opened
                (x >= _openX) ? (x -= int((x - (_openX-2))/2)) : $a = true;
                (y >= _openY) ? (y -= int((y - (_openY-2))/2)) : $b = true;
                (width <= _openWidth) ? (width += int(((_openWidth+2) - width)/2)) : $c = true;
                (height <= _openHeight) ? (height += int(((_openHeight+2) - height)/2)) : $d = true;
                    
                ($a == true && $b == true && $c == true && $d == true) ? (_transition = Main.PANEL_STATE = true, removeEventListener(Event.ENTER_FRAME, mouseDownBuffer)) : null;
            break;
        }
    }
    
    public function mouseDownBuffer($e:*) :void
    {
        fullTransition();
    }

    public function onMouseOver($e:MouseEvent) :void
    {
        (color != 0x999999) ? color = 0xBBBBBB : null;
    }
    
    public function onMouseDown($e:MouseEvent) :void
    {
        color = 0x999999;
        Main.PANEL_TARGET = this.parent;
        addEventListener(Event.ENTER_FRAME, mouseDownBuffer);
    }
    
    public function onMouseOut($e:MouseEvent) :void
    {
        (color != 0x999999) ? color = 0xCCCCCC : null;  
    }
    
    public function onMouseUp($e:MouseEvent) :void
    {
        color = 0xCCCCCC;
    }
    
    public override function get width() :Number
    {return _width}
    public override function get height() :Number
    {return _height}
    public function get color() :Number
    {return _color}
    
    public override function set width($:Number) :void
    {_width = $; init()}
    public override function set height($:Number) :void
    {_height = $; init()}
    public function set color($:Number) :void
    {_color = $; init()}
}

class Output extends TextField
{
    private var textFormat :TextFormat;
        
    protected var _x :Number;
    protected var _y :Number;
    protected var _font :String;
    protected var _content :String;
        
    public function Output($content:String, $x:Number = 1, $y:Number = 0, $font:String = "Helvetica")
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
        _x = $x;
        _y = $y;
        _font = $font;
        _content = $content;
            
        multiline = true;
        autoSize = "left";
        selectable = mouseEnabled = false;
        antiAliasType = AntiAliasType.ADVANCED;
    }
        
    public function _init() :void
    {
        x = _x;
        y = _y;
        text = _content;
            
        textFormat = new TextFormat(_font);
        setTextFormat(textFormat);
    }
        
    public function addedToStage($e:Event) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
        _init(); 
    }
        
    public function get font() :String
    { return _font }
    public function get nWidth() :Number
    { return width }
        
    public function set font($:String) :void
    { _font = $; _init() }
    public function set content($:String) :void
    { _content = $; _init() }
}