flash on 2013-1-19

by hemingway
♥0 | Line 320 | Modified 2013-03-16 00:37:47 | 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/5Uby
 */

package
{
    import flash.display.*;
    import flash.system.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.text.*;
    
    [SWF(frameRate = 60, width = 465, height = 465)]
    public class Main extends Sprite
    {
        public function Main()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        }
        
        public function _init() :void
        {
            graphics.lineStyle (1, 0, 1);
            graphics.beginFill (0, 0.1);
            graphics.drawRect  (0, 0, 464, 464);
            graphics.endFill   ();    
        }

        public function addedToStage($e:Event) :void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
            Buffer.buildContext(this);
            
            _init();
        }
    }
}

import flash.display.*;
import flash.system.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;

class Buffer
{
    public static var globalOutput :Output;
    
    public static var gridScatter :Boolean;
    public static var gridContext :Object;
    public static var gridMargin :Point;
    public static var gridScale :Point;
    public static var gridColor :Array;
    public static var gridNodes :Array;
    public static var gridCount :int;
    public static var nodeSize :int;
    public static var nodeNorm :int;
    public static var nodeRand :int;
    
    public static function buildContext($context:Object) :void
    {
        globalOutput = new Output("0")

        gridMargin = new Point();
        gridScale = new Point();
       
        gridContext = $context;
        gridScatter = false;
        gridMargin.x = 1.75;
        gridMargin.y = 2;
        gridScale.x = 12;
        gridScale.y = 12;
        gridNodes = [];
        gridCount = 0;
        nodeSize = 30;
        nodeNorm = 0;
        nodeRand = 0;
        gridColor = [0xCCCCCC, 0xBFBFBF, 0xB3B3B3, 0xA6A6A6, 0x999999, 0x8C8C8C, 0x808080, 0x737373, 0x666666, 0x595959, 0x4D4D4D, 0x404040,
                     0xFF9999, 0xFF8080, 0xFF6666, 0xFF4D4D, 0xFF3333, 0xFF1A1A, 0xFF0000, 0xE60000, 0xCC0000, 0xB30000, 0x990000, 0x800000,
                     0xFFCE99, 0xFFC180, 0xFFB566, 0xFFA94D, 0xFF9C33, 0xFF901A, 0xFF8400, 0xE67700, 0xCC6900, 0xB35C00, 0x994F00, 0x804200,
                     0xFFFF99, 0xFFFF80, 0xFFFF66, 0xFFFF4D, 0xFFFF33, 0xFFFF1A, 0xFFFF00, 0xE6E600, 0xCCCC00, 0xB3B300, 0x999900, 0x808000,
                     0xCFFF99, 0xC3FF80, 0xB8FF66, 0xACFF4D, 0xA0FF33, 0x94FF1A, 0x88FF00, 0x7AE600, 0x6DCC00, 0x5FB300, 0x529900, 0x448000,
                     0x99FF99, 0x80FF80, 0x66FF66, 0x4DFF4D, 0x33FF33, 0x1AFF1A, 0x00FF00, 0x00E600, 0x00CC00, 0x00B300, 0x009900, 0x008000,
                     0x99FFCF, 0x80FFC3, 0x66FFB8, 0x4DFFAC, 0x33FFA0, 0x1AFF94, 0x00FF88, 0x00E67A, 0x00CC6D, 0x00B35F, 0x009952, 0x008044,
                     0x99FFFF, 0x80FFFF, 0x66FFFF, 0x4DFFFF, 0x33FFFF, 0x1AFFFF, 0x00FFFF, 0x00E6E6, 0x00CCCC, 0x00B3B3, 0x009999, 0x008080,
                     0x99CFFF, 0x80C3FF, 0x66B8FF, 0x4DACFF, 0x33A0FF, 0x1A94FF, 0x0088FF, 0x007AE6, 0x006DCC, 0x005FB3, 0x005299, 0x004480,
                     0x9999FF, 0x8080FF, 0x6666FF, 0x4D4DFF, 0x3333FF, 0x1A1AFF, 0x0000FF, 0x0000E6, 0x0000CC, 0x0000B3, 0x000099, 0x000080,
                     0xCF99FF, 0xC380FF, 0xB866FF, 0xAC4DFF, 0xA033FF, 0x941AFF, 0x8800FF, 0x7A00E6, 0x6D00CC, 0x5F00B3, 0x520099, 0x440080,
                     0xFF99FF, 0xFF80FF, 0xFF66FF, 0xFF4DFF, 0xFF33FF, 0xFF1AFF, 0xFF00FF, 0xE600E6, 0xCC00CC, 0xB300B3, 0x990099, 0x800080];
             
        for (var $x:Number = gridMargin.x; $x < (gridScale.x + gridMargin.x); $x++)
        {  
            gridNodes[$x] = [];
            
            for (var $y:Number = gridMargin.y; $y < (gridScale.y + gridMargin.y); $y++)
            {
                gridNodes[$x][$y] = new GridNode($x, $y, nodeSize, nodeColumn(gridCount), gridColor[gridCount]);
                $context.addChild(gridNodes[$x][$y]);
                gridCount ++;
            }
        }
        
        $context.addChild(globalOutput);
    }
    
    private static function nodeColumn($i:Number) :int
    {
        var column_:int = 0;
        
        for (var $:int = 0; $ < 144; $+=12)
        {
            if ($i >= $ && $i < $+12)
            {
                ++column_;
            }
        }
        
        return column_;
    }
    
    public static function gridBehavior() :void
    {
        for (var $x:Number = gridMargin.x; $x < (gridScale.x + gridMargin.x); $x++)
        {  
            for (var $y:Number = gridMargin.y; $y < (gridScale.y + gridMargin.y); $y++)
            {
                gridNodes[$x][$y].assignBehavior();
            }
        }
    }
    
    public static function parseNodeStatus($n:GridNode) :void
    {
        var $enumNodes :int = 0;
        
        for (var $x:Number = gridMargin.x; $x < (gridScale.x + gridMargin.x); $x++)
        {  
            for (var $y:Number = gridMargin.y; $y < (gridScale.y + gridMargin.y); $y++)
            {
                switch (gridNodes[$x][$y].status)
                {
                    case 1: //scattered
                        $enumNodes++;
                        nodeRand = $enumNodes;
                        
                        if (gridNodes[$x][$y].column != $n.column)
                        {
                            $n.mouseEnabled = false;
                            $n.alpha = 0.2;
                        }

                        break;
                    case 2: //normalized
                        break;
                    case 3: //completed
                        break;
                }
            }
        }
    }
}

class GridNode extends Sprite
{    
    protected var _x :Number;
    protected var _y :Number;
    protected var _rand :Point;
    protected var _norm :Point;
    protected var _line :Number;
    protected var _color :Number;
    protected var _alpha :Number;
    protected var _width :Number;
    protected var _height :Number;
    protected var _status :int;
    protected var _column :int;

    private var globalBegin :Point;
    private var globalCurrent :Point;
    private var localCalc :Point;
    
    public function GridNode($x:Number, $y:Number, $scale:Number, $column:int, $color:Number)
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        _rand = new Point();
        _norm = new Point();
        
        _x = _norm.x = ($x * $scale);
        _y = _norm.y = ($y * $scale);
        _rand.x = int(Math.random() * (465 - $scale));
        _rand.y = int(Math.random() * (465 - $scale));
        _width = _height = $scale;
        _column = $column;
        _color = $color;
        _status = 0;
        _alpha = 1;
        _line = 0;
        
        globalBegin = new Point();
        globalCurrent = new Point();
        localCalc = new Point();
    }
    
    public function _init() :void
    {
        graphics.clear     ();
        graphics.lineStyle (1, 0xFFFFFF, _line);
        
        graphics.beginFill (_color, _alpha);
        graphics.drawRect  (_x, _y, _width, _height);
        graphics.endFill   ();
    }
    
    public function addedToStage($e:Event) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        _init();
        
        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }
    
    public function onMouseDown($e:MouseEvent) :void
    {      
        _line = 0.9; _init();
        parent.setChildIndex(this, (parent.numChildren - 2));
        globalBegin = new Point($e.stageX, $e.stageY);

        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    }
    
    public function onMouseMove($e:MouseEvent) :void
    {
        globalCurrent = new Point($e.stageX, $e.stageY);
        localCalc = Point(globalCurrent.subtract(globalBegin));
        
        x = (x + localCalc.x);
        y = (y + localCalc.y);
        
        globalBegin = globalCurrent;
    }
    
    public function onMouseUp($e:MouseEvent) :void
    {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        
        _line = 0; _init();
        globalBegin = null;
        
        Buffer.gridBehavior();
    }
    
    public function assignBehavior() :void
    {
        switch (Buffer.gridScatter)
        {
            case true:
                addEventListener(Event.ENTER_FRAME, normalizeOnFrame);
                break;
            case false:
                addEventListener(Event.ENTER_FRAME, scatterOnFrame);
                break;
        }
    }
    
    public function scatterOnFrame($e:Event) :void
    {
        if  (((x < (_rand.x-0.01)) || (x > (_rand.x+0.01))) && ((y < _rand.y-0.01) || (y > _rand.y+0.01)))
        {
            x += ((_rand.x - x) / 6); y += ((_rand.y - y) / 6);
        }else{
            removeEventListener(Event.ENTER_FRAME, scatterOnFrame);
            
            x = _rand.x;
            y = _rand.y;
            _status = 1;
            Buffer.parseNodeStatus(this);
        }
    }
    
    public function normalizeOnFrame($e:Event) :void
    {
    //    if  (((x < regX-0.00001) || (x > regX+0.00001)) && ((y < regY-0.00001) || (y > regY+0.00001))) {x += ((x - regX)/3); y -= ((y - regY)/3);}
    //    else {removeEventListener(Event.ENTER_FRAME, normalizeOnFrame); x = regX; y = regY; isNormalized = true; mouseEnabled = false; Buffer.parseProgress()}    
    }
    
    public function get fill() :Number
    { return _color }
    public function get randoms() :Point
    { return _rand }
    public function get normals() :Point
    { return _norm }
    public function get status() :int
    { return _status }
    public function get column() :int
    { return _column }
    public override function get alpha() :Number
    { return _alpha }
    public override function get x() :Number
    { return _x }
    public override function get y() :Number
    { return _y }
    public override function get width() :Number
    { return _width }
    public override function get height() :Number
    { return _height }

    public function set fill($:Number) :void
    { _color = $; _init() }
    public function set randoms($:Point) :void
    { _rand = $ }
    public function set normals($:Point) :void
    { _norm = $ }
    public function set status($:int) :void
    { _status = $ }
    public function set column($:int) :void
    { _column = $ }
    public override function set alpha($:Number) :void
    { _alpha = $; _init() }
    public override function set x($:Number) :void
    { _x = $; _init() }
    public override function set y($:Number) :void
    { _y = $; _init() }
    public override function set width($:Number) :void
    { _width = $; _init() }
    public override function set height($:Number) :void
    { _height = $; _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() }
}