Section 1
//FPS (com.alternativagame.admin.FPS)
package com.alternativagame.admin {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.text.*;
import flash.utils.*;
import flash.system.*;
public final class FPS extends Sprite {
private var currentY:int;
private var diagramTimer:int;
private var tfTimer:int;
private var downloadedBytes:uint;// = 0
private var socketOutBytes:uint;// = 0
private var socketOutLast:uint;// = 0
private var socketInBytes:uint;// = 0
private var mem:TextField;
private var skn:TextField;
private var diagram:BitmapData;
private var socketOut:TextField;
private var skins:int;// = -1
private var fps:TextField;
private var socketInLast:uint;// = 0
private var tfDelay:int;// = 0
private var socketIn:TextField;
private var dwl:TextField;
private var skinsChanged:int;// = 0
private static const maxMemory:uint = 41943040;
private static const diagramWidth:uint = 60;
private static const tfDelayMax:int = 10;
private static const maxSocket:uint = 4200;
private static const diagramHeight:uint = 40;
private static var instance:FPS;
public function FPS(_arg1:DisplayObjectContainer){
var _local2:Bitmap;
fps = new TextField();
mem = new TextField();
skn = new TextField();
dwl = new TextField();
socketIn = new TextField();
socketOut = new TextField();
super();
if (instance == null){
mouseEnabled = false;
mouseChildren = false;
_arg1.addChild(this);
fps.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCCCCCC);
fps.autoSize = TextFieldAutoSize.LEFT;
fps.text = ("FPS: " + Number(stage.frameRate).toFixed(2));
fps.selectable = false;
fps.x = (-(diagramWidth) - 2);
addChild(fps);
mem.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCCCC00);
mem.autoSize = TextFieldAutoSize.LEFT;
mem.text = ("MEM: " + bytesToString(System.totalMemory));
mem.selectable = false;
mem.x = (-(diagramWidth) - 2);
mem.y = 10;
addChild(mem);
currentY = 20;
skn.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFF6600);
skn.autoSize = TextFieldAutoSize.LEFT;
skn.text = ("MEM: " + bytesToString(System.totalMemory));
skn.selectable = false;
skn.x = (-(diagramWidth) - 2);
dwl.defaultTextFormat = new TextFormat("Tahoma", 10, 0xCC00CC);
dwl.autoSize = TextFieldAutoSize.LEFT;
dwl.selectable = false;
dwl.x = (-(diagramWidth) - 2);
socketIn.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFF00);
socketIn.autoSize = TextFieldAutoSize.LEFT;
socketIn.selectable = false;
socketIn.x = (-(diagramWidth) - 2);
socketOut.defaultTextFormat = new TextFormat("Tahoma", 10, 26367);
socketOut.autoSize = TextFieldAutoSize.LEFT;
socketOut.selectable = false;
socketOut.x = (-(diagramWidth) - 2);
diagram = new BitmapData(diagramWidth, diagramHeight, true, 553648127);
_local2 = new Bitmap(diagram);
_local2.y = (currentY + 4);
_local2.x = -(diagramWidth);
addChildAt(_local2, 0);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();
diagramTimer = getTimer();
tfTimer = getTimer();
} else {
throw (new Error("FPS is a Singleton. Use FPS.init to create FPS instance"));
};
}
private function bytesToString(_arg1:uint):String{
var _local2:String;
if (_arg1 < 0x0400){
_local2 = (String(_arg1) + "b");
} else {
if (_arg1 < 0x2800){
_local2 = (Number((_arg1 / 0x0400)).toFixed(2) + "kb");
} else {
if (_arg1 < 102400){
_local2 = (Number((_arg1 / 0x0400)).toFixed(1) + "kb");
} else {
if (_arg1 < 0x100000){
_local2 = ((_arg1 >> 10) + "kb");
} else {
if (_arg1 < 0xA00000){
_local2 = (Number((_arg1 / 0x100000)).toFixed(2) + "mb");
} else {
if (_arg1 < 104857600){
_local2 = (Number((_arg1 / 0x100000)).toFixed(1) + "mb");
} else {
_local2 = ((_arg1 >> 20) + "mb");
};
};
};
};
};
};
return (_local2);
}
private function onEnterFrame(_arg1:Event):void{
tfDelay++;
if (tfDelay >= tfDelayMax){
tfDelay = 0;
fps.text = ("FPS: " + Number(((1000 * tfDelayMax) / (getTimer() - tfTimer))).toFixed(2));
tfTimer = getTimer();
};
var _local2:Number = (1000 / (getTimer() - diagramTimer));
var _local3:Number = ((_local2)>stage.frameRate) ? 1 : (_local2 / stage.frameRate);
diagramTimer = getTimer();
diagram.scroll(1, 0);
diagram.fillRect(new Rectangle(0, 0, 1, diagram.height), 553648127);
diagram.setPixel32(0, (diagramHeight * (1 - _local3)), 4291611852);
mem.text = ("MEM: " + bytesToString(System.totalMemory));
var _local4:Number = ((skins)==0) ? 0 : (skinsChanged / skins);
diagram.setPixel32(0, (diagramHeight * (1 - _local4)), 4294927872);
var _local5:Number = (System.totalMemory / maxMemory);
diagram.setPixel32(0, (diagramHeight * (1 - _local5)), 4291611648);
var _local6:Number = ((socketInBytes - socketInLast) / maxSocket);
socketInLast = socketInBytes;
diagram.setPixel32(0, (diagramHeight * (1 - _local6)), 4278255360);
var _local7:Number = ((socketOutBytes - socketOutLast) / maxSocket);
socketOutLast = socketOutBytes;
diagram.setPixel32(0, (diagramHeight * (1 - _local7)), 4278216447);
}
private function onResize(_arg1:Event=null):void{
var _local2:Point = parent.globalToLocal(new Point((stage.stageWidth - 2), -3));
x = _local2.x;
y = _local2.y;
}
public static function addDownloadBytes(_arg1:uint):void{
if (instance.downloadedBytes == 0){
instance.dwl.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.dwl);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.downloadedBytes = (instance.downloadedBytes + _arg1);
instance.dwl.text = ("DWL: " + instance.bytesToString(instance.downloadedBytes));
}
public static function init(_arg1:DisplayObjectContainer):void{
instance = new FPS(_arg1);
}
public static function addSocketInBytes(_arg1:uint):void{
if (instance.socketInBytes == 0){
instance.socketIn.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.socketIn);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.socketInBytes = (instance.socketInBytes + _arg1);
instance.socketIn.text = ("IN: " + instance.bytesToString(instance.socketInBytes));
}
public static function addSocketOutBytes(_arg1:uint):void{
if (instance.socketOutBytes == 0){
instance.socketOut.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.socketOut);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.socketOutBytes = (instance.socketOutBytes + _arg1);
instance.socketOut.text = ("OUT: " + instance.bytesToString(instance.socketOutBytes));
}
public static function addSkins(_arg1:uint, _arg2:uint):void{
if (instance.skins < 0){
instance.skn.y = instance.currentY;
instance.currentY = (instance.currentY + 10);
instance.addChild(instance.skn);
instance.getChildAt(0).y = (instance.currentY + 4);
};
instance.skins = _arg1;
instance.skinsChanged = _arg2;
instance.skn.text = ("SKN: " + ((_arg2)>0) ? ((_arg1.toString() + "-") + _arg2.toString()) : _arg1.toString());
}
}
}//package com.alternativagame.admin
Section 2
//Collision (com.alternativagame.engine3d.collision.Collision)
package com.alternativagame.engine3d.collision {
import com.alternativagame.engine3d.*;
import com.alternativagame.type.*;
public class Collision {
public var point:Point3D;
public var offset:Number;
public var normal:Point3D;
public var face:Face;
}
}//package com.alternativagame.engine3d.collision
Section 3
//CollisionPlane (com.alternativagame.engine3d.collision.CollisionPlane)
package com.alternativagame.engine3d.collision {
import com.alternativagame.engine3d.*;
public class CollisionPlane {
public var destinationOffset:Number;
public var infront:Boolean;
public var node:BSPNode;
public var sourceOffset:Number;
}
}//package com.alternativagame.engine3d.collision
Section 4
//BSPNode (com.alternativagame.engine3d.BSPNode)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
public final class BSPNode {
var mobile:uint;// = 4294967295
var normal:Point3D;
var front:BSPNode;
var parent:BSPNode;
var offset:Number;
var back:BSPNode;
var backPrimitives:Set;
var frontPrimitives:Set;
var primitive:PolyPrimitive;
private static var collector:Array = new Array();
public function BSPNode(){
normal = new Point3D();
super();
}
static function createBSPNode(_arg1:PolyPrimitive):BSPNode{
var _local2:BSPNode = collector.pop();
if (_local2 == null){
_local2 = new (BSPNode);
};
_local2.primitive = _arg1;
_arg1.node = _local2;
_local2.normal.copy(_arg1.face.globalNormal);
_local2.offset = _arg1.face.globalOffset;
_local2.mobile = _arg1.mobile;
return (_local2);
}
static function destroyBSPNode(_arg1:BSPNode):void{
collector.push(_arg1);
}
}
}//package com.alternativagame.engine3d
Section 5
//Camera3D (com.alternativagame.engine3d.Camera3D)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
import flash.geom.*;
import flash.utils.*;
public class Camera3D extends Object3D {
var _view:View;
var _fov:Number;// = 1.5707963267949
var focusDistortion:Number;
private var currentSkin:Skin;
var textureMatrices:Dictionary;
var cameraCoords:Dictionary;
var viewAngle:Number;
var redrawOperation:Operation;
private var textureMatricesCalculated:Set;
var clearCalculatedOperation:Operation;
private var cameraCoordsCalculated:Set;
var cameraMatrix:Matrix3D;
private var prevSkin:Skin;
var _focusHalfSize:Number;// = 500
private var firstSkin:Skin;
var calculateMatrixOperation:Operation;
var focusDistance:Number;
var calculateSkinsOperation:Operation;
var direction:Point3D;
private static var counter:uint = 0;
public function Camera3D(_arg1:String=null){
redrawOperation = new Operation("redraw", this);
calculateMatrixOperation = new Operation("calculateMatrix", this, calculateMatrix, Operation.CAMERA_MATRIX);
clearCalculatedOperation = new Operation("clearCalculated", this, clearCalculated, Operation.CAMERA_CLEAR_CALCULATED);
calculateSkinsOperation = new Operation("calculateSkins", this, calculateSkins, Operation.CAMERA_CALCULATE_SKINS);
focusDistance = (_focusHalfSize / Math.tan((0.5 * _fov)));
focusDistortion = (1 / (focusDistance * focusDistance));
viewAngle = Math.sin((Math.PI / 4));
direction = new Point3D(0, 0, 1);
cameraMatrix = new Matrix3D();
cameraCoords = new Dictionary(true);
cameraCoordsCalculated = new Set(true);
textureMatrices = new Dictionary(true);
textureMatricesCalculated = new Set(true);
_view = new View();
super(_arg1);
addOperation.addSequel(calculateMatrixOperation);
locationOperation.addSequel(calculateMatrixOperation);
transformOperation.addSequel(calculateMatrixOperation);
moveOperation.addSequel(calculateMatrixOperation);
calculateMatrixOperation.addSequel(clearCalculatedOperation);
redrawOperation.addSequel(clearCalculatedOperation);
clearCalculatedOperation.addSequel(calculateSkinsOperation);
}
function calculateCameraCoord(_arg1:Point3D):Point3D{
var _local2:Point3D = cameraCoords[_arg1];
if (_local2 == null){
_local2 = new Point3D();
cameraCoords[_arg1] = _local2;
};
if (!cameraCoordsCalculated[_arg1]){
_local2.copy(_arg1);
_local2.transform(cameraMatrix);
cameraCoordsCalculated[_arg1] = true;
};
return (_local2);
}
function removeTextureMatrix(_arg1:Face):void{
delete textureMatrices[_arg1];
delete textureMatricesCalculated[_arg1];
}
private function insertCurrentSkin():void{
var _local1:Skin = Skin.createSkin(this);
_view.canvas.addChildAt(_local1, _view.canvas.getChildIndex(currentSkin));
_local1.nextSkin = currentSkin;
if (prevSkin == null){
firstSkin = _local1;
} else {
prevSkin.nextSkin = _local1;
};
currentSkin = _local1;
}
public function get view():View{
return (_view);
}
public function set zoom(_arg1:Number):void{
_arg1 = (1 / _arg1);
if (((((!((_scaleX == _arg1))) || (!((_scaleY == _arg1))))) || (!((_scaleZ == _arg1))))){
_scaleX = _arg1;
_scaleY = _arg1;
_scaleZ = _arg1;
addOperationToScene(transformOperation);
};
}
public function set fov(_arg1:Number):void{
_arg1 = ((_arg1)<0) ? 0 : ((_arg1)>Math.PI) ? Math.PI : _arg1;
if (_fov != _arg1){
focusDistance = (_focusHalfSize / Math.tan((0.5 * _arg1)));
focusDistortion = (1 / (focusDistance * focusDistance));
viewAngle = Math.sin((0.5 * _arg1));
addOperationToScene(redrawOperation);
_fov = _arg1;
};
}
private function addCurrentSkin():void{
if (currentSkin == null){
currentSkin = Skin.createSkin(this);
_view.canvas.addChild(currentSkin);
if (prevSkin == null){
firstSkin = currentSkin;
} else {
prevSkin.nextSkin = currentSkin;
};
};
}
private function drawAddedSkin(_arg1:PolyPrimitive):void{
if (_scene.addPrimitives[_arg1]){
if ((((currentSkin == null)) || (((!(_scene.removePrimitives[currentSkin._primitive])) && (!(_scene.addPrimitives[currentSkin._primitive])))))){
if (currentSkin == null){
addCurrentSkin();
} else {
insertCurrentSkin();
};
};
currentSkin.draw(_arg1);
prevSkin = currentSkin;
currentSkin = currentSkin.nextSkin;
} else {
while (((!((currentSkin == null))) && (((_scene.removePrimitives[currentSkin._primitive]) || (_scene.addPrimitives[currentSkin._primitive]))))) {
removeCurrentSkin();
};
if (currentSkin != null){
prevSkin = currentSkin;
currentSkin = currentSkin.nextSkin;
};
};
}
public function set viewRadius(_arg1:Number):void{
focusDistance = (_arg1 / Math.tan((0.5 * _fov)));
focusDistortion = (1 / (focusDistance * focusDistance));
viewAngle = Math.sin((0.5 * _fov));
addOperationToScene(redrawOperation);
_focusHalfSize = _arg1;
}
private function calculateMatrix():void{
direction.x = transformMatrix.c;
direction.y = transformMatrix.g;
direction.z = transformMatrix.k;
direction.normalize();
cameraMatrix.copy(transformMatrix);
cameraMatrix.invert();
}
private function isometricRenderChanged(_arg1:BSPNode):void{
var _local2:*;
var _local3:Point3D;
var _local4:Number;
if (_arg1 != null){
_local3 = _arg1.normal;
_local4 = (((direction.x * _local3.x) + (direction.y * _local3.y)) + (direction.z * _local3.z));
if (_arg1.primitive != null){
if (_local4 <= 0){
isometricRenderChanged(_arg1.back);
drawAddedSkin(_arg1.primitive);
isometricRenderChanged(_arg1.front);
} else {
isometricRenderChanged(_arg1.front);
isometricRenderChanged(_arg1.back);
};
} else {
if (_local4 <= 0){
isometricRenderChanged(_arg1.back);
for (_local2 in _arg1.frontPrimitives) {
drawAddedSkin(_local2);
};
isometricRenderChanged(_arg1.front);
} else {
isometricRenderChanged(_arg1.front);
for (_local2 in _arg1.backPrimitives) {
drawAddedSkin(_local2);
};
isometricRenderChanged(_arg1.back);
};
};
};
}
public function get zoom():Number{
return ((3 / ((_scaleX + _scaleY) + _scaleZ)));
}
private function calculateSkins():void{
prevSkin = null;
currentSkin = firstSkin;
if (((((((((moveOperation.queued) || (transformOperation.queued))) || (redrawOperation.queued))) || (locationOperation.queued))) || (addOperation.queued))){
if (_fov == 0){
isometricRender(_scene.bsp);
} else {
perspectiveRender(_scene.bsp);
};
} else {
if (_fov == 0){
isometricRenderChanged(_scene.bsp);
} else {
perspectiveRenderChanged(_scene.bsp);
};
};
while (currentSkin != null) {
removeCurrentSkin();
};
}
override protected function removeFromScene(_arg1:Scene3D):void{
super.removeFromScene(_arg1);
_arg1.calculatePrimitivesOperation.removeSequel(clearCalculatedOperation);
}
private function drawSkin(_arg1:PolyPrimitive):void{
addCurrentSkin();
currentSkin.draw(_arg1);
prevSkin = currentSkin;
currentSkin = currentSkin.nextSkin;
}
private function perspectiveRenderChanged(_arg1:BSPNode):void{
var _local2:*;
var _local3:Point3D;
var _local4:Number;
var _local5:Number;
if (_arg1 != null){
_local3 = _arg1.normal;
_local4 = (((direction.x * _local3.x) + (direction.y * _local3.y)) + (direction.z * _local3.z));
_local5 = ((((globalCoords.x * _local3.x) + (globalCoords.y * _local3.y)) + (globalCoords.z * _local3.z)) - _arg1.offset);
if (_arg1.primitive != null){
if (_local5 > 0){
if (_local4 < viewAngle){
perspectiveRenderChanged(_arg1.back);
drawAddedSkin(_arg1.primitive);
};
perspectiveRenderChanged(_arg1.front);
} else {
if (_local4 > -(viewAngle)){
perspectiveRenderChanged(_arg1.front);
};
perspectiveRenderChanged(_arg1.back);
};
} else {
if (_local5 > 0){
if (_local4 < viewAngle){
perspectiveRenderChanged(_arg1.back);
for (_local2 in _arg1.frontPrimitives) {
drawAddedSkin(_local2);
};
};
perspectiveRenderChanged(_arg1.front);
} else {
if (_local4 > -(viewAngle)){
perspectiveRenderChanged(_arg1.front);
for (_local2 in _arg1.backPrimitives) {
drawAddedSkin(_local2);
};
};
perspectiveRenderChanged(_arg1.back);
};
};
};
}
private function isometricRender(_arg1:BSPNode):void{
var _local2:*;
var _local3:Point3D;
var _local4:Number;
if (_arg1 != null){
_local3 = _arg1.normal;
_local4 = (((direction.x * _local3.x) + (direction.y * _local3.y)) + (direction.z * _local3.z));
if (_arg1.primitive != null){
if (_local4 <= 0){
isometricRender(_arg1.back);
drawSkin(_arg1.primitive);
isometricRender(_arg1.front);
} else {
isometricRender(_arg1.front);
isometricRender(_arg1.back);
};
} else {
if (_local4 <= 0){
isometricRender(_arg1.back);
for (_local2 in _arg1.frontPrimitives) {
drawSkin(_local2);
};
isometricRender(_arg1.front);
} else {
isometricRender(_arg1.front);
for (_local2 in _arg1.backPrimitives) {
drawSkin(_local2);
};
isometricRender(_arg1.back);
};
};
};
}
override protected function defaultName():String{
return (("camera" + ++counter));
}
public function get fov():Number{
return (_fov);
}
override protected function addToScene(_arg1:Scene3D):void{
super.addToScene(_arg1);
_arg1.calculatePrimitivesOperation.addSequel(clearCalculatedOperation);
}
private function perspectiveRender(_arg1:BSPNode):void{
var _local2:*;
var _local3:Point3D;
var _local4:Number;
var _local5:Number;
if (_arg1 != null){
_local3 = _arg1.normal;
_local4 = (((direction.x * _local3.x) + (direction.y * _local3.y)) + (direction.z * _local3.z));
_local5 = ((((globalCoords.x * _local3.x) + (globalCoords.y * _local3.y)) + (globalCoords.z * _local3.z)) - _arg1.offset);
if (_arg1.primitive != null){
if (_local5 > 0){
if (_local4 < viewAngle){
perspectiveRender(_arg1.back);
drawSkin(_arg1.primitive);
};
perspectiveRender(_arg1.front);
} else {
if (_local4 > -(viewAngle)){
perspectiveRender(_arg1.front);
};
perspectiveRender(_arg1.back);
};
} else {
if (_local5 > 0){
if (_local4 < viewAngle){
perspectiveRender(_arg1.back);
for (_local2 in _arg1.frontPrimitives) {
drawSkin(_local2);
};
};
perspectiveRender(_arg1.front);
} else {
if (_local4 > -(viewAngle)){
perspectiveRender(_arg1.front);
for (_local2 in _arg1.backPrimitives) {
drawSkin(_local2);
};
};
perspectiveRender(_arg1.back);
};
};
};
}
function calculateTextureMatrix(_arg1:Face, _arg2:uint, _arg3:uint):Matrix{
var _local6:Point3D;
var _local7:Point3D;
var _local8:Point3D;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local4:Matrix = textureMatrices[_arg1];
var _local5:Matrix = _arg1.uvMatrix;
if (_local4 == null){
_local4 = new Matrix();
textureMatrices[_arg1] = _local4;
};
if (!textureMatricesCalculated[_arg1]){
_local6 = calculateCameraCoord(_arg1.primitive.points[0]);
_local7 = calculateCameraCoord(_arg1.primitive.points[1]);
_local8 = calculateCameraCoord(_arg1.primitive.points[2]);
_local9 = (_local7.x - _local6.x);
_local10 = (_local7.y - _local6.y);
_local11 = (_local8.x - _local6.x);
_local12 = (_local8.y - _local6.y);
_local4.a = (((_local5.a * _local9) + (_local5.b * _local11)) / _arg2);
_local4.b = (((_local5.a * _local10) + (_local5.b * _local12)) / _arg2);
_local4.c = (-(((_local5.c * _local9) + (_local5.d * _local11))) / _arg3);
_local4.d = (-(((_local5.c * _local10) + (_local5.d * _local12))) / _arg3);
_local4.tx = ((((_local5.tx + _local5.c) * _local9) + ((_local5.ty + _local5.d) * _local11)) + _local6.x);
_local4.ty = ((((_local5.tx + _local5.c) * _local10) + ((_local5.ty + _local5.d) * _local12)) + _local6.y);
textureMatricesCalculated[_arg1] = true;
};
return (_local4);
}
private function removeCurrentSkin():void{
var _local1:Skin = currentSkin.nextSkin;
_view.canvas.removeChild(currentSkin);
currentSkin.draw(null);
currentSkin.nextSkin = null;
currentSkin.camera = null;
Skin.destroySkin(currentSkin);
currentSkin = _local1;
if (prevSkin == null){
firstSkin = currentSkin;
} else {
prevSkin.nextSkin = currentSkin;
};
}
private function clearCalculated():void{
var _local1:*;
var _local2:PolyPrimitive;
var _local3:Array;
var _local4:uint;
if (((((((((transformOperation.queued) || (moveOperation.queued))) || (redrawOperation.queued))) || (locationOperation.queued))) || (addOperation.queued))){
cameraCoordsCalculated.clear();
textureMatricesCalculated.clear();
} else {
for (_local1 in _scene.addPrimitives) {
_local2 = _local1;
_local3 = _local2.points;
_local4 = 0;
while (_local4 < _local2.num) {
delete cameraCoordsCalculated[_local3[_local4]];
_local4++;
};
delete textureMatricesCalculated[_local2.face];
};
};
}
}
}//package com.alternativagame.engine3d
Section 6
//Face (com.alternativagame.engine3d.Face)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
import flash.geom.*;
public final class Face {
private const crossNormalTreshold:Number = 0.01;
var materialOperation:Operation;
private var _cUV:Point;
private var _aUV:Point;
var moveOperation:Operation;
var globalOffset:Number;
var calculateUVOperation:Operation;
var uvMatrix:Matrix;
var removeOperation:Operation;
private var _bUV:Point;
var addOperation:Operation;
var _num:uint;
var transformPrimitiveOperation:Operation;
var uvOperation:Operation;
var _mesh:Mesh;
var _vertices:Array;
var transformOperation:Operation;
var primitive:PolyPrimitive;
var globalNormal:Point3D;
var _surface:Surface;
var calculatePlaneOperation:Operation;
public function Face(_arg1:Array){
var _local3:Vertex;
addOperation = new Operation("add", this);
removeOperation = new Operation("remove", this);
transformOperation = new Operation("transform", this);
moveOperation = new Operation("move", this);
materialOperation = new Operation("material", this);
uvOperation = new Operation("uv", this, setUV, Operation.FACE_UV);
calculateUVOperation = new Operation("calculateUV", this, calculateUV, Operation.FACE_CALCULATE_UV);
calculatePlaneOperation = new Operation("calculatePlane", this, calculatePlane, Operation.FACE_PLANE);
transformPrimitiveOperation = new Operation("transformPrimitive", this, transformPrimitive, Operation.FACE_TRANSFORM);
globalNormal = new Point3D();
super();
_vertices = _arg1;
_num = _arg1.length;
primitive = PolyPrimitive.createPolyPrimitive();
primitive.face = this;
primitive.num = _num;
var _local2:uint;
while (_local2 < _num) {
_local3 = _arg1[_local2];
primitive.points.push(_local3.globalCoords);
primitive.uvs.push(null);
_local3.addToFace(this);
_local2++;
};
addOperation.addSequel(calculatePlaneOperation);
transformOperation.addSequel(calculatePlaneOperation);
transformOperation.addSequel(transformPrimitiveOperation);
moveOperation.addSequel(transformPrimitiveOperation);
addOperation.addSequel(uvOperation);
uvOperation.addSequel(calculateUVOperation);
}
private function setUV():void{
var _local1:uint;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Point3D;
var _local8:Point3D;
var _local9:Point3D;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Point;
var _local19:Point3D;
if (((((!((_aUV == null))) && (!((_bUV == null))))) && (!((_cUV == null))))){
_local2 = (_bUV.x - _aUV.x);
_local3 = (_bUV.y - _aUV.y);
_local4 = (_cUV.x - _aUV.x);
_local5 = (_cUV.y - _aUV.y);
_local6 = ((_local2 * _local5) - (_local3 * _local4));
if (uvMatrix == null){
uvMatrix = new Matrix();
};
uvMatrix.a = (_local5 / _local6);
uvMatrix.b = (-(_local3) / _local6);
uvMatrix.c = (-(_local4) / _local6);
uvMatrix.d = (_local2 / _local6);
uvMatrix.tx = -(((uvMatrix.a * _aUV.x) + (uvMatrix.c * _aUV.y)));
uvMatrix.ty = -(((uvMatrix.b * _aUV.x) + (uvMatrix.d * _aUV.y)));
primitive.uvs[0] = _aUV;
primitive.uvs[1] = _bUV;
primitive.uvs[2] = _cUV;
if (_num > 3){
_local7 = primitive.points[0];
_local8 = primitive.points[1];
_local9 = primitive.points[2];
if (((globalNormal.x)<0) ? -(globalNormal.x) : globalNormal.x > ((globalNormal.y)<0) ? -(globalNormal.y) : globalNormal.y){
if (((globalNormal.x)<0) ? -(globalNormal.x) : globalNormal.x > ((globalNormal.z)<0) ? -(globalNormal.z) : globalNormal.z){
_local10 = (_local8.y - _local7.y);
_local11 = (_local8.z - _local7.z);
_local12 = (_local9.y - _local7.y);
_local13 = (_local9.z - _local7.z);
_local6 = ((_local10 * _local13) - (_local12 * _local11));
_local1 = 3;
while (_local1 < _num) {
_local19 = primitive.points[_local1];
_local14 = (_local19.y - _local7.y);
_local15 = (_local19.z - _local7.z);
_local16 = (((_local14 * _local13) - (_local12 * _local15)) / _local6);
_local17 = (((_local10 * _local15) - (_local14 * _local11)) / _local6);
_local18 = primitive.uvs[_local1];
if (_local18 == null){
_local18 = new Point();
primitive.uvs[_local1] = _local18;
};
_local18.x = ((_aUV.x + (_local2 * _local16)) + (_local4 * _local17));
_local18.y = ((_aUV.y + (_local3 * _local16)) + (_local5 * _local17));
_local1++;
};
} else {
_local10 = (_local8.x - _local7.x);
_local11 = (_local8.y - _local7.y);
_local12 = (_local9.x - _local7.x);
_local13 = (_local9.y - _local7.y);
_local6 = ((_local10 * _local13) - (_local12 * _local11));
_local1 = 3;
while (_local1 < _num) {
_local19 = primitive.points[_local1];
_local14 = (_local19.x - _local7.x);
_local15 = (_local19.y - _local7.y);
_local16 = (((_local14 * _local13) - (_local12 * _local15)) / _local6);
_local17 = (((_local10 * _local15) - (_local14 * _local11)) / _local6);
_local18 = primitive.uvs[_local1];
if (_local18 == null){
_local18 = new Point();
primitive.uvs[_local1] = _local18;
};
_local18.x = ((_aUV.x + (_local2 * _local16)) + (_local4 * _local17));
_local18.y = ((_aUV.y + (_local3 * _local16)) + (_local5 * _local17));
_local1++;
};
};
} else {
if (((globalNormal.y)<0) ? -(globalNormal.y) : globalNormal.y > ((globalNormal.z)<0) ? -(globalNormal.z) : globalNormal.z){
_local10 = (_local8.x - _local7.x);
_local11 = (_local8.z - _local7.z);
_local12 = (_local9.x - _local7.x);
_local13 = (_local9.z - _local7.z);
_local6 = ((_local10 * _local13) - (_local12 * _local11));
_local1 = 3;
while (_local1 < _num) {
_local19 = primitive.points[_local1];
_local14 = (_local19.x - _local7.x);
_local15 = (_local19.z - _local7.z);
_local16 = (((_local14 * _local13) - (_local12 * _local15)) / _local6);
_local17 = (((_local10 * _local15) - (_local14 * _local11)) / _local6);
_local18 = primitive.uvs[_local1];
if (_local18 == null){
_local18 = new Point();
primitive.uvs[_local1] = _local18;
};
_local18.x = ((_aUV.x + (_local2 * _local16)) + (_local4 * _local17));
_local18.y = ((_aUV.y + (_local3 * _local16)) + (_local5 * _local17));
_local1++;
};
} else {
_local10 = (_local8.x - _local7.x);
_local11 = (_local8.y - _local7.y);
_local12 = (_local9.x - _local7.x);
_local13 = (_local9.y - _local7.y);
_local6 = ((_local10 * _local13) - (_local12 * _local11));
_local1 = 3;
while (_local1 < _num) {
_local19 = primitive.points[_local1];
_local14 = (_local19.x - _local7.x);
_local15 = (_local19.y - _local7.y);
_local16 = (((_local14 * _local13) - (_local12 * _local15)) / _local6);
_local17 = (((_local10 * _local15) - (_local14 * _local11)) / _local6);
_local18 = primitive.uvs[_local1];
if (_local18 == null){
_local18 = new Point();
primitive.uvs[_local1] = _local18;
};
_local18.x = ((_aUV.x + (_local2 * _local16)) + (_local4 * _local17));
_local18.y = ((_aUV.y + (_local3 * _local16)) + (_local5 * _local17));
_local1++;
};
};
};
};
} else {
uvMatrix = null;
_local1 = 0;
while (_local1 < _num) {
primitive.uvs[_local1] = null;
_local1++;
};
};
}
function addToMesh(_arg1:Mesh):void{
_arg1.moveOperation.addSequel(moveOperation);
_arg1.transformOperation.addSequel(transformOperation);
_arg1.mobileOperation.addSequel(transformPrimitiveOperation);
_mesh = _arg1;
primitive.mobile = _arg1._mobile;
}
public function set aUV(_arg1:Point):void{
if (_aUV != null){
if (_arg1 != null){
if (!_aUV.equals(_arg1)){
_aUV.x = _arg1.x;
_aUV.y = _arg1.y;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
_aUV = null;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
if (_arg1 != null){
_aUV = _arg1.clone();
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
};
}
public function set cUV(_arg1:Point):void{
if (_cUV != null){
if (_arg1 != null){
if (!_cUV.equals(_arg1)){
_cUV.x = _arg1.x;
_cUV.y = _arg1.y;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
_cUV = null;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
if (_arg1 != null){
_cUV = _arg1.clone();
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
};
}
public function get bUV():Point{
return (((_bUV)!=null) ? _bUV.clone() : null);
}
public function get num():uint{
return (_num);
}
function removeFromSurface(_arg1:Surface):void{
_arg1.materialOperation.removeSequel(materialOperation);
if (_arg1._material != null){
_mesh.addOperationToScene(materialOperation);
};
_surface = null;
}
public function get id():Object{
return (((_mesh)!=null) ? _mesh.getFaceId(this) : null);
}
public function set bUV(_arg1:Point):void{
if (_bUV != null){
if (_arg1 != null){
if (!_bUV.equals(_arg1)){
_bUV.x = _arg1.x;
_bUV.y = _arg1.y;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
_bUV = null;
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
} else {
if (_arg1 != null){
_bUV = _arg1.clone();
if (_mesh != null){
_mesh.addOperationToScene(uvOperation);
};
};
};
}
private function calculatePlane():void{
var _local1:Vertex = _vertices[0];
var _local2:Point3D = _local1.globalCoords;
_local1 = _vertices[1];
var _local3:Point3D = _local1.globalCoords;
var _local4:Number = (_local3.x - _local2.x);
var _local5:Number = (_local3.y - _local2.y);
var _local6:Number = (_local3.z - _local2.z);
_local1 = _vertices[2];
var _local7:Point3D = _local1.globalCoords;
var _local8:Number = (_local7.x - _local2.x);
var _local9:Number = (_local7.y - _local2.y);
var _local10:Number = (_local7.z - _local2.z);
globalNormal.x = ((_local10 * _local5) - (_local9 * _local6));
globalNormal.y = ((_local8 * _local6) - (_local10 * _local4));
globalNormal.z = ((_local9 * _local4) - (_local8 * _local5));
globalNormal.normalize();
globalOffset = (((_local2.x * globalNormal.x) + (_local2.y * globalNormal.y)) + (_local2.z * globalNormal.z));
}
private function calculateUV():void{
if (((((!(transformOperation.queued)) && (!(addOperation.queued)))) && (!(removeOperation.queued)))){
if (uvMatrix != null){
calculatePrimitiveUVs(primitive);
} else {
removePrimitiveUVs(primitive);
};
};
}
public function get surface():Surface{
return (_surface);
}
private function calculatePrimitiveUVs(_arg1:PolyPrimitive):void{
var _local2:Array;
var _local3:Array;
var _local4:Array;
var _local5:Array;
var _local6:Array;
var _local7:Array;
var _local8:uint;
var _local9:uint;
var _local10:Point3D;
var _local11:Point;
var _local12:Point;
var _local13:Point;
var _local14:Number;
var _local15:Boolean;
var _local16:uint;
var _local17:Boolean;
if (_arg1.front != null){
_local2 = _arg1.points;
_local3 = _arg1.front.points;
_local4 = _arg1.back.points;
_local5 = _arg1.uvs;
_local6 = _arg1.front.uvs;
_local7 = _arg1.back.uvs;
_local8 = 0;
_local9 = 0;
_local15 = true;
_local16 = 0;
while (_local16 < _arg1.num) {
_local17 = true;
_local10 = _local2[_local16];
if (_local10 == _local3[_local8]){
if (_local6[_local8] == null){
_local6[_local8] = _local5[_local16];
};
_local17 = false;
_local8++;
};
if (_local10 == _local4[_local9]){
if (_local7[_local9] == null){
_local7[_local9] = _local5[_local16];
};
_local17 = false;
_local9++;
};
if (_local17){
_local12 = _local5[((_local16)==0) ? (_arg1.num - 1) : (_local16 - 1)];
_local13 = _local5[_local16];
_local14 = (_local15) ? _arg1.splitTime1 : _arg1.splitTime2;
_local11 = _local6[_local8];
if (_local11 == null){
_local11 = new Point((_local12.x + ((_local13.x - _local12.x) * _local14)), (_local12.y + ((_local13.y - _local12.y) * _local14)));
_local6[_local8] = _local11;
_local7[_local9] = _local11;
} else {
_local11.x = (_local12.x + ((_local13.x - _local12.x) * _local14));
_local11.y = (_local12.y + ((_local13.y - _local12.y) * _local14));
};
_local15 = false;
_local8++;
_local9++;
if (_local10 == _local3[_local8]){
if (_local6[_local8] == null){
_local6[_local8] = _local5[_local16];
};
_local8++;
};
if (_local10 == _local4[_local9]){
if (_local7[_local9] == null){
_local7[_local9] = _local5[_local16];
};
_local9++;
};
};
_local16++;
};
if (_local8 < _arg1.front.num){
_local12 = _local5[(_arg1.num - 1)];
_local13 = _local5[0];
_local14 = (_local15) ? _arg1.splitTime1 : _arg1.splitTime2;
_local11 = _local6[_local8];
if (_local11 == null){
_local11 = new Point((_local12.x + ((_local13.x - _local12.x) * _local14)), (_local12.y + ((_local13.y - _local12.y) * _local14)));
_local6[_local8] = _local11;
_local7[_local9] = _local11;
} else {
_local11.x = (_local12.x + ((_local13.x - _local12.x) * _local14));
_local11.y = (_local12.y + ((_local13.y - _local12.y) * _local14));
};
};
calculatePrimitiveUVs(_arg1.front);
calculatePrimitiveUVs(_arg1.back);
};
}
function removeVertices():void{
var _local2:Vertex;
var _local1:uint;
while (_local1 < _num) {
_local2 = _vertices.pop();
primitive.points.pop();
_local2.removeFromFace(this);
_local1++;
};
_num = 0;
}
function addToSurface(_arg1:Surface):void{
_arg1.materialOperation.addSequel(materialOperation);
if (((!((_mesh == null))) && (((((!((_surface == null))) && (!((_surface._material == _arg1._material))))) || ((((_surface == null)) && (!((_arg1._material == null))))))))){
_mesh.addOperationToScene(materialOperation);
};
_surface = _arg1;
}
public function get aUV():Point{
return (((_aUV)!=null) ? _aUV.clone() : null);
}
private function removePrimitive(_arg1:PolyPrimitive):void{
if (_arg1.back != null){
removePrimitive(_arg1.back);
removePrimitive(_arg1.front);
} else {
_mesh._scene.removePrimitives[_arg1] = true;
};
}
public function get cUV():Point{
return (((_cUV)!=null) ? _cUV.clone() : null);
}
private function removePrimitiveUVs(_arg1:PolyPrimitive):void{
var _local2:uint;
while (_local2 < _arg1.num) {
_arg1.uvs[_local2] = null;
_local2++;
};
if (_arg1.front != null){
removePrimitiveUVs(_arg1.front);
removePrimitiveUVs(_arg1.back);
};
}
function removeFromScene(_arg1:Scene3D):void{
_arg1.removeOperation(addOperation);
_arg1.removeOperation(transformOperation);
_arg1.removeOperation(moveOperation);
_arg1.removeOperation(materialOperation);
_arg1.addOperation(removeOperation);
_arg1.addOperation(_arg1.calculatePrimitivesOperation);
removePrimitive(primitive);
primitive.back = null;
primitive.front = null;
transformPrimitiveOperation.removeSequel(_arg1.calculatePrimitivesOperation);
}
public function toString():String{
var _local3:Vertex;
var _local1:String = (("[Face ID:" + id) + ((_num)>0) ? " vertices:" : "");
var _local2:uint;
while (_local2 < _num) {
_local3 = _vertices[_local2];
_local1 = (_local1 + (_local3.id + ((_local2)<(_num - 1)) ? ", " : ""));
_local2++;
};
_local1 = (_local1 + "]");
return (_local1);
}
public function get mesh():Mesh{
return (_mesh);
}
public function get edgeJoinedFaces():Set{
var _local3:Vertex;
var _local4:Vertex;
var _local5:*;
var _local6:Face;
var _local1:Set = new Set(true);
var _local2:uint;
while (_local2 < _num) {
_local3 = _vertices[_local2];
_local4 = _vertices[((_local2)<(_num - 1)) ? (_local2 + 1) : 0];
for (_local5 in _local3._faces) {
_local6 = _local5;
if (((!((_local6 == this))) && ((_local6._vertices.indexOf(_local4) >= 0)))){
_local1[_local6] = true;
};
};
_local2++;
};
return (_local1);
}
private function transformPrimitive():void{
removePrimitive(primitive);
primitive.back = null;
primitive.front = null;
primitive.mobile = _mesh._mobile;
_mesh._scene.addPrimitives[primitive] = true;
}
public function get normal():Point3D{
var _local12:Number;
var _local1:Point3D = new Point3D();
var _local2:Vertex = _vertices[0];
var _local3:Point3D = _local2.coords;
_local2 = _vertices[1];
var _local4:Point3D = _local2.coords;
var _local5:Number = (_local4.x - _local3.x);
var _local6:Number = (_local4.y - _local3.y);
var _local7:Number = (_local4.z - _local3.z);
_local2 = _vertices[2];
var _local8:Point3D = _local2.coords;
var _local9:Number = (_local8.x - _local3.x);
var _local10:Number = (_local8.y - _local3.y);
var _local11:Number = (_local8.z - _local3.z);
_local1.x = ((_local11 * _local6) - (_local10 * _local7));
_local1.y = ((_local9 * _local7) - (_local11 * _local5));
_local1.z = ((_local10 * _local5) - (_local9 * _local6));
if (((((!((_local1.x == 0))) || (!((_local1.y == 0))))) || (!((_local1.z == 0))))){
_local12 = Math.sqrt((((_local1.x * _local1.x) + (_local1.y * _local1.y)) + (_local1.z * _local1.z)));
_local1.x = (_local1.x / _local12);
_local1.y = (_local1.y / _local12);
_local1.z = (_local1.z / _local12);
};
return (_local1);
}
public function getUV(_arg1:Point3D):Point{
return (getUVFast(_arg1, normal));
}
public function get vertices():Array{
return (new Array().concat(_vertices));
}
public function getUVFast(_arg1:Point3D, _arg2:Point3D):Point{
var _local3:uint;
if ((((((_aUV == null)) || ((_bUV == null)))) || ((_cUV == null)))){
return (null);
};
if (((_arg2.x)<0) ? -(_arg2.x) : _arg2.x > ((_arg2.y)<0) ? -(_arg2.y) : _arg2.y){
if (((_arg2.x)<0) ? -(_arg2.x) : _arg2.x > ((_arg2.z)<0) ? -(_arg2.z) : _arg2.z){
_local3 = 0;
} else {
_local3 = 2;
};
} else {
if (((_arg2.y)<0) ? -(_arg2.y) : _arg2.y > ((_arg2.z)<0) ? -(_arg2.z) : _arg2.z){
_local3 = 1;
} else {
_local3 = 2;
};
};
var _local4:Vertex = _vertices[0];
var _local5:Point3D = _local4._coords;
_local4 = _vertices[1];
var _local6:Point3D = _local4._coords;
_local4 = _vertices[2];
var _local7:Point3D = _local4._coords;
var _local8:Number = ((_local3)==0) ? (_local6.y - _local5.y) : (_local6.x - _local5.x);
var _local9:Number = ((_local3)==2) ? (_local6.y - _local5.y) : (_local6.z - _local5.z);
var _local10:Number = ((_local3)==0) ? (_local7.y - _local5.y) : (_local7.x - _local5.x);
var _local11:Number = ((_local3)==2) ? (_local7.y - _local5.y) : (_local7.z - _local5.z);
var _local12:Number = ((_local8 * _local11) - (_local10 * _local9));
var _local13:Number = ((_local3)==0) ? (_arg1.y - _local5.y) : (_arg1.x - _local5.x);
var _local14:Number = ((_local3)==2) ? (_arg1.y - _local5.y) : (_arg1.z - _local5.z);
var _local15:Number = (((_local13 * _local11) - (_local10 * _local14)) / _local12);
var _local16:Number = (((_local8 * _local14) - (_local13 * _local9)) / _local12);
var _local17:Number = (_bUV.x - _aUV.x);
var _local18:Number = (_bUV.y - _aUV.y);
var _local19:Number = (_cUV.x - _aUV.x);
var _local20:Number = (_cUV.y - _aUV.y);
return (new Point(((_aUV.x + (_local17 * _local15)) + (_local19 * _local16)), ((_aUV.y + (_local18 * _local15)) + (_local20 * _local16))));
}
function removeFromMesh(_arg1:Mesh):void{
_arg1.moveOperation.removeSequel(moveOperation);
_arg1.transformOperation.removeSequel(transformOperation);
_arg1.mobileOperation.removeSequel(transformPrimitiveOperation);
_mesh = null;
}
function addToScene(_arg1:Scene3D):void{
_arg1.removeOperation(removeOperation);
_arg1.addOperation(addOperation);
_arg1.addOperation(_arg1.calculatePrimitivesOperation);
_arg1.addPrimitives.add(primitive);
if (_mesh != null){
primitive.mobile = _mesh._mobile;
};
transformPrimitiveOperation.addSequel(_arg1.calculatePrimitivesOperation);
}
}
}//package com.alternativagame.engine3d
Section 7
//FillMaterial (com.alternativagame.engine3d.FillMaterial)
package com.alternativagame.engine3d {
import flash.display.*;
import com.alternativagame.type.*;
public class FillMaterial extends SurfaceMaterial {
var _color:uint;
private static var gfx:Graphics;
private static var focusDistance:Number;
private static var points1:Array = new Array();
private static var points2:Array = new Array();
public function FillMaterial(_arg1:uint=0x7F7F7F, _arg2:Number=1, _arg3:String="normal"):void{
super(_arg2, _arg3);
_color = _arg1;
}
private function clip(_arg1:uint, _arg2:Array, _arg3:Array, _arg4:Number, _arg5:Number, _arg6:Number):uint{
var _local7:Number;
var _local9:Point3D;
var _local13:Point3D;
var _local14:Number;
var _local8:uint;
var _local10:Point3D = _arg2[(_arg1 - 1)];
var _local11:Number = (((_arg4 * _local10.x) + (_arg5 * _local10.y)) + (_arg6 * _local10.z));
var _local12:uint;
while (_local12 < _arg1) {
_local13 = _arg2[_local12];
_local14 = (((_arg4 * _local13.x) + (_arg5 * _local13.y)) + (_arg6 * _local13.z));
if (_local14 > 0){
if (_local11 <= 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new Point3D((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
};
_local8++;
};
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = _local13.clone();
_arg3[_local8] = _local9;
} else {
_local9.copy(_local13);
};
_local8++;
} else {
if (_local11 > 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new Point3D((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
};
_local8++;
};
};
_local11 = _local14;
_local10 = _local13;
_local12++;
};
return (_local8);
}
public function set color(_arg1:uint):void{
if (_color != _arg1){
_color = _arg1;
addDrawParamsOperationToScene();
};
}
public function get color():uint{
return (_color);
}
override function draw(_arg1:Skin):void{
var _local6:Point3D;
var _local7:uint;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Point3D;
gfx = _arg1.gfx;
var _local2:Face = _arg1.face;
var _local3:Camera3D = _arg1.camera;
var _local4:uint = _arg1._primitive.num;
var _local5:Array = _arg1._primitive.points;
if (_local3._fov == 0){
gfx.beginFill(_color);
_local6 = _local3.calculateCameraCoord(_local5[0]);
gfx.moveTo(_local6.x, _local6.y);
_local7 = 1;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
gfx.lineTo(_local6.x, _local6.y);
_local7++;
};
} else {
focusDistance = _local3.focusDistance;
_local7 = 0;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
_local13 = points1[_local7];
if (_local13 == null){
_local13 = _local6.clone();
points1[_local7] = _local13;
} else {
_local13.copy(_local6);
};
_local7++;
};
_local8 = -(focusDistance);
_local9 = _local3._view.halfWidth;
_local10 = Math.sqrt(((_local8 * _local8) + (_local9 * _local9)));
_local8 = (_local8 / _local10);
_local9 = (_local9 / _local10);
_local4 = clip(_local4, points1, points2, _local8, 0, _local9);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, -(_local8), 0, _local9);
if (_local4 < 3){
return;
};
_local11 = -(focusDistance);
_local9 = _local3._view.halfHeight;
_local10 = Math.sqrt(((_local11 * _local11) + (_local9 * _local9)));
_local11 = (_local11 / _local10);
_local9 = (_local9 / _local10);
_local4 = clip(_local4, points1, points2, 0, _local11, _local9);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, 0, -(_local11), _local9);
if (_local4 < 3){
return;
};
gfx.beginFill(_color);
_local6 = points1[0];
_local12 = (focusDistance / _local6.z);
gfx.moveTo((_local6.x * _local12), (_local6.y * _local12));
_local7 = 1;
while (_local7 < _local4) {
_local6 = points1[_local7];
_local12 = (focusDistance / _local6.z);
gfx.lineTo((_local6.x * _local12), (_local6.y * _local12));
_local7++;
};
};
}
override public function clone():Material{
return (new FillMaterial(_color, _alpha, _blendMode));
}
}
}//package com.alternativagame.engine3d
Section 8
//Material (com.alternativagame.engine3d.Material)
package com.alternativagame.engine3d {
public class Material {
public function clone():Material{
return (new Material());
}
}
}//package com.alternativagame.engine3d
Section 9
//Mesh (com.alternativagame.engine3d.Mesh)
package com.alternativagame.engine3d {
import flash.geom.*;
import com.alternativagame.utility.*;
public class Mesh extends Object3D {
var _surfaces:Object;
var _vertices:Object;
var _faces:Object;
private static var counter:uint = 0;
public function Mesh(_arg1:String=null){
_vertices = new Object();
_faces = new Object();
_surfaces = new Object();
super(_arg1);
}
public function removeFace(_arg1:Object):Face{
var _local2 = (_arg1 is Face);
if (_arg1 == null){
throw (new Error(("Невозможно удалить из меша " + (_local2) ? "null-грань" : "грань с null-идентификатором")));
};
if (_local2){
if (Face(_arg1)._mesh != this){
throw (new Error("Невозможно удалить грань из меша, т.к. она в нём не находится"));
};
} else {
if (_faces[_arg1] == undefined){
throw (new Error("Невозможно удалить грань из меша, т.к. грани с таким идентификатором в меше нет"));
};
};
var _local3:Face = (_local2) ? Face(_arg1) : _faces[_arg1];
var _local4:Object = (_local2) ? getFaceId(Face(_arg1)) : _arg1;
if (_scene != null){
_local3.removeFromScene(_scene);
};
_local3.removeVertices();
if (_local3._surface != null){
_local3._surface._faces.remove(_local3);
_local3.removeFromSurface(_local3._surface);
};
_local3.removeFromMesh(this);
delete _faces[_local4];
return (_local3);
}
public function setMaterialToAllSurfaces(_arg1:SurfaceMaterial):void{
var _local2:Surface;
for each (_local2 in _surfaces) {
_local2.material = ((_arg1)!=null) ? SurfaceMaterial(_arg1.clone()) : null;
};
}
public function removeVertex(_arg1:Object):Vertex{
var _local2 = (_arg1 is Vertex);
if (_arg1 == null){
throw (new Error(("Невозможно удалить из меша " + (_local2) ? "null-вершину" : "вершину с null-идентификатором")));
};
if (_local2){
if (Vertex(_arg1)._mesh != this){
throw (new Error("Невозможно удалить вершину из меша, т.к. она в нём не находится"));
};
} else {
if (_vertices[_arg1] == undefined){
throw (new Error("Невозможно удалить вершину из меша, т.к. вершины с таким идентификатором в меше нет"));
};
};
var _local3:Vertex = (_local2) ? Vertex(_arg1) : _vertices[_arg1];
var _local4:Object = (_local2) ? getVertexId(Vertex(_arg1)) : _arg1;
if (_scene != null){
_local3.removeFromScene(_scene);
};
_local3.removeFromMesh(this);
delete _vertices[_local4];
return (_local3);
}
public function removeSurface(_arg1:Object):Surface{
var _local2 = (_arg1 is Surface);
if (_arg1 == null){
throw (new Error(("Невозможно удалить из меша " + (_local2) ? "null-поверхность" : "поверхность с null-идентификатором")));
};
if (_local2){
if (Surface(_arg1)._mesh != this){
throw (new Error("Невозможно удалить поверхность из меша, т.к. она в нём не находится"));
};
} else {
if (_surfaces[_arg1] == undefined){
throw (new Error("Невозможно удалить поверхность из меша, т.к. поверхности с таким идентификатором в меше нет"));
};
};
var _local3:Surface = (_local2) ? Surface(_arg1) : _surfaces[_arg1];
var _local4:Object = (_local2) ? getSurfaceId(Surface(_arg1)) : _arg1;
if (_scene != null){
_local3.removeFromScene(_scene);
};
_local3.removeFaces();
_local3.removeFromMesh(this);
delete _surfaces[_local4];
return (_local3);
}
public function addSurface(_arg1:Array=null, _arg2:Object=null):Surface{
var _local4:uint;
var _local5:uint;
var _local6:uint;
if (_arg2 != null){
if (_surfaces[_arg2] != undefined){
throw (new Error("Невозможно создать поверхность, т.к. уже есть поверхность с таким идентификатором"));
};
} else {
_local4 = 0;
while (_surfaces[_local4] != undefined) {
_local4++;
};
_arg2 = _local4;
};
var _local3:Surface = new Surface();
if (_scene != null){
_local3.addToScene(_scene);
};
_local3.addToMesh(this);
_surfaces[_arg2] = _local3;
if (_arg1 != null){
_local5 = _arg1.length;
_local6 = 0;
while (_local6 < _local5) {
_local3.addFace(_arg1[_local6]);
_local6++;
};
};
return (_local3);
}
public function getFaceId(_arg1:Face):Object{
var _local2:Object;
if (_arg1._mesh != this){
throw (new Error("Невозможно получить ID грани, т.к. грань не находится в меше"));
};
for (_local2 in _faces) {
if (_faces[_local2] == _arg1){
return (_local2);
};
};
return (null);
}
public function setMaterialToSurface(_arg1:SurfaceMaterial, _arg2:Object):void{
var _local3 = (_arg2 is Surface);
if (_arg2 == null){
throw (new Error(("Невозможно назначить материал " + (_local3) ? "null-поверхности" : "поверхности с null-идентификатором")));
};
if (_local3){
if (Surface(_arg2)._mesh != this){
throw (new Error("Невозможно назначить материал поверхности, т.к. она не находится в меше"));
};
} else {
if (_surfaces[_arg2] == undefined){
throw (new Error("Невозможно назначить материал поверхности, т.к. поверхности с таким идентификатором в меше нет"));
};
};
var _local4:Surface = (_local3) ? Surface(_arg2) : _surfaces[_arg2];
_local4.material = _arg1;
}
override function setScene(_arg1:Scene3D):void{
var _local2:Vertex;
var _local3:Face;
var _local4:Surface;
if (_scene != _arg1){
if (_arg1 != null){
for each (_local2 in _vertices) {
_local2.addToScene(_arg1);
};
for each (_local3 in _faces) {
_local3.addToScene(_arg1);
};
for each (_local4 in _surfaces) {
_local4.addToScene(_arg1);
};
} else {
for each (_local2 in _vertices) {
_local2.removeFromScene(_scene);
};
for each (_local3 in _faces) {
_local3.removeFromScene(_scene);
};
for each (_local4 in _surfaces) {
_local4.removeFromScene(_scene);
};
};
};
super.setScene(_arg1);
}
public function getVertexById(_arg1:Object):Vertex{
if (_vertices[_arg1] == undefined){
throw (new Error("Невозможно получить вершину, т.к. вершины с таким идентификатором в меше нет"));
};
return (_vertices[_arg1]);
}
public function getFaceById(_arg1:Object):Face{
if (_faces[_arg1] == undefined){
throw (new Error("Невозможно получить грань, т.к. грани с таким идентификатором в меше нет"));
};
return (_faces[_arg1]);
}
public function getVertexId(_arg1:Vertex):Object{
var _local2:Object;
if (_arg1._mesh != this){
throw (new Error("Невозможно получить ID вершины, т.к. вершина не находится в меше"));
};
for (_local2 in _vertices) {
if (_vertices[_local2] == _arg1){
return (_local2);
};
};
return (null);
}
public function hasFace(_arg1:Object):Boolean{
if ((_arg1 is Face)){
return ((_arg1._mesh == this));
};
return (!((_faces[_arg1] == undefined)));
}
public function hasVertex(_arg1:Object):Boolean{
if ((_arg1 is Vertex)){
return ((_arg1._mesh == this));
};
return (!((_vertices[_arg1] == undefined)));
}
public function addVertex(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Object=null):Vertex{
var _local6:uint;
if (_arg4 != null){
if (_vertices[_arg4] != undefined){
throw (new Error("Невозможно создать вершину, т.к. уже есть вершина с таким идентификатором"));
};
} else {
_local6 = 0;
while (_vertices[_local6] != undefined) {
_local6++;
};
_arg4 = _local6;
};
var _local5:Vertex = new Vertex(_arg1, _arg2, _arg3);
if (_scene != null){
_local5.addToScene(_scene);
};
_local5.addToMesh(this);
_vertices[_arg4] = _local5;
return (_local5);
}
public function get surfaces():Object{
return (ObjectUtility.clone(_surfaces));
}
public function setUVsToFace(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Object):void{
var _local5 = (_arg4 is Face);
if (_arg4 == null){
throw (new Error(("Невозможно назначить UV-координаты " + (_local5) ? "null-грани" : "грани с null-идентификатором")));
};
if (_local5){
if (Face(_arg4)._mesh != this){
throw (new Error("Невозможно назначить UV-координаты грани, т.к. она не находится в меше"));
};
} else {
if (_faces[_arg4] == undefined){
throw (new Error("Невозможно назначить UV-координаты грани, т.к. грани с таким идентификатором в меше нет"));
};
};
var _local6:Face = (_local5) ? Face(_arg4) : _faces[_arg4];
_local6.aUV = _arg1;
_local6.bUV = _arg2;
_local6.cUV = _arg3;
}
public function getSurfaceById(_arg1:Object):Surface{
if (_surfaces[_arg1] == undefined){
throw (new Error("Невозможно получить поверхность, т.к. поверхности с таким идентификатором в меше нет"));
};
return (_surfaces[_arg1]);
}
override protected function defaultName():String{
return (("mesh" + ++counter));
}
public function addFace(_arg1:Array, _arg2:Object=null):Face{
var _local5:Vertex;
var _local8:uint;
if (_arg1 == null){
throw (new Error("Невозможно создать грань без точек"));
};
if (_arg2 != null){
if (_faces[_arg2] != undefined){
throw (new Error("Невозможно создать грань, т.к. уже есть грань с таким идентификатором"));
};
} else {
_local8 = 0;
while (_faces[_local8] != undefined) {
_local8++;
};
_arg2 = _local8;
};
var _local3:uint = _arg1.length;
if (_local3 < 3){
throw (new Error("Невозможно создать грань, т.к. необходимо не менее трёх вершин"));
};
var _local4:Array = new Array();
var _local6:uint;
while (_local6 < _local3) {
if ((_arg1[_local6] is Vertex)){
_local5 = _arg1[_local6];
if (_local5._mesh != this){
throw (new Error("Невозможно создать грань, т.к. необходимо, чтобы все вершины находились в этом меше"));
};
} else {
_local5 = _vertices[_arg1[_local6]];
if (_local5 == null){
throw (new Error("Невозможно создать грань, т.к. одна из вершин по указанному идентификатору не найдена"));
};
};
_local4.push(_local5);
_local6++;
};
var _local7:Face = new Face(_local4);
if (_scene != null){
_local7.addToScene(_scene);
};
_local7.addToMesh(this);
_faces[_arg2] = _local7;
return (_local7);
}
public function getSurfaceId(_arg1:Surface):Object{
var _local2:Object;
if (_arg1._mesh != this){
throw (new Error("Невозможно получить ID поверхности, т.к. поверхность не находится в меше"));
};
for (_local2 in _surfaces) {
if (_surfaces[_local2] == _arg1){
return (_local2);
};
};
return (null);
}
public function get faces():Object{
return (ObjectUtility.clone(_faces));
}
public function get vertices():Object{
return (ObjectUtility.clone(_vertices));
}
public function hasSurface(_arg1:Object):Boolean{
if ((_arg1 is Surface)){
return ((_arg1._mesh == this));
};
return (!((_surfaces[_arg1] == undefined)));
}
override public function toString():String{
return ((((((((("[" + ObjectUtility.getClassName(this)) + " ") + _name) + " vertices: ") + ObjectUtility.length(_vertices)) + " faces: ") + ObjectUtility.length(_faces)) + "]"));
}
}
}//package com.alternativagame.engine3d
Section 10
//Object3D (com.alternativagame.engine3d.Object3D)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
import flash.utils.*;
import com.alternativagame.utility.*;
public class Object3D {
var _scene:Scene3D;
var moveOperation:Operation;
var globalCoords:Point3D;
var locationOperation:Operation;
var _solid:Boolean;// = false
var _coords:Point3D;
var _rotX:Number;// = 0
var _mobile:uint;// = 0
var removeOperation:Operation;
var addOperation:Operation;
private var _solidObjects:Dictionary;
var _parent:Object3D;
var transformMatrix:Matrix3D;
var _rotY:Number;// = 0
var _objects:Set;
var transformOperation:Operation;
var calculateTransformOperation:Operation;
var mobileOperation:Operation;
var _name:String;
var _scaleX:Number;// = 1
var _scaleY:Number;// = 1
var _rotZ:Number;// = 0
var _solidParent:Object3D;
var _scaleZ:Number;// = 1
private static var counter:uint = 0;
public function Object3D(_arg1:String=null){
addOperation = new Operation("add", this);
removeOperation = new Operation("remove", this);
locationOperation = new Operation("location", this);
transformOperation = new Operation("transform", this);
moveOperation = new Operation("move", this);
mobileOperation = new Operation("mobile", this);
calculateTransformOperation = new Operation("calculateTransform", this, calculateTransform, Operation.OBJECT_TRANSFORMATION);
_objects = new Set();
_solidObjects = new Dictionary(true);
_coords = new Point3D();
transformMatrix = new Matrix3D();
globalCoords = new Point3D();
super();
_solidParent = this;
addSolidObject(this);
_name = ((_arg1)!=null) ? _arg1 : defaultName();
addOperation.addSequel(calculateTransformOperation);
locationOperation.addSequel(calculateTransformOperation);
transformOperation.addSequel(calculateTransformOperation);
moveOperation.addSequel(calculateTransformOperation);
}
public function get z():Number{
return (_coords.z);
}
public function get rotX():Number{
return (_rotX);
}
public function get rotZ():Number{
return (_rotZ);
}
public function set rotX(_arg1:Number):void{
if (_rotX != _arg1){
_rotX = _arg1;
addOperationToScene(transformOperation);
};
}
protected function removeFromScene(_arg1:Scene3D):void{
_arg1.removeOperation(addOperation);
_arg1.removeOperation(locationOperation);
_arg1.removeOperation(transformOperation);
_arg1.removeOperation(moveOperation);
_arg1.removeOperation(mobileOperation);
_arg1.addOperation(removeOperation);
mobileOperation.removeSequel(_arg1.calculatePrimitivesOperation);
}
protected function defaultName():String{
return (("object" + ++counter));
}
public function get scene():Scene3D{
return (_scene);
}
public function get objects():Set{
return (_objects.clone());
}
function setSolidParent(_arg1:Object3D):void{
var _local2:*;
var _local3:Object3D;
_solidParent.removeSolidObject(this);
_arg1.addSolidObject(this);
if (!_solid){
for (_local2 in _objects) {
_local3 = _local2;
_local3.setSolidParent(_arg1);
};
};
_solidParent = _arg1;
}
public function set scaleX(_arg1:Number):void{
if (_scaleX != _arg1){
_scaleX = _arg1;
addOperationToScene(transformOperation);
};
}
public function set name(_arg1:String):void{
_name = _arg1;
}
public function get coords():Point3D{
return (_coords.clone());
}
public function set scaleZ(_arg1:Number):void{
if (_scaleZ != _arg1){
_scaleZ = _arg1;
addOperationToScene(transformOperation);
};
}
public function get mobile():uint{
return (_mobile);
}
public function get name():String{
return (_name);
}
public function set scaleY(_arg1:Number):void{
if (_scaleY != _arg1){
_scaleY = _arg1;
addOperationToScene(transformOperation);
};
}
private function calculateTransform():void{
if (((((transformOperation.queued) || (locationOperation.queued))) || (addOperation.queued))){
transformMatrix.toTransform(_coords.x, _coords.y, _coords.z, _rotX, _rotY, _rotZ, _scaleX, _scaleY, _scaleZ);
if (_parent != null){
transformMatrix.combine(_parent.transformMatrix);
};
globalCoords.x = transformMatrix.d;
globalCoords.y = transformMatrix.h;
globalCoords.z = transformMatrix.l;
} else {
globalCoords.copy(coords);
if (_parent != null){
globalCoords.transform(_parent.transformMatrix);
};
transformMatrix.offset(globalCoords.x, globalCoords.y, globalCoords.z);
};
}
public function get solid():Boolean{
return (_solid);
}
function removeSolidObject(_arg1:Object3D):void{
var _local3:Class;
var _local2:Array = ObjectUtility.getClassTree(_arg1, Object3D);
var _local4:uint;
while (_local4 < _local2.length) {
_local3 = _local2[_local4];
Set(_solidObjects[_local3]).remove(_arg1);
if (Set(_solidObjects[_local3]).isEmpty()){
delete _solidObjects[_local3];
};
_local4++;
};
}
function addSolidObject(_arg1:Object3D):void{
var _local3:Class;
var _local2:Array = ObjectUtility.getClassTree(_arg1, Object3D);
var _local4:uint;
while (_local4 < _local2.length) {
_local3 = _local2[_local4];
if (_solidObjects[_local3] == undefined){
_solidObjects[_local3] = new Set();
};
_solidObjects[_local3].add(_arg1);
_local4++;
};
}
public function get parent():Object3D{
return (_parent);
}
public function get solidParent():Object3D{
return (_solidParent);
}
function addOperationToScene(_arg1:Operation):void{
if (_scene != null){
_scene.addOperation(_arg1);
};
}
public function set coords(_arg1:Point3D):void{
if (!_coords.equals(_arg1)){
_coords.copy(_arg1);
addOperationToScene(moveOperation);
};
}
function setParent(_arg1:Object3D):void{
if (_parent != null){
removeParentSequels();
};
_parent = _arg1;
if (_arg1 != null){
addParentSequels();
setSolidParent((_arg1._solid) ? _arg1 : _arg1._solidParent);
} else {
setSolidParent(this);
};
}
public function addObject(_arg1:Object3D):void{
var _local2:Object3D;
if (_arg1 != null){
if (_arg1._parent != this){
if (_arg1 != this){
if (_arg1._parent != null){
_arg1._parent._objects.remove(_arg1);
} else {
if (((!((_arg1._scene == null))) && ((_arg1._scene._root == _arg1)))){
_arg1._scene.root = null;
};
};
if (_arg1._scene == _scene){
_local2 = _parent;
while (_local2 != null) {
if (_arg1 == _local2){
throw (new Error(("Невозможно присоединить родительский объект " + _arg1)));
};
_local2 = _local2._parent;
};
};
_objects.add(_arg1);
_arg1.setParent(this);
_arg1.setLevel((calculateTransformOperation.level + 1));
_arg1.setScene(_scene);
} else {
throw (new Error("Невозможно присоединить себя к себе"));
};
} else {
throw (new Error("Невозможно присоединить уже присоединённый объект"));
};
} else {
throw (new Error("Невозможно присоединить null-объект"));
};
}
private function addParentSequels():void{
_parent.moveOperation.addSequel(moveOperation);
_parent.transformOperation.addSequel(transformOperation);
}
public function get scaleX():Number{
return (_scaleX);
}
private function removeParentSequels():void{
_parent.moveOperation.removeSequel(moveOperation);
_parent.transformOperation.removeSequel(transformOperation);
}
public function set mobile(_arg1:uint):void{
if (_mobile != _arg1){
_mobile = _arg1;
addOperationToScene(mobileOperation);
};
}
public function set solid(_arg1:Boolean):void{
var _local2:Object3D;
var _local3:*;
var _local4:Object3D;
if (_solid != _arg1){
_solid = _arg1;
if (_arg1){
_local2 = this;
} else {
_local2 = _solidParent;
};
for (_local3 in _objects) {
_local4 = _local3;
_local4.setSolidParent(_local2);
};
};
}
public function get scaleZ():Number{
return (_scaleZ);
}
function setScene(_arg1:Scene3D):void{
var _local2:*;
var _local3:Object3D;
if (_scene != _arg1){
if (_scene != null){
removeFromScene(_scene);
};
if (_arg1 != null){
addToScene(_arg1);
};
_scene = _arg1;
} else {
addOperationToScene(locationOperation);
};
for (_local2 in _objects) {
_local3 = _local2;
_local3.setScene(_scene);
};
}
function getSolidObjects(_arg1:Class=null):Set{
if (((_solid) || ((_parent == null)))){
_arg1 = ((_arg1)==null) ? Object3D : _arg1;
if (_solidObjects[_arg1] != undefined){
return (Set(_solidObjects[_arg1]));
};
return (new Set());
//unresolved jump
};
return (solidParent.getSolidObjects(_arg1));
}
public function get rotY():Number{
return (_rotY);
}
public function removeObject(_arg1:Object3D):void{
if (_arg1 != null){
if (_arg1._parent == this){
_objects.remove(_arg1);
_arg1.setParent(null);
_arg1.setScene(null);
} else {
throw (new Error("Невозможно удалить связь с объектом, т.к. он не является дочерним"));
};
} else {
throw (new Error("Невозможно удалить дочернюю связь с null-объектом"));
};
}
public function set rotY(_arg1:Number):void{
if (_rotY != _arg1){
_rotY = _arg1;
addOperationToScene(transformOperation);
};
}
public function get scaleY():Number{
return (_scaleY);
}
public function set rotZ(_arg1:Number):void{
if (_rotZ != _arg1){
_rotZ = _arg1;
addOperationToScene(transformOperation);
};
}
public function get solidObjects():Set{
return (getSolidObjects().clone());
}
protected function addToScene(_arg1:Scene3D):void{
_arg1.removeOperation(removeOperation);
_arg1.addOperation(addOperation);
mobileOperation.addSequel(_arg1.calculatePrimitivesOperation);
}
public function set y(_arg1:Number):void{
if (_coords.y != _arg1){
_coords.y = _arg1;
addOperationToScene(moveOperation);
};
}
public function toString():String{
return ((((("[" + ObjectUtility.getClassName(this)) + " ") + _name) + "]"));
}
public function set z(_arg1:Number):void{
if (_coords.z != _arg1){
_coords.z = _arg1;
addOperationToScene(moveOperation);
};
}
public function set x(_arg1:Number):void{
if (_coords.x != _arg1){
_coords.x = _arg1;
addOperationToScene(moveOperation);
};
}
public function get x():Number{
return (_coords.x);
}
public function get y():Number{
return (_coords.y);
}
function setLevel(_arg1:uint):void{
var _local2:*;
var _local3:Object3D;
calculateTransformOperation.level = _arg1;
for (_local2 in _objects) {
_local3 = _local2;
_local3.setLevel((_arg1 + 1));
};
}
function removeOperationFromScene(_arg1:Operation):void{
if (_scene != null){
_scene.removeOperation(_arg1);
};
}
}
}//package com.alternativagame.engine3d
Section 11
//Operation (com.alternativagame.engine3d.Operation)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
public class Operation {
public var queued:Boolean;// = false
var method:Function;
public var priority:uint;
var name:String;
public var level:uint;// = 0
private var sequel:Operation;
private var sequels:Set;
var object:Object;
public static const SCENE_CLEAR_PRIMITIVES:uint = 11;
public static const FACE_UV:uint = 3;
public static const VERTEX_TRANSFORMATION:uint = 1;
public static const CAMERA_CALCULATE_SKINS:uint = 10;
public static const OBJECT_TRANSFORMATION:uint = 0;
public static const FACE_TRANSFORM:uint = 4;
public static const SKIN_DRAW:uint = 9;
public static const CAMERA_CLEAR_CALCULATED:uint = 8;
public static const CAMERA_MATRIX:uint = 7;
public static const SCENE_CALCULATE_PRIMITIVES:uint = 5;
public static const FACE_PLANE:uint = 2;
public static const FACE_CALCULATE_UV:uint = 6;
public function Operation(_arg1:String, _arg2:Object=null, _arg3:Function=null, _arg4:uint=0, _arg5:uint=0){
this.object = _arg2;
this.method = _arg3;
this.name = _arg1;
this.priority = _arg4;
this.level = _arg5;
}
function addSequel(_arg1:Operation):void{
if (sequel == null){
if (sequels == null){
sequel = _arg1;
} else {
sequels[_arg1] = true;
};
} else {
if (sequel != _arg1){
sequels = new Set(true);
sequels[sequel] = true;
sequels[_arg1] = true;
sequel = null;
};
};
}
public function toString():String{
return ((((((((("[Operation " + priority) + "/") + level) + " ") + object) + ".") + name) + "]"));
}
function removeSequel(_arg1:Operation):void{
var _local2:*;
var _local3:Boolean;
if (sequel == null){
if (sequels != null){
delete sequels[_arg1];
_local3 = false;
for (_local2 in sequels) {
if (_local3){
_local3 = false;
break;
};
_local3 = true;
};
if (_local3){
sequel = _local2;
sequels = null;
};
};
} else {
if (sequel == _arg1){
sequel = null;
};
};
}
function collectSequels(_arg1:Array):void{
var _local2:*;
var _local3:Operation;
if (sequel == null){
for (_local2 in sequels) {
_local3 = _local2;
if (!_local3.queued){
_arg1.push(_local3);
_local3.queued = true;
_local3.collectSequels(_arg1);
};
};
} else {
if (!sequel.queued){
_arg1.push(sequel);
sequel.queued = true;
sequel.collectSequels(_arg1);
};
};
}
}
}//package com.alternativagame.engine3d
Section 12
//PolyPrimitive (com.alternativagame.engine3d.PolyPrimitive)
package com.alternativagame.engine3d {
public class PolyPrimitive {
var sibling:PolyPrimitive;
var node:BSPNode;
var splitTime1:Number;
var num:uint;
var splitTime2:Number;
public var splits:uint;
var face:Face;
public var mobile:uint;
var points:Array;
var back:PolyPrimitive;
var front:PolyPrimitive;
var parent:PolyPrimitive;
var uvs:Array;
private static var collector:Array = new Array();
public function PolyPrimitive(){
points = new Array();
uvs = new Array();
super();
}
public function toString():String{
return ((("[Primitive " + face._mesh._name) + "]"));
}
static function destroyPolyPrimitive(_arg1:PolyPrimitive):void{
_arg1.face = null;
var _local2:uint;
while (_local2 < _arg1.num) {
_arg1.points.pop();
_arg1.uvs.pop();
_local2++;
};
collector.push(_arg1);
}
static function createPolyPrimitive():PolyPrimitive{
var _local1:PolyPrimitive = collector.pop();
if (_local1 == null){
_local1 = new (PolyPrimitive);
};
return (_local1);
}
}
}//package com.alternativagame.engine3d
Section 13
//Scene3D (com.alternativagame.engine3d.Scene3D)
package com.alternativagame.engine3d {
import flash.display.*;
import com.alternativagame.type.*;
import flash.geom.*;
import com.alternativagame.engine3d.collision.*;
public class Scene3D {
const planeOffsetTreshold:Number = 0.1;
private var collisionPlanePoint:Point3D;
private var removeNodes:Set;
var removePrimitives:Set;
var calculatePrimitivesOperation:Operation;
private var collisionPoint:Point3D;
private var collisionVector:Point3D;
private var operationSort:Array;
var childPrimitives:Set;
private var operationSortOptions:Array;
private var collisionPrimitivePoint:Point3D;
var bsp:BSPNode;
private var collisionNormal:Point3D;
var _root:Object3D;
private var collisionPrimitiveNearestPoint:Point3D;
private var collisionPrimitiveNearest:PolyPrimitive;
var lowerPrimitives:Set;
var clearPrimitivesOperation:Operation;
private var dummyNode:BSPNode;
private var collisionPrimitiveNearestLengthSqr:Number;
private var collisionPrimitive:PolyPrimitive;
private var addSortOptions:Array;
private var addSort:Array;
private var collisionRadius:Number;
private var collisionOffset:Number;
private var addList:Array;
private var collisionPlanes:Array;
private var operations:Array;
private var collisionSource:Point3D;
var addPrimitives:Set;
private var collisionDestination:Point3D;
private static var pointOffsets:Array = new Array();
public function Scene3D(){
calculatePrimitivesOperation = new Operation("calculatePrimitives", this, calculatePrimitives, Operation.SCENE_CALCULATE_PRIMITIVES);
clearPrimitivesOperation = new Operation("clearPrimitives", this, clearPrimitives, Operation.SCENE_CLEAR_PRIMITIVES);
operations = new Array();
operationSort = ["priority", "level"];
operationSortOptions = [Array.NUMERIC, Array.NUMERIC];
addPrimitives = new Set();
removePrimitives = new Set();
childPrimitives = new Set();
lowerPrimitives = new Set();
addList = new Array();
addSort = ["mobile", "splits"];
addSortOptions = [(Array.NUMERIC | Array.DESCENDING), (Array.NUMERIC | Array.DESCENDING)];
removeNodes = new Set();
dummyNode = new BSPNode();
collisionDestination = new Point3D();
collisionPlanes = new Array();
collisionPlanePoint = new Point3D();
collisionPrimitivePoint = new Point3D();
collisionPrimitiveNearestPoint = new Point3D();
collisionPoint = new Point3D();
collisionNormal = new Point3D();
super();
calculatePrimitivesOperation.addSequel(clearPrimitivesOperation);
}
private function childBSP(_arg1:BSPNode):void{
var _local2:PolyPrimitive;
var _local3:*;
if (((!((_arg1 == null))) && (!((_arg1 == dummyNode))))){
_local2 = _arg1.primitive;
if (_local2 != null){
childPrimitives[_local2] = true;
removePrimitives[_local2] = true;
_arg1.primitive = null;
_local2.node = null;
} else {
for (_local3 in _arg1.backPrimitives) {
_local2 = _local3;
_local2.node = null;
childPrimitives[_local2] = true;
removePrimitives[_local2] = true;
};
for (_local3 in _arg1.frontPrimitives) {
_local2 = _local3;
_local2.node = null;
childPrimitives[_local2] = true;
removePrimitives[_local2] = true;
};
_arg1.backPrimitives = null;
_arg1.frontPrimitives = null;
};
childBSP(_arg1.back);
childBSP(_arg1.front);
_arg1.parent = null;
_arg1.back = null;
_arg1.front = null;
BSPNode.destroyBSPNode(_arg1);
};
}
public function drawBSPNode(_arg1:BSPNode, _arg2:Sprite, _arg3:Number, _arg4:Number, _arg5:Number):void{
var _local8:PolyPrimitive;
var _local6:Shape = new Shape();
_arg2.addChild(_local6);
_local6.x = _arg3;
_local6.y = _arg4;
var _local7:uint = 0xFF0000;
if (_arg1.primitive != null){
_local8 = _arg1.primitive;
} else {
if (_arg1.frontPrimitives != null){
_local8 = _arg1.frontPrimitives.first();
};
};
if (_local8 != null){
if (((!((_local8.face._surface == null))) && (!((_local8.face._surface._material == null))))){
if ((_local8.face._surface._material is FillMaterial)){
_local7 = FillMaterial(_local8.face._surface._material)._color;
};
if ((_local8.face._surface._material is WireMaterial)){
_local7 = WireMaterial(_local8.face._surface._material)._color;
};
if ((_local8.face._surface._material is TextureMaterial)){
_local7 = TextureMaterial(_local8.face._surface._material).texture.bitmapData.getPixel(0, 0);
};
};
};
if (_arg1 == dummyNode){
_local7 = 0xFF00FF;
};
_local6.graphics.beginFill(_local7);
_local6.graphics.drawCircle(0, 0, 3);
_local6.graphics.endFill();
var _local9:Number = 100;
var _local10:Number = 20;
if (_arg1.back != null){
_arg2.graphics.lineStyle(0, 0x660000);
_arg2.graphics.moveTo(_arg3, _arg4);
_arg2.graphics.lineTo((_arg3 - (_local9 * _arg5)), (_arg4 + _local10));
drawBSPNode(_arg1.back, _arg2, (_arg3 - (_local9 * _arg5)), (_arg4 + _local10), (_arg5 * 0.8));
};
if (_arg1.front != null){
_arg2.graphics.lineStyle(0, 0x6600);
_arg2.graphics.moveTo(_arg3, _arg4);
_arg2.graphics.lineTo((_arg3 + (_local9 * _arg5)), (_arg4 + _local10));
drawBSPNode(_arg1.front, _arg2, (_arg3 + (_local9 * _arg5)), (_arg4 + _local10), (_arg5 * 0.8));
};
}
private function removeBSPPrimitive(_arg1:PolyPrimitive):void{
var _local4:*;
var _local5:BSPNode;
var _local2:BSPNode = _arg1.node;
_arg1.node = null;
var _local3:Boolean;
if (_local2.primitive == _arg1){
removeNodes[_local2] = true;
_local2.primitive = null;
} else {
if (_local2.frontPrimitives[_arg1]){
delete _local2.frontPrimitives[_arg1];
for (_local4 in _local2.frontPrimitives) {
if (_local3){
_local3 = false;
break;
};
_local3 = true;
};
if (_local4 == null){
_local5 = _local2.back;
_local2.back = _local2.front;
_local2.front = _local5;
_local2.normal.invert();
_local2.offset = -(_local2.offset);
for (_local4 in _local2.backPrimitives) {
if (_local3){
_local3 = false;
break;
};
_local3 = true;
};
if (_local3){
_local2.primitive = _local4;
_local2.mobile = _local2.primitive.mobile;
_local2.frontPrimitives = null;
} else {
_local2.frontPrimitives = _local2.backPrimitives;
if (_arg1.mobile == _local2.mobile){
_local2.mobile = uint.MAX_VALUE;
for (_local4 in _local2.frontPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
};
};
_local2.backPrimitives = null;
} else {
if (((_local3) && ((_local2.backPrimitives == null)))){
_local2.primitive = _local4;
_local2.mobile = _local2.primitive.mobile;
_local2.frontPrimitives = null;
} else {
if (_arg1.mobile == _local2.mobile){
_local2.mobile = uint.MAX_VALUE;
for (_local4 in _local2.backPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
for (_local4 in _local2.frontPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
};
};
};
} else {
delete _local2.backPrimitives[_arg1];
for (_local4 in _local2.backPrimitives) {
break;
};
if (_local4 == null){
for (_local4 in _local2.frontPrimitives) {
if (_local3){
_local3 = false;
break;
};
_local3 = true;
};
if (_local3){
_local2.primitive = _local4;
_local2.mobile = _local2.primitive.mobile;
_local2.frontPrimitives = null;
} else {
if (_arg1.mobile == _local2.mobile){
_local2.mobile = uint.MAX_VALUE;
for (_local4 in _local2.frontPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
};
};
_local2.backPrimitives = null;
} else {
if (_arg1.mobile == _local2.mobile){
_local2.mobile = uint.MAX_VALUE;
for (_local4 in _local2.backPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
for (_local4 in _local2.frontPrimitives) {
_arg1 = _local4;
_local2.mobile = ((_local2.mobile)>_arg1.mobile) ? _arg1.mobile : _local2.mobile;
};
};
};
};
};
}
private function clearPrimitives():void{
addPrimitives.clear();
removePrimitives.clear();
}
private function calculateSplits():void{
var _local3:PolyPrimitive;
var _local4:Point3D;
var _local5:Number;
var _local6:uint;
var _local7:PolyPrimitive;
var _local8:Boolean;
var _local9:Boolean;
var _local10:uint;
var _local11:Point3D;
var _local12:Number;
var _local1:uint = addList.length;
var _local2:uint;
while (_local2 < _local1) {
_local3 = addList[_local2];
_local4 = _local3.face.globalNormal;
_local5 = _local3.face.globalOffset;
_local3.splits = 0;
_local6 = 0;
while (_local6 < _local1) {
if (_local2 != _local6){
_local7 = addList[_local6];
if (_local3.mobile <= _local7.mobile){
_local8 = false;
_local9 = false;
_local10 = 0;
while (_local10 < _local7.num) {
_local11 = _local7.points[_local10];
_local12 = ((((_local11.x * _local4.x) + (_local11.y * _local4.y)) + (_local11.z * _local4.z)) - _local5);
if (_local12 > planeOffsetTreshold){
if (_local9){
_local3.splits++;
break;
} else {
_local8 = true;
};
} else {
if (_local12 < -(planeOffsetTreshold)){
if (_local8){
_local3.splits++;
break;
} else {
_local9 = true;
};
};
};
_local10++;
};
};
};
_local6++;
};
_local2++;
};
}
private function assemblePrimitive(_arg1:PolyPrimitive, _arg2:Set):void{
if (((!((_arg1.sibling == null))) && (canAssemble(_arg1.sibling, _arg2)))){
assemblePrimitive(_arg1.parent, _arg2);
_arg1.sibling.sibling = null;
_arg1.sibling.parent = null;
PolyPrimitive.destroyPolyPrimitive(_arg1.sibling);
_arg1.sibling = null;
_arg1.parent.back = null;
_arg1.parent.front = null;
_arg1.parent = null;
PolyPrimitive.destroyPolyPrimitive(_arg1);
} else {
_arg2[_arg1] = true;
};
}
private function calculateCollisionWithPrimitive(_arg1:PolyPrimitive):void{
var _local7:Point3D;
var _local8:Point3D;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local2:uint = _arg1.num;
var _local3:Array = _arg1.points;
var _local4:Point3D = _arg1.face.globalNormal;
var _local5:Boolean;
var _local6:uint;
while (_local6 < _local2) {
_local7 = _local3[_local6];
_local8 = _local3[((_local6)<(_local2 - 1)) ? (_local6 + 1) : 0];
_local9 = (_local8.x - _local7.x);
_local10 = (_local8.y - _local7.y);
_local11 = (_local8.z - _local7.z);
_local12 = (collisionPlanePoint.x - _local7.x);
_local13 = (collisionPlanePoint.y - _local7.y);
_local14 = (collisionPlanePoint.z - _local7.z);
_local15 = ((_local13 * _local11) - (_local14 * _local10));
_local16 = ((_local14 * _local9) - (_local12 * _local11));
_local17 = ((_local12 * _local10) - (_local13 * _local9));
if ((((_local15 * _local4.x) + (_local16 * _local4.y)) + (_local17 * _local4.z)) > 0){
_local5 = false;
_local18 = (((_local9 * _local9) + (_local10 * _local10)) + (_local11 * _local11));
_local19 = ((((_local15 * _local15) + (_local16 * _local16)) + (_local17 * _local17)) / _local18);
if (_local19 < collisionPrimitiveNearestLengthSqr){
_local20 = Math.sqrt(_local18);
_local21 = (_local9 / _local20);
_local22 = (_local10 / _local20);
_local23 = (_local11 / _local20);
_local24 = (((_local21 * _local12) + (_local22 * _local13)) + (_local23 * _local14));
if (_local24 < 0){
_local25 = (((_local12 * _local12) + (_local13 * _local13)) + (_local14 * _local14));
if (_local25 < collisionPrimitiveNearestLengthSqr){
collisionPrimitiveNearestLengthSqr = _local25;
collisionPrimitiveNearestPoint.x = _local7.x;
collisionPrimitiveNearestPoint.y = _local7.y;
collisionPrimitiveNearestPoint.z = _local7.z;
collisionPrimitiveNearest = _arg1;
};
} else {
if (_local24 > _local20){
_local12 = (collisionPlanePoint.x - _local8.x);
_local13 = (collisionPlanePoint.y - _local8.y);
_local14 = (collisionPlanePoint.z - _local8.z);
_local25 = (((_local12 * _local12) + (_local13 * _local13)) + (_local14 * _local14));
if (_local25 < collisionPrimitiveNearestLengthSqr){
collisionPrimitiveNearestLengthSqr = _local25;
collisionPrimitiveNearestPoint.x = _local8.x;
collisionPrimitiveNearestPoint.y = _local8.y;
collisionPrimitiveNearestPoint.z = _local8.z;
collisionPrimitiveNearest = _arg1;
};
} else {
collisionPrimitiveNearestLengthSqr = _local19;
collisionPrimitiveNearestPoint.x = (_local7.x + (_local21 * _local24));
collisionPrimitiveNearestPoint.y = (_local7.y + (_local22 * _local24));
collisionPrimitiveNearestPoint.z = (_local7.z + (_local23 * _local24));
collisionPrimitiveNearest = _arg1;
};
};
};
};
_local6++;
};
if (_local5){
collisionPrimitive = _arg1;
};
}
private function removeBSPNode(_arg1:BSPNode):BSPNode{
var _local2:BSPNode;
if (_arg1 != null){
_arg1.back = removeBSPNode(_arg1.back);
_arg1.front = removeBSPNode(_arg1.front);
if (!removeNodes[_arg1]){
_local2 = _arg1;
if (_arg1.back != null){
if (_arg1.back != dummyNode){
_arg1.back.parent = _arg1;
} else {
_arg1.back = null;
};
};
if (_arg1.front != null){
if (_arg1.front != dummyNode){
_arg1.front.parent = _arg1;
} else {
_arg1.front = null;
};
};
} else {
if (_arg1.back == null){
if (_arg1.front != null){
_local2 = _arg1.front;
_arg1.front = null;
};
} else {
if (_arg1.front == null){
_local2 = _arg1.back;
_arg1.back = null;
} else {
childBSP(_arg1.back);
childBSP(_arg1.front);
_local2 = dummyNode;
_arg1.back = null;
_arg1.front = null;
};
};
delete removeNodes[_arg1];
_arg1.parent = null;
BSPNode.destroyBSPNode(_arg1);
};
};
return (_local2);
}
private function canAssemble(_arg1:PolyPrimitive, _arg2:Set):Boolean{
var _local3:PolyPrimitive;
var _local4:PolyPrimitive;
var _local5:Boolean;
var _local6:Boolean;
if (childPrimitives[_arg1]){
delete childPrimitives[_arg1];
return (true);
};
_local3 = _arg1.back;
_local4 = _arg1.front;
if (_local3 != null){
_local5 = canAssemble(_local3, _arg2);
_local6 = canAssemble(_local4, _arg2);
if (((_local5) && (_local6))){
_local3.parent = null;
_local4.parent = null;
_local3.sibling = null;
_local4.sibling = null;
_arg1.back = null;
_arg1.front = null;
PolyPrimitive.destroyPolyPrimitive(_local3);
PolyPrimitive.destroyPolyPrimitive(_local4);
return (true);
};
if (_local5){
_arg2[_local3] = true;
};
if (_local6){
_arg2[_local4] = true;
};
};
return (false);
}
function removeOperation(_arg1:Operation):void{
if (_arg1.queued){
operations.splice(operations.indexOf(_arg1), 1);
};
}
public function set root(_arg1:Object3D):void{
if (_root != _arg1){
if (_arg1 != null){
if (_arg1._parent != null){
_arg1._parent._objects.remove(_arg1);
} else {
if (((!((_arg1._scene == null))) && ((_arg1._scene._root == _arg1)))){
_arg1._scene.root = null;
};
};
_arg1.setParent(null);
_arg1.setScene(this);
_arg1.setLevel(0);
};
if (_root != null){
_root.setParent(null);
_root.setScene(null);
};
_root = _arg1;
} else {
if (_root != null){
throw (new Error("Невозможно указать корневым уже корневой объект"));
};
};
}
function addOperation(_arg1:Operation):void{
if (!_arg1.queued){
operations.push(_arg1);
_arg1.queued = true;
};
}
public function drawBSP(_arg1:Sprite):void{
_arg1.graphics.clear();
while (_arg1.numChildren > 0) {
_arg1.removeChildAt(0);
};
if (bsp != null){
drawBSPNode(bsp, _arg1, 0, 0, 1);
};
}
private function addBSP(_arg1:BSPNode, _arg2:PolyPrimitive):void{
var _local3:Point3D;
var _local4:Point3D;
var _local5:PolyPrimitive;
var _local6:*;
var _local7:Array;
var _local8:Array;
var _local9:Boolean;
var _local10:Boolean;
var _local11:uint;
var _local12:Number;
var _local13:PolyPrimitive;
var _local14:PolyPrimitive;
var _local15:Boolean;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Point;
if (_arg2.mobile < _arg1.mobile){
if (_arg1.primitive != null){
childPrimitives[_arg1.primitive] = true;
removePrimitives[_arg1.primitive] = true;
} else {
for (_local6 in _arg1.backPrimitives) {
childPrimitives[_local6] = true;
removePrimitives[_local6] = true;
};
for (_local6 in _arg1.frontPrimitives) {
childPrimitives[_local6] = true;
removePrimitives[_local6] = true;
};
};
childBSP(_arg1.back);
childBSP(_arg1.front);
assembleChildPrimitives(lowerPrimitives);
if (!lowerPrimitives.isEmpty()){
for (_local6 in lowerPrimitives) {
addPrimitives[_local6] = true;
addList.push(_local6);
delete lowerPrimitives[_local6];
};
calculateSplits();
addList.sortOn(addSort, addSortOptions);
};
_arg1.primitive = _arg2;
_arg2.node = _arg1;
_arg1.normal.copy(_arg2.face.globalNormal);
_arg1.offset = _arg2.face.globalOffset;
_arg1.mobile = _arg2.mobile;
_arg1.backPrimitives = null;
_arg1.frontPrimitives = null;
_arg1.back = null;
_arg1.front = null;
} else {
_local4 = _arg1.normal;
_local7 = _arg2.points;
_local8 = _arg2.uvs;
_local9 = false;
_local10 = false;
_local11 = 0;
while (_local11 < _arg2.num) {
_local3 = _local7[_local11];
_local12 = ((((_local3.x * _local4.x) + (_local3.y * _local4.y)) + (_local3.z * _local4.z)) - _arg1.offset);
if (_local12 > planeOffsetTreshold){
_local9 = true;
} else {
if (_local12 < -(planeOffsetTreshold)){
_local10 = true;
};
};
pointOffsets[_local11] = _local12;
_local11++;
};
if (((!(_local9)) && (!(_local10)))){
_arg2.node = _arg1;
if (_arg1.primitive != null){
_arg1.frontPrimitives = new Set(true);
_arg1.frontPrimitives[_arg1.primitive] = true;
_arg1.primitive = null;
};
if (Point3D.dot(_arg2.face.globalNormal, _local4) > 0){
_arg1.frontPrimitives[_arg2] = true;
} else {
if (_arg1.backPrimitives == null){
_arg1.backPrimitives = new Set(true);
};
_arg1.backPrimitives[_arg2] = true;
};
} else {
if (!_local10){
if (_arg1.front == null){
_arg1.front = BSPNode.createBSPNode(_arg2);
_arg1.front.parent = _arg1;
} else {
addBSP(_arg1.front, _arg2);
};
} else {
if (!_local9){
if (_arg1.back == null){
_arg1.back = BSPNode.createBSPNode(_arg2);
_arg1.back.parent = _arg1;
} else {
addBSP(_arg1.back, _arg2);
};
} else {
_local13 = PolyPrimitive.createPolyPrimitive();
_local14 = PolyPrimitive.createPolyPrimitive();
_local15 = true;
_local16 = pointOffsets[0];
_local11 = 0;
while (_local11 < _arg2.num) {
_local17 = ((_local11)==(_arg2.num - 1)) ? 0 : (_local11 + 1);
_local18 = pointOffsets[_local17];
if (_local16 > planeOffsetTreshold){
_local13.points.push(_local7[_local11]);
_local13.uvs.push(_arg2.uvs[_local11]);
} else {
if (_local16 < -(planeOffsetTreshold)){
_local14.points.push(_local7[_local11]);
_local14.uvs.push(_arg2.uvs[_local11]);
} else {
_local13.points.push(_local7[_local11]);
_local14.points.push(_local7[_local11]);
_local13.uvs.push(_arg2.uvs[_local11]);
_local14.uvs.push(_arg2.uvs[_local11]);
};
};
if ((((((_local16 > planeOffsetTreshold)) && ((_local18 < -(planeOffsetTreshold))))) || ((((_local16 < -(planeOffsetTreshold))) && ((_local18 > planeOffsetTreshold)))))){
_local19 = (_local16 / (_local16 - _local18));
_local3 = Point3D.interpolate(_local7[_local11], _local7[_local17], _local19);
_local13.points.push(_local3);
_local14.points.push(_local3);
if (_arg2.face.uvMatrix != null){
_local20 = Point.interpolate(_local8[_local17], _local8[_local11], _local19);
} else {
_local20 = null;
};
_local13.uvs.push(_local20);
_local14.uvs.push(_local20);
if (_local15){
_arg2.splitTime1 = _local19;
_local15 = false;
} else {
_arg2.splitTime2 = _local19;
};
};
_local16 = _local18;
_local11++;
};
_local13.num = _local13.points.length;
_local14.num = _local14.points.length;
_local13.mobile = _arg2.mobile;
_local14.mobile = _arg2.mobile;
_local14.face = _arg2.face;
_local13.face = _arg2.face;
_local14.parent = _arg2;
_local13.parent = _arg2;
_local14.sibling = _local13;
_local13.sibling = _local14;
_arg2.back = _local14;
_arg2.front = _local13;
addPrimitives[_local13] = true;
addPrimitives[_local14] = true;
delete addPrimitives[_arg2];
if (_arg1.back == null){
_arg1.back = BSPNode.createBSPNode(_local14);
_arg1.back.parent = _arg1;
} else {
addBSP(_arg1.back, _local14);
};
if (_arg1.front == null){
_arg1.front = BSPNode.createBSPNode(_local13);
_arg1.front.parent = _arg1;
} else {
addBSP(_arg1.front, _local13);
};
};
};
};
};
}
public function get root():Object3D{
return (_root);
}
private function collectCollisionPlanes(_arg1:BSPNode):void{
var _local2:Number;
var _local3:Number;
var _local4:Point3D;
var _local5:Number;
var _local6:Face;
var _local7:*;
var _local8:CollisionPlane;
if (_arg1 != null){
_local2 = ((((collisionSource.x * _arg1.normal.x) + (collisionSource.y * _arg1.normal.y)) + (collisionSource.z * _arg1.normal.z)) - _arg1.offset);
_local3 = ((((collisionDestination.x * _arg1.normal.x) + (collisionDestination.y * _arg1.normal.y)) + (collisionDestination.z * _arg1.normal.z)) - _arg1.offset);
if (_local2 >= 0){
collectCollisionPlanes(_arg1.front);
if (_local3 < collisionRadius){
_local8 = new CollisionPlane();
_local8.node = _arg1;
_local8.infront = true;
_local8.sourceOffset = _local2;
_local8.destinationOffset = _local3;
collisionPlanes.push(_local8);
collectCollisionPlanes(_arg1.back);
};
} else {
collectCollisionPlanes(_arg1.back);
if (-(_local3) < collisionRadius){
if (_arg1.backPrimitives != null){
_local8 = new CollisionPlane();
_local8.node = _arg1;
_local8.infront = false;
_local8.sourceOffset = -(_local2);
_local8.destinationOffset = -(_local3);
collisionPlanes.push(_local8);
};
collectCollisionPlanes(_arg1.front);
};
};
};
}
private function calculateCollisionWithPlane(_arg1:CollisionPlane):void{
var _local2:*;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
collisionPlanePoint.copy(collisionSource);
if (_arg1.sourceOffset <= collisionRadius){
if (_arg1.infront){
collisionPlanePoint.x = (collisionPlanePoint.x - (_arg1.node.normal.x * _arg1.sourceOffset));
collisionPlanePoint.y = (collisionPlanePoint.y - (_arg1.node.normal.y * _arg1.sourceOffset));
collisionPlanePoint.z = (collisionPlanePoint.z - (_arg1.node.normal.z * _arg1.sourceOffset));
} else {
collisionPlanePoint.x = (collisionPlanePoint.x + (_arg1.node.normal.x * _arg1.sourceOffset));
collisionPlanePoint.y = (collisionPlanePoint.y + (_arg1.node.normal.y * _arg1.sourceOffset));
collisionPlanePoint.z = (collisionPlanePoint.z + (_arg1.node.normal.z * _arg1.sourceOffset));
};
} else {
_local3 = ((_arg1.sourceOffset - collisionRadius) / (_arg1.sourceOffset - _arg1.destinationOffset));
collisionPlanePoint.x = (collisionSource.x + (collisionVector.x * _local3));
collisionPlanePoint.y = (collisionSource.y + (collisionVector.y * _local3));
collisionPlanePoint.z = (collisionSource.z + (collisionVector.z * _local3));
if (_arg1.infront){
collisionPlanePoint.x = (collisionPlanePoint.x - (_arg1.node.normal.x * collisionRadius));
collisionPlanePoint.y = (collisionPlanePoint.y - (_arg1.node.normal.y * collisionRadius));
collisionPlanePoint.z = (collisionPlanePoint.z - (_arg1.node.normal.z * collisionRadius));
} else {
collisionPlanePoint.x = (collisionPlanePoint.x + (_arg1.node.normal.x * collisionRadius));
collisionPlanePoint.y = (collisionPlanePoint.y + (_arg1.node.normal.y * collisionRadius));
collisionPlanePoint.z = (collisionPlanePoint.z + (_arg1.node.normal.z * collisionRadius));
};
};
collisionPrimitiveNearestLengthSqr = Number.MAX_VALUE;
collisionPrimitiveNearest = null;
if (_arg1.infront){
if (_arg1.node.primitive != null){
calculateCollisionWithPrimitive(_arg1.node.primitive);
} else {
for (_local2 in _arg1.node.frontPrimitives) {
calculateCollisionWithPrimitive(_local2);
if (collisionPrimitive != null){
break;
};
};
};
} else {
for (_local2 in _arg1.node.backPrimitives) {
calculateCollisionWithPrimitive(_local2);
if (collisionPrimitive != null){
break;
};
};
};
if (collisionPrimitive != null){
if (_arg1.infront){
collisionNormal.x = _arg1.node.normal.x;
collisionNormal.y = _arg1.node.normal.y;
collisionNormal.z = _arg1.node.normal.z;
collisionOffset = _arg1.node.offset;
} else {
collisionNormal.x = -(_arg1.node.normal.x);
collisionNormal.y = -(_arg1.node.normal.y);
collisionNormal.z = -(_arg1.node.normal.z);
collisionOffset = -(_arg1.node.offset);
};
collisionPoint.x = collisionPlanePoint.x;
collisionPoint.y = collisionPlanePoint.y;
collisionPoint.z = collisionPlanePoint.z;
} else {
_local4 = (collisionSource.x - collisionPrimitiveNearestPoint.x);
_local5 = (collisionSource.y - collisionPrimitiveNearestPoint.y);
_local6 = (collisionSource.z - collisionPrimitiveNearestPoint.z);
if ((((_local4 * collisionVector.x) + (_local5 * collisionVector.y)) + (_local6 * collisionVector.z)) <= 0){
_local7 = Math.sqrt((((collisionVector.x * collisionVector.x) + (collisionVector.y * collisionVector.y)) + (collisionVector.z * collisionVector.z)));
_local8 = (-(collisionVector.x) / _local7);
_local9 = (-(collisionVector.y) / _local7);
_local10 = (-(collisionVector.z) / _local7);
_local11 = (((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6));
_local12 = (((_local4 * _local8) + (_local5 * _local9)) + (_local6 * _local10));
_local13 = (((collisionRadius * collisionRadius) - _local11) + (_local12 * _local12));
if (_local13 > 0){
_local14 = (_local12 - Math.sqrt(_local13));
if (_local14 < _local7){
collisionPoint.x = collisionPrimitiveNearestPoint.x;
collisionPoint.y = collisionPrimitiveNearestPoint.y;
collisionPoint.z = collisionPrimitiveNearestPoint.z;
_local15 = Math.sqrt(_local11);
collisionNormal.x = (_local4 / _local15);
collisionNormal.y = (_local5 / _local15);
collisionNormal.z = (_local6 / _local15);
collisionOffset = (((collisionPoint.x * collisionNormal.x) + (collisionPoint.y * collisionNormal.y)) + (collisionPoint.z * collisionNormal.z));
collisionPrimitive = collisionPrimitiveNearest;
};
};
};
};
}
public function calculateCollision(_arg1:Point3D, _arg2:Point3D, _arg3:Number=0):Collision{
var _local4:CollisionPlane;
var _local5:Collision;
collisionSource = _arg1;
collisionVector = _arg2;
collisionDestination.x = (collisionSource.x + collisionVector.x);
collisionDestination.y = (collisionSource.y + collisionVector.y);
collisionDestination.z = (collisionSource.z + collisionVector.z);
collisionRadius = _arg3;
collectCollisionPlanes(bsp);
collisionPlanes.sortOn("sourceOffset", (Array.NUMERIC | Array.DESCENDING));
while (((!(((_local4 = collisionPlanes.pop()) == null))) && ((collisionPrimitive == null)))) {
calculateCollisionWithPlane(_local4);
};
if (collisionPrimitive != null){
_local5 = new Collision();
_local5.face = collisionPrimitive.face;
_local5.normal = collisionNormal.clone();
_local5.point = collisionPoint.clone();
_local5.offset = collisionOffset;
};
collisionSource = null;
collisionVector = null;
collisionPrimitive = null;
var _local6:uint = collisionPlanes.length;
var _local7:uint;
while (_local7 < _local6) {
collisionPlanes.pop();
_local7++;
};
return (_local5);
}
public function calculate():void{
var _local1:Operation;
var _local2:uint;
var _local3:uint;
if (operations[0] != undefined){
_local2 = operations.length;
_local3 = 0;
while (_local3 < _local2) {
_local1 = operations[_local3];
_local1.collectSequels(operations);
_local3++;
};
operations.sortOn(operationSort, operationSortOptions);
_local2 = operations.length;
_local3 = 0;
while (_local3 < _local2) {
_local1 = operations[_local3];
if (_local1.method != null){
_local1.method.call(_local1.object);
};
_local3++;
};
_local3 = 0;
while (_local3 < _local2) {
_local1 = operations.pop();
_local1.queued = false;
_local3++;
};
};
}
private function assembleChildPrimitives(_arg1:Set):void{
var _local2:PolyPrimitive;
while ((_local2 = childPrimitives.take()) != null) {
assemblePrimitive(_local2, _arg1);
};
}
private function calculatePrimitives():void{
var _local1:*;
var _local2:PolyPrimitive;
var _local3:BSPNode;
var _local4:BSPNode;
var _local5:BSPNode;
var _local6:BSPNode;
if (!removePrimitives.isEmpty()){
for (_local1 in removePrimitives) {
removeBSPPrimitive(_local1);
};
if (!removeNodes.isEmpty()){
while ((_local3 = removeNodes.first()) != null) {
_local4 = _local3;
while ((_local3 = _local3.parent) != null) {
if (removeNodes[_local3]){
_local4 = _local3;
};
};
_local5 = _local4.parent;
_local6 = removeBSPNode(_local4);
if (_local6 == dummyNode){
_local6 = null;
};
if (_local5 != null){
if (_local5.front == _local4){
_local5.front = _local6;
} else {
_local5.back = _local6;
};
} else {
bsp = _local6;
};
if (_local6 != null){
_local6.parent = _local5;
};
};
assembleChildPrimitives(addPrimitives);
};
};
if (!addPrimitives.isEmpty()){
addPrimitives.addToArray(addList);
calculateSplits();
addList.sortOn(addSort, addSortOptions);
if (bsp == null){
bsp = BSPNode.createBSPNode(addList.pop());
};
while ((_local2 = addList.pop()) != null) {
addBSP(bsp, _local2);
};
};
for (_local1 in addPrimitives) {
delete removePrimitives[_local1];
};
}
}
}//package com.alternativagame.engine3d
Section 14
//Skin (com.alternativagame.engine3d.Skin)
package com.alternativagame.engine3d {
import flash.display.*;
public class Skin extends Sprite {
var materialOperation:Operation;
var nextSkin:Skin;
var face:Face;
var camera:Camera3D;
private var material:SurfaceMaterial;
var _primitive:PolyPrimitive;
var alphaOperation:Operation;
var redrawOperation:Operation;
var blendModeOperation:Operation;
var gfx:Graphics;
private static var collector:Array = new Array();
public function Skin(){
materialOperation = new Operation("material", this, changeMaterial, Operation.SKIN_DRAW);
redrawOperation = new Operation("redraw", this, redraw, Operation.SKIN_DRAW);
alphaOperation = new Operation("alpha", this, changeAlpha, Operation.SKIN_DRAW);
blendModeOperation = new Operation("blendMode", this, changeBlendMode, Operation.SKIN_DRAW);
gfx = graphics;
super();
}
function draw(_arg1:PolyPrimitive):void{
if (((!((_primitive == _arg1))) || (!((face == _arg1.face))))){
if (_primitive != null){
face.materialOperation.removeSequel(materialOperation);
face.calculateUVOperation.removeSequel(redrawOperation);
if (material != null){
material.alphaOperation.removeSequel(alphaOperation);
material.drawParamsOperation.removeSequel(redrawOperation);
material.clear(this);
};
material = null;
face = null;
};
_primitive = _arg1;
if (_arg1 != null){
face = _arg1.face;
face.materialOperation.addSequel(materialOperation);
face.calculateUVOperation.addSequel(redrawOperation);
material = ((face._surface)!=null) ? face._surface._material : null;
if (material != null){
material.alphaOperation.addSequel(alphaOperation);
material.drawParamsOperation.addSequel(redrawOperation);
material.draw(this);
alpha = material._alpha;
blendMode = material._blendMode;
};
};
} else {
if (((((!((material == null))) && (!(redrawOperation.queued)))) && (!(materialOperation.queued)))){
material.clear(this);
material.draw(this);
};
};
}
private function changeBlendMode():void{
if (material != null){
blendMode = material._blendMode;
};
}
private function changeAlpha():void{
if (material != null){
alpha = material._alpha;
};
}
private function redraw():void{
if (material != null){
material.clear(this);
material.draw(this);
};
}
private function changeMaterial():void{
if (material != null){
material.alphaOperation.removeSequel(alphaOperation);
material.drawParamsOperation.removeSequel(redrawOperation);
material.clear(this);
};
material = (((!((face == null))) && (!((face._surface == null))))) ? face._surface._material : null;
if (material != null){
material.alphaOperation.addSequel(alphaOperation);
material.drawParamsOperation.addSequel(redrawOperation);
material.draw(this);
alpha = material._alpha;
blendMode = material._blendMode;
};
}
static function createSkin(_arg1:Camera3D):Skin{
var _local2:Skin = collector.pop();
if (_local2 == null){
_local2 = new (Skin);
};
_local2.camera = _arg1;
return (_local2);
}
static function destroySkin(_arg1:Skin):void{
collector.push(_arg1);
}
}
}//package com.alternativagame.engine3d
Section 15
//Surface (com.alternativagame.engine3d.Surface)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
public class Surface {
var materialOperation:Operation;
var removeOperation:Operation;
var _material:SurfaceMaterial;
var facesOperation:Operation;
var _mesh:Mesh;
var addOperation:Operation;
var _faces:Set;
public function Surface(){
addOperation = new Operation("add", this);
removeOperation = new Operation("remove", this);
facesOperation = new Operation("faces", this);
materialOperation = new Operation("material", this);
_faces = new Set();
super();
}
public function removeFace(_arg1:Object):void{
var _local2 = (_arg1 is Face);
if (_mesh == null){
throw (new Error("Невозможно удалить грань из поверхности, т.к. поверхность не находится в меше"));
};
if (_arg1 == null){
throw (new Error(("Невозможно удалить из поверхности " + (_local2) ? "null-грань" : "грань с null-идентификатором")));
};
if (_local2){
if (Face(_arg1)._mesh != _mesh){
throw (new Error("Невозможно удалить грань из поверхности, т.к. она не находится в меше"));
};
} else {
if (_mesh._faces[_arg1] == undefined){
throw (new Error("Невозможно удалить грань из поверхности, т.к. грани с таким идентификатором в меше нет"));
};
};
var _local3:Face = (_local2) ? Face(_arg1) : _mesh._faces[_arg1];
if (!_faces.has(_local3)){
throw (new Error("Невозможно удалить грань из поверхности, т.к. она не находится в поверхности"));
};
_faces.remove(_local3);
_local3.removeFromSurface(this);
_mesh.addOperationToScene(facesOperation);
}
function addToMesh(_arg1:Mesh):void{
if (_material != null){
_material.addToMesh(_arg1);
};
_mesh = _arg1;
}
public function set material(_arg1:SurfaceMaterial):void{
if (_material != _arg1){
if (_material != null){
_material.removeFromSurface(this);
if (_mesh != null){
_material.removeFromMesh(_mesh);
if (_mesh._scene != null){
_material.removeFromScene(_mesh._scene);
};
};
};
if (_arg1 != null){
if (_arg1._surface != null){
_arg1._surface.material = null;
};
_arg1.addToSurface(this);
if (_mesh != null){
_arg1.addToMesh(_mesh);
if (_mesh._scene != null){
_arg1.addToScene(_mesh._scene);
};
};
};
_material = _arg1;
if (_mesh != null){
_mesh.addOperationToScene(materialOperation);
};
};
}
function removeFaces():void{
var _local1:*;
var _local2:Face;
for (_local1 in _faces) {
_local2 = _local1;
_faces.remove(_local2);
_local2.removeFromSurface(this);
};
}
public function get id():Object{
return (((_mesh)!=null) ? _mesh.getSurfaceId(this) : null);
}
function removeFromScene(_arg1:Scene3D):void{
_arg1.removeOperation(addOperation);
_arg1.removeOperation(facesOperation);
_arg1.removeOperation(materialOperation);
_arg1.addOperation(removeOperation);
if (_material != null){
_material.removeFromScene(_arg1);
};
}
public function addFace(_arg1:Object):void{
var _local2 = (_arg1 is Face);
if (_mesh == null){
throw (new Error("Невозможно добавить грань в поверхность, т.к. поверхность не находится в меше"));
};
if (_arg1 == null){
throw (new Error(("Невозможно добавить в поверхность " + (_local2) ? "null-грань" : "грань с null-идентификатором")));
};
if (_local2){
if (Face(_arg1)._mesh != _mesh){
throw (new Error("Невозможно добавить грань в поверхность, т.к. она не находится в меше"));
};
} else {
if (_mesh._faces[_arg1] == undefined){
throw (new Error("Невозможно добавить грань в поверхность, т.к. грани с таким идентификатором в меше нет"));
};
};
var _local3:Face = (_local2) ? Face(_arg1) : _mesh._faces[_arg1];
if (_faces.has(_local3)){
throw (new Error("Невозможно добавить грань в поверхность, т.к. она уже в ней"));
};
if (_local3._surface != null){
_local3._surface._faces.remove(_local3);
_local3.removeFromSurface(_local3._surface);
};
_faces.add(_local3);
_local3.addToSurface(this);
_mesh.addOperationToScene(facesOperation);
}
public function get material():SurfaceMaterial{
return (_material);
}
function removeFromMesh(_arg1:Mesh):void{
if (_material != null){
_material.removeFromMesh(_arg1);
};
_mesh = null;
}
public function toString():String{
var _local4:*;
var _local5:Face;
var _local1:uint = _faces.length;
var _local2:String = (("[Surface ID:" + id) + ((_local1)>0) ? " faces:" : "");
var _local3:uint;
for (_local4 in _faces) {
_local5 = _local4;
_local2 = (_local2 + (_local5.id + ((_local3)<(_local1 - 1)) ? ", " : ""));
_local3++;
};
_local2 = (_local2 + "]");
return (_local2);
}
public function get mesh():Mesh{
return (_mesh);
}
function addToScene(_arg1:Scene3D):void{
_arg1.removeOperation(removeOperation);
_arg1.addOperation(addOperation);
if (_material != null){
_material.addToScene(_arg1);
};
}
public function get faces():Set{
return (_faces.clone());
}
}
}//package com.alternativagame.engine3d
Section 16
//SurfaceMaterial (com.alternativagame.engine3d.SurfaceMaterial)
package com.alternativagame.engine3d {
public class SurfaceMaterial extends Material {
var _blendMode:String;// = "normal"
var drawParamsOperation:Operation;
var _alpha:Number;
var alphaOperation:Operation;
var _surface:Surface;
var blendModeOperation:Operation;
public function SurfaceMaterial(_arg1:Number=1, _arg2:String="normal"){
drawParamsOperation = new Operation("drawParams", this);
alphaOperation = new Operation("alpha", this);
blendModeOperation = new Operation("blendMode", this);
super();
_alpha = _arg1;
_blendMode = _arg2;
}
function draw(_arg1:Skin):void{
}
function addToMesh(_arg1:Mesh):void{
}
function clear(_arg1:Skin):void{
_arg1.gfx.clear();
}
function addToSurface(_arg1:Surface):void{
_surface = _arg1;
}
public function get blendMode():String{
return (_blendMode);
}
function removeFromMesh(_arg1:Mesh):void{
}
function removeFromScene(_arg1:Scene3D):void{
_arg1.removeOperation(drawParamsOperation);
}
override public function clone():Material{
return (new SurfaceMaterial(_alpha, _blendMode));
}
public function get alpha():Number{
return (_alpha);
}
public function set blendMode(_arg1:String):void{
if (_blendMode != _arg1){
_blendMode = _arg1;
if (((!((_surface == null))) && (!((_surface._mesh == null))))){
_surface._mesh.addOperationToScene(blendModeOperation);
};
};
}
public function get surface():Surface{
return (_surface);
}
function addToScene(_arg1:Scene3D):void{
}
protected function addDrawParamsOperationToScene():void{
if (((!((_surface == null))) && (!((_surface._mesh == null))))){
_surface._mesh.addOperationToScene(drawParamsOperation);
};
}
public function set alpha(_arg1:Number):void{
if (_alpha != _arg1){
_alpha = _arg1;
if (((!((_surface == null))) && (!((_surface._mesh == null))))){
_surface._mesh.addOperationToScene(alphaOperation);
};
};
}
function removeFromSurface(_arg1:Surface):void{
_surface = null;
}
}
}//package com.alternativagame.engine3d
Section 17
//TextureMaterial (com.alternativagame.engine3d.TextureMaterial)
package com.alternativagame.engine3d {
import flash.display.*;
import com.alternativagame.type.*;
import flash.geom.*;
public class TextureMaterial extends SurfaceMaterial {
var _smooth:Boolean;
var _debug:Boolean;// = false
var _texture:TextureData;
var _repeat:Boolean;
var _precision:Number;
private static var textureMatrix:Matrix = new Matrix();
private static var focusDistance:Number;
private static var points1:Array = new Array();
private static var points2:Array = new Array();
private static var gfx:Graphics;
private static var distortion:Number;
public function TextureMaterial(_arg1:TextureData=null, _arg2:Number=1, _arg3:Boolean=true, _arg4:Boolean=false, _arg5:Number=10, _arg6:String="normal"):void{
super(_arg2, _arg6);
_texture = _arg1;
_repeat = _arg3;
_smooth = _arg4;
_precision = _arg5;
}
override function draw(_arg1:Skin):void{
var _local4:uint;
var _local5:Array;
var _local6:Point3D;
var _local7:uint;
var _local8:Matrix;
var _local9:Array;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:uint;
var _local15:uint;
var _local16:uint;
var _local17:uint;
var _local18:Boolean;
var _local19:TexturePoint;
var _local20:TexturePoint;
var _local21:TexturePoint;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Point;
var _local34:TexturePoint;
var _local2:Face = _arg1.face;
var _local3:Camera3D = _arg1.camera;
if (((!((_local2.uvMatrix == null))) && (!((_texture == null))))){
gfx = _arg1.gfx;
_local4 = _arg1._primitive.num;
_local5 = _arg1._primitive.points;
if (_local3._fov == 0){
_local8 = _local3.calculateTextureMatrix(_local2, texture.width, texture.height);
gfx.beginBitmapFill(_texture.bitmapData, _local8, true, true);
if (_debug){
gfx.lineStyle(1, 0xFFFFFF);
};
_local6 = _local3.calculateCameraCoord(_local5[0]);
gfx.moveTo(_local6.x, _local6.y);
_local7 = 1;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
gfx.lineTo(_local6.x, _local6.y);
_local7++;
};
if (_debug){
_local6 = _local3.calculateCameraCoord(_local5[0]);
gfx.lineTo(_local6.x, _local6.y);
};
} else {
focusDistance = _local3.focusDistance;
distortion = (_local3.focusDistortion * _precision);
_local9 = _arg1._primitive.uvs;
_local7 = 0;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
_local33 = _local9[_local7];
_local34 = points1[_local7];
if (_local34 == null){
_local34 = new TexturePoint(_local6.x, _local6.y, _local6.z, _local33.x, _local33.y);
points1[_local7] = _local34;
} else {
_local34.x = _local6.x;
_local34.y = _local6.y;
_local34.z = _local6.z;
_local34.u = _local33.x;
_local34.v = _local33.y;
};
_local7++;
};
_local10 = -(focusDistance);
_local11 = _local3._view.halfWidth;
_local12 = Math.sqrt(((_local10 * _local10) + (_local11 * _local11)));
_local10 = (_local10 / _local12);
_local11 = (_local11 / _local12);
_local4 = clip(_local4, points1, points2, _local10, 0, _local11);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, -(_local10), 0, _local11);
if (_local4 < 3){
return;
};
_local13 = -(focusDistance);
_local11 = _local3._view.halfHeight;
_local12 = Math.sqrt(((_local13 * _local13) + (_local11 * _local11)));
_local13 = (_local13 / _local12);
_local11 = (_local11 / _local12);
_local4 = clip(_local4, points1, points2, 0, _local13, _local11);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, 0, -(_local13), _local11);
if (_local4 < 3){
return;
};
_local14 = 0;
_local15 = (_local4 - 1);
_local16 = 1;
_local17 = ((_local15)>0) ? (_local15 - 1) : (_local4 - 1);
_local18 = true;
_local19 = points1[_local15];
_local21 = points1[_local14];
_local22 = (_local19.x / _local19.z);
_local23 = (_local19.y / _local19.z);
_local26 = (_local21.x / _local21.z);
_local27 = (_local21.y / _local21.z);
_local28 = (((_local21.x + _local19.x) / (_local21.z + _local19.z)) - (0.5 * (_local26 + _local22)));
_local29 = (((_local21.y + _local19.y) / (_local21.z + _local19.z)) - (0.5 * (_local27 + _local23)));
_local32 = ((_local28 * _local28) + (_local29 * _local29));
while (_local14 != _local15) {
if (_local18){
_local19 = points1[_local14];
_local20 = points1[_local16];
_local21 = points1[_local15];
_local24 = _local22;
_local25 = _local23;
_local22 = _local26;
_local23 = _local27;
_local26 = _local24;
_local27 = _local25;
_local24 = (_local20.x / _local20.z);
_local25 = (_local20.y / _local20.z);
_local28 = (((_local20.x + _local21.x) / (_local20.z + _local21.z)) - (0.5 * (_local24 + _local26)));
_local29 = (((_local20.y + _local21.y) / (_local20.z + _local21.z)) - (0.5 * (_local25 + _local27)));
_local31 = ((_local28 * _local28) + (_local29 * _local29));
if ((((_local24 - _local22) * (_local27 - _local23)) - ((_local25 - _local23) * (_local26 - _local22))) < -(_local3.focusDistortion)){
_local28 = (((_local19.x + _local20.x) / (_local19.z + _local20.z)) - (0.5 * (_local22 + _local24)));
_local29 = (((_local19.y + _local20.y) / (_local19.z + _local20.z)) - (0.5 * (_local23 + _local25)));
_local30 = ((_local28 * _local28) + (_local29 * _local29));
bisection(_local19.x, _local19.y, _local19.z, _local19.u, _local19.v, _local20.x, _local20.y, _local20.z, _local20.u, _local20.v, _local21.x, _local21.y, _local21.z, _local21.u, _local21.v, _local30, _local31, _local32);
};
_local14 = _local16;
_local16 = ((_local14)<(_local4 - 1)) ? (_local14 + 1) : 0;
} else {
_local19 = points1[_local17];
_local20 = points1[_local15];
_local21 = points1[_local14];
_local22 = _local24;
_local23 = _local25;
_local24 = _local26;
_local25 = _local27;
_local26 = _local22;
_local27 = _local23;
_local22 = (_local19.x / _local19.z);
_local23 = (_local19.y / _local19.z);
_local28 = (((_local21.x + _local19.x) / (_local21.z + _local19.z)) - (0.5 * (_local26 + _local22)));
_local29 = (((_local21.y + _local19.y) / (_local21.z + _local19.z)) - (0.5 * (_local27 + _local23)));
_local32 = ((_local28 * _local28) + (_local29 * _local29));
if ((((_local24 - _local22) * (_local27 - _local23)) - ((_local25 - _local23) * (_local26 - _local22))) < -(_local3.focusDistortion)){
_local28 = (((_local19.x + _local20.x) / (_local19.z + _local20.z)) - (0.5 * (_local22 + _local24)));
_local29 = (((_local19.y + _local20.y) / (_local19.z + _local20.z)) - (0.5 * (_local23 + _local25)));
_local30 = ((_local28 * _local28) + (_local29 * _local29));
bisection(_local19.x, _local19.y, _local19.z, _local19.u, _local19.v, _local20.x, _local20.y, _local20.z, _local20.u, _local20.v, _local21.x, _local21.y, _local21.z, _local21.u, _local21.v, _local30, _local31, _local32);
};
_local15 = _local17;
_local17 = ((_local15)>0) ? (_local15 - 1) : (_local4 - 1);
};
_local18 = !(_local18);
};
};
} else {
_local3.removeTextureMatrix(_local2);
};
}
private function bisection(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number, _arg13:Number, _arg14:Number, _arg15:Number, _arg16:Number, _arg17:Number, _arg18:Number):void{
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
if (_arg16 > _arg17){
if (_arg16 > _arg18){
if (_arg16 > distortion){
_local19 = (0.5 * (_arg1 + _arg6));
_local20 = (0.5 * (_arg2 + _arg7));
_local21 = (0.5 * (_arg3 + _arg8));
_local22 = (0.5 * (_arg4 + _arg9));
_local23 = (0.5 * (_arg5 + _arg10));
_local24 = (((_arg1 + _local19) / (_arg3 + _local21)) - (0.5 * ((_arg1 / _arg3) + (_local19 / _local21))));
_local25 = (((_arg2 + _local20) / (_arg3 + _local21)) - (0.5 * ((_arg2 / _arg3) + (_local20 / _local21))));
_local26 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg6 + _local19) / (_arg8 + _local21)) - (0.5 * ((_arg6 / _arg8) + (_local19 / _local21))));
_local25 = (((_arg7 + _local20) / (_arg8 + _local21)) - (0.5 * ((_arg7 / _arg8) + (_local20 / _local21))));
_local27 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg11 + _local19) / (_arg13 + _local21)) - (0.5 * ((_arg11 / _arg13) + (_local19 / _local21))));
_local25 = (((_arg12 + _local20) / (_arg13 + _local21)) - (0.5 * ((_arg12 / _arg13) + (_local20 / _local21))));
_local28 = ((_local24 * _local24) + (_local25 * _local25));
bisection(_local19, _local20, _local21, _local22, _local23, _arg11, _arg12, _arg13, _arg14, _arg15, _arg1, _arg2, _arg3, _arg4, _arg5, _local28, _arg18, _local26);
bisection(_local19, _local20, _local21, _local22, _local23, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _local27, _arg17, _local28);
return;
};
} else {
if (_arg18 > distortion){
_local19 = (0.5 * (_arg11 + _arg1));
_local20 = (0.5 * (_arg12 + _arg2));
_local21 = (0.5 * (_arg13 + _arg3));
_local22 = (0.5 * (_arg14 + _arg4));
_local23 = (0.5 * (_arg15 + _arg5));
_local24 = (((_arg1 + _local19) / (_arg3 + _local21)) - (0.5 * ((_arg1 / _arg3) + (_local19 / _local21))));
_local25 = (((_arg2 + _local20) / (_arg3 + _local21)) - (0.5 * ((_arg2 / _arg3) + (_local20 / _local21))));
_local26 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg6 + _local19) / (_arg8 + _local21)) - (0.5 * ((_arg6 / _arg8) + (_local19 / _local21))));
_local25 = (((_arg7 + _local20) / (_arg8 + _local21)) - (0.5 * ((_arg7 / _arg8) + (_local20 / _local21))));
_local27 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg11 + _local19) / (_arg13 + _local21)) - (0.5 * ((_arg11 / _arg13) + (_local19 / _local21))));
_local25 = (((_arg12 + _local20) / (_arg13 + _local21)) - (0.5 * ((_arg12 / _arg13) + (_local20 / _local21))));
_local28 = ((_local24 * _local24) + (_local25 * _local25));
bisection(_local19, _local20, _local21, _local22, _local23, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _local27, _arg17, _local28);
bisection(_local19, _local20, _local21, _local22, _local23, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _local26, _arg16, _local27);
return;
};
};
} else {
if (_arg17 > _arg18){
if (_arg17 > distortion){
_local19 = (0.5 * (_arg6 + _arg11));
_local20 = (0.5 * (_arg7 + _arg12));
_local21 = (0.5 * (_arg8 + _arg13));
_local22 = (0.5 * (_arg9 + _arg14));
_local23 = (0.5 * (_arg10 + _arg15));
_local24 = (((_arg1 + _local19) / (_arg3 + _local21)) - (0.5 * ((_arg1 / _arg3) + (_local19 / _local21))));
_local25 = (((_arg2 + _local20) / (_arg3 + _local21)) - (0.5 * ((_arg2 / _arg3) + (_local20 / _local21))));
_local26 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg6 + _local19) / (_arg8 + _local21)) - (0.5 * ((_arg6 / _arg8) + (_local19 / _local21))));
_local25 = (((_arg7 + _local20) / (_arg8 + _local21)) - (0.5 * ((_arg7 / _arg8) + (_local20 / _local21))));
_local27 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg11 + _local19) / (_arg13 + _local21)) - (0.5 * ((_arg11 / _arg13) + (_local19 / _local21))));
_local25 = (((_arg12 + _local20) / (_arg13 + _local21)) - (0.5 * ((_arg12 / _arg13) + (_local20 / _local21))));
_local28 = ((_local24 * _local24) + (_local25 * _local25));
bisection(_local19, _local20, _local21, _local22, _local23, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _local26, _arg16, _local27);
bisection(_local19, _local20, _local21, _local22, _local23, _arg11, _arg12, _arg13, _arg14, _arg15, _arg1, _arg2, _arg3, _arg4, _arg5, _local28, _arg18, _local26);
return;
};
} else {
if (_arg18 > distortion){
_local19 = (0.5 * (_arg11 + _arg1));
_local20 = (0.5 * (_arg12 + _arg2));
_local21 = (0.5 * (_arg13 + _arg3));
_local22 = (0.5 * (_arg14 + _arg4));
_local23 = (0.5 * (_arg15 + _arg5));
_local24 = (((_arg1 + _local19) / (_arg3 + _local21)) - (0.5 * ((_arg1 / _arg3) + (_local19 / _local21))));
_local25 = (((_arg2 + _local20) / (_arg3 + _local21)) - (0.5 * ((_arg2 / _arg3) + (_local20 / _local21))));
_local26 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg6 + _local19) / (_arg8 + _local21)) - (0.5 * ((_arg6 / _arg8) + (_local19 / _local21))));
_local25 = (((_arg7 + _local20) / (_arg8 + _local21)) - (0.5 * ((_arg7 / _arg8) + (_local20 / _local21))));
_local27 = ((_local24 * _local24) + (_local25 * _local25));
_local24 = (((_arg11 + _local19) / (_arg13 + _local21)) - (0.5 * ((_arg11 / _arg13) + (_local19 / _local21))));
_local25 = (((_arg12 + _local20) / (_arg13 + _local21)) - (0.5 * ((_arg12 / _arg13) + (_local20 / _local21))));
_local28 = ((_local24 * _local24) + (_local25 * _local25));
bisection(_local19, _local20, _local21, _local22, _local23, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _local27, _arg17, _local28);
bisection(_local19, _local20, _local21, _local22, _local23, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _local26, _arg16, _local27);
return;
};
};
};
var _local29:Number = (focusDistance / _arg3);
var _local30:Number = (focusDistance / _arg8);
var _local31:Number = (focusDistance / _arg13);
drawTriangle((_arg1 * _local29), (_arg2 * _local29), _arg4, _arg5, (_arg6 * _local30), (_arg7 * _local30), _arg9, _arg10, (_arg11 * _local31), (_arg12 * _local31), _arg14, _arg15);
}
private function clip(_arg1:uint, _arg2:Array, _arg3:Array, _arg4:Number, _arg5:Number, _arg6:Number):uint{
var _local7:Number;
var _local9:TexturePoint;
var _local13:TexturePoint;
var _local14:Number;
var _local8:uint;
var _local10:TexturePoint = _arg2[(_arg1 - 1)];
var _local11:Number = (((_arg4 * _local10.x) + (_arg5 * _local10.y)) + (_arg6 * _local10.z));
var _local12:uint;
while (_local12 < _arg1) {
_local13 = _arg2[_local12];
_local14 = (((_arg4 * _local13.x) + (_arg5 * _local13.y)) + (_arg6 * _local13.z));
if (_local14 > 0){
if (_local11 <= 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new TexturePoint((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)), (_local13.u - ((_local13.u - _local10.u) * _local7)), (_local13.v - ((_local13.v - _local10.v) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
_local9.u = (_local13.u - ((_local13.u - _local10.u) * _local7));
_local9.v = (_local13.v - ((_local13.v - _local10.v) * _local7));
};
_local8++;
};
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new TexturePoint(_local13.x, _local13.y, _local13.z, _local13.u, _local13.v);
_arg3[_local8] = _local9;
} else {
_local9.x = _local13.x;
_local9.y = _local13.y;
_local9.z = _local13.z;
_local9.u = _local13.u;
_local9.v = _local13.v;
};
_local8++;
} else {
if (_local11 > 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new TexturePoint((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)), (_local13.u - ((_local13.u - _local10.u) * _local7)), (_local13.v - ((_local13.v - _local10.v) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
_local9.u = (_local13.u - ((_local13.u - _local10.u) * _local7));
_local9.v = (_local13.v - ((_local13.v - _local10.v) * _local7));
};
_local8++;
};
};
_local11 = _local14;
_local10 = _local13;
_local12++;
};
return (_local8);
}
public function get debug():Boolean{
return (_debug);
}
public function get texture():TextureData{
return (_texture);
}
public function set smooth(_arg1:Boolean):void{
if (_smooth != _arg1){
_smooth = _arg1;
addDrawParamsOperationToScene();
};
}
override public function clone():Material{
return (new TextureMaterial(_texture, _alpha, _repeat, _smooth, _precision, _blendMode));
}
public function get repeat():Boolean{
return (_repeat);
}
public function set debug(_arg1:Boolean):void{
if (_debug != _arg1){
_debug = _arg1;
addDrawParamsOperationToScene();
};
}
private function drawTriangle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number):void{
var _local13:Number = (_arg5 - _arg1);
var _local14:Number = (_arg6 - _arg2);
var _local15:Number = (_arg9 - _arg1);
var _local16:Number = (_arg10 - _arg2);
var _local17:Number = (_arg7 - _arg3);
var _local18:Number = (_arg8 - _arg4);
var _local19:Number = (_arg11 - _arg3);
var _local20:Number = (_arg12 - _arg4);
var _local21:Number = ((_local17 * _local20) - (_local18 * _local19));
var _local22:Number = _texture.width;
var _local23:Number = _texture.height;
textureMatrix.a = (((_local20 * _local13) - (_local18 * _local15)) / _local21);
textureMatrix.b = (((_local20 * _local14) - (_local18 * _local16)) / _local21);
textureMatrix.c = (((_local19 * _local13) - (_local17 * _local15)) / _local21);
textureMatrix.d = (((_local19 * _local14) - (_local17 * _local16)) / _local21);
textureMatrix.tx = ((((_arg4 - 1) * textureMatrix.c) - (_arg3 * textureMatrix.a)) + _arg1);
textureMatrix.ty = ((((_arg4 - 1) * textureMatrix.d) - (_arg3 * textureMatrix.b)) + _arg2);
textureMatrix.a = (textureMatrix.a / _local22);
textureMatrix.b = (textureMatrix.b / _local22);
textureMatrix.c = (textureMatrix.c / _local23);
textureMatrix.d = (textureMatrix.d / _local23);
gfx.beginBitmapFill(_texture.bitmapData, textureMatrix, _repeat, _smooth);
if (_debug){
gfx.lineStyle(1, 0xFFFFFF);
};
gfx.moveTo(_arg1, _arg2);
gfx.lineTo(_arg5, _arg6);
gfx.lineTo(_arg9, _arg10);
if (_debug){
gfx.lineTo(_arg1, _arg2);
};
}
public function get smooth():Boolean{
return (_smooth);
}
public function set texture(_arg1:TextureData):void{
if (_texture != _arg1){
_texture = _arg1;
addDrawParamsOperationToScene();
};
}
public function set precision(_arg1:Number):void{
_arg1 = ((_arg1)<1) ? 1 : _arg1;
if (_precision != _arg1){
_precision = _arg1;
addDrawParamsOperationToScene();
};
}
public function set repeat(_arg1:Boolean):void{
if (_repeat != _arg1){
_repeat = _arg1;
addDrawParamsOperationToScene();
};
}
public function get precision():Number{
return (_precision);
}
}
}//package com.alternativagame.engine3d
class TexturePoint {
public var u:Number;
public var v:Number;
public var x:Number;
public var y:Number;
public var z:Number;
private function TexturePoint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=0, _arg5:Number=0){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
this.u = _arg4;
this.v = _arg5;
}
}
Section 18
//Vertex (com.alternativagame.engine3d.Vertex)
package com.alternativagame.engine3d {
import com.alternativagame.type.*;
public final class Vertex {
var calculateGlobalCoordsOperation:Operation;
var removeOperation:Operation;
var _mesh:Mesh;
var addOperation:Operation;
var globalCoords:Point3D;
var coordsOperation:Operation;
var _faces:Set;
var _coords:Point3D;
public function Vertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
addOperation = new Operation("add", this);
removeOperation = new Operation("remove", this);
coordsOperation = new Operation("coords", this);
calculateGlobalCoordsOperation = new Operation("calculateGlobalCoords", this, calculateGlobalCoords, Operation.VERTEX_TRANSFORMATION);
_faces = new Set();
globalCoords = new Point3D();
super();
_coords = new Point3D(_arg1, _arg2, _arg3);
addOperation.addSequel(calculateGlobalCoordsOperation);
coordsOperation.addSequel(calculateGlobalCoordsOperation);
}
public function get z():Number{
return (_coords.z);
}
function addToFace(_arg1:Face):void{
coordsOperation.addSequel(_arg1.transformOperation);
coordsOperation.addSequel(_arg1.uvOperation);
_faces.add(_arg1);
}
function addToMesh(_arg1:Mesh):void{
_arg1.moveOperation.addSequel(calculateGlobalCoordsOperation);
_arg1.transformOperation.addSequel(calculateGlobalCoordsOperation);
_mesh = _arg1;
}
function removeFromFace(_arg1:Face):void{
coordsOperation.removeSequel(_arg1.transformOperation);
coordsOperation.removeSequel(_arg1.uvOperation);
_faces.remove(_arg1);
}
public function get id():Object{
return (((_mesh)!=null) ? _mesh.getVertexId(this) : null);
}
public function get coords():Point3D{
return (_coords.clone());
}
function removeFromMesh(_arg1:Mesh):void{
var _local2:*;
var _local3:Face;
_arg1.moveOperation.removeSequel(calculateGlobalCoordsOperation);
_arg1.transformOperation.removeSequel(calculateGlobalCoordsOperation);
for (_local2 in _faces) {
_local3 = _local2;
_arg1.removeFace(_local3);
};
_mesh = null;
}
function removeFromScene(_arg1:Scene3D):void{
_arg1.removeOperation(addOperation);
_arg1.removeOperation(coordsOperation);
_arg1.addOperation(removeOperation);
}
private function calculateGlobalCoords():void{
globalCoords.copy(_coords);
globalCoords.transform(_mesh.transformMatrix);
}
public function transform(_arg1:Matrix3D):void{
_coords.transform(_arg1);
if (_mesh != null){
_mesh.addOperationToScene(coordsOperation);
};
}
public function get mesh():Mesh{
return (_mesh);
}
public function set x(_arg1:Number):void{
if (_coords.x != _arg1){
_coords.x = _arg1;
if (_mesh != null){
_mesh.addOperationToScene(coordsOperation);
};
};
}
public function set y(_arg1:Number):void{
if (_coords.y != _arg1){
_coords.y = _arg1;
if (_mesh != null){
_mesh.addOperationToScene(coordsOperation);
};
};
}
public function set z(_arg1:Number):void{
if (_coords.z != _arg1){
_coords.z = _arg1;
if (_mesh != null){
_mesh.addOperationToScene(coordsOperation);
};
};
}
public function get faces():Set{
return (_faces.clone());
}
public function get x():Number{
return (_coords.x);
}
public function get y():Number{
return (_coords.y);
}
public function toString():String{
return ((((((((("[Vertex ID:" + id) + " ") + _coords.x.toFixed(2)) + ", ") + _coords.y.toFixed(2)) + ", ") + _coords.z.toFixed(2)) + "]"));
}
public function set coords(_arg1:Point3D):void{
if (!_coords.equals(_arg1)){
_coords.copy(_arg1);
if (_mesh != null){
_mesh.addOperationToScene(coordsOperation);
};
};
}
function addToScene(_arg1:Scene3D):void{
_arg1.removeOperation(removeOperation);
_arg1.addOperation(addOperation);
}
}
}//package com.alternativagame.engine3d
Section 19
//View (com.alternativagame.engine3d.View)
package com.alternativagame.engine3d {
import flash.display.*;
import flash.geom.*;
public class View extends Sprite {
var halfHeight:Number;
var _height:Number;
var _width:Number;
private var _background:uint;// = 0
private var _crop:Boolean;// = false
var halfWidth:Number;
var canvas:Sprite;
public function View(_arg1:Number=0, _arg2:Number=0){
canvas = new Sprite();
canvas.mouseEnabled = false;
canvas.mouseChildren = false;
canvas.tabEnabled = false;
canvas.tabChildren = false;
addChild(canvas);
this.width = _arg1;
this.height = _arg2;
}
public function set crop(_arg1:Boolean):void{
_crop = _arg1;
if (_arg1){
scrollRect = new Rectangle(0, 0, width, height);
} else {
scrollRect = null;
};
}
override public function get width():Number{
return (_width);
}
override public function get height():Number{
return (_height);
}
public function get crop():Boolean{
return (_crop);
}
override public function set width(_arg1:Number):void{
if (_width != _arg1){
_width = _arg1;
halfWidth = (_arg1 * 0.5);
canvas.x = halfWidth;
if (crop){
scrollRect = new Rectangle(0, 0, _width, height);
};
};
}
override public function set height(_arg1:Number):void{
if (_height != _arg1){
_height = _arg1;
halfHeight = (_arg1 * 0.5);
canvas.y = halfHeight;
if (crop){
scrollRect = new Rectangle(0, 0, width, _height);
};
};
}
}
}//package com.alternativagame.engine3d
Section 20
//WireMaterial (com.alternativagame.engine3d.WireMaterial)
package com.alternativagame.engine3d {
import flash.display.*;
import com.alternativagame.type.*;
public class WireMaterial extends SurfaceMaterial {
var _color:uint;
var _thickness:Number;
private var currentSkin:Skin;
private static var gfx:Graphics;
private static var focusDistance:Number;
private static var points1:Array = new Array();
private static var points2:Array = new Array();
public function WireMaterial(_arg1:Number=0, _arg2:uint=0x7F7F7F, _arg3:Number=1, _arg4:String="normal"):void{
super(_arg3, _arg4);
_color = _arg2;
_thickness = _arg1;
}
public function get color():uint{
return (_color);
}
public function set color(_arg1:uint):void{
if (_color != _arg1){
_color = _arg1;
addDrawParamsOperationToScene();
};
}
override function draw(_arg1:Skin):void{
var _local6:Point3D;
var _local7:uint;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Point3D;
gfx = _arg1.gfx;
var _local2:Face = _arg1.face;
var _local3:Camera3D = _arg1.camera;
var _local4:uint = _arg1._primitive.num;
var _local5:Array = _arg1._primitive.points;
if (_local3._fov == 0){
gfx.lineStyle(_thickness, _color);
_local6 = _local3.calculateCameraCoord(_local5[(_local4 - 1)]);
gfx.moveTo(_local6.x, _local6.y);
_local7 = 0;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
gfx.lineTo(_local6.x, _local6.y);
_local7++;
};
} else {
focusDistance = _local3.focusDistance;
_local7 = 0;
while (_local7 < _local4) {
_local6 = _local3.calculateCameraCoord(_local5[_local7]);
_local13 = points1[_local7];
if (_local13 == null){
_local13 = _local6.clone();
points1[_local7] = _local13;
} else {
_local13.copy(_local6);
};
_local7++;
};
_local8 = -(focusDistance);
_local9 = _local3._view.halfWidth;
_local10 = Math.sqrt(((_local8 * _local8) + (_local9 * _local9)));
_local8 = (_local8 / _local10);
_local9 = (_local9 / _local10);
_local4 = clip(_local4, points1, points2, _local8, 0, _local9);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, -(_local8), 0, _local9);
if (_local4 < 3){
return;
};
_local11 = -(focusDistance);
_local9 = _local3._view.halfHeight;
_local10 = Math.sqrt(((_local11 * _local11) + (_local9 * _local9)));
_local11 = (_local11 / _local10);
_local9 = (_local9 / _local10);
_local4 = clip(_local4, points1, points2, 0, _local11, _local9);
if (_local4 < 3){
return;
};
_local4 = clip(_local4, points2, points1, 0, -(_local11), _local9);
if (_local4 < 3){
return;
};
gfx.lineStyle(_thickness, _color);
_local6 = points1[(_local4 - 1)];
_local12 = (focusDistance / _local6.z);
gfx.moveTo((_local6.x * _local12), (_local6.y * _local12));
_local7 = 0;
while (_local7 < _local4) {
_local6 = points1[_local7];
_local12 = (focusDistance / _local6.z);
gfx.lineTo((_local6.x * _local12), (_local6.y * _local12));
_local7++;
};
};
}
public function set thickness(_arg1:Number):void{
if (_thickness != _arg1){
_thickness = _arg1;
addDrawParamsOperationToScene();
};
}
private function clip(_arg1:uint, _arg2:Array, _arg3:Array, _arg4:Number, _arg5:Number, _arg6:Number):uint{
var _local7:Number;
var _local9:Point3D;
var _local13:Point3D;
var _local14:Number;
var _local8:uint;
var _local10:Point3D = _arg2[(_arg1 - 1)];
var _local11:Number = (((_arg4 * _local10.x) + (_arg5 * _local10.y)) + (_arg6 * _local10.z));
var _local12:uint;
while (_local12 < _arg1) {
_local13 = _arg2[_local12];
_local14 = (((_arg4 * _local13.x) + (_arg5 * _local13.y)) + (_arg6 * _local13.z));
if (_local14 > 0){
if (_local11 <= 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new Point3D((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
};
_local8++;
};
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = _local13.clone();
_arg3[_local8] = _local9;
} else {
_local9.copy(_local13);
};
_local8++;
} else {
if (_local11 > 0){
_local7 = (_local14 / (_local14 - _local11));
_local9 = _arg3[_local8];
if (_local9 == null){
_local9 = new Point3D((_local13.x - ((_local13.x - _local10.x) * _local7)), (_local13.y - ((_local13.y - _local10.y) * _local7)), (_local13.z - ((_local13.z - _local10.z) * _local7)));
_arg3[_local8] = _local9;
} else {
_local9.x = (_local13.x - ((_local13.x - _local10.x) * _local7));
_local9.y = (_local13.y - ((_local13.y - _local10.y) * _local7));
_local9.z = (_local13.z - ((_local13.z - _local10.z) * _local7));
};
_local8++;
};
};
_local11 = _local14;
_local10 = _local13;
_local12++;
};
return (_local8);
}
public function get thickness():Number{
return (_thickness);
}
override public function clone():Material{
return (new WireMaterial(_thickness, _color, _alpha, _blendMode));
}
}
}//package com.alternativagame.engine3d
Section 21
//Matrix3D (com.alternativagame.type.Matrix3D)
package com.alternativagame.type {
public final class Matrix3D {
public var a:Number;
public var b:Number;
public var c:Number;
public var d:Number;
public var e:Number;
public var f:Number;
public var g:Number;
public var h:Number;
public var i:Number;
public var j:Number;
public var k:Number;
public var l:Number;
public function Matrix3D(_arg1:Number=1, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=1, _arg7:Number=0, _arg8:Number=0, _arg9:Number=0, _arg10:Number=0, _arg11:Number=1, _arg12:Number=0){
this.a = _arg1;
this.b = _arg2;
this.c = _arg3;
this.d = _arg4;
this.e = _arg5;
this.f = _arg6;
this.g = _arg7;
this.h = _arg8;
this.i = _arg9;
this.j = _arg10;
this.k = _arg11;
this.l = _arg12;
}
public function clone():Matrix3D{
return (new Matrix3D(a, b, c, d, e, f, g, h, i, j, k, l));
}
public function toString():String{
return (((((((((((((((((((((((("Matrix:\r" + a.toFixed(3)) + "\t") + b.toFixed(3)) + "\t") + c.toFixed(3)) + "\t") + d.toFixed(3)) + "\r") + e.toFixed(3)) + "\t") + f.toFixed(3)) + "\t") + g.toFixed(3)) + "\t") + h.toFixed(3)) + "\r") + i.toFixed(3)) + "\t") + j.toFixed(3)) + "\t") + k.toFixed(3)) + "\t") + l.toFixed(3)));
}
public function scale(_arg1:Number, _arg2:Number, _arg3:Number):void{
a = (a * _arg1);
b = (b * _arg1);
c = (c * _arg1);
d = (d * _arg1);
e = (e * _arg2);
f = (f * _arg2);
g = (g * _arg2);
h = (h * _arg2);
i = (i * _arg3);
j = (j * _arg3);
k = (k * _arg3);
l = (l * _arg3);
}
public function offset(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):void{
d = _arg1;
h = _arg2;
l = _arg3;
}
public function translate(_arg1:Number, _arg2:Number, _arg3:Number):void{
d = (d + _arg1);
h = (h + _arg2);
l = (l + _arg3);
}
public function equals(_arg1:Matrix3D, _arg2:Number=0):Boolean{
var _local3:Number = (a - _arg1.a);
var _local4:Number = (b - _arg1.b);
var _local5:Number = (c - _arg1.c);
var _local6:Number = (d - _arg1.d);
var _local7:Number = (e - _arg1.e);
var _local8:Number = (f - _arg1.f);
var _local9:Number = (g - _arg1.g);
var _local10:Number = (h - _arg1.h);
var _local11:Number = (i - _arg1.i);
var _local12:Number = (j - _arg1.j);
var _local13:Number = (k - _arg1.k);
var _local14:Number = (l - _arg1.l);
_local3 = ((_local3)<0) ? -(_local3) : _local3;
_local4 = ((_local4)<0) ? -(_local4) : _local4;
_local5 = ((_local5)<0) ? -(_local5) : _local5;
_local6 = ((_local6)<0) ? -(_local6) : _local6;
_local7 = ((_local7)<0) ? -(_local7) : _local7;
_local8 = ((_local8)<0) ? -(_local8) : _local8;
_local9 = ((_local9)<0) ? -(_local9) : _local9;
_local10 = ((_local10)<0) ? -(_local10) : _local10;
_local11 = ((_local11)<0) ? -(_local11) : _local11;
_local12 = ((_local12)<0) ? -(_local12) : _local12;
_local13 = ((_local13)<0) ? -(_local13) : _local13;
_local14 = ((_local14)<0) ? -(_local14) : _local14;
return ((((((((((((((((((((((((_local3 <= _arg2)) && ((_local4 <= _arg2)))) && ((_local5 <= _arg2)))) && ((_local6 <= _arg2)))) && ((_local7 <= _arg2)))) && ((_local8 <= _arg2)))) && ((_local9 <= _arg2)))) && ((_local10 <= _arg2)))) && ((_local11 <= _arg2)))) && ((_local12 <= _arg2)))) && ((_local13 <= _arg2)))) && ((_local14 <= _arg2))));
}
public function toIdentity():void{
a = 1;
b = 0;
c = 0;
d = 0;
e = 0;
f = 1;
g = 0;
h = 0;
i = 0;
j = 0;
k = 1;
l = 0;
}
public function convertToScreen():void{
var _local1:Number = e;
var _local2:Number = f;
var _local3:Number = g;
var _local4:Number = h;
e = -(i);
f = -(j);
g = -(k);
h = -(l);
i = -(_local1);
j = -(_local2);
k = -(_local3);
l = -(_local4);
}
public function rotate(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number = Math.cos(_arg1);
var _local5:Number = Math.sin(_arg1);
var _local6:Number = Math.cos(_arg2);
var _local7:Number = Math.sin(_arg2);
var _local8:Number = Math.cos(_arg3);
var _local9:Number = Math.sin(_arg3);
var _local10:Number = (_local8 * _local7);
var _local11:Number = (_local9 * _local7);
var _local12:Number = (_local8 * _local6);
var _local13:Number = ((_local10 * _local5) - (_local9 * _local4));
var _local14:Number = ((_local10 * _local4) + (_local9 * _local5));
var _local15:Number = (_local9 * _local6);
var _local16:Number = ((_local11 * _local5) + (_local8 * _local4));
var _local17:Number = ((_local11 * _local4) - (_local8 * _local5));
var _local18:Number = -(_local7);
var _local19:Number = (_local6 * _local5);
var _local20:Number = (_local6 * _local4);
var _local21:Number = a;
var _local22:Number = b;
var _local23:Number = c;
var _local24:Number = d;
var _local25:Number = e;
var _local26:Number = f;
var _local27:Number = g;
var _local28:Number = h;
var _local29:Number = i;
var _local30:Number = j;
var _local31:Number = k;
var _local32:Number = l;
a = (((_local12 * _local21) + (_local13 * _local25)) + (_local14 * _local29));
b = (((_local12 * _local22) + (_local13 * _local26)) + (_local14 * _local30));
c = (((_local12 * _local23) + (_local13 * _local27)) + (_local14 * _local31));
d = (((_local12 * _local24) + (_local13 * _local28)) + (_local14 * _local32));
e = (((_local15 * _local21) + (_local16 * _local25)) + (_local17 * _local29));
f = (((_local15 * _local22) + (_local16 * _local26)) + (_local17 * _local30));
g = (((_local15 * _local23) + (_local16 * _local27)) + (_local17 * _local31));
h = (((_local15 * _local24) + (_local16 * _local28)) + (_local17 * _local32));
i = (((_local18 * _local21) + (_local19 * _local25)) + (_local20 * _local29));
j = (((_local18 * _local22) + (_local19 * _local26)) + (_local20 * _local30));
k = (((_local18 * _local23) + (_local19 * _local27)) + (_local20 * _local31));
l = (((_local18 * _local24) + (_local19 * _local28)) + (_local20 * _local32));
}
public function inverseTransform(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1, _arg8:Number=1, _arg9:Number=1):void{
var _local10:Number = Math.cos(-(_arg4));
var _local11:Number = Math.sin(-(_arg4));
var _local12:Number = Math.cos(-(_arg5));
var _local13:Number = Math.sin(-(_arg5));
var _local14:Number = Math.cos(-(_arg6));
var _local15:Number = Math.sin(-(_arg6));
var _local16:Number = (_local11 * _local13);
var _local17:Number = (1 / _arg7);
var _local18:Number = (1 / _arg8);
var _local19:Number = (1 / _arg9);
var _local20:Number = (_local12 * _local17);
var _local21:Number = (_local10 * _local18);
var _local22:Number = (_local11 * _local19);
var _local23:Number = (_local10 * _local19);
var _local24:Number = (_local14 * _local20);
var _local25:Number = (-(_local15) * _local20);
var _local26:Number = (_local13 * _local17);
var _local27:Number = -((((_local24 * _arg1) + (_local25 * _arg2)) + (_local26 * _arg3)));
var _local28:Number = ((_local15 * _local21) + ((_local16 * _local14) * _local18));
var _local29:Number = ((_local14 * _local21) - ((_local16 * _local15) * _local18));
var _local30:Number = ((-(_local11) * _local12) * _local18);
var _local31:Number = -((((_local28 * _arg1) + (_local29 * _arg2)) + (_local30 * _arg3)));
var _local32:Number = ((_local15 * _local22) - ((_local14 * _local13) * _local23));
var _local33:Number = ((_local14 * _local22) + ((_local13 * _local15) * _local23));
var _local34:Number = (_local12 * _local23);
var _local35:Number = -((((_local32 * _arg1) + (_local33 * _arg2)) + (_local34 * _arg3)));
var _local36:Number = a;
var _local37:Number = b;
var _local38:Number = c;
var _local39:Number = d;
var _local40:Number = e;
var _local41:Number = f;
var _local42:Number = g;
var _local43:Number = h;
var _local44:Number = i;
var _local45:Number = j;
var _local46:Number = k;
var _local47:Number = l;
a = (((_local24 * _local36) + (_local25 * _local40)) + (_local26 * _local44));
b = (((_local24 * _local37) + (_local25 * _local41)) + (_local26 * _local45));
c = (((_local24 * _local38) + (_local25 * _local42)) + (_local26 * _local46));
d = ((((_local24 * _local39) + (_local25 * _local43)) + (_local26 * _local47)) + _local27);
e = (((_local28 * _local36) + (_local29 * _local40)) + (_local30 * _local44));
f = (((_local28 * _local37) + (_local29 * _local41)) + (_local30 * _local45));
g = (((_local28 * _local38) + (_local29 * _local42)) + (_local30 * _local46));
h = ((((_local28 * _local39) + (_local29 * _local43)) + (_local30 * _local47)) + _local31);
i = (((_local32 * _local36) + (_local33 * _local40)) + (_local34 * _local44));
j = (((_local32 * _local37) + (_local33 * _local41)) + (_local34 * _local45));
k = (((_local32 * _local38) + (_local33 * _local42)) + (_local34 * _local46));
l = ((((_local32 * _local39) + (_local33 * _local43)) + (_local34 * _local47)) + _local35);
}
public function invert():void{
var _local1:Number = a;
var _local2:Number = b;
var _local3:Number = c;
var _local4:Number = d;
var _local5:Number = e;
var _local6:Number = f;
var _local7:Number = g;
var _local8:Number = h;
var _local9:Number = i;
var _local10:Number = j;
var _local11:Number = k;
var _local12:Number = l;
var _local13:Number = (((((((-(_local3) * _local6) * _local9) + ((_local2 * _local7) * _local9)) + ((_local3 * _local5) * _local10)) - ((_local1 * _local7) * _local10)) - ((_local2 * _local5) * _local11)) + ((_local1 * _local6) * _local11));
a = (((-(_local7) * _local10) + (_local6 * _local11)) / _local13);
b = (((_local3 * _local10) - (_local2 * _local11)) / _local13);
c = (((-(_local3) * _local6) + (_local2 * _local7)) / _local13);
d = ((((((((_local4 * _local7) * _local10) - ((_local3 * _local8) * _local10)) - ((_local4 * _local6) * _local11)) + ((_local2 * _local8) * _local11)) + ((_local3 * _local6) * _local12)) - ((_local2 * _local7) * _local12)) / _local13);
e = (((_local7 * _local9) - (_local5 * _local11)) / _local13);
f = (((-(_local3) * _local9) + (_local1 * _local11)) / _local13);
g = (((_local3 * _local5) - (_local1 * _local7)) / _local13);
h = ((((((((_local3 * _local8) * _local9) - ((_local4 * _local7) * _local9)) + ((_local4 * _local5) * _local11)) - ((_local1 * _local8) * _local11)) - ((_local3 * _local5) * _local12)) + ((_local1 * _local7) * _local12)) / _local13);
i = (((-(_local6) * _local9) + (_local5 * _local10)) / _local13);
j = (((_local2 * _local9) - (_local1 * _local10)) / _local13);
k = (((-(_local2) * _local5) + (_local1 * _local6)) / _local13);
l = ((((((((_local4 * _local6) * _local9) - ((_local2 * _local8) * _local9)) - ((_local4 * _local5) * _local10)) + ((_local1 * _local8) * _local10)) + ((_local2 * _local5) * _local12)) - ((_local1 * _local6) * _local12)) / _local13);
}
public function inverseCombine(_arg1:Matrix3D):void{
var _local2:Number = a;
var _local3:Number = b;
var _local4:Number = c;
var _local5:Number = d;
var _local6:Number = e;
var _local7:Number = f;
var _local8:Number = g;
var _local9:Number = h;
var _local10:Number = i;
var _local11:Number = j;
var _local12:Number = k;
var _local13:Number = l;
a = (((_local2 * _arg1.a) + (_local3 * _arg1.e)) + (_local4 * _arg1.i));
b = (((_local2 * _arg1.b) + (_local3 * _arg1.f)) + (_local4 * _arg1.j));
c = (((_local2 * _arg1.c) + (_local3 * _arg1.g)) + (_local4 * _arg1.k));
d = ((((_local2 * _arg1.d) + (_local3 * _arg1.h)) + (_local4 * _arg1.l)) + _local5);
e = (((_local6 * _arg1.a) + (_local7 * _arg1.e)) + (_local8 * _arg1.i));
f = (((_local6 * _arg1.b) + (_local7 * _arg1.f)) + (_local8 * _arg1.j));
g = (((_local6 * _arg1.c) + (_local7 * _arg1.g)) + (_local8 * _arg1.k));
h = ((((_local6 * _arg1.d) + (_local7 * _arg1.h)) + (_local8 * _arg1.l)) + _local9);
i = (((_local10 * _arg1.a) + (_local11 * _arg1.e)) + (_local12 * _arg1.i));
j = (((_local10 * _arg1.b) + (_local11 * _arg1.f)) + (_local12 * _arg1.j));
k = (((_local10 * _arg1.c) + (_local11 * _arg1.g)) + (_local12 * _arg1.k));
l = ((((_local10 * _arg1.d) + (_local11 * _arg1.h)) + (_local12 * _arg1.l)) + _local13);
}
public function toTransform(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1, _arg8:Number=1, _arg9:Number=1):void{
var _local10:Number = Math.cos(_arg4);
var _local11:Number = Math.sin(_arg4);
var _local12:Number = Math.cos(_arg5);
var _local13:Number = Math.sin(_arg5);
var _local14:Number = Math.cos(_arg6);
var _local15:Number = Math.sin(_arg6);
var _local16:Number = (_local14 * _local13);
var _local17:Number = (_local15 * _local13);
var _local18:Number = (_local12 * _arg7);
var _local19:Number = (_local11 * _arg8);
var _local20:Number = (_local10 * _arg8);
var _local21:Number = (_local10 * _arg9);
var _local22:Number = (_local11 * _arg9);
a = (_local14 * _local18);
b = ((_local16 * _local19) - (_local15 * _local20));
c = ((_local16 * _local21) + (_local15 * _local22));
d = _arg1;
e = (_local15 * _local18);
f = ((_local17 * _local19) + (_local14 * _local20));
g = ((_local17 * _local21) - (_local14 * _local22));
h = _arg2;
i = (-(_local13) * _arg7);
j = (_local12 * _local19);
k = (_local12 * _local21);
l = _arg3;
}
public function inverseRotate(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number = Math.cos(-(_arg1));
var _local5:Number = Math.sin(-(_arg1));
var _local6:Number = Math.cos(-(_arg2));
var _local7:Number = Math.sin(-(_arg2));
var _local8:Number = Math.cos(-(_arg3));
var _local9:Number = Math.sin(-(_arg3));
var _local10:Number = (_local5 * _local7);
var _local11:Number = (_local6 * _local8);
var _local12:Number = (-(_local6) * _local9);
var _local13:Number = _local7;
var _local14:Number = ((_local4 * _local9) + (_local10 * _local8));
var _local15:Number = ((_local4 * _local8) - (_local10 * _local9));
var _local16:Number = (-(_local5) * _local6);
var _local17:Number = ((_local5 * _local9) - ((_local4 * _local8) * _local7));
var _local18:Number = ((_local5 * _local8) + ((_local4 * _local7) * _local9));
var _local19:Number = (_local4 * _local6);
var _local20:Number = a;
var _local21:Number = b;
var _local22:Number = c;
var _local23:Number = d;
var _local24:Number = e;
var _local25:Number = f;
var _local26:Number = g;
var _local27:Number = h;
var _local28:Number = i;
var _local29:Number = j;
var _local30:Number = k;
var _local31:Number = l;
a = (((_local11 * _local20) + (_local12 * _local24)) + (_local13 * _local28));
b = (((_local11 * _local21) + (_local12 * _local25)) + (_local13 * _local29));
c = (((_local11 * _local22) + (_local12 * _local26)) + (_local13 * _local30));
d = (((_local11 * _local23) + (_local12 * _local27)) + (_local13 * _local31));
e = (((_local14 * _local20) + (_local15 * _local24)) + (_local16 * _local28));
f = (((_local14 * _local21) + (_local15 * _local25)) + (_local16 * _local29));
g = (((_local14 * _local22) + (_local15 * _local26)) + (_local16 * _local30));
h = (((_local14 * _local23) + (_local15 * _local27)) + (_local16 * _local31));
i = (((_local17 * _local20) + (_local18 * _local24)) + (_local19 * _local28));
j = (((_local17 * _local21) + (_local18 * _local25)) + (_local19 * _local29));
k = (((_local17 * _local22) + (_local18 * _local26)) + (_local19 * _local30));
l = (((_local17 * _local23) + (_local18 * _local27)) + (_local19 * _local31));
}
public function copy(_arg1:Matrix3D):void{
a = _arg1.a;
b = _arg1.b;
c = _arg1.c;
d = _arg1.d;
e = _arg1.e;
f = _arg1.f;
g = _arg1.g;
h = _arg1.h;
i = _arg1.i;
j = _arg1.j;
k = _arg1.k;
l = _arg1.l;
}
public function inverseConvertToScreen():void{
var _local1:Number = b;
var _local2:Number = f;
var _local3:Number = j;
b = -(c);
f = -(g);
j = -(k);
c = -(_local1);
g = -(_local2);
k = -(_local3);
}
public function inverseScale(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number = (1 / _arg1);
var _local5:Number = (1 / _arg2);
var _local6:Number = (1 / _arg3);
a = (a * _local4);
b = (b * _local4);
c = (c * _local4);
d = (d * _local4);
e = (e * _local5);
f = (f * _local5);
g = (g * _local5);
h = (h * _local5);
i = (i * _local6);
j = (j * _local6);
k = (k * _local6);
l = (l * _local6);
}
public function transform(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1, _arg8:Number=1, _arg9:Number=1):void{
var _local10:Number = Math.cos(_arg4);
var _local11:Number = Math.sin(_arg4);
var _local12:Number = Math.cos(_arg5);
var _local13:Number = Math.sin(_arg5);
var _local14:Number = Math.cos(_arg6);
var _local15:Number = Math.sin(_arg6);
var _local16:Number = (_local14 * _local13);
var _local17:Number = (_local15 * _local13);
var _local18:Number = (_local12 * _arg7);
var _local19:Number = (_local11 * _arg8);
var _local20:Number = (_local10 * _arg8);
var _local21:Number = (_local10 * _arg9);
var _local22:Number = (_local11 * _arg9);
var _local23:Number = (_local14 * _local18);
var _local24:Number = ((_local16 * _local19) - (_local15 * _local20));
var _local25:Number = ((_local16 * _local21) + (_local15 * _local22));
var _local26:Number = _arg1;
var _local27:Number = (_local15 * _local18);
var _local28:Number = ((_local17 * _local19) + (_local14 * _local20));
var _local29:Number = ((_local17 * _local21) - (_local14 * _local22));
var _local30:Number = _arg2;
var _local31:Number = (-(_local13) * _arg7);
var _local32:Number = (_local12 * _local19);
var _local33:Number = (_local12 * _local21);
var _local34:Number = _arg3;
var _local35:Number = a;
var _local36:Number = b;
var _local37:Number = c;
var _local38:Number = d;
var _local39:Number = e;
var _local40:Number = f;
var _local41:Number = g;
var _local42:Number = h;
var _local43:Number = i;
var _local44:Number = j;
var _local45:Number = k;
var _local46:Number = l;
a = (((_local23 * _local35) + (_local24 * _local39)) + (_local25 * _local43));
b = (((_local23 * _local36) + (_local24 * _local40)) + (_local25 * _local44));
c = (((_local23 * _local37) + (_local24 * _local41)) + (_local25 * _local45));
d = ((((_local23 * _local38) + (_local24 * _local42)) + (_local25 * _local46)) + _local26);
e = (((_local27 * _local35) + (_local28 * _local39)) + (_local29 * _local43));
f = (((_local27 * _local36) + (_local28 * _local40)) + (_local29 * _local44));
g = (((_local27 * _local37) + (_local28 * _local41)) + (_local29 * _local45));
h = ((((_local27 * _local38) + (_local28 * _local42)) + (_local29 * _local46)) + _local30);
i = (((_local31 * _local35) + (_local32 * _local39)) + (_local33 * _local43));
j = (((_local31 * _local36) + (_local32 * _local40)) + (_local33 * _local44));
k = (((_local31 * _local37) + (_local32 * _local41)) + (_local33 * _local45));
l = ((((_local31 * _local38) + (_local32 * _local42)) + (_local33 * _local46)) + _local34);
}
public function translateLocal(_arg1:Number, _arg2:Number, _arg3:Number):void{
d = (d + (((a * _arg1) + (b * _arg2)) + (c * _arg3)));
h = (h + (((e * _arg1) + (f * _arg2)) + (g * _arg3)));
l = (l + (((i * _arg1) + (j * _arg2)) + (k * _arg3)));
}
public function inverseTranslate(_arg1:Number, _arg2:Number, _arg3:Number):void{
d = (d - _arg1);
h = (h - _arg2);
l = (l - _arg3);
}
public function combine(_arg1:Matrix3D):void{
var _local2:Number = a;
var _local3:Number = b;
var _local4:Number = c;
var _local5:Number = d;
var _local6:Number = e;
var _local7:Number = f;
var _local8:Number = g;
var _local9:Number = h;
var _local10:Number = i;
var _local11:Number = j;
var _local12:Number = k;
var _local13:Number = l;
a = (((_arg1.a * _local2) + (_arg1.b * _local6)) + (_arg1.c * _local10));
b = (((_arg1.a * _local3) + (_arg1.b * _local7)) + (_arg1.c * _local11));
c = (((_arg1.a * _local4) + (_arg1.b * _local8)) + (_arg1.c * _local12));
d = ((((_arg1.a * _local5) + (_arg1.b * _local9)) + (_arg1.c * _local13)) + _arg1.d);
e = (((_arg1.e * _local2) + (_arg1.f * _local6)) + (_arg1.g * _local10));
f = (((_arg1.e * _local3) + (_arg1.f * _local7)) + (_arg1.g * _local11));
g = (((_arg1.e * _local4) + (_arg1.f * _local8)) + (_arg1.g * _local12));
h = ((((_arg1.e * _local5) + (_arg1.f * _local9)) + (_arg1.g * _local13)) + _arg1.h);
i = (((_arg1.i * _local2) + (_arg1.j * _local6)) + (_arg1.k * _local10));
j = (((_arg1.i * _local3) + (_arg1.j * _local7)) + (_arg1.k * _local11));
k = (((_arg1.i * _local4) + (_arg1.j * _local8)) + (_arg1.k * _local12));
l = ((((_arg1.i * _local5) + (_arg1.j * _local9)) + (_arg1.k * _local13)) + _arg1.l);
}
public static function inverseTranslationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
return (new Matrix3D(1, 0, 0, -(_arg1), 0, 1, 0, -(_arg2), 0, 0, 1, -(_arg3)));
}
public static function translationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
return (new Matrix3D(1, 0, 0, _arg1, 0, 1, 0, _arg2, 0, 0, 1, _arg3));
}
public static function inverseRotationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
var _local4:Number = Math.cos(-(_arg1));
var _local5:Number = Math.sin(-(_arg1));
var _local6:Number = Math.cos(-(_arg2));
var _local7:Number = Math.sin(-(_arg2));
var _local8:Number = Math.cos(-(_arg3));
var _local9:Number = Math.sin(-(_arg3));
var _local10:Number = (_local5 * _local7);
return (new Matrix3D((_local6 * _local8), (-(_local6) * _local9), _local7, 0, ((_local4 * _local9) + (_local10 * _local8)), ((_local4 * _local8) - (_local10 * _local9)), (-(_local5) * _local6), 0, ((_local5 * _local9) - ((_local4 * _local8) * _local7)), ((_local5 * _local8) + ((_local4 * _local7) * _local9)), (_local4 * _local6), 0));
}
public static function inverseTransformationMatrix(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1, _arg8:Number=1, _arg9:Number=1):Matrix3D{
var _local10:Number = Math.cos(-(_arg4));
var _local11:Number = Math.sin(-(_arg4));
var _local12:Number = Math.cos(-(_arg5));
var _local13:Number = Math.sin(-(_arg5));
var _local14:Number = Math.cos(-(_arg6));
var _local15:Number = Math.sin(-(_arg6));
var _local16:Number = (_local11 * _local13);
var _local17:Number = (1 / _arg7);
var _local18:Number = (1 / _arg8);
var _local19:Number = (1 / _arg9);
var _local20:Number = (_local12 * _local17);
var _local21:Number = (_local10 * _local18);
var _local22:Number = (_local11 * _local19);
var _local23:Number = (_local10 * _local19);
var _local24:Number = (_local14 * _local20);
var _local25:Number = (-(_local15) * _local20);
var _local26:Number = (_local13 * _local17);
var _local27:Number = ((_local15 * _local21) + ((_local16 * _local14) * _local18));
var _local28:Number = ((_local14 * _local21) - ((_local16 * _local15) * _local18));
var _local29:Number = ((-(_local11) * _local12) * _local18);
var _local30:Number = ((_local15 * _local22) - ((_local14 * _local13) * _local23));
var _local31:Number = ((_local14 * _local22) + ((_local13 * _local15) * _local23));
var _local32:Number = (_local12 * _local23);
return (new Matrix3D(_local24, _local25, _local26, -((((_local24 * _arg1) + (_local25 * _arg2)) + (_local26 * _arg3))), _local27, _local28, _local29, -((((_local27 * _arg1) + (_local28 * _arg2)) + (_local29 * _arg3))), _local30, _local31, _local32, -((((_local30 * _arg1) + (_local31 * _arg2)) + (_local32 * _arg3)))));
}
public static function inverseMatrix(_arg1:Matrix3D):Matrix3D{
var _local2:Number = (((((((-(_arg1.c) * _arg1.f) * _arg1.i) + ((_arg1.b * _arg1.g) * _arg1.i)) + ((_arg1.c * _arg1.e) * _arg1.j)) - ((_arg1.a * _arg1.g) * _arg1.j)) - ((_arg1.b * _arg1.e) * _arg1.k)) + ((_arg1.a * _arg1.f) * _arg1.k));
var _local3:Number = (((-(_arg1.g) * _arg1.j) + (_arg1.f * _arg1.k)) / _local2);
var _local4:Number = (((_arg1.c * _arg1.j) - (_arg1.b * _arg1.k)) / _local2);
var _local5:Number = (((-(_arg1.c) * _arg1.f) + (_arg1.b * _arg1.g)) / _local2);
var _local6:Number = ((((((((_arg1.d * _arg1.g) * _arg1.j) - ((_arg1.c * _arg1.h) * _arg1.j)) - ((_arg1.d * _arg1.f) * _arg1.k)) + ((_arg1.b * _arg1.h) * _arg1.k)) + ((_arg1.c * _arg1.f) * _arg1.l)) - ((_arg1.b * _arg1.g) * _arg1.l)) / _local2);
var _local7:Number = (((_arg1.g * _arg1.i) - (_arg1.e * _arg1.k)) / _local2);
var _local8:Number = (((-(_arg1.c) * _arg1.i) + (_arg1.a * _arg1.k)) / _local2);
var _local9:Number = (((_arg1.c * _arg1.e) - (_arg1.a * _arg1.g)) / _local2);
var _local10:Number = ((((((((_arg1.c * _arg1.h) * _arg1.i) - ((_arg1.d * _arg1.g) * _arg1.i)) + ((_arg1.d * _arg1.e) * _arg1.k)) - ((_arg1.a * _arg1.h) * _arg1.k)) - ((_arg1.c * _arg1.e) * _arg1.l)) + ((_arg1.a * _arg1.g) * _arg1.l)) / _local2);
var _local11:Number = (((-(_arg1.f) * _arg1.i) + (_arg1.e * _arg1.j)) / _local2);
var _local12:Number = (((_arg1.b * _arg1.i) - (_arg1.a * _arg1.j)) / _local2);
var _local13:Number = (((-(_arg1.b) * _arg1.e) + (_arg1.a * _arg1.f)) / _local2);
var _local14:Number = ((((((((_arg1.d * _arg1.f) * _arg1.i) - ((_arg1.b * _arg1.h) * _arg1.i)) - ((_arg1.d * _arg1.e) * _arg1.j)) + ((_arg1.a * _arg1.h) * _arg1.j)) + ((_arg1.b * _arg1.e) * _arg1.l)) - ((_arg1.a * _arg1.f) * _arg1.l)) / _local2);
return (new Matrix3D(_local3, _local4, _local5, _local6, _local7, _local8, _local9, _local10, _local11, _local12, _local13, _local14));
}
public static function inverseScaleMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
return (new Matrix3D((1 / _arg1), 0, 0, 0, 0, (1 / _arg2), 0, 0, 0, 0, (1 / _arg3), 0));
}
public static function scaleMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
return (new Matrix3D(_arg1, 0, 0, 0, 0, _arg2, 0, 0, 0, 0, _arg3, 0));
}
public static function transformationMatrix(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1, _arg8:Number=1, _arg9:Number=1):Matrix3D{
var _local10:Number = Math.cos(_arg4);
var _local11:Number = Math.sin(_arg4);
var _local12:Number = Math.cos(_arg5);
var _local13:Number = Math.sin(_arg5);
var _local14:Number = Math.cos(_arg6);
var _local15:Number = Math.sin(_arg6);
var _local16:Number = (_local14 * _local13);
var _local17:Number = (_local15 * _local13);
var _local18:Number = (_local12 * _arg7);
var _local19:Number = (_local11 * _arg8);
var _local20:Number = (_local10 * _arg8);
var _local21:Number = (_local10 * _arg9);
var _local22:Number = (_local11 * _arg9);
return (new Matrix3D((_local14 * _local18), ((_local16 * _local19) - (_local15 * _local20)), ((_local16 * _local21) + (_local15 * _local22)), _arg1, (_local15 * _local18), ((_local17 * _local19) + (_local14 * _local20)), ((_local17 * _local21) - (_local14 * _local22)), _arg2, (-(_local13) * _arg7), (_local12 * _local19), (_local12 * _local21), _arg3));
}
public static function product(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{
return (new Matrix3D((((_arg1.a * _arg2.a) + (_arg1.b * _arg2.e)) + (_arg1.c * _arg2.i)), (((_arg1.a * _arg2.b) + (_arg1.b * _arg2.f)) + (_arg1.c * _arg2.j)), (((_arg1.a * _arg2.c) + (_arg1.b * _arg2.g)) + (_arg1.c * _arg2.k)), ((((_arg1.a * _arg2.d) + (_arg1.b * _arg2.h)) + (_arg1.c * _arg2.l)) + _arg1.d), (((_arg1.e * _arg2.a) + (_arg1.f * _arg2.e)) + (_arg1.g * _arg2.i)), (((_arg1.e * _arg2.b) + (_arg1.f * _arg2.f)) + (_arg1.g * _arg2.j)), (((_arg1.e * _arg2.c) + (_arg1.f * _arg2.g)) + (_arg1.g * _arg2.k)), ((((_arg1.e * _arg2.d) + (_arg1.f * _arg2.h)) + (_arg1.g * _arg2.l)) + _arg1.h), (((_arg1.i * _arg2.a) + (_arg1.j * _arg2.e)) + (_arg1.k * _arg2.i)), (((_arg1.i * _arg2.b) + (_arg1.j * _arg2.f)) + (_arg1.k * _arg2.j)), (((_arg1.i * _arg2.c) + (_arg1.j * _arg2.g)) + (_arg1.k * _arg2.k)), ((((_arg1.i * _arg2.d) + (_arg1.j * _arg2.h)) + (_arg1.k * _arg2.l)) + _arg1.l)));
}
public static function rotationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
var _local4:Number = Math.cos(_arg1);
var _local5:Number = Math.sin(_arg1);
var _local6:Number = Math.cos(_arg2);
var _local7:Number = Math.sin(_arg2);
var _local8:Number = Math.cos(_arg3);
var _local9:Number = Math.sin(_arg3);
var _local10:Number = (_local8 * _local7);
var _local11:Number = (_local9 * _local7);
return (new Matrix3D((_local8 * _local6), ((_local10 * _local5) - (_local9 * _local4)), ((_local10 * _local4) + (_local9 * _local5)), 0, (_local9 * _local6), ((_local11 * _local5) + (_local8 * _local4)), ((_local11 * _local4) - (_local8 * _local5)), 0, -(_local7), (_local6 * _local5), (_local6 * _local4), 0));
}
}
}//package com.alternativagame.type
Section 22
//Point3D (com.alternativagame.type.Point3D)
package com.alternativagame.type {
import flash.geom.*;
import com.alternativagame.utility.*;
public final class Point3D {
public var x:Number;
public var y:Number;
public var z:Number;
public function Point3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
}
public function floor():void{
x = Math.floor(x);
y = Math.floor(y);
z = Math.floor(z);
}
public function add(_arg1:Point3D):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
}
public function toString():String{
return (((((("X: " + x.toFixed(3)) + " Y:") + y.toFixed(3)) + " Z:") + z.toFixed(3)));
}
public function multiply(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
z = (z * _arg1);
}
public function transform(_arg1:Matrix3D):void{
var _local2:Number = x;
var _local3:Number = y;
var _local4:Number = z;
x = ((((_arg1.a * _local2) + (_arg1.b * _local3)) + (_arg1.c * _local4)) + _arg1.d);
y = ((((_arg1.e * _local2) + (_arg1.f * _local3)) + (_arg1.g * _local4)) + _arg1.h);
z = ((((_arg1.i * _local2) + (_arg1.j * _local3)) + (_arg1.k * _local4)) + _arg1.l);
}
public function get length():Number{
return (Math.sqrt((((x * x) + (y * y)) + (z * z))));
}
public function clone():Point3D{
return (new Point3D(x, y, z));
}
public function set length(_arg1:Number):void{
var _local2:Number;
if (((((!((x == 0))) || (!((y == 0))))) || (!((z == 0))))){
_local2 = (_arg1 / length);
x = (x * _local2);
y = (y * _local2);
z = (z * _local2);
} else {
z = _arg1;
};
}
public function normalize():void{
var _local1:Number;
if (((((!((x == 0))) || (!((y == 0))))) || (!((z == 0))))){
_local1 = Math.sqrt((((x * x) + (y * y)) + (z * z)));
x = (x / _local1);
y = (y / _local1);
z = (z / _local1);
} else {
z = 1;
};
}
public function get lengthSqr():Number{
return ((((x * x) + (y * y)) + (z * z)));
}
public function reset():void{
x = 0;
y = 0;
z = 0;
}
public function copy(_arg1:Point3D):void{
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
public function invert():void{
x = -(x);
y = -(y);
z = -(z);
}
public function subtract(_arg1:Point3D):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
z = (z - _arg1.z);
}
public function toPoint():Point{
return (new Point(x, y));
}
public function round():void{
x = Math.round(x);
y = Math.round(y);
z = Math.round(z);
}
public function equals(_arg1:Point3D, _arg2:Number=0):Boolean{
return (((((((((((((x - _arg1.x) <= _arg2)) && (((x - _arg1.x) >= -(_arg2))))) && (((y - _arg1.y) <= _arg2)))) && (((y - _arg1.y) >= -(_arg2))))) && (((z - _arg1.z) <= _arg2)))) && (((z - _arg1.z) >= -(_arg2)))));
}
public static function cross(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D(((_arg1.y * _arg2.z) - (_arg1.z * _arg2.y)), ((_arg1.z * _arg2.x) - (_arg1.x * _arg2.z)), ((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x))));
}
public static function cross2D(_arg1:Point3D, _arg2:Point3D):Number{
return (((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x)));
}
public static function angle(_arg1:Point3D, _arg2:Point3D):Number{
var _local3:Number = (_arg1.length * _arg2.length);
var _local4:Number = ((_local3)!=0) ? (dot(_arg1, _arg2) / _local3) : 1;
return (Math.acos(_local4));
}
public static function average(_arg1:Point3D, _arg2:Point3D=null, _arg3:Point3D=null, _arg4:Point3D=null):Point3D{
if (_arg2 == null){
return (_arg1.clone());
};
if (_arg3 == null){
return (new Point3D(((_arg1.x + _arg2.x) * 0.5), ((_arg1.y + _arg2.y) * 0.5), ((_arg1.z + _arg2.z) * 0.5)));
};
if (_arg4 == null){
return (new Point3D((((_arg1.x + _arg2.x) + _arg3.x) / 3), (((_arg1.y + _arg2.y) + _arg3.y) / 3), (((_arg1.z + _arg2.z) + _arg3.z) / 3)));
};
return (new Point3D(((((_arg1.x + _arg2.x) + _arg3.x) + _arg4.x) * 0.25), ((((_arg1.y + _arg2.y) + _arg3.y) + _arg4.y) * 0.25), ((((_arg1.z + _arg2.z) + _arg3.z) + _arg4.z) / 0.25)));
}
public static function random(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Point3D{
return (new Point3D(MathUtility.random(_arg1, _arg2), MathUtility.random(_arg3, _arg4), MathUtility.random(_arg5, _arg6)));
}
public static function interpolate(_arg1:Point3D, _arg2:Point3D, _arg3:Number=0.5):Point3D{
return (new Point3D((_arg1.x + ((_arg2.x - _arg1.x) * _arg3)), (_arg1.y + ((_arg2.y - _arg1.y) * _arg3)), (_arg1.z + ((_arg2.z - _arg1.z) * _arg3))));
}
public static function dot(_arg1:Point3D, _arg2:Point3D):Number{
return ((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z)));
}
public static function sum(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z)));
}
public static function dot2D(_arg1:Point3D, _arg2:Point3D):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function difference(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z)));
}
public static function angleFast(_arg1:Point3D, _arg2:Point3D):Number{
var _local3:Number = dot(_arg1, _arg2);
if (Math.abs(_local3) > 1){
_local3 = ((_local3)>0) ? 1 : -1;
};
return (Math.acos(_local3));
}
}
}//package com.alternativagame.type
Section 23
//Set (com.alternativagame.type.Set)
package com.alternativagame.type {
import flash.utils.*;
import com.alternativagame.utility.*;
public final class Set extends Dictionary {
private var weakKeys:Boolean;
public function Set(_arg1:Boolean=false){
this.weakKeys = _arg1;
super(_arg1);
}
public function add(_arg1):void{
this[_arg1] = true;
}
public function transferToArray(_arg1:Array):void{
var _local2:*;
for (_local2 in this) {
_arg1.push(_local2);
delete this[_local2];
};
}
public function concatExcluding(_arg1:Set, _arg2:Set):void{
var _local3:*;
for (_local3 in _arg1) {
if (!_arg2.has(_local3)){
this[_local3] = _local3;
};
};
}
public function remove(_arg1):void{
delete this[_arg1];
}
public function get length():uint{
var _local2:*;
var _local1:uint;
for (_local2 in this) {
_local1++;
};
return (_local1);
}
public function take(){
var _local1:*;
for (_local1 in this) {
delete this[_local1];
return (_local1);
};
return (null);
}
public function isEmpty():Boolean{
var _local1:*;
for (_local1 in this) {
return (false);
};
return (true);
}
public function transfer(_arg1:Set):void{
var _local2:*;
for (_local2 in _arg1) {
this[_local2] = true;
delete _arg1[_local2];
};
}
public function clear():void{
var _local1:*;
for (_local1 in this) {
delete this[_local1];
};
}
public function any(){
var _local3:*;
var _local1:uint;
var _local2:uint = MathUtility.random(0, length);
for (_local3 in this) {
if (_local1 == _local2){
return (_local3);
};
_local1++;
};
return (null);
}
public function first(){
var _local1:*;
for (_local1 in this) {
return (_local1);
};
return (null);
}
public function isSingle():Boolean{
var _local2:*;
var _local1:Boolean;
for (_local2 in this) {
if (_local1){
return (false);
};
_local1 = true;
};
return (_local1);
}
public function concat(_arg1:Set):void{
var _local2:*;
for (_local2 in _arg1) {
this[_local2] = true;
};
}
public function addToArray(_arg1:Array):void{
var _local2:*;
for (_local2 in this) {
_arg1.push(_local2);
};
}
public function toString():String{
var _local2:*;
var _local1 = "";
for (_local2 in this) {
_local1 = (_local1 + ("," + _local2.toString()));
};
return (_local1.substring(1));
}
public function has(_arg1):Boolean{
return (this[_arg1]);
}
public function subtract(_arg1:Set):void{
var _local2:*;
for (_local2 in _arg1) {
delete this[_local2];
};
}
public function clone():Set{
var _local2:*;
var _local1:Set = new Set(weakKeys);
for (_local2 in this) {
_local1[_local2] = true;
};
return (_local1);
}
public function toArray():Array{
var _local2:*;
var _local1:Array = new Array();
for (_local2 in this) {
_local1.push(_local2);
};
return (_local1);
}
}
}//package com.alternativagame.type
Section 24
//TextureData (com.alternativagame.type.TextureData)
package com.alternativagame.type {
import flash.display.*;
public class TextureData {
public var width:uint;
public var height:uint;
public var bitmapData:BitmapData;
public var name:String;
public function TextureData(_arg1:BitmapData, _arg2:String=null){
if (_arg1 == null){
throw (new Error("Невозможно создать данные текстуры, т.к. указана null-текстура"));
};
this.bitmapData = _arg1;
width = _arg1.width;
height = _arg1.height;
this.name = _arg2;
}
public function toString():String{
return (((((("[TextureData " + ((name)!=null) ? name : "") + width) + "x") + height) + "]"));
}
}
}//package com.alternativagame.type
Section 25
//MathUtility (com.alternativagame.utility.MathUtility)
package com.alternativagame.utility {
import flash.geom.*;
public final class MathUtility {
public static const degree60:Number = (Math.PI / 3);
private static const toDeg:Number = (180 / Math.PI);
public static const degree45:Number = (Math.PI / 4);
private static const toRad:Number = (Math.PI / 180);
public static const degree180:Number = Math.PI;
public static const degree360:Number = (Math.PI + Math.PI);
public static const degree90:Number = (Math.PI / 2);
public static const degree1:Number = toRad;
public static const degree30:Number = (Math.PI / 6);
public static const degree10:Number = (Math.PI / 18);
public static const degree5:Number = (Math.PI / 36);
public static function random(_arg1:Number=0, _arg2:Number=0):Number{
if (arguments.length == 0){
return (Math.random());
};
if (arguments.length == 1){
return ((Math.random() * _arg1));
};
return (((Math.random() * (_arg2 - _arg1)) + _arg1));
}
public static function segmentDistance(_arg1:Point, _arg2:Point, _arg3:Point):Number{
var _local4:Number = (_arg2.x - _arg1.x);
var _local5:Number = (_arg2.y - _arg1.y);
var _local6:Number = (_arg3.x - _arg1.x);
var _local7:Number = (_arg3.y - _arg1.y);
return ((((_local4 * _local7) - (_local5 * _local6)) / Math.sqrt(((_local4 * _local4) + (_local5 * _local5)))));
}
public static function randomAngle():Number{
return ((Math.random() * degree360));
}
public static function vectorAngleFast(_arg1:Point, _arg2:Point):Number{
var _local3:Number = vectorDot(_arg1, _arg2);
if (Math.abs(_local3) > 1){
_local3 = ((_local3)>0) ? 1 : -1;
};
return (Math.acos(_local3));
}
public static function vectorAngle(_arg1:Point, _arg2:Point):Number{
var _local3:Number = (_arg1.length * _arg2.length);
var _local4:Number = ((_local3)!=0) ? (vectorDot(_arg1, _arg2) / _local3) : 1;
return (Math.acos(_local4));
}
public static function limitAngle(_arg1:Number):Number{
var _local2:Number = (_arg1 % degree360);
_local2 = ((_local2)>0) ? ((_local2)>degree180) ? (_local2 - degree360) : _local2 : ((_local2)<-(degree180)) ? (_local2 + degree360) : _local2;
return (_local2);
}
public static function vectorDot(_arg1:Point, _arg2:Point):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function toDegree(_arg1:Number):Number{
return ((_arg1 * toDeg));
}
public static function deltaAngle(_arg1:Number, _arg2:Number):Number{
var _local3:Number = (_arg2 - _arg1);
if (_local3 > degree180){
return ((_local3 - degree360));
};
if (_local3 < -(degree180)){
return ((_local3 + degree360));
};
return (_local3);
}
public static function toRadian(_arg1:Number):Number{
return ((_arg1 * toRad));
}
public static function vectorCross(_arg1:Point, _arg2:Point):Number{
return (((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x)));
}
public static function triangleHasPoint(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Boolean{
if (vectorCross(_arg3.subtract(_arg1), _arg4.subtract(_arg1)) <= 0){
if (vectorCross(_arg2.subtract(_arg3), _arg4.subtract(_arg3)) <= 0){
if (vectorCross(_arg1.subtract(_arg2), _arg4.subtract(_arg2)) <= 0){
return (true);
};
return (false);
} else {
return (false);
};
//unresolved jump
};
return (false);
}
public static function equals(_arg1:Number, _arg2:Number, _arg3:Number=0):Boolean{
return (((((_arg2 - _arg1) <= _arg3)) && (((_arg2 - _arg1) >= -(_arg3)))));
}
}
}//package com.alternativagame.utility
Section 26
//MouseUtility (com.alternativagame.utility.MouseUtility)
package com.alternativagame.utility {
import flash.display.*;
import flash.geom.*;
public class MouseUtility {
private static var _stage:Stage = null;
public static function init(_arg1:Stage):void{
_stage = _arg1;
}
public static function localCoords(_arg1:DisplayObject):Point{
return (_arg1.globalToLocal(globalCoords()));
}
public static function globalCoords(_arg1:Boolean=true):Point{
var _local3:int;
var _local4:int;
var _local2:Point;
if (_stage != null){
_local3 = _stage.mouseX;
_local4 = _stage.mouseY;
if (_arg1){
_local3 = ((_local3)<0) ? 0 : ((_local3)>_stage.stageWidth) ? _stage.stageWidth : _local3;
_local4 = ((_local4)<0) ? 0 : ((_local4)>_stage.stageHeight) ? _stage.stageHeight : _local4;
};
_local2 = new Point(_local3, _local4);
} else {
throw (new Error("MouseUtility don't have link to stage. Use MouseUtility.init(stage) before."));
};
return (_local2);
}
}
}//package com.alternativagame.utility
Section 27
//ObjectUtility (com.alternativagame.utility.ObjectUtility)
package com.alternativagame.utility {
import com.alternativagame.type.*;
import flash.utils.*;
public class ObjectUtility {
public static function getClassTree(_arg1, _arg2:Class=null):Array{
var _local3:Array = new Array();
var _local4:Class = Class(getDefinitionByName(getQualifiedClassName(_arg1)));
_arg2 = ((_arg2)==null) ? Object : _arg2;
while (_local4 != _arg2) {
_local3.push(_local4);
_local4 = Class(getDefinitionByName(getQualifiedSuperclassName(_local4)));
};
_local3.push(_local4);
return (_local3);
}
public static function getClass(_arg1):Class{
return (Class(getDefinitionByName(getQualifiedClassName(_arg1))));
}
public static function isEmpty(_arg1):Boolean{
var _local2:*;
for (_local2 in _arg1) {
return (false);
};
return (true);
}
public static function clone(_arg1):Object{
var _local3:String;
var _local2:Object = new Object();
for (_local3 in _arg1) {
_local2[_local3] = _arg1[_local3];
};
return (_local2);
}
public static function length(_arg1):uint{
var _local3:*;
var _local2:uint;
for (_local3 in _arg1) {
_local2++;
};
return (_local2);
}
public static function toSet(_arg1, _arg2:Boolean=false):Set{
var _local4:*;
var _local3:Set = new Set(_arg2);
for each (_local4 in _arg1) {
_local3[_local4] = true;
};
return (_local3);
}
public static function getClassName(_arg1):String{
var _local2:String = getQualifiedClassName(_arg1);
return (_local2.substring((_local2.indexOf("::") + 2)));
}
public static function toArray(_arg1, _arg2:Boolean=false):Array{
var _local4:*;
var _local3:Array = new Array();
if (_arg2){
for (_local4 in _arg1) {
_local3.push(_arg1[_local4]);
};
} else {
for (_local4 in _arg1) {
_local3[_local4] = _arg1[_local4];
};
};
return (_local3);
}
}
}//package com.alternativagame.utility
Section 28
//FactoryMesh (factory.FactoryMesh)
package factory {
import flash.events.*;
import flash.display.*;
import com.alternativagame.engine3d.*;
import com.alternativagame.type.*;
import flash.geom.*;
import flash.system.*;
import flash.net.*;
public class FactoryMesh extends Mesh {
private var loader:Loader;
private var onLoadMethod:Function;
public var material:TextureMaterial;
private static const texture:TextureData = new TextureData(new Bmp().bitmapData);
private static const Bmp:Class = FactoryMesh_Bmp;
public function FactoryMesh(){
material = new TextureMaterial(texture, 1, false, true, 1);
super("FactoryMesh");
addVertex(1134.95590917964, -485.562584472704, 350.393683837843, "1024");
addVertex(1134.95590917964, -477.688561035204, 350.393683837843, "1026");
addVertex(888.983069824171, 699.618384765578, 188.976386474562, "2054");
addVertex(-1685.71218164067, 428.305457519484, 90.5511774291517, "7");
addVertex(967.723243164015, 778.358558105421, 188.976386474562, "2048");
addVertex(-1685.71230371099, 49.3860582580091, 66.9291376342298, "9");
addVertex(1688.30356542964, 49.3860582580091, 66.9291376342298, "10");
addVertex(888.983069824171, 699.618384765578, 129.921271728468, "2059");
addVertex(932.20004980464, -477.688561035204, 293.307074951124, "1036");
addVertex(-1213.73806054692, 96.5174631347181, 338.582709716749, "13");
addVertex(967.723243164015, 778.358558105421, 129.921271728468, "2064");
addVertex(932.20004980464, -477.688561035204, 350.393683837843, "1041");
addVertex(932.20004980464, -485.562584472704, 350.393683837843, "1042");
addVertex(914.573645996046, 778.358558105421, 129.921271728468, "2067");
addVertex(-578.22280175786, 108.328483032179, 283.464576171828, "20");
addVertex(967.723243164015, 699.618384765578, 188.976386474562, "2061");
addVertex(-1175.97353417974, 108.328483032179, 303.149604247999, "27");
addVertex(888.983069824171, 778.358558105421, 188.976386474562, "2068");
addVertex(97.285628723097, 530.571021484328, 90.5511774291517, "31");
addVertex(53.978541778517, 530.571021484328, 291.338599609328, "33");
addVertex(-847.949181152391, -783.669945312547, 222.845313476515, "2082");
addVertex(-847.949181152391, -783.669945312547, 187.56902258296, "2075");
addVertex(-1646.83815820317, -783.669945312547, 222.845313476515, "2084");
addVertex(1108.16342871089, -485.562584472704, 293.307074951124, "1034");
addVertex(53.978541778517, 320.544135497999, 90.5511774291517, "39");
addVertex(42.167521881056, 320.544135497999, 204.724418090773, "40");
addVertex(-1213.73806054692, 418.347602294874, 166.601355956984, "47");
addVertex(1082.3793710937, 861.99936621089, 310.365455078078, "1064");
addVertex(1161.88462011714, 850.18833105464, 403.26059667964, "1073");
addVertex(-814.886437011766, -523.827538085985, 230.708564208937, "2099");
addVertex(1161.88462011714, 850.18833105464, 310.365455078078, "1071");
addVertex(-1213.73806054692, 278.62436621089, 166.601355956984, "56");
addVertex(1082.3793710937, 850.18833105464, 144.064155029249, "1081");
addVertex(1082.3793710937, 850.18833105464, 248.28696386714, "1084");
addVertex(-873.498436523485, 120.139518188429, 90.5511774291517, "61");
addVertex(1082.3793710937, 861.99936621089, 248.28696386714, "1086");
addVertex(-194.313576293993, -433.276238037157, 371.584418701124, "2111");
addVertex(-1149.08913476567, 120.139518188429, 283.464576171828, "65");
addVertex(-74.0777211914537, -433.276238037157, 371.584418701124, "2115");
addVertex(1161.88462011714, 861.99936621089, 248.28696386714, "1092");
addVertex(1253.15622656245, 600.239722656203, 310.365455078078, "1093");
addVertex(1253.15622656245, 421.886115478468, 310.365455078078, "1095");
addVertex(-282.947197509813, 108.328483032179, 283.464576171828, "72");
addVertex(1161.88462011714, 850.18833105464, 144.064155029249, "1089");
addVertex(-74.0777211914537, -433.276238037157, 284.970221923781, "2122");
addVertex(12.3283914794447, 120.139518188429, 90.5511774291517, "76");
addVertex(1253.15622656245, 421.886115478468, 403.26059667964, "1101");
addVertex(-263.262138916063, 108.328483032179, 90.5511774291517, "79");
addVertex(-263.262138916063, 120.139518188429, 283.464576171828, "80");
addVertex(-1685.71218164067, 600.45444433589, 165.354331420851, "81");
addVertex(-218.934975219774, -433.276238037157, 371.584418701124, "2125");
addVertex(901.141517089796, -421.465202880907, 325.804450439406, "86");
addVertex(1253.15622656245, 600.239722656203, 144.064155029249, "1111");
addVertex(420.826575683546, -842.725060058641, 492.125983642531, "88");
addVertex(1253.15622656245, 600.239722656203, 403.26059667964, "1096");
addVertex(1253.15622656245, 600.239722656203, 248.28696386714, "1114");
addVertex(901.141517089796, -780.838219238329, 325.804450439406, "91");
addVertex(-218.934975219774, -433.276238037157, 284.970221923781, "2133");
addVertex(-218.934975219774, -421.465202880907, 284.970221923781, "2134");
addVertex(-464.492638183641, -433.276238037157, 371.584418701124, "2143");
addVertex(-346.382408691454, -433.276238037157, 371.584418701124, "2146");
addVertex(-325.884972168016, -433.276238037157, 371.584418701124, "2139");
addVertex(420.826606201124, -339.963463378954, 325.804450439406, "100");
addVertex(1264.9672617187, 421.886115478468, 144.064155029249, "1125");
addVertex(1253.15622656245, 421.886115478468, 248.28696386714, "1128");
addVertex(784.652320312453, 328.324653076124, 419.476386474562, "106");
addVertex(-346.382408691454, -433.276238037157, 284.970221923781, "2155");
addVertex(784.652320312453, -380.336754394579, 376.16928808589, "108");
addVertex(-325.884972168016, -433.276238037157, 284.970221923781, "2141");
addVertex(1264.9672617187, 634.642310546828, 310.365455078078, "1136");
addVertex(1253.15622656245, 814.251685546828, 310.365455078078, "1137");
addVertex(-74.7288671265123, -338.788017822313, 90.5511774291517, "2162");
addVertex(901.141517089796, -632.095116210985, 574.803138183546, "117");
addVertex(1253.15622656245, 814.251685546828, 403.26059667964, "1142");
addVertex(-47.1698079834459, -457.978020263719, 325.804450439406, "2168");
addVertex(1253.15622656245, 634.642310546828, 248.28696386714, "1148");
addVertex(1253.15622656245, 814.251685546828, 248.28696386714, "1149");
addVertex(420.826606201124, -515.309959960985, 325.804450439406, "2166");
addVertex(1264.9672617187, 634.642310546828, 248.28696386714, "1151");
addVertex(-47.1698079834459, -457.978020263719, 290.371406005812, "2176");
addVertex(-1179.29238183599, 600.45444433589, 90.5511774291517, "129");
addVertex(-1179.29238183599, 588.64340917964, 303.149604247999, "131");
addVertex(1253.15622656245, 634.642310546828, 144.064155029249, "1157");
addVertex(56.9280542602064, 588.64340917964, 303.149604247999, "134");
addVertex(932.20004980464, -477.688561035204, 90.5511774291517, "136");
addVertex(1253.15622656245, 814.251685546828, 144.064155029249, "1161");
addVertex(1108.16342871089, -477.688561035204, 350.393683837843, "138");
addVertex(420.826606201124, -515.309959960985, 290.371406005812, "2188");
addVertex(1134.95590917964, -485.562584472704, 293.307074951124, "141");
addVertex(420.826606201124, -457.978020263719, 325.804450439406, "2173");
addVertex(420.826606201124, -457.978020263719, 290.371406005812, "2174");
addVertex(1264.9672617187, 814.251685546828, 403.26059667964, "1141");
addVertex(979.534339355421, 662.373023437453, 144.064155029249, "1170");
addVertex(-1685.71218164067, -421.465202880907, 263.779517578078, "2196");
addVertex(932.20004980464, -485.562584472704, 293.307074951124, "149");
addVertex(1108.16342871089, -485.562584472704, 350.393683837843, "150");
addVertex(-814.886437011766, -421.465202880907, 263.779517578078, "2191");
addVertex(979.534339355421, 607.841712402296, 403.26059667964, "1178");
addVertex(1116.34543554683, 130.970633911085, 514.780738281203, "155");
addVertex(1264.9672617187, 861.999305175734, 451.788672851515, "156");
addVertex(1082.3793710937, 850.18833105464, 310.365455078078, "159");
addVertex(1082.3793710937, 850.18833105464, 403.26059667964, "161");
addVertex(-464.492638183641, -421.465202880907, 523.622046874953, "2211");
addVertex(979.534339355421, 607.841712402296, 144.064155029249, "1180");
addVertex(1082.3793710937, 861.99936621089, 144.064155029249, "165");
addVertex(979.534339355421, 531.568274902296, 403.26059667964, "1191");
addVertex(1161.88462011714, 850.18833105464, 248.28696386714, "168");
addVertex(979.534339355421, 586.400855468703, 403.26059667964, "1185");
addVertex(-464.492638183641, -421.465202880907, 267.716559814406, "2219");
addVertex(-814.886437011766, -421.465202880907, 230.708564208937, "2204");
addVertex(967.723243164015, 531.568274902296, 403.26059667964, "1198");
addVertex(-325.884972168016, -421.465202880907, 371.584418701124, "2223");
addVertex(979.534339355421, 531.568274902296, 144.064155029249, "1192");
addVertex(1253.15622656245, 421.886115478468, 144.064155029249, "177");
addVertex(1264.9672617187, 600.239722656203, 144.064155029249, "178");
addVertex(-194.313576293993, -421.465202880907, 371.584418701124, "2229");
addVertex(1264.9672617187, 421.886115478468, 248.28696386714, "182");
addVertex(1253.15622656245, 634.642310546828, 310.365455078078, "183");
addVertex(1161.88462011714, 861.99936621089, 403.26059667964, "1208");
addVertex(1253.15622656245, 634.642310546828, 403.26059667964, "185");
addVertex(1082.3793710937, 861.99936621089, 403.26059667964, "1211");
addVertex(1116.34543554683, 861.99936621089, 514.780738281203, "1207");
addVertex(-464.492638183641, -421.465202880907, 393.700812744093, "2213");
addVertex(-218.934975219774, -421.465202880907, 371.584418701124, "2233");
addVertex(979.534339355421, 662.373023437453, 403.26059667964, "194");
addVertex(-47.1698041687487, -421.465202880907, 371.584388183546, "2245");
addVertex(1161.88462011714, 861.99936621089, 310.365455078078, "1224");
addVertex(-346.382408691454, -421.465202880907, 371.584418701124, "2222");
addVertex(979.534339355421, 586.400855468703, 144.064155029249, "202");
addVertex(-74.7288671265123, -421.465202880907, 90.5511774291517, "2254");
addVertex(-346.382408691454, -421.465202880907, 284.970221923781, "2256");
addVertex(967.723243164015, 375.065131591749, 325.804450439406, "1233");
addVertex(1161.88462011714, 861.99936621089, 144.064155029249, "1226");
addVertex(967.723243164015, 607.841712402296, 144.064155029249, "1236");
addVertex(967.723182128859, 375.065101074171, 451.788672851515, "213");
addVertex(967.723243164015, 607.841712402296, 403.26059667964, "1240");
addVertex(-768.503136230516, -421.465202880907, 484.252021240187, "2265");
addVertex(-74.0777211914537, -421.465202880907, 284.970221923781, "2258");
addVertex(-194.313576293993, -421.465202880907, 284.970221923781, "2231");
addVertex(-768.503136230516, -437.213219238329, 484.252021240187, "2273");
addVertex(967.723243164015, 662.373023437453, 144.064155029249, "1252");
addVertex(967.723243164015, 662.373023437453, 403.26059667964, "1253");
addVertex(967.723182128859, 861.999305175734, 451.788672851515, "1254");
addVertex(1264.9672617187, 421.886115478468, 310.365455078078, "232");
addVertex(-512.597679687547, -421.465202880907, 484.252021240187, "2281");
addVertex(-1685.71230371099, -316.289238525438, 90.5511774291517, "2282");
addVertex(967.723243164015, 586.400855468703, 403.26059667964, "1259");
addVertex(-1685.71230371099, -316.289238525438, 66.9291376342298, "2284");
addVertex(-512.597679687547, -421.465202880907, 90.5511774291517, "2277");
addVertex(-512.597679687547, -437.213219238329, 90.5511774291517, "2278");
addVertex(1264.9672617187, 156.06430761714, 401.574805664015, "242");
addVertex(703.882544921828, 491.920630859328, 325.804450439406, "245");
addVertex(-1685.71218164067, 1072.89536230464, 90.5511774291517, "248");
addVertex(967.723243164015, 491.920630859328, 325.804450439406, "1273");
addVertex(967.723243164015, 586.400855468703, 144.064155029249, "1277");
addVertex(-1685.71218164067, -1031.69765527349, 0, "2303");
addVertex(409.525184081984, 1072.89536230464, 326.771674560499, "257");
addVertex(967.723243164015, 531.568274902296, 144.064155029249, "1283");
addVertex(-1685.71218164067, 1216.33383886714, 0, "2297");
addVertex(409.525214599562, 1009.9032358398, 342.519721435499, "270");
addVertex(472.517280029249, 1072.89536230464, 362.204718994093, "272");
addVertex(472.517280029249, 1072.89536230464, 165.354331420851, "273");
addVertex(76.6504816283705, 1072.89536230464, 362.204718994093, "274");
addVertex(409.525214599562, 1009.9032358398, 362.204718994093, "276");
addVertex(-47.1698041687487, -421.465202880907, 393.700812744093, "2325");
addVertex(1264.9672617187, 600.239722656203, 310.365455078078, "1294");
addVertex(-74.0777211914537, -421.465202880907, 371.584418701124, "2320");
addVertex(-1461.81191308599, 117.28184454341, 195.536979125929, "2329");
addVertex(1003.28696386714, 174.277717040968, 271.653541015578, "282");
addVertex(-1638.97731835942, 117.28184454341, 195.536979125929, "2333");
addVertex(1264.9672617187, 814.251685546828, 144.064155029249, "1312");
addVertex(1302.34067480464, 265.684821533156, 401.574805664015, "290");
addVertex(1314.54526464839, 265.684821533156, 909.448829101515, "291");
addVertex(1341.71066992183, 292.850165771437, 909.448829101515, "292");
addVertex(-1461.81191308599, 129.092872070265, 274.277167724562, "2341");
addVertex(1369.54953710933, 293.523688720656, 401.574805664015, "294");
addVertex(1368.87607519527, 265.684821533156, 909.448829101515, "295");
addVertex(-1638.97731835942, 129.092872070265, 274.277167724562, "2345");
addVertex(-1339.33620507817, 628.475806640578, 157.48032324214, "300");
addVertex(-937.761253906297, 628.475806640578, 90.5511774291517, "302");
addVertex(-1638.97731835942, 117.28184454341, 274.277167724562, "2343");
addVertex(-1110.98964746099, 628.475806640578, 192.913398193312, "304");
addVertex(1264.9672617187, 634.642310546828, 403.26059667964, "1329");
addVertex(-1585.30202539067, -523.827538085985, 153.54331152339, "2357");
addVertex(1264.9672617187, 421.886115478468, 403.26059667964, "1334");
addVertex(-1441.69850976567, 628.475806640578, 173.22837011714, "312");
addVertex(-1441.69850976567, 793.830237792921, 157.48032324214, "318");
addVertex(-1524.37538964849, 793.830237792921, 157.48032324214, "319");
addVertex(1264.9672617187, 600.239722656203, 403.26059667964, "1328");
addVertex(-1236.97390039067, 841.074195312453, 176.253882812453, "322");
addVertex(-1585.30202539067, -452.961266113329, 153.54331152339, "2358");
addVertex(-1110.98964746099, 730.838050292921, 192.913398193312, "328");
addVertex(-937.761253906297, 628.475806640578, 170.872992919874, "329");
addVertex(-1486.82216699224, -452.961266113329, 122.047240661574, "2370");
addVertex(1264.9672617187, 814.251685546828, 248.28696386714, "1357");
addVertex(-1110.98964746099, 628.475806640578, 170.872992919874, "334");
addVertex(-1486.82216699224, -452.961266113329, 90.5511774291517, "2375");
addVertex(-1139.75905664067, 1052.68527929683, 169.29135839839, "337");
addVertex(1264.9672617187, 634.642310546828, 144.064155029249, "1345");
addVertex(1264.9672617187, 600.239722656203, 248.28696386714, "1363");
addVertex(-1085.30117089849, -468.709312988329, 145.669303344679, "2388");
addVertex(-1085.30117089849, -468.709312988329, 90.5511774291517, "2389");
addVertex(-9.83783490757924, 1052.68527929683, 90.5511774291517, "345");
addVertex(-9.83783490757924, 1052.68527929683, 228.346488403273, "346");
addVertex(1422.44760839839, 388.347754882765, 401.574805664015, "1371");
addVertex(-1585.30190332036, -523.827477050829, 122.047240661574, "2369");
addVertex(-365.487419677782, 899.142005371046, 196.850409912062, "349");
addVertex(901.141517089796, -842.725060058641, 90.5511774291517, "2398");
addVertex(-612.200096679735, 973.94516699214, 90.5511774291517, "352");
addVertex(1264.9672617187, 388.347754882765, 401.574805664015, "1378");
addVertex(1264.9672617187, 814.251685546828, 310.365455078078, "1353");
addVertex(1422.44760839839, 156.06430761714, 401.574805664015, "1373");
addVertex(-1417.99575097661, 428.305457519484, 314.960639404249, "358");
addVertex(901.141517089796, -1031.69765527349, 90.5511774291517, "2400");
addVertex(-1685.71230371099, -1031.69765527349, 90.5511774291517, "2410");
addVertex(-1685.71218164067, -799.417992187547, 263.779517578078, "363");
addVertex(1264.9672617187, 156.06430761714, 90.5511774291517, "1388");
addVertex(-1685.71230371099, 272.793677734328, 381.889777587843, "366");
addVertex(-47.1698079834459, -731.642967773485, 338.582709716749, "368");
addVertex(-47.1698041687487, -576.554100585985, 472.440955566359, "370");
addVertex(670.479102539015, 467.166419433546, 325.804450439406, "1397");
addVertex(-639.68959863286, -421.465202880907, 649.60629980464, "374");
addVertex(-814.88637597661, -421.465202880907, 523.622046874953, "377");
addVertex(-814.88637597661, -731.642906738329, 523.622046874953, "378");
addVertex(227.913184570265, -547.485252929735, 228.346473144484, "379");
addVertex(420.826606201124, -547.485252929735, 90.5511774291517, "382");
addVertex(1422.44760839839, 156.06430761714, 90.5511774291517, "1390");
addVertex(405.262458251906, -547.485252929735, 195.109778808546, "385");
addVertex(243.845145629835, -547.485252929735, 195.109778808546, "386");
addVertex(-853.813377929735, 120.139518188429, 90.5511774291517, "2435");
addVertex(1264.9672617187, 1072.89536230464, 90.5511774291517, "1413");
addVertex(13.6583542098524, 1072.89536230464, 90.5511774291517, "1415");
addVertex(-1685.71218164067, 1072.89536230464, 165.354331420851, "1417");
addVertex(1264.9672617187, 861.999305175734, 165.354331420851, "1401");
addVertex(227.913184570265, -581.952416015672, 195.109778808546, "395");
addVertex(247.598243164015, -653.784447265672, 195.109778808546, "398");
addVertex(53.978541778517, 168.366324829054, 90.5511774291517, "2422");
addVertex(670.479102539015, 491.920630859328, 325.804450439406, "402");
addVertex(-558.537804199266, 120.139518188429, 90.5511774291517, "2434");
addVertex(1227.69650976558, 130.970633911085, 90.5511774291517, "2452");
addVertex(682.290137695265, -282.485710693407, 421.403541015578, "405");
addVertex(-1149.08913476567, 120.139518188429, 90.5511774291517, "2446");
addVertex(670.479102539015, 434.049750732374, 421.403541015578, "407");
addVertex(670.479102539015, 434.049750732374, 374.159491943312, "409");
addVertex(-1149.08913476567, 108.328483032179, 90.5511774291517, "2442");
addVertex(-282.947197509813, 120.139518188429, 90.5511774291517, "2433");
addVertex(76.6504816283705, 1072.89536230464, 342.519721435499, "1429");
addVertex(420.826606201124, -632.095116210985, 574.803138183546, "416");
addVertex(76.6504816283705, 1072.89536230464, 326.771674560499, "1433");
addVertex(76.6504816283705, 1009.9032358398, 342.519721435499, "1445");
addVertex(-873.498436523485, 108.328483032179, 90.5511774291517, "2443");
addVertex(243.087821411085, 1009.9032358398, 393.700812744093, "1440");
addVertex(56.3099207152845, 96.5174707641127, 90.5511774291517, "2465");
addVertex(243.087821411085, 1072.89536230464, 393.700812744093, "1450");
addVertex(420.826575683546, -421.465202880907, 492.125983642531, "427");
addVertex(409.525214599562, 1072.89536230464, 342.519721435499, "1454");
addVertex(-1174.48415429692, -468.709312988329, 145.669303344679, "2387");
addVertex(-282.947197509813, 108.328483032179, 90.5511774291517, "2472");
addVertex(409.525184081984, 1009.9032358398, 326.771705078078, "1457");
addVertex(-1417.99587304692, 428.305488037062, 90.5511774291517, "2482");
addVertex(-464.492638183641, -731.642967773485, 393.700812744093, "436");
addVertex(-1213.73806054692, 96.5174707641127, 90.5511774291517, "2486");
addVertex(-1685.71218164067, 117.28184454341, 90.5511774291517, "2490");
addVertex(-263.262138916063, 120.139518188429, 90.5511774291517, "2464");
addVertex(-1685.71230371099, 49.3860582580091, 90.5511774291517, "2493");
addVertex(914.573645996046, 778.358558105421, 90.5511774291517, "446");
addVertex(56.3099207152845, 108.328483032179, 90.5511774291517, "2457");
addVertex(967.723243164015, 672.05942480464, 129.921271728468, "449");
addVertex(472.517280029249, 1009.9032358398, 362.204718994093, "1474");
addVertex(409.525214599562, 1009.9032358398, 90.5511774291517, "1475");
addVertex(-1175.97353417974, 108.328483032179, 90.5511774291517, "2502");
addVertex(13.6583542098524, 1072.89536230464, 362.204718994093, "1479");
addVertex(13.6583542098524, 1009.9032358398, 362.204718994093, "1481");
addVertex(76.6504816283705, 1009.9032358398, 362.204718994093, "1485");
addVertex(76.6504816283705, 1009.9032358398, 326.771705078078, "1486");
addVertex(-847.949181152391, -799.417992187547, 222.845313476515, "463");
addVertex(-1646.83815820317, -783.669945312547, 187.56902258296, "465");
addVertex(409.525214599562, 1072.89536230464, 362.204718994093, "1490");
addVertex(-1486.82216699224, -523.827477050829, 90.5511774291517, "468");
addVertex(-1656.16799218755, -523.827538085985, 153.54331152339, "470");
addVertex(-1656.16799218755, -523.827538085985, 230.708564208937, "471");
addVertex(-1656.16799218755, -421.465202880907, 230.708564208937, "472");
addVertex(-814.886437011766, -421.465202880907, 90.5511774291517, "474");
addVertex(97.285628723097, 96.5174707641127, 90.5511774291517, "2523");
addVertex(-464.492638183641, -338.788017822313, 204.724418090773, "476");
addVertex(-74.7288671265123, -421.465202880907, 267.716559814406, "478");
addVertex(-74.7288594971178, -338.788017822313, 204.724418090773, "479");
addVertex(967.723182128859, 130.970633911085, 451.788672851515, "1504");
addVertex(-194.313576293993, -433.276238037157, 284.970221923781, "481");
addVertex(1264.9672617187, 130.970633911085, 451.788672851515, "1500");
addVertex(1227.69650976558, 174.277717040968, 90.5511774291517, "1509");
addVertex(1422.44760839839, 388.347754882765, 90.5511774291517, "2527");
addVertex(1227.69650976558, 174.277717040968, 271.653541015578, "1513");
addVertex(1264.9672617187, 130.970633911085, 90.5511774291517, "2538");
addVertex(1227.69650976558, 130.970633911085, 271.653541015578, "1515");
addVertex(1003.28696386714, 130.970633911085, 271.653541015578, "1516");
addVertex(1003.28696386714, 174.277717040968, 90.5511774291517, "1520");
addVertex(-464.492638183641, -433.276238037157, 284.970221923781, "497");
addVertex(-325.884972168016, -421.465202880907, 284.970221923781, "492");
addVertex(-47.1698079834459, -515.309959960985, 325.804450439406, "502");
addVertex(97.285628723097, 600.45444433589, 90.5511774291517, "2552");
addVertex(1341.71066992183, 238.519477294874, 909.448829101515, "1529");
addVertex(1341.71066992183, 226.314750122023, 401.574805664015, "1530");
addVertex(1003.28696386714, 130.970633911085, 90.5511774291517, "1524");
addVertex(-464.492638183641, -421.465202880907, 90.5511774291517, "509");
addVertex(-464.492638183641, -421.465202880907, 284.970221923781, "510");
addVertex(-464.492638183641, -421.465202880907, 371.584418701124, "511");
addVertex(703.882544921828, 491.920630859328, 90.5511774291517, "2560");
addVertex(-47.1698079834459, -515.309959960985, 290.371406005812, "505");
addVertex(967.723243164015, 130.970633911085, 90.5511774291517, "2554");
addVertex(-47.1698079834459, -421.465202880907, 90.5511774291517, "516");
addVertex(1322.50192968745, 246.476005004835, 909.448829101515, "1541");
addVertex(703.882544921828, 467.166449951124, 90.5511774291517, "2566");
addVertex(-768.503136230516, -437.213219238329, 90.5511774291517, "520");
addVertex(670.479102539015, 467.166449951124, 90.5511774291517, "2569");
addVertex(-512.597679687547, -437.213219238329, 484.252021240187, "522");
addVertex(1313.87180273433, 237.845984863234, 401.574805664015, "1540");
addVertex(1381.08078710933, 265.684821533156, 401.574805664015, "1549");
addVertex(-1685.71230371099, 1072.89536230464, 90.5511774291517, "526");
addVertex(1360.91953222652, 246.476005004835, 909.448829101515, "1551");
addVertex(1341.71066992183, 305.054908203078, 401.574805664015, "1544");
addVertex(1369.54953710933, 237.845984863234, 401.574805664015, "1553");
addVertex(-1638.97731835942, 129.092872070265, 195.536979125929, "531");
addVertex(-1461.81191308599, 129.092872070265, 195.536979125929, "532");
addVertex(-1461.81191308599, 117.28184454341, 274.277167724562, "534");
addVertex(1313.87180273433, 293.523688720656, 401.574805664015, "1559");
addVertex(861.424048828078, 672.05942480464, 90.5511774291517, "2557");
addVertex(472.517280029249, 1072.89536230464, 90.5511774291517, "2577");
addVertex(-1656.16799218755, -452.961266113329, 153.54331152339, "538");
addVertex(1688.30356542964, 49.3860582580091, 90.5511774291517, "2537");
addVertex(-1486.82216699224, -523.827477050829, 122.047240661574, "540");
addVertex(-1585.30190332036, -523.827477050829, 90.5511774291517, "543");
addVertex(-1339.33620507817, 628.475806640578, 192.913398193312, "1568");
addVertex(-1585.30190332036, -452.961266113329, 122.047240661574, "547");
addVertex(-1174.48415429692, -523.827538085985, 145.669303344679, "548");
addVertex(-1085.30117089849, -523.827477050829, 145.669303344679, "549");
addVertex(76.6504816283705, 1009.9032358398, 90.5511774291517, "2598");
addVertex(76.6504816283705, 1072.89536230464, 90.5511774291517, "2592");
addVertex(-1174.48415429692, -523.827477050829, 145.669303344679, "553");
addVertex(-1685.71218164067, -799.417992187547, 90.5511774291517, "555");
addVertex(409.525214599562, 1072.89536230464, 90.5511774291517, "2587");
addVertex(-1339.33608300786, 730.837989257765, 157.48032324214, "1564");
addVertex(472.517280029249, 1009.9032358398, 90.5511774291517, "2580");
addVertex(-612.200096679735, 867.645911621046, 90.5511774291517, "564");
addVertex(56.9280542602064, 600.45444433589, 90.5511774291517, "2597");
addVertex(-9.83783490757924, 883.393958496046, 90.5511774291517, "567");
addVertex(13.6583542098524, 1009.9032358398, 90.5511774291517, "568");
addVertex(-1524.37538964849, 730.838050292921, 173.22837011714, "1595");
addVertex(-1441.69850976567, 628.475806640578, 157.48032324214, "1588");
addVertex(-1524.37538964849, 628.475806640578, 173.22837011714, "1597");
addVertex(-151.264946533251, 883.393958496046, 90.5511774291517, "2615");
addVertex(-1441.69850976567, 730.838050292921, 173.22837011714, "1600");
addVertex(-1139.75905664067, 973.94516699214, 90.5511774291517, "2627");
addVertex(-365.487419677782, 899.142005371046, 90.5511774291517, "2620");
addVertex(1264.9672617187, 388.347754882765, 90.5511774291517, "581");
addVertex(-1417.99587304692, 117.28184454341, 90.5511774291517, "583");
addVertex(-1441.69850976567, 730.838050292921, 157.48032324214, "1608");
addVertex(-1524.37538964849, 730.838050292921, 157.48032324214, "1609");
addVertex(-1441.69850976567, 770.208167480421, 157.48032324214, "1605");
addVertex(-1236.97390039067, 730.838050292921, 90.5511774291517, "2631");
addVertex(-1110.98964746099, 707.215979980421, 90.5511774291517, "2640");
addVertex(-151.264946533251, 1052.68527929683, 90.5511774291517, "593");
addVertex(-151.264946533251, 899.142005371046, 90.5511774291517, "2616");
addVertex(-1697.52321679692, 96.5174631347181, 306.024085449171, "597");
addVertex(-1402.2475820313, 96.5174631347181, 306.024085449171, "598");
addVertex(-1697.52321679692, 449.069861816359, 306.024085449171, "600");
addVertex(-1697.52321679692, 272.793677734328, 381.889777587843, "601");
addVertex(-1402.2475820313, 449.069861816359, 306.024085449171, "602");
addVertex(-445.314354492235, -743.453941894579, 509.83090917964, "603");
addVertex(-1441.69850976567, 770.208167480421, 90.5511774291517, "1621");
addVertex(-445.314354492235, -410.933800293016, 509.83090917964, "606");
addVertex(401.141517089796, -864.713829589891, 483.494910644484, "607");
addVertex(916.88950292964, -864.713829589891, 483.494910644484, "608");
addVertex(1384.34824316402, -798.800804687547, 381.711097167921, "609");
addVertex(901.141517089796, -798.800804687547, 381.711097167921, "610");
addVertex(1384.34824316402, -459.016899658251, 381.711097167921, "611");
addVertex(901.141517089796, -459.016899658251, 381.711097167921, "612");
addVertex(1286.71640722652, 115.222587036085, 442.570472167921, "614");
addVertex(1116.34531347652, 877.747352050734, 514.780738281203, "615");
addVertex(1286.71640722652, 877.747352050734, 442.570472167921, "616");
addVertex(945.974097656203, 115.222587036085, 442.570472167921, "617");
addVertex(945.974097656203, 375.065101074171, 442.570472167921, "618");
addVertex(1116.34531347652, 115.222587036085, 514.780738281203, "619");
addVertex(945.974097656203, 877.747352050734, 442.570472167921, "620");
addVertex(945.974097656203, 491.920630859328, 442.570472167921, "621");
addVertex(-834.064659668016, -743.453941894579, 509.83090917964, "622");
addVertex(-834.064659668016, -410.933800293016, 509.83090917964, "623");
addVertex(-1339.33620507817, 841.074195312453, 176.253882812453, "1631");
addVertex(-1213.73806054692, 600.45444433589, 90.5511774291517, "2666");
addVertex(-1697.52321679692, -820.546227050829, 253.215430664015, "627");
addVertex(-1697.52321679692, -610.441612793016, 358.267737792921, "628");
addVertex(-814.88637597661, -820.546227050829, 253.215430664015, "629");
addVertex(-1339.33620507817, 730.838050292921, 176.253882812453, "1654");
addVertex(-1339.33620507817, 730.838050292921, 192.913398193312, "1655");
addVertex(-1339.33620507817, 770.208167480421, 157.48032324214, "1639");
addVertex(-47.1698041687487, -875.827416015672, 269.29624121089, "633");
addVertex(-814.88637597661, -875.827416015672, 269.29624121089, "634");
addVertex(-47.1698041687487, -854.536095214891, 279.527564453078, "635");
addVertex(-1233.42311914067, 67.4981226195814, 326.340156005812, "636");
addVertex(113.033667968703, 67.4981226195814, 326.340156005812, "637");
addVertex(-1524.37538964849, 793.830237792921, 90.5511774291517, "1645");
addVertex(-1339.33620507817, 770.208167480421, 90.5511774291517, "1636");
addVertex(-1175.97353417974, 96.5174707641127, 303.149604247999, "640");
addVertex(-1441.69850976567, 793.830237792921, 90.5511774291517, "2681");
addVertex(-1233.42311914067, 629.473792480421, 326.340156005812, "643");
addVertex(-1110.98964746099, 707.215979980421, 170.872992919874, "1668");
addVertex(113.033667968703, 629.473792480421, 326.340156005812, "645");
addVertex(-1236.97390039067, 730.838050292921, 176.253882812453, "1662");
addVertex(-1339.33620507817, 841.074195312453, 90.5511774291517, "2687");
addVertex(-1236.97390039067, 841.074195312453, 90.5511774291517, "2688");
addVertex(916.88950292964, -421.465202880907, 492.125983642531, "649");
addVertex(401.141517089796, -421.465202880907, 492.125983642531, "650");
addVertex(-937.761253906297, 707.215979980421, 170.872992919874, "1675");
addVertex(-464.492638183641, -329.393181396532, 197.56642858882, "652");
addVertex(-74.7288594971178, -329.393181396532, 197.56642858882, "653");
addVertex(-35.3587804565905, -576.554100585985, 472.440955566359, "654");
addVertex(-464.492638183641, -410.933800293016, 388.353888915968, "655");
addVertex(-35.3587804565905, -410.933800293016, 388.353888915968, "656");
addVertex(-1697.52321679692, -405.619041992235, 255.85646765132, "657");
addVertex(-814.88637597661, -405.619041992235, 255.85646765132, "658");
addVertex(216.68556921382, -547.485252929735, 224.680304931593, "659");
addVertex(216.68556921382, -842.725060058641, 224.680304931593, "660");
addVertex(1688.30356542964, -780.838219238329, 90.5511774291517, "662");
addVertex(56.9280542602064, 588.64340917964, 90.5511774291517, "2648");
addVertex(-151.264946533251, 1052.68527929683, 196.850409912062, "1688");
addVertex(-937.761253906297, 707.215979980421, 90.5511774291517, "2650");
addVertex(-1085.30117089849, -523.827477050829, 90.5511774291517, "666");
addVertex(-1441.69838769536, 628.475806640578, 90.5511774291517, "2667");
addVertex(967.723243164015, 825.602698730421, 90.5511774291517, "2718");
addVertex(-9.83783490757924, 883.393958496046, 228.346488403273, "1695");
addVertex(-1110.98964746099, 730.838050292921, 90.5511774291517, "2643");
addVertex(-35.3587804565905, -731.642906738329, 393.700812744093, "674");
addVertex(-1524.37538964849, 628.475806640578, 90.5511774291517, "2674");
addVertex(-1685.71230371099, 1216.33383886714, 90.5511774291517, "2675");
addVertex(-1339.33608300786, 628.475806640578, 90.5511774291517, "2664");
addVertex(-1685.71218164067, 600.45444433589, 90.5511774291517, "681");
addVertex(-151.264946533251, 1052.68527929683, 228.346488403273, "1698");
addVertex(670.479102539015, 491.920630859328, 90.5511774291517, "2705");
addVertex(-365.487419677782, 867.645911621046, 240.157508300734, "1711");
addVertex(1264.9672617187, 861.99936621089, 90.5511774291517, "688");
addVertex(-365.487419677782, 1052.68527929683, 196.850409912062, "1705");
addVertex(-365.487419677782, 1052.68527929683, 240.157508300734, "1706");
addVertex(13.6583532561781, 1072.89536230464, 165.354331420851, "691");
addVertex(-365.487419677782, 1052.68527929683, 90.5511774291517, "2702");
addVertex(-151.264946533251, 899.142005371046, 196.850409912062, "1718");
addVertex(1688.30356542964, 1216.33383886714, 0, "696");
addVertex(-365.487419677782, 867.645911621046, 90.5511774291517, "1713");
addVertex(-151.264946533251, 883.393958496046, 228.346488403273, "1722");
addVertex(1688.30356542964, -1031.69765527349, 0, "701");
addVertex(1688.30356542964, -1031.69765527349, 90.5511774291517, "702");
addVertex(1688.30356542964, -316.289238525438, 66.9291376342298, "705");
addVertex(1688.30356542964, 1216.33383886714, 90.5511774291517, "2737");
addVertex(-1524.37538964849, 730.837989257765, 90.5511774291517, "2755");
addVertex(967.723243164015, 861.99936621089, 90.5511774291517, "2719");
addVertex(-612.200096679735, 1052.68527929683, 240.157508300734, "1734");
addVertex(-612.200096679735, 867.645911621046, 240.157508300734, "1735");
addVertex(-1402.2475820313, 272.793677734328, 381.889777587843, "2760");
addVertex(1688.30356542964, -316.289238525438, 90.5511774291517, "713");
addVertex(-1139.75905664067, 1052.68527929683, 90.5511774291517, "1739");
addVertex(97.285628723097, 348.485968994093, 444.881934570265, "718");
addVertex(56.3099207152845, 108.328483032179, 303.149604247999, "721");
addVertex(-612.200096679735, 1052.68527929683, 169.29135839839, "1748");
addVertex(56.3099207152845, 96.5174707641127, 303.149604247999, "725");
addVertex(-1139.75905664067, 973.94516699214, 169.29135839839, "1742");
addVertex(967.723182128859, 491.920630859328, 451.788672851515, "2775");
addVertex(-612.200096679735, 973.94516699214, 169.29135839839, "1752");
addVertex(-639.689537597704, -743.453941894579, 649.60629980464, "2778");
addVertex(1384.34824316402, -632.197289062547, 456.400092529249, "2772");
addVertex(1372.53733007808, -632.197289062547, 456.400092529249, "2773");
addVertex(-1685.71218164067, 117.28184454341, 314.960639404249, "1759");
addVertex(-1417.99587304692, 272.793677734328, 381.889777587843, "1764");
addVertex(-1417.99575097661, 117.28184454341, 314.960639404249, "1765");
addVertex(97.285628723097, 530.571021484328, 291.338599609328, "742");
addVertex(53.978541778517, 168.366324829054, 291.338599609328, "743");
addVertex(97.285628723097, 168.366324829054, 291.338599609328, "744");
addVertex(97.285628723097, 168.366324829054, 90.5511774291517, "746");
addVertex(53.978541778517, 530.571021484328, 90.5511774291517, "748");
addVertex(-814.886437011766, -799.417992187547, 263.779517578078, "2797");
addVertex(-639.689537597704, -410.933800293016, 649.60629980464, "2781");
addVertex(-1685.71218164067, 428.305457519484, 314.960639404249, "1767");
addVertex(-814.886437011766, -610.441612793016, 358.267768310499, "2792");
addVertex(-814.886437011766, -854.536095214891, 279.527564453078, "2794");
addVertex(227.913184570265, -842.725060058641, 228.346488403273, "1780");
addVertex(420.826606201124, -547.485252929735, 291.338599609328, "1782");
addVertex(42.167521881056, 320.544135497999, 90.5511774291517, "759");
addVertex(-1646.83815820317, -799.417992187547, 222.845313476515, "2808");
addVertex(53.978541778517, 320.544135497999, 204.724418090773, "763");
addVertex(-814.886437011766, -799.417992187547, 90.5511774291517, "2798");
addVertex(-814.886437011766, -854.536095214891, 90.5511774291517, "2799");
addVertex(42.167521881056, 265.426032470656, 204.724418090773, "769");
addVertex(53.978541778517, 265.426032470656, 204.724418090773, "770");
addVertex(53.978541778517, 265.426032470656, 90.5511774291517, "771");
addVertex(42.167521881056, 265.426032470656, 90.5511774291517, "773");
addVertex(405.262458251906, -559.296288085985, 143.928656982374, "1799");
addVertex(405.262458251906, -559.296288085985, 195.109778808546, "1800");
addVertex(-1213.73806054692, 348.485968994093, 444.881934570265, "777");
addVertex(-1646.83815820317, -799.417992187547, 187.56902258296, "2826");
addVertex(405.262458251906, -547.485252929735, 143.928656982374, "1803");
addVertex(227.913184570265, -547.485252929735, 90.5511774291517, "1787");
addVertex(-1205.86403710942, 418.347602294874, 166.601355956984, "783");
addVertex(-847.949181152391, -799.417992187547, 187.56902258296, "2815");
addVertex(-1213.73806054692, 541.399329589796, 166.601355956984, "786");
addVertex(97.285628723097, 96.5174631347181, 338.582709716749, "2835");
addVertex(243.845145629835, -559.296288085985, 143.928656982374, "1812");
addVertex(-1213.73806054692, 418.347602294874, 242.65154211421, "789");
addVertex(-1205.86403710942, 418.347602294874, 242.65154211421, "790");
addVertex(-47.1698079834459, -854.536095214891, 90.5511774291517, "2832");
addVertex(227.913184570265, -653.784447265672, 195.109778808546, "1817");
addVertex(243.845145629835, -559.296288085985, 195.109778808546, "1810");
addVertex(247.598243164015, -581.952416015672, 195.109778808546, "1819");
addVertex(243.845145629835, -547.485252929735, 143.928656982374, "1813");
addVertex(227.913184570265, -581.952416015672, 90.5511774291517, "1823");
addVertex(-1205.86403710942, 541.399329589796, 242.65154211421, "801");
addVertex(-1213.73806054692, 541.399329589796, 242.65154211421, "802");
addVertex(113.033667968703, 348.485968994093, 444.881904052687, "2852");
addVertex(-1205.86403710942, 541.399329589796, 166.601355956984, "805");
addVertex(-1205.86403710942, 155.57260839839, 242.65154211421, "808");
addVertex(-1175.97353417974, 96.5174707641127, 90.5511774291517, "2850");
addVertex(-1213.73806054692, 278.62436621089, 242.65154211421, "811");
addVertex(-1205.86403710942, 278.62436621089, 242.65154211421, "813");
addVertex(670.479102539015, 491.920630859328, 451.788672851515, "1839");
addVertex(-1233.42311914067, 348.485968994093, 444.881904052687, "2856");
addVertex(-1205.86403710942, 278.62436621089, 166.601355956984, "817");
addVertex(-1205.86403710942, 155.57260839839, 166.601355956984, "819");
addVertex(97.285628723097, 600.45444433589, 338.582709716749, "2870");
addVertex(-1213.73806054692, 155.57260839839, 166.601355956984, "823");
addVertex(670.479102539015, -339.963463378954, 325.804450439406, "1848");
addVertex(-1213.73806054692, 155.57260839839, 242.65154211421, "825");
addVertex(682.290137695265, 434.049750732374, 421.403541015578, "1851");
addVertex(-1179.29238183599, 600.45444433589, 303.149604247999, "2859");
addVertex(916.88950292964, -632.095116210985, 574.803138183546, "2878");
addVertex(670.479102539015, -339.963463378954, 451.788672851515, "1847");
addVertex(-1213.73806054692, 600.45444433589, 338.582709716749, "2864");
addVertex(-873.498436523485, 108.328483032179, 283.464576171828, "835");
addVertex(401.141517089796, -632.095116210985, 574.803138183546, "2879");
addVertex(682.290137695265, 434.049750732374, 374.159491943312, "1864");
addVertex(-873.498436523485, 120.139518188429, 283.464576171828, "842");
addVertex(682.290137695265, -282.485710693407, 374.159491943312, "1868");
addVertex(-1149.08913476567, 108.328483032179, 283.464576171828, "845");
addVertex(901.141517089796, -780.838280273485, 90.5511774291517, "2895");
addVertex(670.479102539015, -282.485710693407, 374.159491943312, "1873");
addVertex(56.9280542602064, 600.45444433589, 303.149604247999, "2871");
addVertex(-578.22280175786, 120.139518188429, 90.5511774291517, "851");
addVertex(-578.22280175786, 108.328483032179, 90.5511774291517, "853");
addVertex(-768.503136230516, -421.465202880907, 90.5511774291517, "2902");
addVertex(-853.813377929735, 108.328483032179, 283.464576171828, "858");
addVertex(796.463477539015, 375.065131591749, 325.804450439406, "1875");
addVertex(-578.22280175786, 120.139518188429, 283.464576171828, "860");
addVertex(670.479102539015, -282.485710693407, 421.403541015578, "1869");
addVertex(247.598243164015, -653.784447265672, 90.5511774291517, "2911");
addVertex(-853.813377929735, 120.139518188429, 283.464576171828, "864");
addVertex(-1656.16799218755, -452.961266113329, 90.5511774291517, "2913");
addVertex(-853.813377929735, 108.328483032179, 90.5511774291517, "866");
addVertex(796.463477539015, -380.336754394579, 376.16928808589, "1883");
addVertex(796.463477539015, 375.065131591749, 451.788672851515, "1892");
addVertex(-1174.48415429692, -523.827477050829, 90.5511774291517, "2919");
addVertex(796.463477539015, -339.963463378954, 451.788672851515, "1896");
addVertex(796.463477539015, -380.336754394579, 419.476386474562, "1897");
addVertex(-814.886437011766, -523.827538085985, 90.5511774291517, "2923");
addVertex(247.598243164015, -581.952416015672, 90.5511774291517, "2907");
addVertex(-558.537804199266, 120.139518188429, 283.464576171828, "877");
addVertex(-282.947197509813, 120.139518188429, 283.464576171828, "878");
addVertex(-558.537804199266, 108.328483032179, 283.464576171828, "881");
addVertex(-558.537804199266, 108.328483032179, 90.5511774291517, "883");
addVertex(12.3283914794447, 108.328483032179, 90.5511774291517, "888");
addVertex(12.3283914794447, 120.139518188429, 283.464576171828, "891");
addVertex(12.3283914794447, 108.328483032179, 283.464576171828, "892");
addVertex(-1174.48415429692, -468.709312988329, 90.5511774291517, "2943");
addVertex(420.826606201124, -421.465202880907, 475.410743164015, "1920");
addVertex(420.826606201124, -339.963463378954, 451.788672851515, "1921");
addVertex(796.463477539015, -421.465202880907, 475.410743164015, "1922");
addVertex(-263.262138916063, 108.328483032179, 283.464576171828, "900");
addVertex(-1656.16799218755, -421.465202880907, 90.5511774291517, "2912");
addVertex(-1213.73806054692, 600.45444433589, 165.354331420851, "903");
addVertex(1372.53720800777, -780.838219238329, 389.763770507765, "904");
addVertex(-1585.30202539067, -452.961266113329, 90.5511774291517, "2945");
addVertex(420.826606201124, -421.465202880907, 90.5511774291517, "2954");
addVertex(901.141517089796, -421.465202880907, 90.5511774291517, "2955");
addVertex(420.826606201124, -421.465202880907, 325.804450439406, "1928");
addVertex(420.826606201124, -842.725060058641, 291.338599609328, "1939");
addVertex(420.826575683546, -842.725060058641, 325.804450439406, "1940");
addVertex(796.463477539015, 328.324653076124, 419.476386474562, "917");
addVertex(784.652320312453, -380.336754394579, 419.476386474562, "922");
addVertex(-464.492638183641, -338.788017822313, 90.5511774291517, "2963");
addVertex(-1685.71218164067, -421.465202880907, 90.5511774291517, "2974");
addVertex(796.463477539015, 328.324653076124, 376.16928808589, "927");
addVertex(784.652320312453, 328.324653076124, 376.16928808589, "928");
addVertex(227.913184570265, -842.725060058641, 90.5511774291517, "2979");
addVertex(932.20004980464, -607.609825683641, 236.220496581984, "932");
addVertex(901.141517089796, -421.465202880907, 492.125983642531, "1960");
addVertex(1337.71189062495, -607.609825683641, 236.220496581984, "937");
addVertex(1337.71189062495, -477.688561035204, 236.220496581984, "938");
addVertex(796.463477539015, -421.465202880907, 325.804450439406, "1964");
addVertex(901.141517089796, -477.688561035204, 389.763770507765, "1965");
addVertex(932.20004980464, -477.688561035204, 236.220496581984, "942");
addVertex(227.913184570265, -653.784447265672, 90.5511774291517, "2991");
addVertex(901.141517089796, -632.197289062547, 456.400092529249, "1969");
addVertex(901.141517089796, -780.838280273485, 389.763770507765, "1972");
addVertex(932.20004980464, -607.609825683641, 90.5511774291517, "2999");
addVertex(1337.71189062495, -607.609825683641, 90.5511774291517, "3000");
addVertex(703.882544921828, 467.166419433546, 325.804450439406, "953");
addVertex(1372.53733007808, -780.838280273485, 90.5511774291517, "3002");
addVertex(703.882544921828, 467.166419433546, 263.779517578078, "956");
addVertex(901.141517089796, -842.725060058641, 325.804450439406, "1983");
addVertex(-1179.29238183599, 588.64340917964, 90.5511774291517, "960");
addVertex(901.141517089796, -842.725060058641, 492.125983642531, "1977");
addVertex(-1685.71230371099, -610.441612793016, 358.267768310499, "1987");
addVertex(1337.71189062495, -477.688561035204, 90.5511774291517, "3007");
addVertex(-464.492638183641, -576.554100585985, 472.440986083937, "1993");
addVertex(1372.53733007808, -477.688561035204, 90.5511774291517, "3001");
addVertex(-464.492638183641, -731.642906738329, 523.622046874953, "1996");
addVertex(-639.68959863286, -731.642967773485, 649.60629980464, "1997");
addVertex(901.141517089796, -477.688561035204, 90.5511774291517, "974");
addVertex(901.141517089796, -316.28920800786, 90.5511774291517, "3015");
addVertex(1360.91953222652, 284.893622802687, 909.448829101515, "3024");
addVertex(1322.50192968745, 284.893622802687, 909.448829101515, "3027");
addVertex(-47.1698079834459, -731.642967773485, 393.700812744093, "2005");
addVertex(901.141517089796, -477.688561035204, 325.804450439406, "982");
addVertex(1372.53720800777, -477.688561035204, 389.763770507765, "989");
addVertex(-814.886437011766, -731.642967773485, 338.582709716749, "2006");
addVertex(861.424048828078, 778.358558105421, 129.921271728468, "2018");
addVertex(861.424048828078, 778.358558105421, 90.5511774291517, "2020");
addVertex(967.723243164015, 672.05942480464, 90.5511774291517, "2022");
addVertex(1108.16342871089, -477.688561035204, 293.307074951124, "1003");
addVertex(1337.71189062495, -477.688561035204, 350.393683837843, "1004");
addVertex(1337.71189062495, -477.688561035204, 293.307074951124, "1005");
addVertex(1337.71189062495, -485.562584472704, 350.393683837843, "1008");
addVertex(1337.71189062495, -485.562584472704, 293.307074951124, "1010");
addVertex(1134.95590917964, -477.688561035204, 293.307074951124, "1013");
addVertex(914.573645996046, 825.602698730421, 129.921271728468, "2038");
addVertex(967.723243164015, 699.618384765578, 129.921271728468, "2040");
addVertex(914.573645996046, 825.602698730421, 90.5511774291517, "2034");
addVertex(888.983069824171, 778.358558105421, 129.921271728468, "2043");
addVertex(861.424048828078, 672.05942480464, 129.921271728468, "2045");
addVertex(967.723243164015, 825.602698730421, 129.921271728468, "2029");
addVertex(1264.9672617187, 1072.89536230464, 165.354331420851, "3044");
addFace(["1086", "1084", "1081", "165"], "0");
setUVsToFace(new Point(0.943698763847351, 0.857187271118164), new Point(0.943698763847351, 0.859118103981018), new Point(0.9266597032547, 0.859118103981018), "0");
addFace(["2256", "2155", "2146", "2222"], "1");
setUVsToFace(new Point(0.596938729286194, 0.990977704524994), new Point(0.596938729286194, 0.989046812057495), new Point(0.611099004745483, 0.989046812057495), "1");
addFace(["666", "2389", "2388", "549"], "2");
setUVsToFace(new Point(0.114594399929047, 0.451348751783371), new Point(0.114594399929047, 0.442337691783905), new Point(0.123605497181416, 0.442337691783905), "2");
addFace(["2043", "2068", "2048", "2064", "2067"], "3");
setUVsToFace(new Point(0.486531466245651, 0.98665314912796), new Point(0.486531466245651, 0.976998448371887), new Point(0.499404460191727, 0.976998448371887), "3");
addFace(["696", "10", "705"], "4");
setUVsToFace(new Point(0.568489789962769, 0.549720406532288), new Point(0.75927072763443, 0.538778364658356), new Point(0.819053947925568, 0.538778364658356), "4");
addFace(["2464", "79", "2465", "888"], "5");
setUVsToFace(new Point(0.324055880308151, 0.184213668107986), new Point(0.324055849018981, 0.186144624632638), new Point(0.271809965372086, 0.188075572252274), "5");
addFace(["927", "917", "106", "928"], "6");
setUVsToFace(new Point(0.42305913567543, 0.911491334438324), new Point(0.430139273405075, 0.911491334438324), new Point(0.430139273405075, 0.913422405719757), "6");
addFace(["2907", "2911", "398", "1819"], "7");
setUVsToFace(new Point(0.598127365112305, 0.900536239147186), new Point(0.598127365112305, 0.888792634010315), new Point(0.615221321582794, 0.888792634010315), "7");
addFace(["1486", "2598", "2592", "1433", "274", "1485"], "8");
setUVsToFace(new Point(0.775309150439883, 0.634282767772675), new Point(0.736689673797258, 0.634282767772675), new Point(0.736689673797258, 0.623984336853027), "8");
addFace(["1847", "1848", "100", "1921"], "9");
setUVsToFace(new Point(0.55338853597641, 0.78338098526001), new Point(0.55338853597641, 0.803977847099304), new Point(0.512573599815369, 0.803977847099304), "9");
addFace(["1748", "337", "1742", "1752"], "10");
setUVsToFace(new Point(0.598085761070251, 0.509170472621918), new Point(0.684334874153137, 0.509170472621918), new Point(0.684334874153137, 0.522043466567993), "10");
addFace(["2410", "702", "2400"], "11");
setUVsToFace(new Point(0.735975682735443, 0.586885750293732), new Point(0.735975682735443, 0.586885750293732), new Point(0.735975682735443, 0.586885750293732), "11");
addFace(["1312", "688", "156", "1141", "1353", "1357"], "12");
setUVsToFace(new Point(0.834522671706749, 0.130023194985228), new Point(0.826716542243958, 0.138771876692772), new Point(0.826716542243958, 0.0797142088413239), "12");
addFace(["39", "748", "33", "763"], "13");
setUVsToFace(new Point(0.811491250991821, 0.244706357032301), new Point(0.777154564857483, 0.244706362485886), new Point(0.777154564857483, 0.211880221962929), "13");
addFace(["1208", "156", "1401", "688", "1226", "1092", "1224"], "14");
setUVsToFace(new Point(0.332047663288194, 0.73690789937973), new Point(0.339981382839513, 0.753760576248169), new Point(0.293153047561646, 0.753760576248169), "14");
addFace(["2554", "2566", "2569"], "1039");
setUVsToFace(new Point(0.122805617749691, 0.182442933320999), new Point(0.165940180420876, 0.127479240298271), new Point(0.17140120267868, 0.127479240298271), "1039");
addFace(["2245", "516", "2254", "478", "2258"], "16");
setUVsToFace(new Point(0.836370289325714, 0.253115653991699), new Point(0.836369141851701, 0.299060580262705), new Point(0.831864051244285, 0.29906067572667), "16");
addFace(["1433", "2592", "1415", "691", "1479", "274"], "17");
setUVsToFace(new Point(0.856613457695271, 0.342297200889932), new Point(0.856613457202911, 0.380916118621826), new Point(0.846315026283264, 0.380916118621826), "17");
addFace(["654", "656", "2325", "370"], "18");
setUVsToFace(new Point(0.351081550121307, 0.83500611782074), new Point(0.351081550121307, 0.865372776985168), new Point(0.349150598049164, 0.863441824913025), "18");
addFace(["2907", "1819", "395", "1823"], "19");
setUVsToFace(new Point(0.676081717014313, 0.947715699672699), new Point(0.693175733089447, 0.947715699672699), new Point(0.693175733089447, 0.950934052467346), "19");
addFace(["368", "2006", "2794", "634", "633", "635"], "20");
setUVsToFace(new Point(0.826716542867612, 0.15065349464917), new Point(0.952228367328644, 0.15065349464917), new Point(0.952228367328644, 0.172944337129593), "20");
addFace(["2219", "478", "479", "653", "652", "476"], "21");
setUVsToFace(new Point(0.804652750492096, 0.121698711817191), new Point(0.740931392963311, 0.121698711817191), new Point(0.740931391716003, 0.104705728590488), "21");
addFace(["2835", "718", "777"], "22");
setUVsToFace(new Point(0.571064472198486, 0.182250112295151), new Point(0.571064472198486, 0.137540742754936), new Point(0.785399913787842, 0.137540742754936), "22");
addFace(["615", "1254", "155", "1207"], "23");
setUVsToFace(new Point(0.803473028543413, 0.0649776676055716), new Point(0.794534623622894, 0.0877178609371185), new Point(0.68577378988266, 0.032536257058382), "23");
addFace(["2075", "2815", "463", "2082"], "24");
setUVsToFace(new Point(0.814708054065704, 0.981599390506744), new Point(0.814708054065704, 0.979024767875671), new Point(0.820475280284882, 0.979024767875671), "24");
addFace(["1654", "1655", "328", "1662"], "25");
setUVsToFace(new Point(0.456884115934372, 0.626707971096039), new Point(0.456884115934372, 0.623984336853027), new Point(0.49421585819958, 0.623984336853027), "25");
addFace(["904", "609", "2772", "2773"], "26");
setUVsToFace(new Point(0.500416298796857, 0.588233158015793), new Point(0.498485267162323, 0.591451406478882), new Point(0.498485267162323, 0.561602056026459), "26");
addFace(["322", "2688", "2687", "1631"], "27");
setUVsToFace(new Point(0.266119778156281, 0.915376842021942), new Point(0.266119778156281, 0.929388225078583), new Point(0.249384850263596, 0.929388225078583), "27");
addFace(["2523", "2835", "725", "2465"], "28");
setUVsToFace(new Point(0.616415858268738, 0.448719143867493), new Point(0.616415858268738, 0.408169150352478), new Point(0.623114824295044, 0.413962011379957), "28");
addFace(["581", "1378", "1371", "2527"], "29");
setUVsToFace(new Point(0.569510757923126, 0.739960551261902), new Point(0.620359122753143, 0.739960551261902), new Point(0.620359122753143, 0.765706539154053), "29");
addFace(["2648", "567", "2615"], "1054");
setUVsToFace(new Point(0.271708905696869, 0.107619322836399), new Point(0.282624304294586, 0.0594313889741898), new Point(0.305745810270309, 0.0594313889741898), "1054");
addFace(["1252", "1253", "1254", "2061"], "31");
setUVsToFace(new Point(0.95537257194519, 0.386813282966614), new Point(0.95537257194519, 0.344438016414642), new Point(0.988008856773376, 0.336504280567169), "31");
addFace(["2963", "2375", "2943", "2389", "474"], "32");
setUVsToFace(new Point(0.356954485177994, 0.211340874433517), new Point(0.524092113146714, 0.230006729555013), new Point(0.473028957843781, 0.232581332325935), "32");
addFace(["2552", "2569", "2580", "1475"], "33");
setUVsToFace(new Point(0.265110969543457, 0.105688363313675), new Point(0.17140120267868, 0.127479240298271), new Point(0.203765415088509, 0.038748745048592), "33");
addFace(["1787", "379", "386", "1813"], "34");
setUVsToFace(new Point(0.0365388616919518, 0.726643237475911), new Point(0.0365388616919518, 0.749170899391174), new Point(0.0339341945946217, 0.743737161159515), "34");
addFace(["568", "1415", "345"], "1051");
setUVsToFace(new Point(0.278782963752747, 0.0387487448751926), new Point(0.278782963752747, 0.0284503474831581), new Point(0.282624304294586, 0.0317544341087341), "1051");
addFace(["245", "2560", "2705", "402", "1839"], "36");
setUVsToFace(new Point(0.138472020626068, 0.9360231757164), new Point(0.100011132657528, 0.9360231757164), new Point(0.100011132657528, 0.930562138557434), "36");
addFace(["40", "763", "770", "769"], "37");
setUVsToFace(new Point(0.145354479551315, 0.24987205862999), new Point(0.145354479551315, 0.247941106557846), new Point(0.154365599155426, 0.247941106557846), "37");
addFace(["1639", "1631", "2687", "1636"], "38");
setUVsToFace(new Point(0.682518243789673, 0.8699112743261), new Point(0.694103956222534, 0.866842031478882), new Point(0.694103956222534, 0.880853354930878), "38");
addFace(["2643", "2640", "2650"], "1063");
setUVsToFace(new Point(0.462648451328278, 0.0843723192811012), new Point(0.462648451328278, 0.0882342308759689), new Point(0.434327840805054, 0.0882342308759689), "1063");
addFace(["2370", "2375", "2945", "547"], "40");
setUVsToFace(new Point(0.743896881650541, 0.590862274169922), new Point(0.743896842002869, 0.596011459827423), new Point(0.727796614170074, 0.596011459827423), "40");
addFace(["1739", "2687", "2688", "2627"], "41");
setUVsToFace(new Point(0.467351853847504, 0.0317544341087341), new Point(0.49998015165329, 0.0663501247763634), new Point(0.483245223760605, 0.0663501247763634), "41");
addFace(["2040", "2061", "2054", "2059"], "42");
setUVsToFace(new Point(0.341073304414749, 0.886909008026123), new Point(0.341073304414749, 0.877254366874695), new Point(0.353946268558502, 0.877254366874695), "42");
addFace(["746", "2554", "31", "748", "39", "771"], "35");
setUVsToFace(new Point(0.265110969543457, 0.176329210400581), new Point(0.122805296934858, 0.182442924593031), new Point(0.265110969543457, 0.117113403975964), "35");
addFace(["1800", "385", "1803", "1799"], "44");
setUVsToFace(new Point(0.574483394622803, 0.215850040316582), new Point(0.576414287090302, 0.215850040316582), new Point(0.576414287090302, 0.224217489361763), "44");
addFace(["1713", "2648", "2615", "2620"], "45");
setUVsToFace(new Point(0.340768426656723, 0.062005989253521), new Point(0.271708905696869, 0.107619322836399), new Point(0.305745795415784, 0.059431402407588), "45");
addFace(["407", "1851", "405", "1869"], "46");
setUVsToFace(new Point(0.439463883638382, 0.25001934170723), new Point(0.439463883638382, 0.248088359832764), new Point(0.556608200073242, 0.248088359832764), "46");
addFace(["282", "1516", "1524", "1520"], "47");
setUVsToFace(new Point(0.599118769168854, 0.917409181594849), new Point(0.599118769168854, 0.924489259719849), new Point(0.569510757923126, 0.924489259719849), "47");
addFace(["2615", "2616", "2620"], "1055");
setUVsToFace(new Point(0.305745810270309, 0.0594313889741898), new Point(0.305745810270309, 0.0568567849695683), new Point(0.340768426656723, 0.0568567849695683), "1055");
addFace(["319", "1645", "2755", "1609"], "49");
setUVsToFace(new Point(0.539606928825378, 0.879912316799164), new Point(0.539606928825378, 0.890854239463806), new Point(0.529308497905731, 0.890854239463806), "49");
addFace(["2022", "2554", "1283", "1277", "1236", "1252", "449"], "50");
setUVsToFace(new Point(0.956956088542938, 0.395561963319778), new Point(0.868494852548643, 0.395561963319779), new Point(0.933987634899582, 0.386813282966614), "50");
addFace(["302", "2648", "1713", "564", "2650"], "51");
setUVsToFace(new Point(0.434327683392745, 0.101107236325013), new Point(0.271708905696869, 0.107619322836399), new Point(0.340768426656723, 0.062005989253521), "51");
addFace(["2048", "1254", "2029", "2064"], "52");
setUVsToFace(new Point(0.974334659959135, 0.379470737967822), new Point(0.988008856773376, 0.336504280567169), new Point(0.982058465480804, 0.389125496149063), "52");
addFace(["1329", "185", "1142", "1141"], "53");
setUVsToFace(new Point(0.898468494415283, 0.834264874458313), new Point(0.898468494415283, 0.836195766925812), new Point(0.869104623794556, 0.836195766925812), "53");
addFace(["2664", "302", "329", "334", "300"], "54");
setUVsToFace(new Point(0.581193829298366, 0.721899818639748), new Point(0.515541380336237, 0.721899818639748), new Point(0.515542328357697, 0.708768308162689), "54");
addFace(["2442", "2446", "65", "845"], "55");
setUVsToFace(new Point(0.916592121124268, 0.783914506435394), new Point(0.916592121124268, 0.781983613967896), new Point(0.948130905628204, 0.781983613967896), "55");
addFace(["479", "478", "2254", "2162"], "48");
setUVsToFace(new Point(0.815610052861778, 0.623984336853027), new Point(0.825908422470093, 0.637501001358032), new Point(0.796944260597229, 0.637501001358032), "48");
addFace(["2125", "2233", "2134", "2133"], "57");
setUVsToFace(new Point(0.923102021217346, 0.874960422515869), new Point(0.923102021217346, 0.876891255378723), new Point(0.908941686153412, 0.876891255378723), "57");
addFace(["2775", "1198", "1283", "1273"], "58");
setUVsToFace(new Point(0.927505731582642, 0.336504291533917), new Point(0.933987677097321, 0.344438016414642), new Point(0.933987677097321, 0.386813282966614), "58");
addFace(["823", "819", "817", "56"], "59");
setUVsToFace(new Point(0.74771910905838, 0.9276362657547), new Point(0.74771910905838, 0.926348924636841), new Point(0.767836511135101, 0.926348924636841), "59");
addFace(["1735", "1734", "1748", "1752"], "60");
setUVsToFace(new Point(0.964109847867586, 0.150653526186943), new Point(0.994361400604248, 0.150653526186943), new Point(0.994361400604248, 0.162239238619804), "60");
addFace(["2265", "2273", "520", "2902"], "61");
setUVsToFace(new Point(0.986746549606323, 0.739960551261902), new Point(0.986746549606323, 0.74253511428833), new Point(0.922381401062012, 0.74253511428833), "61");
addFace(["1191", "1192", "1283", "1198"], "62");
setUVsToFace(new Point(0.897557735443115, 0.763146162033081), new Point(0.855182409286499, 0.763146162033081), new Point(0.855182409286499, 0.761215209960938), "62");
addFace(["2357", "2099", "549", "548"], "63");
setUVsToFace(new Point(0.377707660198212, 0.717780411243439), new Point(0.503661180823696, 0.705164472778877), new Point(0.459451377391815, 0.719067752361298), "63");
addFace(["1735", "1711", "1706", "1734"], "64");
setUVsToFace(new Point(0.253993988037109, 0.451348751783371), new Point(0.253993988037109, 0.411014407873154), new Point(0.284245520830154, 0.411014407873154), "64");
addFace(["2832", "516", "368", "635"], "65");
setUVsToFace(new Point(0.170812657101459, 0.854242404268872), new Point(0.100011147558689, 0.854242742061615), new Point(0.150721207261086, 0.81369286775589), "65");
addFace(["1294", "1093", "1095", "232"], "66");
setUVsToFace(new Point(0.874857902526855, 0.857187271118164), new Point(0.874857902526855, 0.859118103981018), new Point(0.845699369907379, 0.859118103981018), "66");
addFace(["718", "2852", "645", "2870"], "67");
setUVsToFace(new Point(0.601959526538849, 0.408169134316644), new Point(0.604534149169922, 0.408169150352478), new Point(0.604534149169922, 0.458027690649033), "67");
addFace(["883", "2472", "2433", "2434"], "30");
setUVsToFace(new Point(0.372329652309418, 0.18614462018013), new Point(0.327274143695831, 0.18614462018013), new Point(0.327274143695831, 0.184213668107986), "30");
addFace(["2045", "449", "2040", "2059"], "69");
setUVsToFace(new Point(0.266763425837923, 0.903495132923126), new Point(0.249384850263596, 0.903495132923126), new Point(0.249384850263596, 0.898989677429199), "69");
addFace(["532", "2341", "2345", "531"], "70");
setUVsToFace(new Point(0.736335754394531, 0.794856667518616), new Point(0.736335754394531, 0.781983613967896), new Point(0.76529997587204, 0.781983613967896), "70");
addFace(["2029", "2718", "2034", "2038"], "71");
setUVsToFace(new Point(0.623006522655487, 0.859433770179749), new Point(0.623006522655487, 0.865870237350464), new Point(0.614317238330841, 0.865870237350464), "71");
addFace(["368", "516", "505", "2005"], "72");
setUVsToFace(new Point(0.150721207261086, 0.81369286775589), new Point(0.100011147558689, 0.854242742061615), new Point(0.115353553665509, 0.821574622547762), "72");
addFace(["33", "742", "744", "743"], "73");
setUVsToFace(new Point(0.127566039562225, 0.451348751783371), new Point(0.127566039562225, 0.444268614053726), new Point(0.186781853437424, 0.444268614053726), "73");
addFace(["1964", "1848", "1397", "953", "1875"], "74");
setUVsToFace(new Point(0.840701071516697, 0.0678325577801937), new Point(0.848985373973846, 0.044742614030838), new Point(0.977473795413971, 0.0146935051307082), "74");
addFace(["2388", "2389", "2943", "2387"], "75");
setUVsToFace(new Point(0.650781631469727, 0.881671488285065), new Point(0.650781631469727, 0.890682637691498), new Point(0.636201322078705, 0.890682637691498), "75");
addFace(["567", "345", "346", "1695"], "68");
setUVsToFace(new Point(0.832931220531464, 0.584129869937897), new Point(0.805254340171814, 0.584129869937897), new Point(0.805254340171814, 0.561602056026459), "68");
addFace(["942", "1036", "1005", "938"], "77");
setUVsToFace(new Point(0.0100776702165604, 0.969502985477448), new Point(0.0100776702165604, 0.960170149803162), new Point(0.0763736441731453, 0.960170149803162), "77");
addFace(["159", "161", "1073", "1071"], "78");
setUVsToFace(new Point(0.676081717014313, 0.892734885215759), new Point(0.691268920898438, 0.892734885215759), new Point(0.691268920898438, 0.905732989311218), "78");
addFace(["2598", "2552", "1475", "2587", "2592"], "79");
setUVsToFace(new Point(0.268484532833099, 0.0387487448751927), new Point(0.265110969543457, 0.105688363313675), new Point(0.214064083390891, 0.0387493962546497), "79");
addFace(["1415", "568", "1481", "1479", "691"], "80");
setUVsToFace(new Point(0.569510757923126, 0.843591570854187), new Point(0.569510757923126, 0.83329313993454), new Point(0.613922595977783, 0.83329313993454), "80");
addFace(["149", "1042", "150", "1034"], "81");
setUVsToFace(new Point(0.903030395507813, 0.591703414916992), new Point(0.903030395507813, 0.582370519638062), new Point(0.931798100471497, 0.582370519638062), "81");
addFace(["2155", "497", "2143", "2146"], "82");
setUVsToFace(new Point(0.65551084280014, 0.840431094169617), new Point(0.636201322078705, 0.840431094169617), new Point(0.636201322078705, 0.826270759105682), "82");
addFace(["534", "2341", "532", "2329"], "56");
setUVsToFace(new Point(0.760592103004456, 0.980312049388885), new Point(0.760592103004456, 0.982242941856384), new Point(0.74771910905838, 0.982242941856384), "56");
addFace(["2375", "2963", "2912", "2913", "2945"], "84");
setUVsToFace(new Point(0.524092264602009, 0.230006724596024), new Point(0.356954842618332, 0.211340923469321), new Point(0.551778078079224, 0.224857538938522), "84");
addFace(["276", "1474", "272", "1490"], "85");
setUVsToFace(new Point(0.541547358036041, 0.937349259853363), new Point(0.541547358036041, 0.927050888538361), new Point(0.551845788955688, 0.927050888538361), "85");
addFace(["1675", "2650", "2640", "1668"], "86");
setUVsToFace(new Point(0.474649786949158, 0.976998448371887), new Point(0.474649786949158, 0.990130066871643), new Point(0.446329146623611, 0.990130066871643), "86");
addFace(["242", "1500", "2538", "1388"], "87");
setUVsToFace(new Point(0.942127823829651, 0.0879235279941676), new Point(0.946230292320251, 0.0797142088413239), new Point(0.946230292320251, 0.138771876692772), "87");
addFace(["88", "416", "2166", "1782", "1939", "1940"], "88");
setUVsToFace(new Point(0.0706523209810257, 0.789877712726593), new Point(0.08416897803545, 0.824313044548035), new Point(0.0434608871392885, 0.843405940523909), "88");
addFace(["597", "598", "1759"], "1105");
setUVsToFace(new Point(0.206599920988083, 0.282300472259521), new Point(0.158326148986816, 0.282300472259521), new Point(0.204668968915939, 0.278604686260223), "1105");
addFace(["1226", "688", "2719", "165"], "90");
setUVsToFace(new Point(0.289672374725342, 0.73690789937973), new Point(0.280923694372177, 0.753760576248169), new Point(0.280923694372177, 0.705164933288955), "90");
addFace(["1114", "1111", "178", "1363"], "91");
setUVsToFace(new Point(0.844266951084137, 0.894664466381073), new Point(0.82722795009613, 0.894664466381073), new Point(0.82722795009613, 0.892733573913574), "91");
addFace(["2666", "2864", "903"], "92");
setUVsToFace(new Point(0.74771910905838, 0.910506725311279), new Point(0.78826904296875, 0.910506725311279), new Point(0.759948492050171, 0.910506725311279), "92");
addFace(["358", "2760", "602"], "1109");
setUVsToFace(new Point(0.63506418466568, 0.589280903339386), new Point(0.637638807296753, 0.561602056026459), new Point(0.637638807296753, 0.592976689338684), "1109");
addFace(["1645", "2674", "2755"], "1101");
setUVsToFace(new Point(0.300286889076233, 0.248088359832764), new Point(0.327320218086243, 0.248088359832764), new Point(0.31058531999588, 0.248088359832764), "1101");
addFace(["583", "2486", "2666", "2482"], "95");
setUVsToFace(new Point(0.51283997297287, 0.184680861869055), new Point(0.479446440935135, 0.188075572252274), new Point(0.479446440935135, 0.105688363313675), "95");
addFace(["3027", "291", "1541", "1529", "1551", "295", "3024", "292"], "96");
setUVsToFace(new Point(0.546952770075546, 0.910941600895415), new Point(0.544572761626745, 0.908514721934026), new Point(0.54460597038269, 0.905115842819214), "96");
addFace(["2640", "2643", "328", "1668"], "97");
setUVsToFace(new Point(0.573372721672058, 0.905527591705322), new Point(0.569510757923126, 0.905527591705322), new Point(0.569510757923126, 0.88879264088716), "97");
addFace(["777", "2856", "636", "13"], "98");
setUVsToFace(new Point(0.785399913787842, 0.137540756287164), new Point(0.788618206977844, 0.137540742754936), new Point(0.788618206977844, 0.187399297952652), "98");
addFace(["607", "608", "88"], "1123");
setUVsToFace(new Point(0.372524231672287, 0.451348751783371), new Point(0.288206070661545, 0.451348751783371), new Point(0.369305998086929, 0.447486817836761), "1123");
addFace(["395", "1819", "398", "1817"], "100");
setUVsToFace(new Point(0.74771910905838, 0.964469969272614), new Point(0.74771910905838, 0.961251616477966), new Point(0.759462773799896, 0.961251616477966), "100");
addFace(["2211", "603", "606"], "1117");
setUVsToFace(new Point(0.367843747138977, 0.832919120788574), new Point(0.420484721660614, 0.836781084537506), new Point(0.366121977567673, 0.836781084537506), "1117");
addFace(["2400", "702", "2398", "2979", "2832"], "39");
setUVsToFace(new Point(0.133690878748894, 0.324622690677643), new Point(0.00499999048067035, 0.324622620240384), new Point(0.133690853988475, 0.293728023129935), "39");
addFace(["1922", "1960", "86", "1964"], "103");
setUVsToFace(new Point(0.965373277664185, 0.411675661802292), new Point(0.982486844062805, 0.408942937850952), new Point(0.982486844062805, 0.436134368181229), "103");
addFace(["1767", "7", "2490", "1759", "366"], "104");
setUVsToFace(new Point(0.243691727519035, 0.419111162424088), new Point(0.243691727519035, 0.455799251794815), new Point(0.192843383760188, 0.455799351267202), "104");
addFace(["2850", "2502", "27", "640"], "105");
setUVsToFace(new Point(0.907250761985779, 0.672554016113281), new Point(0.907250761985779, 0.670623064041138), new Point(0.942007839679718, 0.670623064041138), "105");
addFace(["864", "2435", "851", "860"], "106");
setUVsToFace(new Point(0.325979202985764, 0.92424464225769), new Point(0.325979202985764, 0.955783426761627), new Point(0.280923694372177, 0.955783426761627), "106");
addFace(["688", "1401", "3044", "1413"], "107");
setUVsToFace(new Point(0.947895656073771, 0.547145783901215), new Point(0.947895646095276, 0.534916460514069), new Point(0.982374548912048, 0.534916460514069), "107");
addFace(["1329", "1136", "183", "185"], "108");
setUVsToFace(new Point(0.762906312942505, 0.945409297943115), new Point(0.74771910905838, 0.945409297943115), new Point(0.74771910905838, 0.943478465080261), "108");
addFace(["150", "138", "1003", "1034"], "109");
setUVsToFace(new Point(0.976552665233612, 0.874960422515869), new Point(0.976552665233612, 0.876247763633728), new Point(0.967219710350037, 0.876247763633728), "109");
addFace(["746", "2523", "2537", "2554"], "93");
setUVsToFace(new Point(0.265110969543457, 0.176329210400581), new Point(0.265110961842356, 0.188075543718845), new Point(0.00499999988824129, 0.195780947804451), "93");
addFace(["603", "2211", "374", "1996"], "111");
setUVsToFace(new Point(0.420484721660614, 0.836781084537506), new Point(0.367843747138977, 0.832919120788574), new Point(0.367843734708386, 0.797639409576401), "111");
addFace(["155", "619", "614", "1500"], "112");
setUVsToFace(new Point(0.68577378988266, 0.032536257058382), new Point(0.683291673660278, 0.0318521484732628), new Point(0.690692901611328, 0.00499999988824129), "112");
addFace(["156", "614", "616"], "1137");
setUVsToFace(new Point(0.807447493076324, 0.0408692732453346), new Point(0.690692901611328, 0.00499999988824129), new Point(0.810874342918396, 0.0381255187094212), "1137");
addFace(["864", "860", "20", "858"], "114");
setUVsToFace(new Point(0.777746319770813, 0.727864325046539), new Point(0.732690751552582, 0.727864325046539), new Point(0.732690751552582, 0.725933432579041), "114");
addFace(["960", "129", "2859", "131"], "115");
setUVsToFace(new Point(0.865992784500122, 0.783914506435394), new Point(0.865992784500122, 0.781983613967896), new Point(0.900749921798706, 0.781983613967896), "115");
addFace(["2099", "2204", "474", "2923"], "99");
setUVsToFace(new Point(0.428693115711212, 0.963476538658142), new Point(0.428693115711212, 0.980211496353149), new Point(0.405779242515564, 0.980211496353149), "99");
addFace(["1848", "1964", "1928", "100"], "117");
setUVsToFace(new Point(0.848985373973846, 0.044742614030838), new Point(0.840701282024384, 0.0678325667977333), new Point(0.826716542243958, 0.00803427584469318), "117");
addFace(["2433", "878", "877", "2434"], "110");
setUVsToFace(new Point(0.36612194776535, 0.928771197795868), new Point(0.36612194776535, 0.897232294082642), new Point(0.411177486181259, 0.897232294082642), "110");
addFace(["1445", "1440", "1450", "1429"], "119");
setUVsToFace(new Point(0.841750681400299, 0.623984336853027), new Point(0.870218455791473, 0.623984336853027), new Point(0.870218455791473, 0.634282767772675), "119");
addFace(["134", "2871", "2597", "2648"], "120");
setUVsToFace(new Point(0.782476305961609, 0.857187271118164), new Point(0.782476305961609, 0.859118103981018), new Point(0.74771910905838, 0.859118103981018), "120");
addFace(["1254", "615", "620"], "1145");
setUVsToFace(new Point(0.794534623622894, 0.0877178609371185), new Point(0.803473055362701, 0.0649776756763458), new Point(0.796071827411652, 0.0918298438191414), "1145");
addFace(["1600", "1608", "1609", "1595"], "122");
setUVsToFace(new Point(0.266861975193024, 0.968452095985413), new Point(0.266861975193024, 0.971026718616486), new Point(0.253345400094986, 0.971026718616486), "122");
addFace(["2775", "620", "621"], "1147");
setUVsToFace(new Point(0.736206591129303, 0.0716409385204315), new Point(0.796071827411652, 0.0918298438191414), new Point(0.735261797904968, 0.0750688016414642), "1147");
addFace(["2277", "2278", "522", "2281"], "116");
setUVsToFace(new Point(0.77497524023056, 0.763789772987366), new Point(0.77497524023056, 0.761215209960938), new Point(0.839340329170227, 0.761215209960938), "116");
addFace(["622", "2778", "378"], "1149");
setUVsToFace(new Point(0.446329176425934, 0.779101550579071), new Point(0.446329176425934, 0.739960432052612), new Point(0.448260128498077, 0.775239646434784), "1149");
addFace(["1481", "568", "2598", "1486", "1485"], "126");
setUVsToFace(new Point(0.749353269999018, 0.68092143535614), new Point(0.70494145154953, 0.68092143535614), new Point(0.70494145154953, 0.670623064041138), "126");
addFace(["352", "2627", "2643", "2650", "564"], "127");
setUVsToFace(new Point(0.381102740764618, 0.0446274317800999), new Point(0.467351907158901, 0.0446274587120312), new Point(0.462648475414347, 0.0843723358410976), "127");
addFace(["3027", "1559", "290", "291"], "128");
setUVsToFace(new Point(0.759133100509644, 0.765377938747406), new Point(0.676081717014313, 0.766141533851624), new Point(0.676081717014313, 0.761215209960938), "128");
addFace(["468", "2375", "2370", "540"], "129");
setUVsToFace(new Point(0.349446564912796, 0.952861130237579), new Point(0.337860852479935, 0.952861130237579), new Point(0.337860852479935, 0.947711944580078), "129");
addFace(["2859", "2864", "2870", "2871"], "113");
setUVsToFace(new Point(0.0877930769588179, 0.488277733325958), new Point(0.0821617022156715, 0.482484847307205), new Point(0.296497225761414, 0.482484847307205), "113");
addFace(["377", "2191", "2792"], "1155");
setUVsToFace(new Point(0.170812666416168, 0.775966584682465), new Point(0.128331750631332, 0.775966584682465), new Point(0.143779367208481, 0.745071351528168), "1155");
addFace(["76", "891", "80", "2464"], "132");
setUVsToFace(new Point(0.446329176425934, 0.871091723442078), new Point(0.446329176425934, 0.839552938938141), new Point(0.491384655237198, 0.839552938938141), "132");
addFace(["436", "2006", "368", "2005"], "133");
setUVsToFace(new Point(0.648601710796356, 0.257627815008163), new Point(0.705886602401733, 0.266638904809952), new Point(0.580374883823886, 0.266638904809952), "133");
addFace(["2067", "2064", "2029", "2038"], "134");
setUVsToFace(new Point(0.498537600040436, 0.890697240829468), new Point(0.489848345518112, 0.890697240829468), new Point(0.489848345518112, 0.882973432540894), "134");
addFace(["770", "743", "2422", "771"], "118");
setUVsToFace(new Point(0.820502400398254, 0.22604051232338), new Point(0.836370289325714, 0.211880221962929), new Point(0.836370289325714, 0.244706372076673), "118");
addFace(["1541", "1540", "1530", "1529"], "136");
setUVsToFace(new Point(0.807645678520203, 0.744123160839081), new Point(0.724594414234161, 0.744886815547943), new Point(0.724594414234161, 0.739960687580851), "136");
addFace(["1481", "1485", "274", "1479"], "137");
setUVsToFace(new Point(0.42305913567543, 0.897232294082642), new Point(0.433357536792755, 0.897232294082642), new Point(0.433357536792755, 0.907530725002289), "137");
addFace(["627", "629", "363"], "1162");
setUVsToFace(new Point(0.149299770593643, 0.693283319473267), new Point(0.00499999988824129, 0.693283319473267), new Point(0.1473688185215, 0.689421415328979), "1162");
addFace(["80", "900", "79", "2464"], "139");
setUVsToFace(new Point(0.0365388542413712, 0.720751643180847), new Point(0.0365388542413712, 0.722682595252991), new Point(0.00499999988824129, 0.722682595252991), "139");
addFace(["2702", "1705", "1688", "593"], "140");
setUVsToFace(new Point(0.783865034580231, 0.364469558000565), new Point(0.783865034580231, 0.34709095954895), new Point(0.818887650966644, 0.34709095954895), "140");
addFace(["2486", "2493", "2537", "2850"], "141");
setUVsToFace(new Point(0.479446440935135, 0.188075572252274), new Point(0.556608200073242, 0.195780947804451), new Point(0.00499999988824129, 0.195780947804451), "141");
addFace(["2265", "2281", "522", "2273"], "142");
setUVsToFace(new Point(0.824314832687378, 0.395372420549393), new Point(0.782477617263794, 0.395372420549393), new Point(0.782477617263794, 0.39279779791832), "142");
addFace(["2162", "3015", "2282", "2963"], "143");
setUVsToFace(new Point(0.293233122695387, 0.211340872940076), new Point(0.133690878748894, 0.207662612199783), new Point(0.556608200073242, 0.207662627100945), "143");
addFace(["1254", "1207", "156", "1208", "1211"], "94");
setUVsToFace(new Point(0.339981406927109, 0.705164968967438), new Point(0.350279824812785, 0.729462785067271), new Point(0.339981406927109, 0.753760576248169), "94");
addFace(["1283", "1192", "202", "1277"], "145");
setUVsToFace(new Point(0.800499856472015, 0.174623414874077), new Point(0.800499856472015, 0.172692462801933), new Point(0.809464335441589, 0.172692462801933), "145");
addFace(["1233", "2554", "1504", "213"], "138");
setUVsToFace(new Point(0.908401370048523, 0.357101082801819), new Point(0.868494987487793, 0.395561963319778), new Point(0.868495001793555, 0.336504272519291), "138");
addFace(["79", "900", "72", "2472"], "130");
setUVsToFace(new Point(0.0572459250688553, 0.642997980117798), new Point(0.0572459250688553, 0.611459016799927), new Point(0.0604641810059547, 0.611459016799927), "130");
addFace(["304", "1568", "300", "334"], "131");
setUVsToFace(new Point(0.543862998485565, 0.705164982770331), new Point(0.581194639205933, 0.705164968967438), new Point(0.581194639205933, 0.710957825183868), "131");
addFace(["509", "2963", "474", "2902", "2277"], "149");
setUVsToFace(new Point(0.356954402470141, 0.224857538938522), new Point(0.356954485177994, 0.211340874433517), new Point(0.414239346981049, 0.224857538938522), "149");
addFace(["1529", "1530", "1553", "1551"], "150");
setUVsToFace(new Point(0.556112766265869, 0.674785852432251), new Point(0.473061382770538, 0.675549328327179), new Point(0.473061382770538, 0.670623058898424), "150");
addFace(["904", "1972", "91"], "151");
setUVsToFace(new Point(0.18665486574173, 0.774975121021271), new Point(0.263721972703934, 0.774975121021271), new Point(0.263721972703934, 0.785431683063507), "151");
addFace(["39", "759", "773", "771"], "125");
setUVsToFace(new Point(0.272191137075424, 0.151450097560883), new Point(0.274122089147568, 0.151450097560883), new Point(0.274122089147568, 0.160461202263832), "125");
addFace(["1081", "1089", "1226", "165"], "153");
setUVsToFace(new Point(0.817109286785126, 0.912437617778778), new Point(0.804111242294312, 0.912437617778778), new Point(0.804111242294312, 0.910506725311279), "153");
addFace(["302", "2650", "1675", "329"], "146");
setUVsToFace(new Point(0.512573599815369, 0.939923882484436), new Point(0.512573599815369, 0.927050888538361), new Point(0.525705218315125, 0.927050888538361), "146");
addFace(["1440", "270", "1454", "1450"], "155");
setUVsToFace(new Point(0.154365599155426, 0.253832638263702), new Point(0.154365599155426, 0.282300472259521), new Point(0.144067198038101, 0.282300472259521), "155");
addFace(["636", "637", "13"], "1180");
setUVsToFace(new Point(0.788618206977844, 0.187399297952652), new Point(0.568489849567413, 0.187399297952652), new Point(0.785399913787842, 0.182250112295151), "1180");
addFace(["904", "2773", "1969"], "157");
setUVsToFace(new Point(0.500416278839111, 0.588233172893524), new Point(0.500416278839111, 0.561602056026459), new Point(0.577483355998993, 0.561602056026459), "157");
addFace(["2974", "2196", "472", "2912"], "158");
setUVsToFace(new Point(0.568489730358124, 0.299060939189493), new Point(0.568489730358124, 0.270740330219269), new Point(0.573319852352142, 0.2761470079422), "158");
addFace(["532", "531", "2333", "2329"], "159");
setUVsToFace(new Point(0.789627969264984, 0.725933432579041), new Point(0.818592131137848, 0.725933432579041), new Point(0.818592131137848, 0.727864325046539), "159");
addFace(["86", "1960", "117", "1965"], "160");
setUVsToFace(new Point(0.0434608771750736, 0.705164912961692), new Point(0.0706523209810257, 0.705164968967438), new Point(0.08416897803545, 0.739600241184235), "160");
addFace(["888", "2457", "721", "892"], "161");
setUVsToFace(new Point(0.0121904201805592, 0.642997980117798), new Point(0.00499999988824129, 0.642997980117798), new Point(0.00499999988824129, 0.608240842819214), "161");
addFace(["2826", "555", "2798", "2815"], "162");
setUVsToFace(new Point(0.550252801698861, 0.266439318656921), new Point(0.556608200073242, 0.282300472259521), new Point(0.414239406585693, 0.282300472259521), "162");
addFace(["1253", "1252", "1170", "194"], "163");
setUVsToFace(new Point(0.84881716966629, 0.810055196285248), new Point(0.806441903114319, 0.810055196285248), new Point(0.806441903114319, 0.808124244213104), "163");
addFace(["248", "1417", "81", "681"], "164");
setUVsToFace(new Point(0.709926843643188, 0.32317191362381), new Point(0.709926843643188, 0.310942560434341), new Point(0.787164926528931, 0.310942560434341), "164");
addFace(["1787", "516", "2832", "2979"], "165");
setUVsToFace(new Point(0.243755042552948, 0.24546018242836), new Point(0.288727581501007, 0.224857538938522), new Point(0.288727581501007, 0.295659044792623), "165");
addFace(["1983", "1977", "88", "1940", "1939"], "89");
setUVsToFace(new Point(0.848252058029175, 0.234854057431221), new Point(0.848252058029175, 0.207662627100945), new Point(0.926777362823486, 0.207662627100945), "89");
addFace(["1892", "1896", "1897", "917"], "167");
setUVsToFace(new Point(0.356381219943225, 0.565463960170746), new Point(0.473279178142548, 0.565463960170746), new Point(0.479879677295685, 0.570746600627899), "167");
addFace(["345", "567", "2648", "2597", "568"], "168");
setUVsToFace(new Point(0.282624304294586, 0.0317544341087341), new Point(0.282624304294586, 0.0594313889741898), new Point(0.271708905696869, 0.107619322836399), "168");
addFace(["2719", "2577", "2034", "2718"], "152");
setUVsToFace(new Point(0.122805617749691, 0.062929131090641), new Point(0.203765297098222, 0.0284503665672035), new Point(0.131494879722595, 0.0688795149326324), "152");
addFace(["497", "2155", "2256", "510"], "170");
setUVsToFace(new Point(0.992954313755035, 0.625915348529816), new Point(0.9736447930336, 0.625915348529816), new Point(0.9736447930336, 0.623984336853027), "170");
addFace(["282", "1520", "1509", "1513"], "171");
setUVsToFace(new Point(0.129619047045708, 0.97915780544281), new Point(0.100011132657528, 0.97915780544281), new Point(0.100011132657528, 0.942469656467438), "171");
addFace(["2223", "492", "2256", "2222"], "172");
setUVsToFace(new Point(0.973471701145172, 0.837615847587585), new Point(0.959311366081238, 0.837615847587585), new Point(0.959311366081238, 0.834264874458313), "172");
addFace(["2388", "2387", "548", "549"], "173");
setUVsToFace(new Point(0.755778431892395, 0.58571303888627), new Point(0.770358622074127, 0.585713028907776), new Point(0.770358622074127, 0.594724178314209), "173");
addFace(["853", "20", "860", "851"], "174");
setUVsToFace(new Point(0.798318386077881, 0.857187271118164), new Point(0.829857170581818, 0.857187271118164), new Point(0.829857170581818, 0.859118103981018), "174");
addFace(["1390", "2537", "2737", "2527"], "175");
setUVsToFace(new Point(0.0484640300273895, 0.178340434061995), new Point(0.00499999988824129, 0.195780947804451), new Point(0.00499999988824129, 0.00499999988824129), "175");
addFace(["2999", "932", "937", "3000"], "176");
setUVsToFace(new Point(0.587025105953217, 0.364469558000565), new Point(0.587025105953217, 0.340654462575912), new Point(0.653321027755737, 0.340654462575912), "176");
addFace(["2615", "567", "1695", "1722"], "177");
setUVsToFace(new Point(0.993319392204285, 0.230190366506577), new Point(0.970197916030884, 0.230190366506577), new Point(0.970197916030884, 0.207662612199783), "177");
addFace(["213", "618", "617", "1504"], "178");
setUVsToFace(new Point(0.717789006284088, 0.0665645098088034), new Point(0.716844141483307, 0.0699923783540726), new Point(0.675890445709229, 0.0587043240666389), "178");
addFace(["1928", "2954", "2174", "2173", "427"], "179");
setUVsToFace(new Point(0.0434608832001686, 0.858748257160187), new Point(0.00499999988824129, 0.858748257160187), new Point(0.0376680381596088, 0.852778971195221), "179");
addFace(["2991", "2979", "1780", "1817"], "180");
setUVsToFace(new Point(0.654217123985291, 0.727692663669586), new Point(0.623327791690826, 0.727692663669586), new Point(0.623327791690826, 0.705164942214301), "180");
addFace(["1224", "1092", "1086", "1064"], "181");
setUVsToFace(new Point(0.316860496997833, 0.73690789937973), new Point(0.306711465120316, 0.73690789937973), new Point(0.306711465120316, 0.723909795284271), "181");
addFace(["2213", "1993", "370", "2325"], "182");
setUVsToFace(new Point(0.280923694372177, 0.863441824913025), new Point(0.280923694372177, 0.83500611782074), new Point(0.349150598049164, 0.83500611782074), "182");
addFace(["2760", "358", "1767", "366", "1764"], "183");
setUVsToFace(new Point(0.637638807296753, 0.561602056026459), new Point(0.63506418466568, 0.589280903339386), new Point(0.591296338337852, 0.589280903339386), "183");
addFace(["643", "2856", "777", "2864"], "184");
setUVsToFace(new Point(0.384405851364136, 0.458027690649033), new Point(0.384405851364136, 0.408169150352478), new Point(0.387624084949493, 0.408169150352478), "184");
addFace(["349", "1711", "1713", "2620"], "185");
setUVsToFace(new Point(0.320240080356598, 0.277151256799698), new Point(0.327320218086243, 0.282300472259521), new Point(0.302861491238535, 0.282300472259521), "185");
addFace(["2963", "509", "2219", "476"], "186");
setUVsToFace(new Point(0.569510757923126, 0.872950315475464), new Point(0.569510757923126, 0.859433770179749), new Point(0.598475102127622, 0.859433770179749), "186");
addFace(["637", "2852", "718", "2835"], "187");
setUVsToFace(new Point(0.568489849567413, 0.187399297952652), new Point(0.568489849567413, 0.137540742754936), new Point(0.571064472198486, 0.137540742754936), "187");
addFace(["1504", "155", "2775", "213"], "188");
setUVsToFace(new Point(0.679317272094779, 0.0559605709524792), new Point(0.68577378988266, 0.032536257058382), new Point(0.736206591129303, 0.0716409385204315), "188");
addFace(["1873", "1869", "405", "1868"], "189");
setUVsToFace(new Point(0.814708054065704, 0.961251616477966), new Point(0.822431921958923, 0.961251616477966), new Point(0.822431921958923, 0.963182508945465), "189");
addFace(["134", "2648", "960", "131"], "190");
setUVsToFace(new Point(0.20710614323616, 0.561602056026459), new Point(0.20710614323616, 0.596359193325043), new Point(0.00499999988824129, 0.596359193325043), "190");
addFace(["835", "842", "61", "2443"], "191");
setUVsToFace(new Point(0.54411244392395, 0.973539352416992), new Point(0.54411244392395, 0.975470244884491), new Point(0.512573599815369, 0.975470244884491), "191");
addFace(["1504", "617", "619", "155"], "154");
setUVsToFace(new Point(0.679317355155945, 0.0559605807065964), new Point(0.675890445709229, 0.0587043240666389), new Point(0.683291673660278, 0.0318521484732628), "154");
addFace(["2325", "656", "655", "2213"], "193");
setUVsToFace(new Point(0.349150598049164, 0.863441824913025), new Point(0.351081550121307, 0.865372776985168), new Point(0.280923694372177, 0.865372776985168), "193");
addFace(["1977", "117", "416"], "194");
setUVsToFace(new Point(0.290780663490295, 0.447486817836761), new Point(0.290780663490295, 0.410493791103363), new Point(0.369305968284607, 0.410493791103363), "194");
addFace(["2398", "702", "3002", "2895"], "195");
setUVsToFace(new Point(0.13369087946325, 0.293728097495619), new Point(0.00499999988824129, 0.324622690677643), new Point(0.0566237196326256, 0.28361040353775), "195");
addFace(["2963", "2282", "2974", "2912"], "196");
setUVsToFace(new Point(0.356953379648309, 0.211340886947038), new Point(0.556608200073242, 0.207662627100945), new Point(0.556608200073242, 0.224857538938522), "196");
addFace(["2859", "2871", "134", "131"], "197");
setUVsToFace(new Point(0.770595908164978, 0.394728749990463), new Point(0.568489789962769, 0.394728749990463), new Point(0.568489789962769, 0.39279779791832), "197");
addFace(["614", "156", "1207", "1500"], "198");
setUVsToFace(new Point(0.690692954801253, 0.0049999978399203), new Point(0.807447493076324, 0.0408692732453346), new Point(0.800990998744965, 0.0642935261130333), "198");
addFace(["349", "2620", "2616", "1718"], "199");
setUVsToFace(new Point(0.993134617805481, 0.116698198020458), new Point(0.993134617805481, 0.134076744318008), new Point(0.958111941814423, 0.134076744318008), "199");
addFace(["942", "938", "937", "932"], "123");
setUVsToFace(new Point(0.0778584703803062, 0.506565928459167), new Point(0.0115624964237213, 0.506565928459167), new Point(0.0115624964237213, 0.485325515270233), "123");
addFace(["2191", "658", "657", "2196"], "201");
setUVsToFace(new Point(0.992551793688455, 0.319738447666168), new Point(0.992551803588867, 0.322634875774384), new Point(0.848252058029175, 0.322634875774384), "201");
addFace(["1964", "1875", "927", "1883"], "202");
setUVsToFace(new Point(0.486603649714003, 0.58606082201004), new Point(0.356381207704544, 0.58606082201004), new Point(0.364022672176361, 0.577826797962189), "202");
addFace(["2258", "478", "2219", "510", "2256"], "203");
setUVsToFace(new Point(0.83197122810514, 0.267275929450989), new Point(0.831864774227142, 0.270096659660339), new Point(0.768143475055695, 0.270096659660339), "203");
addFace(["2705", "2577", "2580", "2569"], "204");
setUVsToFace(new Point(0.17140120267868, 0.123432252104449), new Point(0.20376543700695, 0.0284503474831581), new Point(0.20376543700695, 0.0387487448751926), "204");
addFace(["786", "2666", "2486", "823", "56", "47"], "205");
setUVsToFace(new Point(0.259387314319611, 0.750660240650177), new Point(0.269042044878006, 0.763093531131744), new Point(0.186654780332539, 0.763093531131744), "205");
addFace(["553", "2387", "2943", "2919"], "206");
setUVsToFace(new Point(0.343515425920486, 0.967665135860443), new Point(0.352526515722275, 0.967665135860443), new Point(0.352526515722275, 0.976676225662231), "206");
addFace(["927", "1875", "1892", "917"], "1231");
setUVsToFace(new Point(0.364022672176361, 0.577826775471178), new Point(0.356381207704544, 0.58606082201004), new Point(0.356381207704544, 0.565463960170746), "1231");
addFace(["9", "2297", "2303", "2284"], "208");
setUVsToFace(new Point(0.181743294000626, 0.459661155939102), new Point(0.372524231672287, 0.470603197813034), new Point(0.00499991920768861, 0.470603197813034), "208");
addFace(["1475", "2580", "1474", "276", "1457"], "209");
setUVsToFace(new Point(0.676081717014313, 0.818422675132751), new Point(0.676081717014313, 0.808124244213104), new Point(0.72049355506897, 0.808124244213104), "209");
addFace(["1597", "312", "1600", "1595"], "210");
setUVsToFace(new Point(0.636201322078705, 0.865829288959503), new Point(0.636201322078705, 0.852312743663788), new Point(0.652936220169067, 0.852312743663788), "210");
addFace(["386", "385", "1800", "1810"], "211");
setUVsToFace(new Point(0.914910972118378, 0.724869012832642), new Point(0.888521432876587, 0.724869012832642), new Point(0.888521432876587, 0.722938120365143), "211");
addFace(["463", "2797", "363", "2808"], "212");
setUVsToFace(new Point(0.419644736724677, 0.260672062635422), new Point(0.414239406585693, 0.253979861736298), new Point(0.556608200073242, 0.253979861736298), "212");
addFace(["1698", "346", "345", "593", "1688"], "213");
setUVsToFace(new Point(0.818887650966644, 0.341941743622229), new Point(0.842009246349335, 0.341941743622229), new Point(0.842009246349335, 0.364469558000565), "213");
addFace(["1739", "2675", "1645", "2681", "2687"], "214");
setUVsToFace(new Point(0.467351853847504, 0.0317544341087341), new Point(0.556607915976789, 0.00499998774574295), new Point(0.530231624226742, 0.0740739018950784), "214");
addFace(["31", "2554", "2569", "2552"], "207");
setUVsToFace(new Point(0.26511097273087, 0.117113403859521), new Point(0.122805617749691, 0.182442933320999), new Point(0.17140120267868, 0.127479240298271), "207");
addFace(["178", "1345", "1329", "1328", "1294", "1363"], "124");
setUVsToFace(new Point(0.8695108294487, 0.130023197120139), new Point(0.863886475563049, 0.130023211240768), new Point(0.863886475563049, 0.0876479392659642), "124");
addFace(["72", "878", "2433", "2472"], "217");
setUVsToFace(new Point(0.779257953166962, 0.874960422515869), new Point(0.779257953166962, 0.876891255378723), new Point(0.74771910905838, 0.876891255378723), "217");
addFace(["650", "2879", "416", "117", "2878", "649", "1960", "427"], "218");
setUVsToFace(new Point(0.652807950973511, 0.0171363912522793), new Point(0.652807955962711, 0.0541294701397419), new Point(0.649589717388153, 0.0541294701397419), "218");
addFace(["150", "1042", "1041", "138"], "219");
setUVsToFace(new Point(0.963973104953766, 0.781983613967896), new Point(0.992740750312805, 0.781983613967896), new Point(0.992740750312805, 0.783270955085754), "219");
addFace(["662", "713", "3001", "3002", "702"], "220");
setUVsToFace(new Point(0.00499999988824129, 0.28361040353775), new Point(0.00499999988824129, 0.207662627808591), new Point(0.0566237196326256, 0.234049328505931), "220");
addFace(["1568", "1655", "1564", "300"], "221");
setUVsToFace(new Point(0.963283469235253, 0.705164968967438), new Point(0.980018377304077, 0.705164968967438), new Point(0.980018377304077, 0.710957765579224), "221");
addFace(["1178", "194", "1170", "1180"], "222");
setUVsToFace(new Point(0.903787612915039, 0.509170472621918), new Point(0.903787612915039, 0.518085598945618), new Point(0.861412405967712, 0.518085598945618), "222");
addFace(["538", "472", "471", "470"], "223");
setUVsToFace(new Point(0.68638014793396, 0.839414119720459), new Point(0.698995649814606, 0.834264874458313), new Point(0.698995649814606, 0.850999772548676), "223");
addFace(["1073", "161", "1211", "1208"], "224");
setUVsToFace(new Point(0.341073304414749, 0.898790717124939), new Point(0.354071348905563, 0.898790717124939), new Point(0.354071348905563, 0.900721609592438), "224");
addFace(["182", "1363", "1294", "232"], "225");
setUVsToFace(new Point(0.898669421672821, 0.112984113395214), new Point(0.8695108294487, 0.112984113395214), new Point(0.8695108294487, 0.102835081517696), "225");
addFace(["2674", "1597", "1595", "1609", "2755"], "226");
setUVsToFace(new Point(0.512573599815369, 0.890854239463806), new Point(0.512573599815369, 0.877337694168091), new Point(0.529308497905731, 0.877337694168091), "226");
addFace(["1005", "1036", "1003"], "227");
setUVsToFace(new Point(0.81370598077774, 0.342870861291885), new Point(0.81370598077774, 0.342870861291885), new Point(0.81370598077774, 0.342870861291885), "227");
addFace(["1005", "1003", "1013"], "228");
setUVsToFace(new Point(0.81370598077774, 0.342870861291885), new Point(0.81370598077774, 0.342870861291885), new Point(0.81370598077774, 0.342870861291885), "228");
addFace(["322", "1631", "1654", "1662"], "229");
setUVsToFace(new Point(0.98822009563446, 0.242072001099586), new Point(0.98822009563446, 0.25880691409111), new Point(0.970197916030884, 0.25880691409111), "229");
addFace(["1553", "1549", "295", "1551"], "230");
setUVsToFace(new Point(0.762518882751465, 0.514096662006669), new Point(0.762518882751465, 0.509170472621918), new Point(0.845570147037506, 0.509934067726135), "230");
addFace(["1812", "1799", "1803", "1813"], "231");
setUVsToFace(new Point(0.623328387737274, 0.942262470722198), new Point(0.596938729286194, 0.942262470722198), new Point(0.596938729286194, 0.940331637859344), "231");
addFace(["3007", "136", "2999", "3000"], "215");
setUVsToFace(new Point(0.0623172298073769, 0.234049335122108), new Point(0.128613203763962, 0.234049335122108), new Point(0.128613203763962, 0.255289763212204), "215");
addFace(["858", "866", "2435", "864"], "233");
setUVsToFace(new Point(0.944938778877258, 0.763146102428436), new Point(0.913399875164032, 0.763146102428436), new Point(0.913399875164032, 0.761215209960938), "233");
addFace(["156", "1500", "242", "1378", "1334"], "234");
setUVsToFace(new Point(0.826716542243958, 0.0797142088413239), new Point(0.946230292320251, 0.0797142088413239), new Point(0.942127823829651, 0.0879235342144966), "234");
addFace(["1787", "2979", "2991"], "1251");
setUVsToFace(new Point(0.100011147558689, 0.994999945163727), new Point(0.148279055953026, 0.994999945163727), new Point(0.11738970130682, 0.994999945163727), "1251");
addFace(["583", "1765", "534", "2329"], "236");
setUVsToFace(new Point(0.36612196772235, 0.885350805093313), new Point(0.36612194776535, 0.848662614822388), new Point(0.373285353183746, 0.855313777923584), "236");
addFace(["674", "654", "370"], "1253");
setUVsToFace(new Point(0.112909153103828, 0.4374058842659), new Point(0.112909153103828, 0.408970147371292), new Point(0.114840090274811, 0.408970147371292), "1253");
addFace(["805", "801", "802", "786"], "238");
setUVsToFace(new Point(0.890111684799194, 0.892733573913574), new Point(0.902544856071472, 0.892733573913574), new Point(0.902544856071472, 0.894020915031433), "238");
addFace(["502", "505", "2188", "2166"], "239");
setUVsToFace(new Point(0.821953177452087, 0.460600733757019), new Point(0.821953177452087, 0.46639358997345), new Point(0.745441794395447, 0.46639358997345), "239");
addFace(["2045", "2018", "2020", "2557"], "240");
setUVsToFace(new Point(0.714837849140167, 0.886027574539185), new Point(0.732216358184814, 0.886027574539185), new Point(0.732216358184814, 0.8924640417099), "240");
addFace(["1767", "358", "2482", "7"], "241");
setUVsToFace(new Point(0.446329176425934, 0.790983200073242), new Point(0.490097373723984, 0.790983200073242), new Point(0.490097353767056, 0.827671229839325), "241");
addFace(["1987", "363", "629", "2797"], "242");
setUVsToFace(new Point(0.147368836693367, 0.654879549078503), new Point(0.1473688185215, 0.689421415328979), new Point(0.00499999988824129, 0.693283319473267), "242");
addFace(["334", "329", "1675", "1668"], "243");
setUVsToFace(new Point(0.7646564245224, 0.820997297763824), new Point(0.736335754394531, 0.820997297763824), new Point(0.736335754394531, 0.808124244213104), "243");
addFace(["2284", "2303", "2410", "555", "2974", "2282"], "244");
setUVsToFace(new Point(0.121960073709488, 0.459661155939102), new Point(0.00499998630324165, 0.470603221749133), new Point(0.00499998630324165, 0.455799251794815), "244");
addFace(["1864", "1851", "407", "409"], "245");
setUVsToFace(new Point(0.8447105884552, 0.944122195243835), new Point(0.852434396743774, 0.944122195243835), new Point(0.852434396743774, 0.946053087711334), "245");
addFace(["156", "616", "615", "1207"], "169");
setUVsToFace(new Point(0.807447493076324, 0.0408692732453346), new Point(0.810874342918396, 0.0381255187094212), new Point(0.803473055362701, 0.0649776756763458), "169");
addFace(["377", "378", "2778", "1997"], "247");
setUVsToFace(new Point(0.498968883408425, 0.775242454315675), new Point(0.448260128498077, 0.775239646434784), new Point(0.446329176425934, 0.739960432052612), "247");
addFace(["2557", "2022", "449", "2045"], "248");
setUVsToFace(new Point(0.648961782455444, 0.00673933606594801), new Point(0.666340291500092, 0.00673933606594801), new Point(0.666340291500092, 0.0131758442148566), "248");
addFace(["183", "1136", "1353", "1137"], "249");
setUVsToFace(new Point(0.960780918598175, 0.763146102428436), new Point(0.960780918598175, 0.761215209960938), new Point(0.990144789218903, 0.761215209960938), "249");
addFace(["2490", "2493", "2486", "583"], "250");
setUVsToFace(new Point(0.556608200073242, 0.184680864214897), new Point(0.556608332353682, 0.195780951983344), new Point(0.479446440935135, 0.188075572252274), "250");
addFace(["2954", "1928", "86", "2955"], "251");
setUVsToFace(new Point(0.186654835939407, 0.874234974384308), new Point(0.186654835939407, 0.835774064064026), new Point(0.265180140733719, 0.835774064064026), "251");
addFace(["366", "1759", "598", "1765"], "252");
setUVsToFace(new Point(0.204668983714742, 0.250925631222658), new Point(0.204668968915939, 0.278604686260223), new Point(0.158326148986816, 0.282300472259521), "252");
addFace(["40", "769", "773", "759"], "253");
setUVsToFace(new Point(0.850150525569916, 0.781983613967896), new Point(0.850150525569916, 0.790994763374329), new Point(0.831484735012054, 0.790994763374329), "253");
addFace(["547", "2358", "2357", "2369"], "254");
setUVsToFace(new Point(0.421771824359894, 0.853811860084534), new Point(0.421771824359894, 0.848662614822388), new Point(0.433357536792755, 0.848662614822388), "254");
addFace(["1787", "2991", "1823"], "1252");
setUVsToFace(new Point(0.100011147558689, 0.994999945163727), new Point(0.11738970130682, 0.994999945163727), new Point(0.105646088719368, 0.994999945163727), "1252");
addFace(["1207", "155", "1500"], "256");
setUVsToFace(new Point(0.800990998744965, 0.0642935261130333), new Point(0.68577378988266, 0.032536257058382), new Point(0.69223016500473, 0.00911200046539307), "256");
addFace(["1892", "1839", "1847", "1896"], "257");
setUVsToFace(new Point(0.710349142551422, 0.0935567170381546), new Point(0.723293781280518, 0.118489511311054), new Point(0.59218069404247, 0.082350890074942), "257");
addFace(["183", "1137", "1142", "185"], "258");
setUVsToFace(new Point(0.541937410831451, 0.865456104278564), new Point(0.512573599815369, 0.865456104278564), new Point(0.512573599815369, 0.85026890039444), "258");
addFace(["213", "2775", "1839", "1892"], "259");
setUVsToFace(new Point(0.717788994312286, 0.0665645077824593), new Point(0.736206591129303, 0.0716409385204315), new Point(0.723293726868874, 0.118489518701343), "259");
addFace(["2486", "13", "825", "823"], "260");
setUVsToFace(new Point(0.186654835939407, 0.763093531131744), new Point(0.186654835939407, 0.72254353761673), new Point(0.196309611201286, 0.738227009773254), "260");
addFace(["2357", "548", "2919", "540"], "261");
setUVsToFace(new Point(0.377707660198212, 0.717780411243439), new Point(0.444871097803116, 0.719067752361298), new Point(0.444871112548975, 0.728078917886914), "261");
addFace(["407", "1839", "402", "1397", "409"], "235");
setUVsToFace(new Point(0.287722610064631, 0.675590648406416), new Point(0.297183752059937, 0.670623064041138), new Point(0.297183771588327, 0.691219863617277), "235");
addFace(["108", "928", "106", "922"], "263");
setUVsToFace(new Point(0.942573547363281, 0.195768043398857), new Point(0.826716542243958, 0.195768043398857), new Point(0.826716542243958, 0.18868787586689), "263");
addFace(["2196", "2974", "555", "363", "1987"], "237");
setUVsToFace(new Point(0.104765154421329, 0.427478641271591), new Point(0.104765154421329, 0.455799251794815), new Point(0.0429747527066106, 0.455799251438028), "237");
addFace(["1524", "2452", "1509", "1520"], "265");
setUVsToFace(new Point(0.11699141561985, 0.182442933320999), new Point(0.0803033336997032, 0.182442933320999), new Point(0.0803033336997032, 0.175362780690193), "265");
addFace(["2560", "245", "953", "956", "2566"], "266");
setUVsToFace(new Point(0.943706452846527, 0.561602056026459), new Point(0.982167303562164, 0.561602056026459), new Point(0.982167303562164, 0.565649092197418), "266");
addFace(["374", "2781", "623", "377"], "267");
setUVsToFace(new Point(0.498970150947571, 0.739960551261902), new Point(0.500691950321198, 0.739960432052612), new Point(0.500691950321198, 0.779101439865241), "267");
addFace(["2955", "3015", "2162", "2254", "516", "2954"], "268");
setUVsToFace(new Point(0.133691111171471, 0.224857538938522), new Point(0.133691111171471, 0.20766260619291), new Point(0.293233126401901, 0.211340874433517), "268");
addFace(["168", "1092", "1226", "1089"], "269");
setUVsToFace(new Point(0.653240382671356, 0.921624839305878), new Point(0.653240382671356, 0.923555672168732), new Point(0.636201322078705, 0.923555672168732), "269");
addFace(["178", "1111", "177", "1125"], "270");
setUVsToFace(new Point(0.824258625507355, 0.874960422515869), new Point(0.824258625507355, 0.876891255378723), new Point(0.795100092887878, 0.876891255378723), "270");
addFace(["2325", "370", "502", "2168"], "271");
setUVsToFace(new Point(0.100011147558689, 0.804681718349457), new Point(0.125366177372346, 0.79180879726574), new Point(0.115353554487228, 0.815781831741333), "271");
addFace(["168", "1089", "1081", "1084"], "147");
setUVsToFace(new Point(0.731876969337463, 0.870185375213623), new Point(0.714837849140167, 0.870185375213623), new Point(0.714837849140167, 0.857187271118164), "147");
addFace(["2943", "2375", "468", "2919"], "273");
setUVsToFace(new Point(0.473028957843781, 0.232581327358882), new Point(0.524092197418213, 0.230006724596024), new Point(0.524092197418213, 0.241592437028885), "273");
addFace(["883", "2465", "79", "2472"], "274");
setUVsToFace(new Point(0.372329796198628, 0.18614462018013), new Point(0.271809965372086, 0.188075572252274), new Point(0.324055880308151, 0.18614462018013), "274");
addFace(["2631", "2688", "322", "1662"], "275");
setUVsToFace(new Point(0.794560253620148, 0.822135627269745), new Point(0.776538014411926, 0.822135627269745), new Point(0.776538014411926, 0.808124244213104), "275");
addFace(["1191", "1185", "202", "1192"], "276");
setUVsToFace(new Point(0.887188196182251, 0.582370519638062), new Point(0.887188196182251, 0.591334939002991), new Point(0.84481292963028, 0.591334939002991), "276");
addFace(["472", "2204", "2099", "471"], "277");
setUVsToFace(new Point(0.355882823467255, 0.640719294548035), new Point(0.218344122171402, 0.640719294548035), new Point(0.218344122171402, 0.623984336853027), "277");
addFace(["1125", "581", "688", "1312", "1345", "178"], "135");
setUVsToFace(new Point(0.898669421672821, 0.130023211240768), new Point(0.904152678297273, 0.138771876692772), new Point(0.826716542243958, 0.138771876692772), "135");
addFace(["2963", "476", "479", "2162"], "279");
setUVsToFace(new Point(0.309065372999093, 0.689288914203644), new Point(0.309065371751785, 0.670623064041138), new Point(0.372786730527878, 0.670623064041138), "279");
addFace(["1588", "1608", "1600", "312"], "272");
setUVsToFace(new Point(0.974584937095642, 0.690970838069916), new Point(0.95785003900528, 0.690970838069916), new Point(0.95785003900528, 0.688396215438843), "272");
addFace(["2343", "1759", "2490", "2333"], "281");
setUVsToFace(new Point(0.402249604463577, 0.855313777923584), new Point(0.4098901450634, 0.848662614822388), new Point(0.4098901450634, 0.885350805093549), "281");
addFace(["2870", "645", "643", "2864"], "282");
setUVsToFace(new Point(0.601959528808509, 0.452878475189209), new Point(0.604534149169922, 0.458027690649033), new Point(0.384405851364136, 0.458027690649033), "282");
addFace(["1920", "427", "1960", "1922"], "283");
setUVsToFace(new Point(0.903961479663849, 0.411675661802292), new Point(0.903961479663849, 0.408942937850952), new Point(0.98248679602357, 0.408942937850952), "283");
addFace(["2798", "2799", "2794", "2797"], "284");
setUVsToFace(new Point(0.100011163608759, 0.714176058769226), new Point(0.10001115500927, 0.705164968967438), new Point(0.130906343460083, 0.705164968967438), "284");
addFace(["1429", "1450", "1454", "257", "1433"], "285");
setUVsToFace(new Point(0.366121977567673, 0.949020266532898), new Point(0.393332332372665, 0.940652847290039), new Point(0.420542687177658, 0.949020266532898), "285");
addFace(["526", "681", "2674", "1645", "2675"], "286");
setUVsToFace(new Point(0.556608200073242, 0.0284503513701204), new Point(0.556608180116335, 0.105688382938028), new Point(0.530231714248657, 0.101107232272625), "286");
addFace(["1157", "1161", "1149", "1148"], "287");
setUVsToFace(new Point(0.598874628543854, 0.821411490440369), new Point(0.569510757923126, 0.821411490440369), new Point(0.569510757923126, 0.804372429847717), "287");
addFace(["1236", "1240", "1178", "1180"], "288");
setUVsToFace(new Point(0.76350611448288, 0.834264874458313), new Point(0.805881440639496, 0.834264874458313), new Point(0.805881440639496, 0.836195826530457), "288");
addFace(["691", "1415", "526", "1417"], "290");
setUVsToFace(new Point(0.846315026283264, 0.36868679523468), new Point(0.846315026283264, 0.380916118621826), new Point(0.568489769849928, 0.380916118621826), "290");
addFace(["2229", "2111", "481", "2231"], "291");
setUVsToFace(new Point(0.828868389129639, 0.92634904384613), new Point(0.828868389129639, 0.928279876708984), new Point(0.814708054065704, 0.928279876708984), "291");
addFace(["549", "2923", "666", "2919", "548"], "292");
setUVsToFace(new Point(0.459451377391815, 0.719067752361298), new Point(0.50366073846817, 0.728078842163086), new Point(0.459451377391815, 0.728078842163086), "292");
addFace(["1662", "328", "2643", "2631"], "293");
setUVsToFace(new Point(0.473619043827057, 0.626707971096039), new Point(0.494215846061707, 0.623984336853027), new Point(0.494215846061707, 0.640719294548035), "293");
addFace(["2778", "603", "1996", "1997"], "294");
setUVsToFace(new Point(0.420484721660614, 0.797640025615692), new Point(0.420484721660614, 0.836781084537506), new Point(0.418553759609957, 0.832919133043894), "294");
addFace(["1983", "2398", "2895", "91", "1972", "1977"], "295");
setUVsToFace(new Point(0.0434608832001686, 0.774035513401031), new Point(0.00499999988824129, 0.77403550342262), new Point(0.00499999988824129, 0.763917863368988), "295");
addFace(["789", "777", "2864", "802"], "296");
setUVsToFace(new Point(0.239269927144051, 0.738227009773254), new Point(0.227848384433228, 0.705165025763757), new Point(0.269042044878006, 0.72254353761673), "296");
addFace(["1516", "1504", "2554", "1524"], "297");
setUVsToFace(new Point(0.129619047045708, 0.908905684947968), new Point(0.159068822860718, 0.914719998836517), new Point(0.10001115500927, 0.914719998836517), "297");
addFace(["2798", "2797", "463", "2815"], "298");
setUVsToFace(new Point(0.414239406585693, 0.282300644973767), new Point(0.414239406585693, 0.253979861736298), new Point(0.419644743204117, 0.260672062635422), "298");
addFace(["182", "1128", "1114", "1363"], "299");
setUVsToFace(new Point(0.776877582073212, 0.892733573913574), new Point(0.776877582073212, 0.894664466381073), new Point(0.74771910905838, 0.894664466381073), "299");
addFace(["159", "1071", "1224", "1064"], "300");
setUVsToFace(new Point(0.582508862018585, 0.969690322875977), new Point(0.569510757923126, 0.969690322875977), new Point(0.569510757923126, 0.967759490013123), "300");
addFace(["2577", "2737", "1415", "2592", "2587"], "301");
setUVsToFace(new Point(0.20376543700695, 0.0284503474831581), new Point(0.00499999988824129, 0.00499999988824129), new Point(0.278782815260184, 0.0284503474831581), "301");
addFace(["953", "1397", "2569", "2566", "956"], "264");
setUVsToFace(new Point(0.815642535686493, 0.781983613967896), new Point(0.815642535686493, 0.787444651126862), new Point(0.77718179765218, 0.787444651126862), "264");
addFace(["904", "1969", "1972", "610", "609"], "303");
setUVsToFace(new Point(0.500416219597747, 0.588233161958235), new Point(0.577483355998993, 0.561602092592729), new Point(0.577483355998993, 0.588233172893524), "303");
addFace(["1236", "1180", "1170", "1252"], "304");
setUVsToFace(new Point(0.8447105884552, 0.928279876708984), new Point(0.8447105884552, 0.926348924636841), new Point(0.8536257147789, 0.926348924636841), "304");
addFace(["182", "1125", "177", "1128"], "305");
setUVsToFace(new Point(0.893099546432495, 0.876891255378723), new Point(0.876060426235199, 0.876891255378723), new Point(0.876060426235199, 0.874960422515869), "305");
addFace(["1151", "1345", "1157", "1148"], "306");
setUVsToFace(new Point(0.731876969337463, 0.926144063472748), new Point(0.714837849140167, 0.926144063472748), new Point(0.714837849140167, 0.924213171005249), "306");
addFace(["106", "917", "1897", "922"], "307");
setUVsToFace(new Point(0.831584274768829, 0.707095980644226), new Point(0.831584274768829, 0.705164968967438), new Point(0.947441279888153, 0.705164968967438), "307");
addFace(["502", "2166", "2173", "2168"], "308");
setUVsToFace(new Point(0.461179792881012, 0.679996132850647), new Point(0.384668380022049, 0.679996132850647), new Point(0.384668380022049, 0.670623064041138), "308");
addFace(["543", "2945", "547", "2369"], "309");
setUVsToFace(new Point(0.433357536792755, 0.858961045742035), new Point(0.421771824359894, 0.858961045742035), new Point(0.421771824359894, 0.853811860084534), "309");
addFace(["2587", "1475", "1457", "276", "1490", "257"], "302");
setUVsToFace(new Point(0.446329176425934, 0.961156189441681), new Point(0.446329176425934, 0.950857818126678), new Point(0.484948193055714, 0.950857818126678), "302");
addFace(["2538", "2537", "1390", "1388"], "311");
setUVsToFace(new Point(0.0742100477218628, 0.182442933320999), new Point(0.00499999988824129, 0.195780947804451), new Point(0.0484640339001928, 0.178340390259993), "311");
addFace(["851", "2435", "866", "853"], "312");
setUVsToFace(new Point(0.375547915697098, 0.184213668107986), new Point(0.420603424310684, 0.184213668107986), new Point(0.420603424310684, 0.18614462018013), "312");
addFace(["1608", "1588", "300", "1564", "1639", "1605"], "313");
setUVsToFace(new Point(0.652936280313278, 0.810428619384766), new Point(0.636201322078705, 0.810428619384766), new Point(0.636201322078705, 0.793693661689758), "313");
addFace(["2115", "2122", "481", "2111"], "314");
setUVsToFace(new Point(0.989656567573547, 0.482484847307205), new Point(0.989656567573547, 0.49664518237114), new Point(0.969999492168427, 0.49664518237114), "314");
addFace(["2719", "1254", "1211", "1064", "1086", "165"], "315");
setUVsToFace(new Point(0.280923694372177, 0.705164968967438), new Point(0.339981406927109, 0.705164968967438), new Point(0.332047679449319, 0.723909802444063), "315");
addFace(["770", "771", "773", "769"], "316");
setUVsToFace(new Point(0.811385631561279, 0.894664466381073), new Point(0.792719841003418, 0.894664466381073), new Point(0.792719841003418, 0.892733573913574), "316");
addFace(["598", "2760", "1764", "1765"], "317");
setUVsToFace(new Point(0.158326148986816, 0.282300472259521), new Point(0.158326148986816, 0.250925898551941), new Point(0.160900786519051, 0.250925898551941), "317");
addFace(["606", "2781", "374", "2211"], "318");
setUVsToFace(new Point(0.366121977567673, 0.836781070940366), new Point(0.366121977567673, 0.797640025615692), new Point(0.367843747138977, 0.797639966011047), "318");
addFace(["470", "471", "2099", "2357"], "319");
setUVsToFace(new Point(0.366122037172318, 0.717780411243439), new Point(0.366122037172318, 0.705164968967438), new Point(0.503660144637104, 0.705164968967438), "319");
addFace(["1705", "1706", "1711", "349"], "320");
setUVsToFace(new Point(0.320240080356598, 0.252048901443609), new Point(0.327320218086243, 0.252048909664154), new Point(0.327320218086243, 0.282300472259521), "320");
addFace(["318", "319", "1609", "1608"], "321");
setUVsToFace(new Point(0.610756278038025, 0.804372429847717), new Point(0.62427282333374, 0.804372429847717), new Point(0.62427282333374, 0.814670860767365), "321");
addFace(["379", "1782", "385", "386"], "322");
setUVsToFace(new Point(0.0365388616919518, 0.749170899391174), new Point(0.00499999988824129, 0.759469330310822), new Point(0.00754453800618649, 0.743737161159515), "322");
addFace(["1253", "194", "1178", "1240"], "323");
setUVsToFace(new Point(0.636201322078705, 0.976875185966492), new Point(0.636201322078705, 0.974944233894348), new Point(0.64511650800705, 0.974944233894348), "323");
addFace(["1026", "1024", "141", "1013"], "324");
setUVsToFace(new Point(0.793011665344238, 0.980312049388885), new Point(0.793011665344238, 0.981599390506744), new Point(0.783678710460663, 0.981599390506744), "324");
addFace(["141", "1010", "1005", "1013"], "325");
setUVsToFace(new Point(0.417816370725632, 0.693165004253387), new Point(0.384668380022049, 0.693165004253387), new Point(0.384668380022049, 0.691877722740173), "325");
addFace(["2141", "2139", "2125", "2133"], "326");
setUVsToFace(new Point(0.88606071472168, 0.638144671916962), new Point(0.88606071472168, 0.623984336853027), new Point(0.903545677661896, 0.623984336853027), "326");
addFace(["2580", "2577", "272", "1474"], "327");
setUVsToFace(new Point(0.676081717014313, 0.792282044887543), new Point(0.676081717014313, 0.781983613967896), new Point(0.72049355506897, 0.781983613967896), "327");
addFace(["1041", "1965", "989", "1004", "1026", "138"], "328");
setUVsToFace(new Point(0.0100776939347602, 0.950837135314941), new Point(0.00499999988824129, 0.944400608539581), new Point(0.0820670699464806, 0.944400608539581), "328");
addFace(["516", "2325", "2168", "2176"], "329");
setUVsToFace(new Point(0.100011147558689, 0.854242742061615), new Point(0.100011147558689, 0.804681718349457), new Point(0.105980522930622, 0.815781831741333), "329");
addFace(["1800", "1799", "1812", "1810"], "330");
setUVsToFace(new Point(0.583064556121826, 0.364469558000565), new Point(0.574697077274323, 0.364469558000565), new Point(0.574697077274323, 0.338079869747162), "330");
addFace(["702", "705", "713", "662"], "331");
setUVsToFace(new Point(0.936013988936515, 0.534916460514069), new Point(0.819053947925568, 0.538778364658356), new Point(0.819053947925568, 0.534916460514069), "331");
addFace(["1564", "1654", "1631", "1639"], "255");
setUVsToFace(new Point(0.676081717014313, 0.869911313056946), new Point(0.676081717014313, 0.866842031478882), new Point(0.694103956222534, 0.866842031478882), "255");
addFace(["108", "1883", "927", "928"], "333");
setUVsToFace(new Point(0.604991018772125, 0.625915348529816), new Point(0.604991018772125, 0.623984336853027), new Point(0.720848023891449, 0.623984336853027), "333");
addFace(["892", "900", "80", "891"], "334");
setUVsToFace(new Point(0.831584274768829, 0.722938120365143), new Point(0.876639842987061, 0.722938120365143), new Point(0.876639842987061, 0.724869012832642), "334");
addFace(["1008", "1004", "1005", "1010"], "335");
setUVsToFace(new Point(0.927720189094543, 0.892733573913574), new Point(0.927720189094543, 0.894020915031433), new Point(0.918387174606323, 0.894020915031433), "335");
addFace(["1621", "1605", "1639", "1636"], "336");
setUVsToFace(new Point(0.968298137187958, 0.520112574100494), new Point(0.968298137187958, 0.509170472621918), new Point(0.985033094882965, 0.509170472621918), "336");
addFace(["159", "1064", "1211", "161"], "337");
setUVsToFace(new Point(0.636201322078705, 0.941328823566437), new Point(0.636201322078705, 0.939397990703583), new Point(0.651388466358185, 0.939397990703583), "337");
addFace(["823", "825", "808", "819"], "338");
setUVsToFace(new Point(0.814708054065704, 0.944122076034546), new Point(0.827141225337982, 0.944122076034546), new Point(0.827141225337982, 0.945409417152405), "338");
addFace(["1371", "1378", "1559", "1544"], "339");
setUVsToFace(new Point(0.0124419368803501, 0.413373410701752), new Point(0.0381879471242428, 0.413373410701752), new Point(0.0301926881074905, 0.428875923156738), "339");
addFace(["2577", "2587", "257", "1490", "272", "273"], "332");
setUVsToFace(new Point(0.852931380271912, 0.452580958604813), new Point(0.842633008956909, 0.452580958604813), new Point(0.842633003967688, 0.413962040872918), "332");
addFace(["974", "2955", "86", "1965", "982"], "341");
setUVsToFace(new Point(0.00500000402924617, 0.71435672044754), new Point(0.00500000402924617, 0.705164968967438), new Point(0.0434608832001686, 0.705164968967438), "341");
addFace(["65", "842", "835", "845"], "342");
setUVsToFace(new Point(0.912216484546661, 0.656810522079468), new Point(0.86716091632843, 0.656810522079468), new Point(0.86716091632843, 0.654879510402679), "342");
addFace(["149", "1036", "1041", "1042"], "343");
setUVsToFace(new Point(0.714837849140167, 0.978819906711578), new Point(0.714837849140167, 0.977532625198364), new Point(0.724170863628387, 0.977532625198364), "343");
addFace(["989", "3001", "3007", "938", "1005", "1004"], "344");
setUVsToFace(new Point(0.0820671343909749, 0.944400597811864), new Point(0.0820671543478966, 0.9933180809021), new Point(0.0763736441731453, 0.9933180809021), "344");
addFace(["47", "783", "805", "786"], "345");
setUVsToFace(new Point(0.840100824832916, 0.876247763633728), new Point(0.840100824832916, 0.874960422515869), new Point(0.860218226909637, 0.874960422515869), "345");
addFace(["378", "2006", "436", "1996", "1997"], "121");
setUVsToFace(new Point(0.705886602401733, 0.236387342214584), new Point(0.705886590591853, 0.266638867997765), new Point(0.648601695498155, 0.25762777478667), "121");
addFace(["290", "1540", "1541", "291"], "347");
setUVsToFace(new Point(0.823487937450409, 0.744886815547943), new Point(0.823487937450409, 0.739960551261902), new Point(0.90653920173645, 0.74072402715683), "347");
addFace(["2020", "2577", "2705", "2560", "2557"], "340");
setUVsToFace(new Point(0.140184164047241, 0.0766033306717873), new Point(0.20376543700695, 0.0284503474831581), new Point(0.17140120267868, 0.123432241380215), "340");
addFace(["1864", "1868", "405", "1851"], "349");
setUVsToFace(new Point(0.733560144901276, 0.468324542045593), new Point(0.616415798664093, 0.468324542045593), new Point(0.616415798664093, 0.460600733757019), "349");
addFace(["100", "1928", "1920", "1921"], "350");
setUVsToFace(new Point(0.806235611438751, 0.683947563171387), new Point(0.806235611438751, 0.670623064041138), new Point(0.830694389550332, 0.670623064041138), "350");
addFace(["1765", "583", "2482", "358", "1764"], "351");
setUVsToFace(new Point(0.237503215670586, 0.897058725357056), new Point(0.237503215670586, 0.933746814727783), new Point(0.186654854582492, 0.933746735386225), "351");
addFace(["2979", "2398", "1983", "1939", "1780"], "352");
setUVsToFace(new Point(0.95831638616104, 0.273314947729081), new Point(0.848252262259743, 0.273314972415039), new Point(0.848252058029175, 0.234854057431221), "352");
addFace(["511", "2222", "2146", "2143"], "353");
setUVsToFace(new Point(0.531883120536804, 0.993243396282196), new Point(0.512573599815369, 0.993243396282196), new Point(0.512573599815369, 0.991312503814697), "353");
addFace(["2343", "2333", "531", "2345"], "354");
setUVsToFace(new Point(0.727710902690887, 0.961690366268158), new Point(0.714837849140167, 0.961690366268158), new Point(0.714837849140167, 0.959759473800659), "354");
addFace(["2945", "2913", "538", "2358", "547"], "83");
setUVsToFace(new Point(0.727796614170074, 0.596011459827423), new Point(0.716210961341858, 0.596011459827423), new Point(0.716210961341858, 0.585713028907776), "83");
addFace(["725", "2835", "13", "640"], "356");
setUVsToFace(new Point(0.623114845334911, 0.413962006568909), new Point(0.616415858268738, 0.408169150352478), new Point(0.830751359462738, 0.408169150352478), "356");
addFace(["2554", "2537", "2538", "2452", "1524"], "357");
setUVsToFace(new Point(0.122805600946389, 0.182442933320999), new Point(0.00499999988824129, 0.195780947804451), new Point(0.0742100477218628, 0.182442933320999), "357");
addFace(["777", "13", "637", "2835"], "358");
setUVsToFace(new Point(0.785400101311236, 0.137540873784498), new Point(0.785399913787842, 0.182250112295151), new Point(0.568489849567413, 0.187399297952652), "358");
addFace(["2134", "492", "2141", "2133"], "359");
setUVsToFace(new Point(0.926792740821838, 0.722938120365143), new Point(0.944277703762054, 0.722938120365143), new Point(0.944277703762054, 0.724869012832642), "359");
addFace(["526", "1415", "691", "1417"], "360");
setUVsToFace(new Point(0.586204072084274, 0.521399796009064), new Point(0.308378845453262, 0.521399796009064), new Point(0.308378845453262, 0.509170472621918), "360");
addFace(["1254", "2048", "2061"], "361");
setUVsToFace(new Point(0.988008856773376, 0.336504280567169), new Point(0.97433465719223, 0.379470705986023), new Point(0.961461663246155, 0.379470705986023), "361");
addFace(["688", "2737", "2577", "2719"], "362");
setUVsToFace(new Point(0.0742100477218628, 0.062929131090641), new Point(0.00499999988824129, 0.00499999988824129), new Point(0.203765409454483, 0.0284503468611774), "362");
addFace(["811", "777", "789", "47", "56"], "363");
setUVsToFace(new Point(0.216426983475685, 0.738227009773254), new Point(0.227848455309868, 0.705164968967438), new Point(0.239269932133281, 0.738227083454001), "363");
addFace(["328", "1655", "1568", "304"], "364");
setUVsToFace(new Point(0.683477401733398, 0.705164968967438), new Point(0.720809102058411, 0.705164968967438), new Point(0.720809102058411, 0.7218998670578), "364");
addFace(["1252", "2061", "2040", "449"], "365");
setUVsToFace(new Point(0.955372472723362, 0.386813307422371), new Point(0.961461663246155, 0.379470705986023), new Point(0.961461663246155, 0.389125496149063), "365");
addFace(["409", "1397", "1848", "1873"], "366");
setUVsToFace(new Point(0.287722617016022, 0.683314442634583), new Point(0.293136775493622, 0.691219866275787), new Point(0.161181405186653, 0.691219866275787), "366");
addFace(["370", "2005", "505", "502"], "367");
setUVsToFace(new Point(0.125366181135178, 0.791808664798737), new Point(0.150721209527362, 0.804681821664063), new Point(0.115353554487228, 0.821574687957764), "367");
addFace(["2358", "538", "470", "2357"], "369");
setUVsToFace(new Point(0.581096529960632, 0.940331518650055), new Point(0.581096529960632, 0.951917290687561), new Point(0.569510757923126, 0.951917290687561), "369");
addFace(["802", "2864", "2666", "786"], "370");
setUVsToFace(new Point(0.259387314319611, 0.738227009773254), new Point(0.269042044878006, 0.72254353761673), new Point(0.269042044878006, 0.763093514697825), "370");
addFace(["701", "702", "2410", "2303"], "371");
setUVsToFace(new Point(0.308378875255585, 0.497288823127747), new Point(0.308378875255585, 0.482484847307205), new Point(0.859987040449478, 0.482484847307205), "371");
addFace(["1149", "1357", "1151", "1148"], "372");
setUVsToFace(new Point(0.912040412425995, 0.810055196285248), new Point(0.912040412425995, 0.808124363422394), new Point(0.941404223442078, 0.808124363422394), "372");
addFace(["1544", "1559", "3027", "292"], "373");
setUVsToFace(new Point(0.84481292963028, 0.566528379917145), new Point(0.84481292963028, 0.561602079182264), new Point(0.927864193916321, 0.562365651130676), "373");
addFace(["681", "7", "2482", "2666", "2664", "2667", "2674"], "192");
setUVsToFace(new Point(0.556608356572639, 0.105688363313675), new Point(0.556608833569783, 0.133832500583475), new Point(0.512840537183822, 0.133832495594245), "192");
addFace(["808", "813", "817", "819"], "375");
setUVsToFace(new Point(0.84653651714325, 0.670623064041138), new Point(0.866653859615326, 0.670623064041138), new Point(0.866653859615326, 0.68305629491806), "375");
addFace(["845", "27", "2502", "2442"], "376");
setUVsToFace(new Point(0.202067241072655, 0.611459016799927), new Point(0.206462487578392, 0.608240842819214), new Point(0.206462487578392, 0.642997980117798), "376");
addFace(["1142", "1137", "1353", "1141"], "378");
setUVsToFace(new Point(0.798865914344788, 0.928279876708984), new Point(0.783678710460663, 0.928279876708984), new Point(0.783678710460663, 0.92634904384613), "378");
addFace(["2422", "743", "744", "746"], "379");
setUVsToFace(new Point(0.919629871845245, 0.509170472621918), new Point(0.952455937862396, 0.509170472621918), new Point(0.952455937862396, 0.516250610351563), "379");
addFace(["763", "33", "743", "770"], "380");
setUVsToFace(new Point(0.811491250991821, 0.22604051232338), new Point(0.777154564857483, 0.211880221962929), new Point(0.836370692735709, 0.211880221962929), "380");
addFace(["1742", "337", "1739", "2627"], "381");
setUVsToFace(new Point(0.891408503055573, 0.670623064041138), new Point(0.891408503055573, 0.683496057987213), new Point(0.878535509109497, 0.683496057987213), "381");
addFace(["555", "2410", "2400", "2799"], "382");
setUVsToFace(new Point(0.556608200073242, 0.286647945642471), new Point(0.556608620623148, 0.324622520956331), new Point(0.133690878748894, 0.324622690677643), "382");
addFace(["2020", "2018", "2067", "446"], "383");
setUVsToFace(new Point(0.614960968494415, 0.923845708370209), new Point(0.614960968494415, 0.917409181594849), new Point(0.623650133609772, 0.917409181594849), "383");
addFace(["346", "1698", "1722", "1695"], "384");
setUVsToFace(new Point(0.474006116390228, 0.882973432540894), new Point(0.474006116390228, 0.90609484910965), new Point(0.446329176425934, 0.90609484910965), "384");
addFace(["31", "2552", "2870", "742"], "385");
setUVsToFace(new Point(0.0164250414818525, 0.932519018650055), new Point(0.00499999988824129, 0.932519018650055), new Point(0.00499999988824129, 0.891969023374134), "385");
addFace(["1515", "1513", "1509", "2452"], "386");
setUVsToFace(new Point(0.973287761211395, 0.582370519638062), new Point(0.973287761211395, 0.589450657367706), new Point(0.943679749965668, 0.589450657367706), "386");
addFace(["1873", "1848", "1847", "1869"], "387");
setUVsToFace(new Point(0.170578271150589, 0.683314429571116), new Point(0.161181405186653, 0.691219866275787), new Point(0.161181405186653, 0.670623064041138), "387");
addFace(["1141", "156", "1334", "1328", "1329"], "388");
setUVsToFace(new Point(0.834522540421314, 0.0876479223370552), new Point(0.826716542243958, 0.0797142088413239), new Point(0.898669421672821, 0.0876479223370552), "388");
addFace(["245", "1273", "953", "1397", "402"], "246");
setUVsToFace(new Point(0.982658088207245, 0.0190894678235054), new Point(0.992481670091079, 0.0610907268718109), new Point(0.978717505931854, 0.0200110571458936), "246");
addFace(["1334", "1378", "581", "1125"], "390");
setUVsToFace(new Point(0.898669421672821, 0.0876479223370552), new Point(0.904152452945709, 0.0879235342144966), new Point(0.904152452945709, 0.13877190241899), "390");
addFace(["2075", "465", "2826", "2815"], "391");
setUVsToFace(new Point(0.575278580188751, 0.209255397319794), new Point(0.705886602401733, 0.209255397319794), new Point(0.705886602401733, 0.211830005049706), "391");
addFace(["1705", "2702", "1748", "1734", "1706"], "392");
setUVsToFace(new Point(0.783865034580231, 0.34709095954895), new Point(0.783865034580231, 0.364469477956718), new Point(0.743530750274658, 0.35159649992628), "392");
addFace(["883", "2434", "877", "881"], "393");
setUVsToFace(new Point(0.864659368991852, 0.810055196285248), new Point(0.864659368991852, 0.808124363422394), new Point(0.896198213100433, 0.808124363422394), "393");
addFace(["2664", "300", "1588", "2674", "2667"], "394");
setUVsToFace(new Point(0.581194569920428, 0.7218998670578), new Point(0.581194569920428, 0.710957825183868), new Point(0.597929537296295, 0.710957825183868), "394");
addFace(["1921", "1920", "1922", "1896", "1847"], "395");
setUVsToFace(new Point(0.581335246562958, 0.121698580682278), new Point(0.568489789962769, 0.118157982826233), new Point(0.584808170795441, 0.0589539296925068), "395");
addFace(["270", "1440", "1445", "1486", "1457"], "148");
setUVsToFace(new Point(0.569510757923126, 0.789916157722473), new Point(0.596721172332764, 0.781548738479614), new Point(0.623931527137756, 0.789916157722473), "148");
addFace(["1504", "1516", "1515", "1500", "155"], "397");
setUVsToFace(new Point(0.159068822860718, 0.914719998836517), new Point(0.129619021043386, 0.908906009034356), new Point(0.129619021043386, 0.87221787195379), "397");
addFace(["2850", "2537", "2465", "883", "853", "866", "2443", "2442", "2502"], "101");
setUVsToFace(new Point(0.47327247262001, 0.188075572252274), new Point(0.00499999988824129, 0.195780947804451), new Point(0.271809974243427, 0.188075564476656), "101");
addFace(["1780", "1939", "379", "659", "660"], "399");
setUVsToFace(new Point(0.280923694372177, 0.910431921482086), new Point(0.280923694372177, 0.877254211040788), new Point(0.329191625118256, 0.910431921482086), "399");
addFace(["2566", "2554", "2022", "2557", "2560"], "400");
setUVsToFace(new Point(0.165940180420876, 0.127479240298271), new Point(0.122805617749691, 0.182442933320999), new Point(0.122805617749691, 0.093981684716605), "400");
addFace(["81", "1417", "248", "681"], "401");
setUVsToFace(new Point(0.367764472961426, 0.623984336853027), new Point(0.445002466440201, 0.623984336853027), new Point(0.445002466440201, 0.636213660240173), "401");
addFace(["416", "2879", "607", "88"], "402");
setUVsToFace(new Point(0.369305968284607, 0.410493791103363), new Point(0.372524231672287, 0.410493791103363), new Point(0.372524259075739, 0.451348714793314), "402");
addFace(["1334", "1125", "182"], "403");
setUVsToFace(new Point(0.898669421672821, 0.0876479223370552), new Point(0.898669421672821, 0.130023211240768), new Point(0.898669421672821, 0.112984113395214), "403");
addFace(["1334", "182", "232"], "404");
setUVsToFace(new Point(0.898669421672821, 0.0876479223370552), new Point(0.898669421672821, 0.112984113395214), new Point(0.898669421672821, 0.102835081517696), "404");
addFace(["1329", "1345", "1151"], "405");
setUVsToFace(new Point(0.863886475563049, 0.0876479223370552), new Point(0.863886475563049, 0.130023211240768), new Point(0.863886475563049, 0.112984113395214), "405");
addFace(["1329", "1151", "1136"], "406");
setUVsToFace(new Point(0.863886475563049, 0.0876479223370552), new Point(0.863886475563049, 0.112984113395214), new Point(0.863886475563049, 0.102835081517696), "406");
addFace(["156", "688", "1401"], "407");
setUVsToFace(new Point(0.79998904466629, 0.0988142192363739), new Point(0.740931391716003, 0.0988142341375351), new Point(0.753160774707794, 0.0988142192363739), "407");
addFace(["2265", "2902", "474", "2204", "2191", "377"], "408");
setUVsToFace(new Point(0.718441665172577, 0.234695908789672), new Point(0.718441665172577, 0.299060940742493), new Point(0.710858583450317, 0.299060940742493), "408");
addFace(["2258", "2122", "2115", "2320"], "409");
setUVsToFace(new Point(0.636201322078705, 0.959102034568787), new Point(0.636201322078705, 0.957171142101288), new Point(0.650361657142639, 0.957171142101288), "409");
addFace(["2775", "1254", "1253", "1240", "1259", "1198"], "410");
setUVsToFace(new Point(0.927505631616749, 0.336504280567169), new Point(0.988008856773376, 0.336504280567169), new Point(0.95537257194519, 0.344438016414642), "410");
addFace(["1873", "1868", "1864", "409"], "412");
setUVsToFace(new Point(0.571954905986786, 0.672554016113281), new Point(0.571954905986786, 0.670623064041138), new Point(0.689099252223969, 0.670623064041138), "412");
addFace(["628", "627", "363", "1987"], "413");
setUVsToFace(new Point(0.149299770593643, 0.654879510402679), new Point(0.149299770593643, 0.693283319473267), new Point(0.1473688185215, 0.689421415328979), "413");
addFace(["2675", "2297", "9", "2493", "2490", "7", "681", "526"], "232");
setUVsToFace(new Point(0.372523918678567, 0.455799251794815), new Point(0.372523918678567, 0.470603221749133), new Point(0.181743294000626, 0.459661155939102), "232");
addFace(["1373", "1371", "1549"], "416");
setUVsToFace(new Point(0.0124419368803501, 0.451348751783371), new Point(0.0124419368803501, 0.413373410701752), new Point(0.0192048810422421, 0.43342724442482), "416");
addFace(["1373", "1549", "1553"], "417");
setUVsToFace(new Point(0.0124419368803501, 0.451348751783371), new Point(0.0192048810422421, 0.43342724442482), new Point(0.0210900940001011, 0.437978506088257), "417");
addFace(["1373", "1553", "1530"], "418");
setUVsToFace(new Point(0.0124419368803501, 0.451348751783371), new Point(0.0210900940001011, 0.437978506088257), new Point(0.0256413891911507, 0.439863741397858), "418");
addFace(["713", "705", "2284", "2282", "3015"], "216");
setUVsToFace(new Point(0.712789595127106, 0.654879510402679), new Point(0.712789595127106, 0.658741474151611), new Point(0.161181405186653, 0.658741474151611), "216");
addFace(["2166", "416", "427", "2173"], "420");
setUVsToFace(new Point(0.0434608832001686, 0.843405842781067), new Point(0.08416897803545, 0.824313044548035), new Point(0.0706523209810257, 0.858748257160187), "420");
addFace(["242", "1540", "290"], "421");
setUVsToFace(new Point(0.0381879471242428, 0.451348751783371), new Point(0.0301926881074905, 0.437978506088257), new Point(0.0320778749883175, 0.43342724442482), "421");
addFace(["1378", "242", "290"], "422");
setUVsToFace(new Point(0.0381879471242428, 0.413373410701752), new Point(0.0381879471242428, 0.451348751783371), new Point(0.0320778749883175, 0.43342724442482), "422");
addFace(["1378", "290", "1559"], "423");
setUVsToFace(new Point(0.0381879471242428, 0.413373410701752), new Point(0.0320778749883175, 0.43342724442482), new Point(0.0301926881074905, 0.428875923156738), "423");
addFace(["294", "1549", "1371"], "424");
setUVsToFace(new Point(0.0210900940001011, 0.428875923156738), new Point(0.0192048810422421, 0.43342724442482), new Point(0.0124419368803501, 0.413373410701752), "424");
addFace(["1544", "294", "1371"], "425");
setUVsToFace(new Point(0.0256413891911507, 0.42699071764946), new Point(0.0210900940001011, 0.428875923156738), new Point(0.0124419368803501, 0.413373410701752), "425");
addFace(["1151", "1357", "1353", "1136"], "426");
setUVsToFace(new Point(0.863886475563049, 0.112984113395214), new Point(0.834522664546967, 0.112984113395214), new Point(0.834522664546967, 0.102835081517696), "426");
addFace(["1334", "1101", "1096", "1328"], "427");
setUVsToFace(new Point(0.943469226360321, 0.834264874458313), new Point(0.943469226360321, 0.836195766925812), new Point(0.914310693740845, 0.836195766925812), "427");
addFace(["2577", "1413", "3044", "273"], "428");
setUVsToFace(new Point(0.698045194149017, 0.32317191362381), new Point(0.568489789962769, 0.32317191362381), new Point(0.568489789962769, 0.310942560434341), "428");
addFace(["108", "922", "1897", "1883"], "429");
setUVsToFace(new Point(0.869467914104462, 0.926348924636841), new Point(0.876548051834106, 0.926348924636841), new Point(0.876548051834106, 0.928279995918274), "429");
addFace(["312", "1597", "2674", "1588"], "430");
setUVsToFace(new Point(0.597929537296295, 0.708383202552795), new Point(0.6114462018013, 0.708383202552795), new Point(0.6114462018013, 0.721899962634707), "430");
addFace(["2864", "2859", "129", "2666", "903"], "355");
setUVsToFace(new Point(0.0821617022156715, 0.482484852252077), new Point(0.0877931341528893, 0.488277733325958), new Point(0.0877931341528893, 0.523034870624542), "355");
addFace(["358", "602", "600", "1767"], "433");
setUVsToFace(new Point(0.635064186414789, 0.589280903339386), new Point(0.637638807296753, 0.592976689338684), new Point(0.589365065097809, 0.592976689338684), "433");
addFace(["395", "379", "1787", "1823"], "436");
setUVsToFace(new Point(0.665960788726807, 0.710598707199097), new Point(0.671595692634583, 0.705164968967438), new Point(0.671595692634583, 0.727692687928111), "436");
addFace(["117", "1977", "1972", "1969"], "437");
setUVsToFace(new Point(0.08416897803545, 0.739600241184235), new Point(0.070652320076057, 0.774035589762679), new Point(0.053917407989502, 0.763917863368988), "437");
addFace(["13", "777", "811", "825"], "438");
setUVsToFace(new Point(0.186654835939407, 0.72254353761673), new Point(0.227848455309868, 0.705164968967438), new Point(0.2164270025686, 0.738226987754508), "438");
addFace(["790", "801", "805", "783"], "440");
setUVsToFace(new Point(0.512573599815369, 0.902736008167267), new Point(0.53269100189209, 0.902736008167267), new Point(0.53269100189209, 0.915169179439545), "440");
addFace(["2772", "611", "989", "2773"], "441");
setUVsToFace(new Point(0.410278856754303, 0.251466810703278), new Point(0.410278856754303, 0.282300472259521), new Point(0.40834788472503, 0.278976102279929), "441");
addFace(["2870", "718", "2835", "744", "742"], "280");
setUVsToFace(new Point(0.00499999228780069, 0.89196902057613), new Point(0.0461936108767986, 0.874590456485748), new Point(0.0873872265219688, 0.89196902513504), "280");
addFace(["866", "858", "835", "2443"], "443");
setUVsToFace(new Point(0.153793454170227, 0.642997980117798), new Point(0.153793454170227, 0.611459016799927), new Point(0.157011702656746, 0.611459016799927), "443");
addFace(["2527", "2737", "688", "581"], "444");
setUVsToFace(new Point(0.0484640300273895, 0.140365079045296), new Point(0.00499998947742958, 0.00500000105725576), new Point(0.0742100477218628, 0.062929131090641), "444");
addFace(["1668", "328", "304", "334"], "446");
setUVsToFace(new Point(0.573372721672058, 0.892395973205566), new Point(0.569510757923126, 0.888792634010315), new Point(0.586245715618134, 0.888792634010315), "446");
addFace(["1977", "608", "2878", "117"], "447");
setUVsToFace(new Point(0.290780663490295, 0.447486817836761), new Point(0.288206070661545, 0.451348751783371), new Point(0.288206070661545, 0.41049382809342), "447");
addFace(["2999", "136", "942", "932"], "448");
setUVsToFace(new Point(0.366121977567673, 0.984717011451721), new Point(0.366121977567673, 0.963476538658142), new Point(0.389937043190002, 0.963476538658142), "448");
addFace(["129", "302", "2664", "2666"], "449");
setUVsToFace(new Point(0.473815053701401, 0.105688363313675), new Point(0.434327840805054, 0.101107232272625), new Point(0.499979715020365, 0.101107232272625), "449");
addFace(["2775", "155", "1254", "620"], "450");
setUVsToFace(new Point(0.736206591129303, 0.0716409385204315), new Point(0.68577378988266, 0.032536257058382), new Point(0.794534623622894, 0.0877178609371185), "450");
addFace(["282", "1513", "1515", "1516"], "452");
setUVsToFace(new Point(0.991143226623535, 0.195768043398857), new Point(0.954455077648163, 0.195768043398857), new Point(0.954455077648163, 0.18868787586689), "452");
addFace(["509", "2277", "2281", "2211", "2213", "511", "510", "2219"], "156");
setUVsToFace(new Point(0.768143475055695, 0.299060938388865), new Point(0.760278880596161, 0.299060941947462), new Point(0.760278880596161, 0.234695926308632), "156");
addFace(["892", "721", "27", "845", "835", "858", "20", "881", "72", "900"], "76");
setUVsToFace(new Point(0.0121904208046949, 0.611459016799927), new Point(0.00499999988824129, 0.608240842819214), new Point(0.206462487578392, 0.608240842819214), "76");
addFace(["2176", "2168", "2173", "2174"], "457");
setUVsToFace(new Point(0.645001173019409, 0.00738299172371626), new Point(0.645001173019409, 0.0131758386269212), new Point(0.568489789962769, 0.0131758386269212), "457");
addFace(["1334", "232", "1095", "1101"], "460");
setUVsToFace(new Point(0.691268920898438, 0.986480355262756), new Point(0.676081717014313, 0.986480355262756), new Point(0.676081717014313, 0.984549462795258), "460");
addFace(["2297", "2675", "2737", "696"], "461");
setUVsToFace(new Point(0.0050000198451674, 0.549720406532288), new Point(0.00499999988824129, 0.534916460514069), new Point(0.556608200073242, 0.534916460514069), "461");
addFace(["2452", "2538", "1500", "1515"], "463");
setUVsToFace(new Point(0.10001115500927, 0.87221771478653), new Point(0.10001115500927, 0.866124331951141), new Point(0.159068822860718, 0.866124331951141), "463");
addFace(["1390", "1373", "242", "1388"], "465");
setUVsToFace(new Point(0.649520397186279, 0.561602056026459), new Point(0.700368762016296, 0.561602056026459), new Point(0.700368762016296, 0.58734804391861), "465");
addFace(["136", "974", "982", "1965", "1041", "1036", "942"], "144");
setUVsToFace(new Point(0.0100776702165604, 0.993317827026497), new Point(0.00499999988824129, 0.99331770196356), new Point(0.00499999988824129, 0.954857170581818), "144");
addFace(["345", "1415", "2702", "593"], "468");
setUVsToFace(new Point(0.282624304294586, 0.0317544341087341), new Point(0.278782963752747, 0.0284503474831581), new Point(0.340768417576718, 0.0317544341087341), "468");
addFace(["1096", "1093", "1294", "1328"], "469");
setUVsToFace(new Point(0.730025053024292, 0.943917214870453), new Point(0.714837849140167, 0.943917214870453), new Point(0.714837849140167, 0.941986322402954), "469");
addFace(["681", "81", "903", "2666"], "470");
setUVsToFace(new Point(0.00499999988824129, 0.523034870624542), new Point(0.00499999988824129, 0.510805487632751), new Point(0.0821617022156715, 0.510805487632751), "470");
addFace(["1965", "1969", "2773", "989"], "471");
setUVsToFace(new Point(0.33128081767687, 0.278976082801819), new Point(0.331280797719955, 0.251466810703278), new Point(0.408347904682159, 0.251466810703278), "471");
addFace(["702", "701", "696", "705"], "472");
setUVsToFace(new Point(0.936013996601105, 0.534916460514069), new Point(0.936013703430738, 0.549720297688101), new Point(0.568489789962769, 0.549720406532288), "472");
addFace(["377", "623", "622", "378"], "473");
setUVsToFace(new Point(0.498970150947571, 0.775239646434784), new Point(0.500691950321198, 0.779101550579071), new Point(0.446329229739337, 0.779101550579071), "473");
addFace(["272", "2577", "273"], "476");
setUVsToFace(new Point(0.72049355506897, 0.781983613967896), new Point(0.676081717014313, 0.781983613967896), new Point(0.688311159610748, 0.781983613967896), "476");
addFace(["2895", "3002", "904", "91"], "477");
setUVsToFace(new Point(0.263721972703934, 0.823892533779144), new Point(0.18665484578481, 0.823892488789969), new Point(0.18665486574173, 0.774975121021271), "477");
addFace(["370", "1993", "436", "2005", "674"], "43");
setUVsToFace(new Point(0.114840090274811, 0.408970147371292), new Point(0.1830665143236, 0.408969751960617), new Point(0.18306651369995, 0.437405488855228), "43");
addFace(["61", "842", "65", "2446"], "482");
setUVsToFace(new Point(0.512573599815369, 0.771499335765839), new Point(0.512573599815369, 0.739960551261902), new Point(0.5576291680336, 0.739960551261902), "482");
addFace(["904", "3002", "3001", "989", "2773"], "15");
setUVsToFace(new Point(0.329841107130051, 0.819163799285889), new Point(0.280923694372177, 0.819163799285889), new Point(0.280923694372177, 0.76960277557373), "15");
addFace(["385", "1782", "382", "1803"], "484");
setUVsToFace(new Point(0.00754453800618649, 0.743737161159515), new Point(0.00499999988824129, 0.759469330310822), new Point(0.00499999988824129, 0.726643310088355), "484");
addFace(["76", "888", "892", "891"], "485");
setUVsToFace(new Point(0.821723639965057, 0.836195766925812), new Point(0.821723639965057, 0.834264874458313), new Point(0.853262484073639, 0.834264874458313), "485");
addFace(["666", "2923", "474", "2389"], "488");
setUVsToFace(new Point(0.458448708057404, 0.241592437028885), new Point(0.414239346981049, 0.241592451930046), new Point(0.414239346981049, 0.224857538206769), "488");
addFace(["2577", "273", "3044", "1413"], "489");
setUVsToFace(new Point(0.852931380271912, 0.452580958604813), new Point(0.852931380271912, 0.440351635217667), new Point(0.982486844062805, 0.440351635217667), "489");
addFace(["2333", "2490", "583", "2329"], "491");
setUVsToFace(new Point(0.402249614543793, 0.868186831474304), new Point(0.4098901450634, 0.88535064458847), new Point(0.366121977567673, 0.88535064458847), "491");
addFace(["1191", "1198", "1259", "1185"], "492");
setUVsToFace(new Point(0.262309789657593, 0.982908308506012), new Point(0.262309789657593, 0.984839260578156), new Point(0.253345400094986, 0.984839260578156), "492");
addFace(["811", "56", "817", "813"], "493");
setUVsToFace(new Point(0.95137745141983, 0.876247763633728), new Point(0.938944280147552, 0.876247763633728), new Point(0.938944280147552, 0.874960422515869), "493");
addFace(["520", "2273", "522", "2278"], "494");
setUVsToFace(new Point(0.366121977567673, 0.739960551261902), new Point(0.430486977100372, 0.739960551261902), new Point(0.430486977100372, 0.781797766685486), "494");
addFace(["1003", "138", "1026", "1013"], "496");
setUVsToFace(new Point(0.038845419883728, 0.960170149803162), new Point(0.038845419883728, 0.950837135314941), new Point(0.0432256422936916, 0.950837135314941), "496");
addFace(["2737", "2675", "1739", "2702", "1415"], "200");
setUVsToFace(new Point(0.00499999988824129, 0.00499999988824129), new Point(0.556608081242215, 0.00499999988824129), new Point(0.467351853847504, 0.0317544341087341), "200");
addFace(["10", "2537", "2493", "9"], "498");
setUVsToFace(new Point(0.218344151973724, 0.612102687358856), new Point(0.218344151973724, 0.608240842819214), new Point(0.769952356815338, 0.608240842819214), "498");
addFace(["2631", "2643", "2627", "2688"], "499");
setUVsToFace(new Point(0.483245233080465, 0.0843723167101658), new Point(0.462648451328278, 0.0843723192811012), new Point(0.467351853847504, 0.0446274317800999), "499");
addFace(["2369", "540", "2370", "547"], "500");
setUVsToFace(new Point(0.353960961103439, 0.935830295085907), new Point(0.337860822677612, 0.935830295085907), new Point(0.337860822677612, 0.92424464225769), "500");
addFace(["1259", "1240", "1236", "1277"], "502");
setUVsToFace(new Point(0.942952036857605, 0.344438016414642), new Point(0.946457386016846, 0.344438016414642), new Point(0.946457386016846, 0.386813282966614), "502");
addFace(["2991", "1817", "398", "2911"], "503");
setUVsToFace(new Point(0.636201322078705, 0.902564227581024), new Point(0.653295338153839, 0.902564227581024), new Point(0.653295338153839, 0.905782520771027), "503");
addFace(["2991", "2911", "2907", "1823"], "504");
setUVsToFace(new Point(0.783678710460663, 0.947340369224548), new Point(0.783678710460663, 0.944122016429901), new Point(0.795422315597534, 0.944122016429901), "504");
addFace(["2134", "2233", "2229", "2231"], "505");
setUVsToFace(new Point(0.714837849140167, 0.904345691204071), new Point(0.728998124599457, 0.904345691204071), new Point(0.728998124599457, 0.908370971679688), "505");
addFace(["1748", "2702", "1739", "337"], "506");
setUVsToFace(new Point(0.743530750274658, 0.351596534252167), new Point(0.783865034580231, 0.364469558000565), new Point(0.657281480528919, 0.364469558000565), "506");
addFace(["2870", "2864", "777", "718"], "507");
setUVsToFace(new Point(0.601959526538849, 0.452878475189209), new Point(0.387624084949493, 0.452878475189209), new Point(0.387624084949493, 0.408169150352478), "507");
addFace(["481", "2122", "2258", "2231"], "508");
setUVsToFace(new Point(0.855853617191315, 0.394728749990463), new Point(0.836196482181549, 0.394728749990463), new Point(0.836196482181549, 0.39279779791832), "508");
addFace(["1254", "2719", "2718", "2029"], "509");
setUVsToFace(new Point(0.988008856773376, 0.336504280567169), new Point(0.988008856773376, 0.395561963319778), new Point(0.982058465480804, 0.395561963319778), "509");
addFace(["2457", "2465", "725", "721"], "510");
setUVsToFace(new Point(0.512573599815369, 0.957696974277496), new Point(0.512573599815369, 0.955766081809998), new Point(0.547330737113953, 0.955766081809998), "510");
addFace(["1433", "257", "1457", "1486"], "511");
setUVsToFace(new Point(0.750637292861938, 0.519468903541565), new Point(0.696216523647308, 0.519468903541565), new Point(0.696216523647308, 0.509170472621918), "511");
addFace(["1645", "319", "318", "2681"], "513");
setUVsToFace(new Point(0.253345400094986, 0.956570386886597), new Point(0.253345400094986, 0.94562840461731), new Point(0.266861975193024, 0.94562840461731), "513");
addFace(["1875", "1233", "213", "1892"], "514");
setUVsToFace(new Point(0.664200127124786, 0.781812012195587), new Point(0.636201322078705, 0.781812012195587), new Point(0.636201322078705, 0.761215209960938), "514");
addFace(["1869", "1847", "1839", "407"], "515");
setUVsToFace(new Point(0.170578271150589, 0.675590634346008), new Point(0.161181405186653, 0.670623064041138), new Point(0.297183752059937, 0.670623064041138), "515");
addFace(["1540", "242", "1373", "1530"], "516");
setUVsToFace(new Point(0.0301926881074905, 0.437978506088257), new Point(0.0381879471242428, 0.451348751783371), new Point(0.0124419368803501, 0.451348751783371), "516");
addFace(["2196", "657", "628", "1987"], "517");
setUVsToFace(new Point(0.850183010101318, 0.319738447666168), new Point(0.848252058029175, 0.322634875774384), new Point(0.848252079659519, 0.285196542753604), "517");
addFace(["883", "881", "20", "853"], "518");
setUVsToFace(new Point(0.105519697070122, 0.642997980117798), new Point(0.105519697070122, 0.611459016799927), new Point(0.108737945556641, 0.611459016799927), "518");
addFace(["416", "88", "608", "1977"], "519");
setUVsToFace(new Point(0.369305984051289, 0.410493436776413), new Point(0.369305998086929, 0.447486817836761), new Point(0.288206070661545, 0.451348751783371), "519");
addFace(["472", "2196", "2191", "2204"], "520");
setUVsToFace(new Point(0.573319826842895, 0.2761470079422), new Point(0.568489730358124, 0.270740330219269), new Point(0.710858583450317, 0.270740330219269), "520");
addFace(["2213", "2325", "2245", "511"], "521");
setUVsToFace(new Point(0.768143475055695, 0.249499872326851), new Point(0.836370289325714, 0.249499872326851), new Point(0.836370289325714, 0.253115629178616), "521");
addFace(["1390", "2527", "1371", "1373"], "522");
setUVsToFace(new Point(0.186654835939407, 0.983603656291962), new Point(0.186654835939407, 0.94562840461731), new Point(0.237503215670586, 0.94562840461731), "522");
addFace(["61", "2446", "2442", "2443"], "523");
setUVsToFace(new Point(0.423821657896042, 0.184213668107986), new Point(0.468877196311951, 0.184213668107986), new Point(0.468877196311951, 0.18614462018013), "523");
addFace(["141", "1024", "1008", "1010"], "524");
setUVsToFace(new Point(0.656768500804901, 0.0209814757108688), new Point(0.666101396083832, 0.0209814757108688), new Point(0.666101396083832, 0.0541294701397419), "524");
addFace(["2176", "2174", "2188", "505"], "526");
setUVsToFace(new Point(0.71271276473999, 0.749333560466766), new Point(0.636201322078705, 0.749333560466766), new Point(0.636201322078705, 0.739960551261902), "526");
addFace(["1564", "1655", "1654"], "527");
setUVsToFace(new Point(0.676081717014313, 0.931873559951782), new Point(0.681874573230743, 0.931873559951782), new Point(0.679150938987732, 0.931873559951782), "527");
addFace(["1803", "382", "1787", "1813"], "528");
setUVsToFace(new Point(0.00754454128550511, 0.735369741916656), new Point(0.00499999988824129, 0.726643204689026), new Point(0.0365388616919518, 0.726643204689026), "528");
addFace(["1073", "1208", "1224", "1071"], "529");
setUVsToFace(new Point(0.612125813961029, 0.97127366065979), new Point(0.612125813961029, 0.973204553127289), new Point(0.596938729286194, 0.973204553127289), "529");
addFace(["877", "878", "72", "881"], "530");
setUVsToFace(new Point(0.617010474205017, 0.690327107906342), new Point(0.571954905986786, 0.690327107906342), new Point(0.571954905986786, 0.688396215438843), "530");
addFace(["989", "611", "612", "1965"], "531");
setUVsToFace(new Point(0.408347905047338, 0.278976082801819), new Point(0.410278856754303, 0.282300472259521), new Point(0.331280797719955, 0.282300472259521), "531");
addFace(["2006", "378", "377", "2792"], "535");
setUVsToFace(new Point(0.140561118721962, 0.725256502628326), new Point(0.170812666416168, 0.725256502628326), new Point(0.170812666416168, 0.775966584682465), "535");
addFace(["2832", "635", "2794", "2799"], "537");
setUVsToFace(new Point(0.218987807631493, 0.592497289180756), new Point(0.218987807631493, 0.561602056026459), new Point(0.344499588636349, 0.561602056026459), "537");
addFace(["744", "2835", "2523", "746"], "539");
setUVsToFace(new Point(0.075640857219696, 0.899692833423615), new Point(0.0873872265219688, 0.89196902513504), new Point(0.0873872252746605, 0.932519020410961), "539");
addFace(["1722", "1698", "1688", "1718"], "541");
setUVsToFace(new Point(0.512573616613284, 0.815859496593475), new Point(0.540250599384308, 0.815859496593475), new Point(0.540250599384308, 0.821008741855621), "541");
addFace(["802", "801", "790", "789"], "542");
setUVsToFace(new Point(0.890700101852417, 0.858474612236023), new Point(0.890700101852417, 0.857187271118164), new Point(0.910817503929138, 0.857187271118164), "542");
addFace(["352", "1752", "1742", "2627"], "543");
setUVsToFace(new Point(0.87186872959137, 0.495357871055603), new Point(0.87186872959137, 0.482484847307205), new Point(0.958117723464966, 0.482484847307205), "543");
addFace(["377", "374", "2211", "2281", "2265"], "166");
setUVsToFace(new Point(0.710858583450317, 0.228259414434433), new Point(0.739501059055328, 0.207662612199783), new Point(0.768143475055695, 0.228259414434433), "166");
addFace(["2223", "2139", "2141", "492"], "546");
setUVsToFace(new Point(0.874269545078278, 0.892733573913574), new Point(0.874269545078278, 0.894664466381073), new Point(0.860109150409698, 0.894664466381073), "546");
addFace(["2043", "2018", "2045", "2059"], "547");
setUVsToFace(new Point(0.262257874011993, 0.886116623878479), new Point(0.26676344871521, 0.886116623878479), new Point(0.26676344871521, 0.903495229707426), "547");
addFace(["1621", "2681", "318", "1605"], "553");
setUVsToFace(new Point(0.676081717014313, 0.925437092781067), new Point(0.676081717014313, 0.92157518863678), new Point(0.687023758888245, 0.92157518863678), "553");
addFace(["27", "721", "725", "640"], "555");
setUVsToFace(new Point(0.983296394348145, 0.610171794891357), new Point(0.781834006309509, 0.610171794891357), new Point(0.781834006309509, 0.608240842819214), "555");
addFace(["2808", "363", "555", "2826"], "556");
setUVsToFace(new Point(0.550252795219421, 0.260672097807022), new Point(0.556608200073242, 0.253979861736298), new Point(0.556608200073242, 0.282300472259521), "556");
addFace(["318", "1608", "1605"], "557");
setUVsToFace(new Point(0.687023758888245, 0.92157518863678), new Point(0.687023758888245, 0.931873559951782), new Point(0.687023758888245, 0.925437092781067), "557");
addFace(["2125", "2139", "2223", "2233"], "558");
setUVsToFace(new Point(0.964944005012512, 0.654879510402679), new Point(0.982429027557373, 0.654879510402679), new Point(0.982429027557373, 0.656810522079468), "558");
addFace(["1897", "1922", "1964", "1883"], "559");
setUVsToFace(new Point(0.479879677295685, 0.570746626629648), new Point(0.486603647470474, 0.561602056026459), new Point(0.486603647470474, 0.58606082201004), "559");
addFace(["520", "2278", "2277", "2902"], "560");
setUVsToFace(new Point(0.406656265258789, 0.227432131767273), new Point(0.364819049835205, 0.227432131767273), new Point(0.364819049835205, 0.224857538938522), "560");
addFace(["564", "1735", "1752", "352"], "561");
setUVsToFace(new Point(0.96410995721817, 0.175112240876269), new Point(0.96410995721817, 0.150653526186943), new Point(0.981488406658173, 0.162239238619804), "561");
addFace(["640", "13", "2486", "2850"], "562");
setUVsToFace(new Point(0.824577331542969, 0.413962006568909), new Point(0.830751359462738, 0.408169150352478), new Point(0.830751359462738, 0.448719143867493), "562");
addFace(["2174", "2954", "382", "2188"], "563");
setUVsToFace(new Point(0.0376680381596088, 0.852778971195221), new Point(0.00499999988824129, 0.858748257160187), new Point(0.00499999988824129, 0.838145393937645), "563");
addFace(["2569", "1397", "402", "2705"], "564");
setUVsToFace(new Point(0.572367250919342, 0.266638904809952), new Point(0.572367250919342, 0.228178024291992), new Point(0.576414287090302, 0.228178024291992), "564");
addFace(["2826", "465", "2084", "2808"], "565");
setUVsToFace(new Point(0.489848345518112, 0.905153512954712), new Point(0.489848345518112, 0.902578890323639), new Point(0.495615571737289, 0.902578890323639), "565");
addFace(["294", "1544", "292", "3024"], "566");
setUVsToFace(new Point(0.506097495555878, 0.628910660743713), new Point(0.506097495555878, 0.623984391314959), new Point(0.589148819446564, 0.6247478723526), "566");
addFace(["382", "2954", "516", "1787"], "567");
setUVsToFace(new Point(0.212216198444366, 0.24546018242836), new Point(0.212216198444366, 0.224857538938522), new Point(0.288727546517316, 0.224857538938522), "567");
addFace(["2067", "2038", "2034", "446"], "568");
setUVsToFace(new Point(0.800499856472015, 0.154374301433563), new Point(0.808223605155945, 0.154374301433563), new Point(0.808223605155945, 0.160810798406601), "568");
addFace(["811", "813", "808", "825"], "569");
setUVsToFace(new Point(0.596938729286194, 0.955431461334229), new Point(0.596938729286194, 0.954144179821014), new Point(0.617056131362915, 0.954144179821014), "569");
addFace(["3001", "713", "3015", "2955", "974", "136", "3007"], "102");
setUVsToFace(new Point(0.0566237196326256, 0.234049335122108), new Point(0.00499999988824129, 0.207662627100945), new Point(0.133690842036357, 0.207662622111714), "102");
addFace(["937", "938", "3007", "3000"], "572");
setUVsToFace(new Point(0.958316266536713, 0.209610641002655), new Point(0.958316266536713, 0.230851098895073), new Point(0.934501230716705, 0.230851098895073), "572");
addFace(["1817", "1780", "379", "395"], "574");
setUVsToFace(new Point(0.654217123985291, 0.710598707199097), new Point(0.623327569724252, 0.705164966472838), new Point(0.671595692634583, 0.705164968967438), "574");
addFace(["2870", "2552", "2597", "2871"], "575");
setUVsToFace(new Point(0.296497225761414, 0.482484871496637), new Point(0.296497225761414, 0.523034870624542), new Point(0.289899230003357, 0.523034870624542), "575");
addFace(["601", "597", "1759", "366"], "576");
setUVsToFace(new Point(0.206599920988083, 0.250925898551941), new Point(0.206599920988083, 0.282300472259521), new Point(0.204668968915939, 0.278604686260223), "576");
addFace(["903", "81", "681", "2666"], "578");
setUVsToFace(new Point(0.716210842132568, 0.561602056026459), new Point(0.793372631072998, 0.561602056026459), new Point(0.793372631072998, 0.57383143901825), "578");
addFace(["953", "1273", "1233", "1875"], "579");
setUVsToFace(new Point(0.978717382020529, 0.0200110391025784), new Point(0.99248069524765, 0.0610907226800919), new Point(0.973878264427185, 0.0654412135481834), "579");
addFace(["2034", "2577", "2020", "446"], "580");
setUVsToFace(new Point(0.131494879722595, 0.0688795149326324), new Point(0.203765483002354, 0.0284503116108276), new Point(0.140184164047241, 0.0766033306717873), "580");
addFace(["1987", "2792", "2191", "2196"], "581");
setUVsToFace(new Point(0.850182990144394, 0.285196542739868), new Point(0.992551803588867, 0.285196542739868), new Point(0.992551803588867, 0.319738447666168), "581");
addFace(["1445", "1429", "1433", "1486"], "582");
setUVsToFace(new Point(0.421771824359894, 0.87084270022536), new Point(0.432070255279541, 0.870842695236206), new Point(0.432070255279541, 0.873417258262634), "582");
addFace(["2284", "705", "10", "9"], "583");
setUVsToFace(new Point(0.556608200073242, 0.396287530660629), new Point(0.00499999988824129, 0.396287530660629), new Point(0.00499999988824129, 0.336504310369492), "583");
addFace(["2913", "2912", "472", "538"], "584");
setUVsToFace(new Point(0.676081717014313, 0.839414119720459), new Point(0.676081717014313, 0.834264874458313), new Point(0.698995707568602, 0.834264874458313), "584");
addFace(["1096", "1101", "1095", "1093"], "585");
setUVsToFace(new Point(0.765195488929749, 0.670623064041138), new Point(0.794354021549225, 0.670623064041138), new Point(0.794354021549225, 0.685810267925262), "585");
addFace(["1259", "1277", "202", "1185"], "586");
setUVsToFace(new Point(0.957802593708038, 0.625915348529816), new Point(0.915427327156067, 0.625915348529816), new Point(0.915427327156067, 0.623984336853027), "586");
addFace(["386", "1810", "1812", "1813"], "587");
setUVsToFace(new Point(0.57787823677063, 0.981572091579437), new Point(0.57787823677063, 0.983502924442291), new Point(0.569510757923126, 0.983502924442291), "587");
addFace(["2792", "2797", "2794", "2006"], "590");
setUVsToFace(new Point(0.143779392717072, 0.74507140587208), new Point(0.128331750631332, 0.714176058769226), new Point(0.130906343460083, 0.705164968967438), "590");
addFace(["960", "2648", "302", "129"], "591");
setUVsToFace(new Point(0.473815045403184, 0.107619315694693), new Point(0.271708905696869, 0.107619322836399), new Point(0.434327840805054, 0.101107232272625), "591");
addFace(["511", "2143", "497", "510"], "592");
setUVsToFace(new Point(0.973701298236847, 0.857187271118164), new Point(0.973701298236847, 0.859118103981018), new Point(0.959540963172913, 0.859118103981018), "592");
addFace(["2357", "540", "468", "2369"], "594");
setUVsToFace(new Point(0.37770767004361, 0.717780469600779), new Point(0.393807858228683, 0.722929656505585), new Point(0.393807858228683, 0.728078842163086), "594");
addFace(["1086", "1092", "168", "1084"], "595");
setUVsToFace(new Point(0.556762874126434, 0.993243396282196), new Point(0.543764770030975, 0.993243396282196), new Point(0.543764770030975, 0.991312503814697), "595");
addFace(["149", "1034", "1003", "1036"], "598");
setUVsToFace(new Point(0.936018347740173, 0.689683496952057), new Point(0.907250761985779, 0.689683496952057), new Point(0.907250761985779, 0.688396215438843), "598");
addFace(["1008", "1024", "1026", "1004"], "599");
setUVsToFace(new Point(0.473061382770538, 0.691391587257385), new Point(0.506209433078766, 0.691391587257385), new Point(0.506209433078766, 0.692678868770599), "599");
addFace(["39", "763", "40", "759"], "600");
setUVsToFace(new Point(0.957246422767639, 0.808124244213104), new Point(0.9759122133255, 0.808124244213104), new Point(0.9759122133255, 0.810055136680603), "600");
addFace(["1457", "257", "1454", "270"], "601");
setUVsToFace(new Point(0.79253876209259, 0.58828764654958), new Point(0.782240390777588, 0.588287651538849), new Point(0.782240390777588, 0.585713028907776), "601");
addFace(["1713", "1711", "1735", "564"], "602");
setUVsToFace(new Point(0.859666585922241, 0.436134368181229), new Point(0.859666585922241, 0.411675661802292), new Point(0.900000929832458, 0.411675661802292), "602");
addFace(["1283", "2554", "1233", "1273"], "609");
setUVsToFace(new Point(0.933987677097321, 0.386813282966614), new Point(0.86849516848775, 0.395561966346268), new Point(0.908401370048523, 0.357101082801819), "609");
addFace(["3044", "1401", "688", "1413"], "616");
setUVsToFace(new Point(0.799046506439959, 0.310942560434341), new Point(0.833525419235229, 0.310942560434341), new Point(0.833525419235229, 0.32317191362381), "616");
addFace(["2054", "2068", "2043", "2059"], "617");
setUVsToFace(new Point(0.487369358539581, 0.921937108039856), new Point(0.500242412090302, 0.921937108039856), new Point(0.500242412090302, 0.931591808795929), "617");
addFace(["2615", "1722", "1718", "2616"], "626");
setUVsToFace(new Point(0.512573599815369, 0.838387117808597), new Point(0.512573599815369, 0.815859496593475), new Point(0.515148222446442, 0.821008741855621), "626");
addFace(["2075", "2082", "2084", "465"], "627");
setUVsToFace(new Point(0.842633008956909, 0.470229864120483), new Point(0.842633008956909, 0.464462637901306), new Point(0.973240971565247, 0.464462637901306), "627");
addFace(["1621", "1636", "2687", "2681"], "628");
setUVsToFace(new Point(0.516715049743652, 0.0779358074069023), new Point(0.49998015165329, 0.0779358074069023), new Point(0.49998015165329, 0.066350124909426), "628");
addFace(["2188", "382", "1782", "2166"], "630");
setUVsToFace(new Point(0.0376680381596088, 0.843405842781067), new Point(0.00499999988824129, 0.838145673274994), new Point(0.0378261496412797, 0.838145673274994), "630");
addFace(["349", "1718", "1688", "1705"], "631");
setUVsToFace(new Point(0.993134617805481, 0.104816555976868), new Point(0.958111941814423, 0.104816555976868), new Point(0.958111941814423, 0.0797142013907433), "631");
addFace(["2229", "2320", "2115", "2111"], "642");
setUVsToFace(new Point(0.435503304004669, 0.25001934170723), new Point(0.415846288204193, 0.25001934170723), new Point(0.415846288204193, 0.248088359832764), "642");
addFace(["534", "1765", "1759", "2343"], "643");
setUVsToFace(new Point(0.373285353183746, 0.855313777923584), new Point(0.36612194776535, 0.848662614822388), new Point(0.409890119985686, 0.848662614822388), "643");
addFace(["2552", "2598", "568", "2597"], "644");
setUVsToFace(new Point(0.265110943225634, 0.105688363313675), new Point(0.268484532833099, 0.0387487448751926), new Point(0.278782963752747, 0.0387487448751926), "644");
addFace(["1765", "1764", "366"], "646");
setUVsToFace(new Point(0.160900771617889, 0.278604686260223), new Point(0.160900786519051, 0.250925898551941), new Point(0.204668983817101, 0.250925898551941), "646");
addFace(["516", "2176", "505"], "653");
setUVsToFace(new Point(0.100011147558689, 0.854242742061615), new Point(0.105980522930622, 0.821574687957764), new Point(0.115353554487228, 0.821574687957764), "653");
addFace(["47", "789", "790", "783"], "655");
setUVsToFace(new Point(0.783678710460663, 0.96318256855011), new Point(0.796111881732941, 0.96318256855011), new Point(0.796111881732941, 0.964469850063324), "655");
addFace(["295", "1549", "294", "3024"], "656");
setUVsToFace(new Point(0.815742075443268, 0.709327638149261), new Point(0.732690751552582, 0.710091352462769), new Point(0.732690751552582, 0.705164968967438), "656");
addFace(["2325", "516", "2245"], "659");
setUVsToFace(new Point(0.678453087806702, 0.688396215438843), new Point(0.628892064094543, 0.688396215438843), new Point(0.674837410449982, 0.688396215438843), "659");
addFace(["374", "1997", "1996"], "661");
setUVsToFace(new Point(0.367843747138977, 0.797639966011047), new Point(0.41855376958847, 0.797639966011047), new Point(0.41855376958847, 0.832919120788574), "661");
addFace(["1993", "2213", "2211"], "662");
setUVsToFace(new Point(0.306278735399246, 0.976032495498657), new Point(0.280923694372177, 0.988905549049377), new Point(0.280923694372177, 0.967665135860443), "662");
addFace(["1993", "2211", "1996"], "663");
setUVsToFace(new Point(0.306278735399246, 0.976032495498657), new Point(0.280923694372177, 0.967665135860443), new Point(0.331633776426315, 0.967665135860443), "663");
addFace(["1993", "1996", "436"], "664");
setUVsToFace(new Point(0.306278735399246, 0.976032495498657), new Point(0.331633776426315, 0.967665135860443), new Point(0.331633776426315, 0.988905549049377), "664");
addFace(["1997", "374", "377"], "665");
setUVsToFace(new Point(0.448260068893433, 0.739960551261902), new Point(0.498970150947571, 0.739960551261902), new Point(0.498970150947571, 0.775239646434784), "665");
addFace(["1939", "1782", "379"], "673");
setUVsToFace(new Point(0.2809237241745, 0.877254366874695), new Point(0.329191625118256, 0.877254366874695), new Point(0.329191625118256, 0.910431921482086), "673");
addFace(["31", "742", "33", "748"], "674");
setUVsToFace(new Point(0.714837849140167, 0.834264874458313), new Point(0.747663974761963, 0.834264874458313), new Point(0.747663974761963, 0.841344952583313), "674");
addFace(["2084", "2082", "463", "2808"], "675");
setUVsToFace(new Point(0.855279207229614, 0.657454133033752), new Point(0.724671185016632, 0.657454133033752), new Point(0.724671185016632, 0.654879510402679), "675");
addFace(["1149", "1161", "1312", "1357"], "676");
setUVsToFace(new Point(0.693120777606964, 0.968707203865051), new Point(0.676081717014313, 0.968707203865051), new Point(0.676081717014313, 0.966776311397552), "676");
addFace(["1767", "600", "601", "366"], "687");
setUVsToFace(new Point(0.591295977521821, 0.589280923094629), new Point(0.589365065097809, 0.592976689338684), new Point(0.589365065097809, 0.561602056026459), "687");
addFace(["1114", "1128", "177", "1111"], "689");
setUVsToFace(new Point(0.446329176425934, 0.921937108039856), new Point(0.475487679243088, 0.921937108039856), new Point(0.475487679243088, 0.938976168632507), "689");
addFace(["2345", "2341", "534", "2343"], "722");
setUVsToFace(new Point(0.953062415122986, 0.656810522079468), new Point(0.924098134040833, 0.656810522079468), new Point(0.924098134040833, 0.654879510402679), "722");
addFace(["245", "1839", "2775", "1273"], "723");
setUVsToFace(new Point(0.138472020626068, 0.9360231757164), new Point(0.159068822860718, 0.930562138557434), new Point(0.159068822860718, 0.979157800246087), "723");
addFace(["1922", "1897", "1896"], "730");
setUVsToFace(new Point(0.486603647470474, 0.561602056026459), new Point(0.479879677295685, 0.570746600627899), new Point(0.473279178142548, 0.565463960170746), "730");
addFace(["86", "1928", "1964"], "733");
setUVsToFace(new Point(0.133579581975937, 0.948005795478821), new Point(0.133579581975937, 0.948005795478821), new Point(0.133579581975937, 0.948005795478821), "733");
addFace(["1928", "427", "1920"], "739");
setUVsToFace(new Point(0.133579581975937, 0.951966404914856), new Point(0.133579596877098, 0.97915780544281), new Point(0.133579581975937, 0.976425051689148), "739");
addFace(["2048", "2068", "2054", "2061"], "764");
setUVsToFace(new Point(0.813372850418091, 0.150413751602173), new Point(0.800499856472015, 0.150413751602173), new Point(0.800499856472015, 0.137540742754936), "764");
addFace(["1157", "1345", "1312", "1161"], "765");
setUVsToFace(new Point(0.95785003900528, 0.672554016113281), new Point(0.95785003900528, 0.670623064041138), new Point(0.987213790416718, 0.670623064041138), "765");
addFace(["1969", "1965", "117"], "766");
setUVsToFace(new Point(0.0648115947842598, 0.739616930484772), new Point(0.053917407989502, 0.71435672044754), new Point(0.08416897803545, 0.739600241184235), "766");
addFace(["2797", "2792", "1987"], "773");
setUVsToFace(new Point(0.00500000966712832, 0.689421415328979), new Point(0.00500000966712832, 0.654879510402679), new Point(0.147368833422661, 0.654879510402679), "773");
addFace(["10", "696", "2737", "2537"], "777");
setUVsToFace(new Point(0.75927072763443, 0.538778358414158), new Point(0.568489789962769, 0.549720406532288), new Point(0.568489789962769, 0.534916460514069), "777");
addFace(["2067", "2018", "2043"], "790");
setUVsToFace(new Point(0.743896842002869, 0.586885750293732), new Point(0.743896842002869, 0.586885750293732), new Point(0.743896842002869, 0.586885750293732), "790");
addFace(["2099", "2923", "549"], "826");
setUVsToFace(new Point(0.50366073846817, 0.705164968967438), new Point(0.50366073846817, 0.728078842163086), new Point(0.459451377391815, 0.719067752361298), "826");
addFace(["540", "2919", "468"], "831");
setUVsToFace(new Point(0.393807858228683, 0.722929656505585), new Point(0.444871097803116, 0.728078842163086), new Point(0.393807858228683, 0.728078842163086), "831");
addFace(["2258", "2320", "2245"], "910");
setUVsToFace(new Point(0.831971287727356, 0.267275929450989), new Point(0.831971287727356, 0.253115624189377), new Point(0.836370289325714, 0.253115653991699), "910");
addFace(["2258", "2256", "492"], "914");
setUVsToFace(new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), "914");
addFace(["2258", "492", "2134"], "915");
setUVsToFace(new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), "915");
addFace(["2258", "2134", "2231"], "916");
setUVsToFace(new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), new Point(0.133579581975937, 0.94404524564743), "916");
addFace(["511", "2223", "2222"], "937");
setUVsToFace(new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), "937");
addFace(["2223", "511", "2233"], "938");
setUVsToFace(new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), "938");
addFace(["2233", "511", "2229"], "939");
setUVsToFace(new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), "939");
addFace(["2229", "511", "2320"], "940");
setUVsToFace(new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), new Point(0.739936232566833, 0.586885750293732), "940");
addFace(["2320", "511", "2245"], "941");
setUVsToFace(new Point(0.388804942369461, 0.469909369945526), new Point(0.4526327252388, 0.469909369945526), new Point(0.384405851364136, 0.469909369945526), "941");
addFace(["468", "543", "2369"], "964");
setUVsToFace(new Point(0.393807858228683, 0.728078842163086), new Point(0.377707690000534, 0.728078842163086), new Point(0.377707690000534, 0.722929656505585), "964");
addFace(["2400", "2832", "2799"], "983");
setUVsToFace(new Point(0.133690878748894, 0.324622690677643), new Point(0.288727581501007, 0.295659065246582), new Point(0.414239346981049, 0.295659065246582), "983");
addFace(["2799", "2798", "555"], "984");
setUVsToFace(new Point(0.414239346981049, 0.295659065246582), new Point(0.414239346981049, 0.286647945642471), new Point(0.556608200073242, 0.286647945642471), "984");
addFace(["746", "771", "2422"], "990");
setUVsToFace(new Point(0.265110969543457, 0.176329210400581), new Point(0.272191137075424, 0.160461202263832), new Point(0.272191137075424, 0.176329210400581), "990");
addFace(["2465", "2457", "888"], "1002");
setUVsToFace(new Point(0.271809965372086, 0.188075572252274), new Point(0.271809965372086, 0.18614462018013), new Point(0.279000401496887, 0.18614462018013), "1002");
addFace(["888", "76", "2464"], "1003");
setUVsToFace(new Point(0.279000401496887, 0.18614462018013), new Point(0.279000401496887, 0.184213668107986), new Point(0.324055880308151, 0.184213668107986), "1003");
addFace(["2523", "2465", "2537"], "1023");
setUVsToFace(new Point(0.265110969543457, 0.188075572252274), new Point(0.271809965372086, 0.188075572252274), new Point(0.00499999988824129, 0.195780947804451), "1023");
addSurface(["198", "566", "169", "233", "312", "11", "345", "366", "226", "329", "609", "243", "357", "352", "557", "521", "132", "128", "106", "364", "205", "283", "568", "938", "330", "137", "267", "67", "1117", "397", "314", "569", "379", "378", "138", "539", "203", "122", "43", "286", "493", "105", "31", "72", "765", "777", "32", "315", "35", "29", "437", "662", "62", "601", "491", "336", "630", "586", "30", "28", "61", "388", "159", "295", "425", "436", "149", "124", "561", "292", "560", "404", "93", "358", "333", "107", "301", "119", "140", "56", "355", "246", "722", "393", "416", "764", "313", "179", "655", "36", "511", "408", "200", "391", "316", "12", "440", "55", "75", "510", "575", "244", "773", "183", "939", "733", "97", "237", "676", "498", "578", "306", "399", "25", "579", "302", "264", "535", "1231", "285", "224", "543", "41", "24", "574", "214", "223", "126", "406", "136", "447", "51", "40", "507", "400", "441", "392", "266", "209", "163", "1162", "19", "583", "95", "52", "182", "39", "3", "417", "351", "1101", "517", "449", "235", "164", "165", "322", "513", "509", "395", "18", "293", "38", "213", "826", "582", "102", "15", "390", "739", "8", "121", "443", "347", "123", "465", "23", "428", "546", "656", "14", "280", "1105", "268", "263", "528", "44", "653", "88", "143", "192", "108", "386", "353", "410", "940", "433", "180", "96", "115", "332", "125", "319", "375", "103", "191", "564", "643", "20", "446", "642", "663", "175", "527", "189", "170", "73", "261", "84", "403", "162", "299", "1253", "321", "260", "26", "174", "104", "405", "127", "429", "16", "500", "148", "135", "338", "508", "242", "324", "300", "616", "190", "499", "372", "85", "216", "320", "337", "407", "418", "444", "109", "171", "112", "360", "349", "340", "116", "181", "547", "82", "241", "80", "110", "204", "54", "129", "9", "430", "402", "101", "363", "37", "161", "130", "238", "81", "65", "21", "592", "626", "50", "33", "64", "57", "1147", "1149", "218", "448", "339", "217", "231", "371", "309", "409", "674", "17", "89", "284", "426", "131", "524", "376", "523", "964", "10", "187", "76", "232", "173", "555", "1023", "631", "427", "120", "168", "166", "1251", "790", "167", "594", "259", "537", "334", "225", "234", "489", "215", "488", "380", "251", "239", "294", "185", "206", "387", "553", "250", "53", "1109", "438", "460", "142", "211", "941", "563", "723", "452", "184", "240", "59", "382", "74", "664", "87", "503", "177", "587", "210", "273", "60", "249", "910", "150", "359", "504", "1051", "219", "482", "914", "341", "520", "66", "562", "144", "384", "394", "383", "381", "45", "139", "617", "83", "202", "401", "193", "529", "157", "595", "471", "63", "627", "111", "201", "58", "230", "265", "519", "421", "196", "469", "687", "155", "461", "151", "915", "831", "0", "599", "195", "79", "229", "470", "472", "94", "689", "91", "1", "197", "208", "42", "496", "141", "530", "279", "1002", "252", "984", "207", "156", "457", "272", "146", "271", "281", "541", "1063", "287", "71", "7", "160", "646", "1252", "134", "282", "256", "86", "1145", "730", "133", "424", "1039", "1055", "288", "484", "178", "113", "307", "145", "147", "13", "99", "227", "385", "485", "298", "114", "245", "422", "494", "5", "598", "644", "581", "98", "916", "591", "659", "331", "542", "6", "308", "46", "100", "27", "22", "297", "580", "473", "176", "661", "468", "590", "665", "937", "258", "344", "584", "990", "476", "1054", "477", "92", "154", "194", "531", "585", "983", "153", "362", "526", "559", "69", "1123", "34", "303", "325", "172", "318", "1155", "70", "558", "253", "423", "356", "277", "152", "514", "236", "291", "1003", "354", "326", "317", "254", "342", "222", "1180", "270", "221", "565", "257", "255", "269", "675", "350", "90", "275", "518", "212", "673", "276", "117", "118", "188", "4", "68", "576", "361", "413", "199", "450", "228", "290", "628", "602", "567", "505", "296", "502", "48", "343", "186", "492", "47", "327", "274", "600", "420", "158", "369", "1137", "49", "78", "556", "77", "328", "323", "365", "305", "412", "522", "506", "516", "335", "304", "367", "463", "247", "373", "766", "2", "572", "515", "370", "248", "311", "220"], "FactoryMesh");
setMaterialToSurface(material, "FactoryMesh");
}
private function onLoadComplete(_arg1:Event):void{
material.texture = new TextureData(Bitmap(loader.content).bitmapData);
complete();
}
public function load(_arg1:Function):String{
this.onLoadMethod = _arg1;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.NETWORK_ERROR, onLoadError);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.VERIFY_ERROR, onLoadError);
loader.load(new URLRequest("factory.jpg"), new LoaderContext(false, ApplicationDomain.currentDomain));
return ("Loading high resolution texture");
}
private function complete():void{
onLoadMethod.call();
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.NETWORK_ERROR, onLoadError);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.VERIFY_ERROR, onLoadError);
onLoadMethod = null;
loader = null;
}
private function onLoadError(_arg1:IOErrorEvent):void{
complete();
}
}
}//package factory
Section 29
//FactoryMesh_Bmp (factory.FactoryMesh_Bmp)
package factory {
import mx.core.*;
public class FactoryMesh_Bmp extends BitmapAsset {
}
}//package factory
Section 30
//BitmapAsset (mx.core.BitmapAsset)
package mx.core {
import flash.display.*;
public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject {
mx_internal static const VERSION:String = "3.0.0.0";
public function BitmapAsset(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
public function get measuredWidth():Number{
if (bitmapData){
return (bitmapData.width);
};
return (0);
}
public function get measuredHeight():Number{
if (bitmapData){
return (bitmapData.height);
};
return (0);
}
public function setActualSize(_arg1:Number, _arg2:Number):void{
width = _arg1;
height = _arg2;
}
public function move(_arg1:Number, _arg2:Number):void{
this.x = _arg1;
this.y = _arg2;
}
}
}//package mx.core
Section 31
//FlexBitmap (mx.core.FlexBitmap)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexBitmap extends Bitmap {
mx_internal static const VERSION:String = "3.0.0.0";
public function FlexBitmap(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
var bitmapData = _arg1;
var pixelSnapping = _arg2;
var smoothing = _arg3;
super(bitmapData, pixelSnapping, smoothing);
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 32
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 33
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(_arg1:Point):Point;
function get name():String;
function set width(_arg1:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(_arg1:String):void;
function set scaleX(_arg1:Number):void;
function set scaleY(_arg1:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(_arg1:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(_arg1:Point):Point;
function get height():Number;
function set blendMode(_arg1:String):void;
function get parent():DisplayObjectContainer;
function getBounds(_arg1:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(_arg1:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(_arg1:Number):void;
function set accessibilityProperties(_arg1:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(_arg1:Boolean):void;
function get scaleX():Number;
function get scaleY():Number;
function get scrollRect():Rectangle;
function get mouseX():Number;
function get mouseY():Number;
function set height(_arg1:Number):void;
function set mask(_arg1:DisplayObject):void;
function getRect(_arg1:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(_arg1:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(_arg1:DisplayObject):Boolean;
function set opaqueBackground(_arg1:Object):void;
function set visible(_arg1:Boolean):void;
function get mask():DisplayObject;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function get transform():Transform;
function set filters(_arg1:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(_arg1:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 34
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(_arg1:Array):void;
function get isDocument():Boolean;
function set repeaters(_arg1:Array):void;
function initializeRepeaterArrays(_arg1:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(_arg1:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 35
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 36
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import mx.core.*;
import flash.utils.*;
public class NameUtil {
mx_internal static const VERSION:String = "3.0.0.0";
private static var counter:int = 0;
public static function displayObjectToString(_arg1:DisplayObject):String{
var _local2:String;
var _local4:String;
var _local5:Array;
var _local3:DisplayObject = _arg1;
while (_local3 != null) {
if (((((_local3.parent) && (_local3.stage))) && ((_local3.parent == _local3.stage)))){
break;
};
_local4 = _local3.name;
if ((_local3 is IRepeaterClient)){
_local5 = IRepeaterClient(_local3).instanceIndices;
if (_local5){
_local4 = (_local4 + (("[" + _local5.join("][")) + "]"));
};
};
_local2 = ((_local2 == null)) ? _local4 : ((_local4 + ".") + _local2);
_local3 = _local3.parent;
};
return (_local2);
}
public static function createUniqueName(_arg1:Object):String{
if (!_arg1){
return (null);
};
var _local2:String = getQualifiedClassName(_arg1);
var _local3:int = _local2.indexOf("::");
if (_local3 != -1){
_local2 = _local2.substr((_local3 + 2));
};
var _local4:int = _local2.charCodeAt((_local2.length - 1));
if ((((_local4 >= 48)) && ((_local4 <= 57)))){
_local2 = (_local2 + "_");
};
return ((_local2 + counter++));
}
}
}//package mx.utils
Section 37
//Factory (Factory)
package {
import flash.events.*;
import flash.display.*;
import com.alternativagame.engine3d.*;
import flash.geom.*;
import factory.*;
import flash.text.*;
import com.alternativagame.admin.*;
import com.alternativagame.utility.*;
import flash.ui.*;
public class Factory extends Sprite {
private var prevDragCoords:Point;
private var left:Boolean;// = false
private var currentDragCoords:Point;
private var scene:Scene3D;
private var qualityTimer:uint;// = 0
private var low:Boolean;// = false
private var factoryMesh:FactoryMesh;
private var debug:Boolean;// = false
private var up:Boolean;// = false
private var right:Boolean;// = false
private var loadingSequence:Array;
private var loadingCounter:int;// = -1
private var down:Boolean;// = false
private var startRotX:Number;
private var camera:Camera3D;
private var startRotZ:Number;
private var startDragCoords:Point;
private var loadingInfo:TextField;
private var qualityTimerMax:uint;// = 50
private static const bmpLogo:Class = Factory_bmpLogo;
private static const logoBmp:BitmapData = new bmpLogo().bitmapData;
public function Factory(){
factoryMesh = new FactoryMesh();
currentDragCoords = new Point();
loadingSequence = [factoryMesh];
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.frameRate = 100;
MouseUtility.init(stage);
scene = new Scene3D();
scene.root = new Object3D("root");
scene.root.addObject(factoryMesh);
scene.calculate();
camera = new Camera3D("camera");
camera.z = 250;
camera.fov = 0;
camera.zoom = 0.6;
camera.rotX = -1.93;
camera.rotZ = 2.15;
scene.root.addObject(camera);
addChild(camera.view);
FPS.init(this);
var _local1:Bitmap = new Bitmap(logoBmp);
_local1.x = 3;
_local1.y = 3;
addChild(_local1);
var _local2:TestInfo = new TestInfo();
_local2.x = 3;
_local2.y = 46;
_local2.write("Drag — rotate camera");
_local2.write("WSAD or arrows — move camera");
_local2.write("Wheel or +/- — change zoom");
_local2.write("T — show polygons");
addChild(_local2);
loadingInfo = new TextField();
loadingInfo.x = 3;
loadingInfo.text = " ";
loadingInfo.autoSize = TextFieldAutoSize.LEFT;
loadingInfo.selectable = false;
loadingInfo.setTextFormat(new TextFormat("Tahoma", 10, 0xFF0000));
loadingInfo.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFF0000);
addChild(loadingInfo);
loadNext();
onResize(null);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
stage.addEventListener(Event.RESIZE, onResize);
}
private function onKeyDown(_arg1:KeyboardEvent):void{
var _local2:*;
switch (_arg1.keyCode){
case 107:
case 187:
multiplyZoom((3 / 20));
break;
case 109:
case 189:
multiplyZoom((-3 / 20));
break;
case 84:
changeDebug();
break;
case 87:
case Keyboard.UP:
up = true;
break;
case 83:
case Keyboard.DOWN:
down = true;
break;
case 65:
case Keyboard.LEFT:
left = true;
break;
case 68:
case Keyboard.RIGHT:
right = true;
break;
};
}
private function changeDebug():void{
debug = !(debug);
factoryMesh.material.debug = debug;
}
private function onMouseDown(_arg1:MouseEvent):void{
startDragCoords = MouseUtility.globalCoords(false);
currentDragCoords = startDragCoords.clone();
prevDragCoords = startDragCoords.clone();
startRotX = camera.rotX;
startRotZ = camera.rotZ;
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onKeyUp(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case 87:
case Keyboard.UP:
up = false;
break;
case 83:
case Keyboard.DOWN:
down = false;
break;
case 65:
case Keyboard.LEFT:
left = false;
break;
case 68:
case Keyboard.RIGHT:
right = false;
break;
};
}
private function onMouseUp(_arg1:MouseEvent):void{
startDragCoords = null;
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onResize(_arg1:Event):void{
camera.view.width = stage.stageWidth;
camera.view.height = stage.stageHeight;
loadingInfo.y = ((stage.stageHeight - loadingInfo.height) - 1);
}
private function checkQuality():void{
if (((((((((up) || (down))) || (left))) || (right))) || (((!((startDragCoords == null))) && (!(prevDragCoords.equals(currentDragCoords))))))){
if (qualityTimer != qualityTimerMax){
qualityTimer = qualityTimerMax;
stage.quality = StageQuality.LOW;
};
} else {
if (qualityTimer > 0){
qualityTimer--;
if (qualityTimer == 0){
stage.quality = StageQuality.HIGH;
};
};
};
}
private function multiplyZoom(_arg1:Number):void{
var _local2:Number = (camera.zoom * (1 + _arg1));
camera.zoom = ((_local2)<0.1) ? 0.1 : ((_local2 > 20)) ? 20 : _local2;
}
private function onMouseWheel(_arg1:MouseEvent):void{
multiplyZoom((_arg1.delta / 20));
}
public function loadNext():void{
loadingInfo.text = " ";
loadingCounter++;
if (loadingCounter < loadingSequence.length){
loadingInfo.text = loadingSequence[loadingCounter].load(loadNext);
} else {
camera.rotX = (camera.rotX + 0.001);
};
}
private function onEnterFrame(_arg1:Event):void{
var _local2:Number;
if (startDragCoords != null){
prevDragCoords = currentDragCoords;
currentDragCoords = MouseUtility.globalCoords(false);
if (!startDragCoords.equals(currentDragCoords)){
camera.rotZ = (startRotZ + ((startDragCoords.x - currentDragCoords.x) / 100));
camera.rotX = (startRotX + ((startDragCoords.y - currentDragCoords.y) / 100));
camera.rotX = ((camera.rotX)>-1.7) ? -1.7 : ((camera.rotX)<-2.8) ? -2.8 : camera.rotX;
};
};
if (((((((up) || (down))) || (left))) || (right))){
_local2 = 50;
if (up){
camera.x = (camera.x - (Math.sin(camera.rotZ) * _local2));
camera.y = (camera.y + (Math.cos(camera.rotZ) * _local2));
} else {
if (down){
camera.x = (camera.x + (Math.sin(camera.rotZ) * _local2));
camera.y = (camera.y - (Math.cos(camera.rotZ) * _local2));
};
};
if (right){
camera.x = (camera.x + (Math.cos(camera.rotZ) * _local2));
camera.y = (camera.y + (Math.sin(camera.rotZ) * _local2));
} else {
if (left){
camera.x = (camera.x - (Math.cos(camera.rotZ) * _local2));
camera.y = (camera.y - (Math.sin(camera.rotZ) * _local2));
};
};
camera.x = ((camera.x)<-1685) ? -1685 : ((camera.x)>1688) ? 1688 : camera.x;
camera.y = ((camera.y)<-1031) ? -1031 : ((camera.y)>1216) ? 1216 : camera.y;
};
checkQuality();
scene.calculate();
}
}
}//package
import flash.text.*;
class TestInfo extends TextField {
private function TestInfo(){
autoSize = TextFieldAutoSize.LEFT;
selectable = false;
text = ("Alternativa3D 5.0 M1\nDemo \"Factory\"" + "\n");
setTextFormat(new TextFormat("Tahoma", 10, 12281395));
defaultTextFormat = new TextFormat("Tahoma", 10, 0x7F7F7F);
}
public function write(_arg1:String):void{
appendText(("\n" + _arg1));
}
}
Section 38
//Factory_bmpLogo (Factory_bmpLogo)
package {
import mx.core.*;
public class Factory_bmpLogo extends BitmapAsset {
}
}//package