flash on 2015-3-4

by umhr
♥0 | Line 498 | Modified 2015-03-04 21:22:53 | MIT License
play

ActionScript3 source code

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

package 

{

    import flash.display.*;

    import flash.events.*;

    import flash.geom.*;



    dynamic public class MainTimeline extends MovieClip

    {

        public var origin_array:Array;

        public var meta_origin_array:Array;

        public var animestep_num:uint;

        public var distance_num:int;

        public var draw_count:uint;

        public var animecount_num:uint;

        public var poz_array:Array;

        public var categoryLength:int;

        public var object_array:Array;

        public var anime_array:Array;



        public function MainTimeline()

        {

            frame1();

            frame5();

            //addFrameScript(0, frame1, 4, frame5);

            return;

        }// end function



        public function fnKeydownswitch(param1:int) : void

        {

            switch(param1)

            {

                case 37:

                {

                    poz_array[4] = poz_array[4] + Math.PI / 40;

                    break;

                }

                case 38:

                {

                    poz_array[3] = poz_array[3] - Math.PI / 40;

                    break;

                }

                case 39:

                {

                    poz_array[4] = poz_array[4] - Math.PI / 40;

                    break;

                }

                case 40:

                {

                    poz_array[3] = poz_array[3] + Math.PI / 40;

                    break;

                }

                case 188:

                {

                    poz_array[0] = poz_array[0] - 40;

                    break;

                }

                case 190:

                {

                    poz_array[0] = poz_array[0] + 40;

                    break;

                }

                case 219:

                {

                    poz_array[2] = poz_array[2] - 40;

                    break;

                }

                case 221:

                {

                    poz_array[2] = poz_array[2] + 40;

                    break;

                }

                default:

                {

                    return;

                    break;

                }

            }

            animecount_num = 0;

            return;

        }// end function



        private function frame1():void

        {

            distance_num = 25;

            return;

        }// end function



        public function fn_clipping(param1:Array, param2:Array) : void

        {

            var _loc_3:* = 0;

            var _loc_4:* = undefined;

            var _loc_5:* = 0;

            var _loc_6:* = 0;

            var _loc_7:* = 0;

            var _loc_8:* = NaN;

            var _loc_9:* = NaN;

            var _loc_10:* = NaN;

            _loc_3 = 0;

            while (_loc_3 < param1.length)

            {

                

                if (param2[_loc_3][1] == "fill")

                {

                    _loc_4 = new Array(param1[_loc_3][0]);

                    _loc_5 = 1;

                    while (_loc_5 < param1[_loc_3].length)

                    {

                        

                        _loc_6 = _loc_5 % (param1[_loc_3].length - 1) + 1;

                        _loc_7 = (_loc_5 + param1[_loc_3].length + 1) % (param1[_loc_3].length - 1) + 1;

                        if (param1[_loc_3][_loc_5][2] < -3800)

                        {

                            if (param1[_loc_3][_loc_6][2] > -3800)

                            {

                                _loc_8 = (-3800 - param1[_loc_3][_loc_5][2]) / (param1[_loc_3][_loc_6][2] - param1[_loc_3][_loc_5][2]);

                                _loc_9 = (param1[_loc_3][_loc_6][0] - param1[_loc_3][_loc_5][0]) * _loc_8 + param1[_loc_3][_loc_5][0];

                                _loc_10 = (param1[_loc_3][_loc_6][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([_loc_9, _loc_10, -3800]);

                            }

                            if (param1[_loc_3][_loc_7][2] > -3800)

                            {

                                _loc_8 = (-3800 - param1[_loc_3][_loc_5][2]) / (param1[_loc_3][_loc_7][2] - param1[_loc_3][_loc_5][2]);

                                _loc_9 = (param1[_loc_3][_loc_7][0] - param1[_loc_3][_loc_5][0]) * _loc_8 + param1[_loc_3][_loc_5][0];

                                _loc_10 = (param1[_loc_3][_loc_7][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([_loc_9, _loc_10, -3800]);

                            }

                        }

                        else

                        {

                            _loc_4.push(param1[_loc_3][_loc_5]);

                        }

                        _loc_5++;

                    }

                    if (_loc_4.length < 4)

                    {

                        param2[_loc_3][2] = false;

                    }

                    else

                    {

                        param2[_loc_3][2] = true;

                    }

                    param1[_loc_3] = _loc_4.concat();

                }

                _loc_3++;

            }

            return;

        }// end function



        public function fnIniCategorylayer(param1:int) : void

        {

            var _loc_2:* = 0;

            var _loc_3:* = 0;

            var _loc_4:* = null;

            _loc_2 = 0;

            while (_loc_2 < param1)

            {

                

                _loc_3 = _loc_2 * distance_num - (param1 - 1) * distance_num * 0.5;

                origin_array.push([[0, 0, _loc_3], [-170, -170, _loc_3], [170, -170, _loc_3], [170, 170, _loc_3], [-170, 170, _loc_3]]);

                meta_origin_array.push([_loc_2, "fill", true, true]);

                _loc_4 = new Sprite();

                _loc_4.x = stage.stageWidth * 0.5+_loc_2*5;

                _loc_4.y = stage.stageHeight * 0.5+_loc_2*5;

                stage.addChild(_loc_4);

                object_array[object_array.length] = _loc_4;

                _loc_2++;

            }

            return;

        }// end function



        public function fn_pertrans(param1:Array) : void

        {

            var _loc_2:* = 0;

            var _loc_3:* = 0;

            var _loc_4:* = 0;

            var _loc_5:* = 0;

            var _loc_6:* = NaN;

            _loc_2 = param1.length;

            _loc_3 = 0;

            while (_loc_3 < _loc_2)

            {

                

                _loc_4 = param1[_loc_3].length;

                _loc_5 = 0;

                while (_loc_5 < _loc_4)

                {

                    

                    _loc_6 = 4000 / (4000 + param1[_loc_3][_loc_5][2]);

                    param1[_loc_3][_loc_5] = [param1[_loc_3][_loc_5][0] * _loc_6, param1[_loc_3][_loc_5][1] * _loc_6, _loc_6];

                    _loc_5++;

                }

                _loc_3++;

            }

            return;

        }// end function



        private function frame5():void

        {

            stop();

            categoryLength = 35;

            poz_array = new Array(0, 0, 800, -0.2, -0.2, 0);

            animecount_num = new uint(0);

            anime_array = new Array(0, 0, -5000, 0, 0, 0);

            animestep_num = new uint(60);

            draw_count = 0;

            origin_array = new Array();

            meta_origin_array = new Array();

            object_array = new Array();

            fnIniCategorylayer(categoryLength);

            stage.addEventListener(Event.ENTER_FRAME, fnMain);

            stage.addEventListener(KeyboardEvent.KEY_DOWN, function (event:KeyboardEvent):void

            {

                fnKeydownswitch(event.keyCode);

                return;

            }// end function

            );

            return;

        }// end function



        public function fn_arraycopy(param1:Array) : Array

        {

            var _loc_2:* = null;

            var _loc_3:* = 0;

            var _loc_4:* = null;

            var _loc_5:* = 0;

            var _loc_6:* = null;

            var _loc_7:* = undefined;

            var _loc_8:* = 0;

            _loc_2 = new Array();

            _loc_3 = param1.length;

            _loc_4 = new Array();

            _loc_5 = 0;

            while (_loc_5 < _loc_3)

            {

                

                _loc_6 = new Array();

                _loc_7 = param1[_loc_5].length;

                _loc_8 = 0;

                while (_loc_8 < _loc_7)

                {

                    

                    _loc_6[_loc_8] = [param1[_loc_5][_loc_8][0], param1[_loc_5][_loc_8][1], param1[_loc_5][_loc_8][2]];

                    _loc_8++;

                }

                _loc_4[_loc_5] = _loc_6.concat();

                _loc_5++;

            }

            return _loc_4;

        }// end function



        public function distance3d(param1:Array, param2:Array) : Number

        {

            var _loc_3:* = null;

            var _loc_4:* = null;

            var _loc_5:* = NaN;

            var _loc_6:* = null;

            _loc_3 = new Point(param1[0], param1[1]);

            _loc_4 = new Point(param2[0], param2[1]);

            _loc_5 = Point.distance(_loc_3, _loc_4);

            _loc_6 = new Point(_loc_5, param2[2] - param1[2]);

            return _loc_6.length;

        }// end function



        public function fnMain(event:Event) : void

        {

            var _loc_2:* = NaN;

            var _loc_3:* = NaN;

            var _loc_4:* = 0;

            var _loc_5:* = 0;

            var _loc_6:* = null;

            var _loc_7:* = 0;

            var _loc_8:* = null;

            if (animecount_num < animestep_num)

            {

                var _loc_10:* = animecount_num + 1;

                animecount_num = _loc_10;

            }

            else if (animecount_num == animestep_num)

            {

                return;

            }

            if (animecount_num < 20)

            {

                stage.quality = StageQuality.LOW;

            }

            else if (animecount_num < 30)

            {

                stage.quality = StageQuality.MEDIUM;

            }

            else if (animecount_num < 40)

            {

                stage.quality = StageQuality.HIGH;

            }

            else

            {

                stage.quality = StageQuality.BEST;

            }

            _loc_2 = animecount_num / animestep_num;

            _loc_3 = 1 - _loc_2;

            _loc_4 = 0;

            while (_loc_4 < poz_array.length)

            {

                

                anime_array[_loc_4] = anime_array[_loc_4] * _loc_3 + poz_array[_loc_4] * _loc_2;

                _loc_4 = _loc_4 + 1;

            }

            _loc_5 = categoryLength;

            _loc_6 = new Array();

            _loc_6 = fn_arraycopy(origin_array);

            _loc_7 = new uint();

            _loc_7 = _loc_6.length;

            fn_affine(_loc_6, anime_array);

            fn_clipping(_loc_6, meta_origin_array);

            _loc_8 = fn_zsort(_loc_6, meta_origin_array);

            fn_pertrans(_loc_6);

            fn_clipping_xy(_loc_6, meta_origin_array);

            fnRender(_loc_6, meta_origin_array, _loc_8, _loc_5);

            return;

        }// end function



        public function fn_clipping_xy(param1:Array, param2:Array) : void

        {

            var _loc_3:* = 0;

            var _loc_4:* = undefined;

            var _loc_5:* = 0;

            var _loc_6:* = 0;

            var _loc_7:* = 0;

            var _loc_8:* = NaN;

            var _loc_9:* = NaN;

            var _loc_10:* = NaN;

            _loc_3 = 0;

            while (_loc_3 < param1.length)

            {

                

                if (param2[_loc_3][1] == "fill")

                {

                    _loc_4 = new Array(param1[_loc_3][0]);

                    _loc_5 = 1;

                    while (_loc_5 < param1[_loc_3].length)

                    {

                        

                        _loc_6 = _loc_5 % (param1[_loc_3].length - 1) + 1;

                        _loc_7 = (_loc_5 + param1[_loc_3].length + 1) % (param1[_loc_3].length - 1) + 1;

                        if (param1[_loc_3][_loc_5][0] < -1040)

                        {

                            if (param1[_loc_3][_loc_7][0] > -1040)

                            {

                                _loc_8 = (-1040 - param1[_loc_3][_loc_5][0]) / (param1[_loc_3][_loc_7][0] - param1[_loc_3][_loc_5][0]);

                                _loc_10 = (param1[_loc_3][_loc_7][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([-1040, _loc_10, param1[_loc_3][_loc_5][2]]);

                            }

                            if (param1[_loc_3][_loc_6][0] > -1040)

                            {

                                _loc_8 = (-1040 - param1[_loc_3][_loc_5][0]) / (param1[_loc_3][_loc_6][0] - param1[_loc_3][_loc_5][0]);

                                _loc_10 = (param1[_loc_3][_loc_6][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([-1040, _loc_10, param1[_loc_3][_loc_5][2]]);

                            }

                        }

                        else if (param1[_loc_3][_loc_5][0] > 1040)

                        {

                            if (param1[_loc_3][_loc_7][0] < 1040)

                            {

                                _loc_8 = (1040 - param1[_loc_3][_loc_5][0]) / (param1[_loc_3][_loc_7][0] - param1[_loc_3][_loc_5][0]);

                                _loc_10 = (param1[_loc_3][_loc_7][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([1040, _loc_10, param1[_loc_3][_loc_5][2]]);

                            }

                            if (param1[_loc_3][_loc_6][0] < 1040)

                            {

                                _loc_8 = (1040 - param1[_loc_3][_loc_5][0]) / (param1[_loc_3][_loc_6][0] - param1[_loc_3][_loc_5][0]);

                                _loc_10 = (param1[_loc_3][_loc_6][1] - param1[_loc_3][_loc_5][1]) * _loc_8 + param1[_loc_3][_loc_5][1];

                                _loc_4.push([1040, _loc_10, param1[_loc_3][_loc_5][2]]);

                            }

                        }

                        else

                        {

                            _loc_4.push(param1[_loc_3][_loc_5]);

                        }

                        _loc_5++;

                    }

                    if (_loc_4.length < 4)

                    {

                        param2[_loc_3][2] = false;

                    }

                    else

                    {

                        param2[_loc_3][2] = true;

                    }

                    param1[_loc_3] = _loc_4.concat();

                }

                _loc_3++;

            }

            return;

        }// end function



        public function fnRender(param1:Array, param2:Array, param3:Array, param4:int) : void

        {

            var _loc_5:* = 0;

            var _loc_6:* = 0;

            var _loc_7:* = 0;

            var _loc_8:* = undefined;

            var _loc_9:* = 0;

            var _loc_10:* = 0;

            _loc_5 = param1.length;

            _loc_6 = 0;

            while (_loc_6 < _loc_5)

            {

                

                _loc_7 = param3[_loc_6];

                if (!param2[_loc_7][2] && !param2[_loc_7][3])

                {

                }

                else

                {

                    _loc_8 = Sprite(object_array[_loc_7]);

                    _loc_8.graphics.clear();

                    if (!param2[_loc_7][2] && param2[_loc_7][3])

                    {

                        param2[_loc_7][3] = false;

                        ;

                    }

                    else if (param2[_loc_7][2] && !param2[_loc_7][3])

                    {

                        param2[_loc_7][3] = true;

                    }

                    _loc_8.graphics.beginFill(8947967, 0.02);

                    _loc_8.graphics.lineStyle(0, 16711680, 0.5);

                    _loc_9 = param1[_loc_7].length - 1;

                    _loc_8.graphics.moveTo(param1[_loc_7][_loc_9][0], param1[_loc_7][_loc_9][1]);

                    _loc_10 = 1;

                    while (_loc_10 <= _loc_9)

                    {

                        

                        _loc_8.graphics.lineTo(param1[_loc_7][_loc_10][0], param1[_loc_7][_loc_10][1]);

                        _loc_10++;

                    }

                    _loc_8.graphics.endFill();

                    stage.swapChildrenAt(stage.getChildIndex(_loc_8), _loc_6);

                }

                _loc_6++;

            }

            return;

        }// end function



        public function fn_affine(param1:Array, param2:Array) : void

        {

            var _loc_3:* = NaN;

            var _loc_4:* = NaN;

            var _loc_5:* = NaN;

            var _loc_6:* = NaN;

            var _loc_7:* = NaN;

            var _loc_8:* = NaN;

            var _loc_9:* = NaN;

            var _loc_10:* = NaN;

            var _loc_11:* = NaN;

            var _loc_12:* = NaN;

            var _loc_13:* = NaN;

            var _loc_14:* = NaN;

            var _loc_15:* = NaN;

            var _loc_16:* = NaN;

            var _loc_17:* = NaN;

            var _loc_18:* = NaN;

            var _loc_19:* = NaN;

            var _loc_20:* = NaN;

            var _loc_21:* = 0;

            var _loc_22:* = 0;

            var _loc_23:* = 0;

            var _loc_24:* = 0;

            var _loc_25:* = NaN;

            var _loc_26:* = NaN;

            var _loc_27:* = NaN;

            _loc_3 = Math.cos(param2[uint(3)]);

            _loc_4 = Math.sin(param2[uint(3)]);

            _loc_5 = Math.cos(param2[uint(4)]);

            _loc_6 = Math.sin(param2[uint(4)]);

            _loc_7 = Math.cos(param2[uint(5)]);

            _loc_8 = Math.sin(param2[uint(5)]);

            _loc_9 = param2[uint(0)];

            _loc_10 = param2[uint(1)];

            _loc_11 = param2[uint(2)];

            _loc_12 = _loc_7 * _loc_5 + _loc_4 * _loc_6 * _loc_8;

            _loc_13 = _loc_4 * _loc_6 * _loc_7 - _loc_8 * _loc_5;

            _loc_14 = _loc_6 * _loc_3;

            _loc_15 = _loc_3 * _loc_8;

            _loc_16 = _loc_3 * _loc_7;

            _loc_17 = -_loc_4;

            _loc_18 = _loc_5 * _loc_4 * _loc_8 - _loc_6 * _loc_7;

            _loc_19 = _loc_6 * _loc_8 + _loc_5 * _loc_4 * _loc_7;

            _loc_20 = _loc_3 * _loc_5;

            _loc_21 = new uint(param1.length);

            _loc_22 = 0;

            while (_loc_22 < _loc_21)

            {

                

                _loc_23 = new uint(param1[_loc_22].length);

                _loc_24 = 0;

                while (_loc_24 < _loc_23)

                {

                    

                    _loc_25 = param1[_loc_22][uint(_loc_24)][uint(0)];

                    _loc_26 = param1[_loc_22][uint(_loc_24)][uint(1)];

                    _loc_27 = param1[_loc_22][uint(_loc_24)][uint(2)];

                    param1[_loc_22][uint(_loc_24)][uint(0)] = _loc_25 * _loc_12 + _loc_26 * _loc_13 + _loc_27 * _loc_14 + _loc_9;

                    param1[_loc_22][uint(_loc_24)][uint(1)] = _loc_25 * _loc_15 + _loc_26 * _loc_16 + _loc_27 * _loc_17 + _loc_10;

                    param1[_loc_22][uint(_loc_24)][uint(2)] = _loc_25 * _loc_18 + _loc_26 * _loc_19 + _loc_27 * _loc_20 + _loc_11;

                    _loc_24 = _loc_24 + 1;

                }

                _loc_22 = _loc_22 + 1;

            }

            return;

        }// end function



        public function fn_zsort(param1:Array, param2:Array) : Array

        {

            var _loc_3:* = 0;

            var _loc_4:* = null;

            var _loc_5:* = 0;

            _loc_3 = param1.length;

            _loc_4 = new Array();

            _loc_5 = 0;

            while (_loc_5 < _loc_3)

            {

                

                _loc_4.push(distance3d(param1[_loc_5][0], [0, 0, -100000]));

                _loc_5++;

            }

            return _loc_4.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY | Array.DESCENDING);

        }// end function



    }

}