/**
* 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
}
}