STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228094
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2561 · P5121

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/68036040?noj=FRM68036040-5DC" width="1" height="1"></div>

3D Rubik's Cube.swf

This is the info page for
Flash #131532

(Click the ID number above for more basic data on this flash file.)


Text
<p align="right"><font face="Algerian" size="20" color="#000000" letterSpacing="0.000000" kerning="1">you time :</font></p>

<p align="center"><font face="Algerian" size="20" color="#042b6a" letterSpacing="0.000000" kerning="1">00:00:00:00</font></p>

<p align="center"><font face="Algerian" size="30" color="#154f2d" letterSpacing="0.000000" kerning="1"><b>next level</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1d6d3f" letterSpacing="0.000000" kerning="1"><b>next level</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1a5e36" letterSpacing="0.000000" kerning="1"><b>next level</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#154f2d" letterSpacing="0.000000" kerning="1"><b>menu</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1d6d3f" letterSpacing="0.000000" kerning="1"><b>menu</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1a5e36" letterSpacing="0.000000" kerning="1"><b>menu</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#154f2d" letterSpacing="0.000000" kerning="1"><b>replay</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1d6d3f" letterSpacing="0.000000" kerning="1"><b>replay</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1a5e36" letterSpacing="0.000000" kerning="1"><b>replay</b></font></p>

<p align="center"><font face="Arial" size="15" color="#000000" letterSpacing="0.000000" kerning="1"><b>developed by goshashakagi</b></font></p><p align="center"><font face="Arial" size="15" color="#000000" letterSpacing="0.000000" kerning="1"><b> gpaslari@gmail.com</b></font></p>

Easy

Easy

Easy

normal

normal

normal

hard

hard

hard

very hard

very hard

very hard

<p align="center"><font face="Algerian" size="30" color="#154f2d" letterSpacing="0.000000" kerning="1"><b>instructions</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1d6d3f" letterSpacing="0.000000" kerning="1"><b>instructions</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1a5e36" letterSpacing="0.000000" kerning="1"><b>instructions</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#154f2d" letterSpacing="0.000000" kerning="1"><b>load game</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1d6d3f" letterSpacing="0.000000" kerning="1"><b>load game</b></font></p>

<p align="center"><font face="Algerian" size="30" color="#1a5e36" letterSpacing="0.000000" kerning="1"><b>load game</b></font></p>

3D

3D

3D

3D

Rubik's

Rubik's

Rubik's

cube

cube

cube

cube

cube

Click to continue

Just drag the desired column or row in the right direction

To rotate the whole cube,
click and drag anywhere
around the cube,
or use the scrol.

180

-180

0

o

90

-90

0

<p align="center"><font face="Arial" size="15" color="#154f2d" letterSpacing="1.000000" kerning="1"><b>stop</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1d6d3f" letterSpacing="1.000000" kerning="1"><b>stop</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1a5e36" letterSpacing="1.000000" kerning="1"><b>stop</b></font></p>

<p align="center"><font face="Arial" size="15" color="#154f2d" letterSpacing="1.000000" kerning="1"><b>shuffle</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1d6d3f" letterSpacing="1.000000" kerning="1"><b>shuffle</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1a5e36" letterSpacing="1.000000" kerning="1"><b>shuffle</b></font></p>

<p align="center"><font face="Arial" size="15" color="#154f2d" letterSpacing="1.000000" kerning="1"><b>save</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1d6d3f" letterSpacing="1.000000" kerning="1"><b>save</b></font></p>

<p align="center"><font face="Arial" size="15" color="#1a5e36" letterSpacing="1.000000" kerning="1"><b>save</b></font></p>

<p align="center"><font face="Arial" size="15" color="#000000" letterSpacing="0.000000" kerning="1"><b>developed by goshashakagi</b></font></p><p align="center"><font face="Arial" size="15" color="#000000" letterSpacing="0.000000" kerning="1"><b> gpaslari@gmail.com</b></font></p>

<p align="center"><font face="Arial" size="15" color="#333333" letterSpacing="0.000000" kerning="1"><b>00:00:00:00</b></font></p>

ActionScript [AS3]

Section 1
//AnimationFrame (away3d.animators.data.AnimationFrame) package away3d.animators.data { public class AnimationFrame { public var frame:Number; public var time:uint; public var sort:String; public function AnimationFrame(_arg1:Number, _arg2:String=null){ this.frame = _arg1; this.sort = _arg2; } } }//package away3d.animators.data
Section 2
//AnimationGroup (away3d.animators.data.AnimationGroup) package away3d.animators.data { public class AnimationGroup { public var loop:Boolean; public var fps:uint; public var playlist:Array; public var loopLast:Boolean; public function AnimationGroup(_arg1:Array=null, _arg2:Boolean=false){ this.playlist = _arg1; this.loopLast = _arg2; } } }//package away3d.animators.data
Section 3
//AnimationSequence (away3d.animators.data.AnimationSequence) package away3d.animators.data { public class AnimationSequence { public var fps:Number; public var loop:Boolean; public var smooth:Boolean; public var prefix:String; public function AnimationSequence(_arg1:String, _arg2:Boolean=true, _arg3:Boolean=false, _arg4:Number=3){ this.prefix = ((_arg1)==null) ? "" : _arg1; this.smooth = _arg2; this.loop = _arg3; this.fps = _arg4; if (this.prefix == ""){ trace("Prefix is null, this might cause enter endless loop"); }; } } }//package away3d.animators.data
Section 4
//Bone (away3d.animators.skin.Bone) package away3d.animators.skin { import away3d.containers.*; import away3d.core.base.*; public class Bone extends ObjectContainer3D { public var joint:ObjectContainer3D; public var boneId:String; public function Bone(_arg1:Object=null, ... _args):void{ super(_arg1); addChild((joint = new ObjectContainer3D())); } public function set jointRotationY(_arg1:Number):void{ joint.rotationY = _arg1; } public function set jointRotationZ(_arg1:Number):void{ joint.rotationZ = _arg1; } public function set jointRotationX(_arg1:Number):void{ joint.rotationX = _arg1; } public function set jointScaleX(_arg1:Number):void{ joint.scaleX = _arg1; } override public function cloneAll(_arg1:Object3D=null):Object3D{ var _local2:Bone; _local2 = (((_arg1 as Bone)) || (new Bone())); _local2.removeChild(joint); super.cloneAll(_local2); _local2.boneId = boneId; _local2.joint = _local2.children[0]; return (_local2); } public function set jointScaleY(_arg1:Number):void{ joint.scaleY = _arg1; } public function get jointRotationX():Number{ return (joint.rotationX); } public function get jointRotationY():Number{ return (joint.rotationY); } public function get jointRotationZ():Number{ return (joint.rotationZ); } public function set jointScaleZ(_arg1:Number):void{ joint.scaleZ = _arg1; } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:Bone; _local2 = (((_arg1 as Bone)) || (new Bone())); super.clone(_local2); _local2.joint = _local2.children[0]; return (_local2); } public function get jointScaleY():Number{ return (joint.scaleY); } public function get jointScaleZ():Number{ return (joint.scaleZ); } public function get jointScaleX():Number{ return (joint.scaleX); } } }//package away3d.animators.skin
Section 5
//SkinController (away3d.animators.skin.SkinController) package away3d.animators.skin { import away3d.containers.*; import away3d.core.math.*; public class SkinController { public var sceneTransform:Matrix3D; public var joint:ObjectContainer3D; public var name:String; public var updated:Boolean; public var inverseTransform:Matrix3D; public var bindMatrix:Matrix3D; public function SkinController(){ sceneTransform = new Matrix3D(); super(); } public function update():void{ if (!joint){ return; }; if (!joint.scene.updatedObjects[joint]){ updated = false; return; }; updated = true; sceneTransform.multiply(joint.sceneTransform, bindMatrix); sceneTransform.multiply(inverseTransform, sceneTransform); } } }//package away3d.animators.skin
Section 6
//SkinVertex (away3d.animators.skin.SkinVertex) package away3d.animators.skin { import away3d.core.base.*; import away3d.core.math.*; public class SkinVertex { public var skinnedVertex:Vertex; private var _position:Number3D; private var _i:int; public var baseVertex:Vertex; public var controllers:Array; public var weights:Array; public function SkinVertex(_arg1:Vertex){ _position = new Number3D(); weights = []; controllers = []; super(); skinnedVertex = _arg1; baseVertex = _arg1.clone(); } public function update():void{ var _local1:Boolean; var _local2:SkinController; _local1 = false; for each (_local2 in controllers) { _local1 = ((_local1) || (_local2.updated)); }; if (!_local1){ return; }; skinnedVertex.reset(); _i = weights.length; while (_i--) { _position.transform(baseVertex.position, (controllers[_i] as SkinController).sceneTransform); _position.scale(_position, weights[_i]); skinnedVertex.add(_position); }; } } }//package away3d.animators.skin
Section 7
//IMeshAnimation (away3d.animators.IMeshAnimation) package away3d.animators { import away3d.containers.*; public interface IMeshAnimation { function update(_arg1:Number, _arg2:Boolean=true):void; function clone(_arg1:ObjectContainer3D):IMeshAnimation; } }//package away3d.animators
Section 8
//ConvexBlock (away3d.blockers.ConvexBlock) package away3d.blockers { import away3d.core.base.*; import away3d.core.project.*; public class ConvexBlock extends Object3D { public var debug:Boolean; public var vertices:Array; public function ConvexBlock(_arg1:Array, _arg2:Object=null){ vertices = []; super(_arg2); this.vertices = _arg1; debug = ini.getBoolean("debug", false); projectorType = ProjectorType.CONVEX_BLOCK; } } }//package away3d.blockers
Section 9
//AbstractLens (away3d.cameras.lenses.AbstractLens) package away3d.cameras.lenses { import away3d.containers.*; import away3d.core.base.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.geom.*; public class AbstractLens { protected const toDEGREES:Number = 57.2957795130823; protected const toRADIANS:Number = 0.0174532925199433; protected var _sw:Number; protected var _view:View3D; protected var _sy:Number; protected var _sx:Number; protected var _sz:Number; protected var _near:Number; protected var _clipping:Clipping; protected var _frustum:Frustum; protected var view:Matrix3D; protected var _clipTop:Number; protected var _clipRight:Number; protected var _cameraVarsStore:CameraVarsStore; protected var _clipHeight:Number; protected var _drawPrimitiveStore:DrawPrimitiveStore; protected var _focusOverZoom:Number; protected var _clipBottom:Number; protected var _vertex:Vertex; protected var _camera:Camera3D; protected var _zoom2:Number; protected var _persp:Number; protected var viewTransform:Matrix3D; protected var _clipLeft:Number; protected var _clipWidth:Number; protected var _plane:Plane3D; protected var _far:Number; protected var _vx:Number; protected var _vz:Number; protected var _len:Number; protected var classification:int; protected var _vy:Number; protected var _scz:Number; public function AbstractLens(){ view = new Matrix3D(); super(); } public function setView(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = _arg1.drawPrimitiveStore; _cameraVarsStore = _arg1.cameraVarsStore; _camera = _arg1.camera; _clipping = _arg1.screenClipping; _clipTop = _clipping.maxY; _clipBottom = _clipping.minY; _clipLeft = _clipping.minX; _clipRight = _clipping.maxX; _clipHeight = (_clipBottom - _clipTop); _clipWidth = (_clipRight - _clipLeft); _far = _clipping.maxZ; } public function get near():Number{ return (_near); } public function get far():Number{ return (_far); } } }//package away3d.cameras.lenses
Section 10
//ILens (away3d.cameras.lenses.ILens) package away3d.cameras.lenses { import away3d.containers.*; import away3d.core.base.*; import away3d.core.math.*; import away3d.core.geom.*; public interface ILens { function getPerspective(_arg1:Number):Number; function get near():Number; function getZoom():Number; function getFrustum(_arg1:Object3D, _arg2:Matrix3D):Frustum; function setView(_arg1:View3D):void; function get far():Number; function project(_arg1:Matrix3D, _arg2:Array, _arg3:Array):void; function getFOV():Number; } }//package away3d.cameras.lenses
Section 11
//ZoomFocusLens (away3d.cameras.lenses.ZoomFocusLens) package away3d.cameras.lenses { import away3d.containers.*; import away3d.core.base.*; import away3d.core.clip.*; import away3d.core.math.*; import away3d.core.geom.*; public class ZoomFocusLens extends AbstractLens implements ILens { private var _length:int; public function getZoom():Number{ return (((((_clipTop - _clipBottom) / Math.tan((_camera.fov * toRADIANS))) - (_clipTop * _clipBottom)) / _camera.focus)); } public function project(_arg1:Matrix3D, _arg2:Array, _arg3:Array):void{ _length = 0; for each (_vertex in _arg2) { _vx = _vertex.x; _vy = _vertex.y; _vz = _vertex.z; _sz = ((((_vx * _arg1.szx) + (_vy * _arg1.szy)) + (_vz * _arg1.szz)) + _arg1.tz); if (isNaN(_sz)){ throw (new Error("isNaN(sz)")); }; if ((((_sz < _near)) && ((_clipping is RectangleClipping)))){ _arg3[_length] = null; _arg3[(_length + 1)] = null; _arg3[(_length + 2)] = null; _length = (_length + 3); } else { _persp = (_camera.zoom / (1 + (_sz / _camera.focus))); _arg3[_length] = (((((_vx * _arg1.sxx) + (_vy * _arg1.sxy)) + (_vz * _arg1.sxz)) + _arg1.tx) * _persp); _arg3[(_length + 1)] = (((((_vx * _arg1.syx) + (_vy * _arg1.syy)) + (_vz * _arg1.syz)) + _arg1.ty) * _persp); _arg3[(_length + 2)] = _sz; _length = (_length + 3); }; }; } override public function setView(_arg1:View3D):void{ super.setView(_arg1); if (_clipping.minZ == -(Infinity)){ _near = (-(_camera.focus) / 2); } else { _near = _clipping.minZ; }; } public function getFOV():Number{ return ((Math.atan2((_clipTop - _clipBottom), ((_camera.focus * _camera.zoom) + (_clipTop * _clipBottom))) * toDEGREES)); } public function getFrustum(_arg1:Object3D, _arg2:Matrix3D):Frustum{ _frustum = _cameraVarsStore.createFrustum(_arg1); _focusOverZoom = (_camera.focus / _camera.zoom); _zoom2 = (_camera.zoom * _camera.zoom); _plane = _frustum.planes[Frustum.NEAR]; _plane.a = 0; _plane.b = 0; _plane.c = 1; _plane.d = -(_near); _plane.transform(_arg2); _plane = _frustum.planes[Frustum.FAR]; _plane.a = 0; _plane.b = 0; _plane.c = -1; _plane.d = _far; _plane.transform(_arg2); _plane = _frustum.planes[Frustum.LEFT]; _plane.a = (-(_clipHeight) * _focusOverZoom); _plane.b = 0; _plane.c = ((_clipHeight * _clipLeft) / _zoom2); _plane.d = (_plane.c * _camera.focus); _plane.transform(_arg2); _plane = _frustum.planes[Frustum.RIGHT]; _plane.a = (_clipHeight * _focusOverZoom); _plane.b = 0; _plane.c = ((-(_clipHeight) * _clipRight) / _zoom2); _plane.d = (_plane.c * _camera.focus); _plane.transform(_arg2); _plane = _frustum.planes[Frustum.TOP]; _plane.a = 0; _plane.b = (-(_clipWidth) * _focusOverZoom); _plane.c = ((_clipWidth * _clipTop) / _zoom2); _plane.d = (_plane.c * _camera.focus); _plane.transform(_arg2); _plane = _frustum.planes[Frustum.BOTTOM]; _plane.a = 0; _plane.b = (_clipWidth * _focusOverZoom); _plane.c = ((-(_clipWidth) * _clipBottom) / _zoom2); _plane.d = (_plane.c * _camera.focus); _plane.transform(_arg2); return (_frustum); } public function getPerspective(_arg1:Number):Number{ return ((_camera.zoom / (1 + (_arg1 / _camera.focus)))); } } }//package away3d.cameras.lenses
Section 12
//Camera3D (away3d.cameras.Camera3D) package away3d.cameras { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.events.*; import away3d.cameras.lenses.*; public class Camera3D extends Object3D { protected const toDEGREES:Number = 57.2957795130823; protected const toRADIANS:Number = 0.0174532925199433; private var _fov:Number;// = 0 private var _cameraVarsStore:CameraVarsStore; private var _clipping:Clipping; private var _zoomDirty:Boolean; private var _viewMatrix:Matrix3D; public var doflevels:Number;// = 16 private var _fovDirty:Boolean; private var _dof:Boolean;// = false private var _flipY:Matrix3D; private var _screenIndexStart:int; private var _clipTop:Number; private var _zoom:Number;// = 10 private var _screenVertices:Array; private var _clipLeft:Number; private var _aperture:Number;// = 22 private var _clipRight:Number; private var _clipBottom:Number; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _vertices:Array; public var fixedZoom:Boolean; private var _view:View3D; public var invViewMatrix:Matrix3D; public var maxblur:Number;// = 150 private var _lens:ILens; private var _focus:Number; private var _cameraupdated:CameraEvent; public function Camera3D(_arg1:Object=null){ var _local2:Number3D; _aperture = 22; _dof = false; _flipY = new Matrix3D(); _zoom = 10; _fov = 0; _viewMatrix = new Matrix3D(); _vertices = new Array(); _screenVertices = new Array(); invViewMatrix = new Matrix3D(); maxblur = 150; doflevels = 16; super(_arg1); fov = ini.getNumber("fov", _fov); focus = ini.getNumber("focus", 100); zoom = ini.getNumber("zoom", _zoom); fixedZoom = ini.getBoolean("fixedZoom", true); lens = (((ini.getObject("lens", AbstractLens) as ILens)) || (new ZoomFocusLens())); aperture = ini.getNumber("aperture", 22); maxblur = ini.getNumber("maxblur", 150); doflevels = ini.getNumber("doflevels", 16); dof = ini.getBoolean("dof", false); _local2 = ini.getPosition("lookat"); _flipY.syy = -1; if (_local2){ lookAt(_local2); }; } public function set lens(_arg1:ILens):void{ if (_lens == _arg1){ return; }; _lens = _arg1; notifyCameraUpdate(); } private function notifyCameraUpdate():void{ if (!hasEventListener(CameraEvent.CAMERA_UPDATED)){ return; }; if (_cameraupdated == null){ _cameraupdated = new CameraEvent(CameraEvent.CAMERA_UPDATED, this); }; dispatchEvent(_cameraupdated); } public function screen(_arg1:Object3D, _arg2:Vertex=null):ScreenVertex{ if (_arg2 == null){ _vertices = _arg1.center; } else { _vertices[0] = _arg2; }; _cameraVarsStore.createViewTransform(_arg1).multiply(viewMatrix, _arg1.sceneTransform); _screenVertices.length = 0; _lens.project(_cameraVarsStore.viewTransformDictionary[_arg1], _vertices, _screenVertices); return (new ScreenVertex(_screenVertices[0], _screenVertices[1], _screenVertices[2])); } public function unproject(_arg1:Number, _arg2:Number):Number3D{ var _local3:Number; var _local4:Number3D; _local3 = ((focus * zoom) / focus); _local4 = new Number3D((_arg1 / _local3), (-(_arg2) / _local3), focus); transform.multiplyVector3x3(_local4); return (_local4); } public function set dof(_arg1:Boolean):void{ _dof = _arg1; if (_dof){ enableDof(); } else { disableDof(); }; } public function pan(_arg1:Number):void{ super.yaw(_arg1); } public function get view():View3D{ return (_view); } public function enableDof():void{ DofCache.doflevels = doflevels; DofCache.aperture = aperture; DofCache.maxblur = maxblur; DofCache.focus = focus; DofCache.resetDof(true); } public function tilt(_arg1:Number):void{ super.pitch(_arg1); } public function update():void{ _view.updateScreenClipping(); _clipping = _view.screenClipping; if (((((((!((_clipTop == _clipping.maxY))) || (!((_clipBottom == _clipping.minY))))) || (!((_clipLeft == _clipping.minX))))) || (!((_clipRight == _clipping.maxX))))){ if (((!(_fovDirty)) && (!(_zoomDirty)))){ if (fixedZoom){ _fovDirty = true; } else { _zoomDirty = true; }; }; _clipTop = _clipping.maxY; _clipBottom = _clipping.minY; _clipLeft = _clipping.minX; _clipRight = _clipping.maxX; }; lens.setView(_view); if (_fovDirty){ _fovDirty = false; _fov = lens.getFOV(); }; if (_zoomDirty){ _zoomDirty = false; _zoom = lens.getZoom(); }; } public function get fov():Number{ return (_fov); } public function get viewMatrix():Matrix3D{ invViewMatrix.multiply(sceneTransform, _flipY); _viewMatrix.inverse(invViewMatrix); return (_viewMatrix); } public function get focus():Number{ return (_focus); } public function addOnCameraUpdate(_arg1:Function):void{ addEventListener(CameraEvent.CAMERA_UPDATED, _arg1, false, 0, false); } public function get lens():ILens{ return (_lens); } public function disableDof():void{ DofCache.resetDof(false); } public function get dof():Boolean{ return (_dof); } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:Camera3D; _local2 = (((_arg1 as Camera3D)) || (new Camera3D())); super.clone(_local2); _local2.zoom = zoom; _local2.focus = focus; _local2.lens = lens; return (_local2); } public function set view(_arg1:View3D):void{ if (_view == _arg1){ return; }; _view = _arg1; _drawPrimitiveStore = _arg1.drawPrimitiveStore; _cameraVarsStore = _arg1.cameraVarsStore; } public function set aperture(_arg1:Number):void{ _aperture = _arg1; DofCache.aperture = _aperture; } public function removeOnCameraUpdate(_arg1:Function):void{ removeEventListener(CameraEvent.CAMERA_UPDATED, _arg1, false); } public function set fov(_arg1:Number):void{ if (_fov == _arg1){ return; }; _fov = _arg1; _fovDirty = false; _zoomDirty = true; notifyCameraUpdate(); } public function get aperture():Number{ return (_aperture); } public function set zoom(_arg1:Number):void{ if (_zoom == _arg1){ return; }; _zoom = _arg1; _zoomDirty = false; _fovDirty = true; notifyCameraUpdate(); } public function set focus(_arg1:Number):void{ _focus = _arg1; DofCache.focus = _focus; notifyCameraUpdate(); } public function get zoom():Number{ return (_zoom); } } }//package away3d.cameras
Section 13
//HoverCamera3D (away3d.cameras.HoverCamera3D) package away3d.cameras { public class HoverCamera3D extends TargetCamera3D { public var distance:Number;// = 800 public var mintiltangle:Number;// = 0 public var tiltangle:Number;// = 90 public var panangle:Number;// = 0 public var wrappanangle:Boolean; public var targetpanangle:Number;// = 0 public var yfactor:Number;// = 2 public var steps:Number;// = 8 public var maxtiltangle:Number;// = 90 public var targettiltangle:Number;// = 90 public function HoverCamera3D(_arg1:Object=null){ yfactor = 2; distance = 800; panangle = 0; tiltangle = 90; targetpanangle = 0; targettiltangle = 90; mintiltangle = 0; maxtiltangle = 90; steps = 8; super(_arg1); yfactor = ini.getNumber("yfactor", yfactor); distance = ini.getNumber("distance", distance); wrappanangle = ini.getBoolean("wrappanangle", false); panangle = ini.getNumber("panangle", panangle); tiltangle = ini.getNumber("tiltangle", tiltangle); targetpanangle = ini.getNumber("targetpanangle", targetpanangle); targettiltangle = ini.getNumber("targettiltangle", targettiltangle); mintiltangle = ini.getNumber("mintiltangle", mintiltangle); maxtiltangle = ini.getNumber("maxtiltangle", maxtiltangle); steps = ini.getNumber("steps", steps); moveCamera(); } public function moveCamera():Boolean{ var _local1:Number; var _local2:Number; var _local3:Number; _local1 = ((distance * Math.sin((panangle * toRADIANS))) * Math.cos((tiltangle * toRADIANS))); _local2 = ((distance * Math.cos((panangle * toRADIANS))) * Math.cos((tiltangle * toRADIANS))); _local3 = ((distance * Math.sin((tiltangle * toRADIANS))) * yfactor); if ((((((x == _local1)) && ((y == _local3)))) && ((z == _local2)))){ return (false); }; x = _local1; y = _local3; z = _local2; return (true); } public function hover():Boolean{ if ((((targettiltangle == tiltangle)) && ((targetpanangle == panangle)))){ return (moveCamera()); }; targettiltangle = Math.max(mintiltangle, Math.min(maxtiltangle, targettiltangle)); if (wrappanangle){ if (targetpanangle < 0){ targetpanangle = ((targetpanangle % 360) + 360); } else { targetpanangle = (targetpanangle % 360); }; if ((targetpanangle - panangle) < -180){ targetpanangle = (targetpanangle + 360); } else { if ((targetpanangle - panangle) > 180){ targetpanangle = (targetpanangle - 360); }; }; }; tiltangle = (tiltangle + ((targettiltangle - tiltangle) / (steps + 1))); panangle = (panangle + ((targetpanangle - panangle) / (steps + 1))); if ((((Math.abs((targettiltangle - tiltangle)) < 0.01)) && ((Math.abs((targetpanangle - panangle)) < 0.01)))){ tiltangle = targettiltangle; panangle = targetpanangle; }; return (moveCamera()); } } }//package away3d.cameras
Section 14
//TargetCamera3D (away3d.cameras.TargetCamera3D) package away3d.cameras { import away3d.containers.*; import away3d.core.base.*; import away3d.core.math.*; public class TargetCamera3D extends Camera3D { public var target:Object3D; public function TargetCamera3D(_arg1:Object=null){ super(_arg1); target = ((ini.getObject3D("target")) || (new Object3D())); } override public function get viewMatrix():Matrix3D{ if (target != null){ lookAt((target.scene) ? target.scenePosition : target.position); }; return (super.viewMatrix); } override public function set parent(_arg1:ObjectContainer3D):void{ if (_arg1 != null){ throw (new Error("TargetCamera can't be parented")); }; } } }//package away3d.cameras
Section 15
//ILODObject (away3d.containers.ILODObject) package away3d.containers { import away3d.cameras.*; public interface ILODObject { function matchLOD(_arg1:Camera3D):Boolean; } }//package away3d.containers
Section 16
//IPhysicsScene (away3d.containers.IPhysicsScene) package away3d.containers { public interface IPhysicsScene { function updateTime(_arg1:int):void; } }//package away3d.containers
Section 17
//ObjectContainer3D (away3d.containers.ObjectContainer3D) package away3d.containers { import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.loaders.data.*; import away3d.loaders.utils.*; import away3d.events.*; import away3d.core.traverse.*; import away3d.animators.skin.*; import away3d.core.project.*; public class ObjectContainer3D extends Object3D { private var _children:Array; public function ObjectContainer3D(... _args){ var _local2:Object; var _local3:Array; var _local4:Object; var _local5:Object3D; _children = []; _local3 = []; for each (_local4 in _args) { if ((_local4 is Object3D)){ _local3.push(_local4); } else { _local2 = _local4; }; }; super(_local2); projectorType = ProjectorType.OBJECT_CONTAINER; for each (_local5 in _local3) { addChild(_local5); }; } public function centerMeshes():void{ var _local1:Object3D; for each (_local1 in children) { _local1.centerPivot(); }; } function internalRemoveChild(_arg1:Object3D):void{ var _local2:int; _local2 = children.indexOf(_arg1); if (_local2 == -1){ return; }; _arg1.removeOnTransformChange(onChildChange); _arg1.removeOnDimensionsChange(onChildChange); _children.splice(_local2, 1); notifyDimensionsChange(); if (((session) && (!(_arg1.ownCanvas)))){ session.internalRemoveOwnSession(_arg1); }; _sessionDirty = true; } public function getChildByName(_arg1:String):Object3D{ var _local2:Object3D; var _local3:Object3D; for each (_local3 in children) { if (_local3.name){ if (_local3.name == _arg1){ return (_local3); }; }; if ((_local3 is ObjectContainer3D)){ _local2 = (_local3 as ObjectContainer3D).getChildByName(_arg1); if (_local2){ return (_local2); }; }; }; return (null); } private function onChildChange(_arg1:Object3DEvent):void{ notifyDimensionsChange(); } public function removeChildByName(_arg1:String):void{ removeChild(getChildByName(_arg1)); } override public function applyPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Object3D; var _local8:Number3D; for each (_local7 in children) { _local4 = _local7.x; _local5 = _local7.y; _local6 = _local7.z; _local7.moveTo((_local4 - _arg1), (_local5 - _arg2), (_local6 - _arg3)); }; _local8 = new Number3D(_arg1, _arg2, _arg3); new Number3D(_arg1, _arg2, _arg3).rotate(_local8, _transform); _local8.add(_local8, position); moveTo(_local8.x, _local8.y, _local8.z); } private function cloneBones(_arg1:ObjectContainer3D, _arg2:ObjectContainer3D):void{ var _local3:Array; var _local4:Object3D; var _local5:Geometry; var _local6:Array; var _local7:Bone; var _local8:SkinController; var _local9:Bone; _local3 = _arg1.children; for each (_local4 in _local3) { if ((_local4 is ObjectContainer3D)){ (_local4 as ObjectContainer3D).cloneBones((_local4 as ObjectContainer3D), _arg2); } else { if ((_local4 is Mesh)){ _local5 = (_local4 as Mesh).geometry; _local6 = _local5.skinControllers; for each (_local8 in _local6) { _local9 = _arg2.getBoneByName(_local8.name); if (_local9){ _local8.joint = _local9.joint; if (!(_local9.parent.parent is Bone)){ _local7 = _local9; }; } else { Debug.warning(("no joint found for " + _local8.name)); }; }; for each (_local8 in _local6) { _local8.inverseTransform = _local4.parent.inverseSceneTransform; }; }; }; }; } function internalAddChild(_arg1:Object3D):void{ _children.push(_arg1); _arg1.addOnTransformChange(onChildChange); _arg1.addOnDimensionsChange(onChildChange); notifyDimensionsChange(); if (((_session) && (!(_arg1.ownCanvas)))){ session.internalAddOwnSession(_arg1); }; _sessionDirty = true; } override public function applyRotations():void{ var _local1:Number; var _local2:Number; 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; var _local16:Object3D; _local6 = (Math.PI / 180); _local7 = (rotationX * _local6); _local8 = (rotationY * _local6); _local9 = (rotationZ * _local6); _local10 = Math.sin(_local7); _local11 = Math.cos(_local7); _local12 = Math.sin(_local8); _local13 = Math.cos(_local8); _local14 = Math.sin(_local9); _local15 = Math.cos(_local9); for each (_local16 in children) { _local1 = _local16.x; _local2 = _local16.y; _local3 = _local16.z; _local5 = _local2; _local2 = ((_local5 * _local11) + (_local3 * -(_local10))); _local3 = ((_local5 * _local10) + (_local3 * _local11)); _local4 = _local1; _local1 = ((_local4 * _local13) + (_local3 * _local12)); _local3 = ((_local4 * -(_local12)) + (_local3 * _local13)); _local4 = _local1; _local1 = ((_local4 * _local15) + (_local2 * -(_local14))); _local2 = ((_local4 * _local14) + (_local2 * _local15)); _local16.moveTo(_local1, _local2, _local3); }; rotationX = 0; rotationY = 0; rotationZ = 0; } override public function centerPivot():void{ var _local1:Object3D; for each (_local1 in children) { _local1.centerPivot(); }; super.centerPivot(); } public function removeChild(_arg1:Object3D):void{ if (_arg1 == null){ throw (new Error("ObjectContainer3D.removeChild(null)")); }; if (_arg1.parent != this){ return; }; _arg1.parent = null; } public function addChild(_arg1:Object3D):void{ if (_arg1 == null){ throw (new Error("ObjectContainer3D.addChild(null)")); }; _arg1.parent = this; } public function cloneAll(_arg1:Object3D=null):Object3D{ var _local2:ObjectContainer3D; var _local3:ObjectContainer3D; var _local4:Object3D; var _local5:ObjectContainer3D; var _local6:AnimationData; var _local7:MaterialData; _local2 = (((_arg1 as ObjectContainer3D)) || (new ObjectContainer3D())); super.clone(_local2); for each (_local4 in children) { if ((_local4 is Bone)){ _local3 = new Bone(); _local2.addChild(_local3); (_local4 as Bone).cloneAll(_local3); } else { if ((_local4 is ObjectContainer3D)){ _local3 = new ObjectContainer3D(); _local2.addChild(_local3); (_local4 as ObjectContainer3D).cloneAll(_local3); } else { if ((_local4 is Mesh)){ _local2.addChild((_local4 as Mesh).cloneAll()); } else { _local2.addChild(_local4.clone()); }; }; }; }; if (animationLibrary){ _local2.animationLibrary = new AnimationLibrary(); for each (_local6 in animationLibrary) { _local6.clone(_local2); }; }; if (materialLibrary){ _local2.materialLibrary = new MaterialLibrary(); for each (_local7 in materialLibrary) { _local7.clone(_local2); }; }; _local5 = _local2; while (_local5.parent) { _local5 = _local5.parent; }; if (_local2 == _local5){ cloneBones(_local2, _local5); }; return (_local2); } public function getBoneByName(_arg1:String):Bone{ var _local2:Bone; var _local3:Object3D; for each (_local3 in children) { if ((_local3 is Bone)){ _local2 = (_local3 as Bone); if (_local2.name){ if (_local2.name == _arg1){ return (_local2); }; }; if (_local2.boneId){ if (_local2.boneId == _arg1){ return (_local2); }; }; }; if ((_local3 is ObjectContainer3D)){ _local2 = (_local3 as ObjectContainer3D).getBoneByName(_arg1); if (_local2){ return (_local2); }; }; }; return (null); } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:ObjectContainer3D; var _local3:Object3D; _local2 = (((_arg1 as ObjectContainer3D)) || (new ObjectContainer3D())); super.clone(_local2); for each (_local3 in children) { if (!(_local3 is Bone)){ _local2.addChild(_local3.clone()); }; }; return (_local2); } override public function traverse(_arg1:Traverser):void{ var _local2:Object3D; if (_arg1.match(this)){ _arg1.enter(this); _arg1.apply(this); for each (_local2 in children) { _local2.traverse(_arg1); }; _arg1.leave(this); }; } override protected function updateDimensions():void{ var _local1:Array; var _local2:Number; var _local3:Number; var _local4:Number3D; var _local5:Object3D; _local1 = _children.concat(); if (_local1.length){ if (_scaleX < 0){ _boundingScale = -(_scaleX); } else { _boundingScale = _scaleX; }; if ((((_scaleY < 0)) && ((_boundingScale < -(_scaleY))))){ _boundingScale = -(_scaleY); } else { if (_boundingScale < _scaleY){ _boundingScale = _scaleY; }; }; if ((((_scaleZ < 0)) && ((_boundingScale < -(_scaleZ))))){ _boundingScale = -(_scaleZ); } else { if (_boundingScale < _scaleZ){ _boundingScale = _scaleZ; }; }; _local2 = 0; _local4 = new Number3D(); for each (_local5 in _local1) { _local4.sub(_local5.position, _pivotPoint); _local3 = (_local4.modulo + _local5.parentBoundingRadius); if (_local2 < _local3){ _local2 = _local3; }; }; _boundingRadius = _local2; _local1.sortOn("parentmaxX", (Array.DESCENDING | Array.NUMERIC)); _maxX = _local1[0].parentmaxX; _local1.sortOn("parentminX", Array.NUMERIC); _minX = _local1[0].parentminX; _local1.sortOn("parentmaxY", (Array.DESCENDING | Array.NUMERIC)); _maxY = _local1[0].parentmaxY; _local1.sortOn("parentminY", Array.NUMERIC); _minY = _local1[0].parentminY; _local1.sortOn("parentmaxZ", (Array.DESCENDING | Array.NUMERIC)); _maxZ = _local1[0].parentmaxZ; _local1.sortOn("parentminZ", Array.NUMERIC); _minZ = _local1[0].parentminZ; }; super.updateDimensions(); } public function addChildren(... _args):void{ var _local2:Object3D; for each (_local2 in _args) { addChild(_local2); }; } public function get children():Array{ return (_children); } } }//package away3d.containers
Section 18
//Scene3D (away3d.containers.Scene3D) package away3d.containers { import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import flash.utils.*; import away3d.events.*; import away3d.core.traverse.*; public class Scene3D extends ObjectContainer3D { private var _currentView:View3D; public var tickTraverser:TickTraverser; public var physics:IPhysicsScene; public var updatedSessions:Dictionary; private var _projtraverser:ProjectionTraverser; public var geometries:Dictionary; private var _mesh:Mesh; private var _lighttraverser:LightTraverser; public var viewDictionary:Dictionary; public var autoUpdate:Boolean; public var meshes:Dictionary; private var _sessiontraverser:SessionTraverser; public var updateLight:Boolean; private var _objects:Array; public var updatedObjects:Dictionary; public function Scene3D(... _args){ var _local2:Object; var _local3:Array; var _local4:Object; var _local5:Object; var _local6:Object3D; _objects = new Array(); _projtraverser = new ProjectionTraverser(); _sessiontraverser = new SessionTraverser(); _lighttraverser = new LightTraverser(); viewDictionary = new Dictionary(true); tickTraverser = new TickTraverser(); _local3 = []; for each (_local4 in _args) { if ((_local4 is Object3D)){ _local3.push(_local4); } else { _local2 = _local4; }; }; if (_local2){ _local2["ownCanvas"] = true; _local2["ownLights"] = true; } else { _local2 = {ownCanvas:true, ownLights:true}; }; super(_local2); autoUpdate = ini.getBoolean("autoUpdate", true); updateLight = ini.getBoolean("updateLight", true); _local5 = ini.getObject("physics"); if ((_local5 is IPhysicsScene)){ physics = (_local5 as IPhysicsScene); }; if ((_local5 is Boolean)){ if (_local5 == true){ physics = null; }; }; if ((_local5 is Object)){ physics = null; }; for each (_local6 in _local3) { addChild(_local6); }; } override public function get sceneTransform():Matrix3D{ if (_transformDirty){ _sceneTransformDirty = true; }; if (_sceneTransformDirty){ notifySceneTransformChange(); }; return (transform); } function clearId(_arg1:int):void{ delete _objects[_arg1]; } public function update():void{ var _local1:View3D; var _local2:Array; var _local3:Geometry; var _local4:Object; updatedObjects = new Dictionary(true); updatedSessions = new Dictionary(true); meshes = new Dictionary(true); geometries = new Dictionary(true); if (updateLight){ traverse(_lighttraverser); }; for each (_local1 in viewDictionary) { _local1.camera.update(); _local1.blockers = new Dictionary(true); _local1.drawPrimitiveStore.blockerDictionary = new Dictionary(true); _local1.cameraVarsStore.reset(); _local1.blockerarray.clip = _local1.screenClipping; _projtraverser.view = _local1; traverse(_projtraverser); }; for (_local4 in meshes) { _mesh = (_local4 as Mesh); _local2 = meshes[_mesh]; for each (_local1 in _local2) { _mesh.updateMaterials(_mesh, _local1); }; }; for each (_local3 in geometries) { _local3.updateElements(); }; traverse(_sessiontraverser); } function setId(_arg1:Object3D):void{ var _local2:int; _local2 = 0; while (_objects[_local2]) { _local2++; }; _objects[_local2] = _arg1; _arg1._id = _local2; } public function updateTime(_arg1:int=-1):void{ if (_arg1 == -1){ _arg1 = getTimer(); }; tickTraverser.now = _arg1; traverse(tickTraverser); if (physics != null){ physics.updateTime(_arg1); }; } function internalAddView(_arg1:View3D):void{ _arg1.addEventListener(ViewEvent.UPDATE_SCENE, onUpdate); } private function onUpdate(_arg1:ViewEvent):void{ if (autoUpdate){ if (((_currentView) && (!((_currentView == _arg1.view))))){ Debug.warning("Multiple views detected! Should consider switching to manual update"); }; _currentView = _arg1.view; update(); }; } function internalRemoveView(_arg1:View3D):void{ _arg1.removeEventListener(ViewEvent.UPDATE_SCENE, onUpdate); } } }//package away3d.containers
Section 19
//View3D (away3d.containers.View3D) package away3d.containers { import flash.geom.*; import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.core.base.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import away3d.core.block.*; import away3d.core.render.*; import flash.utils.*; import away3d.events.*; import away3d.core.traverse.*; import away3d.overlays.*; import away3d.core.project.*; import away3d.blockers.*; import away3d.core.stats.*; public class View3D extends Sprite { private var _stageHeight:Number; var _movieClipSpriteProjector:MovieClipSpriteProjector; public var mouseEvents:Boolean; private var _clipping:Clipping; private var _renderer:IRenderer; private var _cameraVarsStore:CameraVarsStore; private var persp:Number; private var _camera:Camera3D; var _objectContainerProjector:ObjectContainerProjector; private var _viewZero:Point; public var overlay:Sprite; private var _pritraverser:PrimitiveTraverser; private var _screenClippingDirty:Boolean; public var mouseObject:Object3D; var _convexBlockProjector:ConvexBlockProjector; public var mouseZeroMove:Boolean; private var uv:UV; public var statsPanel:Stats; public var stats:Boolean; private var _hitPointX:Number; private var _hitPointY:Number; public var blockerarray:BlockerArray; private var drawpri:DrawPrimitive; public var mouseMaterial:IUVMaterial; public var hud:Sprite; private var _loaderHeight:Number; private var _internalsession:AbstractRenderSession; private var element:Object; private var _container:DisplayObject; private var _stageWidth:Number; private var _renderComplete:ViewEvent; private var _ini:Init; private var _mouseIsOverView:Boolean; private var material:IUVMaterial; private var _ddo:DrawDisplayObject; public var background:Sprite; var _spriteProjector:SpriteProjector; private var _drawPrimitiveStore:DrawPrimitiveStore; private var object:Object3D; private var _mousedown:Boolean; private var sceneX:Number; private var sceneY:Number; private var sceneZ:Number; var _meshProjector:MeshProjector; public var sourceURL:String; private var _consumer:IPrimitiveConsumer; private var _session:AbstractRenderSession; var _dofSpriteProjector:DofSpriteProjector; var _screenClipping:Clipping; private var screenZ:Number;// = INF private var screenX:Number; private var screenY:Number; private var _updated:Boolean; private var _overlays:Dictionary; public var statsOpen:Boolean; public var forceUpdate:Boolean; private var _scene:Scene3D; private var _updatescene:ViewEvent; private var _loaderWidth:Number; public var blockers:Dictionary; private var _loaderDirty:Boolean; var _dirSpriteProjector:DirSpriteProjector; private var _lastmove_mouseX:Number; private var _lastmove_mouseY:Number; var _interactiveLayer:Sprite; private var inv:Matrix3D; private var _x:Number; private var _y:Number; public function View3D(_arg1:Object=null){ var _local2:Boolean; _interactiveLayer = new Sprite(); _convexBlockProjector = new ConvexBlockProjector(); _dirSpriteProjector = new DirSpriteProjector(); _dofSpriteProjector = new DofSpriteProjector(); _meshProjector = new MeshProjector(); _movieClipSpriteProjector = new MovieClipSpriteProjector(); _objectContainerProjector = new ObjectContainerProjector(); _spriteProjector = new SpriteProjector(); _viewZero = new Point(); _drawPrimitiveStore = new DrawPrimitiveStore(); _cameraVarsStore = new CameraVarsStore(); _pritraverser = new PrimitiveTraverser(); _ddo = new DrawDisplayObject(); screenZ = Infinity; inv = new Matrix3D(); _overlays = new Dictionary(); background = new Sprite(); overlay = new Sprite(); hud = new Sprite(); blockerarray = new BlockerArray(); super(); _ini = (Init.parse(_arg1) as Init); _local2 = _ini.getBoolean("stats", true); session = (((_ini.getObject("session") as AbstractRenderSession)) || (new SpriteRenderSession())); scene = (((_ini.getObjectOrInit("scene", Scene3D) as Scene3D)) || (new Scene3D())); camera = (((_ini.getObjectOrInit("camera", Camera3D) as Camera3D)) || (new Camera3D({x:0, y:0, z:-1000, lookat:"center"}))); renderer = (((_ini.getObject("renderer") as IRenderer)) || (new BasicRenderer())); clipping = (((_ini.getObject("clipping", Clipping) as Clipping)) || (new RectangleClipping())); x = _ini.getNumber("x", 0); y = _ini.getNumber("y", 0); forceUpdate = _ini.getBoolean("forceUpdate", false); mouseZeroMove = _ini.getBoolean("mouseZeroMove", false); mouseEvents = _ini.getBoolean("mouseEvents", true); _interactiveLayer.blendMode = BlendMode.ALPHA; _convexBlockProjector.view = this; _dirSpriteProjector.view = this; _dofSpriteProjector.view = this; _meshProjector.view = this; _movieClipSpriteProjector.view = this; _objectContainerProjector.view = this; _spriteProjector.view = this; _drawPrimitiveStore.view = this; _cameraVarsStore.view = this; _pritraverser.view = this; addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); addEventListener(MouseEvent.MOUSE_UP, onMouseUp); addEventListener(MouseEvent.ROLL_OUT, onRollOut); addEventListener(MouseEvent.ROLL_OVER, onRollOver); if (_local2){ addEventListener(Event.ADDED_TO_STAGE, createStatsMenu); }; } public function fireMouseMoveEvent(_arg1:Boolean=false):void{ if (!_mouseIsOverView){ return; }; if (!((mouseZeroMove) || (_arg1))){ if ((((mouseX == _lastmove_mouseX)) && ((mouseY == _lastmove_mouseY)))){ return; }; }; fireMouseEvent(MouseEvent3D.MOUSE_MOVE, mouseX, mouseY); _lastmove_mouseX = mouseX; _lastmove_mouseY = mouseY; } private function onCameraUpdated(_arg1:CameraEvent):void{ _updated = true; } public function set camera(_arg1:Camera3D):void{ if (_camera == _arg1){ return; }; if (_camera){ _camera.removeOnSceneTransformChange(onCameraTransformChange); _camera.removeOnCameraUpdate(onCameraUpdated); }; _camera = _arg1; _camera.view = this; _updated = true; if (_camera){ _camera.addOnSceneTransformChange(onCameraTransformChange); _camera.addOnCameraUpdate(onCameraUpdated); } else { throw (new Error("View cannot have camera set to null")); }; } private function onSessionChange(_arg1:Object3DEvent):void{ _session.sessions = [_arg1.object.session]; } public function addOnMouseDown(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false, 0, false); } private function checkSession(_arg1:AbstractRenderSession):void{ var _local2:Array; var _local3:DrawPrimitive; var _local4:Array; if (_arg1.getContainer(this).hitTestPoint(_hitPointX, _hitPointY)){ if ((_arg1 is BitmapRenderSession)){ _container = (_arg1 as BitmapRenderSession).getBitmapContainer(this); _hitPointX = (_hitPointX + _container.x); _hitPointY = (_hitPointY + _container.y); }; _local2 = _arg1.getConsumer(this).list(); for each (_local3 in _local2) { checkPrimitive(_local3); }; _local4 = _arg1.sessions; for each (_arg1 in _local4) { checkSession(_arg1); }; if ((_arg1 is BitmapRenderSession)){ _container = (_arg1 as BitmapRenderSession).getBitmapContainer(this); _hitPointX = (_hitPointX - _container.x); _hitPointY = (_hitPointY - _container.y); }; }; } public function addOverlay(_arg1:IOverlay):void{ if (_overlays[_arg1]){ return; }; _overlays[_arg1] = _arg1; overlay.addChild((_arg1 as Sprite)); } public function get cameraVarsStore():CameraVarsStore{ return (_cameraVarsStore); } public function updateScreenClipping():void{ try { _loaderWidth = loaderInfo.width; _loaderHeight = loaderInfo.height; if (_loaderDirty){ _loaderDirty = false; _screenClippingDirty = true; }; } catch(error:Error) { _loaderDirty = true; _loaderWidth = stage.stageWidth; _loaderHeight = stage.stageHeight; }; _viewZero.x = 0; _viewZero.y = 0; _viewZero = localToGlobal(_viewZero); if (((((!((_x == _viewZero.x))) || (!((_y == _viewZero.y))))) || (((!((stage.scaleMode == StageScaleMode.NO_SCALE))) && (((!((_stageWidth == stage.stageWidth))) || (!((_stageHeight == stage.stageHeight))))))))){ _x = _viewZero.x; _y = _viewZero.y; _stageWidth = stage.stageWidth; _stageHeight = stage.stageHeight; _screenClippingDirty = true; }; } public function get scene():Scene3D{ return (_scene); } public function clear():void{ _updated = true; if (_internalsession){ _internalsession.clear(this); }; } public function get session():AbstractRenderSession{ return (_session); } public function addOnMouseOver(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false, 0, false); } public function removeOnMouseDown(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false); } private function bubbleMouseEvent(_arg1:MouseEvent3D):Array{ var _local2:Object3D; var _local3:Array; _local2 = _arg1.object; _local3 = []; while (_local2 != null) { _local3.unshift(_local2); _local2.dispatchMouseEvent(_arg1); _local2 = _local2.parent; }; return (_local3); } public function get drawPrimitiveStore():DrawPrimitiveStore{ return (_drawPrimitiveStore); } private function notifyRenderComplete():void{ if (!hasEventListener(ViewEvent.RENDER_COMPLETE)){ return; }; if (!_renderComplete){ _renderComplete = new ViewEvent(ViewEvent.RENDER_COMPLETE, this); }; dispatchEvent(_renderComplete); } public function get updated():Boolean{ return (_updated); } private function checkPrimitive(_arg1:DrawPrimitive):void{ var _local2:Number; var _local3:DrawTriangle; var _local4:UV; var _local5:IUVMaterial; if ((_arg1 is DrawFog)){ return; }; if (((!(_arg1.source)) || (!(_arg1.source._mouseEnabled)))){ return; }; if (_arg1.minX > screenX){ return; }; if (_arg1.maxX < screenX){ return; }; if (_arg1.minY > screenY){ return; }; if (_arg1.maxY < screenY){ return; }; if ((((_arg1 is DrawDisplayObject)) && (!((_arg1 as DrawDisplayObject).displayobject.hitTestPoint(_hitPointX, _hitPointY, true))))){ return; }; if (_arg1.contains(screenX, screenY)){ _local2 = _arg1.getZ(screenX, screenY); if (_local2 < screenZ){ if ((_arg1 is DrawTriangle)){ _local3 = (_arg1 as DrawTriangle); _local4 = _local3.getUV(screenX, screenY); if ((_local3.material is IUVMaterial)){ _local5 = (_local3.material as IUVMaterial); if (((!((_local3.material is BitmapMaterialContainer))) && (!((_local5.getPixel32(_local4.u, _local4.v) >> 24))))){ return; }; uv = _local4; }; material = _local5; } else { uv = null; }; screenZ = _local2; persp = (camera.zoom / (1 + (screenZ / camera.focus))); inv = camera.invViewMatrix; sceneX = (((((screenX / persp) * inv.sxx) + ((screenY / persp) * inv.sxy)) + (screenZ * inv.sxz)) + inv.tx); sceneY = (((((screenX / persp) * inv.syx) + ((screenY / persp) * inv.syy)) + (screenZ * inv.syz)) + inv.ty); sceneZ = (((((screenX / persp) * inv.szx) + ((screenY / persp) * inv.szy)) + (screenZ * inv.szz)) + inv.tz); drawpri = _arg1; object = _arg1.source; element = null; }; }; } private function onRollOut(_arg1:MouseEvent):void{ _mouseIsOverView = false; fireMouseEvent(MouseEvent3D.MOUSE_OUT, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey); } public function get clipping():Clipping{ return (_clipping); } private function traverseRollEvent(_arg1:MouseEvent3D, _arg2:Array, _arg3:Boolean):void{ var _local4:Object3D; for each (_local4 in _arg2) { _local4.dispatchMouseEvent(_arg1); if (_arg3){ buttonMode = ((buttonMode) || (_local4.useHandCursor)); } else { if (((buttonMode) && (_local4.useHandCursor))){ buttonMode = false; }; }; }; } private function onStageResized(_arg1:Event):void{ _screenClippingDirty = true; } public function get renderer():IRenderer{ return (_renderer); } public function removeOnMouseOver(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false); } public function addOnMouseOut(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false, 0, false); } private function createStatsMenu(_arg1:Event):void{ statsPanel = new Stats(this, stage.frameRate); statsOpen = false; stage.addEventListener(Event.RESIZE, onStageResized); } public function getMouseEvent(_arg1:String):MouseEvent3D{ var _local2:MouseEvent3D; _local2 = new MouseEvent3D(_arg1); _local2.screenX = screenX; _local2.screenY = screenY; _local2.screenZ = screenZ; _local2.sceneX = sceneX; _local2.sceneY = sceneY; _local2.sceneZ = sceneZ; _local2.view = this; _local2.drawpri = drawpri; _local2.material = material; _local2.element = element; _local2.object = object; _local2.uv = uv; return (_local2); } private function onScreenUpdated(_arg1:ClippingEvent):void{ _updated = true; } public function removeOnMouseOut(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false); } function dispatchMouseEvent(_arg1:MouseEvent3D):void{ if (!hasEventListener(_arg1.type)){ return; }; dispatchEvent(_arg1); } public function get camera():Camera3D{ return (_camera); } public function findHit(_arg1:AbstractRenderSession, _arg2:Number, _arg3:Number):void{ screenX = _arg2; screenY = _arg3; screenZ = Infinity; material = null; object = null; if (((!(_arg1)) || (!(_mouseIsOverView)))){ return; }; _hitPointX = stage.mouseX; _hitPointY = stage.mouseY; if ((this.session is BitmapRenderSession)){ _container = this.session.getContainer(this); _hitPointX = (_hitPointX + _container.x); _hitPointY = (_hitPointY + _container.y); }; checkSession(_arg1); } public function set session(_arg1:AbstractRenderSession):void{ if (_session == _arg1){ return; }; if (_session){ _session.removeOnSessionUpdate(onSessionUpdate); if (_scene){ _session.internalRemoveSceneSession(_scene.ownSession); }; }; _session = _arg1; _updated = true; if (_session){ _session.addOnSessionUpdate(onSessionUpdate); if (_scene){ _session.internalAddSceneSession(_scene.ownSession); }; } else { throw (new Error("View cannot have session set to null")); }; while (numChildren) { removeChildAt(0); }; addChild(background); addChild(_session.getContainer(this)); addChild(_interactiveLayer); addChild(overlay); addChild(hud); } public function set scene(_arg1:Scene3D):void{ if (_scene == _arg1){ return; }; if (_scene){ _scene.internalRemoveView(this); delete _scene.viewDictionary[this]; _scene.removeOnSessionChange(onSessionChange); if (_session){ _session.internalRemoveSceneSession(_scene.ownSession); }; }; _scene = _arg1; _updated = true; if (_scene){ _scene.internalAddView(this); _scene.addOnSessionChange(onSessionChange); _scene.viewDictionary[this] = this; if (_session){ _session.internalAddSceneSession(_scene.ownSession); }; } else { throw (new Error("View cannot have scene set to null")); }; } public function removeOverlay(_arg1:IOverlay):void{ if (_overlays[_arg1]){ overlay.removeChild((_arg1 as Sprite)); _overlays[_arg1] = null; }; } private function onMouseUp(_arg1:MouseEvent):void{ _mousedown = false; fireMouseEvent(MouseEvent3D.MOUSE_UP, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey); } public function removeOnMouseUp(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_UP, _arg1, false); } public function get screenClipping():Clipping{ if (_screenClippingDirty){ updateScreenClipping(); _screenClippingDirty = false; return ((_screenClipping = _clipping.screen(this, _loaderWidth, _loaderHeight))); }; return (_screenClipping); } private function onSessionUpdate(_arg1:SessionEvent):void{ if ((_arg1.target is BitmapRenderSession)){ _scene.updatedSessions[_arg1.target] = _arg1.target; }; } public function getBitmapData():BitmapData{ if ((_session is BitmapRenderSession)){ return ((_session as BitmapRenderSession).getBitmapData(this)); }; throw (new Error("incorrect session object - require BitmapRenderSession")); } private function notifySceneUpdate():void{ if (!_updatescene){ _updatescene = new ViewEvent(ViewEvent.UPDATE_SCENE, this); }; dispatchEvent(_updatescene); } public function set clipping(_arg1:Clipping):void{ if (_clipping == _arg1){ return; }; if (_clipping){ _clipping.removeOnClippingUpdate(onClippingUpdated); _clipping.removeOnScreenUpdate(onScreenUpdated); }; _clipping = _arg1; _clipping.view = this; if (_clipping){ _clipping.addOnClippingUpdate(onClippingUpdated); _clipping.addOnScreenUpdate(onScreenUpdated); } else { throw (new Error("View cannot have clip set to null")); }; _updated = true; _screenClippingDirty = true; } public function set renderer(_arg1:IRenderer):void{ if (_renderer == _arg1){ return; }; _renderer = _arg1; _updated = true; if (!_renderer){ throw (new Error("View cannot have renderer set to null")); }; } public function render():void{ var _local1:ConvexBlock; notifySceneUpdate(); if (_internalsession != _session){ _internalsession = _session; }; if (_session.renderer != (_renderer as IPrimitiveConsumer)){ _session.renderer = (_renderer as IPrimitiveConsumer); }; _session.clear(this); _drawPrimitiveStore.reset(); if (_session.updated){ if ((_scene.ownSession is SpriteRenderSession)){ (_scene.ownSession as SpriteRenderSession).cacheAsBitmap = true; }; _ddo.view = this; _ddo.displayobject = _scene.session.getContainer(this); _ddo.session = _session; _ddo.vx = 0; _ddo.vy = 0; _ddo.vz = 0; _ddo.calc(); _consumer = _session.getConsumer(this); _consumer.primitive(_ddo); }; for each (_local1 in blockers) { _convexBlockProjector.blockers(_local1, cameraVarsStore.viewTransformDictionary[_local1], blockerarray); }; _scene.traverse(_pritraverser); _session.render(this); _updated = false; if (statsOpen){ statsPanel.updateStats(_session.getTotalFaces(this), camera); }; Init.checkUnusedArguments(); processOverlays(); fireMouseMoveEvent(); notifyRenderComplete(); } public function addOnMouseMove(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false, 0, false); } public function addOnMouseUp(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_UP, _arg1, false, 0, false); } private function processOverlays():void{ var _local1:IOverlay; for each (_local1 in _overlays) { _local1.update(); }; } public function addSourceURL(_arg1:String):void{ sourceURL = _arg1; if (statsPanel){ statsPanel.addSourceURL(_arg1); }; } private function onClippingUpdated(_arg1:ClippingEvent):void{ _screenClippingDirty = true; } private function onCameraTransformChange(_arg1:Object3DEvent):void{ _updated = true; } private function onMouseDown(_arg1:MouseEvent):void{ _mousedown = true; fireMouseEvent(MouseEvent3D.MOUSE_DOWN, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey); } public function fireMouseEvent(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Boolean=false):void{ var _local6:MouseEvent3D; var _local7:Array; var _local8:Array; var _local9:int; if (!mouseEvents){ return; }; findHit(_internalsession, _arg2, _arg3); _local6 = getMouseEvent(_arg1); _local7 = []; _local8 = []; _local6.ctrlKey = _arg4; _local6.shiftKey = _arg5; if (((!((_arg1 == MouseEvent3D.MOUSE_OUT))) && (!((_arg1 == MouseEvent3D.MOUSE_OVER))))){ dispatchMouseEvent(_local6); bubbleMouseEvent(_local6); }; if (((!((mouseObject == object))) || (!((mouseMaterial == material))))){ if (mouseObject != null){ _local6 = getMouseEvent(MouseEvent3D.MOUSE_OUT); _local6.object = mouseObject; _local6.material = mouseMaterial; _local6.ctrlKey = _arg4; _local6.shiftKey = _arg5; dispatchMouseEvent(_local6); _local7 = bubbleMouseEvent(_local6); }; if (object != null){ _local6 = getMouseEvent(MouseEvent3D.MOUSE_OVER); _local6.ctrlKey = _arg4; _local6.shiftKey = _arg5; dispatchMouseEvent(_local6); _local8 = bubbleMouseEvent(_local6); }; if (mouseObject != object){ _local9 = 0; while (((_local7[_local9]) && ((_local7[_local9] == _local8[_local9])))) { _local9++; }; if (mouseObject != null){ _local6 = getMouseEvent(MouseEvent3D.ROLL_OUT); _local6.object = mouseObject; _local6.material = mouseMaterial; _local6.ctrlKey = _arg4; _local6.shiftKey = _arg5; traverseRollEvent(_local6, _local7.slice(_local9), false); }; if (object != null){ _local6 = getMouseEvent(MouseEvent3D.ROLL_OVER); _local6.ctrlKey = _arg4; _local6.shiftKey = _arg5; traverseRollEvent(_local6, _local8.slice(_local9), true); }; }; mouseObject = object; mouseMaterial = material; }; } public function removeOnMouseMove(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false); } public function getContainer():DisplayObject{ return (_session.getContainer(this)); } private function onRollOver(_arg1:MouseEvent):void{ _mouseIsOverView = true; fireMouseEvent(MouseEvent3D.MOUSE_OVER, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey); } } }//package away3d.containers
Section 20
//Animation (away3d.core.base.Animation) package away3d.core.base { import flash.events.*; import flash.utils.*; import away3d.events.*; public class Animation extends EventDispatcher implements IAnimation { public var delay:Number;// = 0 private var _transition:AnimationTransition; public var loop:Boolean;// = false private var _latest:uint;// = 0 private var _time:uint; public var smooth:Boolean;// = false private var _isRunning:Boolean;// = false public var sequence:Array; public var cycleEvent:Boolean;// = false public var sequenceEvent:Boolean;// = false private var _cycle:AnimationEvent; private var _sequenceupdate:AnimationEvent; public var frame:Number;// = 0 public var fps:Number;// = 24 public var geometry:Geometry; public var mesh:Mesh; public function Animation(_arg1:Geometry){ _isRunning = false; _latest = 0; frame = 0; fps = 24; loop = false; smooth = false; cycleEvent = false; sequenceEvent = false; delay = 0; sequence = []; super(); geometry = _arg1; _cycle = new AnimationEvent(AnimationEvent.CYCLE, this); _sequenceupdate = new AnimationEvent(AnimationEvent.SEQUENCE_UPDATE, this); } public function interpolate():void{ var _local1:Boolean; _local1 = (_transition == null); if (_local1){ createTransition(); } else { _transition.reset(); }; } public function stop():void{ _isRunning = false; _latest = 0; } public function get latest():uint{ return (_latest); } public function get transitionValue():Number{ return (((_transition)==null) ? 10 : _transition.transitionValue); } public function get isRunning():Boolean{ return (_isRunning); } public function set transitionValue(_arg1:Number):void{ createTransition(); _transition.transitionValue = _arg1; } public function update():void{ var _local1:uint; var _local2:int; var _local3:int; var _local4:Number; var _local5:Number; var _local6:Number; if (((!(_isRunning)) && (!(sequenceEvent)))){ return; }; _local1 = getTimer(); frame = (frame + (((_local1 - _time) * fps) / 1000)); _time = _local1; _local2 = sequence.length; _local3 = ((_local2 - 1) + delay); if (_local2 == 1){ if (cycleEvent){ dispatchEvent(_cycle); }; if (sequenceEvent){ dispatchEvent(_sequenceupdate); }; if (!loop){ _isRunning = false; }; _latest = 0; frame = 0; } else { if (((loop) && (!(sequenceEvent)))){ while (frame > _local3) { frame = (frame - _local3); }; } else { if (frame > _local3){ frame = _local3; if (cycleEvent){ dispatchEvent(_cycle); }; if (sequenceEvent){ dispatchEvent(_sequenceupdate); }; if (!loop){ _isRunning = false; }; }; }; }; _local4 = frame; if (!smooth){ _local4 = Math.round(_local4); }; if (_local4 < 0){ _local4 = 0; }; if (_local4 > (_local2 - 1)){ _local4 = (_local2 - 1); }; if (_local4 == Math.round(_local4)){ geometry.frames[sequence[int(_local4)].frame].adjust(1); } else { _local5 = Math.floor(_local4); _local6 = Math.ceil(_local4); geometry.frames[sequence[int(_local5)].frame].adjust(1); geometry.frames[sequence[int(_local6)].frame].adjust((_local4 - _local5)); if (((loop) || (sequenceEvent))){ if ((((((_latest == 0)) || (((_latest + 1) == sequence[int(_local5)].frame)))) || ((_latest == sequence[int(_local5)].frame)))){ _latest = sequence[int(_local5)].frame; } else { _latest = 0; if (cycleEvent){ dispatchEvent(_cycle); }; if (sequenceEvent){ dispatchEvent(_sequenceupdate); }; }; } else { if (((((cycleEvent) || (sequenceEvent))) || ((_local2 == 2)))){ if (cycleEvent){ dispatchEvent(_cycle); }; if (sequenceEvent){ dispatchEvent(_sequenceupdate); }; }; }; }; if (smooth){ if (_transition.interpolate < 1){ _transition.update(); }; }; } public function start():void{ _time = getTimer(); _isRunning = true; _latest = 0; frame = 0; } public function createTransition():void{ if (_transition == null){ _transition = new AnimationTransition(geometry); }; } } }//package away3d.core.base
Section 21
//AnimationTransition (away3d.core.base.AnimationTransition) package away3d.core.base { public class AnimationTransition { private var _interpolate:Number; private var _steps:Number;// = 0.1 private var _refFrame:Array; private var _geom:Geometry; private var _transitionvalue:Number;// = 10 public function AnimationTransition(_arg1:Geometry){ _steps = 0.1; _transitionvalue = 10; super(); _interpolate = 1; _geom = _arg1; setRef(); } public function get interpolate():Number{ return (_interpolate); } public function update():void{ var _local1:Number; var _local2:int; var _local3:int; if (_interpolate < 1){ _local1 = (1 - _interpolate); _local2 = _refFrame.length; _local3 = 0; while (_local3 < _local2) { _geom.vertices[_local3].x = ((_refFrame[_local3].x * _local1) + (_geom.vertices[_local3].x * _interpolate)); _geom.vertices[_local3].y = ((_refFrame[_local3].y * _local1) + (_geom.vertices[_local3].y * _interpolate)); _geom.vertices[_local3].z = ((_refFrame[_local3].z * _local1) + (_geom.vertices[_local3].z * _interpolate)); _local3++; }; _interpolate = (_interpolate + _steps); }; } private function updateRef():void{ var _local1:int; var _local2:int; _local1 = _refFrame.length; _local2 = 0; while (_local2 < _local1) { _refFrame[_local2].x = _geom.vertices[_local2].x; _refFrame[_local2].y = _geom.vertices[_local2].y; _refFrame[_local2].z = _geom.vertices[_local2].z; _local2++; }; } private function setRef():void{ var _local1:int; var _local2:int; _refFrame = []; _local1 = _geom.vertices.length; _local2 = 0; while (_local2 < _local1) { _refFrame.push(new Vertex(_geom.vertices[_local2].x, _geom.vertices[_local2].y, _geom.vertices[_local2].z)); _local2++; }; } public function set transitionValue(_arg1:Number):void{ _transitionvalue = ((_arg1)<1) ? 1 : _arg1; _steps = (1 / _arg1); } public function get transitionValue():Number{ return (_transitionvalue); } public function reset():void{ updateRef(); _interpolate = _steps; } } }//package away3d.core.base
Section 22
//Billboard (away3d.core.base.Billboard) package away3d.core.base { import away3d.core.utils.*; import away3d.materials.*; public class Billboard extends Element { private var _rotation:Number; var _material:IBillboardMaterial; public var billboardVO:BillboardVO; var _vertex:Vertex; private var _scaling:Number; private var _index:int; private var _width:Number; private var _vertices:Array; private var _height:Number; private var _commands:Array; public function Billboard(_arg1:Vertex, _arg2:IBillboardMaterial=null, _arg3:Number=10, _arg4:Number=10, _arg5:Number=0, _arg6:Number=1){ _vertices = new Array(); _commands = new Array(); billboardVO = new BillboardVO(); super(); this.vertex = _arg1; this.material = _arg2; this.width = _arg3; this.height = _arg4; this.rotation = _arg5; this.scaling = _arg6; billboardVO.billboard = this; vertexDirty = true; } override public function get vertices():Array{ return (_vertices); } override public function get maxX():Number{ return (_vertex._x); } override public function get commands():Array{ return (_commands); } public function get z():Number{ return (_vertex.z); } public function get y():Number{ return (_vertex.y); } public function set x(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(x)")); }; if (_vertex.x == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("x == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("x == -Infinity"); }; _vertex.x = _arg1; } public function set y(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(y)")); }; if (_vertex.y == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("y == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("y == -Infinity"); }; _vertex.y = _arg1; } public function set width(_arg1:Number):void{ if (_width == _arg1){ return; }; _width = (billboardVO.width = _arg1); notifyMappingChange(); } public function set material(_arg1:IBillboardMaterial):void{ if (_material == _arg1){ return; }; if (((!((_material == null))) && (parent))){ parent.removeMaterial(this, _material); }; _material = (billboardVO.material = _arg1); if (((!((_material == null))) && (parent))){ parent.addMaterial(this, _material); }; } public function get vertex():Vertex{ return (_vertex); } public function get material():IBillboardMaterial{ return (_material); } public function get scaling():Number{ return (_scaling); } public function set z(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(z)")); }; if (_vertex.z == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("z == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("z == -Infinity"); }; _vertex.z = _arg1; } public function get height():Number{ return (_width); } public function set height(_arg1:Number):void{ if (_height == _arg1){ return; }; _height = (billboardVO.height = _arg1); notifyMappingChange(); } public function set scaling(_arg1:Number):void{ if (_scaling == _arg1){ return; }; _scaling = (billboardVO.scaling = _arg1); notifyMappingChange(); } override public function get minX():Number{ return (_vertex._x); } override public function get minZ():Number{ return (_vertex._z); } override public function get minY():Number{ return (_vertex._y); } public function set vertex(_arg1:Vertex):void{ if (_arg1 == _vertex){ return; }; if (_vertex){ _index = _vertex.parents.indexOf(this); if (_index != -1){ _vertex.parents.splice(_index, 1); }; }; _commands[0] = (billboardVO.command = "M"); _vertices[0] = (_vertex = (billboardVO.vertex = _arg1)); if (_vertex){ _vertex.parents.push(this); }; vertexDirty = true; } override public function get radius2():Number{ return (0); } public function get width():Number{ return (_width); } override public function get maxY():Number{ return (_vertex._y); } override public function get maxZ():Number{ return (_vertex._z); } public function get x():Number{ return (_vertex.x); } public function set rotation(_arg1:Number):void{ if (_rotation == _arg1){ return; }; _rotation = (billboardVO.rotation = _arg1); notifyMappingChange(); } public function get rotation():Number{ return (_rotation); } } }//package away3d.core.base
Section 23
//DrawingCommand (away3d.core.base.DrawingCommand) package away3d.core.base { public class DrawingCommand { public var pEnd:Vertex; public var pControl:Vertex; public var pStart:Vertex; public var type:String; public static const MOVE:String = "M"; public static const LINE:String = "L"; public static const CURVE:String = "C"; public function DrawingCommand(_arg1:String, _arg2:Vertex, _arg3:Vertex, _arg4:Vertex){ this.type = _arg1; this.pStart = _arg2; this.pControl = _arg3; this.pEnd = _arg4; } public function toString():String{ return (((((((("DrawingCommand: " + type) + ", ") + pStart) + ", ") + pControl) + ", ") + pEnd)); } } }//package away3d.core.base
Section 24
//Element (away3d.core.base.Element) package away3d.core.base { import flash.events.*; import away3d.events.*; public class Element extends EventDispatcher { public var vertexDirty:Boolean; public var extra:Object; private var _vertexchanged:ElementEvent; private var _visiblechanged:ElementEvent; public var parent:Geometry; var _visible:Boolean;// = true private var _mappingchanged:ElementEvent; private var _vertexvaluechanged:ElementEvent; public function Element(){ _visible = true; super(); } function notifyVisibleChange():void{ if (!hasEventListener(ElementEvent.VISIBLE_CHANGED)){ return; }; if (_visiblechanged == null){ _visiblechanged = new ElementEvent(ElementEvent.VISIBLE_CHANGED, this); }; dispatchEvent(_visiblechanged); } function notifyVertexValueChange():void{ if (!hasEventListener(ElementEvent.VERTEXVALUE_CHANGED)){ return; }; if (_vertexvaluechanged == null){ _vertexvaluechanged = new ElementEvent(ElementEvent.VERTEXVALUE_CHANGED, this); }; dispatchEvent(_vertexvaluechanged); } public function get commands():Array{ throw (new Error("Not implemented")); } public function addOnVertexChange(_arg1:Function):void{ addEventListener(ElementEvent.VERTEX_CHANGED, _arg1, false, 0, true); } public function removeOnVertexChange(_arg1:Function):void{ removeEventListener(ElementEvent.VERTEX_CHANGED, _arg1, false); } public function addOnMappingChange(_arg1:Function):void{ addEventListener(ElementEvent.MAPPING_CHANGED, _arg1, false, 0, true); } public function addOnVertexValueChange(_arg1:Function):void{ addEventListener(ElementEvent.VERTEXVALUE_CHANGED, _arg1, false, 0, true); } public function get minX():Number{ return (-(Math.sqrt(radius2))); } public function get minZ():Number{ return (-(Math.sqrt(radius2))); } public function addOnVisibleChange(_arg1:Function):void{ addEventListener(ElementEvent.VISIBLE_CHANGED, _arg1, false, 0, true); } public function get minY():Number{ return (-(Math.sqrt(radius2))); } function notifyMappingChange():void{ if (!hasEventListener(ElementEvent.MAPPING_CHANGED)){ return; }; if (_mappingchanged == null){ _mappingchanged = new ElementEvent(ElementEvent.MAPPING_CHANGED, this); }; dispatchEvent(_mappingchanged); } function notifyVertexChange():void{ if (!hasEventListener(ElementEvent.VERTEX_CHANGED)){ return; }; if (_vertexchanged == null){ _vertexchanged = new ElementEvent(ElementEvent.VERTEX_CHANGED, this); }; dispatchEvent(_vertexchanged); } public function get radius2():Number{ var _local1:Number; var _local2:Vertex; var _local3:Number; _local1 = 0; for each (_local2 in vertices) { _local3 = (((_local2._x * _local2._x) + (_local2._y * _local2._y)) + (_local2._z * _local2._z)); if (_local3 > _local1){ _local1 = _local3; }; }; return (_local1); } public function removeOnMappingChange(_arg1:Function):void{ removeEventListener(ElementEvent.MAPPING_CHANGED, _arg1, false); } public function set visible(_arg1:Boolean):void{ if (_arg1 == _visible){ return; }; _visible = _arg1; notifyVisibleChange(); } public function get visible():Boolean{ return (_visible); } public function get maxY():Number{ return (Math.sqrt(radius2)); } public function get maxZ():Number{ return (Math.sqrt(radius2)); } public function get vertices():Array{ throw (new Error("Not implemented")); } public function removeOnVertexValueChange(_arg1:Function):void{ removeEventListener(ElementEvent.VERTEXVALUE_CHANGED, _arg1, false); } public function get maxX():Number{ return (Math.sqrt(radius2)); } public function removeOnVisibleChange(_arg1:Function):void{ removeEventListener(ElementEvent.VISIBLE_CHANGED, _arg1, false); } } }//package away3d.core.base
Section 25
//Face (away3d.core.base.Face) package away3d.core.base { import flash.events.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import away3d.events.*; public class Face extends Element { private var _s:Number; private var _normal:Number3D; private var _lastAddedVertex:Vertex; var _v0:Vertex; var _v1:Vertex; var _v2:Vertex; private var _vertices:Array; private var _area:Number; private var _normalDirty:Boolean; private var _drawingCommands:Array; var _material:ITriangleMaterial; private var _index:int; var _back:ITriangleMaterial; public var faceVO:FaceVO; private var _areaDirty:Boolean; private var _b:Number; private var _a:Number; private var _commands:Array; var _uv0:UV; var _uv1:UV; var _uv2:UV; private var _c:Number; public function Face(_arg1:Vertex=null, _arg2:Vertex=null, _arg3:Vertex=null, _arg4:ITriangleMaterial=null, _arg5:UV=null, _arg6:UV=null, _arg7:UV=null){ _normal = new Number3D(); _vertices = new Array(); _commands = new Array(); _drawingCommands = new Array(); faceVO = new FaceVO(); super(); if (_arg1){ this.v0 = _arg1; }; if (_arg2){ this.v1 = _arg2; }; if (_arg3){ this.v2 = _arg3; }; this.material = _arg4; this.uv0 = _arg5; this.uv1 = _arg6; this.uv2 = _arg7; faceVO.face = this; vertexDirty = true; } public function get uvs():Array{ return ([_uv0, _uv1, _uv2]); } public function get back():ITriangleMaterial{ return (_back); } public function get normal():Number3D{ if (vertexDirty){ updateVertex(); }; if (_normalDirty){ updateNormal(); }; return (_normal); } private function updateNormal():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; _normalDirty = false; _local1 = (_v1.x - _v0.x); _local2 = (_v1.y - _v0.y); _local3 = (_v1.z - _v0.z); _local4 = (_v2.x - _v0.x); _local5 = (_v2.y - _v0.y); _local6 = (_v2.z - _v0.z); _local7 = ((_local2 * _local6) - (_local3 * _local5)); _local8 = ((_local3 * _local4) - (_local1 * _local6)); _local9 = ((_local1 * _local5) - (_local2 * _local4)); _local10 = Math.sqrt((((_local7 * _local7) + (_local8 * _local8)) + (_local9 * _local9))); _normal.x = (_local7 / _local10); _normal.y = (_local8 / _local10); _normal.z = (_local9 / _local10); } public function set v0(_arg1:Vertex):void{ addVertexAt(0, _arg1, "M"); } public function get material():ITriangleMaterial{ return (_material); } public function moveTo(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Vertex; _local4 = new Vertex(_arg1, _arg2, _arg3); addVertexAt(_vertices.length, _local4, DrawingCommand.MOVE); _drawingCommands.push(new DrawingCommand(DrawingCommand.MOVE, _lastAddedVertex, null, _local4)); _lastAddedVertex = _local4; } override public function get minX():Number{ if (_v0._x < _v1._x){ if (_v0._x < _v2._x){ return (_v0._x); }; return (_v2._x); //unresolved jump }; if (_v1._x < _v2._x){ return (_v1._x); }; return (_v2._x); } override public function get minZ():Number{ if (_v0._z < _v1._z){ if (_v0._z < _v2._z){ return (_v0._z); }; return (_v2._z); //unresolved jump }; if (_v1._z < _v2._z){ return (_v1._z); }; return (_v2._z); } override public function get minY():Number{ if (_v0._y < _v1._y){ if (_v0._y < _v2._y){ return (_v0._y); }; return (_v2._y); //unresolved jump }; if (_v1._y < _v2._y){ return (_v1._y); }; return (_v2._y); } public function set normalDirty(_arg1:Boolean):void{ vertexDirty = _arg1; } public function set uv0(_arg1:UV):void{ if (_arg1 == _uv0){ return; }; if (_uv0 != null){ if (((!((_uv0 == _uv1))) && (!((_uv0 == _uv2))))){ _uv0.removeOnChange(onUVChange); }; }; _uv0 = (faceVO.uv0 = _arg1); if (_uv0 != null){ if (((!((_uv0 == _uv1))) && (!((_uv0 == _uv2))))){ _uv0.addOnChange(onUVChange); }; }; notifyMappingChange(); } public function set uv1(_arg1:UV):void{ if (_arg1 == _uv1){ return; }; if (_uv1 != null){ if (((!((_uv1 == _uv0))) && (!((_uv1 == _uv2))))){ _uv1.removeOnChange(onUVChange); }; }; _uv1 = (faceVO.uv1 = _arg1); if (_uv1 != null){ if (((!((_uv1 == _uv0))) && (!((_uv1 == _uv2))))){ _uv1.addOnChange(onUVChange); }; }; notifyMappingChange(); } public function set uv2(_arg1:UV):void{ if (_arg1 == _uv2){ return; }; if (_uv2 != null){ if (((!((_uv2 == _uv1))) && (!((_uv2 == _uv0))))){ _uv2.removeOnChange(onUVChange); }; }; _uv2 = (faceVO.uv2 = _arg1); if (_uv2 != null){ if (((!((_uv2 == _uv1))) && (!((_uv2 == _uv0))))){ _uv2.addOnChange(onUVChange); }; }; notifyMappingChange(); } public function clone():Face{ var _local1:Face; var _local2:uint; var _local3:DrawingCommand; _local1 = new Face(); while (_local2 < drawingCommands.length) { _local3 = drawingCommands[_local2]; switch (_local3.type){ case DrawingCommand.MOVE: _local1.moveTo(_local3.pEnd.x, _local3.pEnd.y, _local3.pEnd.z); break; case DrawingCommand.LINE: _local1.lineTo(_local3.pEnd.x, _local3.pEnd.y, _local3.pEnd.z); break; case DrawingCommand.CURVE: _local1.curveTo(_local3.pControl.x, _local3.pControl.y, _local3.pControl.z, _local3.pEnd.x, _local3.pEnd.y, _local3.pEnd.z); break; }; _local2++; }; return (_local1); } public function set material(_arg1:ITriangleMaterial):void{ if (_arg1 == _material){ return; }; if (((!((_material == null))) && (parent))){ parent.removeMaterial(this, _material); }; _material = (faceVO.material = _arg1); if (((!((_material == null))) && (parent))){ parent.addMaterial(this, _material); }; notifyMappingChange(); } override public function get maxX():Number{ if (_v0._x > _v1._x){ if (_v0._x > _v2._x){ return (_v0._x); }; return (_v2._x); //unresolved jump }; if (_v1._x > _v2._x){ return (_v1._x); }; return (_v2._x); } override public function get maxY():Number{ if (_v0._y > _v1._y){ if (_v0._y > _v2._y){ return (_v0._y); }; return (_v2._y); //unresolved jump }; if (_v1._y > _v2._y){ return (_v1._y); }; return (_v2._y); } override public function get maxZ():Number{ if (_v0._z > _v1._z){ if (_v0._z > _v2._z){ return (_v0._z); }; return (_v2._z); //unresolved jump }; if (_v1._z > _v2._z){ return (_v1._z); }; return (_v2._z); } public function get v0():Vertex{ return (_v0); } public function get v2():Vertex{ return (_v2); } public function get v1():Vertex{ return (_v1); } override public function get commands():Array{ return (_commands); } public function lineTo(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Vertex; _local4 = new Vertex(_arg1, _arg2, _arg3); addVertexAt(_vertices.length, _local4, DrawingCommand.LINE); _drawingCommands.push(new DrawingCommand(DrawingCommand.LINE, _lastAddedVertex, null, _local4)); _lastAddedVertex = _local4; } private function onUVChange(_arg1:Event):void{ notifyMappingChange(); } public function get area():Number{ if (vertexDirty){ updateVertex(); }; if (_areaDirty){ updateArea(); }; return (_area); } public function scaleAboutCenter(_arg1:Number):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:uint; var _local9:DrawingCommand; var _local10:Number3D; var _local11:Number3D; var _local12:Number3D; _local2 = Number.MAX_VALUE; _local3 = -(Number.MAX_VALUE); _local4 = Number.MAX_VALUE; _local5 = -(Number.MAX_VALUE); _local6 = Number.MAX_VALUE; _local7 = -(Number.MAX_VALUE); _local8 = 0; while (_local8 < drawingCommands.length) { _local9 = drawingCommands[_local8]; if (_local9.pControl){ if (_local9.pControl.x < _local2){ _local2 = _local9.pControl.x; }; if (_local9.pControl.x > _local3){ _local3 = _local9.pControl.x; }; if (_local9.pControl.y < _local4){ _local4 = _local9.pControl.y; }; if (_local9.pControl.y > _local5){ _local5 = _local9.pControl.y; }; if (_local9.pControl.z < _local6){ _local6 = _local9.pControl.z; }; if (_local9.pControl.z > _local7){ _local7 = _local9.pControl.z; }; }; if (_local9.pEnd){ if (_local9.pEnd.x < _local2){ _local2 = _local9.pEnd.x; }; if (_local9.pEnd.x > _local3){ _local3 = _local9.pEnd.x; }; if (_local9.pEnd.y < _local4){ _local4 = _local9.pEnd.y; }; if (_local9.pEnd.y > _local5){ _local5 = _local9.pEnd.y; }; if (_local9.pEnd.z < _local6){ _local6 = _local9.pEnd.z; }; if (_local9.pEnd.z > _local7){ _local7 = _local9.pEnd.z; }; }; _local8++; }; _local10 = new Number3D(((_local3 + _local2) / 2), ((_local5 + _local4) / 2), ((_local7 + _local6) / 2)); _local8 = 0; while (_local8 < drawingCommands.length) { _local9 = drawingCommands[_local8]; if (_local9.pControl){ _local11 = new Number3D(_local9.pControl.x, _local9.pControl.y, _local9.pControl.z); new Number3D(_local9.pControl.x, _local9.pControl.y, _local9.pControl.z).sub(_local11, _local10); _local11.scale(_local11, _arg1); _local9.pControl.x = (_local10.x + _local11.x); _local9.pControl.y = (_local10.y + _local11.y); _local9.pControl.z = (_local10.z + _local11.z); }; if (_local9.pEnd){ _local12 = new Number3D(_local9.pEnd.x, _local9.pEnd.y, _local9.pEnd.z); new Number3D(_local9.pEnd.x, _local9.pEnd.y, _local9.pEnd.z).sub(_local12, _local10); _local12.scale(_local12, _arg1); _local9.pEnd.x = (_local10.x + _local12.x); _local9.pEnd.y = (_local10.y + _local12.y); _local9.pEnd.z = (_local10.z + _local12.z); }; _local8++; }; } public function offset(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:uint; var _local5:DrawingCommand; while (_local4 < drawingCommands.length) { _local5 = drawingCommands[_local4]; if (_local5.pControl){ _local5.pControl.x = (_local5.pControl.x + _arg1); _local5.pControl.y = (_local5.pControl.y + _arg2); _local5.pControl.z = (_local5.pControl.z + _arg3); }; if (_local5.pEnd){ _local5.pEnd.x = (_local5.pEnd.x + _arg1); _local5.pEnd.y = (_local5.pEnd.y + _arg2); _local5.pEnd.z = (_local5.pEnd.z + _arg3); }; _local4++; }; } public function get uv0():UV{ return (_uv0); } public function get uv2():UV{ return (_uv2); } public function get uv1():UV{ return (_uv1); } private function addVertexAt(_arg1:uint, _arg2:Vertex, _arg3:String):void{ if (((_vertices[_arg1]) && ((_vertices[_arg1] == _arg2)))){ return; }; if (_vertices[_arg1]){ _index = _vertices[_arg1].parents.indexOf(this); if (_index != -1){ _vertices[_arg1].parents.splice(_index, 1); }; }; _commands[_arg1] = (faceVO.commands[_arg1] = _arg3); _vertices[_arg1] = (faceVO.vertices[_arg1] = _arg2); if (_arg1 == 0){ _v0 = (faceVO.v0 = _arg2); } else { if (_arg1 == 1){ _v1 = (faceVO.v1 = _arg2); } else { if (_arg1 == 2){ _v2 = (faceVO.v2 = _arg2); }; }; }; if (_arg1 == 2){ if ((-0.5 * (((_v0.x * (_v2.y - _v1.y)) + (_v1.x * (_v0.y - _v2.y))) + (_v2.x * (_v1.y - _v0.y)))) < 0){ faceVO.reverseArea = true; }; }; _arg2._index = _arg1; _arg2.parents.push(this); vertexDirty = true; } public function get drawingCommands():Array{ return (_drawingCommands); } public function curveTo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{ var _local7:Vertex; var _local8:Vertex; _local7 = new Vertex(_arg1, _arg2, _arg3); _local8 = new Vertex(_arg4, _arg5, _arg6); addVertexAt(_vertices.length, _local7, DrawingCommand.CURVE); addVertexAt(_vertices.length, _local8, "P"); _drawingCommands.push(new DrawingCommand(DrawingCommand.CURVE, _lastAddedVertex, _local7, _local8)); _lastAddedVertex = _local8; } private function updateVertex():void{ vertexDirty = false; _normalDirty = true; _areaDirty = true; } public function set back(_arg1:ITriangleMaterial):void{ if (_arg1 == _back){ return; }; if (_back != null){ parent.removeMaterial(this, _back); }; _back = (faceVO.back = _arg1); if (_back != null){ parent.addMaterial(this, _back); }; notifyMappingChange(); } override public function get radius2():Number{ var _local1:Number; var _local2:Number; var _local3:Number; _local1 = (((_v0._x * _v0._x) + (_v0._y * _v0._y)) + (_v0._z * _v0._z)); _local2 = (((_v1._x * _v1._x) + (_v1._y * _v1._y)) + (_v1._z * _v1._z)); _local3 = (((_v2._x * _v2._x) + (_v2._y * _v2._y)) + (_v2._z * _v2._z)); if (_local1 > _local2){ if (_local1 > _local3){ return (_local1); }; return (_local3); //unresolved jump }; if (_local2 > _local3){ return (_local2); }; return (_local3); } public function invert():void{ faceVO.v2 = this._v1; faceVO.v1 = this._v2; faceVO.uv2 = this._uv1; faceVO.uv1 = this._uv2; this._v1 = faceVO.v1; this._v2 = faceVO.v2; this._uv1 = faceVO.uv1; this._uv2 = faceVO.uv2; vertexDirty = true; notifyMappingChange(); } private function updateArea():void{ _a = v0.position.distance(v1.position); _b = v1.position.distance(v2.position); _c = v2.position.distance(v0.position); _s = (((_a + _b) + _c) / 2); _area = Math.sqrt((((_s * (_s - _a)) * (_s - _b)) * (_s - _c))); } public function set v2(_arg1:Vertex):void{ addVertexAt(2, _arg1, "L"); } override public function get vertices():Array{ return (_vertices); } public function set v1(_arg1:Vertex):void{ addVertexAt(1, _arg1, "L"); } } }//package away3d.core.base
Section 26
//Frame (away3d.core.base.Frame) package away3d.core.base { public class Frame implements IFrame { public var vertexpositions:Array; public function Frame(){ vertexpositions = []; super(); } public function getIndexes(_arg1:Array):Array{ var _local2:Array; var _local3:VertexPosition; _local2 = []; for each (_local3 in vertexpositions) { _local2.push(_local3.getIndex(_arg1)); }; return (_local2); } public function adjust(_arg1:Number=1):void{ var _local2:VertexPosition; for each (_local2 in vertexpositions) { _local2.adjust(_arg1); }; } } }//package away3d.core.base
Section 27
//Geometry (away3d.core.base.Geometry) package away3d.core.base { import flash.events.*; import away3d.containers.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import flash.utils.*; import away3d.loaders.data.*; import away3d.events.*; import away3d.animators.skin.*; import away3d.animators.data.*; public class Geometry extends EventDispatcher { private var _animation:Animation; public var framenames:Dictionary; private var _activePrefix:String; public var materialDictionary:Dictionary; private var _neighbour01:Dictionary; private var _fAngle:Number; private var clonedskincontrollers:Dictionary; private var _dispatchedDimensionsChange:Boolean; var billboardVOs:Array; private var _neighboursDirty:Boolean;// = true private var _neighbour12:Dictionary; private var _element_vertices:Array; private var _materialData:MaterialData; private var _vertices:Array; private var _neighbour20:Dictionary; var faceVOs:Array; private var _verticesDirty:Boolean;// = true private var _vertnormals:Dictionary; private var _frame:int; private var _billboardVO:BillboardVO; private var _quarterFacesTotal:int;// = 0 var commands:Array; public var graphics:Graphics3D; public var skinVertices:Array; private var _animationgroup:AnimationGroup; private var clonedskinvertices:Dictionary; private var clonedvertices:Dictionary; public var skinControllers:Array; private var _sequencedone:AnimationEvent; private var _vertfaces:Dictionary; var indices:Array; private var _fVectors:Array; private var _segmentVO:SegmentVO; private var _fNormal:Number3D; private var _billboards:Array; private var _faces:Array; private var _element:Element; private var _vertex:Vertex; public var rootBone:Bone; var segmentVOs:Array; private var _dimensionschanged:GeometryEvent; private var _vertfacesDirty:Boolean;// = true private var _processed:Dictionary; private var _element_commands:Array; private var _index:int; public var cloneElementDictionary:Dictionary; private var _vertnormalsDirty:Boolean;// = true public var frames:Dictionary; protected var ini:Init; var startIndices:Array; private var _cycle:AnimationEvent; private var cloneduvs:Dictionary; private var _faceVO:FaceVO; private var _segments:Array; public function Geometry():void{ commands = []; indices = []; startIndices = []; faceVOs = []; segmentVOs = []; billboardVOs = []; _faces = []; _segments = []; _billboards = []; _vertices = []; _verticesDirty = true; _neighboursDirty = true; _vertfacesDirty = true; _vertnormalsDirty = true; _quarterFacesTotal = 0; materialDictionary = new Dictionary(true); cloneElementDictionary = new Dictionary(); graphics = new Graphics3D(); super(); graphics.geometry = this; } public function removeFace(_arg1:Face):void{ var _local2:int; _local2 = _faces.indexOf(_arg1); if (_local2 == -1){ return; }; removeElement(_arg1); if (_arg1.material){ removeMaterial(_arg1, _arg1.material); }; _vertfacesDirty = true; _arg1.v0.geometry = null; _arg1.v1.geometry = null; _arg1.v2.geometry = null; _faces.splice(_local2, 1); } function getFacesByVertex(_arg1:Vertex):Array{ if (_vertfacesDirty){ findVertFaces(); }; return (_vertfaces[_arg1]); } public function removeOnSequenceDone(_arg1:Function):void{ removeEventListener(AnimationEvent.SEQUENCE_DONE, _arg1, false); } public function gotoAndStop(_arg1:int):void{ _frame = (_animation.frame = _arg1); frames[_frame].adjust(1); if (_animation.isRunning){ _animation.stop(); }; } public function gotoAndPlay(_arg1:int):void{ _frame = (_animation.frame = _arg1); frames[_frame].adjust(1); if (!_animation.isRunning){ _animation.start(); }; } public function addOnMappingChange(_arg1:Function):void{ addEventListener(ElementEvent.MAPPING_CHANGED, _arg1, false, 0, true); } public function playFrames(_arg1:Array, _arg2:uint, _arg3:Boolean=true, _arg4:Boolean=false):void{ var _local5:String; if (_animation){ _animation.sequence = []; } else { _animation = new Animation(this); }; _animation.fps = _arg2; _animation.smooth = _arg3; _animation.loop = _arg4; if (_arg3){ _animation.createTransition(); }; for each (_local5 in _arg1) { if (framenames[_local5] != null){ _animation.sequence.push(new AnimationFrame(framenames[_local5])); }; }; if (_animation.sequence.length){ _animation.start(); }; } public function get billboards():Array{ return (_billboards); } public function neighbour20(_arg1:Face):Face{ if (_neighboursDirty){ findNeighbours(); }; return (_neighbour20[_arg1]); } public function get transitionValue():Number{ return (_animation.transitionValue); } private function onVertexValueChange(_arg1:ElementEvent):void{ if ((_arg1.element is Face)){ (_arg1.element as Face).normalDirty = true; }; notifyDimensionsChange(); } function getVertexNormal(_arg1:Vertex):Number3D{ if (_vertfacesDirty){ findVertFaces(); }; if (_vertnormalsDirty){ findVertNormals(); }; return (_vertnormals[_arg1]); } private function addElement(_arg1:Element):void{ _verticesDirty = true; _arg1.addOnVertexChange(onVertexChange); _arg1.addOnVertexValueChange(onVertexValueChange); _arg1.addOnMappingChange(onMappingChange); _arg1.parent = this; notifyDimensionsChange(); } public function removeOnCycle(_arg1:Function):void{ _animation.cycleEvent = false; _animation.removeEventListener(AnimationEvent.CYCLE, _arg1, false); } public function addSegment(_arg1:Segment):void{ addElement(_arg1); if (_arg1.material){ addMaterial(_arg1, _arg1.material); }; _arg1.v0.geometry = this; _arg1.v1.geometry = this; _segments.push(_arg1); } private function findNeighbours():void{ var _local1:Face; var _local2:Boolean; var _local3:Face; _neighbour01 = new Dictionary(); _neighbour12 = new Dictionary(); _neighbour20 = new Dictionary(); for each (_local1 in _faces) { _local2 = true; for each (_local3 in _faces) { if (_local2){ if (_local1 == _local3){ _local2 = false; }; } else { if ((((_local1._v0 == _local3._v2)) && ((_local1._v1 == _local3._v1)))){ _neighbour01[_local1] = _local3; _neighbour12[_local3] = _local1; }; if ((((_local1._v0 == _local3._v0)) && ((_local1._v1 == _local3._v2)))){ _neighbour01[_local1] = _local3; _neighbour20[_local3] = _local1; }; if ((((_local1._v0 == _local3._v1)) && ((_local1._v1 == _local3._v0)))){ _neighbour01[_local1] = _local3; _neighbour01[_local3] = _local1; }; if ((((_local1._v1 == _local3._v2)) && ((_local1._v2 == _local3._v1)))){ _neighbour12[_local1] = _local3; _neighbour12[_local3] = _local1; }; if ((((_local1._v1 == _local3._v0)) && ((_local1._v2 == _local3._v2)))){ _neighbour12[_local1] = _local3; _neighbour20[_local3] = _local1; }; if ((((_local1._v1 == _local3._v1)) && ((_local1._v2 == _local3._v0)))){ _neighbour12[_local1] = _local3; _neighbour01[_local3] = _local1; }; if ((((_local1._v2 == _local3._v2)) && ((_local1._v0 == _local3._v1)))){ _neighbour20[_local1] = _local3; _neighbour12[_local3] = _local1; }; if ((((_local1._v2 == _local3._v0)) && ((_local1._v0 == _local3._v2)))){ _neighbour20[_local1] = _local3; _neighbour20[_local3] = _local1; }; if ((((_local1._v2 == _local3._v1)) && ((_local1._v0 == _local3._v0)))){ _neighbour20[_local1] = _local3; _neighbour01[_local3] = _local1; }; }; }; }; _neighboursDirty = false; } public function removeSegment(_arg1:Segment):void{ var _local2:int; _local2 = _segments.indexOf(_arg1); if (_local2 == -1){ return; }; removeElement(_arg1); if (_arg1.material){ removeMaterial(_arg1, _arg1.material); }; _arg1.v0.geometry = null; _arg1.v1.geometry = null; _segments.splice(_local2, 1); } private function cloneFrame(_arg1:Frame):Frame{ var _local2:Frame; var _local3:Array; var _local4:VertexPosition; _local2 = new Frame(); _local3 = _arg1.vertexpositions; for each (_local4 in _local3) { _local2.vertexpositions.push(cloneVertexPosition(_local4)); }; return (_local2); } public function quarterFace(_arg1:Face, _arg2:Dictionary=null):void{ var _local3:Vertex; var _local4:Vertex; var _local5:Vertex; var _local6:Vertex; var _local7:Vertex; var _local8:Vertex; var _local9:UV; var _local10:UV; var _local11:UV; var _local12:UV; var _local13:UV; var _local14:UV; var _local15:ITriangleMaterial; if (_arg2 == null){ _arg2 = new Dictionary(); }; _local3 = _arg1.v0; _local4 = _arg1.v1; _local5 = _arg1.v2; if (_arg2[_local3] == null){ _arg2[_local3] = new Dictionary(); }; if (_arg2[_local4] == null){ _arg2[_local4] = new Dictionary(); }; if (_arg2[_local5] == null){ _arg2[_local5] = new Dictionary(); }; _local6 = _arg2[_local3][_local4]; if (_local6 == null){ _local6 = Vertex.median(_local3, _local4); _arg2[_local3][_local4] = _local6; _arg2[_local4][_local3] = _local6; }; _local7 = _arg2[_local4][_local5]; if (_local7 == null){ _local7 = Vertex.median(_local4, _local5); _arg2[_local4][_local5] = _local7; _arg2[_local5][_local4] = _local7; }; _local8 = _arg2[_local5][_local3]; if (_local8 == null){ _local8 = Vertex.median(_local5, _local3); _arg2[_local5][_local3] = _local8; _arg2[_local3][_local5] = _local8; }; _local9 = _arg1.uv0; _local10 = _arg1.uv1; _local11 = _arg1.uv2; _local12 = UV.median(_local9, _local10); _local13 = UV.median(_local10, _local11); _local14 = UV.median(_local11, _local9); _local15 = _arg1.material; removeFace(_arg1); addFace(new Face(_local3, _local6, _local8, _local15, _local9, _local12, _local14)); addFace(new Face(_local6, _local4, _local7, _local15, _local12, _local10, _local13)); addFace(new Face(_local8, _local7, _local5, _local15, _local14, _local13, _local11)); addFace(new Face(_local7, _local8, _local6, _local15, _local13, _local14, _local12)); } public function removeBillboard(_arg1:Billboard):void{ var _local2:int; _local2 = _billboards.indexOf(_arg1); if (_local2 == -1){ return; }; removeElement(_arg1); if (_arg1.material){ removeMaterial(_arg1, _arg1.material); }; _arg1.vertex.geometry = null; _billboards.splice(_local2, 1); } public function set transitionValue(_arg1:Number):void{ _animation.transitionValue = _arg1; } public function get isRunning():Boolean{ return (((_animation)!=null) ? _animation.isRunning : false); } function notifyDimensionsChange():void{ if (((_dispatchedDimensionsChange) || (!(hasEventListener(GeometryEvent.DIMENSIONS_CHANGED))))){ return; }; if (!_dimensionschanged){ _dimensionschanged = new GeometryEvent(GeometryEvent.DIMENSIONS_CHANGED, this); }; dispatchEvent(_dimensionschanged); _dispatchedDimensionsChange = true; } public function set loop(_arg1:Boolean):void{ _animation.loop = _arg1; } private function findVertFaces():void{ var _local1:Face; var _local2:Vertex; var _local3:Vertex; var _local4:Vertex; _vertfaces = new Dictionary(); for each (_local1 in faces) { _local2 = _local1.v0; if (_vertfaces[_local2] == null){ _vertfaces[_local2] = [_local1]; } else { _vertfaces[_local2].push(_local1); }; _local3 = _local1.v1; if (_vertfaces[_local3] == null){ _vertfaces[_local3] = [_local1]; } else { _vertfaces[_local3].push(_local1); }; _local4 = _local1.v2; if (_vertfaces[_local4] == null){ _vertfaces[_local4] = [_local1]; } else { _vertfaces[_local4].push(_local1); }; }; _vertfacesDirty = false; _vertnormalsDirty = true; } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function play(_arg1:AnimationSequence):void{ var _local2:Boolean; var _local3:String; if (!_animation){ _animation = new Animation(this); } else { _animation.sequence = []; }; _animation.fps = _arg1.fps; _animation.smooth = _arg1.smooth; _animation.loop = _arg1.loop; if (((!((_arg1.prefix == null))) && (!((_arg1.prefix == ""))))){ if (_animation.smooth){ _animation.interpolate(); }; for (_local3 in framenames) { if (_local3.indexOf(_arg1.prefix) == 0){ _local2 = true; _activePrefix = ((_activePrefix)!=_arg1.prefix) ? _arg1.prefix : _activePrefix; _animation.sequence.push(new AnimationFrame(framenames[_local3], ("" + parseInt(_local3.substring(_arg1.prefix.length))))); }; }; if (_local2){ _animation.sequence.sortOn("sort", Array.NUMERIC); frames[_frame].adjust(1); _animation.start(); } else { trace((("--------- \n--> unable to play animation: unvalid prefix [" + _arg1.prefix) + "]\n--------- ")); }; } else { trace("--------- \n--> unable to play animation: prefix is null \n--------- "); }; } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } public function removeOnMappingChange(_arg1:Function):void{ removeEventListener(ElementEvent.MAPPING_CHANGED, _arg1, false); } public function clone():Geometry{ var _local1:Geometry; var _local2:Face; var _local3:Segment; var _local4:int; var _local5:Frame; var _local6:String; var _local7:SkinVertex; var _local8:SkinController; var _local9:Face; var _local10:Segment; _local1 = new Geometry(); clonedvertices = new Dictionary(); cloneduvs = new Dictionary(); if (skinVertices){ clonedskinvertices = new Dictionary(true); clonedskincontrollers = new Dictionary(true); _local1.skinVertices = []; _local1.skinControllers = []; for each (_local7 in skinVertices) { _local1.skinVertices.push(cloneSkinVertex(_local7)); }; for each (_local8 in clonedskincontrollers) { _local1.skinControllers.push(_local8); }; }; for each (_local2 in _faces) { _local9 = new Face(cloneVertex(_local2._v0), cloneVertex(_local2._v1), cloneVertex(_local2._v2), _local2.material, cloneUV(_local2._uv0), cloneUV(_local2._uv1), cloneUV(_local2._uv2)); _local1.addFace(_local9); cloneElementDictionary[_local2] = _local9; }; for each (_local3 in _segments) { _local10 = new Segment(cloneVertex(_local3._v0), cloneVertex(_local3._v1), _local3.material); _local1.addSegment(_local10); cloneElementDictionary[_local3] = _local10; }; _local1.frames = new Dictionary(true); _local4 = 0; for each (_local5 in frames) { var _temp1 = _local4; _local4 = (_local4 + 1); var _local13 = _temp1; _local1.frames[_local13] = cloneFrame(_local5); }; _local1.framenames = new Dictionary(true); for (_local6 in framenames) { _local1.framenames[_local6] = framenames[_local6]; }; return (_local1); } public function get activePrefix():String{ return (_activePrefix); } private function cloneVertex(_arg1:Vertex):Vertex{ var _local2:Vertex; _local2 = clonedvertices[_arg1]; if (_local2 == null){ _local2 = _arg1.clone(); _local2.extra = ((_arg1.extra is IClonable)) ? (_arg1.extra as IClonable).clone() : _arg1.extra; clonedvertices[_arg1] = _local2; }; return (_local2); } public function quarterFaces():void{ var _local1:Dictionary; var _local2:Face; _quarterFacesTotal++; _local1 = new Dictionary(); for each (_local2 in _faces.concat([])) { quarterFace(_local2, _local1); }; } public function updateMaterials(_arg1:Object3D, _arg2:View3D):void{ var _local3:MaterialData; for each (_local3 in materialDictionary) { _local3.material.updateMaterial(_arg1, _arg2); }; } public function get frame():int{ return (_animation.frame); } private function onMappingChange(_arg1:ElementEvent):void{ dispatchEvent(_arg1); } public function invertFaces():void{ var _local1:Face; for each (_local1 in _faces) { _local1.invert(); }; } private function findVertNormals():void{ var _local1:Vertex; var _local2:Array; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Face; var _local7:Number3D; var _local8:Array; var _local9:Vertex; _vertnormals = new Dictionary(); for each (_local1 in vertices) { _local2 = _vertfaces[_local1]; _local3 = 0; _local4 = 0; _local5 = 0; for each (_local6 in _local2) { _fNormal = _local6.normal; _fVectors = []; _local8 = _local6.vertices; for each (_local9 in _local8) { if (_local9 != _local1){ _fVectors.push(new Number3D((_local9.x - _local1.x), (_local9.y - _local1.y), (_local9.z - _local1.z), true)); }; }; _fAngle = Math.acos((_fVectors[0] as Number3D).dot((_fVectors[1] as Number3D))); _local3 = (_local3 + (_fNormal.x * _fAngle)); _local4 = (_local4 + (_fNormal.y * _fAngle)); _local5 = (_local5 + (_fNormal.z * _fAngle)); }; _local7 = new Number3D(_local3, _local4, _local5); _local7.normalize(); _vertnormals[_local1] = _local7; }; _vertnormalsDirty = false; } private function updatePlaySequence(_arg1:AnimationEvent):void{ var _local2:int; _local2 = _animationgroup.playlist.length; if (_local2 == 0){ _animation.removeEventListener(AnimationEvent.SEQUENCE_UPDATE, updatePlaySequence); _animation.sequenceEvent = false; if (hasSequenceEvent){ if (_sequencedone == null){ _sequencedone = new AnimationEvent(AnimationEvent.SEQUENCE_DONE, null); }; dispatchEvent(_sequencedone); }; if (_animationgroup.loopLast){ _animation.start(); }; } else { if (_local2 == 1){ loop = _animationgroup.loopLast; _animationgroup.playlist[0].loop = _animationgroup.loopLast; }; play(_animationgroup.playlist.shift()); }; } public function removeOnDimensionsChange(_arg1:Function):void{ removeEventListener(GeometryEvent.DIMENSIONS_CHANGED, _arg1, false); } public function addOnDimensionsChange(_arg1:Function):void{ addEventListener(GeometryEvent.DIMENSIONS_CHANGED, _arg1, false, 0, true); } private function onMaterialUpdate(_arg1:MaterialEvent):void{ dispatchEvent(_arg1); } public function addOnCycle(_arg1:Function):void{ _animation.cycleEvent = true; _cycle = new AnimationEvent(AnimationEvent.CYCLE, _animation); _animation.addEventListener(AnimationEvent.CYCLE, _arg1, false, 0, false); } function get vertexDirty():Boolean{ var _local1:Boolean; var _local2:Vertex; _local1 = false; for each (_local2 in vertices) { if (_local2.getVertexDirty()){ _local1 = true; }; }; return (_local1); } public function splitFace(_arg1:Face, _arg2:int=0):void{ var _local3:Vertex; var _local4:Vertex; var _local5:Vertex; var _local6:UV; var _local7:UV; var _local8:UV; var _local9:Vertex; var _local10:UV; var _local11:ITriangleMaterial; _local3 = _arg1.v0; _local4 = _arg1.v1; _local5 = _arg1.v2; _local6 = _arg1.uv0; _local7 = _arg1.uv1; _local8 = _arg1.uv2; _local11 = _arg1.material; removeFace(_arg1); switch (_arg2){ case 0: _local9 = new Vertex(((_arg1.v0.x + _arg1.v1.x) * 0.5), ((_arg1.v0.y + _arg1.v1.y) * 0.5), ((_arg1.v0.z + _arg1.v1.z) * 0.5)); _local10 = new UV(((_local6.u + _local7.u) * 0.5), ((_local6.v + _local7.v) * 0.5)); addFace(new Face(_local9, _local4, _local5, _local11, _local10, _local7, _local8)); addFace(new Face(_local3, _local9, _local5, _local11, _local6, _local10, _local8)); break; case 1: _local9 = new Vertex(((_arg1.v1.x + _arg1.v2.x) * 0.5), ((_arg1.v1.y + _arg1.v2.y) * 0.5), ((_arg1.v1.z + _arg1.v2.z) * 0.5)); _local10 = new UV(((_local7.u + _local8.u) * 0.5), ((_local7.v + _local8.v) * 0.5)); addFace(new Face(_local3, _local4, _local9, _local11, _local6, _local7, _local10)); addFace(new Face(_local3, _local9, _local5, _local11, _local6, _local10, _local8)); break; default: _local9 = new Vertex(((_arg1.v2.x + _arg1.v0.x) * 0.5), ((_arg1.v2.y + _arg1.v0.y) * 0.5), ((_arg1.v2.z + _arg1.v0.z) * 0.5)); _local10 = new UV(((_local8.u + _local6.u) * 0.5), ((_local8.v + _local6.v) * 0.5)); addFace(new Face(_local3, _local4, _local9, _local11, _local6, _local7, _local10)); addFace(new Face(_local9, _local4, _local5, _local11, _local10, _local7, _local8)); }; } public function addOnSequenceDone(_arg1:Function):void{ addEventListener(AnimationEvent.SEQUENCE_DONE, _arg1, false, 0, false); } public function get loop():Boolean{ return (_animation.loop); } public function addFace(_arg1:Face):void{ addElement(_arg1); if (_arg1.material){ addMaterial(_arg1, _arg1.material); }; _vertfacesDirty = true; if (_arg1.v0){ _arg1.v0.geometry = this; }; if (_arg1.v1){ _arg1.v1.geometry = this; }; if (_arg1.v2){ _arg1.v2.geometry = this; }; _faces.push(_arg1); } private function cloneVertexPosition(_arg1:VertexPosition):VertexPosition{ var _local2:VertexPosition; _local2 = new VertexPosition(cloneVertex(_arg1.vertex)); _local2.x = _arg1.x; _local2.y = _arg1.y; _local2.z = _arg1.z; return (_local2); } private function cloneSkinController(_arg1:SkinController):SkinController{ var _local2:SkinController; _local2 = clonedskincontrollers[_arg1]; if (_local2 == null){ _local2 = new SkinController(); _local2.name = _arg1.name; _local2.bindMatrix = _arg1.bindMatrix; clonedskincontrollers[_arg1] = _local2; }; return (_local2); } public function get hasCycleEvent():Boolean{ return (_animation.hasEventListener(AnimationEvent.CYCLE)); } public function splitFaces(_arg1:int=0):void{ var _local2:Face; _arg1 = ((_arg1)<0) ? 0 : ((_arg1)>2) ? 2 : _arg1; for each (_local2 in _faces.concat([])) { splitFace(_local2, _arg1); }; } private function cloneSkinVertex(_arg1:SkinVertex):SkinVertex{ var _local2:SkinVertex; var _local3:Array; var _local4:SkinController; _local2 = clonedskinvertices[_arg1]; if (_local2 == null){ _local2 = new SkinVertex(cloneVertex(_arg1.skinnedVertex)); _local2.weights = _arg1.weights.concat(); _local3 = _arg1.controllers; for each (_local4 in _local3) { _local2.controllers.push(cloneSkinController(_local4)); }; clonedskinvertices[_arg1] = _local2; }; return (_local2); } public function addBillboard(_arg1:Billboard):void{ addElement(_arg1); if (_arg1.material){ addMaterial(_arg1, _arg1.material); }; _arg1.vertex.geometry = this; _billboards.push(_arg1); } public function get segments():Array{ return (_segments); } private function cloneUV(_arg1:UV):UV{ var _local2:UV; if (_arg1 == null){ return (null); }; _local2 = cloneduvs[_arg1]; if (_local2 == null){ _local2 = new UV(_arg1._u, _arg1._v); cloneduvs[_arg1] = _local2; }; return (_local2); } function removeMaterial(_arg1:Element, _arg2:IMaterial):void{ if ((_materialData = materialDictionary[_arg2])){ if ((_index = _materialData.elements.indexOf(_arg1)) != -1){ _materialData.elements.splice(_index, 1); }; if (!_materialData.elements.length){ delete materialDictionary[_arg2]; _arg2.removeOnMaterialUpdate(onMaterialUpdate); }; }; } public function updateVertex(_arg1:Vertex, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):void{ _arg1.setValue(_arg2, _arg3, _arg4); if (_arg5){ _vertnormalsDirty = true; }; } public function get smooth():Boolean{ return (_animation.smooth); } public function set fps(_arg1:int):void{ _animation.fps = ((_arg1)>=1) ? _arg1 : 1; } public function setPlaySequences(_arg1:Array, _arg2:Boolean=false):void{ var _local3:int; var _local4:int; _local3 = _arg1.length; if (_local3 == 0){ return; }; if (!_animation){ _animation = new Animation(this); }; _animationgroup = new AnimationGroup(); _animationgroup.loopLast = _arg2; _animationgroup.playlist = []; _local4 = 0; while (_local4 < _local3) { _animationgroup.playlist[_local4] = new AnimationSequence(_arg1[_local4].prefix, _arg1[_local4].smooth, true, _arg1[_local4].fps); _local4++; }; if (!_animation.hasEventListener(AnimationEvent.SEQUENCE_UPDATE)){ _animation.addEventListener(AnimationEvent.SEQUENCE_UPDATE, updatePlaySequence); }; _animation.sequenceEvent = true; loop = true; play(_animationgroup.playlist.shift()); } private function removeElement(_arg1:Element):void{ _verticesDirty = true; _arg1.removeOnVertexChange(onVertexChange); _arg1.removeOnVertexValueChange(onVertexValueChange); _arg1.notifyMappingChange(); _arg1.removeOnMappingChange(onMappingChange); notifyDimensionsChange(); } public function applyPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Vertex; for each (_local7 in vertices) { _local4 = _local7.x; _local5 = _local7.y; _local6 = _local7.z; _local7.setValue((_local4 - _arg1), (_local5 - _arg2), (_local6 - _arg3)); }; } public function set frame(_arg1:int):void{ if (_animation.frame == _arg1){ return; }; _frame = _arg1; _animation.frame = _arg1; frames[_arg1].adjust(1); } public function neighbour01(_arg1:Face):Face{ if (_neighboursDirty){ findNeighbours(); }; return (_neighbour01[_arg1]); } public function set smooth(_arg1:Boolean):void{ _animation.smooth = _arg1; } public function triFace(_arg1:Face):void{ var _local2:Vertex; var _local3:Vertex; var _local4:Vertex; var _local5:Vertex; var _local6:UV; var _local7:UV; var _local8:UV; var _local9:UV; var _local10:ITriangleMaterial; _local2 = _arg1.v0; _local3 = _arg1.v1; _local4 = _arg1.v2; _local5 = new Vertex((((_arg1.v0.x + _arg1.v1.x) + _arg1.v2.x) / 3), (((_arg1.v0.y + _arg1.v1.y) + _arg1.v2.y) / 3), (((_arg1.v0.z + _arg1.v1.z) + _arg1.v2.z) / 3)); _local6 = _arg1.uv0; _local7 = _arg1.uv1; _local8 = _arg1.uv2; _local9 = new UV((((_local6.u + _local7.u) + _local8.u) / 3), (((_local6.v + _local7.v) + _local8.v) / 3)); _local10 = _arg1.material; removeFace(_arg1); addFace(new Face(_local2, _local3, _local5, _local10, _local6, _local7, _local9)); addFace(new Face(_local5, _local3, _local4, _local10, _local9, _local7, _local8)); addFace(new Face(_local2, _local5, _local4, _local10, _local6, _local9, _local8)); } public function get faces():Array{ return (_faces); } public function get hasSequenceEvent():Boolean{ return (hasEventListener(AnimationEvent.SEQUENCE_DONE)); } function addMaterial(_arg1:Element, _arg2:IMaterial):void{ if (!(_materialData = materialDictionary[_arg2])){ _materialData = (materialDictionary[_arg2] = new MaterialData()); _materialData.material = _arg2; _arg2.addOnMaterialUpdate(onMaterialUpdate); }; if (_materialData.elements.indexOf(_arg1) == -1){ _materialData.elements.push(_arg1); }; } public function get fps():int{ return (_animation.fps); } public function triFaces():void{ var _local1:Face; for each (_local1 in _faces.concat([])) { triFace(_local1); }; } public function applyRotations(_arg1:Number, _arg2:Number, _arg3:Number):void{ 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; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Vertex; _local9 = (Math.PI / 180); _local10 = (_arg1 * _local9); _local11 = (_arg2 * _local9); _local12 = (_arg3 * _local9); _local13 = Math.sin(_local10); _local14 = Math.cos(_local10); _local15 = Math.sin(_local11); _local16 = Math.cos(_local11); _local17 = Math.sin(_local12); _local18 = Math.cos(_local12); for each (_local19 in vertices) { _local4 = _local19.x; _local5 = _local19.y; _local6 = _local19.z; _local8 = _local5; _local5 = ((_local8 * _local14) + (_local6 * -(_local13))); _local6 = ((_local8 * _local13) + (_local6 * _local14)); _local7 = _local4; _local4 = ((_local7 * _local16) + (_local6 * _local15)); _local6 = ((_local7 * -(_local15)) + (_local6 * _local16)); _local7 = _local4; _local4 = ((_local7 * _local18) + (_local5 * -(_local17))); _local5 = ((_local7 * _local17) + (_local5 * _local18)); updateVertex(_local19, _local4, _local5, _local6, false); }; } public function updateElements():void{ var _local1:SkinController; var _local2:SkinVertex; _dispatchedDimensionsChange = false; for each (_local1 in skinControllers) { _local1.update(); }; for each (_local2 in skinVertices) { _local2.update(); }; if (((!((_animation == null))) && (!((frames == null))))){ _animation.update(); }; if (vertexDirty){ notifyDimensionsChange(); }; } private function onVertexChange(_arg1:ElementEvent):void{ _verticesDirty = true; if ((_arg1.element is Face)){ (_arg1.element as Face).normalDirty = true; _vertfacesDirty = true; }; notifyDimensionsChange(); } public function get elements():Array{ return (_faces.concat(_segments, _billboards)); } public function get vertices():Array{ if (_verticesDirty){ _verticesDirty = false; _vertices.length = 0; indices.length = 0; commands.length = 0; startIndices.length = 0; faceVOs.length = 0; segmentVOs.length = 0; billboardVOs.length = 0; _processed = new Dictionary(true); for each (_element in elements) { if (((_element.visible) && ((_element.vertices.length > 0)))){ _element_vertices = _element.vertices; _element_commands = _element.commands; startIndices[startIndices.length] = indices.length; if ((_element is Face)){ _faceVO = (_element as Face).faceVO; faceVOs[faceVOs.length] = _faceVO; } else { if ((_element is Segment)){ _segmentVO = (_element as Segment).segmentVO; segmentVOs[segmentVOs.length] = _segmentVO; } else { if ((_element is Billboard)){ _billboardVO = (_element as Billboard).billboardVO; billboardVOs[billboardVOs.length] = _billboardVO; }; }; }; _index = 0; while (_index < _element_vertices.length) { _vertex = _element_vertices[_index]; if (!_processed[_vertex]){ _vertices[_vertices.length] = _vertex; indices[indices.length] = ((_processed[_vertex] = _vertices.length) - 1); } else { indices[indices.length] = (_processed[_vertex] - 1); }; commands[commands.length] = _element_commands[_index]; _index++; }; }; }; startIndices[startIndices.length] = indices.length; }; return (_vertices); } public function get quarterFacesTotal():int{ return (_quarterFacesTotal); } public function neighbour12(_arg1:Face):Face{ if (_neighboursDirty){ findNeighbours(); }; return (_neighbour12[_arg1]); } } }//package away3d.core.base
Section 28
//Graphics3D (away3d.core.base.Graphics3D) package away3d.core.base { import away3d.materials.*; public class Graphics3D { private var _currentMaterial:WireColorMaterial; private var _geometry:Geometry; private var _zOffset:Number;// = 0 private var _currentFace:Face; public function Graphics3D(){ _zOffset = 0; super(); } public function startNewShape():void{ _currentFace = new Face(); _currentFace.material = _currentMaterial; _geometry.addFace(_currentFace); } public function set geometry(_arg1:Geometry):void{ _geometry = _arg1; } public function curveTo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ _currentFace.curveTo(_arg1, -(_arg2), _zOffset, _arg3, -(_arg4), _zOffset); } public function beginFill(_arg1:int=-1, _arg2:Number=-1):void{ _currentMaterial = new WireColorMaterial(); _currentMaterial.wirealpha = 0; if (_arg1 != -1){ _currentMaterial.color = _arg1; }; if (_arg2 != -1){ _currentMaterial.alpha = _arg2; }; if (_currentFace){ _currentFace.material = _currentMaterial; }; } public function clear():void{ var _local1:Face; for each (_local1 in _geometry.faces) { _geometry.removeFace(_local1); }; } public function moveTo(_arg1:Number, _arg2:Number):void{ _currentFace.moveTo(_arg1, -(_arg2), _zOffset); } public function lineTo(_arg1:Number, _arg2:Number):void{ _currentFace.lineTo(_arg1, -(_arg2), _zOffset); } public function lineStyle(_arg1:Number=-1, _arg2:int=-1, _arg3:Number=-1):void{ } public function endFill():void{ } } }//package away3d.core.base
Section 29
//IAnimation (away3d.core.base.IAnimation) package away3d.core.base { public interface IAnimation { function update():void; } }//package away3d.core.base
Section 30
//IFrame (away3d.core.base.IFrame) package away3d.core.base { public interface IFrame { function adjust(_arg1:Number=1):void; } }//package away3d.core.base
Section 31
//Mesh (away3d.core.base.Mesh) package away3d.core.base { import away3d.containers.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import flash.utils.*; import away3d.events.*; import away3d.animators.data.*; import away3d.core.project.*; public class Mesh extends Object3D { public var outline:ISegmentMaterial; private var _faceMaterial:ITriangleMaterial; private var _material:IMaterial; private var _uvMaterial:IUVMaterial; private var _vertex:Vertex; public var indexes:Array; public var bothsides:Boolean; public var type:String;// = "mesh" private var _face:Face; private var _segmentMaterial:ISegmentMaterial; private var _billboardMaterial:IBillboardMaterial; public var url:String; private var _back:ITriangleMaterial; var _geometry:Geometry; public function Mesh(_arg1:Object=null){ type = "mesh"; super(_arg1); geometry = new Geometry(); outline = ini.getSegmentMaterial("outline"); material = ini.getMaterial("material"); faceMaterial = (((ini.getMaterial("faceMaterial") as ITriangleMaterial)) || (_faceMaterial)); segmentMaterial = (((ini.getMaterial("segmentMaterial") as ISegmentMaterial)) || (_segmentMaterial)); billboardMaterial = (((ini.getMaterial("billboardMaterial") as IBillboardMaterial)) || (_billboardMaterial)); back = (ini.getMaterial("back") as ITriangleMaterial); bothsides = ini.getBoolean("bothsides", false); projectorType = ProjectorType.MESH; } public function removeOnSequenceDone(_arg1:Function):void{ geometry.removeOnSequenceDone(_arg1); } public function removeSegment(_arg1:Segment):void{ _geometry.removeSegment(_arg1); } public function set transitionValue(_arg1:Number):void{ geometry.transitionValue = _arg1; } public function set material(_arg1:IMaterial):void{ if ((((_material == _arg1)) && (!((_material == null))))){ return; }; removeMaterial(_material); addMaterial((_material = _arg1)); if ((_material is ITriangleMaterial)){ _faceMaterial = (_material as ITriangleMaterial); } else { faceMaterial = new WireColorMaterial(); }; if ((_material is ISegmentMaterial)){ _segmentMaterial = (_material as ISegmentMaterial); } else { segmentMaterial = new WireframeMaterial(); }; if ((_material is IBillboardMaterial)){ _billboardMaterial = (_material as IBillboardMaterial); } else { billboardMaterial = new ColorMaterial(); }; _sessionDirty = true; } public function quarterFaces():void{ _geometry.quarterFaces(); } public function addOnCycle(_arg1:Function):void{ geometry.addOnCycle(_arg1); } public function get commands():Array{ return (_geometry.commands); } public function get geometry():Geometry{ return (_geometry); } private function onMaterialUpdate(_arg1:MaterialEvent):void{ _sessionDirty = true; } public function asXML():XML{ var result:XML; var refvertices:Dictionary; var verticeslist:Array; var remembervertex:Function; var refuvs:Dictionary; var uvslist:Array; var rememberuv:Function; var face:Face; var vn:int; var v:Vertex; var uvn:int; var uv:UV; var f:Face; result = <mesh></mesh> ; refvertices = new Dictionary(); verticeslist = []; remembervertex = function (_arg1:Vertex):void{ if (refvertices[_arg1] == null){ refvertices[_arg1] = verticeslist.length; verticeslist.push(_arg1); }; }; refuvs = new Dictionary(); uvslist = []; rememberuv = function (_arg1:UV):void{ if (_arg1 == null){ return; }; if (refuvs[_arg1] == null){ refuvs[_arg1] = uvslist.length; uvslist.push(_arg1); }; }; for each (face in _geometry.faces) { remembervertex(face._v0); remembervertex(face._v1); remembervertex(face._v2); rememberuv(face._uv0); rememberuv(face._uv1); rememberuv(face._uv2); }; vn = 0; for each (v in verticeslist) { result.appendChild(new XML((((((((("<vertex id=\"" + ??esc_xattr ) + "\" x=\"") + ??esc_xattr ) + "\" y=\"") + ??esc_xattr ) + "\" z=\"") + ??esc_xattr ) + "\"/>"))); vn = (vn + 1); }; uvn = 0; for each (uv in uvslist) { result.appendChild(new XML((((((("<uv id=\"" + ??esc_xattr ) + "\" u=\"") + ??esc_xattr ) + "\" v=\"") + ??esc_xattr ) + "\"/>"))); uvn = (uvn + 1); }; for each (f in _geometry.faces) { result.appendChild(new XML((((((((((((("<face v0=\"" + ??esc_xattr ) + "\" v1=\"") + ??esc_xattr ) + "\" v2=\"") + ??esc_xattr ) + "\" uv0=\"") + ??esc_xattr ) + "\" uv1=\"") + ??esc_xattr ) + "\" uv2=\"") + ??esc_xattr ) + "\"/>"))); }; return (result); } private function onMappingChange(_arg1:ElementEvent):void{ _sessionDirty = true; if ((_face = (_arg1.element as Face))){ if (_face.material){ _uvMaterial = (_face.material as IUVMaterial); } else { _uvMaterial = (_faceMaterial as IUVMaterial); }; if (_uvMaterial){ _uvMaterial.getFaceMaterialVO(_face.faceVO, this).invalidated = true; }; }; } public function addFace(_arg1:Face):void{ _geometry.addFace(_arg1); } public function triFace(_arg1:Face):void{ _geometry.triFace(_arg1); } override public function applyPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Number3D; _geometry.applyPosition(_arg1, _arg2, _arg3); _local4 = new Number3D(_arg1, _arg2, _arg3); new Number3D(_arg1, _arg2, _arg3).rotate(_local4, _transform); _local4.add(_local4, position); moveTo(_local4.x, _local4.y, _local4.z); } public function get faceMaterial():ITriangleMaterial{ return (_faceMaterial); } public function get segmentVOs():Array{ return (_geometry.segmentVOs); } public function gotoAndPlay(_arg1:int):void{ geometry.gotoAndPlay(_arg1); } public function get loop():Boolean{ return (geometry.loop); } public function splitFace(_arg1:Face, _arg2:int=0):void{ _geometry.splitFace(_arg1, _arg2); } public function get hasSequenceEvent():Boolean{ return (geometry.hasSequenceEvent); } public function set frame(_arg1:int):void{ geometry.frame = _arg1; } override public function applyRotations():void{ _geometry.applyRotations(rotationX, rotationY, rotationZ); rotationX = 0; rotationY = 0; rotationZ = 0; } private function addMaterial(_arg1:IMaterial):void{ if (!_arg1){ return; }; _arg1.addOnMaterialUpdate(onMaterialUpdate); } public function get startIndices():Array{ return (_geometry.startIndices); } public function get back():ITriangleMaterial{ return (_back); } public function set geometry(_arg1:Geometry):void{ if (_geometry == _arg1){ return; }; if (_geometry != null){ _geometry.removeOnMaterialUpdate(onMaterialUpdate); _geometry.removeOnMappingChange(onMappingChange); _geometry.removeOnDimensionsChange(onDimensionsChange); }; _geometry = _arg1; if (_geometry != null){ _geometry.addOnMaterialUpdate(onMaterialUpdate); _geometry.addOnMappingChange(onMappingChange); _geometry.addOnDimensionsChange(onDimensionsChange); }; } public function splitFaces(_arg1:int=0):void{ _geometry.splitFaces(_arg1); } public function get elements():Array{ return (_geometry.elements); } public function get fps():int{ return (geometry.fps); } public function playFrames(_arg1:Array, _arg2:uint, _arg3:Boolean=true, _arg4:Boolean=false):void{ geometry.playFrames(_arg1, _arg2, _arg3, _arg4); } public function setPlaySequences(_arg1:Array, _arg2:Boolean=false):void{ geometry.setPlaySequences(_arg1, _arg2); } public function triFaces():void{ _geometry.triFaces(); } public function removeFace(_arg1:Face):void{ _geometry.removeFace(_arg1); } public function cloneAll(_arg1:Object3D=null):Object3D{ var _local2:Mesh; _local2 = (((_arg1 as Mesh)) || (new Mesh())); super.clone(_local2); _local2.type = type; _local2.material = material; _local2.outline = outline; _local2.back = back; _local2.bothsides = bothsides; _local2.debugbb = debugbb; _local2.geometry = geometry.clone(); return (_local2); } public function get billboards():Array{ return (_geometry.billboards); } public function get transitionValue():Number{ return (geometry.transitionValue); } public function set segmentMaterial(_arg1:ISegmentMaterial):void{ if (_segmentMaterial == _arg1){ return; }; removeMaterial(_segmentMaterial); addMaterial((_segmentMaterial = _arg1)); } public function quarterFace(_arg1:Face):void{ _geometry.quarterFace(_arg1); } public function removeBillboard(_arg1:Billboard):void{ _geometry.removeBillboard(_arg1); } public function set billboardMaterial(_arg1:IBillboardMaterial):void{ if (_billboardMaterial == _arg1){ return; }; removeMaterial(_billboardMaterial); addMaterial((_billboardMaterial = _arg1)); } public function get material():IMaterial{ return (_material); } public function get isRunning():Boolean{ return (geometry.isRunning); } public function get activePrefix():String{ return (geometry.activePrefix); } public function set faceMaterial(_arg1:ITriangleMaterial):void{ if (_faceMaterial == _arg1){ return; }; removeMaterial(_faceMaterial); addMaterial((_faceMaterial = _arg1)); } public function play(_arg1:AnimationSequence):void{ geometry.play(_arg1); } public function set smooth(_arg1:Boolean):void{ geometry.smooth = _arg1; } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:Mesh; _local2 = (((_arg1 as Mesh)) || (new Mesh())); super.clone(_local2); _local2.type = type; _local2.material = material; _local2.outline = outline; _local2.back = back; _local2.bothsides = bothsides; _local2.debugbb = debugbb; _local2.geometry = geometry; return (_local2); } public function set loop(_arg1:Boolean):void{ geometry.loop = _arg1; } public function addSegment(_arg1:Segment):void{ _geometry.addSegment(_arg1); } public function updateMaterials(_arg1:Object3D, _arg2:View3D):void{ if (_material){ _material.updateMaterial(_arg1, _arg2); }; if (back){ back.updateMaterial(_arg1, _arg2); }; geometry.updateMaterials(_arg1, _arg2); } public function removeOnCycle(_arg1:Function):void{ geometry.removeOnCycle(_arg1); } public function get segmentMaterial():ISegmentMaterial{ return (_segmentMaterial); } public function get faceVOs():Array{ return (_geometry.faceVOs); } public function get billboardVOs():Array{ return (_geometry.billboardVOs); } override protected function updateDimensions():void{ var _local1:Array; var _local2:int; var _local3:Number; var _local4:Number; var _local5:Number3D; var _local6:Vertex; _local1 = geometry.vertices.concat(); _local2 = _local1.length; if (_local2){ if (_scaleX < 0){ _boundingScale = -(_scaleX); } else { _boundingScale = _scaleX; }; if ((((_scaleY < 0)) && ((_boundingScale < -(_scaleY))))){ _boundingScale = -(_scaleY); } else { if (_boundingScale < _scaleY){ _boundingScale = _scaleY; }; }; if ((((_scaleZ < 0)) && ((_boundingScale < -(_scaleZ))))){ _boundingScale = -(_scaleZ); } else { if (_boundingScale < _scaleZ){ _boundingScale = _scaleZ; }; }; _local3 = 0; _local5 = new Number3D(); for each (_local6 in _local1) { _local5.sub(_local6.position, _pivotPoint); _local4 = _local5.modulo2; if (_local3 < _local4){ _local3 = _local4; }; }; if (_local3){ _boundingRadius = Math.sqrt(_local3); } else { _boundingRadius = 0; }; _local1.sortOn("x", (Array.DESCENDING | Array.NUMERIC)); _maxX = _local1[0].x; _minX = _local1[(_local2 - 1)].x; _local1.sortOn("y", (Array.DESCENDING | Array.NUMERIC)); _maxY = _local1[0].y; _minY = _local1[(_local2 - 1)].y; _local1.sortOn("z", (Array.DESCENDING | Array.NUMERIC)); _maxZ = _local1[0].z; _minZ = _local1[(_local2 - 1)].z; }; super.updateDimensions(); } public function invertFaces():void{ _geometry.invertFaces(); } public function get frame():int{ return (geometry.frame); } public function addOnSequenceDone(_arg1:Function):void{ geometry.addOnSequenceDone(_arg1); } public function addBillboard(_arg1:Billboard):void{ _geometry.addBillboard(_arg1); } public function get indices():Array{ return (_geometry.indices); } public function get segments():Array{ return (_geometry.segments); } public function get hasCycleEvent():Boolean{ return (geometry.hasCycleEvent); } public function get smooth():Boolean{ return (geometry.smooth); } public function get faces():Array{ return (_geometry.faces); } public function get billboardMaterial():IBillboardMaterial{ return (_billboardMaterial); } public function gotoAndStop(_arg1:int):void{ geometry.gotoAndStop(_arg1); } private function removeMaterial(_arg1:IMaterial):void{ if (!_arg1){ return; }; _arg1.removeOnMaterialUpdate(onMaterialUpdate); } public function set back(_arg1:ITriangleMaterial):void{ if (_back == _arg1){ return; }; removeMaterial(_back); addMaterial((_back = _arg1)); } public function updateVertex(_arg1:Vertex, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):void{ _geometry.updateVertex(_arg1, _arg2, _arg3, _arg4, _arg5); } private function onDimensionsChange(_arg1:GeometryEvent):void{ _sessionDirty = true; notifyDimensionsChange(); } public function set fps(_arg1:int):void{ geometry.fps = _arg1; } public function asAS3Class(_arg1:String=null, _arg2:String="", _arg3:Boolean=false, _arg4:Boolean=false):String{ var importextra:String; var source:String; var refvertices:Dictionary; var verticeslist:Array; var remembervertex:Function; var refuvs:Dictionary; var uvslist:Array; var rememberuv:Function; var face:Face; var uv:UV; var v:Vertex; var myPattern:RegExp; var myPattern2:RegExp; var f:Face; var tmp:String; var ind:Array; var auv:Array; var i:int; var afn:Array; var avp:Array; var tmpnames:Array; var y:int; var framename:String; var fr:Frame; var classname = _arg1; var packagename = _arg2; var round = _arg3; var animated = _arg4; classname = ((((classname) || (name))) || ("Away3DObject")); importextra = (animated) ? "\timport flash.utils.Dictionary;\n" : ""; source = (((((("package " + packagename) + "\n{\n\timport away3d.core.base.*;\n\timport away3d.core.utils.*;\n") + importextra) + "\n\tpublic class ") + classname) + " extends Mesh\n\t{\n"); source = (source + "\t\tprivate var varr:Array = [];\n\t\tprivate var uvarr:Array = [];\n\t\tprivate var scaling:Number;\n"); if (animated){ source = (source + "\t\tprivate var fnarr:Array = [];\n\n"); source = (source + "\n\t\tprivate function v():void\n\t\t{\n"); source = (source + "\t\t\tfor(var i:int = 0;i<vcount;++i){\n\t\t\t\tvarr.push(new Vertex(0,0,0));\n\t\t\t}\n\t\t}\n\n"); } else { source = (source + "\n\t\tprivate function v(x:Number,y:Number,z:Number):void\n\t\t{\n"); source = (source + "\t\t\tvarr.push(new Vertex(x*scaling, y*scaling, z*scaling));\n\t\t}\n\n"); }; source = (source + "\t\tprivate function uv(u:Number,v:Number):void\n\t\t{\n"); source = (source + "\t\t\tuvarr.push(new UV(u,v));\n\t\t}\n\n"); source = (source + "\t\tprivate function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int, uvn2:int):void\n\t\t{\n"); source = (source + "\t\t\taddFace(new Face(varr[vn0],varr[vn1],varr[vn2], null, uvarr[uvn0],uvarr[uvn1],uvarr[uvn2]));\n\t\t}\n\n"); source = (source + (((("\t\tpublic function " + classname) + "(init:Object = null)\n\t\t{\n\t\t\tsuper(init);\n\t\t\tinit = Init.parse(init);\n\t\t\tscaling = init.getNumber(\"scaling\", 1);\n\t\t\tbuild();\n\t\t\ttype = \"") + classname) + "\";\n\t\t}\n\n")); source = (source + "\t\tprivate function build():void\n\t\t{\n"); refvertices = new Dictionary(); verticeslist = []; remembervertex = function (_arg1:Vertex):void{ if (refvertices[_arg1] == null){ refvertices[_arg1] = verticeslist.length; verticeslist.push(_arg1); }; }; refuvs = new Dictionary(); uvslist = []; rememberuv = function (_arg1:UV):void{ if (_arg1 == null){ return; }; if (refuvs[_arg1] == null){ refuvs[_arg1] = uvslist.length; uvslist.push(_arg1); }; }; for each (face in _geometry.faces) { remembervertex(face._v0); remembervertex(face._v1); remembervertex(face._v2); rememberuv(face._uv0); rememberuv(face._uv1); rememberuv(face._uv2); }; if (animated){ myPattern = new RegExp("vcount", "g"); source = source.replace(myPattern, verticeslist.length); source = (source + "\n\t\t\tv();\n\n"); } else { for each (v in verticeslist) { source = (source + (round) ? (((((("\t\t\tv(" + v._x.toFixed(4)) + ",") + v._y.toFixed(4)) + ",") + v._z.toFixed(4)) + ");\n") : (((((("\t\t\tv(" + v._x) + ",") + v._y) + ",") + v._z) + ");\n")); }; }; for each (uv in uvslist) { source = (source + (round) ? (((("\t\t\tuv(" + uv._u.toFixed(4)) + ",") + uv._v.toFixed(4)) + ");\n") : (((("\t\t\tuv(" + uv._u) + ",") + uv._v) + ");\n")); }; if (round){ myPattern2 = new RegExp(".0000", "g"); }; if (animated){ auv = []; for each (f in _geometry.faces) { auv.push((round) ? ((((refuvs[f._uv0].toFixed(4) + ",") + refuvs[f._uv1].toFixed(4)) + ",") + refuvs[f._uv2].toFixed(4)) : ((((refuvs[f._uv0] + ",") + refuvs[f._uv1]) + ",") + refuvs[f._uv2])); }; i = 0; while (i < indexes.length) { ind = indexes[i]; source = (source + (((((((("\t\t\tf(" + ind[0]) + ",") + ind[1]) + ",") + ind[2]) + ",") + auv[i]) + ");\n")); i = (i + 1); }; } else { for each (f in _geometry.faces) { source = (source + (((((((((((("\t\t\tf(" + refvertices[f._v0]) + ",") + refvertices[f._v1]) + ",") + refvertices[f._v2]) + ",") + refuvs[f._uv0]) + ",") + refuvs[f._uv1]) + ",") + refuvs[f._uv2]) + ");\n")); }; }; if (round){ source = source.replace(myPattern2, ""); }; if (animated){ afn = []; tmpnames = []; i = 0; y = 0; source = (source + "\n\t\t\tgeometry.frames = new Dictionary();\n"); source = (source + "\t\t\tgeometry.framenames = new Dictionary();\n"); source = (source + "\t\t\tvar oFrames:Object = {};\n"); myPattern = new RegExp(" ", "g"); for (framename in geometry.framenames) { tmpnames.push(framename); }; tmpnames.sort(); i = 0; while (i < tmpnames.length) { avp = []; fr = geometry.frames[geometry.framenames[tmpnames[i]]]; if (tmpnames[i].indexOf(" ") != -1){ tmpnames[i] = tmpnames[i].replace(myPattern, ""); }; afn.push((("\"" + tmpnames[i]) + "\"")); source = (source + (("\n\t\t\toFrames." + tmpnames[i]) + "=[")); y = 0; while (y < verticeslist.length) { if (round){ avp.push(fr.vertexpositions[y].x.toFixed(4)); avp.push(fr.vertexpositions[y].y.toFixed(4)); avp.push(fr.vertexpositions[y].z.toFixed(4)); } else { avp.push(fr.vertexpositions[y].x); avp.push(fr.vertexpositions[y].y); avp.push(fr.vertexpositions[y].z); }; y = (y + 1); }; if (round){ tmp = avp.toString(); tmp = tmp.replace(myPattern2, ""); source = (source + (tmp + "];\n")); } else { source = (source + (avp.toString() + "];\n")); }; i = (i + 1); }; source = (source + (("\n\t\t\tfnarr = [" + afn.toString()) + "];\n")); source = (source + "\n\t\t\tvar y:int;\n"); source = (source + "\t\t\tvar z:int;\n"); source = (source + "\t\t\tvar frame:Frame;\n"); source = (source + "\t\t\tfor(var i:int = 0;i<fnarr.length; ++i){\n"); source = (source + "\t\t\t\ttrace(\"[ \"+fnarr[i]+\" ]\");\n"); source = (source + "\t\t\t\tframe = new Frame();\n"); source = (source + "\t\t\t\tgeometry.framenames[fnarr[i]] = i;\n"); source = (source + "\t\t\t\tgeometry.frames[i] = frame;\n"); source = (source + "\t\t\t\tz=0;\n"); source = (source + "\t\t\t\tfor (y = 0; y < oFrames[fnarr[i]].length; y+=3){\n"); source = (source + "\t\t\t\t\tvar vp:VertexPosition = new VertexPosition(varr[z]);\n"); source = (source + "\t\t\t\t\tz++;\n"); source = (source + "\t\t\t\t\tvp.x = oFrames[fnarr[i]][y]*scaling;\n"); source = (source + "\t\t\t\t\tvp.y = oFrames[fnarr[i]][y+1]*scaling;\n"); source = (source + "\t\t\t\t\tvp.z = oFrames[fnarr[i]][y+2]*scaling;\n"); source = (source + "\t\t\t\t\tframe.vertexpositions.push(vp);\n"); source = (source + "\t\t\t\t}\n"); source = (source + "\t\t\t\tif (i == 0)\n"); source = (source + "\t\t\t\t\tframe.adjust();\n"); source = (source + "\t\t\t}\n"); }; source = (source + "\n\t\t}\n\t}\n}"); return (source); } public function get vertices():Array{ return (_geometry.vertices); } } }//package away3d.core.base
Section 32
//Object3D (away3d.core.base.Object3D) package away3d.core.base { import away3d.primitives.*; import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.light.*; import away3d.core.render.*; import away3d.loaders.utils.*; import away3d.events.*; import away3d.core.traverse.*; public class Object3D extends EventDispatcher implements IClonable { var _boundingScale:Number;// = 1 protected var _pivotPoint:Number3D; public var extra:Object; var _objectDirty:Boolean; private var _blendMode:String; public var projectorType:String; private var _renderer:IPrimitiveConsumer; private var _oldscene:Scene3D; private var _transformchanged:Object3DEvent; private var _dispatchedDimensionsChange:Boolean; private var _zAxis:Number3D; var _maxX:Number;// = 0 var _maxZ:Number;// = 0 var _maxY:Number;// = 0 public var center:Array; var _sceneTransform:Matrix3D; public var screenYOffset:Number; private var _vector:Number3D; private var _alpha:Number; private var _scenechanged:Object3DEvent; private var _pivotZero:Boolean; public var animationLibrary:AnimationLibrary; public var name:String; private var _lightarray:ILightConsumer; var _sceneTransformDirty:Boolean; var _mouseEnabled:Boolean;// = true private var _filters:Array; private var _quaternion:Quaternion; var _sessionDirty:Boolean; private var _yAxis:Number3D; private var _parentupdated:Object3DEvent; public var mouseEnabled:Boolean;// = true private var _rotationDirty:Boolean; private var _ownCanvas:Boolean; public var pushback:Boolean; private var _debugBoundingSphere:WireSphere; private var _rot:Number3D; var _rotationX:Number;// = 0 var _rotationY:Number;// = 0 var _rotationZ:Number;// = 0 var _minX:Number;// = 0 var _minY:Number;// = 0 var _minZ:Number;// = 0 private var _visible:Boolean; public var screenXOffset:Number; private var _xAxis:Number3D; private var _eulers:Number3D; public var pushfront:Boolean; var _localTransformDirty:Boolean; private var _scenetransformchanged:Object3DEvent; var _session:AbstractRenderSession; private var _sca:Number3D; var _lookingAtTarget:Number3D; var _scaleX:Number;// = 1 var _scaleY:Number;// = 1 var _scaleZ:Number;// = 1 var _boundingRadius:Number;// = 0 private var _sessionchanged:Object3DEvent; private var _sessionupdated:Object3DEvent; private var _debugBoundingBox:WireCube; var _scene:Scene3D; public var inverseSceneTransform:Matrix3D; public var useHandCursor:Boolean;// = false public var screenZOffset:Number; public var materialLibrary:MaterialLibrary; var _id:int; private var _ownLights:Boolean; var _dimensionsDirty:Boolean;// = false private var _dimensionschanged:Object3DEvent; private var _parent:ObjectContainer3D; private var _ownSession:AbstractRenderSession; public var debugbb:Boolean; private var _scenePivotPoint:Number3D; protected var ini:Init; var _transformDirty:Boolean; public var geometryLibrary:GeometryLibrary; public var debugbs:Boolean; var _transform:Matrix3D; private var _m:Matrix3D; private var _lightsDirty:Boolean; private static var toDEGREES:Number = 57.2957795130823; private static var toRADIANS:Number = 0.0174532925199433; public function Object3D(_arg1:Object=null):void{ _mouseEnabled = true; _transform = new Matrix3D(); _sceneTransform = new Matrix3D(); _dimensionsDirty = false; _boundingRadius = 0; _boundingScale = 1; _maxX = 0; _minX = 0; _maxY = 0; _minY = 0; _maxZ = 0; _minZ = 0; _lookingAtTarget = new Number3D(); _eulers = new Number3D(); _rotationX = 0; _rotationY = 0; _rotationZ = 0; _scaleX = 1; _scaleY = 1; _scaleZ = 1; _pivotPoint = new Number3D(); _scenePivotPoint = new Number3D(); _quaternion = new Quaternion(); _rot = new Number3D(); _sca = new Number3D(); _vector = new Number3D(); _m = new Matrix3D(); _xAxis = new Number3D(); _yAxis = new Number3D(); _zAxis = new Number3D(); inverseSceneTransform = new Matrix3D(); mouseEnabled = true; useHandCursor = false; center = [new Vertex()]; super(); ini = Init.parse(_arg1); name = ini.getString("name", name); ownSession = (ini.getObject("ownSession", AbstractRenderSession) as AbstractRenderSession); ownCanvas = ini.getBoolean("ownCanvas", ownCanvas); ownLights = ini.getBoolean("ownLights", false); visible = ini.getBoolean("visible", true); mouseEnabled = ini.getBoolean("mouseEnabled", mouseEnabled); useHandCursor = ini.getBoolean("useHandCursor", useHandCursor); renderer = (ini.getObject("renderer", IPrimitiveConsumer) as IPrimitiveConsumer); filters = ini.getArray("filters"); alpha = ini.getNumber("alpha", 1); blendMode = ini.getString("blendMode", BlendMode.NORMAL); debugbb = ini.getBoolean("debugbb", false); debugbs = ini.getBoolean("debugbs", false); pushback = ini.getBoolean("pushback", false); pushfront = ini.getBoolean("pushfront", false); screenXOffset = ini.getNumber("screenXOffset", 0); screenYOffset = ini.getNumber("screenYOffset", 0); screenZOffset = ini.getNumber("screenZOffset", 0); x = ini.getNumber("x", 0); y = ini.getNumber("y", 0); z = ini.getNumber("z", 0); rotationX = ini.getNumber("rotationX", 0); rotationY = ini.getNumber("rotationY", 0); rotationZ = ini.getNumber("rotationZ", 0); pivotPoint = ((ini.getNumber3D("pivotPoint")) || (new Number3D())); extra = ini.getObject("extra"); scale(ini.getNumber("scale", 1)); if ((this is Scene3D)){ _scene = (this as Scene3D); } else { parent = (ini.getObject3D("parent") as ObjectContainer3D); }; } public function get pivotZero():Boolean{ return (_pivotZero); } public function moveDown(_arg1:Number):void{ translate(Number3D.DOWN, _arg1); } public function get scenePivotPoint():Number3D{ if (_sceneTransformDirty){ updateSceneTransform(); }; return (_scenePivotPoint); } public function get eulers():Number3D{ if (_rotationDirty){ updateRotation(); }; _eulers.x = (_rotationX * toDEGREES); _eulers.y = (_rotationY * toDEGREES); _eulers.z = (_rotationZ * toDEGREES); return (_eulers); } private function onParentSceneChange(_arg1:Object3DEvent):void{ if (_scene){ _scene.clearId(_id); }; _scene = _parent.scene; if (_scene){ _scene.setId(this); }; notifySceneChange(); } function notifySessionUpdate():void{ if (_scene){ _scene.updatedSessions[_session] = _session; }; if (!hasEventListener(Object3DEvent.SESSION_UPDATED)){ return; }; if (!_sessionupdated){ _sessionupdated = new Object3DEvent(Object3DEvent.SESSION_UPDATED, this); }; dispatchEvent(_sessionupdated); } public function get ownSession():AbstractRenderSession{ return (_ownSession); } public function removeOnTransformChange(_arg1:Function):void{ removeEventListener(Object3DEvent.TRANSFORM_CHANGED, _arg1, false); } public function moveTo(_arg1:Number, _arg2:Number, _arg3:Number):void{ if ((((((_transform.tx == _arg1)) && ((_transform.ty == _arg2)))) && ((_transform.tz == _arg3)))){ return; }; _transform.tx = _arg1; _transform.ty = _arg2; _transform.tz = _arg3; _localTransformDirty = true; _sceneTransformDirty = true; } private function updateLights():void{ if (!_ownLights){ _lightarray = parent.lightarray; } else { _lightarray = new LightArray(); }; _lightsDirty = false; } public function removeOnSceneTransformChange(_arg1:Function):void{ removeEventListener(Object3DEvent.SCENETRANSFORM_CHANGED, _arg1, false); } public function get minZ():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_minZ); } public function get scaleZ():Number{ return (_scaleZ); } public function set position(_arg1:Number3D):void{ _transform.tx = _arg1.x; _transform.ty = _arg1.y; _transform.tz = _arg1.z; _sceneTransformDirty = true; _localTransformDirty = true; } public function get minY():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_minY); } public function get sceneTransform():Matrix3D{ if ((((_scene == null)) || ((_scene == this)))){ if (_transformDirty){ _sceneTransformDirty = true; }; if (_sceneTransformDirty){ notifySceneTransformChange(); }; return (transform); }; if (_transformDirty){ updateTransform(); }; if (_sceneTransformDirty){ updateSceneTransform(); }; if (_localTransformDirty){ notifyTransformChange(); }; return (_sceneTransform); } function notifySceneChange():void{ _sceneTransformDirty = true; if (!hasEventListener(Object3DEvent.SCENE_CHANGED)){ return; }; if (!_scenechanged){ _scenechanged = new Object3DEvent(Object3DEvent.SCENE_CHANGED, this); }; dispatchEvent(_scenechanged); } public function get minX():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_minX); } public function set eulers(_arg1:Number3D):void{ _rotationX = (_arg1.x * toRADIANS); _rotationY = (_arg1.y * toRADIANS); _rotationZ = (_arg1.z * toRADIANS); _transformDirty = true; } public function moveUp(_arg1:Number):void{ translate(Number3D.UP, _arg1); } public function set ownSession(_arg1:AbstractRenderSession):void{ if (_ownSession == _arg1){ return; }; if (_ownSession){ if (((_parent) && (_parent.session))){ _parent.session.removeChildSession(_ownSession); }; _ownSession.clearChildSessions(); _ownSession.renderer = null; _ownSession.internalRemoveOwnSession(this); _ownSession.removeOnSessionUpdate(onSessionUpdate); } else { if (((_parent) && (_parent.session))){ _parent.session.internalRemoveOwnSession(this); }; }; _ownSession = _arg1; if (_ownSession){ if (((_parent) && (_parent.session))){ _parent.session.addChildSession(_ownSession); }; _ownSession.clearChildSessions(); _ownSession.renderer = _renderer; _ownSession.filters = _filters; _ownSession.alpha = _alpha; _ownSession.blendMode = _blendMode; _ownSession.internalAddOwnSession(this); _ownSession.addOnSessionUpdate(onSessionUpdate); } else { if ((this is Scene3D)){ throw (new Error("Scene cannot have ownSession set to null")); }; if (((_parent) && (_parent.session))){ _parent.session.internalAddOwnSession(this); }; }; if (_ownSession){ _ownCanvas = true; } else { _ownCanvas = false; }; notifySessionChange(); } override public function toString():String{ return ((((((((name) ? name : "$" + ": x:") + Math.round(x)) + " y:") + Math.round(y)) + " z:") + Math.round(z))); } public function get pivotPoint():Number3D{ return (_pivotPoint); } public function yaw(_arg1:Number):void{ rotate(Number3D.UP, _arg1); } public function get scaleX():Number{ return (_scaleX); } public function get scaleY():Number{ return (_scaleY); } public function get visible():Boolean{ return (_visible); } public function addOnDimensionsChange(_arg1:Function):void{ addEventListener(Object3DEvent.DIMENSIONS_CHANGED, _arg1, false, 0, true); } public function addOnMouseDown(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false, 0, false); } public function get y():Number{ return (_transform.ty); } public function get z():Number{ return (_transform.tz); } public function roll(_arg1:Number):void{ rotate(Number3D.FORWARD, _arg1); } public function get ownCanvas():Boolean{ return (_ownCanvas); } public function get x():Number{ return (_transform.tx); } public function set ownLights(_arg1:Boolean):void{ _ownLights = _arg1; _lightsDirty = true; } public function get scene():Scene3D{ return (_scene); } public function removeOnRollOut(_arg1:Function):void{ removeEventListener(MouseEvent3D.ROLL_OUT, _arg1, false); } public function addOnSceneTransformChange(_arg1:Function):void{ addEventListener(Object3DEvent.SCENETRANSFORM_CHANGED, _arg1, false, 0, true); } public function addOnParentUpdate(_arg1:Function):void{ addEventListener(Object3DEvent.PARENT_UPDATED, _arg1, false, 0, true); } public function get session():AbstractRenderSession{ return (_session); } public function addOnMouseOver(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false, 0, false); } public function get rotationY():Number{ if (_rotationDirty){ updateRotation(); }; return ((_rotationY * toDEGREES)); } public function get rotationZ():Number{ if (_rotationDirty){ updateRotation(); }; return ((_rotationZ * toDEGREES)); } public function get parentBoundingRadius():Number{ return ((boundingRadius * _boundingScale)); } public function get rotationX():Number{ if (_rotationDirty){ updateRotation(); }; return ((_rotationX * toDEGREES)); } protected function updateTransform():void{ if (_rotationDirty){ updateRotation(); }; _quaternion.euler2quaternion(_rotationY, _rotationZ, -(_rotationX)); _transform.quaternion2matrix(_quaternion); _transform.scale(_transform, _scaleX, _scaleY, _scaleZ); _transformDirty = false; _sceneTransformDirty = true; _localTransformDirty = true; } public function set scaleY(_arg1:Number):void{ if (_scaleY == _arg1){ return; }; _scaleY = _arg1; _transformDirty = true; _dimensionsDirty = true; } public function set scaleZ(_arg1:Number):void{ if (_scaleZ == _arg1){ return; }; _scaleZ = _arg1; _transformDirty = true; _dimensionsDirty = true; } public function set scaleX(_arg1:Number):void{ if (_scaleX == _arg1){ return; }; _scaleX = _arg1; _transformDirty = true; _dimensionsDirty = true; } public function applyPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{ throw (new Error("Not implemented in Object3D - Use Mesh or ObjectContainer3D")); } public function get renderer():IPrimitiveConsumer{ return (_renderer); } private function changeSession():void{ if (_ownSession){ _session = _ownSession; } else { if (_parent){ _session = _parent.session; } else { _session = null; }; }; _sessionDirty = true; } public function get objectDepth():Number{ if (_dimensionsDirty){ updateDimensions(); }; return ((_maxZ - _minZ)); } public function get parent():ObjectContainer3D{ return (_parent); } public function removeOnMouseDown(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false); } public function set alpha(_arg1:Number):void{ if (_alpha == _arg1){ return; }; _alpha = _arg1; if (_ownSession){ _ownSession.alpha = _alpha; }; } public function removeOnMouseOver(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false); } public function set transform(_arg1:Matrix3D):void{ if (_transform.compare(_arg1)){ return; }; _transform.clone(_arg1); _transformDirty = false; _rotationDirty = true; _sceneTransformDirty = true; _localTransformDirty = true; _sca.matrix2scale(_transform); if (((((!((_scaleX == _sca.x))) || (!((_scaleY == _sca.y))))) || (!((_scaleZ == _sca.z))))){ _scaleX = _sca.x; _scaleY = _sca.y; _scaleZ = _sca.z; _dimensionsDirty = true; }; } public function moveBackward(_arg1:Number):void{ translate(Number3D.BACKWARD, _arg1); } public function set visible(_arg1:Boolean):void{ if (_visible == _arg1){ return; }; _visible = _arg1; _sessionDirty = true; notifyParentUpdate(); } public function applyRotations():void{ throw (new Error("Not implemented in Object3D - Use Mesh or ObjectContainer3D")); } public function addOnMouseOut(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false, 0, false); } public function set pivotPoint(_arg1:Number3D):void{ _pivotPoint.clone(_arg1); _pivotZero = ((((!(_pivotPoint.x)) && (!(_pivotPoint.y)))) && (!(_pivotPoint.z))); _sceneTransformDirty = true; _dimensionsDirty = true; notifyParentUpdate(); } public function moveRight(_arg1:Number):void{ translate(Number3D.RIGHT, _arg1); } public function set x(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(x)")); }; if (_transform.tx == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("x == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("x == -Infinity"); }; _transform.tx = _arg1; _sceneTransformDirty = true; _localTransformDirty = true; } public function movePivot(_arg1:Number, _arg2:Number, _arg3:Number):void{ _pivotPoint.x = _arg1; _pivotPoint.y = _arg2; _pivotPoint.z = _arg3; _pivotZero = ((((!(_arg1)) && (!(_arg2)))) && (!(_arg3))); _sceneTransformDirty = true; _dimensionsDirty = true; notifyParentUpdate(); } public function set y(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(y)")); }; if (_transform.ty == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("y == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("y == -Infinity"); }; _transform.ty = _arg1; _sceneTransformDirty = true; _localTransformDirty = true; } function notifySceneTransformChange():void{ _sceneTransformDirty = false; _objectDirty = true; if (!hasEventListener(Object3DEvent.SCENETRANSFORM_CHANGED)){ return; }; if (!_scenetransformchanged){ _scenetransformchanged = new Object3DEvent(Object3DEvent.SCENETRANSFORM_CHANGED, this); }; dispatchEvent(_scenetransformchanged); } public function set ownCanvas(_arg1:Boolean):void{ if (_ownCanvas == _arg1){ return; }; if (_arg1){ ownSession = new SpriteRenderSession(); } else { if ((this is Scene3D)){ throw (new Error("Scene cannot have ownCanvas set to false")); }; ownSession = null; }; } private function onParentSessionChange(_arg1:Object3DEvent):void{ if (((_ownSession) && (_arg1.object.parent))){ _arg1.object.parent.session.removeChildSession(_ownSession); }; if (((_ownSession) && (_parent.session))){ _parent.session.addChildSession(_ownSession); }; if (((!(_ownSession)) && (!((_session == _parent.session))))){ changeSession(); dispatchEvent(_arg1); }; } public function addOnSceneChange(_arg1:Function):void{ addEventListener(Object3DEvent.SCENE_CHANGED, _arg1, false, 0, true); } public function set z(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(z)")); }; if (_transform.tz == _arg1){ return; }; if (_arg1 == Infinity){ Debug.warning("z == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("z == -Infinity"); }; _transform.tz = _arg1; _sceneTransformDirty = true; _localTransformDirty = true; } public function get lightarray():ILightConsumer{ if (_lightsDirty){ updateLights(); }; return (_lightarray); } public function removeOnMouseOut(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false); } public function addOnRollOut(_arg1:Function):void{ addEventListener(MouseEvent3D.ROLL_OUT, _arg1, false, 0, false); } function dispatchMouseEvent(_arg1:MouseEvent3D):Boolean{ if (!hasEventListener(_arg1.type)){ return (false); }; dispatchEvent(_arg1); return (true); } function notifySessionChange():void{ changeSession(); if (!hasEventListener(Object3DEvent.SESSION_CHANGED)){ return; }; if (!_sessionchanged){ _sessionchanged = new Object3DEvent(Object3DEvent.SESSION_CHANGED, this); }; dispatchEvent(_sessionchanged); } public function get parentmaxX():Number{ return (((boundingRadius * _boundingScale) + _transform.tx)); } public function get parentmaxY():Number{ return (((boundingRadius * _boundingScale) + _transform.ty)); } public function get parentmaxZ():Number{ return (((boundingRadius * _boundingScale) + _transform.tz)); } public function get id():int{ return (_id); } public function removeOnSessionChange(_arg1:Function):void{ removeEventListener(Object3DEvent.SESSION_CHANGED, _arg1, false); } public function get position():Number3D{ return (transform.position); } public function removeOnMouseUp(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_UP, _arg1, false); } public function lookAt(_arg1:Number3D, _arg2:Number3D=null):void{ _lookingAtTarget = _arg1; _zAxis.sub(_arg1, position); _zAxis.normalize(); if ((((_zAxis.modulo > 0.1)) && (((((!((_zAxis.x == _transform.sxz))) || (!((_zAxis.y == _transform.syz))))) || (!((_zAxis.z == _transform.szz))))))){ _xAxis.cross(_zAxis, ((_arg2) || (Number3D.UP))); if (!_xAxis.modulo2){ _xAxis.cross(_zAxis, Number3D.BACKWARD); }; _xAxis.normalize(); _yAxis.cross(_zAxis, _xAxis); _yAxis.normalize(); _transform.sxx = (_xAxis.x * _scaleX); _transform.syx = (_xAxis.y * _scaleX); _transform.szx = (_xAxis.z * _scaleX); _transform.sxy = (-(_yAxis.x) * _scaleY); _transform.syy = (-(_yAxis.y) * _scaleY); _transform.szy = (-(_yAxis.z) * _scaleY); _transform.sxz = (_zAxis.x * _scaleZ); _transform.syz = (_zAxis.y * _scaleZ); _transform.szz = (_zAxis.z * _scaleZ); _transformDirty = false; _rotationDirty = true; _sceneTransformDirty = true; _localTransformDirty = true; }; } public function get debugBoundingBox():WireCube{ if (((_dimensionsDirty) || (!(_debugBoundingBox)))){ updateDimensions(); }; return (_debugBoundingBox); } public function set rotationY(_arg1:Number):void{ if (rotationY == _arg1){ return; }; _rotationY = (_arg1 * toRADIANS); _transformDirty = true; } public function set rotationX(_arg1:Number):void{ if (rotationX == _arg1){ return; }; _rotationX = (_arg1 * toRADIANS); _transformDirty = true; } public function rotateTo(_arg1:Number, _arg2:Number, _arg3:Number):void{ _rotationX = (_arg1 * toRADIANS); _rotationY = (_arg2 * toRADIANS); _rotationZ = (_arg3 * toRADIANS); _rotationDirty = false; _transformDirty = true; } public function set rotationZ(_arg1:Number):void{ if (rotationZ == _arg1){ return; }; _rotationZ = (_arg1 * toRADIANS); _transformDirty = true; } public function set blendMode(_arg1:String):void{ if (_blendMode == _arg1){ return; }; _blendMode = _arg1; if (_ownSession){ _ownSession.blendMode = _blendMode; }; } public function centerPivot():void{ var _local1:Number3D; _local1 = new Number3D(((maxX + minX) / 2), ((maxY + minY) / 2), ((maxZ + minZ) / 2)); movePivot(_local1.x, _local1.y, _local1.z); _local1.transform(_local1, transform); moveTo((x + _local1.x), (y + _local1.y), (z + _local1.z)); } public function get ownLights():Boolean{ return (_ownLights); } public function removeOnParentUpdate(_arg1:Function):void{ removeEventListener(Object3DEvent.PARENT_UPDATED, _arg1, false); } function notifyDimensionsChange():void{ _dimensionsDirty = true; if (((_dispatchedDimensionsChange) || (!(hasEventListener(Object3DEvent.DIMENSIONS_CHANGED))))){ return; }; if (!_dimensionschanged){ _dimensionschanged = new Object3DEvent(Object3DEvent.DIMENSIONS_CHANGED, this); }; dispatchEvent(_dimensionschanged); _dispatchedDimensionsChange = true; } public function pitch(_arg1:Number):void{ rotate(Number3D.RIGHT, _arg1); } public function get objectHeight():Number{ if (_dimensionsDirty){ updateDimensions(); }; return ((_maxY - _minY)); } public function translate(_arg1:Number3D, _arg2:Number):void{ _arg1.normalize(); _vector.rotate(_arg1, transform); x = (x + (_arg2 * _vector.x)); y = (y + (_arg2 * _vector.y)); z = (z + (_arg2 * _vector.z)); } public function distanceTo(_arg1:Object3D):Number{ var _local2:Matrix3D; var _local3:Matrix3D; var _local4:Number; var _local5:Number; var _local6:Number; _local2 = ((_scene == this)) ? transform : sceneTransform; _local3 = ((_arg1.scene == _arg1)) ? _arg1.transform : _arg1.sceneTransform; _local4 = (_local2.tx - _local3.tx); _local5 = (_local2.ty - _local3.ty); _local6 = (_local2.tz - _local3.tz); return (Math.sqrt((((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6)))); } public function set parent(_arg1:ObjectContainer3D):void{ if ((this is Scene3D)){ throw (new Error("Scene cannot be parented")); }; if (_arg1 == _parent){ return; }; _oldscene = _scene; if (_parent != null){ _parent.removeOnParentUpdate(onParentUpdate); _parent.removeOnSessionChange(onParentSessionChange); _parent.removeOnSceneChange(onParentSceneChange); _parent.removeOnSceneTransformChange(onParentTransformChange); _parent.internalRemoveChild(this); if (((_ownSession) && (_parent.session))){ _parent.session.removeChildSession(_ownSession); }; }; _parent = _arg1; _scene = (_parent) ? _parent.scene : null; if (_parent != null){ _parent.internalAddChild(this); _parent.addOnParentUpdate(onParentUpdate); _parent.addOnSessionChange(onParentSessionChange); _parent.addOnSceneChange(onParentSceneChange); _parent.addOnSceneTransformChange(onParentTransformChange); if (((_ownSession) && (_parent.session))){ _parent.session.addChildSession(_ownSession); }; }; if (_scene != _oldscene){ if (_oldscene){ _oldscene.clearId(_id); }; if (_scene){ _scene.setId(this); }; notifySceneChange(); }; if (((!(_ownSession)) && (((!(_parent)) || (!((_session == _parent.session))))))){ notifySessionChange(); }; _sceneTransformDirty = true; _localTransformDirty = true; } public function get boundingRadius():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_boundingRadius); } public function rotate(_arg1:Number3D, _arg2:Number):void{ _arg1.normalize(); _m.rotationMatrix(_arg1.x, _arg1.y, _arg1.z, (_arg2 * toRADIANS)); _transform.multiply3x3(transform, _m); _rotationDirty = true; _sceneTransformDirty = true; _localTransformDirty = true; } public function clone(_arg1:Object3D=null):Object3D{ var _local2:Object3D; _local2 = ((_arg1) || (new Object3D())); _local2.transform = transform; _local2.name = name; _local2.ownCanvas = _ownCanvas; _local2.renderer = _renderer; _local2.filters = _filters.concat(); _local2.blendMode = blendMode; _local2.alpha = _alpha; _local2.visible = visible; _local2.mouseEnabled = mouseEnabled; _local2.useHandCursor = useHandCursor; _local2.pushback = pushback; _local2.pushfront = pushfront; _local2.screenZOffset = screenZOffset; _local2.pivotPoint = pivotPoint; _local2.projectorType = projectorType; _local2.extra = ((extra is IClonable)) ? (extra as IClonable).clone() : extra; return (_local2); } public function get alpha():Number{ return (_alpha); } private function onSessionUpdate(_arg1:SessionEvent):void{ if ((_arg1.target is BitmapRenderSession)){ _scene.updatedSessions[_arg1.target] = _arg1.target; }; } public function scale(_arg1:Number):void{ _scaleX = (_scaleY = (_scaleZ = _arg1)); _transformDirty = true; _dimensionsDirty = true; } private function updateRotation():void{ _rot.matrix2euler(_transform); _rotationX = _rot.x; _rotationY = _rot.y; _rotationZ = _rot.z; _rotationDirty = false; } private function updateSceneTransform():void{ _sceneTransform.multiply(_parent.sceneTransform, transform); if (!_pivotZero){ _scenePivotPoint.rotate(_pivotPoint, _sceneTransform); _sceneTransform.tx = (_sceneTransform.tx - _scenePivotPoint.x); _sceneTransform.ty = (_sceneTransform.ty - _scenePivotPoint.y); _sceneTransform.tz = (_sceneTransform.tz - _scenePivotPoint.z); }; inverseSceneTransform.inverse(_sceneTransform); notifySceneTransformChange(); } public function get transform():Matrix3D{ if (_transformDirty){ updateTransform(); }; return (_transform); } public function addOnRollOver(_arg1:Function):void{ addEventListener(MouseEvent3D.ROLL_OVER, _arg1, false, 0, false); } public function traverse(_arg1:Traverser):void{ if (_arg1.match(this)){ _arg1.enter(this); _arg1.apply(this); _arg1.leave(this); }; } public function updateObject():void{ if (_objectDirty){ _scene.updatedObjects[this] = this; _objectDirty = false; _sessionDirty = true; }; } public function get maxX():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_maxX); } public function get maxY():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_maxY); } public function addOnSessionChange(_arg1:Function):void{ addEventListener(Object3DEvent.SESSION_CHANGED, _arg1, false, 0, true); } public function moveLeft(_arg1:Number):void{ translate(Number3D.LEFT, _arg1); } public function removeOnDimensionsChange(_arg1:Function):void{ removeEventListener(Object3DEvent.DIMENSIONS_CHANGED, _arg1, false); } protected function updateDimensions():void{ _dimensionsDirty = false; _dispatchedDimensionsChange = false; if (debugbb){ if (!_debugBoundingBox){ _debugBoundingBox = new WireCube({material:"#333333"}); _scene.setId(_debugBoundingBox); }; if (_boundingRadius){ _debugBoundingBox.visible = true; _debugBoundingBox.v000.setValue(_minX, _minY, _minZ); _debugBoundingBox.v100.setValue(_maxX, _minY, _minZ); _debugBoundingBox.v010.setValue(_minX, _maxY, _minZ); _debugBoundingBox.v110.setValue(_maxX, _maxY, _minZ); _debugBoundingBox.v001.setValue(_minX, _minY, _maxZ); _debugBoundingBox.v101.setValue(_maxX, _minY, _maxZ); _debugBoundingBox.v011.setValue(_minX, _maxY, _maxZ); _debugBoundingBox.v111.setValue(_maxX, _maxY, _maxZ); } else { debugBoundingBox.visible = false; }; }; if (debugbs){ if (!_debugBoundingSphere){ _debugBoundingSphere = new WireSphere({material:"#cyan", segmentsW:16, segmentsH:12}); _scene.setId(_debugBoundingSphere); }; if (_boundingRadius){ _debugBoundingSphere.visible = true; _debugBoundingSphere.radius = _boundingRadius; _debugBoundingSphere.updateObject(); _debugBoundingSphere.applyPosition(-(_pivotPoint.x), -(_pivotPoint.y), -(_pivotPoint.z)); } else { debugBoundingSphere.visible = false; }; }; } public function set renderer(_arg1:IPrimitiveConsumer):void{ if (_renderer == _arg1){ return; }; _renderer = _arg1; if (_ownSession){ _ownSession.renderer = _renderer; }; _sessionDirty = true; } public function addOnMouseMove(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false, 0, false); } public function get maxZ():Number{ if (_dimensionsDirty){ updateDimensions(); }; return (_maxZ); } private function onParentUpdate(_arg1:Object3DEvent):void{ _sessionDirty = true; dispatchEvent(_arg1); } private function onParentTransformChange(_arg1:Object3DEvent):void{ _sceneTransformDirty = true; } public function updateSession():void{ if (_sessionDirty){ notifySessionUpdate(); _sessionDirty = false; }; } public function tick(_arg1:int):void{ } public function addOnMouseUp(_arg1:Function):void{ addEventListener(MouseEvent3D.MOUSE_UP, _arg1, false, 0, false); } public function get lookingAtTarget():Number3D{ return (_lookingAtTarget); } public function get blendMode():String{ return (_blendMode); } function notifyTransformChange():void{ _localTransformDirty = false; if (!hasEventListener(Object3DEvent.TRANSFORM_CHANGED)){ return; }; if (!_transformchanged){ _transformchanged = new Object3DEvent(Object3DEvent.TRANSFORM_CHANGED, this); }; dispatchEvent(_transformchanged); } public function moveForward(_arg1:Number):void{ translate(Number3D.FORWARD, _arg1); } public function addOnTransformChange(_arg1:Function):void{ addEventListener(Object3DEvent.TRANSFORM_CHANGED, _arg1, false, 0, true); } public function removeOnRollOver(_arg1:Function):void{ removeEventListener(MouseEvent3D.ROLL_OVER, _arg1, false); } public function get objectWidth():Number{ if (_dimensionsDirty){ updateDimensions(); }; return ((_maxX - _minX)); } public function get debugBoundingSphere():WireSphere{ if (((_dimensionsDirty) || (!(_debugBoundingSphere)))){ updateDimensions(); }; return (_debugBoundingSphere); } public function get scenePosition():Number3D{ return (sceneTransform.position); } public function removeOnSceneChange(_arg1:Function):void{ removeEventListener(Object3DEvent.SCENE_CHANGED, _arg1, false); } public function removeOnMouseMove(_arg1:Function):void{ removeEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false); } public function get parentminX():Number{ return (((-(boundingRadius) * _boundingScale) + _transform.tx)); } public function get parentminY():Number{ return (((-(boundingRadius) * _boundingScale) + _transform.ty)); } public function get parentminZ():Number{ return (((-(boundingRadius) * _boundingScale) + _transform.tz)); } public function get filters():Array{ return (_filters); } function notifyParentUpdate():void{ if (((_ownCanvas) && (_parent))){ _parent._sessionDirty = true; }; if (!hasEventListener(Object3DEvent.PARENT_UPDATED)){ return; }; if (!_parentupdated){ _parentupdated = new Object3DEvent(Object3DEvent.PARENT_UPDATED, this); }; dispatchEvent(_parentupdated); } public function set filters(_arg1:Array):void{ if (_filters == _arg1){ return; }; _filters = _arg1; if (_ownSession){ _ownSession.filters = _filters; }; } } }//package away3d.core.base
Section 33
//Segment (away3d.core.base.Segment) package away3d.core.base { import flash.events.*; import away3d.core.utils.*; import away3d.materials.*; import away3d.events.*; public class Segment extends Element { var _material:ISegmentMaterial; var _v0:Vertex; var _v1:Vertex; public var segmentVO:SegmentVO; private var _index:int; private var _vertices:Array; private var _commands:Array; public function Segment(_arg1:Vertex, _arg2:Vertex, _arg3:ISegmentMaterial=null){ _vertices = new Array(); _commands = new Array(); segmentVO = new SegmentVO(); super(); this.v0 = _arg1; this.v1 = _arg2; this.material = _arg3; vertexDirty = true; } override public function get vertices():Array{ return (_vertices); } public function get v1():Vertex{ return (_v1); } override public function get maxX():Number{ if (_v0._x > _v1._x){ return (_v0._x); }; return (_v1._x); } override public function get commands():Array{ return (_commands); } public function get v0():Vertex{ return (_v0); } public function set material(_arg1:ISegmentMaterial):void{ if (_arg1 == _material){ return; }; if (((!((_material == null))) && (parent))){ parent.removeMaterial(this, _material); }; _material = (segmentVO.material = _arg1); if (((!((_material == null))) && (parent))){ parent.addMaterial(this, _material); }; } private function onVertexValueChange(_arg1:Event):void{ notifyVertexValueChange(); } public function lineTo(_arg1:Vertex):void{ addVertexAt(_vertices.length, _arg1, "L"); } public function moveTo(_arg1:Vertex):void{ addVertexAt(_vertices.length, _arg1, "M"); } public function set v0(_arg1:Vertex):void{ addVertexAt(0, _arg1, "M"); } public function get material():ISegmentMaterial{ return (_material); } private function addVertexAt(_arg1:uint, _arg2:Vertex, _arg3:String):void{ if (((_vertices[_arg1]) && ((_vertices[_arg1] == _arg2)))){ return; }; if (_vertices[_arg1]){ _index = _vertices[_arg1].parents.indexOf(this); if (_index != -1){ _vertices[_arg1].parents.splice(_index, 1); }; }; _commands[_arg1] = (segmentVO.commands[_arg1] = _arg3); _vertices[_arg1] = (segmentVO.vertices[_arg1] = _arg2); if (_arg1 == 0){ _v0 = (segmentVO.v0 = _arg2); } else { if (_arg1 == 1){ _v1 = (segmentVO.v1 = _arg2); }; }; _arg2.parents.push(this); vertexDirty = true; } override public function get minX():Number{ if (_v0._x < _v1._x){ return (_v0._x); }; return (_v1._x); } override public function get minZ():Number{ if (_v0._z < _v1._z){ return (_v0._z); }; return (_v1._z); } override public function get minY():Number{ if (_v0._y < _v1._y){ return (_v0._y); }; return (_v1._y); } public function curveTo(_arg1:Vertex, _arg2:Vertex):void{ addVertexAt(_vertices.length, _arg1, "C"); addVertexAt(_vertices.length, _arg2, "P"); } override public function get radius2():Number{ var _local1:Number; var _local2:Number; _local1 = (((_v0._x * _v0._x) + (_v0._y * _v0._y)) + (_v0._z * _v0._z)); _local2 = (((_v1._x * _v1._x) + (_v1._y * _v1._y)) + (_v1._z * _v1._z)); if (_local1 > _local2){ return (_local1); }; return (_local2); } override public function get maxY():Number{ if (_v0._y > _v1._y){ return (_v0._y); }; return (_v1._y); } override public function get maxZ():Number{ if (_v0._z > _v1._z){ return (_v0._z); }; return (_v1._z); } public function set v1(_arg1:Vertex):void{ addVertexAt(1, _arg1, "L"); } } }//package away3d.core.base
Section 34
//UV (away3d.core.base.UV) package away3d.core.base { import away3d.core.utils.*; public class UV extends ValueObject { public var extra:Object; var _u:Number; var _v:Number; public function UV(_arg1:Number=0, _arg2:Number=0){ _u = _arg1; _v = _arg2; } public function clone():UV{ return (new UV(_u, _v)); } public function set u(_arg1:Number):void{ if (_arg1 == _u){ return; }; _u = _arg1; notifyChange(); } public function set v(_arg1:Number):void{ if (_arg1 == _v){ return; }; _v = _arg1; notifyChange(); } public function get u():Number{ return (_u); } override public function toString():String{ return ((((("new UV(" + _u) + ", ") + _v) + ")")); } public function get v():Number{ return (_v); } static function median(_arg1:UV, _arg2:UV):UV{ if (_arg1 == null){ return (null); }; if (_arg2 == null){ return (null); }; return (new UV(((_arg1._u + _arg2._u) / 2), ((_arg1._v + _arg2._v) / 2))); } static function weighted(_arg1:UV, _arg2:UV, _arg3:Number, _arg4:Number):UV{ var _local5:Number; var _local6:Number; var _local7:Number; if (_arg1 == null){ return (null); }; if (_arg2 == null){ return (null); }; _local5 = (_arg3 + _arg4); _local6 = (_arg3 / _local5); _local7 = (_arg4 / _local5); return (new UV(((_arg1._u * _local6) + (_arg2._u * _local7)), ((_arg1._v * _local6) + (_arg2._v * _local7)))); } } }//package away3d.core.base
Section 35
//VectorInstructionType (away3d.core.base.VectorInstructionType) package away3d.core.base { public class VectorInstructionType { public static const MOVE:String = "M"; public static const LINE:String = "L"; public static const CURVE:String = "C"; } }//package away3d.core.base
Section 36
//Vertex (away3d.core.base.Vertex) package away3d.core.base { import away3d.core.draw.*; import away3d.core.utils.*; import away3d.core.math.*; public class Vertex extends ValueObject { var _x:Number; var _z:Number; private var _position:Number3D; public var parents:Array; public var extra:Object; var _y:Number; private var _positionDirty:Boolean; private var _persp:Number; private var _vertexDirty:Boolean; var _index:int; public var geometry:Geometry; public function Vertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){ _position = new Number3D(); parents = []; super(); _x = _arg1; _y = _arg2; _z = _arg3; _positionDirty = true; } public function set z(_arg1:Number):void{ if (_z == _arg1){ return; }; _z = _arg1; _positionDirty = true; } public function get y():Number{ if (_positionDirty){ updatePosition(); }; return (_y); } private function updatePosition():void{ var _local1:Element; _positionDirty = false; for each (_local1 in parents) { _local1.vertexDirty = true; }; _vertexDirty = true; _position.x = _x; _position.y = _y; _position.z = _z; } public function adjust(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=1):void{ setValue(((_x * (1 - _arg4)) + (_arg1 * _arg4)), ((_y * (1 - _arg4)) + (_arg2 * _arg4)), ((_z * (1 - _arg4)) + (_arg3 * _arg4))); } public function add(_arg1:Number3D):void{ _x = (_x + _arg1.x); _y = (_y + _arg1.y); _z = (_z + _arg1.z); _positionDirty = true; } public function get position():Number3D{ if (_positionDirty){ updatePosition(); }; return (_position); } public function setValue(_arg1:Number, _arg2:Number, _arg3:Number):void{ _x = _arg1; _y = _arg2; _z = _arg3; _positionDirty = true; } public function perspective(_arg1:Number):ScreenVertex{ _persp = (1 / (1 + (_z / _arg1))); return (new ScreenVertex((_x * _persp), (_y * _persp), _z)); } public function reset():void{ _x = 0; _y = 0; _z = 0; _positionDirty = true; } function getVertexDirty():Boolean{ if (_positionDirty){ updatePosition(); }; if (_vertexDirty){ _vertexDirty = false; return (true); }; return (false); } public function clone():Vertex{ return (new Vertex(_x, _y, _z)); } override public function toString():String{ return ((((((("new Vertex(" + _x) + ", ") + _y) + ", ") + _z) + ")")); } public function set x(_arg1:Number):void{ if (_x == _arg1){ return; }; _x = _arg1; _positionDirty = true; } public function transform(_arg1:Matrix3D):void{ setValue(((((_x * _arg1.sxx) + (_y * _arg1.sxy)) + (_z * _arg1.sxz)) + _arg1.tx), ((((_x * _arg1.syx) + (_y * _arg1.syy)) + (_z * _arg1.syz)) + _arg1.ty), ((((_x * _arg1.szx) + (_y * _arg1.szy)) + (_z * _arg1.szz)) + _arg1.tz)); } public function get x():Number{ if (_positionDirty){ updatePosition(); }; return (_x); } public function set y(_arg1:Number):void{ if (_y == _arg1){ return; }; _y = _arg1; _positionDirty = true; } public function get z():Number{ if (_positionDirty){ updatePosition(); }; return (_z); } public static function median(_arg1:Vertex, _arg2:Vertex):Vertex{ return (new Vertex(((_arg1._x + _arg2._x) / 2), ((_arg1._y + _arg2._y) / 2), ((_arg1._z + _arg2._z) / 2))); } public static function weighted(_arg1:Vertex, _arg2:Vertex, _arg3:Number, _arg4:Number):Vertex{ var _local5:Number; var _local6:Number; var _local7:Number; _local5 = (_arg3 + _arg4); _local6 = (_arg3 / _local5); _local7 = (_arg4 / _local5); return (new Vertex(((_arg1._x * _local6) + (_arg2._x * _local7)), ((_arg1._y * _local6) + (_arg2._y * _local7)), ((_arg1._z * _local6) + (_arg2._z * _local7)))); } public static function distanceSqr(_arg1:Vertex, _arg2:Vertex):Number{ return (((((_arg1._x + _arg2._x) * (_arg1._x + _arg2._x)) + ((_arg1._y + _arg2._y) * (_arg1._y + _arg2._y))) + ((_arg1._z + _arg2._z) * (_arg1._z + _arg2._z)))); } } }//package away3d.core.base
Section 37
//VertexClassification (away3d.core.base.VertexClassification) package away3d.core.base { import away3d.core.geom.*; public class VertexClassification { public var vertex:Vertex; public var distance:Number; public var plane:Plane3D; public function getDistance(_arg1:Plane3D):Number{ var _local2:Number; _local2 = _arg1.distance(vertex.position); if ((((_local2 < 0)) && (!(isNaN(_local2))))){ plane = _arg1; distance = _local2; }; return (_local2); } } }//package away3d.core.base
Section 38
//VertexPosition (away3d.core.base.VertexPosition) package away3d.core.base { import away3d.core.math.*; public class VertexPosition { public var vertex:Vertex; public var x:Number; public var y:Number; public var z:Number; public function VertexPosition(_arg1:Vertex){ this.vertex = _arg1; this.x = 0; this.y = 0; this.z = 0; } public function add(_arg1:Number3D):void{ vertex.add(_arg1); } public function transform(_arg1:Matrix3D):void{ vertex.transform(_arg1); } public function adjust(_arg1:Number=1):void{ vertex.adjust(x, y, z, _arg1); } public function getIndex(_arg1:Array):int{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:int; var _local6:int; _local2 = vertex.x; _local3 = vertex.y; _local4 = vertex.z; vertex.x = NaN; vertex.y = NaN; vertex.z = NaN; _local5 = 0; _local6 = 0; while (_local6 < _arg1.length) { if (((((isNaN(_arg1[_local6].x)) && (isNaN(_arg1[_local6].y)))) && (isNaN(_arg1[_local6].z)))){ _local5 = _local6; break; }; _local6++; }; vertex.x = _local2; vertex.y = _local3; vertex.z = _local4; return (_local5); } public function reset():void{ vertex.reset(); } } }//package away3d.core.base
Section 39
//Blocker (away3d.core.block.Blocker) package away3d.core.block { import away3d.core.draw.*; public class Blocker extends DrawPrimitive { public function block(_arg1:DrawPrimitive):Boolean{ return (false); } } }//package away3d.core.block
Section 40
//BlockerArray (away3d.core.block.BlockerArray) package away3d.core.block { import away3d.core.clip.*; public class BlockerArray implements IBlockerConsumer { private var _clip:Clipping; private var _blockers:Array; public function BlockerArray(){ _blockers = []; super(); } public function set clip(_arg1:Clipping):void{ _clip = _arg1; _blockers = []; } public function blocker(_arg1:Blocker):void{ if (_clip.checkPrimitive(_arg1)){ _blockers.push(_arg1); }; } public function get clip():Clipping{ return (_clip); } public function list():Array{ _blockers.sortOn("screenZ", Array.NUMERIC); return (_blockers); } } }//package away3d.core.block
Section 41
//ConvexBlocker (away3d.core.block.ConvexBlocker) package away3d.core.block { import flash.display.*; import away3d.core.draw.*; import away3d.core.utils.*; import away3d.core.geom.*; import flash.utils.*; public class ConvexBlocker extends Blocker { private var _boundlines:Array; public var vertices:Array; override public function block(_arg1:DrawPrimitive):Boolean{ var _local2:DrawTriangle; if ((_arg1 is DrawTriangle)){ _local2 = (_arg1 as DrawTriangle); return (((((contains(_local2.v0x, _local2.v0y)) && (contains(_local2.v1x, _local2.v1y)))) && (contains(_local2.v2x, _local2.v2y)))); }; return (((((((contains(_arg1.minX, _arg1.minY)) && (contains(_arg1.minX, _arg1.maxY)))) && (contains(_arg1.maxX, _arg1.maxY)))) && (contains(_arg1.maxX, _arg1.minY)))); } override public function render():void{ var _local1:Graphics; var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:Line2D; var _local7:Line2D; var _local8:Line2D; var _local9:ScreenVertex; var _local10:ScreenVertex; var _local11:Number; var _local12:Number; _local1 = source.session.graphics; _local1.lineStyle(2, Color.fromHSV(0, 0, ((Math.sin((getTimer() / 1000)) + 1) / 2))); _local2 = _boundlines.length; _local3 = 0; while (_local3 < _local2) { _local6 = _boundlines[_local3]; _local7 = _boundlines[(((_local3 - 1) + _local2) % _local2)]; _local8 = _boundlines[(((_local3 + 1) + _local2) % _local2)]; _local9 = Line2D.cross(_local7, _local6); _local10 = Line2D.cross(_local6, _local8); _local1.moveTo(_local9.x, _local9.y); _local1.lineTo(_local10.x, _local10.y); _local1.moveTo(_local9.x, _local9.y); _local3++; }; _local4 = (((maxX - minX) * (maxY - minY)) / 2000); if (_local4 > 50){ _local4 = 50; }; _local5 = 0; while (_local5 < _local4) { _local11 = (minX + ((maxX - minX) * Math.random())); _local12 = (minY + ((maxY - minY) * Math.random())); if (contains(_local11, _local12)){ _local1.lineStyle(1, Color.fromHSV(0, 0, Math.random())); _local1.drawCircle(_local11, _local12, 3); }; _local5++; }; } override public function contains(_arg1:Number, _arg2:Number):Boolean{ var _local3:Line2D; for each (_local3 in _boundlines) { if (_local3.side(_arg1, _arg2) < 0){ return (false); }; }; return (true); } override public function calc():void{ var _local1:int; var _local2:int; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:int; _boundlines = []; screenZ = 0; maxX = -(Infinity); maxY = -(Infinity); minX = Infinity; minY = Infinity; _local1 = (vertices.length / 3); _local2 = 0; while (_local2 < _local1) { _local3 = vertices[_local2]; _local4 = vertices[(_local2 + 1)]; _local5 = vertices[(_local2 + 2)]; _local6 = ((_local2 + 3) % _local1); _boundlines.push(Line2D.from2points(_local3, _local4, vertices[_local6], vertices[(_local6 + 1)])); if (screenZ < _local5){ screenZ = _local5; }; if (minX > _local3){ minX = _local3; }; if (maxX < _local3){ maxX = _local3; }; if (minY > _local4){ minY = _local4; }; if (maxY < _local4){ maxY = _local4; }; _local2++; }; maxZ = screenZ; minZ = screenZ; } } }//package away3d.core.block
Section 42
//IBlockerConsumer (away3d.core.block.IBlockerConsumer) package away3d.core.block { public interface IBlockerConsumer { function blocker(_arg1:Blocker):void; } }//package away3d.core.block
Section 43
//IBlockerProvider (away3d.core.block.IBlockerProvider) package away3d.core.block { import away3d.core.base.*; import away3d.core.math.*; public interface IBlockerProvider { function blockers(_arg1:Object3D, _arg2:Matrix3D, _arg3:IBlockerConsumer):void; } }//package away3d.core.block
Section 44
//Clipping (away3d.core.clip.Clipping) package away3d.core.clip { import flash.geom.*; import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.events.*; public class Clipping extends EventDispatcher { private var _view:View3D; private var _maX:Number; private var _clippingupdated:ClippingEvent; private var _stageHeight:Number; private var _stageWidth:Number; private var _minX:Number; private var _minY:Number; private var _minZ:Number; var _cameraVarsStore:CameraVarsStore; private var _maY:Number; private var _clippingClone:Clipping; private var _zeroPoint:Point; private var _screenupdated:ClippingEvent; private var _maxX:Number; private var _maxZ:Number; private var _maxY:Number; protected var ini:Init; private var _globalPoint:Point; var _objectCulling:Boolean; private var _miX:Number; private var _miY:Number; private var _stage:Stage; public function Clipping(_arg1:Object=null){ _zeroPoint = new Point(0, 0); super(); ini = (Init.parse(_arg1) as Init); minX = ini.getNumber("minX", -(Infinity)); minY = ini.getNumber("minY", -(Infinity)); minZ = ini.getNumber("minZ", -(Infinity)); maxX = ini.getNumber("maxX", Infinity); maxY = ini.getNumber("maxY", Infinity); maxZ = ini.getNumber("maxZ", Infinity); } public function set minZ(_arg1:Number):void{ if (_minZ == _arg1){ return; }; _minZ = _arg1; notifyClippingUpdate(); } public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{ if (this.maxX < _arg1){ return (false); }; if (this.minX > _arg3){ return (false); }; if (this.maxY < _arg2){ return (false); }; if (this.minY > _arg4){ return (false); }; return (true); } public function get maxZ():Number{ return (_maxZ); } public function screen(_arg1:Sprite, _arg2:Number, _arg3:Number):Clipping{ if (!_clippingClone){ _clippingClone = clone(); _clippingClone.addOnClippingUpdate(onScreenUpdate); }; _stage = _arg1.stage; if (_stage.scaleMode == StageScaleMode.NO_SCALE){ _stageWidth = _stage.stageWidth; _stageHeight = _stage.stageHeight; } else { if (_stage.scaleMode == StageScaleMode.EXACT_FIT){ _stageWidth = _arg2; _stageHeight = _arg3; } else { if (_stage.scaleMode == StageScaleMode.SHOW_ALL){ if ((_stage.stageWidth / _arg2) < (_stage.stageHeight / _arg3)){ _stageWidth = _arg2; _stageHeight = ((_stage.stageHeight * _stageWidth) / _stage.stageWidth); } else { _stageHeight = _arg3; _stageWidth = ((_stage.stageWidth * _stageHeight) / _stage.stageHeight); }; } else { if (_stage.scaleMode == StageScaleMode.NO_BORDER){ if ((_stage.stageWidth / _arg2) > (_stage.stageHeight / _arg3)){ _stageWidth = _arg2; _stageHeight = ((_stage.stageHeight * _stageWidth) / _stage.stageWidth); } else { _stageHeight = _arg3; _stageWidth = ((_stage.stageWidth * _stageHeight) / _stage.stageHeight); }; }; }; }; }; if (_stage.align == StageAlign.TOP_LEFT){ _zeroPoint.x = 0; _zeroPoint.y = 0; _globalPoint = _arg1.globalToLocal(_zeroPoint); _maX = ((_miX = _globalPoint.x) + _stageWidth); _maY = ((_miY = _globalPoint.y) + _stageHeight); } else { if (_stage.align == StageAlign.TOP_RIGHT){ _zeroPoint.x = _arg2; _zeroPoint.y = 0; _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = ((_maX = _globalPoint.x) - _stageWidth); _maY = ((_miY = _globalPoint.y) + _stageHeight); } else { if (_stage.align == StageAlign.BOTTOM_LEFT){ _zeroPoint.x = 0; _zeroPoint.y = _arg3; _globalPoint = _arg1.globalToLocal(_zeroPoint); _maX = ((_miX = _globalPoint.x) + _stageWidth); _miY = ((_maY = _globalPoint.y) - _stageHeight); } else { if (_stage.align == StageAlign.BOTTOM_RIGHT){ _zeroPoint.x = _arg2; _zeroPoint.y = _arg3; _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = ((_maX = _globalPoint.x) - _stageWidth); _miY = ((_maY = _globalPoint.y) - _stageHeight); } else { if (_stage.align == StageAlign.TOP){ _zeroPoint.x = (_arg2 / 2); _zeroPoint.y = 0; _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = (_globalPoint.x - (_stageWidth / 2)); _maX = (_globalPoint.x + (_stageWidth / 2)); _maY = ((_miY = _globalPoint.y) + _stageHeight); } else { if (_stage.align == StageAlign.BOTTOM){ _zeroPoint.x = (_arg2 / 2); _zeroPoint.y = _arg3; _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = (_globalPoint.x - (_stageWidth / 2)); _maX = (_globalPoint.x + (_stageWidth / 2)); _miY = ((_maY = _globalPoint.y) - _stageHeight); } else { if (_stage.align == StageAlign.LEFT){ _zeroPoint.x = 0; _zeroPoint.y = (_arg3 / 2); _globalPoint = _arg1.globalToLocal(_zeroPoint); _maX = ((_miX = _globalPoint.x) + _stageWidth); _miY = (_globalPoint.y - (_stageHeight / 2)); _maY = (_globalPoint.y + (_stageHeight / 2)); } else { if (_stage.align == StageAlign.RIGHT){ _zeroPoint.x = _arg2; _zeroPoint.y = (_arg3 / 2); _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = ((_maX = _globalPoint.x) - _stageWidth); _miY = (_globalPoint.y - (_stageHeight / 2)); _maY = (_globalPoint.y + (_stageHeight / 2)); } else { _zeroPoint.x = (_arg2 / 2); _zeroPoint.y = (_arg3 / 2); _globalPoint = _arg1.globalToLocal(_zeroPoint); _miX = (_globalPoint.x - (_stageWidth / 2)); _maX = (_globalPoint.x + (_stageWidth / 2)); _miY = (_globalPoint.y - (_stageHeight / 2)); _maY = (_globalPoint.y + (_stageHeight / 2)); }; }; }; }; }; }; }; }; if (_minX > _miX){ _clippingClone.minX = _minX; } else { _clippingClone.minX = _miX; }; if (_maxX < _maX){ _clippingClone.maxX = _maxX; } else { _clippingClone.maxX = _maX; }; if (_minY > _miY){ _clippingClone.minY = _minY; } else { _clippingClone.minY = _miY; }; if (_maxY < _maY){ _clippingClone.maxY = _maxY; } else { _clippingClone.maxY = _maY; }; _clippingClone.minZ = _minZ; _clippingClone.maxZ = _maxZ; _clippingClone.objectCulling = _objectCulling; return (_clippingClone); } public function removeOnScreenUpdate(_arg1:Function):void{ removeEventListener(ClippingEvent.SCREEN_UPDATED, _arg1, false); } public function set minX(_arg1:Number):void{ if (_minX == _arg1){ return; }; _minX = _arg1; notifyClippingUpdate(); } public function set minY(_arg1:Number):void{ if (_minY == _arg1){ return; }; _minY = _arg1; notifyClippingUpdate(); } public function checkElements(_arg1:Mesh, _arg2:Array, _arg3:Array, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:Array, _arg8:Array):void{ throw (new Error("Not implemented")); } public function get maxX():Number{ return (_maxX); } public function addOnClippingUpdate(_arg1:Function):void{ addEventListener(ClippingEvent.CLIPPING_UPDATED, _arg1, false, 0, false); } public function get view():View3D{ return (_view); } public function removeOnClippingUpdate(_arg1:Function):void{ removeEventListener(ClippingEvent.CLIPPING_UPDATED, _arg1, false); } private function notifyScreenUpdate():void{ if (!hasEventListener(ClippingEvent.SCREEN_UPDATED)){ return; }; if (_screenupdated == null){ _screenupdated = new ClippingEvent(ClippingEvent.SCREEN_UPDATED, this); }; dispatchEvent(_screenupdated); } public function checkPrimitive(_arg1:DrawPrimitive):Boolean{ return (true); } public function get minX():Number{ return (_minX); } public function get minZ():Number{ return (_minZ); } public function get minY():Number{ return (_minY); } public function clone(_arg1:Clipping=null):Clipping{ var _local2:Clipping; _local2 = ((_arg1) || (new Clipping())); _local2.minX = minX; _local2.minY = minY; _local2.minZ = minZ; _local2.maxX = maxX; _local2.maxY = maxY; _local2.maxZ = maxZ; _local2.objectCulling = objectCulling; _local2._cameraVarsStore = _cameraVarsStore; return (_local2); } private function onScreenUpdate(_arg1:ClippingEvent):void{ notifyScreenUpdate(); } public function set maxX(_arg1:Number):void{ if (_maxX == _arg1){ return; }; _maxX = _arg1; notifyClippingUpdate(); } public function set objectCulling(_arg1:Boolean):void{ _objectCulling = _arg1; } public function set maxY(_arg1:Number):void{ if (_maxY == _arg1){ return; }; _maxY = _arg1; notifyClippingUpdate(); } override public function toString():String{ return ((((((((((((("{minX:" + minX) + " maxX:") + maxX) + " minY:") + minY) + " maxY:") + maxY) + " minZ:") + minZ) + " maxZ:") + maxZ) + "}")); } public function addOnScreenUpdate(_arg1:Function):void{ addEventListener(ClippingEvent.SCREEN_UPDATED, _arg1, false, 0, false); } public function get objectCulling():Boolean{ return (_objectCulling); } public function set maxZ(_arg1:Number):void{ if (_maxZ == _arg1){ return; }; _maxZ = _arg1; notifyClippingUpdate(); } public function get maxY():Number{ return (_maxY); } private function notifyClippingUpdate():void{ if (!hasEventListener(ClippingEvent.CLIPPING_UPDATED)){ return; }; if (_clippingupdated == null){ _clippingupdated = new ClippingEvent(ClippingEvent.CLIPPING_UPDATED, this); }; dispatchEvent(_clippingupdated); } public function set view(_arg1:View3D):void{ _view = _arg1; _cameraVarsStore = view.cameraVarsStore; } } }//package away3d.core.clip
Section 45
//FrustumClipping (away3d.core.clip.FrustumClipping) package away3d.core.clip { import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.geom.*; import away3d.core.render.*; import flash.utils.*; public class FrustumClipping extends Clipping { private var _uv2:UV; private var _newFaceVO:FaceVO; private var _v0:Vertex; private var _v1:Vertex; private var _v2:Vertex; private var _faceVOs:Array; private var _frustum:Frustum; private var _v01:Vertex; private var _uv01:UV; private var _face:Face; private var _session:AbstractRenderSession; private var _v12:Vertex; private var _uv12:UV; private var _v1C:VertexClassification; private var _v0d:Number; private var _v20:Vertex; private var _v0C:VertexClassification; private var _v0w:Number; private var _uv20:UV; private var _v2C:VertexClassification; private var _v1d:Number; private var _v1w:Number; private var _v2d:Number; private var _faces:Array; private var _v2w:Number; private var _processed:Dictionary; private var _d:Number; private var _pass:Boolean; private var _uv1:UV; private var _faceVO:FaceVO; private var _uv0:UV; public function FrustumClipping(_arg1:Object=null){ _faceVOs = new Array(); super(_arg1); objectCulling = ini.getBoolean("objectCulling", true); } override public function checkElements(_arg1:Mesh, _arg2:Array, _arg3:Array, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:Array, _arg8:Array):void{ var _local9:Plane3D; var _local10:Array; var _local11:Boolean; _session = _arg1.session; _frustum = _cameraVarsStore.frustumDictionary[_arg1]; _processed = new Dictionary(true); _faces = _arg1.faces; _faceVOs.length = 0; for each (_face in _faces) { if (!_face.visible){ } else { _faceVOs[_faceVOs.length] = _face.faceVO; }; }; for each (_faceVO in _faceVOs) { _pass = true; _v0C = _cameraVarsStore.createVertexClassification(_faceVO.v0); _v1C = _cameraVarsStore.createVertexClassification(_faceVO.v1); _v2C = _cameraVarsStore.createVertexClassification(_faceVO.v2); if (((((_v0C.plane) || (_v1C.plane))) || (_v2C.plane))){ _local9 = _v0C.plane; if (_local9){ _v0d = _v0C.distance; _v1d = _v1C.getDistance(_local9); _v2d = _v2C.getDistance(_local9); } else { _local9 = _v1C.plane; if (_local9){ _v0d = _v0C.getDistance(_local9); _v1d = _v1C.distance; _v2d = _v2C.getDistance(_local9); } else { _local9 = _v2C.plane; if (_local9){ _v0d = _v0C.getDistance(_local9); _v1d = _v1C.getDistance(_local9); _v2d = _v2C.distance; }; }; }; if ((((((_v0d < 0)) && ((_v1d < 0)))) && ((_v2d < 0)))){ continue; }; if ((((((_v0d < 0)) || ((_v1d < 0)))) || ((_v2d < 0)))){ _pass = false; }; } else { _local10 = _frustum.planes; _local11 = false; for each (_local9 in _local10) { _v0d = _v0C.getDistance(_local9); _v1d = _v1C.getDistance(_local9); _v2d = _v2C.getDistance(_local9); if ((((((_v0d < 0)) && ((_v1d < 0)))) && ((_v2d < 0)))){ _local11 = true; break; }; if ((((((_v0d < 0)) || ((_v1d < 0)))) || ((_v2d < 0)))){ _pass = false; break; }; }; if (_local11){ continue; }; }; if (_pass){ _arg2[_arg2.length] = _faceVO; _arg8[_arg8.length] = _arg7.length; if (!_processed[_faceVO.v0]){ _arg5[_arg5.length] = _faceVO.v0; _arg7[_arg7.length] = ((_processed[_faceVO.v0] = _arg5.length) - 1); } else { _arg7[_arg7.length] = (_processed[_faceVO.v0] - 1); }; if (!_processed[_faceVO.v1]){ _arg5[_arg5.length] = _faceVO.v1; _arg7[_arg7.length] = ((_processed[_faceVO.v1] = _arg5.length) - 1); } else { _arg7[_arg7.length] = (_processed[_faceVO.v1] - 1); }; if (!_processed[_faceVO.v2]){ _arg5[_arg5.length] = _faceVO.v2; _arg7[_arg7.length] = ((_processed[_faceVO.v2] = _arg5.length) - 1); } else { _arg7[_arg7.length] = (_processed[_faceVO.v2] - 1); }; } else { if ((((_v0d >= 0)) && ((_v1d < 0)))){ _v0w = _v0d; _v1w = _v1d; _v2w = _v2d; _v0 = _faceVO.v0; _v1 = _faceVO.v1; _v2 = _faceVO.v2; _uv0 = _faceVO.uv0; _uv1 = _faceVO.uv1; _uv2 = _faceVO.uv2; } else { if ((((_v1d >= 0)) && ((_v2d < 0)))){ _v0w = _v1d; _v1w = _v2d; _v2w = _v0d; _v0 = _faceVO.v1; _v1 = _faceVO.v2; _v2 = _faceVO.v0; _uv0 = _faceVO.uv1; _uv1 = _faceVO.uv2; _uv2 = _faceVO.uv0; } else { if ((((_v2d >= 0)) && ((_v0d < 0)))){ _v0w = _v2d; _v1w = _v0d; _v2w = _v1d; _v0 = _faceVO.v2; _v1 = _faceVO.v0; _v2 = _faceVO.v1; _uv0 = _faceVO.uv2; _uv1 = _faceVO.uv0; _uv2 = _faceVO.uv1; }; }; }; _d = (_v0w - _v1w); _v01 = _cameraVarsStore.createVertex((((_v1.x * _v0w) - (_v0.x * _v1w)) / _d), (((_v1.y * _v0w) - (_v0.y * _v1w)) / _d), (((_v1.z * _v0w) - (_v0.z * _v1w)) / _d)); _uv01 = (_uv0) ? _cameraVarsStore.createUV((((_uv1.u * _v0w) - (_uv0.u * _v1w)) / _d), (((_uv1.v * _v0w) - (_uv0.v * _v1w)) / _d), _session) : null; if (_v2w < 0){ _d = (_v0w - _v2w); _v20 = _cameraVarsStore.createVertex((((_v2.x * _v0w) - (_v0.x * _v2w)) / _d), (((_v2.y * _v0w) - (_v0.y * _v2w)) / _d), (((_v2.z * _v0w) - (_v0.z * _v2w)) / _d)); _uv20 = (_uv0) ? _cameraVarsStore.createUV((((_uv2.u * _v0w) - (_uv0.u * _v2w)) / _d), (((_uv2.v * _v0w) - (_uv0.v * _v2w)) / _d), _session) : null; _newFaceVO = (_faceVOs[_faceVOs.length] = _cameraVarsStore.createFaceVO(_faceVO.face, _faceVO.material, _faceVO.back, _uv0, _uv01, _uv20)); _newFaceVO.vertices[0] = (_newFaceVO.v0 = _v0); _newFaceVO.vertices[1] = (_newFaceVO.v1 = _v01); _newFaceVO.vertices[2] = (_newFaceVO.v2 = _v20); } else { _d = (_v2w - _v1w); _v12 = _cameraVarsStore.createVertex((((_v1.x * _v2w) - (_v2.x * _v1w)) / _d), (((_v1.y * _v2w) - (_v2.y * _v1w)) / _d), (((_v1.z * _v2w) - (_v2.z * _v1w)) / _d)); _uv12 = (_uv0) ? _cameraVarsStore.createUV((((_uv1.u * _v2w) - (_uv2.u * _v1w)) / _d), (((_uv1.v * _v2w) - (_uv2.v * _v1w)) / _d), _session) : null; _newFaceVO = (_faceVOs[_faceVOs.length] = _cameraVarsStore.createFaceVO(_faceVO.face, _faceVO.material, _faceVO.back, _uv0, _uv01, _uv2)); _newFaceVO.vertices[0] = (_newFaceVO.v0 = _v0); _newFaceVO.vertices[1] = (_newFaceVO.v1 = _v01); _newFaceVO.vertices[2] = (_newFaceVO.v2 = _v2); _newFaceVO = (_faceVOs[_faceVOs.length] = _cameraVarsStore.createFaceVO(_faceVO.face, _faceVO.material, _faceVO.back, _uv01, _uv12, _uv2)); _newFaceVO.vertices[0] = (_newFaceVO.v0 = _v01); _newFaceVO.vertices[1] = (_newFaceVO.v1 = _v12); _newFaceVO.vertices[2] = (_newFaceVO.v2 = _v2); }; }; }; _arg8[_arg8.length] = _arg7.length; } override public function clone(_arg1:Clipping=null):Clipping{ var _local2:FrustumClipping; _local2 = (((_arg1 as FrustumClipping)) || (new FrustumClipping())); super.clone(_local2); return (_local2); } override public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{ if (this.maxX < _arg1){ return (false); }; if (this.minX > _arg3){ return (false); }; if (this.maxY < _arg2){ return (false); }; if (this.minY > _arg4){ return (false); }; return (true); } override public function set objectCulling(_arg1:Boolean):void{ if (!_arg1){ throw (new Error("objectCulling requires setting to true for FrustumClipping")); }; _objectCulling = _arg1; } } }//package away3d.core.clip
Section 46
//RectangleClipping (away3d.core.clip.RectangleClipping) package away3d.core.clip { import away3d.core.draw.*; public class RectangleClipping extends Clipping { public function RectangleClipping(_arg1:Object=null){ super(_arg1); objectCulling = ini.getBoolean("objectCulling", false); } override public function clone(_arg1:Clipping=null):Clipping{ var _local2:RectangleClipping; _local2 = (((_arg1 as RectangleClipping)) || (new RectangleClipping())); super.clone(_local2); return (_local2); } override public function checkPrimitive(_arg1:DrawPrimitive):Boolean{ if (_arg1.maxX < minX){ return (false); }; if (_arg1.minX > maxX){ return (false); }; if (_arg1.maxY < minY){ return (false); }; if (_arg1.minY > maxY){ return (false); }; return (true); } } }//package away3d.core.clip
Section 47
//DrawBillboard (away3d.core.draw.DrawBillboard) package away3d.core.draw { import flash.geom.*; import away3d.core.utils.*; import away3d.materials.*; public class DrawBillboard extends DrawPrimitive { private var h:Number; public var screenVertices:Array; private var cos:Number; public var bottomleftx:Number; private var sinh:Number; private var pointMapping:Matrix; public var screenIndices:Array; public var topleftx:Number; private var sinw:Number; public var bottomlefty:Number; public var toplefty:Number; private var cosh:Number; public var vx:Number; public var vy:Number; public var height:Number; public var mapping:Matrix; public var bottomrighty:Number; public var scale:Number; public var index:int; private var _index:int; public var bottomrightx:Number; private var cosw:Number; private var sin:Number; public var billboardVO:BillboardVO; public var width:Number; public var material:IBillboardMaterial; private var uvMaterial:IUVMaterial; public var toprightx:Number; public var toprighty:Number; private var w:Number; public var rotation:Number; public function DrawBillboard(){ mapping = new Matrix(); super(); } override public function render():void{ material.renderBillboard(this); } override public function contains(_arg1:Number, _arg2:Number):Boolean{ var _local3:Point; var _local4:uint; if (rotation != 0){ if ((((topleftx * (_arg2 - toprighty)) + (toprightx * (toplefty - _arg2))) + (_arg1 * (toprighty - toplefty))) > 0.001){ return (false); }; if ((((toprightx * (_arg2 - bottomrighty)) + (bottomrightx * (toprighty - _arg2))) + (_arg1 * (bottomrighty - toprighty))) > 0.001){ return (false); }; if ((((bottomrightx * (_arg2 - bottomlefty)) + (bottomleftx * (bottomrighty - _arg2))) + (_arg1 * (bottomlefty - bottomrighty))) > 0.001){ return (false); }; if ((((bottomleftx * (_arg2 - toplefty)) + (topleftx * (bottomlefty - _arg2))) + (_arg1 * (toplefty - bottomlefty))) > 0.001){ return (false); }; }; uvMaterial = (material as IUVMaterial); if (((!(uvMaterial)) || (!(uvMaterial.bitmap.transparent)))){ return (true); }; pointMapping = mapping.clone(); pointMapping.invert(); _local3 = pointMapping.transformPoint(new Point(_arg1, _arg2)); if (_local3.x < 0){ _local3.x = 0; }; if (_local3.y < 0){ _local3.y = 0; }; if (_local3.x >= uvMaterial.width){ _local3.x = (uvMaterial.width - 1); }; if (_local3.y >= uvMaterial.height){ _local3.y = (uvMaterial.height - 1); }; _local4 = uvMaterial.bitmap.getPixel32(int(_local3.x), int(_local3.y)); return ((uint((_local4 >> 24)) > 128)); } override public function clear():void{ } override public function calc():void{ var _local1:Array; var _local2:int; var _local3:Array; var _local4:int; _index = (screenIndices[index] * 3); vx = screenVertices[_index]; vy = screenVertices[(_index + 1)]; screenZ = screenVertices[(_index + 2)]; minZ = screenZ; maxZ = screenZ; uvMaterial = (material as IUVMaterial); if (uvMaterial){ w = (uvMaterial.width * scale); h = (uvMaterial.height * scale); } else { w = (width * scale); h = (height * scale); }; if (rotation != 0){ cos = Math.cos(((rotation * Math.PI) / 180)); sin = Math.sin(((rotation * Math.PI) / 180)); cosw = ((cos * w) / 2); cosh = ((cos * h) / 2); sinw = ((sin * w) / 2); sinh = ((sin * h) / 2); topleftx = ((vx - cosw) - sinh); toplefty = ((vy + sinw) - cosh); toprightx = ((vx + cosw) - sinh); toprighty = ((vy - sinw) - cosh); bottomleftx = ((vx - cosw) + sinh); bottomlefty = ((vy + sinw) + cosh); bottomrightx = ((vx + cosw) + sinh); bottomrighty = ((vy - sinw) + cosh); _local1 = []; _local1.push(topleftx); _local1.push(toprightx); _local1.push(bottomleftx); _local1.push(bottomrightx); minX = 100000; maxX = -100000; for each (_local2 in _local1) { if (minX > _local2){ minX = _local2; }; if (maxX < _local2){ maxX = _local2; }; }; _local3 = []; _local3.push(toplefty); _local3.push(toprighty); _local3.push(bottomlefty); _local3.push(bottomrighty); minY = 100000; maxY = -100000; for each (_local4 in _local3) { if (minY > _local4){ minY = _local4; }; if (maxY < _local4){ maxY = _local4; }; }; mapping.a = (scale * cos); mapping.b = (-(scale) * sin); mapping.c = (scale * sin); mapping.d = (scale * cos); mapping.tx = topleftx; mapping.ty = toplefty; } else { bottomrightx = (toprightx = ((bottomleftx = (topleftx = (vx - (w / 2)))) + w)); bottomrighty = (bottomlefty = ((toprighty = (toplefty = (vy - (h / 2)))) + h)); minX = topleftx; minY = toplefty; maxX = bottomrightx; maxY = bottomrighty; mapping.a = (mapping.d = scale); mapping.c = (mapping.b = 0); mapping.tx = topleftx; mapping.ty = toplefty; }; } } }//package away3d.core.draw
Section 48
//DrawDisplayObject (away3d.core.draw.DrawDisplayObject) package away3d.core.draw { import flash.geom.*; import flash.display.*; import away3d.core.render.*; public class DrawDisplayObject extends DrawPrimitive { public var vx:Number; public var vy:Number; public var displayobject:DisplayObject; private var displayRect:Rectangle; public var session:AbstractRenderSession; public var vz:Number; override public function clear():void{ displayobject = null; } override public function calc():void{ displayRect = displayobject.getBounds(displayobject); screenZ = vz; minZ = screenZ; maxZ = screenZ; minX = (vx + displayRect.left); minY = (vy + displayRect.top); maxX = (vx + displayRect.right); maxY = (vy + displayRect.bottom); } override public function render():void{ displayobject.x = vx; displayobject.y = vy; session.addDisplayObject(displayobject); } override public function contains(_arg1:Number, _arg2:Number):Boolean{ return (true); } } }//package away3d.core.draw
Section 49
//DrawFog (away3d.core.draw.DrawFog) package away3d.core.draw { import away3d.core.clip.*; import away3d.materials.*; public class DrawFog extends DrawPrimitive { public var clip:Clipping; public var material:IFogMaterial; override public function render():void{ material.renderFog(this); } } }//package away3d.core.draw
Section 50
//DrawPrimitive (away3d.core.draw.DrawPrimitive) package away3d.core.draw { import away3d.containers.*; import away3d.core.base.*; public class DrawPrimitive { public var quadrant:PrimitiveQuadrantTreeNode; public var minX:Number; public var minZ:Number; public var generated:Boolean; public var source:Object3D; public var minY:Number; public var view:View3D; public var screenZ:Number; public var maxX:Number; public var maxY:Number; public var create:Function; public var maxZ:Number; public function getZ(_arg1:Number, _arg2:Number):Number{ return (screenZ); } public function clear():void{ throw (new Error("Not implemented")); } public function calc():void{ throw (new Error("Not implemented")); } public function render():void{ throw (new Error("Not implemented")); } public function contains(_arg1:Number, _arg2:Number):Boolean{ throw (new Error("Not implemented")); } public function quarter(_arg1:Number):Array{ return ([this]); } public function toString():String{ return ((((((("P{ screenZ = " + screenZ) + ", minZ = ") + minZ) + ", maxZ = ") + maxZ) + " }")); } } }//package away3d.core.draw
Section 51
//DrawScaledBitmap (away3d.core.draw.DrawScaledBitmap) package away3d.core.draw { import flash.geom.*; import flash.display.*; public class DrawScaledBitmap extends DrawPrimitive { private var cos:Number; public var bottomleftx:Number; private var sinh:Number; private var pointMapping:Matrix; public var topleftx:Number; public var toplefty:Number; private var sinw:Number; public var bottomlefty:Number; private var height:Number; public var smooth:Boolean; private var cosh:Number; public var vx:Number; public var vy:Number; public var vz:Number; private var mapping:Matrix; public var bottomrighty:Number; private var cosw:Number; public var bitmap:BitmapData; public var bottomrightx:Number; private var sin:Number; public var scale:Number; private var width:Number; public var toprightx:Number; public var toprighty:Number; public var rotation:Number; public function DrawScaledBitmap(){ mapping = new Matrix(); super(); } override public function render():void{ source.session.renderScaledBitmap(this, bitmap, mapping, smooth); } override public function contains(_arg1:Number, _arg2:Number):Boolean{ var _local3:Point; var _local4:uint; if (rotation != 0){ if ((((topleftx * (_arg2 - toprighty)) + (toprightx * (toplefty - _arg2))) + (_arg1 * (toprighty - toplefty))) > 0.001){ return (false); }; if ((((toprightx * (_arg2 - bottomrighty)) + (bottomrightx * (toprighty - _arg2))) + (_arg1 * (bottomrighty - toprighty))) > 0.001){ return (false); }; if ((((bottomrightx * (_arg2 - bottomlefty)) + (bottomleftx * (bottomrighty - _arg2))) + (_arg1 * (bottomlefty - bottomrighty))) > 0.001){ return (false); }; if ((((bottomleftx * (_arg2 - toplefty)) + (topleftx * (bottomlefty - _arg2))) + (_arg1 * (toplefty - bottomlefty))) > 0.001){ return (false); }; }; if (!bitmap.transparent){ return (true); }; pointMapping = mapping.clone(); pointMapping.invert(); _local3 = pointMapping.transformPoint(new Point(_arg1, _arg2)); if (_local3.x < 0){ _local3.x = 0; }; if (_local3.y < 0){ _local3.y = 0; }; if (_local3.x >= bitmap.width){ _local3.x = (bitmap.width - 1); }; if (_local3.y >= bitmap.height){ _local3.y = (bitmap.height - 1); }; _local4 = bitmap.getPixel32(int(_local3.x), int(_local3.y)); return ((uint((_local4 >> 24)) > 128)); } override public function clear():void{ bitmap = null; } override public function calc():void{ var _local1:Array; var _local2:int; var _local3:Array; var _local4:int; screenZ = vz; minZ = screenZ; maxZ = screenZ; width = (bitmap.width * scale); height = (bitmap.height * scale); if (rotation != 0){ cos = Math.cos(((rotation * Math.PI) / 180)); sin = Math.sin(((rotation * Math.PI) / 180)); cosw = ((cos * width) / 2); cosh = ((cos * height) / 2); sinw = ((sin * width) / 2); sinh = ((sin * height) / 2); topleftx = ((vx - cosw) - sinh); toplefty = ((vy + sinw) - cosh); toprightx = ((vx + cosw) - sinh); toprighty = ((vy - sinw) - cosh); bottomleftx = ((vx - cosw) + sinh); bottomlefty = ((vy + sinw) + cosh); bottomrightx = ((vx + cosw) + sinh); bottomrighty = ((vy - sinw) + cosh); _local1 = []; _local1.push(topleftx); _local1.push(toprightx); _local1.push(bottomleftx); _local1.push(bottomrightx); minX = 100000; maxX = -100000; for each (_local2 in _local1) { if (minX > _local2){ minX = _local2; }; if (maxX < _local2){ maxX = _local2; }; }; _local3 = []; _local3.push(toplefty); _local3.push(toprighty); _local3.push(bottomlefty); _local3.push(bottomrighty); minY = 100000; maxY = -100000; for each (_local4 in _local3) { if (minY > _local4){ minY = _local4; }; if (maxY < _local4){ maxY = _local4; }; }; mapping.a = (scale * cos); mapping.b = (-(scale) * sin); mapping.c = (scale * sin); mapping.d = (scale * cos); mapping.tx = topleftx; mapping.ty = toplefty; } else { topleftx = (vx - (width / 2)); toplefty = (vy - (height / 2)); toprightx = (topleftx + width); toprighty = toplefty; bottomleftx = topleftx; bottomlefty = (toplefty + height); bottomrightx = toprightx; bottomrighty = bottomlefty; minX = topleftx; minY = toplefty; maxX = bottomrightx; maxY = bottomrighty; mapping.a = (mapping.d = scale); mapping.c = (mapping.b = 0); mapping.tx = topleftx; mapping.ty = toplefty; }; } } }//package away3d.core.draw
Section 52
//DrawSegment (away3d.core.draw.DrawSegment) package away3d.core.draw { import away3d.core.utils.*; import away3d.materials.*; public class DrawSegment extends DrawPrimitive { private var bzf:Number; private var det:Number; public var screenCommands:Array; private var axf:Number; private var faz:Number; public var material:ISegmentMaterial; public var segmentVO:SegmentVO; private var ayf:Number; private var ax:Number; private var ay:Number; private var az:Number; public var v0y:Number; public var v0z:Number; private var fbz:Number; private var azf:Number; private var bx:Number; private var by:Number; public var v1x:Number; public var v1y:Number; private var bz:Number; private var xfocus:Number; public var v1z:Number; public var v0x:Number; private var db:Number; private var da:Number; private var dx:Number; private var dy:Number; public var startIndex:int; public var screenIndices:Array; public var screenVertices:Array; public var endIndex:int; private var bxf:Number; private var _index:int; private var focus:Number; public var length:Number; private var byf:Number; private var yfocus:Number; function onepointcut(_arg1:Number, _arg2:Number, _arg3:Number):Array{ var _local4:int; var _local5:int; var _local6:int; _local4 = screenIndices.length; screenIndices[screenIndices.length] = startIndex; screenIndices[screenIndices.length] = screenVertices.length; _local5 = screenIndices.length; screenIndices[screenIndices.length] = screenVertices.length; screenIndices[screenIndices.length] = (startIndex + 1); _local6 = screenIndices.length; screenVertices[screenVertices.length] = _arg1; screenVertices[screenVertices.length] = _arg2; screenVertices[screenVertices.length] = _arg3; return ([create(source, segmentVO, material, screenVertices, screenIndices, screenCommands, _local4, _local5, true), create(source, segmentVO, material, screenVertices, screenIndices, screenCommands, _local5, _local6, true)]); } override public function contains(_arg1:Number, _arg2:Number):Boolean{ if (Math.abs((((v0x * (_arg2 - v1y)) + (v1x * (v0y - _arg2))) + (_arg1 * (v1y - v0y)))) > ((0.001 * 1000) * 1000)){ return (false); }; if ((distanceToCenter(_arg1, _arg2) * 2) > length){ return (false); }; return (true); } override public function clear():void{ } override public function calc():void{ _index = (screenIndices[startIndex] * 3); v0x = screenVertices[_index]; v0y = screenVertices[(_index + 1)]; v0z = screenVertices[(_index + 2)]; _index = (screenIndices[(startIndex + 1)] * 3); v1x = screenVertices[_index]; v1y = screenVertices[(_index + 1)]; v1z = screenVertices[(_index + 2)]; if (v0z < v1z){ minZ = v0z; maxZ = (v1z + 1); } else { minZ = v1z; maxZ = (v0z + 1); }; screenZ = ((v0z + v1z) / 2); if (v0x < v1x){ minX = v0x; maxX = (v1x + 1); } else { minX = v1x; maxX = (v0x + 1); }; if (v0y < v1y){ minY = v0y; maxY = (v1y + 1); } else { minY = v1y; maxY = (v0y + 1); }; length = Math.sqrt((((maxX - minX) * (maxX - minX)) + ((maxY - minY) * (maxY - minY)))); } override public function toString():String{ return ((((((("S{ screenZ = " + screenZ) + ", minZ = ") + minZ) + ", maxZ = ") + maxZ) + " }")); } override public function render():void{ material.renderSegment(this); } override public function quarter(_arg1:Number):Array{ var _local2:int; var _local3:int; var _local4:int; if (length < 5){ return (null); }; _local2 = screenIndices.length; screenIndices[screenIndices.length] = startIndex; screenIndices[screenIndices.length] = screenVertices.length; _local3 = screenIndices.length; screenIndices[screenIndices.length] = screenVertices.length; screenIndices[screenIndices.length] = (startIndex + 1); _local4 = screenIndices.length; ScreenVertex.median(startIndex, (startIndex + 1), screenVertices, screenIndices, _arg1); return ([create(source, segmentVO, material, screenVertices, screenIndices, screenCommands, _local2, _local3, true), create(source, segmentVO, material, screenVertices, screenIndices, screenCommands, _local3, _local4, true)]); } override public function getZ(_arg1:Number, _arg2:Number):Number{ focus = view.camera.focus; ax = v0x; ay = v0y; az = v0z; bx = v1x; by = v1y; bz = v1z; if ((((ax == _arg1)) && ((ay == _arg2)))){ return (az); }; if ((((bx == _arg1)) && ((by == _arg2)))){ return (bz); }; dx = (bx - ax); dy = (by - ay); azf = (az / focus); bzf = (bz / focus); faz = (1 + azf); fbz = (1 + bzf); xfocus = _arg1; yfocus = _arg2; axf = ((ax * faz) - (_arg1 * azf)); bxf = ((bx * fbz) - (_arg1 * bzf)); ayf = ((ay * faz) - (_arg2 * azf)); byf = ((by * fbz) - (_arg2 * bzf)); det = ((dx * (axf - bxf)) + (dy * (ayf - byf))); db = ((dx * (axf - _arg1)) + (dy * (ayf - _arg2))); da = ((dx * (_arg1 - bxf)) + (dy * (_arg2 - byf))); return ((((da * az) + (db * bz)) / det)); } private function distanceToCenter(_arg1:Number, _arg2:Number):Number{ var _local3:Number; var _local4:Number; _local3 = ((v0x + v1x) / 2); _local4 = ((v0y + v1y) / 2); return (Math.sqrt((((_local3 - _arg1) * (_local3 - _arg1)) + ((_local4 - _arg2) * (_local4 - _arg2))))); } } }//package away3d.core.draw
Section 53
//DrawTriangle (away3d.core.draw.DrawTriangle) package away3d.core.draw { import flash.geom.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.materials.*; public class DrawTriangle extends DrawPrimitive { private var _u0:Number; private var _z:Number; private var _y:Number; private var bzf:Number; private var det:Number; private var axf:Number; private var _v0:Number; private var _v1:Number; private var _v2:Number; public var screenCommands:Array; private var _vertexCount:uint; private var faz:Number; public var backface:Boolean;// = false private var ayf:Number; private var materialHeight:Number; private var ax:Number; private var ay:Number; private var az:Number; private var au:Number; private var av:Number; public var v0y:Number; public var v0z:Number; private var fbz:Number; private var _areaSign:Number; private var bu:Number; private var azf:Number; private var bx:Number; private var by:Number; private var bz:Number; private var bv:Number; private var fcz:Number; public var v1y:Number; public var v1z:Number; private var uv01:UV; public var material:ITriangleMaterial; private var cv:Number; private var cx:Number; private var cy:Number; private var cz:Number; private var cu:Number; private var da:Number; private var db:Number; private var dc:Number; private var _invtexmapping:Matrix; private var uv12:UV; public var v1x:Number; public var v2x:Number; private var cxf:Number; public var area:Number; public var startIndex:int; public var screenIndices:Array; public var screenVertices:Array; private var uv20:UV; public var v0x:Number; public var v2y:Number; public var uv0:UV; public var uv2:UV; private var cyf:Number; private var _vertex:int; public var endIndex:int; public var uv1:UV; private var czf:Number; private var bxf:Number; public var v2z:Number; private var _index:int; public var reverseArea:Boolean; public var faceVO:FaceVO; private var focus:Number; private var materialWidth:Number; private var byf:Number; private var _x:Number; private var _u1:Number; private var _u2:Number; public function DrawTriangle(){ _invtexmapping = new Matrix(); backface = false; super(); } final public function transformUV(_arg1:IUVMaterial):Matrix{ materialWidth = _arg1.width; materialHeight = _arg1.height; if ((((((uv0 == null)) || ((uv1 == null)))) || ((uv2 == null)))){ return (null); }; _u0 = (materialWidth * uv0._u); _u1 = (materialWidth * uv1._u); _u2 = (materialWidth * uv2._u); _v0 = (materialHeight * (1 - uv0._v)); _v1 = (materialHeight * (1 - uv1._v)); _v2 = (materialHeight * (1 - uv2._v)); if ((((((_u0 == _u1)) && ((_v0 == _v1)))) || ((((_u0 == _u2)) && ((_v0 == _v2)))))){ if (_u0 > 0.05){ _u0 = (_u0 - 0.05); } else { _u0 = (_u0 + 0.05); }; if (_v0 > 0.07){ _v0 = (_v0 - 0.07); } else { _v0 = (_v0 + 0.07); }; }; if ((((_u2 == _u1)) && ((_v2 == _v1)))){ if (_u2 > 0.04){ _u2 = (_u2 - 0.04); } else { _u2 = (_u2 + 0.04); }; if (_v2 > 0.06){ _v2 = (_v2 - 0.06); } else { _v2 = (_v2 + 0.06); }; }; _invtexmapping.a = (_u1 - _u0); _invtexmapping.b = (_v1 - _v0); _invtexmapping.c = (_u2 - _u0); _invtexmapping.d = (_v2 - _v0); if ((_arg1 is BitmapMaterialContainer)){ _invtexmapping.tx = (_u0 - faceVO.bitmapRect.x); _invtexmapping.ty = (_v0 - faceVO.bitmapRect.y); } else { _invtexmapping.tx = _u0; _invtexmapping.ty = _v0; }; return (_invtexmapping); } final override public function contains(_arg1:Number, _arg2:Number):Boolean{ var _local3:Boolean; var _local4:int; var _local5:int; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:int; var _local11:int; if (_vertexCount > 3){ _local3 = false; _local4 = startIndex; _local5 = (endIndex - 1); while (_local4 < endIndex) { if (screenCommands[_local4] == DrawingCommand.CURVE){ _local4++; }; _local10 = (screenIndices[_local4] * 3); _local7 = screenVertices[(_local10 + 1)]; _local11 = (screenIndices[_local5] * 3); _local9 = screenVertices[(_local11 + 1)]; if (((!(((_local7 > _arg2) == (_local9 > _arg2)))) && ((_arg1 < ((((screenVertices[_local11] - screenVertices[_local10]) * (_arg2 - _local7)) / (_local9 - _local7)) + _local6))))){ _local3 = !(_local3); }; var _temp1 = _local4; _local4 = (_local4 + 1); _local5 = _temp1; if (screenCommands[_local4] == DrawingCommand.MOVE){ var _temp2 = _local4; _local4 = (_local4 + 1); _local5 = _temp2; }; }; return (_local3); }; if (((((v0x * (_arg2 - v1y)) + (v1x * (v0y - _arg2))) + (_arg1 * (v1y - v0y))) * _areaSign) < -0.001){ return (false); }; if (((((v0x * (v2y - _arg2)) + (_arg1 * (v0y - v2y))) + (v2x * (_arg2 - v0y))) * _areaSign) < -0.001){ return (false); }; if (((((_arg1 * (v2y - v1y)) + (v1x * (_arg2 - v2y))) + (v2x * (v1y - _arg2))) * _areaSign) < -0.001){ return (false); }; return (true); } override public function clear():void{ uv0 = null; uv1 = null; uv2 = null; } override public function calc():void{ _index = (screenIndices[startIndex] * 3); v0x = screenVertices[_index]; v0y = screenVertices[(_index + 1)]; v0z = screenVertices[(_index + 2)]; _index = (screenIndices[(startIndex + 1)] * 3); v1x = screenVertices[_index]; v1y = screenVertices[(_index + 1)]; v1z = screenVertices[(_index + 2)]; _index = (screenIndices[(startIndex + 2)] * 3); v2x = screenVertices[_index]; v2y = screenVertices[(_index + 1)]; v2z = screenVertices[(_index + 2)]; _vertexCount = (endIndex - startIndex); if (_vertexCount > 3){ screenZ = 0; _index = endIndex; minX = Infinity; maxX = -(Infinity); minY = Infinity; maxY = -(Infinity); minZ = Infinity; maxZ = -(Infinity); while (_index-- > startIndex) { _vertex = (screenIndices[_index] * 3); _x = screenVertices[_vertex]; _y = screenVertices[(_vertex + 1)]; _z = screenVertices[(_vertex + 2)]; if (minX > _x){ minX = _x; }; if (maxX < _x){ maxX = _x; }; if (minY > _y){ minY = _y; }; if (maxY < _y){ maxY = _y; }; if (minZ > _z){ minZ = _z; }; if (maxZ < _z){ maxZ = _z; }; screenZ = (screenZ + _z); }; screenZ = (screenZ / _vertexCount); } else { if (v0x > v1x){ if (v0x > v2x){ maxX = v0x; } else { maxX = v2x; }; } else { if (v1x > v2x){ maxX = v1x; } else { maxX = v2x; }; }; if (v0x < v1x){ if (v0x < v2x){ minX = v0x; } else { minX = v2x; }; } else { if (v1x < v2x){ minX = v1x; } else { minX = v2x; }; }; if (v0y > v1y){ if (v0y > v2y){ maxY = v0y; } else { maxY = v2y; }; } else { if (v1y > v2y){ maxY = v1y; } else { maxY = v2y; }; }; if (v0y < v1y){ if (v0y < v2y){ minY = v0y; } else { minY = v2y; }; } else { if (v1y < v2y){ minY = v1y; } else { minY = v2y; }; }; if (v0z > v1z){ if (v0z > v2z){ maxZ = v0z; } else { maxZ = v2z; }; } else { if (v1z > v2z){ maxZ = v1z; } else { maxZ = v2z; }; }; if (v0z < v1z){ if (v0z < v2z){ minZ = v0z; } else { minZ = v2z; }; } else { if (v1z < v2z){ minZ = v1z; } else { minZ = v2z; }; }; screenZ = (((v0z + v1z) + v2z) / 3); }; area = (0.5 * (((v0x * (v2y - v1y)) + (v1x * (v0y - v2y))) + (v2x * (v1y - v0y)))); if (area > 0){ _areaSign = 1; } else { _areaSign = -1; }; } function fivepointcut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:UV, _arg11:UV, _arg12:UV, _arg13:UV, _arg14:UV):Array{ var _local15:int; var _local16:int; var _local17:int; var _local18:int; var _local19:int; var _local20:int; var _local21:int; var _local22:int; var _local23:int; var _local24:int; var _local25:int; var _local26:int; _local15 = (screenVertices.length / 3); _local16 = screenIndices[_arg1]; _local17 = screenIndices[_arg5]; _local18 = screenIndices[_arg9]; if (ScreenVertex.distanceSqr(screenVertices[(_local16 * 3)], screenVertices[((_local16 * 3) + 1)], _arg6, _arg7) < ScreenVertex.distanceSqr(_arg2, _arg3, screenVertices[(_local18 * 3)], screenVertices[((_local18 * 3) + 1)])){ _local19 = screenIndices.length; screenIndices[screenIndices.length] = _local16; screenIndices[screenIndices.length] = _local15; screenIndices[screenIndices.length] = (_local15 + 1); _local20 = screenIndices.length; screenIndices[screenIndices.length] = _local15; screenIndices[screenIndices.length] = _local17; screenIndices[screenIndices.length] = (_local15 + 1); _local21 = screenIndices.length; screenIndices[screenIndices.length] = _local16; screenIndices[screenIndices.length] = (_local15 + 1); screenIndices[screenIndices.length] = _local18; _local22 = screenIndices.length; screenVertices[screenVertices.length] = _arg2; screenVertices[screenVertices.length] = _arg3; screenVertices[screenVertices.length] = _arg4; screenVertices[screenVertices.length] = _arg6; screenVertices[screenVertices.length] = _arg7; screenVertices[screenVertices.length] = _arg8; return ([create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local19, _local20, _arg10, _arg11, _arg13, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local20, _local21, _arg11, _arg12, _arg13, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local21, _local22, _arg10, _arg13, _arg14, true)]); }; _local23 = screenIndices.length; screenIndices[screenIndices.length] = _local16; screenIndices[screenIndices.length] = _local15; screenIndices[screenIndices.length] = _local18; _local24 = screenIndices.length; screenIndices[screenIndices.length] = _local15; screenIndices[screenIndices.length] = _local17; screenIndices[screenIndices.length] = (_local15 + 1); _local25 = screenIndices.length; screenIndices[screenIndices.length] = _local15; screenIndices[screenIndices.length] = (_local15 + 1); screenIndices[screenIndices.length] = _local18; _local26 = screenIndices.length; screenVertices[screenVertices.length] = _arg2; screenVertices[screenVertices.length] = _arg3; screenVertices[screenVertices.length] = _arg4; screenVertices[screenVertices.length] = _arg6; screenVertices[screenVertices.length] = _arg7; screenVertices[screenVertices.length] = _arg8; return ([create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local23, _local24, _arg10, _arg11, _arg14, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local24, _local25, _arg11, _arg12, _arg13, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local25, _local26, _arg11, _arg13, _arg14, true)]); } override public function toString():String{ var _local1:String; _local1 = ""; if ((material is WireColorMaterial)){ switch ((material as WireColorMaterial).color){ case 0xFF00: _local1 = "green"; break; case 0xFFFF00: _local1 = "yellow"; break; case 0xFF0000: _local1 = "red"; break; case 0xFF: _local1 = "blue"; break; }; }; return (((((((((("T{" + _local1) + int(area)) + " screenZ = ") + num(screenZ)) + ", minZ = ") + num(minZ)) + ", maxZ = ") + num(maxZ)) + " }")); } private function num(_arg1:Number):Number{ return ((int((_arg1 * 1000)) / 1000)); } override public function render():void{ material.renderTriangle(this); } public function getUV(_arg1:Number, _arg2:Number):UV{ if (uv0 == null){ return (null); }; if (uv1 == null){ return (null); }; if (uv2 == null){ return (null); }; au = uv0._u; av = uv0._v; bu = uv1._u; bv = uv1._v; cu = uv2._u; cv = uv2._v; focus = view.camera.focus; ax = v0x; ay = v0y; az = v0z; bx = v1x; by = v1y; bz = v1z; cx = v2x; cy = v2y; cz = v2z; if ((((ax == _arg1)) && ((ay == _arg2)))){ return (uv0); }; if ((((bx == _arg1)) && ((by == _arg2)))){ return (uv1); }; if ((((cx == _arg1)) && ((cy == _arg2)))){ return (uv2); }; azf = (az / focus); bzf = (bz / focus); czf = (cz / focus); faz = (1 + azf); fbz = (1 + bzf); fcz = (1 + czf); axf = ((ax * faz) - (_arg1 * azf)); bxf = ((bx * fbz) - (_arg1 * bzf)); cxf = ((cx * fcz) - (_arg1 * czf)); ayf = ((ay * faz) - (_arg2 * azf)); byf = ((by * fbz) - (_arg2 * bzf)); cyf = ((cy * fcz) - (_arg2 * czf)); det = (((axf * (byf - cyf)) + (bxf * (cyf - ayf))) + (cxf * (ayf - byf))); da = (((_arg1 * (byf - cyf)) + (bxf * (cyf - _arg2))) + (cxf * (_arg2 - byf))); db = (((axf * (_arg2 - cyf)) + (_arg1 * (cyf - ayf))) + (cxf * (ayf - _arg2))); dc = (((axf * (byf - _arg2)) + (bxf * (_arg2 - ayf))) + (_arg1 * (ayf - byf))); return (new UV(((((da * au) + (db * bu)) + (dc * cu)) / det), ((((da * av) + (db * bv)) + (dc * cv)) / det))); } final override public function quarter(_arg1:Number):Array{ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; if ((((area > -20)) && ((area < 20)))){ return (null); }; _local2 = (screenVertices.length / 3); _local3 = screenIndices.length; screenIndices[screenIndices.length] = screenIndices[startIndex]; screenIndices[screenIndices.length] = _local2; screenIndices[screenIndices.length] = (_local2 + 2); _local4 = screenIndices.length; screenIndices[screenIndices.length] = screenIndices[(startIndex + 1)]; screenIndices[screenIndices.length] = (_local2 + 1); screenIndices[screenIndices.length] = _local2; _local5 = screenIndices.length; screenIndices[screenIndices.length] = screenIndices[(startIndex + 2)]; screenIndices[screenIndices.length] = (_local2 + 2); screenIndices[screenIndices.length] = (_local2 + 1); _local6 = screenIndices.length; screenIndices[screenIndices.length] = _local2; screenIndices[screenIndices.length] = (_local2 + 1); screenIndices[screenIndices.length] = (_local2 + 2); _local7 = screenIndices.length; ScreenVertex.median(startIndex, (startIndex + 1), screenVertices, screenIndices, _arg1); ScreenVertex.median((startIndex + 1), (startIndex + 2), screenVertices, screenIndices, _arg1); ScreenVertex.median((startIndex + 2), startIndex, screenVertices, screenIndices, _arg1); uv01 = UV.median(uv0, uv1); uv12 = UV.median(uv1, uv2); uv20 = UV.median(uv2, uv0); return ([create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local3, _local4, uv0, uv01, uv20, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local4, _local5, uv1, uv12, uv01, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local5, _local6, uv2, uv20, uv12, true), create(source, faceVO, material, screenVertices, screenIndices, screenCommands, _local6, _local7, uv01, uv12, uv20, true)]); } final override public function getZ(_arg1:Number, _arg2:Number):Number{ focus = view.camera.focus; if (_vertexCount > 3){ return (screenZ); }; ax = v0x; ay = v0y; az = v0z; bx = v1x; by = v1y; bz = v1z; cx = v2x; cy = v2y; cz = v2z; if ((((ax == _arg1)) && ((ay == _arg2)))){ return (az); }; if ((((bx == _arg1)) && ((by == _arg2)))){ return (bz); }; if ((((cx == _arg1)) && ((cy == _arg2)))){ return (cz); }; azf = (az / focus); bzf = (bz / focus); czf = (cz / focus); faz = (1 + azf); fbz = (1 + bzf); fcz = (1 + czf); axf = ((ax * faz) - (_arg1 * azf)); bxf = ((bx * fbz) - (_arg1 * bzf)); cxf = ((cx * fcz) - (_arg1 * czf)); ayf = ((ay * faz) - (_arg2 * azf)); byf = ((by * fbz) - (_arg2 * bzf)); cyf = ((cy * fcz) - (_arg2 * czf)); det = (((axf * (byf - cyf)) + (bxf * (cyf - ayf))) + (cxf * (ayf - byf))); da = (((_arg1 * (byf - cyf)) + (bxf * (cyf - _arg2))) + (cxf * (_arg2 - byf))); db = (((axf * (_arg2 - cyf)) + (_arg1 * (cyf - ayf))) + (cxf * (ayf - _arg2))); dc = (((axf * (byf - _arg2)) + (bxf * (_arg2 - ayf))) + (_arg1 * (ayf - byf))); return (((((da * az) + (db * bz)) + (dc * cz)) / det)); } final public function distanceToCenter(_arg1:Number, _arg2:Number):Number{ var _local3:Number; var _local4:Number; _local3 = (((v0x + v1x) + v2x) / 3); _local4 = (((v0y + v1y) + v2y) / 3); return (Math.sqrt((((_local3 - _arg1) * (_local3 - _arg1)) + ((_local4 - _arg2) * (_local4 - _arg2))))); } } }//package away3d.core.draw
Section 54
//IPrimitiveConsumer (away3d.core.draw.IPrimitiveConsumer) package away3d.core.draw { import away3d.containers.*; public interface IPrimitiveConsumer { function clone():IPrimitiveConsumer; function primitive(_arg1:DrawPrimitive):Boolean; function clear(_arg1:View3D):void; function list():Array; } }//package away3d.core.draw
Section 55
//IPrimitiveProvider (away3d.core.draw.IPrimitiveProvider) package away3d.core.draw { import away3d.core.base.*; import away3d.core.math.*; public interface IPrimitiveProvider { function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void; } }//package away3d.core.draw
Section 56
//PrimitiveQuadrantTreeNode (away3d.core.draw.PrimitiveQuadrantTreeNode) package away3d.core.draw { import away3d.core.base.*; public final class PrimitiveQuadrantTreeNode { public var parent:PrimitiveQuadrantTreeNode; public var create:Function; private var level:int; public var righttopFlag:Boolean; public var rightbottom:PrimitiveQuadrantTreeNode; public var rightbottomFlag:Boolean; public var onlysource:Object3D; public var xdiv:Number; private var halfheight:Number; private var maxlevel:int;// = 4 private var render_center_length:int;// = -1 public var onlysourceFlag:Boolean;// = true public var center:Array; private var render_center_index:int;// = -1 public var leftbottom:PrimitiveQuadrantTreeNode; private var halfwidth:Number; public var lefttop:PrimitiveQuadrantTreeNode; public var ydiv:Number; public var righttop:PrimitiveQuadrantTreeNode; public var lefttopFlag:Boolean; public var leftbottomFlag:Boolean; public function PrimitiveQuadrantTreeNode(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:PrimitiveQuadrantTreeNode=null){ render_center_length = -1; render_center_index = -1; maxlevel = 4; center = new Array(); onlysourceFlag = true; super(); this.level = _arg5; this.xdiv = _arg1; this.ydiv = _arg2; halfwidth = (_arg3 / 2); halfheight = (_arg4 / 2); this.parent = _arg6; } public function reset(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ this.xdiv = _arg1; this.ydiv = _arg2; halfwidth = (_arg3 / 2); halfheight = (_arg4 / 2); lefttopFlag = false; leftbottomFlag = false; righttopFlag = false; rightbottomFlag = false; center.length = 0; onlysourceFlag = true; onlysource = null; render_center_length = -1; render_center_index = -1; } public function push(_arg1:DrawPrimitive):void{ if (onlysourceFlag){ if (((!((onlysource == null))) && (!((onlysource == _arg1.source))))){ onlysourceFlag = false; }; onlysource = _arg1.source; }; if (level < maxlevel){ if (_arg1.maxX <= xdiv){ if (_arg1.maxY <= ydiv){ if (lefttop == null){ lefttopFlag = true; lefttop = new PrimitiveQuadrantTreeNode((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this); } else { if (!lefttopFlag){ lefttopFlag = true; lefttop.reset((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight); }; }; lefttop.push(_arg1); return; } else { if (_arg1.minY >= ydiv){ if (leftbottom == null){ leftbottomFlag = true; leftbottom = new PrimitiveQuadrantTreeNode((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this); } else { if (!leftbottomFlag){ leftbottomFlag = true; leftbottom.reset((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight); }; }; leftbottom.push(_arg1); return; }; }; } else { if (_arg1.minX >= xdiv){ if (_arg1.maxY <= ydiv){ if (righttop == null){ righttopFlag = true; righttop = new PrimitiveQuadrantTreeNode((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this); } else { if (!righttopFlag){ righttopFlag = true; righttop.reset((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight); }; }; righttop.push(_arg1); return; } else { if (_arg1.minY >= ydiv){ if (rightbottom == null){ rightbottomFlag = true; rightbottom = new PrimitiveQuadrantTreeNode((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this); } else { if (!rightbottomFlag){ rightbottomFlag = true; rightbottom.reset((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight); }; }; rightbottom.push(_arg1); return; }; }; }; }; }; center.push(_arg1); _arg1.quadrant = this; } public function render(_arg1:Number):void{ var _local2:DrawPrimitive; if (render_center_length == -1){ render_center_length = center.length; if (render_center_length){ if (render_center_length > 1){ center.sortOn("screenZ", (Array.DESCENDING | Array.NUMERIC)); }; }; render_center_index = 0; }; while (render_center_index < render_center_length) { _local2 = center[render_center_index]; if (_local2.screenZ < _arg1){ break; }; render_other(_local2.screenZ); _local2.render(); render_center_index++; }; render_other(_arg1); } private function render_other(_arg1:Number):void{ if (lefttopFlag){ lefttop.render(_arg1); }; if (leftbottomFlag){ leftbottom.render(_arg1); }; if (righttopFlag){ righttop.render(_arg1); }; if (rightbottomFlag){ rightbottom.render(_arg1); }; } } }//package away3d.core.draw
Section 57
//ScreenVertex (away3d.core.draw.ScreenVertex) package away3d.core.draw { import away3d.core.base.*; public final class ScreenVertex { public var vx:Number; public var vy:Number; private var fbz:Number; private var my2:Number; public var z:Number; private var dx:Number; private var dy:Number; private var faz:Number; public var vectorInstructionType:String; private var mx2:Number; private var ifmz2:Number; public var visible:Boolean; public var x:Number; public var y:Number; private var persp:Number; public function ScreenVertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){ vectorInstructionType = VectorInstructionType.LINE; super(); this.x = _arg1; this.y = _arg2; this.z = _arg3; this.visible = false; } public function distortSqr(_arg1:ScreenVertex, _arg2:Number):Number{ faz = (_arg2 + z); fbz = (_arg2 + z); ifmz2 = (2 / (faz + fbz)); mx2 = (((x * faz) + (_arg1.x * fbz)) * ifmz2); my2 = (((y * faz) + (_arg1.y * fbz)) * ifmz2); dx = ((x + _arg1.x) - mx2); dy = ((y + _arg1.y) - my2); return ((50 * (((dx * dx) + dy) + dy))); } public function toString():String{ return ((((((("new ScreenVertex(" + x) + ", ") + y) + ", ") + z) + ")")); } public function distance(_arg1:ScreenVertex):Number{ return (Math.sqrt((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y))))); } public static function median(_arg1:Number, _arg2:Number, _arg3:Array, _arg4:Array, _arg5:Number):void{ var _local6:int; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:int; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; _local6 = (_arg4[_arg1] * 3); _local7 = _arg3[_local6]; _local8 = _arg3[(_local6 + 1)]; _local9 = _arg3[(_local6 + 2)]; _local10 = (_arg4[_arg2] * 3); _local11 = _arg3[_local10]; _local12 = _arg3[(_local10 + 1)]; _local13 = _arg3[(_local10 + 2)]; _local14 = ((_local9 + _local13) / 2); _local15 = (_arg5 + _local9); _local16 = (_arg5 + _local13); _local17 = ((1 / (_arg5 + _local14)) / 2); _arg3[_arg3.length] = (((_local7 * _local15) + (_local11 * _local16)) * _local17); _arg3[_arg3.length] = (((_local8 * _local15) + (_local12 * _local16)) * _local17); _arg3[_arg3.length] = _local14; } public static function weighted(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:Number, _arg4:Number, _arg5:Number):ScreenVertex{ 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; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; var _local21:Number; if ((((_arg4 == 0)) && ((_arg3 == 0)))){ throw (new Error("Zero weights")); }; if (_arg4 == 0){ return (new ScreenVertex(_arg1.x, _arg1.y, _arg1.z)); }; if (_arg3 == 0){ return (new ScreenVertex(_arg2.x, _arg2.y, _arg2.z)); }; _local6 = (_arg3 + _arg4); _local7 = (_arg3 / _local6); _local8 = (_arg4 / _local6); _local9 = ((_arg1.x * _local7) + (_arg2.x * _local8)); _local10 = ((_arg1.y * _local7) + (_arg2.y * _local8)); _local11 = (_arg1.z / _arg5); _local12 = (_arg2.z / _arg5); _local13 = (1 + _local11); _local14 = (1 + _local12); _local15 = ((_arg1.x * _local13) - (_local9 * _local11)); _local16 = ((_arg2.x * _local14) - (_local9 * _local12)); _local17 = ((_arg1.y * _local13) - (_local10 * _local11)); _local18 = ((_arg2.y * _local14) - (_local10 * _local12)); _local19 = ((_local15 * _local18) - (_local16 * _local17)); _local20 = ((_local9 * _local18) - (_local16 * _local10)); _local21 = ((_local15 * _local10) - (_local9 * _local17)); return (new ScreenVertex(_local9, _local10, (((_local20 * _arg1.z) + (_local21 * _arg2.z)) / _local19))); } public static function distanceSqr(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{ return ((((_arg1 - _arg3) * (_arg1 - _arg3)) + ((_arg2 - _arg4) * (_arg2 - _arg4)))); } } }//package away3d.core.draw
Section 58
//FogFilter (away3d.core.filter.FogFilter) package away3d.core.filter { import away3d.core.draw.*; import away3d.containers.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.materials.*; public class FogFilter implements IPrimitiveFilter { private var _subdivisions:int; private var _material:IFogMaterial; private var _fogPrimitives:Array; private var _primitives:Array; private var _maxZ:int; protected var ini:Init; private var _materialsDirty:Boolean;// = true private var i:int; private var _materials:Array; private var _minZ:Number; public function FogFilter(_arg1:Object=null):void{ _materialsDirty = true; super(); ini = Init.parse(_arg1); _material = (((ini.getMaterial("material") as IFogMaterial)) || (new ColorMaterial(0))); _minZ = ini.getNumber("minZ", 1000, {min:0}); _maxZ = ini.getNumber("maxZ", 5000, {min:0}); _subdivisions = ini.getInt("subdivisions", 20, {min:1, max:50}); _materials = ini.getArray("materials"); } public function updateMaterialColor(_arg1:uint):void{ var _local2:DrawFog; for each (_local2 in _fogPrimitives) { if ((_local2.material is ColorMaterial)){ _local2.material = new ColorMaterial(_arg1, {alpha:_local2.material.alpha}); }; }; } public function set minZ(_arg1:Number):void{ if (_minZ == _arg1){ return; }; _minZ = _arg1; _materialsDirty = true; } public function set subdivisions(_arg1:Number):void{ if (_subdivisions == _arg1){ return; }; _subdivisions = _arg1; _materialsDirty = true; } public function get minZ():Number{ return (_minZ); } public function set materials(_arg1:Array):void{ _materials = _arg1; _materialsDirty = true; } private function updateMaterials():void{ var _local1:int; var _local2:DrawFog; _materialsDirty = false; if (!_materials.length){ _local1 = _subdivisions; i = _local1; while (i--) { _materials.push(_material.clone()); }; } else { _local1 = _materials.length; }; i = _local1; _fogPrimitives = new Array(); while (i--) { (_materials[i] as IFogMaterial).alpha = ((0.45 * i) / _local1); _local2 = new DrawFog(); _local2.screenZ = (_minZ + (((_maxZ - _minZ) * i) / (_local1 - 1))); _local2.material = _materials[i]; _fogPrimitives.unshift(_local2); }; } public function set material(_arg1:IFogMaterial):void{ if (!(_arg1 is IFogMaterial)){ throw (new Error("FogFilter requires IFogMaterial")); }; _material = _arg1; _materialsDirty = true; } public function get material():IFogMaterial{ return (_material); } public function set maxZ(_arg1:Number):void{ if (_maxZ == _arg1){ return; }; _maxZ = _arg1; _materialsDirty = true; } public function get materials():Array{ return (_materials); } public function get subdivisions():Number{ return (_subdivisions); } public function get maxZ():Number{ return (_maxZ); } public function filter(_arg1:Array, _arg2:Scene3D, _arg3:Camera3D, _arg4:Clipping):Array{ var _local5:DrawFog; var _local6:DrawPrimitive; if (_materialsDirty){ updateMaterials(); }; if (((((!(_arg1.length)) || (!(_arg1[0].source)))) || (!((_arg1[0].source.session == _arg2.session))))){ return (_arg1); }; for each (_local5 in _fogPrimitives) { _local5.source = _arg2; _local5.clip = _arg4; _arg1.push(_local5); }; _primitives = []; for each (_local6 in _arg1) { if (_local6.screenZ < _maxZ){ _primitives.push(_local6); }; }; return (_primitives); } public function toString():String{ return ("FogFilter"); } } }//package away3d.core.filter
Section 59
//IPrimitiveFilter (away3d.core.filter.IPrimitiveFilter) package away3d.core.filter { import away3d.containers.*; import away3d.cameras.*; import away3d.core.clip.*; public interface IPrimitiveFilter { function filter(_arg1:Array, _arg2:Scene3D, _arg3:Camera3D, _arg4:Clipping):Array; } }//package away3d.core.filter
Section 60
//ZSortFilter (away3d.core.filter.ZSortFilter) package away3d.core.filter { import away3d.containers.*; import away3d.cameras.*; import away3d.core.clip.*; public class ZSortFilter implements IPrimitiveFilter { public function filter(_arg1:Array, _arg2:Scene3D, _arg3:Camera3D, _arg4:Clipping):Array{ _arg1.sortOn("screenZ", (Array.DESCENDING | Array.NUMERIC)); return (_arg1); } public function toString():String{ return ("ZSort"); } } }//package away3d.core.filter
Section 61
//Frustum (away3d.core.geom.Frustum) package away3d.core.geom { import away3d.core.base.*; import away3d.core.math.*; public class Frustum { private var _matrix:Matrix3D; private var _distance:Number; public var planes:Array; public static const IN:int = 1; public static const OUT:int = 0; public static const LEFT:int = 0; public static const NEAR:int = 4; public static const BOTTOM:int = 3; public static const TOP:int = 2; public static const FAR:int = 5; public static const RIGHT:int = 1; public static const INTERSECT:int = 2; public function Frustum(){ _matrix = new Matrix3D(); super(); planes = new Array(6); planes[LEFT] = new Plane3D(); planes[RIGHT] = new Plane3D(); planes[TOP] = new Plane3D(); planes[BOTTOM] = new Plane3D(); planes[NEAR] = new Plane3D(); planes[FAR] = new Plane3D(); } public function classifyAABB(_arg1:Array):int{ var _local2:int; var _local3:int; var _local4:Plane3D; var _local5:int; var _local6:int; _local2 = 0; _local3 = 0; while (_local3 < 6) { _local4 = Plane3D(planes[_local3]); _local5 = 0; _local6 = 0; while (_local6 < 8) { if (_local4.classifyPoint(_arg1[_local6]) == Plane3D.FRONT){ _local5++; }; _local6++; }; if (_local5 == 0){ return (OUT); }; if (_local5 == 8){ _local2++; }; _local3++; }; if (_local2 == 6){ return (IN); }; return (INTERSECT); } public function extractFromMatrix(_arg1:Matrix3D):void{ var _local2:Number; 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; var _local16:Number; var _local17:Number; var _local18:Plane3D; var _local19:Plane3D; var _local20:Plane3D; var _local21:Plane3D; var _local22:Plane3D; var _local23:Plane3D; _matrix = _arg1; _local2 = _arg1.sxx; _local3 = _arg1.sxy; _local4 = _arg1.sxz; _local5 = _arg1.tx; _local6 = _arg1.syx; _local7 = _arg1.syy; _local8 = _arg1.syz; _local9 = _arg1.ty; _local10 = _arg1.szx; _local11 = _arg1.szy; _local12 = _arg1.szz; _local13 = _arg1.tz; _local14 = _arg1.swx; _local15 = _arg1.swy; _local16 = _arg1.swz; _local17 = _arg1.tw; _local18 = Plane3D(planes[NEAR]); _local18.a = (_local14 + _local10); _local18.b = (_local15 + _local11); _local18.c = (_local16 + _local12); _local18.d = (_local17 + _local13); _local18.normalize(); _local19 = Plane3D(planes[FAR]); _local19.a = (-(_local10) + _local14); _local19.b = (-(_local11) + _local15); _local19.c = (-(_local12) + _local16); _local19.d = (-(_local13) + _local17); _local19.normalize(); _local20 = Plane3D(planes[LEFT]); _local20.a = (_local14 + _local2); _local20.b = (_local15 + _local3); _local20.c = (_local16 + _local4); _local20.d = (_local17 + _local5); _local20.normalize(); _local21 = Plane3D(planes[RIGHT]); _local21.a = (-(_local2) + _local14); _local21.b = (-(_local3) + _local15); _local21.c = (-(_local4) + _local16); _local21.d = (-(_local5) + _local17); _local21.normalize(); _local22 = Plane3D(planes[TOP]); _local22.a = (_local14 + _local6); _local22.b = (_local15 + _local7); _local22.c = (_local16 + _local8); _local22.d = (_local17 + _local9); _local22.normalize(); _local23 = Plane3D(planes[BOTTOM]); _local23.a = (-(_local6) + _local14); _local23.b = (-(_local7) + _local15); _local23.c = (-(_local8) + _local16); _local23.d = (-(_local9) + _local17); _local23.normalize(); } public function classifySphere(_arg1:Number3D, _arg2:Number):int{ var _local3:Plane3D; for each (_local3 in planes) { _distance = _local3.distance(_arg1); if (_distance < -(_arg2)){ return (OUT); }; if (Math.abs(_distance) < _arg2){ return (INTERSECT); }; }; return (IN); } public function classifyObject3D(_arg1:Object3D):int{ return (classifySphere(_arg1.sceneTransform.position, _arg1.boundingRadius)); } public function classifyRadius(_arg1:Number):int{ var _local2:Plane3D; for each (_local2 in planes) { if (_local2.d < -(_arg1)){ return (OUT); }; if (Math.abs(_local2.d) < _arg1){ return (INTERSECT); }; }; return (IN); } } }//package away3d.core.geom
Section 62
//Line2D (away3d.core.geom.Line2D) package away3d.core.geom { import away3d.core.draw.*; public class Line2D { public var a:Number; public var c:Number; public var b:Number; public function Line2D(_arg1:Number, _arg2:Number, _arg3:Number){ this.a = _arg1; this.b = _arg2; this.c = _arg3; } public function toString():String{ return ((((((("line{ a: " + a) + " b: ") + b) + " c:") + c) + " }")); } public function distance(_arg1:ScreenVertex):Number{ return ((sideV(_arg1) / Math.sqrt(((a * a) + (b * b))))); } public function side(_arg1:Number, _arg2:Number):Number{ return ((((a * _arg1) + (b * _arg2)) + c)); } public function sideV(_arg1:ScreenVertex):Number{ return ((((a * _arg1.x) + (b * _arg1.y)) + c)); } public static function cross(_arg1:Line2D, _arg2:Line2D):ScreenVertex{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = ((_arg1.a * _arg2.b) - (_arg1.b * _arg2.a)); _local4 = ((_arg1.b * _arg2.c) - (_arg1.c * _arg2.b)); _local5 = ((_arg2.a * _arg1.c) - (_arg1.a * _arg2.c)); return (new ScreenVertex((_local4 / _local3), (_local5 / _local3), 0)); } public static function from2points(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Line2D{ var _local5:Number; var _local6:Number; var _local7:Number; _local5 = (_arg4 - _arg2); _local6 = (_arg1 - _arg3); _local7 = -(((_local6 * _arg2) + (_local5 * _arg1))); return (new Line2D(_local5, _local6, _local7)); } } }//package away3d.core.geom
Section 63
//Plane3D (away3d.core.geom.Plane3D) package away3d.core.geom { import away3d.core.base.*; import away3d.core.math.*; public class Plane3D { private var _point:Number3D; private var _len:Number; public var a:Number; public var b:Number; public var c:Number; public var d:Number; public static const BACK:int = -1; public static const FRONT:int = 1; public static const EPSILON:Number = 0.001; public static const INTERSECT:int = 0; public function Plane3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){ _point = new Number3D(); super(); this.a = _arg1; this.b = _arg2; this.c = _arg3; this.d = _arg4; } public function closestPointFrom(_arg1:Number3D):Number3D{ var _local2:Number3D; var _local3:Number; _point.x = 0; _point.y = 0; if (c != 0){ _point.z = (-(d) / c); } else { _point.z = (-(d) / b); }; _local2 = new Number3D(); _local2.sub(_arg1, _point); _local3 = (((a * _point.x) + (b * _point.y)) + (c * _point.z)); _local2.x = (_local2.x - (_local3 * a)); _local2.y = (_local2.y - (_local3 * b)); _local2.z = (_local2.z - (_local3 * c)); return (_local2); } public function from3vertices(_arg1:Vertex, _arg2:Vertex, _arg3:Vertex):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; _local4 = (_arg2.x - _arg1.x); _local5 = (_arg2.y - _arg1.y); _local6 = (_arg2.z - _arg1.z); _local7 = (_arg3.x - _arg1.x); _local8 = (_arg3.y - _arg1.y); _local9 = (_arg3.z - _arg1.z); a = ((_local5 * _local9) - (_local6 * _local8)); b = ((_local6 * _local7) - (_local4 * _local9)); c = ((_local4 * _local8) - (_local5 * _local7)); d = -((((a * _arg1.x) + (b * _arg1.y)) + (c * _arg1.z))); } public function fromNormalAndPoint(_arg1:Number3D, _arg2:Number3D):void{ a = _arg1.x; b = _arg1.y; c = _arg1.z; d = -((((a * _arg2.x) + (b * _arg2.y)) + (c * _arg2.z))); _point = _arg1; } public function normalize():Plane3D{ var _local1:Number; _local1 = Math.sqrt((((a * a) + (b * b)) + (c * c))); a = (a / _local1); b = (b / _local1); c = (c / _local1); d = (d / _local1); return (this); } public function transform(_arg1:Matrix3D):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = a; _local3 = b; _local4 = c; _local5 = d; a = ((((_local2 * _arg1.sxx) + (_local3 * _arg1.syx)) + (_local4 * _arg1.szx)) + (_local5 * _arg1.swx)); b = ((((_local2 * _arg1.sxy) + (_local3 * _arg1.syy)) + (_local4 * _arg1.szy)) + (_local5 * _arg1.swy)); c = ((((_local2 * _arg1.sxz) + (_local3 * _arg1.syz)) + (_local4 * _arg1.szz)) + (_local5 * _arg1.swz)); d = ((((_local2 * _arg1.tx) + (_local3 * _arg1.ty)) + (_local4 * _arg1.tz)) + (_local5 * _arg1.tw)); normalize(); } public function getIntersectionLine(_arg1:Vertex, _arg2:Vertex):Vertex{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = ((((_point.x * _arg1.x) + (_point.y * _arg1.y)) + (_point.z * _arg1.z)) - d); _local4 = ((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d); _local5 = (((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d) / (_local4 - _local3)); return (new Vertex((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5)))); } public function classifyPoint(_arg1:Number3D):int{ var _local2:Number; _local2 = ((((a * _arg1.x) + (b * _arg1.y)) + (c * _arg1.z)) + d); if ((((_local2 > -(EPSILON))) && ((_local2 < EPSILON)))){ return (Plane3D.INTERSECT); }; if (_local2 < 0){ return (Plane3D.BACK); }; if (_local2 > 0){ return (Plane3D.FRONT); }; return (Plane3D.INTERSECT); } public function distance(_arg1:Number3D):Number{ _len = ((((a * _arg1.x) + (b * _arg1.y)) + (c * _arg1.z)) + d); if ((((_len > -(EPSILON))) && ((_len < EPSILON)))){ _len = 0; }; return (_len); } public function getIntersectionLineNumbers(_arg1:Number3D, _arg2:Number3D):Number3D{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = ((((_point.x * _arg1.x) + (_point.y * _arg1.y)) + (_point.z * _arg1.z)) - d); _local4 = ((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d); _local5 = (((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d) / (_local4 - _local3)); return (new Number3D((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5)))); } public function from3points(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; _local4 = (_arg2.x - _arg1.x); _local5 = (_arg2.y - _arg1.y); _local6 = (_arg2.z - _arg1.z); _local7 = (_arg3.x - _arg1.x); _local8 = (_arg3.y - _arg1.y); _local9 = (_arg3.z - _arg1.z); a = ((_local5 * _local9) - (_local6 * _local8)); b = ((_local6 * _local7) - (_local4 * _local9)); c = ((_local4 * _local8) - (_local5 * _local7)); d = -((((a * _arg1.x) + (b * _arg1.y)) + (c * _arg1.z))); } } }//package away3d.core.geom
Section 64
//AmbientLight (away3d.core.light.AmbientLight) package away3d.core.light { import flash.display.*; import away3d.lights.*; public class AmbientLight extends LightPrimitive { public var light:AmbientLight3D; public function updateAmbientBitmap(_arg1:Number):void{ this.ambient = _arg1; ambientBitmap = new BitmapData(0x0100, 0x0100, false, ((int(((_arg1 * red) << 16)) | int(((_arg1 * green) << 8))) | int((_arg1 * blue)))); ambientBitmap.lock(); } } }//package away3d.core.light
Section 65
//DirectionalLight (away3d.core.light.DirectionalLight) package away3d.core.light { import flash.geom.*; import flash.display.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.math.*; import flash.utils.*; import away3d.lights.*; import away3d.events.*; import flash.filters.*; public class DirectionalLight extends LightPrimitive { private var mod:Number; private var _green:Number; public var ambientColorTransform:ColorTransform; private var _light:DirectionalLight3D; private var _shape:Shape; public var normalMatrixDiffuseTransform:Dictionary; public var diffuseTransform:Dictionary; private var _szx:Number; private var _blue:Number; private var _szy:Number; public var normalMatrixSpecularTransform:Dictionary; private var cameraTransform:Matrix3D; private var nx:Number; private var _szz:Number; private var halfVector:Number3D; private var _red:Number; private var _matrix:Matrix; private var cameraDirection:Number3D; private var ny:Number; private var transform:Matrix3D; public var diffuseColorTransform:ColorTransform; private var _normalMatrix:ColorMatrixFilter; public var specularTransform:Dictionary; private var halfTransform:Matrix3D; private var direction:Number3D; public function DirectionalLight(){ _normalMatrix = new ColorMatrixFilter(); _matrix = new Matrix(); _shape = new Shape(); transform = new Matrix3D(); cameraDirection = new Number3D(); halfVector = new Number3D(); halfTransform = new Matrix3D(); direction = new Number3D(); normalMatrixDiffuseTransform = new Dictionary(true); normalMatrixSpecularTransform = new Dictionary(true); super(); } public function updateAmbientBitmap():void{ ambientBitmap = new BitmapData(0x0100, 0x0100, false, ((int((((ambient * red) * 0xFF) << 16)) | int((((ambient * green) * 0xFF) << 8))) | int(((ambient * blue) * 0xFF)))); ambientBitmap.lock(); ambientColorTransform = new ColorTransform(1, 1, 1, 1, ((ambient * red) * 0xFF), ((ambient * green) * 0xFF), ((ambient * blue) * 0xFF), 0); } public function setNormalMatrixSpecularTransform(_arg1:Object3D, _arg2:View3D, _arg3:Number, _arg4:Number):void{ if (!normalMatrixSpecularTransform[_arg1]){ normalMatrixSpecularTransform[_arg1] = new Dictionary(true); }; _red = (((red * 2) + _arg4) * _arg3); _green = (((green * 2) + _arg4) * _arg3); _blue = (((blue * 2) + _arg4) * _arg3); _szx = specularTransform[_arg1][_arg2].szx; _szy = -(specularTransform[_arg1][_arg2].szy); _szz = specularTransform[_arg1][_arg2].szz; _normalMatrix.matrix = [(_szx * _red), (_green * _szy), (_blue * _szz), 0, (((-(_red) * 127) * ((_szx + _szy) + _szz)) - ((127 * _arg4) * _arg3)), (_szx * _red), (_green * _szy), (_blue * _szz), 0, (((-(_green) * 127) * ((_szx + _szy) + _szz)) - ((127 * _arg4) * _arg3)), (_szx * _red), (_green * _szy), (_blue * _szz), 0, (((-(_blue) * 127) * ((_szx + _szy) + _szz)) - ((127 * _arg4) * _arg3)), 0, 0, 0, 1, 0]; normalMatrixSpecularTransform[_arg1][_arg2] = _normalMatrix.clone(); } public function get light():DirectionalLight3D{ return (_light); } public function setSpecularTransform(_arg1:Object3D, _arg2:View3D):void{ cameraTransform = _arg2.camera.transform; cameraDirection.x = -(cameraTransform.sxz); cameraDirection.y = -(cameraTransform.syz); cameraDirection.z = -(cameraTransform.szz); halfVector.add(cameraDirection, direction); halfVector.normalize(); nx = halfVector.x; ny = halfVector.y; mod = Math.sqrt(((nx * nx) + (ny * ny))); halfTransform.rotationMatrix((-(ny) / mod), (nx / mod), 0, Math.acos(-(halfVector.z))); if (!specularTransform[_arg1][_arg2]){ specularTransform[_arg1][_arg2] = new Matrix3D(); }; specularTransform[_arg1][_arg2].multiply3x3(halfTransform, _arg1.sceneTransform); specularTransform[_arg1][_arg2].normalize(specularTransform[_arg1][_arg2]); } public function updateDirection(_arg1:Object3DEvent):void{ direction.x = _light.x; direction.y = _light.y; direction.z = _light.z; direction.normalize(); nx = direction.x; ny = direction.y; mod = Math.sqrt(((nx * nx) + (ny * ny))); transform.rotationMatrix((ny / mod), (-(nx) / mod), 0, -(Math.acos(-(direction.z)))); clearTransform(); } public function clearTransform():void{ diffuseTransform = new Dictionary(true); specularTransform = new Dictionary(true); normalMatrixDiffuseTransform = new Dictionary(true); normalMatrixSpecularTransform = new Dictionary(true); } public function setDiffuseTransform(_arg1:Object3D):void{ if (!diffuseTransform[_arg1]){ diffuseTransform[_arg1] = new Matrix3D(); }; diffuseTransform[_arg1].multiply3x3(transform, _arg1.sceneTransform); diffuseTransform[_arg1].normalize(diffuseTransform[_arg1]); } public function setNormalMatrixDiffuseTransform(_arg1:Object3D):void{ _red = ((red * 2) * diffuse); _green = ((green * 2) * diffuse); _blue = ((blue * 2) * diffuse); _szx = diffuseTransform[_arg1].szx; _szy = -(diffuseTransform[_arg1].szy); _szz = diffuseTransform[_arg1].szz; _normalMatrix.matrix = [(_szx * _red), (_green * _szy), (_blue * _szz), 0, ((-(_red) * 127) * ((_szx + _szy) + _szz)), (_szx * _red), (_green * _szy), (_blue * _szz), 0, ((-(_green) * 127) * ((_szx + _szy) + _szz)), (_szx * _red), (_green * _szy), (_blue * _szz), 0, ((-(_blue) * 127) * ((_szx + _szy) + _szz)), 0, 0, 0, 1, 0]; normalMatrixDiffuseTransform[_arg1] = _normalMatrix.clone(); } public function set light(_arg1:DirectionalLight3D):void{ _light = _arg1; _arg1.addOnSceneTransformChange(updateDirection); } public function updateAmbientDiffuseBitmap():void{ var _local1:Array; var _local2:Array; var _local3:Array; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; ambientDiffuseBitmap = new BitmapData(0x0100, 0x0100, false, 0); ambientDiffuseBitmap.lock(); _matrix.createGradientBox(0x0100, 0x0100, 0, 0, 0); _local1 = []; _local2 = []; _local3 = []; _local4 = 15; while (_local4--) { _local5 = (((_local4 * diffuse) / 14) + ambient); if (_local5 > 1){ _local5 = 1; }; _local6 = (((_local4 * diffuse) / 14) + ambient); if (_local6 > 1){ _local6 = 1; }; _local7 = (((_local4 * diffuse) / 14) + ambient); if (_local7 > 1){ _local7 = 1; }; _local1.push((((((_local5 * red) * 0xFF) << 16) | (((_local6 * green) * 0xFF) << 8)) | ((_local7 * blue) * 0xFF))); _local2.push(1); _local3.push(int((30 + (((225 * 2) * Math.acos((_local4 / 14))) / Math.PI)))); }; _shape.graphics.clear(); _shape.graphics.beginGradientFill(GradientType.LINEAR, _local1, _local2, _local3, _matrix); _shape.graphics.drawRect(0, 0, 0x0100, 0x0100); ambientDiffuseBitmap.draw(_shape); } public function updateDiffuseBitmap():void{ var _local1:Array; var _local2:Array; var _local3:Array; var _local4:int; var _local5:Number; var _local6:Number; var _local7:Number; diffuseBitmap = new BitmapData(0x0100, 0x0100, false, 0); diffuseBitmap.lock(); _matrix.createGradientBox(0x0100, 0x0100, 0, 0, 0); _local1 = []; _local2 = []; _local3 = []; _local4 = 15; while (_local4--) { _local5 = ((_local4 * diffuse) / 14); if (_local5 > 1){ _local5 = 1; }; _local6 = ((_local4 * diffuse) / 14); if (_local6 > 1){ _local6 = 1; }; _local7 = ((_local4 * diffuse) / 14); if (_local7 > 1){ _local7 = 1; }; _local1.push((((((_local5 * red) * 0xFF) << 16) | (((_local6 * green) * 0xFF) << 8)) | ((_local7 * blue) * 0xFF))); _local2.push(1); _local3.push(int((30 + (((225 * 2) * Math.acos((_local4 / 14))) / Math.PI)))); }; _shape.graphics.clear(); _shape.graphics.beginGradientFill(GradientType.LINEAR, _local1, _local2, _local3, _matrix); _shape.graphics.drawRect(0, 0, 0x0100, 0x0100); diffuseBitmap.draw(_shape); diffuseColorTransform = new ColorTransform((diffuse * red), (diffuse * green), (diffuse * blue), 1, 0, 0, 0, 0); } public function updateSpecularBitmap():void{ var _local1:Array; var _local2:Array; var _local3:Array; var _local4:int; specularBitmap = new BitmapData(0x0200, 0x0200, false, 0); specularBitmap.lock(); _matrix.createGradientBox(0x0200, 0x0200, 0, 0, 0); _local1 = []; _local2 = []; _local3 = []; _local4 = 15; while (_local4--) { _local1.push((((((((_local4 * specular) * red) * 0xFF) / 14) << 16) + (((((_local4 * specular) * green) * 0xFF) / 14) << 8)) + ((((_local4 * specular) * blue) * 0xFF) / 14))); _local2.push(1); _local3.push(int((30 + (((225 * 2) * Math.acos(Math.pow((_local4 / 14), (1 / 20)))) / Math.PI)))); }; _shape.graphics.clear(); _shape.graphics.beginGradientFill(GradientType.RADIAL, _local1, _local2, _local3, _matrix); _shape.graphics.drawCircle(0xFF, 0xFF, 0xFF); specularBitmap.draw(_shape); } } }//package away3d.core.light
Section 66
//ILightConsumer (away3d.core.light.ILightConsumer) package away3d.core.light { public interface ILightConsumer { function get points():Array; function pointLight(_arg1:PointLight):void; function get directionals():Array; function get numLights():int; function directionalLight(_arg1:DirectionalLight):void; function clear():void; function get ambients():Array; function ambientLight(_arg1:AmbientLight):void; } }//package away3d.core.light
Section 67
//ILightProvider (away3d.core.light.ILightProvider) package away3d.core.light { import away3d.core.base.*; public interface ILightProvider { function get debug():Boolean; function get debugPrimitive():Object3D; function light(_arg1:ILightConsumer):void; } }//package away3d.core.light
Section 68
//LightArray (away3d.core.light.LightArray) package away3d.core.light { public class LightArray implements ILightConsumer { private var _points:Array; private var _numLights:int; private var _directionals:Array; private var _ambients:Array; public function get numLights():int{ return (_numLights); } public function get directionals():Array{ return (_directionals); } public function directionalLight(_arg1:DirectionalLight):void{ _directionals.push(_arg1); _numLights++; } public function clear():void{ _ambients = []; _directionals = []; _points = []; _numLights = 0; } public function get ambients():Array{ return (_ambients); } public function get points():Array{ return (_points); } public function ambientLight(_arg1:AmbientLight):void{ _ambients.push(_arg1); _numLights++; } public function pointLight(_arg1:PointLight):void{ _points.push(_arg1); _numLights++; } } }//package away3d.core.light
Section 69
//LightPrimitive (away3d.core.light.LightPrimitive) package away3d.core.light { import flash.display.*; public class LightPrimitive { public var green:Number; public var specular:Number; public var red:Number; public var radius:Number; public var ambient:Number; public var specularBitmap:BitmapData; public var blue:Number; public var ambientBitmap:BitmapData; public var diffuse:Number; public var diffuseBitmap:BitmapData; public var ambientDiffuseBitmap:BitmapData; public var fallOff:Number; } }//package away3d.core.light
Section 70
//PointLight (away3d.core.light.PointLight) package away3d.core.light { import away3d.containers.*; import away3d.core.math.*; import flash.utils.*; import away3d.lights.*; import away3d.events.*; public class PointLight extends LightPrimitive { public var viewPositions:Dictionary; private var _light:PointLight3D; public function get light():PointLight3D{ return (_light); } public function updatePosition(_arg1:Object3DEvent):void{ clearViewPositions(); } public function set light(_arg1:PointLight3D):void{ _light = _arg1; _arg1.addOnSceneTransformChange(updatePosition); } public function setViewPosition(_arg1:View3D):void{ if (!viewPositions[_arg1]){ viewPositions[_arg1] = new Number3D(); }; viewPositions[_arg1].clone(_arg1.cameraVarsStore.viewTransformDictionary[_light].position); } public function clearViewPositions():void{ viewPositions = new Dictionary(true); } } }//package away3d.core.light
Section 71
//Matrix3D (away3d.core.math.Matrix3D) package away3d.core.math { public final class Matrix3D { private var xx:Number; private var xy:Number; private var xz:Number; private var _right:Number3D; private var yw:Number; private var yy:Number; private var yz:Number; private var scos:Number; private var nCos:Number; private var zw:Number; private var _up:Number3D; private var m211:Number; private var m213:Number; private var m212:Number; private var m214:Number; private var suv:Number; private var zz:Number; private var suw:Number; private var su:Number; private var sv:Number; private var m221:Number; private var m222:Number; private var m223:Number; private var m224:Number; private var sw:Number; private var d:Number; private var w:Number; private var x:Number; private var y:Number; private var z:Number; private var svw:Number; private var m231:Number; private var m111:Number; private var m112:Number; private var _forward:Number3D; private var m114:Number; private var _position:Number3D; public var tw:Number;// = 1 private var m232:Number; private var m233:Number; private var m113:Number; public var swz:Number;// = 0 private var nSin:Number; public var swx:Number;// = 0 public var tx:Number;// = 0 public var ty:Number;// = 0 private var m234:Number; private var m241:Number; private var m121:Number; private var m122:Number; private var m123:Number; private var m124:Number; private var m243:Number; private var m244:Number; private var m242:Number; public var sxx:Number;// = 1 public var sxy:Number;// = 0 public var sxz:Number;// = 0 public var swy:Number;// = 0 public var tz:Number;// = 0 private var m131:Number; private var m132:Number; private var m133:Number; private var m134:Number; public var syx:Number;// = 0 public var syz:Number;// = 0 public var syy:Number;// = 1 private var m141:Number; private var m142:Number; private var m143:Number; private var m144:Number; public var szx:Number;// = 0 public var szz:Number;// = 1 public var szy:Number;// = 0 private var xw:Number; public function Matrix3D(){ _position = new Number3D(); _forward = new Number3D(); _up = new Number3D(); _right = new Number3D(); sxx = 1; sxy = 0; sxz = 0; tx = 0; syx = 0; syy = 1; syz = 0; ty = 0; szx = 0; szy = 0; szz = 1; tz = 0; swx = 0; swy = 0; swz = 0; tw = 1; super(); } public function get det():Number{ return ((((((sxx * syy) - (syx * sxy)) * szz) - (((sxx * szy) - (szx * sxy)) * syz)) + (((syx * szy) - (szx * syy)) * sxz))); } public function normalize(_arg1:Matrix3D):void{ d = Math.sqrt((((sxx * sxx) + (sxy * sxy)) + (sxz * sxz))); sxx = (sxx / d); sxy = (sxy / d); sxz = (sxz / d); d = Math.sqrt((((syx * syx) + (syy * syy)) + (syz * syz))); syx = (syx / d); syy = (syy / d); syz = (syz / d); d = Math.sqrt((((szx * szx) + (szy * szy)) + (szz * szz))); szx = (szx / d); szy = (szy / d); szz = (szz / d); } public function get right():Number3D{ _right.x = sxx; _right.y = sxy; _right.z = sxz; return (_right); } public function get position():Number3D{ _position.x = tx; _position.y = ty; _position.z = tz; return (_position); } public function multiply(_arg1:Matrix3D, _arg2:Matrix3D):void{ m111 = _arg1.sxx; m211 = _arg2.sxx; m121 = _arg1.syx; m221 = _arg2.syx; m131 = _arg1.szx; m231 = _arg2.szx; m112 = _arg1.sxy; m212 = _arg2.sxy; m122 = _arg1.syy; m222 = _arg2.syy; m132 = _arg1.szy; m232 = _arg2.szy; m113 = _arg1.sxz; m213 = _arg2.sxz; m123 = _arg1.syz; m223 = _arg2.syz; m133 = _arg1.szz; m233 = _arg2.szz; m114 = _arg1.tx; m214 = _arg2.tx; m124 = _arg1.ty; m224 = _arg2.ty; m134 = _arg1.tz; m234 = _arg2.tz; sxx = (((m111 * m211) + (m112 * m221)) + (m113 * m231)); sxy = (((m111 * m212) + (m112 * m222)) + (m113 * m232)); sxz = (((m111 * m213) + (m112 * m223)) + (m113 * m233)); tx = ((((m111 * m214) + (m112 * m224)) + (m113 * m234)) + m114); syx = (((m121 * m211) + (m122 * m221)) + (m123 * m231)); syy = (((m121 * m212) + (m122 * m222)) + (m123 * m232)); syz = (((m121 * m213) + (m122 * m223)) + (m123 * m233)); ty = ((((m121 * m214) + (m122 * m224)) + (m123 * m234)) + m124); szx = (((m131 * m211) + (m132 * m221)) + (m133 * m231)); szy = (((m131 * m212) + (m132 * m222)) + (m133 * m232)); szz = (((m131 * m213) + (m132 * m223)) + (m133 * m233)); tz = ((((m131 * m214) + (m132 * m224)) + (m133 * m234)) + m134); } public function inverse(_arg1:Matrix3D):void{ d = _arg1.det; if (Math.abs(d) < 0.001){ return; }; d = (1 / d); m111 = _arg1.sxx; m121 = _arg1.syx; m131 = _arg1.szx; m112 = _arg1.sxy; m122 = _arg1.syy; m132 = _arg1.szy; m113 = _arg1.sxz; m123 = _arg1.syz; m133 = _arg1.szz; m114 = _arg1.tx; m124 = _arg1.ty; m134 = _arg1.tz; sxx = (d * ((m122 * m133) - (m132 * m123))); sxy = (-(d) * ((m112 * m133) - (m132 * m113))); sxz = (d * ((m112 * m123) - (m122 * m113))); tx = (-(d) * (((m112 * ((m123 * m134) - (m133 * m124))) - (m122 * ((m113 * m134) - (m133 * m114)))) + (m132 * ((m113 * m124) - (m123 * m114))))); syx = (-(d) * ((m121 * m133) - (m131 * m123))); syy = (d * ((m111 * m133) - (m131 * m113))); syz = (-(d) * ((m111 * m123) - (m121 * m113))); ty = (d * (((m111 * ((m123 * m134) - (m133 * m124))) - (m121 * ((m113 * m134) - (m133 * m114)))) + (m131 * ((m113 * m124) - (m123 * m114))))); szx = (d * ((m121 * m132) - (m131 * m122))); szy = (-(d) * ((m111 * m132) - (m131 * m112))); szz = (d * ((m111 * m122) - (m121 * m112))); tz = (-(d) * (((m111 * ((m122 * m134) - (m132 * m124))) - (m121 * ((m112 * m134) - (m132 * m114)))) + (m131 * ((m112 * m124) - (m122 * m114))))); } public function set up(_arg1:Number3D):void{ this.syx = _arg1.x; this.syy = _arg1.y; this.syz = _arg1.z; } public function set right(_arg1:Number3D):void{ this.sxx = _arg1.x; this.sxy = _arg1.y; this.sxz = _arg1.z; } public function multiply4x3(_arg1:Matrix3D, _arg2:Matrix3D):void{ m111 = _arg1.sxx; m211 = _arg2.sxx; m121 = _arg1.syx; m221 = _arg2.syx; m131 = _arg1.szx; m231 = _arg2.szx; m112 = _arg1.sxy; m212 = _arg2.sxy; m122 = _arg1.syy; m222 = _arg2.syy; m132 = _arg1.szy; m232 = _arg2.szy; m113 = _arg1.sxz; m213 = _arg2.sxz; m123 = _arg1.syz; m223 = _arg2.syz; m133 = _arg1.szz; m233 = _arg2.szz; m114 = _arg1.tx; m214 = _arg2.tx; m124 = _arg1.ty; m224 = _arg2.ty; m134 = _arg1.tz; m234 = _arg2.tz; m141 = _arg1.swx; m241 = _arg2.swx; m142 = _arg1.swy; m242 = _arg2.swy; m143 = _arg1.swz; m243 = _arg2.swz; m144 = _arg1.tw; m244 = _arg2.tw; sxx = (((m111 * m211) + (m112 * m221)) + (m113 * m231)); sxy = (((m111 * m212) + (m112 * m222)) + (m113 * m232)); sxz = (((m111 * m213) + (m112 * m223)) + (m113 * m233)); tx = ((((m111 * m214) + (m112 * m224)) + (m113 * m234)) + m114); syx = (((m121 * m211) + (m122 * m221)) + (m123 * m231)); syy = (((m121 * m212) + (m122 * m222)) + (m123 * m232)); syz = (((m121 * m213) + (m122 * m223)) + (m123 * m233)); ty = ((((m121 * m214) + (m122 * m224)) + (m123 * m234)) + m124); szx = (((m131 * m211) + (m132 * m221)) + (m133 * m231)); szy = (((m131 * m212) + (m132 * m222)) + (m133 * m232)); szz = (((m131 * m213) + (m132 * m223)) + (m133 * m233)); tz = ((((m131 * m214) + (m132 * m224)) + (m133 * m234)) + m134); swx = (((m141 * m211) + (m142 * m221)) + (m143 * m231)); swy = (((m141 * m212) + (m142 * m222)) + (m143 * m232)); swz = (((m141 * m213) + (m142 * m223)) + (m143 * m233)); tw = ((((m141 * m214) + (m142 * m224)) + (m143 * m234)) + m144); } public function multiplyVector3x3(_arg1:Number3D):void{ var _local2:Number; var _local3:Number; var _local4:Number; _local2 = _arg1.x; _local3 = _arg1.y; _local4 = _arg1.z; _arg1.x = (((_local2 * sxx) + (_local3 * sxy)) + (_local4 * sxz)); _arg1.y = (((_local2 * syx) + (_local3 * syy)) + (_local4 * syz)); _arg1.z = (((_local2 * szx) + (_local3 * szy)) + (_local4 * szz)); } public function multiply4x4(_arg1:Matrix3D, _arg2:Matrix3D):void{ m111 = _arg1.sxx; m211 = _arg2.sxx; m121 = _arg1.syx; m221 = _arg2.syx; m131 = _arg1.szx; m231 = _arg2.szx; m141 = _arg1.swx; m241 = _arg2.swx; m112 = _arg1.sxy; m212 = _arg2.sxy; m122 = _arg1.syy; m222 = _arg2.syy; m132 = _arg1.szy; m232 = _arg2.szy; m142 = _arg1.swy; m242 = _arg2.swy; m113 = _arg1.sxz; m213 = _arg2.sxz; m123 = _arg1.syz; m223 = _arg2.syz; m133 = _arg1.szz; m233 = _arg2.szz; m143 = _arg1.swz; m243 = _arg2.swz; m114 = _arg1.tx; m214 = _arg2.tx; m124 = _arg1.ty; m224 = _arg2.ty; m134 = _arg1.tz; m234 = _arg2.tz; m144 = _arg1.tw; m244 = _arg2.tw; sxx = ((((m111 * m211) + (m112 * m221)) + (m113 * m231)) + (m114 * m241)); sxy = ((((m111 * m212) + (m112 * m222)) + (m113 * m232)) + (m114 * m242)); sxz = ((((m111 * m213) + (m112 * m223)) + (m113 * m233)) + (m114 * m243)); tx = ((((m111 * m214) + (m112 * m224)) + (m113 * m234)) + (m114 * m244)); syx = ((((m121 * m211) + (m122 * m221)) + (m123 * m231)) + (m124 * m241)); syy = ((((m121 * m212) + (m122 * m222)) + (m123 * m232)) + (m124 * m242)); syz = ((((m121 * m213) + (m122 * m223)) + (m123 * m233)) + (m124 * m243)); ty = ((((m121 * m214) + (m122 * m224)) + (m123 * m234)) + (m124 * m244)); szx = ((((m131 * m211) + (m132 * m221)) + (m133 * m231)) + (m134 * m241)); szy = ((((m131 * m212) + (m132 * m222)) + (m133 * m232)) + (m134 * m242)); szz = ((((m131 * m213) + (m132 * m223)) + (m133 * m233)) + (m134 * m243)); tz = ((((m131 * m214) + (m132 * m224)) + (m133 * m234)) + (m134 * m244)); swx = ((((m141 * m211) + (m142 * m221)) + (m143 * m231)) + (m144 * m241)); swy = ((((m141 * m212) + (m142 * m222)) + (m143 * m232)) + (m144 * m242)); swz = ((((m141 * m213) + (m142 * m223)) + (m143 * m233)) + (m144 * m243)); tw = ((((m141 * m214) + (m142 * m224)) + (m143 * m234)) + (m144 * m244)); } public function scale(_arg1:Matrix3D, _arg2:Number, _arg3:Number, _arg4:Number):void{ sxx = (_arg1.sxx * _arg2); syx = (_arg1.syx * _arg2); szx = (_arg1.szx * _arg2); sxy = (_arg1.sxy * _arg3); syy = (_arg1.syy * _arg3); szy = (_arg1.szy * _arg3); sxz = (_arg1.sxz * _arg4); syz = (_arg1.syz * _arg4); szz = (_arg1.szz * _arg4); } public function perspectiveProjectionMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ var _local5:Number; var _local6:Number; var _local7:Number; _local5 = ((_arg1 / 2) * (Math.PI / 180)); _local6 = Math.tan(_local5); _local7 = (1 / _local6); sxx = (_local7 / _arg2); sxy = (sxz = (tx = 0)); syy = _local7; syx = (syz = (ty = 0)); szx = (szy = 0); szz = -(((_arg3 + _arg4) / (_arg3 - _arg4))); tz = (((2 * _arg4) * _arg3) / (_arg3 - _arg4)); swx = (swy = (tw = 0)); swz = 1; } public function clone(_arg1:Matrix3D):Matrix3D{ sxx = _arg1.sxx; sxy = _arg1.sxy; sxz = _arg1.sxz; tx = _arg1.tx; syx = _arg1.syx; syy = _arg1.syy; syz = _arg1.syz; ty = _arg1.ty; szx = _arg1.szx; szy = _arg1.szy; szz = _arg1.szz; tz = _arg1.tz; swx = _arg1.swx; swy = _arg1.swy; swz = _arg1.swz; tw = _arg1.tw; return (_arg1); } public function toString():String{ var _local1:String; _local1 = ""; _local1 = (_local1 + ((((((((int((sxx * 1000)) / 1000) + "\t\t") + (int((sxy * 1000)) / 1000)) + "\t\t") + (int((sxz * 1000)) / 1000)) + "\t\t") + (int((tx * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((syx * 1000)) / 1000) + "\t\t") + (int((syy * 1000)) / 1000)) + "\t\t") + (int((syz * 1000)) / 1000)) + "\t\t") + (int((ty * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((szx * 1000)) / 1000) + "\t\t") + (int((szy * 1000)) / 1000)) + "\t\t") + (int((szz * 1000)) / 1000)) + "\t\t") + (int((tz * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((swx * 1000)) / 1000) + "\t\t") + (int((swy * 1000)) / 1000)) + "\t\t") + (int((swz * 1000)) / 1000)) + "\t\t") + (int((tw * 1000)) / 1000)) + "\n")); return (_local1); } public function copy3x3(_arg1:Matrix3D):Matrix3D{ sxx = _arg1.sxx; sxy = _arg1.sxy; sxz = _arg1.sxz; syx = _arg1.syx; syy = _arg1.syy; syz = _arg1.syz; szx = _arg1.szx; szy = _arg1.szy; szz = _arg1.szz; return (this); } public function clear():void{ tx = (sxy = (sxz = (syz = (ty = (syz = (szx = (szy = (tz = 0)))))))); sxx = (syy = (szz = 1)); } public function scaleMatrix(_arg1:Number, _arg2:Number, _arg3:Number):void{ tx = (sxy = (sxz = 0)); syz = (ty = (syz = 0)); szx = (szy = (tz = 0)); sxx = _arg1; syy = _arg2; szz = _arg3; } public function get up():Number3D{ _up.x = syx; _up.y = syy; _up.z = syz; return (_up); } public function inverse4x4(_arg1:Matrix3D):void{ d = _arg1.det4x4; if (Math.abs(d) < 0.001){ return; }; d = (1 / d); m111 = _arg1.sxx; m121 = _arg1.syx; m131 = _arg1.szx; m141 = _arg1.swx; m112 = _arg1.sxy; m122 = _arg1.syy; m132 = _arg1.szy; m142 = _arg1.swy; m113 = _arg1.sxz; m123 = _arg1.syz; m133 = _arg1.szz; m143 = _arg1.swz; m114 = _arg1.tx; m124 = _arg1.ty; m134 = _arg1.tz; m144 = _arg1.tw; sxx = (d * (((m122 * ((m133 * m144) - (m143 * m134))) - (m132 * ((m123 * m144) - (m143 * m124)))) + (m142 * ((m123 * m134) - (m133 * m124))))); sxy = (-(d) * (((m112 * ((m133 * m144) - (m143 * m134))) - (m132 * ((m113 * m144) - (m143 * m114)))) + (m142 * ((m113 * m134) - (m133 * m114))))); sxz = (d * (((m112 * ((m123 * m144) - (m143 * m124))) - (m122 * ((m113 * m144) - (m143 * m114)))) + (m142 * ((m113 * m124) - (m123 * m114))))); tx = (-(d) * (((m112 * ((m123 * m134) - (m133 * m124))) - (m122 * ((m113 * m134) - (m133 * m114)))) + (m132 * ((m113 * m124) - (m123 * m114))))); syx = (-(d) * (((m121 * ((m133 * m144) - (m143 * m134))) - (m131 * ((m123 * m144) - (m143 * m124)))) + (m141 * ((m123 * m134) - (m133 * m124))))); syy = (d * (((m111 * ((m133 * m144) - (m143 * m134))) - (m131 * ((m113 * m144) - (m143 * m114)))) + (m141 * ((m113 * m134) - (m133 * m114))))); syz = (-(d) * (((m111 * ((m123 * m144) - (m143 * m124))) - (m121 * ((m113 * m144) - (m143 * m114)))) + (m141 * ((m113 * m124) - (m123 * m114))))); ty = (d * (((m111 * ((m123 * m134) - (m133 * m124))) - (m121 * ((m113 * m134) - (m133 * m114)))) + (m131 * ((m113 * m124) - (m123 * m114))))); szx = (d * (((m121 * ((m132 * m144) - (m142 * m134))) - (m131 * ((m122 * m144) - (m142 * m124)))) + (m141 * ((m122 * m134) - (m132 * m124))))); szy = (-(d) * (((m111 * ((m132 * m144) - (m142 * m134))) - (m131 * ((m112 * m144) - (m142 * m114)))) + (m141 * ((m112 * m134) - (m132 * m114))))); szz = (d * (((m111 * ((m122 * m144) - (m142 * m124))) - (m121 * ((m112 * m144) - (m142 * m114)))) + (m141 * ((m112 * m124) - (m122 * m114))))); tz = (-(d) * (((m111 * ((m122 * m134) - (m132 * m124))) - (m121 * ((m112 * m134) - (m132 * m114)))) + (m131 * ((m112 * m124) - (m122 * m114))))); swx = (-(d) * (((m121 * ((m132 * m143) - (m142 * m133))) - (m131 * ((m122 * m143) - (m142 * m123)))) + (m141 * ((m122 * m133) - (m132 * m123))))); swy = (d * (((m111 * ((m132 * m143) - (m142 * m133))) - (m131 * ((m112 * m143) - (m142 * m113)))) + (m141 * ((m112 * m133) - (m132 * m113))))); swz = (-(d) * (((m111 * ((m122 * m143) - (m142 * m123))) - (m121 * ((m112 * m143) - (m142 * m113)))) + (m141 * ((m112 * m123) - (m122 * m113))))); tw = (d * (((m111 * ((m122 * m133) - (m132 * m123))) - (m121 * ((m112 * m133) - (m132 * m113)))) + (m131 * ((m112 * m123) - (m122 * m113))))); } public function multiply3x3(_arg1:Matrix3D, _arg2:Matrix3D):void{ m111 = _arg1.sxx; m211 = _arg2.sxx; m121 = _arg1.syx; m221 = _arg2.syx; m131 = _arg1.szx; m231 = _arg2.szx; m112 = _arg1.sxy; m212 = _arg2.sxy; m122 = _arg1.syy; m222 = _arg2.syy; m132 = _arg1.szy; m232 = _arg2.szy; m113 = _arg1.sxz; m213 = _arg2.sxz; m123 = _arg1.syz; m223 = _arg2.syz; m133 = _arg1.szz; m233 = _arg2.szz; sxx = (((m111 * m211) + (m112 * m221)) + (m113 * m231)); sxy = (((m111 * m212) + (m112 * m222)) + (m113 * m232)); sxz = (((m111 * m213) + (m112 * m223)) + (m113 * m233)); syx = (((m121 * m211) + (m122 * m221)) + (m123 * m231)); syy = (((m121 * m212) + (m122 * m222)) + (m123 * m232)); syz = (((m121 * m213) + (m122 * m223)) + (m123 * m233)); szx = (((m131 * m211) + (m132 * m221)) + (m133 * m231)); szy = (((m131 * m212) + (m132 * m222)) + (m133 * m232)); szz = (((m131 * m213) + (m132 * m223)) + (m133 * m233)); tx = _arg1.tx; ty = _arg1.ty; tz = _arg1.tz; } public function orthographicProjectionMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{ var _local7:Matrix3D; sxx = (2 / (_arg2 - _arg1)); sxy = (sxz = 0); tx = ((_arg2 + _arg1) / (_arg2 - _arg1)); syy = (2 / (_arg4 - _arg3)); syx = (syz = 0); ty = ((_arg4 + _arg3) / (_arg4 - _arg3)); szx = (szy = 0); szz = (-2 / (_arg6 - _arg5)); tz = ((_arg6 + _arg5) / (_arg6 - _arg5)); swx = (swy = (swz = 0)); tw = 1; _local7 = new Matrix3D(); _local7.scaleMatrix(1, 1, -1); this.multiply(_local7, this); } public function translationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):void{ sxx = (syy = (szz = 1)); sxy = (sxz = (syz = (syz = (szx = (szy = 0))))); tx = _arg1; ty = _arg2; tz = _arg3; } public function quaternion2matrix(_arg1:Quaternion):void{ x = _arg1.x; y = _arg1.y; z = _arg1.z; w = _arg1.w; xx = (x * x); xy = (x * y); xz = (x * z); xw = (x * w); yy = (y * y); yz = (y * z); yw = (y * w); zz = (z * z); zw = (z * w); sxx = (1 - (2 * (yy + zz))); sxy = (2 * (xy - zw)); sxz = (2 * (xz + yw)); syx = (2 * (xy + zw)); syy = (1 - (2 * (xx + zz))); syz = (2 * (yz - xw)); szx = (2 * (xz - yw)); szy = (2 * (yz + xw)); szz = (1 - (2 * (xx + yy))); } public function get forward():Number3D{ _forward.x = szx; _forward.y = szy; _forward.z = szz; return (_forward); } public function set forward(_arg1:Number3D):void{ this.szx = _arg1.x; this.szy = _arg1.y; this.szz = _arg1.z; } public function rotationMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ nCos = Math.cos(_arg4); nSin = Math.sin(_arg4); scos = (1 - nCos); suv = ((_arg1 * _arg2) * scos); svw = ((_arg2 * _arg3) * scos); suw = ((_arg1 * _arg3) * scos); sw = (nSin * _arg3); sv = (nSin * _arg2); su = (nSin * _arg1); sxx = (nCos + ((_arg1 * _arg1) * scos)); sxy = (-(sw) + suv); sxz = (sv + suw); syx = (sw + suv); syy = (nCos + ((_arg2 * _arg2) * scos)); syz = (-(su) + svw); szx = (-(sv) + suw); szy = (su + svw); szz = (nCos + ((_arg3 * _arg3) * scos)); } public function compare(_arg1:Matrix3D):Boolean{ if (((((((((((((((((((((((!((sxx == _arg1.sxx))) || (!((sxy == _arg1.sxy))))) || (!((sxz == _arg1.sxz))))) || (!((tx == _arg1.tx))))) || (!((syx == _arg1.syx))))) || (!((syy == _arg1.syy))))) || (!((syz == _arg1.syz))))) || (!((ty == _arg1.ty))))) || (!((szx == _arg1.szx))))) || (!((szy == _arg1.szy))))) || (!((szz == _arg1.szz))))) || (!((tz == _arg1.tz))))){ return (false); }; return (true); } public function array2matrix(_arg1:Array, _arg2:Boolean, _arg3:Number):void{ if (_arg1.length >= 12){ if (_arg2){ sxx = _arg1[0]; sxy = -(_arg1[1]); sxz = -(_arg1[2]); tx = (-(_arg1[3]) * _arg3); syx = -(_arg1[4]); syy = _arg1[5]; syz = _arg1[6]; ty = (_arg1[7] * _arg3); szx = -(_arg1[8]); szy = _arg1[9]; szz = _arg1[10]; tz = (_arg1[11] * _arg3); } else { sxx = _arg1[0]; sxz = _arg1[1]; sxy = _arg1[2]; tx = (_arg1[3] * _arg3); szx = _arg1[4]; szz = _arg1[5]; szy = _arg1[6]; tz = (_arg1[7] * _arg3); syx = _arg1[8]; syz = _arg1[9]; syy = _arg1[10]; ty = (_arg1[11] * _arg3); }; }; if (_arg1.length >= 16){ swx = _arg1[12]; swy = _arg1[13]; swz = _arg1[14]; tw = _arg1[15]; } else { swx = (swy = (swz = 0)); tw = 1; }; } public function get det4x4():Number{ return (((((((((sxx * syy) - (syx * sxy)) * ((szz * tw) - (swz * tz))) - (((sxx * szy) - (szx * sxy)) * ((syz * tw) - (swz * ty)))) + (((sxx * swy) - (swx * sxy)) * ((syz * tz) - (szz * ty)))) + (((syx * szy) - (szx * syy)) * ((sxz * tw) - (swz * tx)))) - (((syx * swy) - (swx * syy)) * ((sxz * tz) - (szz * tx)))) + (((szx * swy) - (swx * szy)) * ((sxz * ty) - (syz * tx))))); } } }//package away3d.core.math
Section 72
//Number3D (away3d.core.math.Number3D) package away3d.core.math { public final class Number3D { private const MathPI:Number = 3.14159265358979; private var vy:Number; private var num:Number3D; private var mod:Number; private var vx:Number; private var vz:Number; private var m1:Matrix3D; private var dist:Number; public var x:Number; public var y:Number; public var z:Number; public static var BACKWARD:Number3D = new Number3D(0, 0, -1); ; public static var FORWARD:Number3D = new Number3D(0, 0, 1); ; public static var LEFT:Number3D = new Number3D(-1, 0, 0); ; public static var DOWN:Number3D = new Number3D(0, -1, 0); ; public static var UP:Number3D = new Number3D(0, 1, 0); ; public static var RIGHT:Number3D = new Number3D(1, 0, 0); ; public function Number3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Boolean=false){ this.x = _arg1; this.y = _arg2; this.z = _arg3; if (_arg4){ normalize(); }; } public function sub(_arg1:Number3D, _arg2:Number3D):void{ x = (_arg1.x - _arg2.x); y = (_arg1.y - _arg2.y); z = (_arg1.z - _arg2.z); } public function scale(_arg1:Number3D, _arg2:Number):void{ x = (_arg1.x * _arg2); y = (_arg1.y * _arg2); z = (_arg1.z * _arg2); } public function toString():String{ return (((((("x:" + x) + " y:") + y) + " z:") + z)); } public function dot(_arg1:Number3D):Number{ return ((((x * _arg1.x) + (y * _arg1.y)) + (z * _arg1.z))); } public function normalize(_arg1:Number=1):void{ mod = (modulo / _arg1); if (((!((mod == 0))) && (!((mod == 1))))){ x = (x / mod); y = (y / mod); z = (z / mod); }; } public function quaternion2euler(_arg1:Quaternion):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = ((_arg1.x * _arg1.y) + (_arg1.z * _arg1.w)); if (_local2 > 0.499){ x = (2 * Math.atan2(_arg1.x, _arg1.w)); y = (Math.PI / 2); z = 0; return; }; if (_local2 < -0.499){ x = (-2 * Math.atan2(_arg1.x, _arg1.w)); y = (-(Math.PI) / 2); z = 0; return; }; _local3 = (_arg1.x * _arg1.x); _local4 = (_arg1.y * _arg1.y); _local5 = (_arg1.z * _arg1.z); x = Math.atan2((((2 * _arg1.y) * _arg1.w) - ((2 * _arg1.x) * _arg1.z)), ((1 - (2 * _local4)) - (2 * _local5))); y = Math.asin((2 * _local2)); z = Math.atan2((((2 * _arg1.x) * _arg1.w) - ((2 * _arg1.y) * _arg1.z)), ((1 - (2 * _local3)) - (2 * _local5))); } public function cross(_arg1:Number3D, _arg2:Number3D):void{ if ((((this == _arg1)) || ((this == _arg2)))){ throw (new Error("resultant cross product cannot be the same instance as an input")); }; x = ((_arg2.y * _arg1.z) - (_arg2.z * _arg1.y)); y = ((_arg2.z * _arg1.x) - (_arg2.x * _arg1.z)); z = ((_arg2.x * _arg1.y) - (_arg2.y * _arg1.x)); } public function matrix2scale(_arg1:Matrix3D):void{ x = Math.sqrt((((_arg1.sxx * _arg1.sxx) + (_arg1.syx * _arg1.syx)) + (_arg1.szx * _arg1.szx))); y = Math.sqrt((((_arg1.sxy * _arg1.sxy) + (_arg1.syy * _arg1.syy)) + (_arg1.szy * _arg1.szy))); z = Math.sqrt((((_arg1.sxz * _arg1.sxz) + (_arg1.syz * _arg1.syz)) + (_arg1.szz * _arg1.szz))); } public function matrix2euler(_arg1:Matrix3D):void{ var _local2:Number; if (!m1){ m1 = new Matrix3D(); }; x = -(Math.atan2(_arg1.szy, _arg1.szz)); m1.rotationMatrix(1, 0, 0, x); m1.multiply(_arg1, m1); _local2 = Math.sqrt(((m1.sxx * m1.sxx) + (m1.syx * m1.syx))); y = Math.atan2(-(m1.szx), _local2); z = Math.atan2(-(m1.sxy), m1.syy); if (Math.round((z / MathPI)) == 1){ if (y > 0){ y = -((y - MathPI)); } else { y = -((y + MathPI)); }; z = (z - MathPI); if (x > 0){ x = (x - MathPI); } else { x = (x + MathPI); }; } else { if (Math.round((z / MathPI)) == -1){ if (y > 0){ y = -((y - MathPI)); } else { y = -((y + MathPI)); }; z = (z + MathPI); if (x > 0){ x = (x - MathPI); } else { x = (x + MathPI); }; } else { if (Math.round((x / MathPI)) == 1){ if (y > 0){ y = -((y - MathPI)); } else { y = -((y + MathPI)); }; x = (x - MathPI); if (z > 0){ z = (z - MathPI); } else { z = (z + MathPI); }; } else { if (Math.round((x / MathPI)) == -1){ if (y > 0){ y = -((y - MathPI)); } else { y = -((y + MathPI)); }; x = (x + MathPI); if (z > 0){ z = (z - MathPI); } else { z = (z + MathPI); }; }; }; }; }; } public function rotate(_arg1:Number3D, _arg2:Matrix3D):void{ vx = _arg1.x; vy = _arg1.y; vz = _arg1.z; x = (((vx * _arg2.sxx) + (vy * _arg2.sxy)) + (vz * _arg2.sxz)); y = (((vx * _arg2.syx) + (vy * _arg2.syy)) + (vz * _arg2.syz)); z = (((vx * _arg2.szx) + (vy * _arg2.szy)) + (vz * _arg2.szz)); } public function clone(_arg1:Number3D):void{ x = _arg1.x; y = _arg1.y; z = _arg1.z; } public function closestPointOnPlane(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D):Number3D{ if (!num){ num = new Number3D(); }; num.sub(_arg1, _arg2); dist = _arg3.dot(num); num.scale(_arg3, dist); num.sub(_arg1, num); return (num); } public function interpolate(_arg1:Number3D, _arg2:Number):void{ var _local3:Number3D; _local3 = new Number3D(); _local3.sub(_arg1, this); _local3.scale(_local3, _arg2); add(this, _local3); } public function add(_arg1:Number3D, _arg2:Number3D):void{ x = (_arg1.x + _arg2.x); y = (_arg1.y + _arg2.y); z = (_arg1.z + _arg2.z); } public function getAngle(_arg1:Number3D=null):Number{ if (_arg1 == null){ _arg1 = new Number3D(); }; return (Math.acos((dot(_arg1) / (modulo * _arg1.modulo)))); } public function distance(_arg1:Number3D):Number{ return (Math.sqrt(((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y))) + ((z - _arg1.z) * (z - _arg1.z))))); } public function get modulo():Number{ return (Math.sqrt((((x * x) + (y * y)) + (z * z)))); } public function transform(_arg1:Number3D, _arg2:Matrix3D):void{ vx = _arg1.x; vy = _arg1.y; vz = _arg1.z; x = ((((vx * _arg2.sxx) + (vy * _arg2.sxy)) + (vz * _arg2.sxz)) + _arg2.tx); y = ((((vx * _arg2.syx) + (vy * _arg2.syy)) + (vz * _arg2.syz)) + _arg2.ty); z = ((((vx * _arg2.szx) + (vy * _arg2.szy)) + (vz * _arg2.szz)) + _arg2.tz); } public function get modulo2():Number{ return ((((x * x) + (y * y)) + (z * z))); } public function equals(_arg1:Number3D):Boolean{ return ((((((_arg1.x == x)) && ((_arg1.y == y)))) && ((_arg1.z == z)))); } public static function getInterpolated(_arg1:Number3D, _arg2:Number3D, _arg3:Number):Number3D{ var _local4:Number3D; _local4 = new (Number3D); _local4.sub(_arg1, _arg2); _local4.scale(_local4, _arg3); _local4.add(_local4, _arg2); return (_local4); } } }//package away3d.core.math
Section 73
//Quaternion (away3d.core.math.Quaternion) package away3d.core.math { public final class Quaternion { private var fSinYaw:Number; private var z1:Number; public var z:Number; private var fCosPitch:Number; private var w1:Number; private var w2:Number; private var z2:Number; private var cos_a:Number; private var fSinRoll:Number; private var x1:Number; private var sin_a:Number; private var x2:Number; private var fCosPitchCosYaw:Number; private var fSinPitch:Number; private var y1:Number; private var y2:Number; private var fCosRoll:Number; private var fSinPitchSinYaw:Number; public var w:Number; public var x:Number; public var y:Number; private var fCosYaw:Number; public function normalize(_arg1:Number=1):void{ var _local2:Number; _local2 = (magnitude * _arg1); x = (x / _local2); y = (y / _local2); z = (z / _local2); w = (w / _local2); } public function get magnitude():Number{ return (Math.sqrt(((((w * w) + (x * x)) + (y * y)) + (z * z)))); } public function axis2quaternion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ sin_a = Math.sin((_arg4 / 2)); cos_a = Math.cos((_arg4 / 2)); this.x = (_arg1 * sin_a); this.y = (_arg2 * sin_a); this.z = (_arg3 * sin_a); w = cos_a; normalize(); } public function multiply(_arg1:Quaternion, _arg2:Quaternion):void{ w1 = _arg1.w; x1 = _arg1.x; y1 = _arg1.y; z1 = _arg1.z; w2 = _arg2.w; x2 = _arg2.x; y2 = _arg2.y; z2 = _arg2.z; w = ((((w1 * w2) - (x1 * x2)) - (y1 * y2)) - (z1 * z2)); x = ((((w1 * x2) + (x1 * w2)) + (y1 * z2)) - (z1 * y2)); y = ((((w1 * y2) + (y1 * w2)) + (z1 * x2)) - (x1 * z2)); z = ((((w1 * z2) + (z1 * w2)) + (x1 * y2)) - (y1 * x2)); } public function euler2quaternion(_arg1:Number, _arg2:Number, _arg3:Number):void{ fSinPitch = Math.sin((_arg1 * 0.5)); fCosPitch = Math.cos((_arg1 * 0.5)); fSinYaw = Math.sin((_arg2 * 0.5)); fCosYaw = Math.cos((_arg2 * 0.5)); fSinRoll = Math.sin((_arg3 * 0.5)); fCosRoll = Math.cos((_arg3 * 0.5)); fCosPitchCosYaw = (fCosPitch * fCosYaw); fSinPitchSinYaw = (fSinPitch * fSinYaw); x = ((fSinRoll * fCosPitchCosYaw) - (fCosRoll * fSinPitchSinYaw)); y = (((fCosRoll * fSinPitch) * fCosYaw) + ((fSinRoll * fCosPitch) * fSinYaw)); z = (((fCosRoll * fCosPitch) * fSinYaw) - ((fSinRoll * fSinPitch) * fCosYaw)); w = ((fCosRoll * fCosPitchCosYaw) + (fSinRoll * fSinPitchSinYaw)); } public function toString():String{ return ((((((((("{x:" + x) + " y:") + y) + " z:") + z) + " w:") + w) + "}")); } } }//package away3d.core.math
Section 74
//ConvexBlockProjector (away3d.core.project.ConvexBlockProjector) package away3d.core.project { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.cameras.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.block.*; import away3d.cameras.lenses.*; import away3d.blockers.*; public class ConvexBlockProjector implements IBlockerProvider, IPrimitiveProvider { private var _points:Array; private var _view:View3D; private var _baseIndex:Number; private var _pointsN:Array; private var _pointsS:Array; private var _screenVertices:Array; private var _convexBlock:ConvexBlock; private var _baseX:Number; private var _baseY:Number; private var _baseZ:Number; private var _screenX:Number; private var _screenY:Number; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _camera:Camera3D; private var _index:int; private var _vertices:Array; private var _lens:ILens; private var _i:int; private var _p:String; private var _s:String; public function ConvexBlockProjector(){ _points = []; _pointsN = []; _pointsS = []; super(); } public function get view():View3D{ return (_view); } private function cross(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Number{ return ((((_arg3 - _arg1) * (_arg6 - _arg2)) - ((_arg5 - _arg1) * (_arg4 - _arg2)))); } public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = _view.drawPrimitiveStore; } public function blockers(_arg1:Object3D, _arg2:Matrix3D, _arg3:IBlockerConsumer):void{ var _local4:Array; var _local5:Number; var _local6:int; _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _convexBlock = (_arg1 as ConvexBlock); _camera = _view.camera; _lens = _camera.lens; _vertices = _convexBlock.vertices; if (_vertices.length < 3){ return; }; _points.length = 0; _pointsN.length = 0; _pointsS.length = 0; _baseX = Infinity; _baseY = Infinity; _baseZ = Infinity; _p = ""; _lens.project(_arg2, _vertices, _screenVertices); _index = (_screenVertices.length / 3); while (_index--) { _screenX = _screenVertices[(_index * 3)]; _screenY = _screenVertices[((_index * 3) + 1)]; if ((((_baseY > _screenY)) || ((((_baseY == _screenY)) && ((_baseX > _screenX)))))){ _baseX = _screenX; _baseY = _screenY; _baseZ = _screenVertices[((_index * 3) + 2)]; _baseIndex = _index; }; _points[_points.length] = _baseX; _points[_points.length] = _baseY; _points[_points.length] = _baseZ; }; _index = (_points.length / 3); while (_index--) { _pointsN[_index] = ((_points[(_index * 3)] - _baseX) / (_points[((_index * 3) + 1)] - _baseY)); }; _pointsN[_baseIndex] = -(Infinity); _pointsN = _pointsN.sort((Array.NUMERIC | Array.RETURNINDEXEDARRAY)); _index = 0; while (_index < _pointsN.length) { _i = (_pointsN[_index] * 3); _pointsS[_pointsS.length] = _points[_i]; _pointsS[_pointsS.length] = _points[(_i + 1)]; _pointsS[_pointsS.length] = _points[(_i + 2)]; _index++; }; _local4 = [_pointsS[0], _pointsS[1], _pointsS[2], _pointsS[3], _pointsS[4], _pointsS[5]]; _i = 2; while (_i < _pointsS.length) { _local6 = _local4.length; _local5 = cross(_local4[(_local6 - 6)], _local4[(_local6 - 5)], _local4[(_local6 - 3)], _local4[(_local6 - 2)], _pointsS[(_i * 3)], _pointsS[((_i * 3) + 1)]); while (_local5 > 0) { _local4.pop(); _local4.pop(); _local4.pop(); if (_local4.length == 6){ break; }; _local6 = _local4.length; _local5 = cross(_local4[(_local6 - 6)], _local4[(_local6 - 5)], _local4[(_local6 - 3)], _local4[(_local6 - 2)], _pointsS[(_i * 3)], _pointsS[((_i * 3) + 1)]); }; _local4.push(_pointsS[(_i * 3)], _pointsS[((_i * 3) + 1)], _pointsS[((_i * 3) + 2)]); _i++; }; _local6 = _local4.length; _local5 = cross(_local4[(_local6 - 6)], _local4[(_local6 - 5)], _local4[(_local6 - 3)], _local4[(_local6 - 2)], _local4[0], _local4[1]); if (_local5 > 0){ _local4.pop(); _local4.pop(); _local4.pop(); }; _arg3.blocker(_drawPrimitiveStore.createConvexBlocker(_arg1, _local4)); } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ _convexBlock = (_arg1 as ConvexBlock); if (_convexBlock.debug){ _arg3.primitive(_drawPrimitiveStore.blockerDictionary[_arg1]); }; } } }//package away3d.core.project
Section 75
//DirSpriteProjector (away3d.core.project.DirSpriteProjector) package away3d.core.project { import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import flash.utils.*; import away3d.cameras.lenses.*; import away3d.sprites.*; public class DirSpriteProjector implements IPrimitiveProvider { private var _view:View3D; private var _index:int; private var _vertices:Array; private var _centerScreenVertices:Array; private var _dirsprite:DirSprite2D; private var _lens:ILens; private var _screenVertices:Array; private var _bitmaps:Dictionary; private var _drawPrimitiveStore:DrawPrimitiveStore; public function DirSpriteProjector(){ _centerScreenVertices = new Array(); super(); } public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ var _local4:Number; var _local5:BitmapData; var _local6:Number; _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _dirsprite = (_arg1 as DirSprite2D); _vertices = _dirsprite.vertices; _bitmaps = _dirsprite.bitmaps; _lens = _view.camera.lens; if (_vertices.length == 0){ return; }; _local4 = Infinity; _local5 = null; _lens.project(_arg2, _vertices, _screenVertices); _index = (_screenVertices.length / 3); while (_index--) { _local6 = _screenVertices[((_index * 3) + 2)]; if (_local6 < _local4){ _local4 = _local6; _local5 = _bitmaps[_vertices[_index]]; }; }; if (_local5 == null){ return; }; _centerScreenVertices.length = 0; _lens.project(_arg2, _dirsprite.center, _centerScreenVertices); if (_centerScreenVertices[0] == null){ return; }; _centerScreenVertices[2] = (_centerScreenVertices[2] + _dirsprite.deltaZ); _arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _centerScreenVertices, _dirsprite.smooth, _local5, ((_dirsprite.scaling * _view.camera.zoom) / (1 + (_screenVertices[2] / _view.camera.focus))), _dirsprite.rotation)); } public function get view():View3D{ return (_view); } } }//package away3d.core.project
Section 76
//DofSpriteProjector (away3d.core.project.DofSpriteProjector) package away3d.core.project { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.cameras.lenses.*; import away3d.sprites.*; public class DofSpriteProjector implements IPrimitiveProvider { private var _view:View3D; private var _dofcache:DofCache; private var _screenVertices:Array; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _dofsprite:DofSprite2D; private var _lens:ILens; private var _screenZ:Number; public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; } public function get view():View3D{ return (_view); } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _dofsprite = (_arg1 as DofSprite2D); _lens = _view.camera.lens; _lens.project(_arg2, _dofsprite.center, _screenVertices); if (_screenVertices[0] == null){ return; }; _screenZ = (_screenVertices[2] = (_screenVertices[2] + _dofsprite.deltaZ)); _dofcache = DofCache.getDofCache(_dofsprite.bitmap); _arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _screenVertices, _dofsprite.smooth, _dofcache.getBitmap(_screenZ), ((_dofsprite.scaling * _view.camera.zoom) / (1 + (_screenZ / _view.camera.focus))), _dofsprite.rotation)); } } }//package away3d.core.project
Section 77
//MeshProjector (away3d.core.project.MeshProjector) package away3d.core.project { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import away3d.core.geom.*; import flash.utils.*; import away3d.cameras.lenses.*; public class MeshProjector implements IPrimitiveProvider { private var _defaultClippedSegmentVOs:Array; private var _sv2y:Number; private var _bmaterial:IBillboardMaterial; private var _defaultStartIndices:Array; private var _billboardMaterial:IBillboardMaterial; private var _billboardVOs:Array; private var _defaultVertices:Array; private var _faceVOs:Array; private var _sv2x:Number; private var _clipping:Clipping; private var _smaterial:ISegmentMaterial; private var _backface:Boolean; private var _outlineIndices:Dictionary; private var _endIndex:int; private var _startIndex:int; private var _n01:Face; private var _cameraVarsStore:CameraVarsStore; private var _screenCommands:Array; private var _clipFlag:Boolean; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _defaultClippedFaceVOs:Array; private var _face:Face; private var _camera:Camera3D; private var _segmentMaterial:ISegmentMaterial; private var _n12:Face; private var _defaultClippedBillboards:Array; private var _vertices:Array; private var _segmentVOs:Array; private var _n20:Face; private var _billboardVO:BillboardVO; private var _faceMaterial:ITriangleMaterial; private var _view:View3D; private var _seg:DrawSegment; private var _screenIndices:Array; private var _screenVertices:Array; private var _segmentVO:SegmentVO; private var _zoom:Number; private var _vertex:Vertex; private var _startIndices:Array; private var _sv0x:Number; private var _sv0y:Number; private var _mesh:Mesh; private var _focus:Number; private var _lens:ILens; private var _backmat:ITriangleMaterial; private var _index:int; private var _sv1x:Number; private var _tri:DrawTriangle; private var _sv1y:Number; private var _segment:Segment; private var _faceVO:FaceVO; private var _i:int; public function MeshProjector(){ _defaultStartIndices = new Array(); _defaultVertices = new Array(); _defaultClippedFaceVOs = new Array(); _defaultClippedSegmentVOs = new Array(); _defaultClippedBillboards = new Array(); _outlineIndices = new Dictionary(true); super(); } private function front(_arg1:int):Number{ _index = (_screenIndices[_arg1] * 3); _sv0x = _screenVertices[_index]; _sv0y = _screenVertices[(_index + 1)]; _index = (_screenIndices[(_arg1 + 1)] * 3); _sv1x = _screenVertices[_index]; _sv1y = _screenVertices[(_index + 1)]; _index = (_screenIndices[(_arg1 + 2)] * 3); _sv2x = _screenVertices[_index]; _sv2y = _screenVertices[(_index + 1)]; return ((((_sv0x * (_sv2y - _sv1y)) + (_sv1x * (_sv0y - _sv2y))) + (_sv2x * (_sv1y - _sv0y)))); } public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; _cameraVarsStore = view.cameraVarsStore; } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ _cameraVarsStore.createVertexClassificationDictionary(_arg1); _mesh = (_arg1 as Mesh); _camera = _view.camera; _clipping = _view.screenClipping; _lens = _camera.lens; _focus = _camera.focus; _zoom = _camera.zoom; _faceMaterial = _mesh.faceMaterial; _segmentMaterial = _mesh.segmentMaterial; _billboardMaterial = _mesh.billboardMaterial; _backmat = ((_mesh.back) || (_faceMaterial)); _clipFlag = (((_cameraVarsStore.nodeClassificationDictionary[_arg1] == Frustum.INTERSECT)) && (!((_clipping is RectangleClipping)))); if (_clipFlag){ _vertices = _defaultVertices; _vertices.length = 0; _screenCommands = _drawPrimitiveStore.getScreenCommands(_arg1.id); _screenCommands.length = 0; _screenIndices = _drawPrimitiveStore.getScreenIndices(_arg1.id); _screenIndices.length = 0; _startIndices = _defaultStartIndices; _startIndices.length = 0; _faceVOs = _defaultClippedFaceVOs; _faceVOs.length = 0; _segmentVOs = _defaultClippedSegmentVOs; _segmentVOs.length = 0; _billboardVOs = _defaultClippedBillboards; _billboardVOs.length = 0; _clipping.checkElements(_mesh, _faceVOs, _segmentVOs, _billboardVOs, _vertices, _screenCommands, _screenIndices, _startIndices); } else { _vertices = _mesh.vertices; _screenCommands = _mesh.commands; _screenIndices = _mesh.indices; _startIndices = _mesh.startIndices; _faceVOs = _mesh.faceVOs; _segmentVOs = _mesh.segmentVOs; _billboardVOs = _mesh.billboardVOs; }; _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _screenVertices.length = 0; _lens.project(_arg2, _vertices, _screenVertices); if (_mesh.outline){ _i = _faceVOs.length; while (_i--) { _outlineIndices[_faceVOs[_i]] = _i; }; }; _i = 0; for each (_faceVO in _faceVOs) { _startIndex = _startIndices[_i++]; _endIndex = _startIndices[_i]; if (!_clipFlag){ _index = _startIndex; while (((!((_screenVertices[(_screenIndices[_index] * 3)] == null))) && ((_index < _endIndex)))) { _index++; }; //unresolved if } else { _face = _faceVO.face; _tri = _drawPrimitiveStore.createDrawTriangle(_arg1, _faceVO, null, _screenVertices, _screenIndices, _screenCommands, _startIndex, _endIndex, _faceVO.uv0, _faceVO.uv1, _faceVO.uv2, _faceVO.generated); _backface = (_tri.backface = (_tri.area < 0)); if (_backface){ if (!_mesh.bothsides){ continue; }; _tri.material = _faceVO.back; if (!_tri.material){ _tri.material = _faceVO.material; }; } else { _tri.material = _faceVO.material; }; if (!_tri.material){ if (_backface){ _tri.material = _backmat; } else { _tri.material = _faceMaterial; }; }; if (((_tri.material) && (!(_tri.material.visible)))){ _tri.material = null; }; if (((!(_mesh.outline)) && (!(_tri.material)))){ } else { if (!_arg3.primitive(_tri)){ } else { if (_mesh.pushback){ _tri.screenZ = _tri.maxZ; }; if (_mesh.pushfront){ _tri.screenZ = _tri.minZ; }; _tri.screenZ = (_tri.screenZ + _mesh.screenZOffset); if (((_mesh.outline) && (!(_backface)))){ _n01 = _mesh.geometry.neighbour01(_face); if ((((_n01 == null)) || ((front(_startIndices[_outlineIndices[_n01.faceVO]]) <= 0)))){ _segmentVO = _cameraVarsStore.createSegmentVO(_mesh.outline); _startIndex = _screenIndices.length; _screenIndices[_screenIndices.length] = _screenIndices[_tri.startIndex]; _screenIndices[_screenIndices.length] = _screenIndices[(_tri.startIndex + 1)]; _endIndex = _screenIndices.length; _arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _segmentVO, _mesh.outline, _screenVertices, _screenIndices, _screenCommands, _startIndex, _endIndex)); }; _n12 = _mesh.geometry.neighbour12(_face); if ((((_n12 == null)) || ((front(_startIndices[_outlineIndices[_n12.faceVO]]) <= 0)))){ _segmentVO = _cameraVarsStore.createSegmentVO(_mesh.outline); _startIndex = _screenIndices.length; _screenIndices[_screenIndices.length] = _screenIndices[(_tri.startIndex + 1)]; _screenIndices[_screenIndices.length] = _screenIndices[(_tri.startIndex + 2)]; _endIndex = _screenIndices.length; _arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _segmentVO, _mesh.outline, _screenVertices, _screenIndices, _screenCommands, _startIndex, _endIndex)); }; _n20 = _mesh.geometry.neighbour20(_face); if ((((_n20 == null)) || ((front(_startIndices[_outlineIndices[_n20.faceVO]]) <= 0)))){ _segmentVO = _cameraVarsStore.createSegmentVO(_mesh.outline); _startIndex = _screenIndices.length; _screenIndices[_screenIndices.length] = _screenIndices[(_tri.startIndex + 2)]; _screenIndices[_screenIndices.length] = _screenIndices[_tri.startIndex]; _endIndex = _screenIndices.length; _arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _segmentVO, _mesh.outline, _screenVertices, _screenIndices, _screenCommands, _startIndex, _endIndex)); }; }; }; }; }; }; for each (_segmentVO in _segmentVOs) { _startIndex = _startIndices[_i++]; _endIndex = _startIndices[_i]; if (!_clipFlag){ _index = _startIndex; while (((!((_screenVertices[(_screenIndices[_index] * 3)] == null))) && ((_index < _endIndex)))) { _index++; }; //unresolved if } else { _smaterial = ((_segmentVO.material) || (_segmentMaterial)); if (!_smaterial.visible){ } else { _seg = _drawPrimitiveStore.createDrawSegment(_arg1, _segmentVO, _smaterial, _screenVertices, _screenIndices, _screenCommands, _startIndex, _endIndex, _segmentVO.generated); if (!_arg3.primitive(_seg)){ } else { if (_mesh.pushback){ _seg.screenZ = _seg.maxZ; }; if (_mesh.pushfront){ _seg.screenZ = _seg.minZ; }; _seg.screenZ = (_seg.screenZ + _mesh.screenZOffset); }; }; }; }; for each (_billboardVO in _billboardVOs) { _index = _startIndices[_i++]; if (((!(_clipFlag)) && ((_screenVertices[(_screenIndices[_index] * 3)] == null)))){ } else { _bmaterial = ((_billboardVO.material) || (_billboardMaterial)); if (!_bmaterial.visible){ } else { _arg3.primitive(_drawPrimitiveStore.createDrawBillboard(_arg1, _billboardVO, _bmaterial, _screenVertices, _screenIndices, _index, ((_billboardVO.scaling * _zoom) / (1 + (_screenVertices[((_screenIndices[_index] * 3) + 2)] / _focus))))); }; }; }; } public function get view():View3D{ return (_view); } } }//package away3d.core.project
Section 78
//MovieClipSpriteProjector (away3d.core.project.MovieClipSpriteProjector) package away3d.core.project { import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.cameras.lenses.*; import away3d.sprites.*; public class MovieClipSpriteProjector implements IPrimitiveProvider { private var _movieclip:DisplayObject; private var _view:View3D; private var _movieClipSprite:MovieClipSprite; private var _lens:ILens; private var _screenVertices:Array; private var _screenX:Number; private var _screenY:Number; private var _screenZ:Number; private var _drawPrimitiveStore:DrawPrimitiveStore; public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; } public function get view():View3D{ return (_view); } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _movieClipSprite = (_arg1 as MovieClipSprite); _lens = _view.camera.lens; _movieclip = _movieClipSprite.movieclip; _lens.project(_arg2, _movieClipSprite.center, _screenVertices); _screenX = _screenVertices[0]; _screenY = _screenVertices[1]; _screenZ = (_screenVertices[2] = (_screenVertices[2] + _movieClipSprite.deltaZ)); if (_movieClipSprite.align != "none"){ switch (_movieClipSprite.align){ case "center": _screenX = (_screenX - (_movieclip.width / 2)); _screenY = (_screenY - (_movieclip.height / 2)); break; case "topcenter": _screenX = (_screenX - (_movieclip.width / 2)); break; case "bottomcenter": _screenX = (_screenX - (_movieclip.width / 2)); _screenY = (_screenY - _movieclip.height); break; case "right": _screenX = (_screenX - _movieclip.width); _screenY = (_screenY - (_movieclip.height / 2)); break; case "topright": _screenX = (_screenX - _movieclip.width); break; case "bottomright": _screenX = (_screenX - _movieclip.width); _screenY = (_screenY - _movieclip.height); break; case "left": _screenY = (_screenY - (_movieclip.height / 2)); break; case "topleft": break; case "bottomleft": _screenY = (_screenY - _movieclip.height); break; }; }; if (_movieClipSprite.rescale){ _movieclip.scaleX = (_movieclip.scaleY = ((_movieClipSprite.scaling * view.camera.zoom) / (1 + (_screenZ / view.camera.focus)))); }; _arg3.primitive(_drawPrimitiveStore.createDrawDisplayObject(_arg1, _screenX, _screenY, _screenZ, _movieClipSprite.session, _movieclip)); } } }//package away3d.core.project
Section 79
//ObjectContainerProjector (away3d.core.project.ObjectContainerProjector) package away3d.core.project { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.render.*; import flash.utils.*; public class ObjectContainerProjector implements IPrimitiveProvider { private var _container:ObjectContainer3D; private var _view:View3D; private var _vx:Number; private var _vy:Number; private var _vz:Number; private var _cameraViewMatrix:Matrix3D; private var _depthPoint:Number3D; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _viewTransformDictionary:Dictionary; public function ObjectContainerProjector(){ _depthPoint = new Number3D(); super(); } public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; } public function get view():View3D{ return (_view); } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ var _local4:Array; var _local5:Object3D; _container = (_arg1 as ObjectContainer3D); _cameraViewMatrix = _view.camera.viewMatrix; _viewTransformDictionary = _view.cameraVarsStore.viewTransformDictionary; _local4 = _container.children; for each (_local5 in _local4) { if (((_local5.ownCanvas) && (_local5.visible))){ if ((_local5.ownSession is SpriteRenderSession)){ (_local5.ownSession as SpriteRenderSession).cacheAsBitmap = true; }; _vx = _local5.screenXOffset; _vy = _local5.screenYOffset; if (!isNaN(_local5.ownSession.screenZ)){ _vz = _local5.ownSession.screenZ; } else { if (_local5.scenePivotPoint.modulo){ _depthPoint.clone(_local5.scenePivotPoint); _depthPoint.rotate(_depthPoint, _cameraViewMatrix); _depthPoint.add(_viewTransformDictionary[_local5].position, _depthPoint); _vz = _depthPoint.modulo; } else { _vz = _viewTransformDictionary[_local5].position.modulo; }; if (_local5.pushback){ _vz = (_vz + _local5.parentBoundingRadius); }; if (_local5.pushfront){ _vz = (_vz - _local5.parentBoundingRadius); }; _vz = (_vz + _local5.screenZOffset); }; _arg3.primitive(_drawPrimitiveStore.createDrawDisplayObject(_arg1, _vx, _vy, _vz, _container.session, _local5.session.getContainer(view))); }; }; } } }//package away3d.core.project
Section 80
//ProjectorType (away3d.core.project.ProjectorType) package away3d.core.project { public class ProjectorType { public static const OBJECT_CONTAINER:String = "ObjectContainer"; public static const MOVIE_CLIP_SPRITE:String = "MovieClipSprite"; public static const DOF_SPRITE:String = "DofSprite"; public static const SPRITE:String = "Sprite"; public static const MESH:String = "Mesh"; public static const CONVEX_BLOCK:String = "ConvexBlock"; public static const DIR_SPRITE:String = "DirSprite"; } }//package away3d.core.project
Section 81
//SpriteProjector (away3d.core.project.SpriteProjector) package away3d.core.project { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.cameras.lenses.*; import away3d.sprites.*; public class SpriteProjector implements IPrimitiveProvider { private var _sprite:Sprite2D; private var _view:View3D; private var _drawPrimitiveStore:DrawPrimitiveStore; private var _screenVertices:Array; private var _lens:ILens; public function get view():View3D{ return (_view); } public function set view(_arg1:View3D):void{ _view = _arg1; _drawPrimitiveStore = view.drawPrimitiveStore; } public function primitives(_arg1:Object3D, _arg2:Matrix3D, _arg3:IPrimitiveConsumer):void{ _screenVertices = _drawPrimitiveStore.getScreenVertices(_arg1.id); _sprite = (_arg1 as Sprite2D); _lens = _view.camera.lens; _lens.project(_arg2, _sprite.center, _screenVertices); if (_screenVertices[0] == null){ return; }; _screenVertices[2] = (_screenVertices[2] + _sprite.deltaZ); _arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _screenVertices, _sprite.smooth, _sprite.bitmap, ((_sprite.scaling * _view.camera.zoom) / (1 + (_screenVertices[2] / _view.camera.focus))), _sprite.rotation)); } } }//package away3d.core.project
Section 82
//AbstractRenderSession (away3d.core.render.AbstractRenderSession) package away3d.core.render { import flash.geom.*; import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.clip.*; import away3d.materials.*; import away3d.core.light.*; import flash.utils.*; import away3d.events.*; public class AbstractRenderSession extends EventDispatcher { public var filters:Array; private var b2:Number; var _spriteActive:Array; private var _shapeStores:Dictionary; private var _v0:ScreenVertex; private var _v1:ScreenVertex; private var _v2:ScreenVertex; private var _shapeActives:Dictionary; private var c2:Number; var _renderSource:Object3D; private var _renderer:IPrimitiveConsumer; private var _dictionary:Dictionary; private var v0x:Number; private var v0y:Number; private var _spriteLayers:Dictionary; var _shapeActive:Array; private var _consumer:IPrimitiveConsumer; private var _array:Array; var _spriteStore:Array; private var v1y:Number; var _shapeStore:Array; private var a:Number; private var c:Number; private var d:Number; private var d2:Number; private var b:Number; private var m:Matrix; protected var i:int; private var v1x:Number; public var primitives:Array; private var v2y:Number; public var alpha:Number;// = 1 private var _shapeLayers:Dictionary; var _level:int;// = -1 public var layer:DisplayObject; private var _sessionupdated:SessionEvent; public var priconsumers:Dictionary; private var _renderers:Dictionary; public var graphics:Graphics; private var tx:Number; private var ty:Number; var _material:IMaterial; public var screenZ:Number; public var sessions:Array; var _layerDirty:Boolean; var _shape:Shape; public var blendMode:String; private var area:Number; private var _lightShapeLayer:Dictionary; private var _spriteActives:Dictionary; private var _lightShapeLayers:Dictionary; var _containers:Dictionary; private var v2x:Number; private var _spriteStores:Dictionary; public var parent:AbstractRenderSession; public var updated:Boolean; private var _index0:int; private var _index2:int; private var _index1:int; private var _spriteLayer:Dictionary; private var _shapeLayer:Dictionary; var _sprite:Sprite; private var _defaultColorTransform:ColorTransform; private var a2:Number; public var consumer:IPrimitiveConsumer; public function AbstractRenderSession(){ _containers = new Dictionary(true); _level = -1; _shapeStores = new Dictionary(true); _shapeActives = new Dictionary(true); _spriteStores = new Dictionary(true); _spriteActives = new Dictionary(true); _spriteLayers = new Dictionary(true); _shapeLayers = new Dictionary(true); _lightShapeLayers = new Dictionary(true); _defaultColorTransform = new ColorTransform(); _renderers = new Dictionary(true); m = new Matrix(); alpha = 1; sessions = new Array(); priconsumers = new Dictionary(true); super(); } function internalAddOwnSession(_arg1:Object3D):void{ _arg1.addEventListener(Object3DEvent.SESSION_UPDATED, onObjectSessionUpdate); } protected function createShape(_arg1:Sprite):Shape{ if (_shapeStore.length){ _shapeActive.push((_shape = _shapeStore.pop())); } else { _shapeActive.push((_shape = new Shape())); }; _arg1.addChild(_shape); _layerDirty = true; return (_shape); } public function renderFogColor(_arg1:Clipping, _arg2:int, _arg3:Number):void{ if (_layerDirty){ createLayer(); }; graphics.lineStyle(); graphics.beginFill(_arg2, _arg3); graphics.drawRect(_arg1.minX, _arg1.minY, (_arg1.maxX - _arg1.minX), (_arg1.maxY - _arg1.minY)); graphics.endFill(); } public function addOnSessionUpdate(_arg1:Function):void{ addEventListener(SessionEvent.SESSION_UPDATED, _arg1, false, 0, false); } public function getShapeLayer(_arg1:View3D):Dictionary{ if (!_shapeLayers[_arg1]){ return ((_shapeLayers[_arg1] = new Dictionary(true))); }; return (_shapeLayers[_arg1]); } public function addChildSession(_arg1:AbstractRenderSession):void{ if (sessions.indexOf(_arg1) != -1){ return; }; sessions.push(_arg1); _arg1.addOnSessionUpdate(onSessionUpdate); _arg1.parent = this; } function internalAddSceneSession(_arg1:AbstractRenderSession):void{ sessions = [_arg1]; _arg1.addOnSessionUpdate(onSessionUpdate); } function notifySessionUpdate():void{ if (!hasEventListener(SessionEvent.SESSION_UPDATED)){ return; }; if (!_sessionupdated){ _sessionupdated = new SessionEvent(SessionEvent.SESSION_UPDATED, this); }; dispatchEvent(_sessionupdated); } public function getLightShape(_arg1:ILayerMaterial, _arg2:int, _arg3:Sprite, _arg4:LightPrimitive):Shape{ if (!(_dictionary = _lightShapeLayer[_arg1])){ _dictionary = (_lightShapeLayer[_arg1] = new Dictionary(true)); }; if (!(_array = _dictionary[_arg4])){ _array = (_dictionary[_arg4] = []); }; if ((((_level >= _arg2)) && (_array.length))){ _shape = _array[0]; } else { _level = _arg2; _array.unshift((_shape = createShape(_arg3))); }; return (_shape); } public function renderTriangleBitmapMask(_arg1:BitmapData, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Array, _arg6:Array, _arg7:Number, _arg8:Number, _arg9:Boolean, _arg10:Boolean, _arg11:Graphics=null):void{ if (_layerDirty){ createLayer(); }; _index0 = (_arg6[_arg7] * 3); _index1 = (_arg6[(_arg7 + 1)] * 3); _index2 = (_arg6[(_arg7 + 2)] * 3); a2 = ((v1x = _arg5[_index1]) - (v0x = _arg5[_index0])); b2 = ((v1y = _arg5[(_index1 + 1)]) - (v0y = _arg5[(_index0 + 1)])); c2 = ((v2x = _arg5[_index2]) - v0x); d2 = ((v2y = _arg5[(_index2 + 1)]) - v0y); m.identity(); m.scale(_arg4, _arg4); m.translate(_arg2, _arg3); if (_arg11){ _arg11.lineStyle(); _arg11.moveTo(v0x, v0y); _arg11.beginBitmapFill(_arg1, m, _arg10, ((_arg9) && (((((v0x * (d2 - b2)) - (v1x * d2)) + (v2x * b2)) > 400)))); _arg11.lineTo(v1x, v1y); _arg11.lineTo(v2x, v2y); _arg11.endFill(); } else { graphics.lineStyle(); graphics.moveTo(v0x, v0y); graphics.beginBitmapFill(_arg1, m, _arg10, ((_arg9) && (((((v0x * (d2 - b2)) - (v1x * d2)) + (v2x * b2)) > 400)))); graphics.lineTo(v1x, v1y); graphics.lineTo(v2x, v2y); graphics.endFill(); }; } public function removeOnSessionUpdate(_arg1:Function):void{ removeEventListener(SessionEvent.SESSION_UPDATED, _arg1, false); } public function clearRenderers():void{ _renderers = new Dictionary(true); } public function renderTriangleColor(_arg1:int, _arg2:Number, _arg3:Array, _arg4:Array, _arg5:Array, _arg6:Number, _arg7:Number, _arg8:Graphics=null):void{ var _local9:Graphics; if (((!(_arg8)) && (_layerDirty))){ createLayer(); }; _local9 = (_arg8) ? _arg8 : graphics; if ((_arg7 - _arg6) > 3){ _local9.lineStyle(); _local9.beginFill(_arg1, _arg2); while (_arg6 < _arg7) { _index0 = (_arg5[_arg6] * 3); switch (_arg4[_temp2]){ case "M": _local9.moveTo(_arg3[_index0], _arg3[(_index0 + 1)]); break; case "L": _local9.lineTo(_arg3[_index0], _arg3[(_index0 + 1)]); break; case "C": var _temp1 = _arg6; _arg6 = (_arg6 + 1); _index1 = (_arg5[_temp1] * 3); _local9.curveTo(_arg3[_index0], _arg3[(_index0 + 1)], _arg3[_index1], _arg3[(_index1 + 1)]); break; }; }; _local9.endFill(); } else { _index0 = (_arg5[_arg6] * 3); _index1 = (_arg5[(_arg6 + 1)] * 3); _index2 = (_arg5[(_arg6 + 2)] * 3); _local9.lineStyle(); _local9.moveTo(_arg3[_index0], _arg3[(_index0 + 1)]); _local9.beginFill(_arg1, _arg2); _local9.lineTo(_arg3[_index1], _arg3[(_index1 + 1)]); _local9.lineTo(_arg3[_index2], _arg3[(_index2 + 1)]); _local9.endFill(); }; } public function clear(_arg1:View3D):void{ var _local2:AbstractRenderSession; var _local3:Array; var _local4:Dictionary; updated = ((((_arg1.updated) || (_arg1.forceUpdate))) || (_arg1.scene.updatedSessions[this])); for each (_local2 in sessions) { _local2.clear(_arg1); }; if (updated){ _consumer = getConsumer(_arg1); _spriteLayer = getSpriteLayer(_arg1); for each (_local3 in _spriteLayer) { _local3.length = 0; }; _shapeLayer = getShapeLayer(_arg1); for each (_local3 in _shapeLayer) { _local3.length = 0; }; _lightShapeLayer = getLightShapeLayer(_arg1); for each (_local4 in _lightShapeLayer) { for each (_local3 in _local4) { _local3.length = 0; }; }; _level = -1; _material = null; _shapeStore = getShapeStore(_arg1); _shapeActive = getShapeActive(_arg1); i = _shapeActive.length; while (i--) { _shape = _shapeActive.pop(); _shape.graphics.clear(); _shape.filters = []; _shape.blendMode = BlendMode.NORMAL; _shape.transform.colorTransform = _defaultColorTransform; _shapeStore.push(_shape); }; _spriteStore = getSpriteStore(_arg1); _spriteActive = getSpriteActive(_arg1); i = _spriteActive.length; while (i--) { _sprite = _spriteActive.pop(); _sprite.graphics.clear(); _sprite.filters = []; while (_sprite.numChildren) { _sprite.removeChildAt(0); }; _spriteStore.push(_sprite); }; _consumer.clear(_arg1); }; } protected function onSessionUpdate(_arg1:SessionEvent):void{ dispatchEvent(_arg1); } public function getSpriteLayer(_arg1:View3D):Dictionary{ if (!_spriteLayers[_arg1]){ return ((_spriteLayers[_arg1] = new Dictionary(true))); }; return (_spriteLayers[_arg1]); } public function renderBitmap(_arg1:BitmapData, _arg2:ScreenVertex, _arg3:Boolean=false):void{ if (_layerDirty){ createLayer(); }; m.identity(); m.tx = (_arg2.x - (_arg1.width / 2)); m.ty = (_arg2.y - (_arg1.height / 2)); graphics.lineStyle(); graphics.beginBitmapFill(_arg1, m, false, _arg3); graphics.drawRect((_arg2.x - (_arg1.width / 2)), (_arg2.y - (_arg1.height / 2)), _arg1.width, _arg1.height); graphics.endFill(); } public function clone():AbstractRenderSession{ throw (new Error("Not implemented")); } public function addDisplayObject(_arg1:DisplayObject):void{ throw (new Error("Not implemented")); } public function renderTriangleLineFill(_arg1:Number, _arg2:int, _arg3:Number, _arg4:int, _arg5:Number, _arg6:Array, _arg7:Array, _arg8:Array, _arg9:int, _arg10:int):void{ if (_layerDirty){ createLayer(); }; if (_arg5 > 0){ graphics.lineStyle(_arg1, _arg4, _arg5); } else { graphics.lineStyle(); }; if (_arg3 > 0){ graphics.beginFill(_arg2, _arg3); }; if ((_arg10 - _arg9) > 3){ while (_arg9 < _arg10) { _index0 = (_arg8[_arg9] * 3); switch (_arg7[_temp2]){ case "M": graphics.moveTo(_arg6[_index0], _arg6[(_index0 + 1)]); break; case "L": graphics.lineTo(_arg6[_index0], _arg6[(_index0 + 1)]); break; case "C": var _temp1 = _arg9; _arg9 = (_arg9 + 1); _index1 = (_arg8[_temp1] * 3); graphics.curveTo(_arg6[_index0], _arg6[(_index0 + 1)], _arg6[_index1], _arg6[(_index1 + 1)]); break; }; }; } else { _index0 = (_arg8[_arg9] * 3); _index1 = (_arg8[(_arg9 + 1)] * 3); _index2 = (_arg8[(_arg9 + 2)] * 3); graphics.moveTo((v0x = _arg6[_index0]), (v0y = _arg6[(_index0 + 1)])); graphics.lineTo(_arg6[_index1], _arg6[(_index1 + 1)]); graphics.lineTo(_arg6[_index2], _arg6[(_index2 + 1)]); if (_arg5 > 0){ graphics.lineTo(v0x, v0y); }; }; if (_arg3 > 0){ graphics.endFill(); }; } public function getConsumer(_arg1:View3D):IPrimitiveConsumer{ if (_renderers[_arg1]){ return (_renderers[_arg1]); }; if (_renderer){ return ((_renderers[_arg1] = _renderer.clone())); }; if (parent){ return ((_renderers[_arg1] = parent.getConsumer(_arg1).clone())); }; return ((_renderers[_arg1] = (_arg1.session.renderer as IPrimitiveConsumer).clone())); } private function onObjectSessionUpdate(_arg1:Object3DEvent):void{ notifySessionUpdate(); } public function clearChildSessions():void{ var _local1:AbstractRenderSession; for each (_local1 in sessions) { _local1.removeOnSessionUpdate(onSessionUpdate); }; sessions.length = 0; } private function getSpriteActive(_arg1:View3D):Array{ if (!_spriteActives[_arg1]){ return ((_spriteActives[_arg1] = [])); }; return (_spriteActives[_arg1]); } function internalRemoveSceneSession(_arg1:AbstractRenderSession):void{ sessions = []; _arg1.removeOnSessionUpdate(onSessionUpdate); } public function render(_arg1:View3D):void{ var _local2:AbstractRenderSession; for each (_local2 in sessions) { _local2.render(_arg1); }; if (updated){ (getConsumer(_arg1) as IRenderer).render(_arg1); }; } public function renderTriangleBitmap(_arg1:BitmapData, _arg2:Matrix, _arg3:Array, _arg4:Array, _arg5:Number, _arg6:Number, _arg7:Boolean, _arg8:Boolean, _arg9:Graphics=null):void{ if (((!(_arg9)) && (_layerDirty))){ createLayer(); }; _index0 = (_arg4[_arg5] * 3); _index1 = (_arg4[(_arg5 + 1)] * 3); _index2 = (_arg4[(_arg5 + 2)] * 3); a2 = ((v1x = _arg3[_index1]) - (v0x = _arg3[_index0])); b2 = ((v1y = _arg3[(_index1 + 1)]) - (v0y = _arg3[(_index0 + 1)])); c2 = ((v2x = _arg3[_index2]) - v0x); d2 = ((v2y = _arg3[(_index2 + 1)]) - v0y); m.a = (((a = _arg2.a) * a2) + ((b = _arg2.b) * c2)); m.b = ((a * b2) + (b * d2)); m.c = (((c = _arg2.c) * a2) + ((d = _arg2.d) * c2)); m.d = ((c * b2) + (d * d2)); m.tx = ((((tx = _arg2.tx) * a2) + ((ty = _arg2.ty) * c2)) + v0x); m.ty = (((tx * b2) + (ty * d2)) + v0y); area = (((v0x * (d2 - b2)) - (v1x * d2)) + (v2x * b2)); if (area < 0){ area = -(area); }; if (_arg9){ _arg9.lineStyle(); _arg9.moveTo(v0x, v0y); _arg9.beginBitmapFill(_arg1, m, _arg8, ((_arg7) && ((area > 400)))); _arg9.lineTo(v1x, v1y); _arg9.lineTo(v2x, v2y); _arg9.endFill(); } else { graphics.lineStyle(); graphics.moveTo(v0x, v0y); graphics.beginBitmapFill(_arg1, m, _arg8, ((_arg7) && ((area > 400)))); graphics.lineTo(v1x, v1y); graphics.lineTo(v2x, v2y); graphics.endFill(); }; } public function getLightShapeLayer(_arg1:View3D):Dictionary{ if (!_lightShapeLayers[_arg1]){ return ((_lightShapeLayers[_arg1] = new Dictionary(true))); }; return (_lightShapeLayers[_arg1]); } public function renderBillboardColor(_arg1:int, _arg2:Number, _arg3:DrawBillboard):void{ if (_layerDirty){ createLayer(); }; if (_arg3.rotation != 0){ graphics.beginFill(_arg1, _arg2); graphics.moveTo(_arg3.topleftx, _arg3.toplefty); graphics.lineTo(_arg3.toprightx, _arg3.toprighty); graphics.lineTo(_arg3.bottomrightx, _arg3.bottomrighty); graphics.lineTo(_arg3.bottomleftx, _arg3.bottomlefty); graphics.lineTo(_arg3.topleftx, _arg3.toplefty); graphics.endFill(); } else { graphics.beginFill(_arg1, _arg2); graphics.drawRect(_arg3.minX, _arg3.minY, (_arg3.maxX - _arg3.minX), (_arg3.maxY - _arg3.minY)); graphics.endFill(); }; } public function set renderer(_arg1:IPrimitiveConsumer):void{ var _local2:AbstractRenderSession; if (_renderer == _arg1){ return; }; _renderer = _arg1; clearRenderers(); for each (_local2 in sessions) { _local2.clearRenderers(); }; } public function removeChildSession(_arg1:AbstractRenderSession):void{ var _local2:int; _arg1.removeOnSessionUpdate(onSessionUpdate); _local2 = sessions.indexOf(_arg1); if (_local2 == -1){ return; }; sessions.splice(_local2, 1); } function internalRemoveOwnSession(_arg1:Object3D):void{ _arg1.removeEventListener(Object3DEvent.SESSION_UPDATED, onObjectSessionUpdate); } public function get renderer():IPrimitiveConsumer{ return (_renderer); } public function getContainer(_arg1:View3D):DisplayObject{ throw (new Error("Not implemented")); } public function renderLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:uint, _arg7:Number):void{ if (_layerDirty){ createLayer(); }; graphics.lineStyle(_arg5, _arg6, _arg7); graphics.moveTo(_arg1, _arg2); graphics.lineTo(_arg3, _arg4); } private function getShapeStore(_arg1:View3D):Array{ if (!_shapeStores[_arg1]){ return ((_shapeStores[_arg1] = [])); }; return (_shapeStores[_arg1]); } private function getShapeActive(_arg1:View3D):Array{ if (!_shapeActives[_arg1]){ return ((_shapeActives[_arg1] = [])); }; return (_shapeActives[_arg1]); } public function getSprite(_arg1:ILayerMaterial, _arg2:int, _arg3:Sprite=null):Sprite{ if (!(_array = _spriteLayer[_arg1])){ _array = (_spriteLayer[_arg1] = []); }; if (((!(_arg3)) && (!((_arg1 == _material))))){ _level = -1; _material = _arg1; }; if ((((_level >= _arg2)) && (_array.length))){ _sprite = _array[0]; } else { _level = _arg2; _array.unshift((_sprite = createSprite(_arg3))); }; return (_sprite); } protected function createLayer():void{ throw (new Error("Not implemented")); } public function renderTriangleLine(_arg1:Number, _arg2:int, _arg3:Number, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:Number, _arg8:Number):void{ if (_layerDirty){ createLayer(); }; graphics.lineStyle(_arg1, _arg2, _arg3); if ((_arg8 - _arg7) > 3){ while (_arg7 < _arg8) { _index0 = (_arg6[_arg7] * 3); switch (_arg5[_temp2]){ case "M": graphics.moveTo(_arg4[_index0], _arg4[(_index0 + 1)]); break; case "L": graphics.lineTo(_arg4[_index0], _arg4[(_index0 + 1)]); break; case "C": var _temp1 = _arg7; _arg7 = (_arg7 + 1); _index1 = (_arg6[_temp1] * 3); graphics.curveTo(_arg4[_index0], _arg4[(_index0 + 1)], _arg4[_index1], _arg4[(_index1 + 1)]); break; }; }; } else { _index0 = (_arg6[_arg7] * 3); _index1 = (_arg6[(_arg7 + 1)] * 3); _index2 = (_arg6[(_arg7 + 2)] * 3); graphics.moveTo((v0x = _arg4[_index0]), (v0y = _arg4[(_index0 + 1)])); graphics.lineTo(_arg4[_index1], _arg4[(_index1 + 1)]); graphics.lineTo(_arg4[_index2], _arg4[(_index2 + 1)]); graphics.lineTo(v0x, v0y); }; } public function renderScaledBitmap(_arg1:DrawScaledBitmap, _arg2:BitmapData, _arg3:Matrix, _arg4:Boolean=false):void{ if (_layerDirty){ createLayer(); }; graphics.lineStyle(); if (_arg1.rotation != 0){ graphics.beginBitmapFill(_arg2, _arg3, false, _arg4); graphics.moveTo(_arg1.topleftx, _arg1.toplefty); graphics.lineTo(_arg1.toprightx, _arg1.toprighty); graphics.lineTo(_arg1.bottomrightx, _arg1.bottomrighty); graphics.lineTo(_arg1.bottomleftx, _arg1.bottomlefty); graphics.lineTo(_arg1.topleftx, _arg1.toplefty); graphics.endFill(); } else { graphics.beginBitmapFill(_arg2, _arg3, false, _arg4); graphics.drawRect(_arg1.minX, _arg1.minY, (_arg1.maxX - _arg1.minX), (_arg1.maxY - _arg1.minY)); graphics.endFill(); }; } public function getTotalFaces(_arg1:View3D):int{ var _local2:int; var _local3:AbstractRenderSession; _local2 = getConsumer(_arg1).list().length; for each (_local3 in sessions) { _local2 = (_local2 + _local3.getTotalFaces(_arg1)); }; return (_local2); } protected function createSprite(_arg1:Sprite=null):Sprite{ throw (new Error("Not implemented")); } private function getSpriteStore(_arg1:View3D):Array{ if (!_spriteStores[_arg1]){ return ((_spriteStores[_arg1] = [])); }; return (_spriteStores[_arg1]); } public function renderBillboardBitmap(_arg1:BitmapData, _arg2:DrawBillboard, _arg3:Boolean):void{ if (_layerDirty){ createLayer(); }; if (_arg2.rotation != 0){ graphics.beginBitmapFill(_arg1, _arg2.mapping, false, _arg3); graphics.moveTo(_arg2.topleftx, _arg2.toplefty); graphics.lineTo(_arg2.toprightx, _arg2.toprighty); graphics.lineTo(_arg2.bottomrightx, _arg2.bottomrighty); graphics.lineTo(_arg2.bottomleftx, _arg2.bottomlefty); graphics.lineTo(_arg2.topleftx, _arg2.toplefty); graphics.endFill(); } else { graphics.beginBitmapFill(_arg1, _arg2.mapping, false, _arg3); graphics.drawRect(_arg2.minX, _arg2.minY, (_arg2.maxX - _arg2.minX), (_arg2.maxY - _arg2.minY)); graphics.endFill(); }; } public function getShape(_arg1:ILayerMaterial, _arg2:int, _arg3:Sprite):Shape{ if (!(_array = _shapeLayer[_arg1])){ _array = (_shapeLayer[_arg1] = []); }; if ((((_level >= _arg2)) && (_array.length))){ _shape = _array[0]; } else { _level = _arg2; _array.unshift((_shape = createShape(_arg3))); }; return (_shape); } } }//package away3d.core.render
Section 83
//BasicRenderer (away3d.core.render.BasicRenderer) package away3d.core.render { import away3d.core.draw.*; import away3d.containers.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.block.*; import away3d.core.filter.*; public class BasicRenderer implements IRenderer, IPrimitiveConsumer { private var _camera:Camera3D; private var _primitives:Array; private var _scene:Scene3D; private var _filter:IPrimitiveFilter; private var _blockers:Array; private var _primitive:DrawPrimitive; private var _screenClipping:Clipping; private var _filters:Array; public function BasicRenderer(... _args){ _primitives = new Array(); super(); _filters = _args; _filters.push(new ZSortFilter()); } public function clear(_arg1:View3D):void{ _primitives.length = 0; _scene = _arg1.scene; _camera = _arg1.camera; _screenClipping = _arg1.screenClipping; _blockers = _arg1.blockerarray.list(); } public function render(_arg1:View3D):void{ for each (_filter in _filters) { _primitives = _filter.filter(_primitives, _scene, _camera, _screenClipping); }; for each (_primitive in _primitives) { _primitive.render(); }; } public function list():Array{ return (_primitives); } public function clone():IPrimitiveConsumer{ var _local1:BasicRenderer; _local1 = new BasicRenderer(); _local1.filters = filters; return (_local1); } public function primitive(_arg1:DrawPrimitive):Boolean{ var _local2:Blocker; if (!_screenClipping.checkPrimitive(_arg1)){ return (false); }; for each (_local2 in _blockers) { if (_local2.screenZ > _arg1.minZ){ } else { if (_local2.block(_arg1)){ return (false); }; }; }; _primitives.push(_arg1); return (true); } public function toString():String{ return ((("Basic [" + _filters.join("+")) + "]")); } public function get filters():Array{ return (_filters.slice(0, (_filters.length - 1))); } public function set filters(_arg1:Array):void{ _filters = _arg1; _filters.push(new ZSortFilter()); } } }//package away3d.core.render
Section 84
//BitmapRenderSession (away3d.core.render.BitmapRenderSession) package away3d.core.render { import flash.geom.*; import flash.display.*; import away3d.containers.*; import flash.utils.*; public class BitmapRenderSession extends AbstractRenderSession { private var _bitmapContainers:Dictionary; private var _container:Sprite; private var _cm:Matrix; private var _cy:Number; private var _cx:Number; private var _bitmapwidth:int; private var layers:Array; private var _height:int; private var _scale:Number; private var _base:BitmapData; private var _width:int; private var _bitmapContainer:Bitmap; private var _bitmapheight:int; public function BitmapRenderSession(_arg1:Number=2){ _bitmapContainers = new Dictionary(true); layers = new Array(); super(); if (_scale <= 0){ throw (new Error("scale cannot be negative or zero")); }; _scale = _arg1; } override public function clear(_arg1:View3D):void{ super.clear(_arg1); if (updated){ _base = getBitmapData(_arg1); _cx = (_bitmapContainer.x = _arg1.screenClipping.minX); _cy = (_bitmapContainer.y = _arg1.screenClipping.minY); _bitmapContainer.scaleX = _scale; _bitmapContainer.scaleY = _scale; _cm = new Matrix(); _cm.scale((1 / _scale), (1 / _scale)); _cm.translate((-(_arg1.screenClipping.minX) / _scale), (-(_arg1.screenClipping.minY) / _scale)); _base.lock(); _base.fillRect(_base.rect, 0); layers.length = 0; _layerDirty = true; layer = null; }; if (((((filters) && (filters.length))) || (((_bitmapContainer.filters) && (_bitmapContainer.filters.length))))){ _bitmapContainer.filters = filters; }; _bitmapContainer.alpha = ((alpha) || (1)); _bitmapContainer.blendMode = ((blendMode) || (BlendMode.NORMAL)); } override public function clone():AbstractRenderSession{ return (new BitmapRenderSession(_scale)); } override public function addDisplayObject(_arg1:DisplayObject):void{ layers.push(_arg1); _arg1.visible = true; _layerDirty = true; } public function getBitmapData(_arg1:View3D):BitmapData{ _container = (getContainer(_arg1) as Sprite); if (!_bitmapContainer.bitmapData){ _bitmapwidth = int(((_width = (_arg1.screenClipping.maxX - _arg1.screenClipping.minX)) / _scale)); _bitmapheight = int(((_height = (_arg1.screenClipping.maxY - _arg1.screenClipping.minY)) / _scale)); return ((_bitmapContainer.bitmapData = new BitmapData(_bitmapwidth, _bitmapheight, true, 0))); }; return (_bitmapContainer.bitmapData); } override public function render(_arg1:View3D):void{ var _local2:DisplayObject; super.render(_arg1); if (updated){ for each (_local2 in layers) { _base.draw(_local2, _cm, _local2.transform.colorTransform, _local2.blendMode, _base.rect); }; _base.unlock(); }; } override protected function createLayer():void{ if (_shapeStore.length){ _shapeActive.push((_shape = _shapeStore.pop())); } else { _shapeActive.push((_shape = new Shape())); }; layer = _shape; graphics = _shape.graphics; layers.push(_shape); _layerDirty = false; } override public function getContainer(_arg1:View3D):DisplayObject{ _bitmapContainer = getBitmapContainer(_arg1); if (!_containers[_arg1]){ _container = (_containers[_arg1] = new Sprite()); _container.addChild(_bitmapContainer); return (_container); }; return (_containers[_arg1]); } override protected function createSprite(_arg1:Sprite=null):Sprite{ if (_spriteStore.length){ _spriteActive.push((_sprite = _spriteStore.pop())); } else { _spriteActive.push((_sprite = new Sprite())); }; if (_arg1){ _arg1.addChild(_sprite); } else { layers.push(_sprite); }; _layerDirty = true; return (_sprite); } public function getBitmapContainer(_arg1:View3D):Bitmap{ if (!_bitmapContainers[_arg1]){ return ((_bitmapContainers[_arg1] = new Bitmap())); }; return (_bitmapContainers[_arg1]); } } }//package away3d.core.render
Section 85
//IRenderer (away3d.core.render.IRenderer) package away3d.core.render { import away3d.containers.*; public interface IRenderer { function render(_arg1:View3D):void; function toString():String; } }//package away3d.core.render
Section 86
//SpriteRenderSession (away3d.core.render.SpriteRenderSession) package away3d.core.render { import flash.geom.*; import flash.display.*; import away3d.containers.*; import away3d.core.clip.*; import away3d.events.*; public class SpriteRenderSession extends AbstractRenderSession { private var _container:Sprite; private var _clip:Clipping; public var cacheAsBitmap:Boolean; public function SpriteRenderSession():void{ } override public function clear(_arg1:View3D):void{ super.clear(_arg1); _container = (getContainer(_arg1) as Sprite); if (updated){ layer = _container; graphics = _container.graphics; if (this == _arg1.session){ _clip = _arg1.screenClipping; _container.scrollRect = new Rectangle((_clip.minX - 1), (_clip.minY - 1), ((_clip.maxX - _clip.minX) + 2), ((_clip.maxY - _clip.minY) + 2)); _container.x = (_clip.minX - 1); _container.y = (_clip.minY - 1); }; _container.cacheAsBitmap = false; graphics.clear(); while (_container.numChildren) { _container.removeChildAt(0); }; } else { _container.cacheAsBitmap = cacheAsBitmap; }; if (((((filters) && (filters.length))) || (((_container.filters) && (_container.filters.length))))){ _container.filters = filters; }; _container.alpha = alpha; _container.blendMode = ((blendMode) || (BlendMode.NORMAL)); } override public function clone():AbstractRenderSession{ return (new SpriteRenderSession()); } override protected function onSessionUpdate(_arg1:SessionEvent):void{ super.onSessionUpdate(_arg1); cacheAsBitmap = false; } override public function addDisplayObject(_arg1:DisplayObject):void{ _container.addChild(_arg1); _arg1.visible = true; layer = null; _level = -1; _layerDirty = true; } override protected function createLayer():void{ if (_shapeStore.length){ _shapeActive.push((_shape = _shapeStore.pop())); } else { _shapeActive.push((_shape = new Shape())); }; layer = _shape; graphics = _shape.graphics; _container.addChild(_shape); _layerDirty = false; _level = -1; } override public function getContainer(_arg1:View3D):DisplayObject{ if (!_containers[_arg1]){ return ((_containers[_arg1] = new Sprite())); }; return (_containers[_arg1]); } override protected function createSprite(_arg1:Sprite=null):Sprite{ if (_spriteStore.length){ _spriteActive.push((_sprite = _spriteStore.pop())); } else { _spriteActive.push((_sprite = new Sprite())); }; if (_arg1){ _arg1.addChild(_sprite); } else { _container.addChild(_sprite); layer = _sprite; }; _layerDirty = true; return (_sprite); } } }//package away3d.core.render
Section 87
//Logo (away3d.core.stats.Logo) package away3d.core.stats { import flash.display.*; public class Logo extends Shape { private var arr:Array; public function Logo(){ var _local1:int; var _local2:int; arr = [[7, 1, 262151], [8, 1, 3215136], [9, 1, 2033436], [10, 1, 1], [7, 2, 2098723], [8, 2, 5908501], [9, 2, 4922400], [10, 2, 720913], [6, 3, 327691], [7, 3, 6957102], [8, 3, 5975556], [9, 3, 6368779], [10, 3, 4789809], [11, 3, 2], [6, 4, 2361127], [7, 4, 10833686], [8, 4, 4926728], [9, 4, 6239495], [10, 4, 9190690], [11, 4, 1114647], [5, 5, 786453], [6, 5, 7088423], [7, 5, 14055707], [8, 5, 2103310], [9, 5, 3877139], [10, 5, 13134098], [11, 5, 5577773], [12, 5, 131077], [4, 6, 1], [5, 6, 3608110], [6, 6, 11227664], [7, 6, 12748351], [8, 6, 65793], [9, 6, 986379], [10, 6, 14980667], [11, 6, 10044437], [12, 6, 2230306], [4, 7, 0x12001C], [5, 7, 8007967], [6, 7, 14911011], [7, 7, 6509633], [10, 7, 9138771], [11, 7, 13989655], [12, 7, 7350824], [13, 7, 327689], [3, 8, 262153], [4, 8, 4592689], [5, 8, 12016138], [6, 8, 15774570], [7, 8, 855309], [10, 8, 2434083], [11, 8, 16233056], [12, 8, 11489803], [13, 8, 3345958], [3, 9, 1966887], [4, 9, 8665113], [5, 9, 15636021], [6, 9, 6773581], [11, 9, 9140836], [12, 9, 15240489], [13, 9, 8467743], [14, 9, 852240], [2, 10, 458767], [3, 10, 5774639], [4, 10, 13265683], [5, 10, 10845518], [6, 10, 0x0101], [11, 10, 657931], [12, 10, 14396016], [13, 10, 12739344], [14, 10, 5184297], [15, 10, 2], [2, 11, 2557230], [3, 11, 10307863], [4, 11, 12548133], [5, 11, 723464], [12, 11, 1512721], [13, 11, 14651446], [14, 11, 10307352], [15, 11, 1508630], [1, 12, 983068], [2, 12, 7154221], [3, 12, 9522185], [4, 12, 1314568], [6, 12, 131586], [7, 12, 921102], [8, 12, 0x1A1A1A], [9, 12, 0x171717], [10, 12, 657930], [13, 12, 2892051], [14, 12, 12610067], [15, 12, 7220009], [16, 12, 196614], [1, 13, 3936052], [2, 13, 5908749], [3, 13, 1773570], [4, 13, 4402968], [5, 13, 10714191], [6, 13, 12884326], [7, 13, 14396274], [8, 13, 15053429], [9, 13, 14790257], [10, 13, 13935206], [11, 13, 12159571], [12, 13, 9265971], [13, 13, 2759432], [14, 13, 2561537], [15, 13, 8601360], [16, 13, 3346464], [1, 14, 3938326], [2, 14, 5712395], [3, 14, 10900499], [4, 14, 11951126], [5, 14, 11490833], [6, 14, 11358991], [7, 14, 11227662], [8, 14, 11161870], [9, 14, 11030286], [10, 14, 10964497], [11, 14, 10898963], [12, 14, 10833429], [13, 14, 11096344], [14, 14, 8797973], [15, 14, 4595726], [16, 14, 4594459], [17, 14, 327941], [1, 15, 2296596], [2, 15, 3280925], [3, 15, 2821148], [4, 15, 2624284], [5, 15, 2558749], [6, 15, 2624031], [7, 15, 2558496], [8, 15, 2558498], [9, 15, 2492705], [10, 15, 2361630], [11, 15, 2361374], [12, 15, 2295839], [13, 15, 2295840], [14, 15, 2427171], [15, 15, 2624036], [16, 15, 1377300]]; super(); graphics.beginFill(0); graphics.drawRect(0, 0, 18, 17); _local1 = arr.length; _local2 = 0; while (_local2 < _local1) { graphics.beginFill(Number(arr[_local2][2])); graphics.drawRect(arr[_local2][0], arr[_local2][1], 1, 1); _local2++; }; graphics.endFill(); } } }//package away3d.core.stats
Section 88
//StaticTextField (away3d.core.stats.StaticTextField) package away3d.core.stats { import flash.text.*; public class StaticTextField extends TextField { public var defaultText:String; public function StaticTextField(_arg1:String=null, _arg2:TextFormat=null){ defaultTextFormat = (_arg2) ? _arg2 : new TextFormat("Verdana", 10, 0); selectable = false; mouseEnabled = false; mouseWheelEnabled = false; autoSize = "left"; tabEnabled = false; if (_arg1){ this.htmlText = _arg1; }; } } }//package away3d.core.stats
Section 89
//Stats (away3d.core.stats.Stats) package away3d.core.stats { import flash.geom.*; import flash.display.*; import flash.events.*; import away3d.containers.*; import away3d.core.base.*; import away3d.cameras.*; import flash.utils.*; import flash.net.*; import flash.text.*; import flash.system.*; import flash.ui.*; public class Stats extends Sprite { private const APPLICATION_NAME:String = "Away3D.com"; private const VERSION:String = "2"; private const REVISION:String = "4.0"; private var bar:Sprite; private var swfframerateLabel:StaticTextField; private var cambtn:Sprite; private var geomLastAdded:String; private var totalElements:int;// = 0 private var faceRenderLabel:StaticTextField; private var defautTF:TextFormat; private var camLabel:TextField; private var defautTFBold:TextFormat; private var bestfps:int;// = 0 private var stageframerate:Number; private var rectclose:Rectangle; private var faceLabel:StaticTextField; public var stats:String;// = "" private var menu0:ContextMenuItem; private var menu2:ContextMenuItem; public var geomMenu:Sprite;// = null private var menu1:ContextMenuItem; private var avfpsLabel:StaticTextField; private var refreshes:int;// = 0 private var rectclear:Rectangle; private var displayState:int; private var clearbtn:Sprite; private var meshLabel:StaticTextField; private var barscale:int;// = 0 var type:String; private var geomDetailsLabel:TextField; public var displayMenu:Sprite;// = null public var sourceURL:String; private var peakLabel:StaticTextField; private var meshes:int;// = 0 private var closebtn:Sprite; var url:String; private var rectcam:Rectangle; private var ramLabel:StaticTextField; private var titleField:StaticTextField; private var fpsLabel:StaticTextField; private var perfLabel:StaticTextField; private var geombtn:Sprite; private var barwidth:int;// = 0 private var lastrender:int; var elementcount:int; private var camMenu:Sprite; private var camProp:Array; public var scopeMenu:View3D;// = null private var rectdetails:Rectangle; private var lowestfps:int;// = 999 private var fpstotal:int;// = 0 public function Stats(_arg1:View3D, _arg2:Number=0){ var _local3:ContextMenu; totalElements = 0; meshes = 0; scopeMenu = null; displayMenu = null; geomMenu = null; fpstotal = 0; refreshes = 0; bestfps = 0; lowestfps = 999; barwidth = 0; barscale = 0; rectclose = new Rectangle(228, 4, 18, 17); rectcam = new Rectangle(207, 4, 18, 17); rectclear = new Rectangle(186, 4, 18, 17); rectdetails = new Rectangle(165, 4, 18, 17); defautTF = new TextFormat("Verdana", 10, 0); defautTFBold = new TextFormat("Verdana", 10, 0, true); stats = ""; super(); scopeMenu = _arg1; stageframerate = (_arg2) ? _arg2 : 30; displayState = 0; sourceURL = _arg1.sourceURL; tabEnabled = false; menu0 = new ContextMenuItem("Away3D Project stats", true, true, true); menu1 = new ContextMenuItem("View Source", true, true, true); menu2 = new ContextMenuItem(((((APPLICATION_NAME + "\tv") + VERSION) + ".") + REVISION), true, true, true); _local3 = new ContextMenu(); _local3 = new ContextMenu(); _local3.customItems = (sourceURL) ? [menu0, menu1, menu2] : [menu0, menu2]; menu0.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, displayStats); menu1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, viewSource); menu2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, visitWebsite); _local3.hideBuiltInItems(); scopeMenu.contextMenu = _local3; } public function clearObjects():void{ stats = ""; totalElements = 0; meshes = 0; geomLastAdded = ""; } private function createGeometryMenu():void{ var _local1:Matrix; geomMenu = new Sprite(); _local1 = new Matrix(); _local1.rotate(((90 * Math.PI) / 180)); geomMenu.graphics.beginGradientFill("linear", [3355494, 0xCCCCCC], [1, 1], [0, 0xFF], _local1, "pad", "rgb", 0); geomMenu.graphics.drawRect(0, 0, 250, 200); displayMenu.addChild(geomMenu); geomMenu.y = 26; geomDetailsLabel = new TextField(); geomDetailsLabel.x = 3; geomDetailsLabel.y = 3; geomDetailsLabel.defaultTextFormat = defautTF; geomDetailsLabel.text = stats; geomDetailsLabel.height = 200; geomDetailsLabel.width = 235; geomDetailsLabel.multiline = true; geomDetailsLabel.selectable = true; geomDetailsLabel.wordWrap = true; geomMenu.addChild(geomDetailsLabel); } private function showGeomInfo():void{ if (geomMenu == null){ createGeometryMenu(); } else { displayMenu.addChild(geomMenu); geomMenu.y = 26; }; } private function clearStats():void{ fpstotal = 0; refreshes = 0; bestfps = 0; lowestfps = 999; } private function closeOtherScreen(_arg1:int):void{ switch (_arg1){ case 1: hideCamInfo(); break; case 2: hideGeomInfo(); }; } private function generateSprite():void{ var _local1:Matrix; var _local2:Sprite; var _local3:Graphics; var _local4:Graphics; var _local5:Graphics; var _local6:StaticTextField; var _local7:StaticTextField; var _local8:StaticTextField; var _local9:StaticTextField; var _local10:StaticTextField; var _local11:StaticTextField; var _local12:StaticTextField; var _local13:StaticTextField; var _local14:StaticTextField; displayMenu = new Sprite(); _local1 = new Matrix(); _local1.rotate(((90 * Math.PI) / 180)); displayMenu.graphics.beginGradientFill("linear", [3355494, 0xCCCCCC], [1, 1], [0, 0xFF], _local1, "pad", "rgb", 0); displayMenu.graphics.drawRect(0, 0, 250, 86); displayMenu.graphics.beginFill(3355494); displayMenu.graphics.drawRect(3, 3, 244, 20); scopeMenu.addChild(displayMenu); displayMenu.x = (displayMenu.x - (displayMenu.width * 0.5)); displayMenu.y = (displayMenu.y - (displayMenu.height * 0.5)); closebtn = new Sprite(); closebtn.graphics.beginFill(0x666666); closebtn.graphics.drawRect(0, 0, 18, 17); _local2 = new Sprite(); _local2.graphics.beginFill(13029592); _local2.graphics.drawRect(2, 7, 14, 4); _local2.graphics.endFill(); _local2.graphics.beginFill(13029592); _local2.graphics.drawRect(7, 2, 4, 14); _local2.graphics.endFill(); _local2.rotation = 45; _local2.x = (_local2.x + 9); _local2.y = (_local2.y - 4); closebtn.addChild(_local2); displayMenu.addChild(closebtn); closebtn.x = 228; closebtn.y = 4; cambtn = new Sprite(); _local3 = cambtn.graphics; _local3.beginFill(0x666666); _local3.drawRect(0, 0, 18, 17); _local3.endFill(); _local3.beginFill(13029592); _local3.moveTo(10, 8); _local3.lineTo(16, 4); _local3.lineTo(16, 14); _local3.lineTo(10, 10); _local3.lineTo(10, 8); _local3.drawRect(2, 6, 8, 6); _local3.endFill(); displayMenu.addChild(cambtn); cambtn.x = 207; cambtn.y = 4; clearbtn = new Sprite(); _local4 = clearbtn.graphics; _local4.beginFill(0x666666); _local4.drawRect(0, 0, 18, 17); _local4.endFill(); _local4.beginFill(13029592); _local4.drawRect(6, 6, 6, 6); _local4.endFill(); displayMenu.addChild(clearbtn); clearbtn.x = 186; clearbtn.y = 4; geombtn = new Sprite(); _local5 = geombtn.graphics; _local5.beginFill(0x666666); _local5.drawRect(0, 0, 18, 17); _local5.endFill(); _local5.beginFill(13029592, 0.7); _local5.moveTo(3, 4); _local5.lineTo(11, 2); _local5.lineTo(16, 5); _local5.lineTo(7, 7); _local5.lineTo(3, 4); _local5.beginFill(8225929, 0.8); _local5.moveTo(3, 4); _local5.lineTo(7, 7); _local5.lineTo(7, 16); _local5.lineTo(3, 12); _local5.lineTo(3, 4); _local5.beginFill(13029592, 1); _local5.moveTo(7, 7); _local5.lineTo(16, 5); _local5.lineTo(15, 13); _local5.lineTo(7, 16); _local5.lineTo(7, 7); _local5.endFill(); _local5.endFill(); displayMenu.addChild(geombtn); geombtn.x = 165; geombtn.y = 4; displayMenu.graphics.beginGradientFill("linear", [0, 0xFFFFFF], [1, 1], [0, 0xFF], new Matrix(), "pad", "rgb", 0); displayMenu.graphics.drawRect(3, 22, 244, 4); displayMenu.graphics.endFill(); bar = new Sprite(); bar.graphics.beginFill(0xFFFFFF); bar.graphics.drawRect(0, 0, 244, 4); displayMenu.addChild(bar); bar.x = 3; bar.y = 22; barwidth = 244; barscale = int((barwidth / stageframerate)); displayPicto(); titleField = new StaticTextField("AWAY3D PROJECT", new TextFormat("Verdana", 10, 0xFFFFFF, true)); titleField.height = 20; titleField.width = 140; titleField.x = 22; titleField.y = 4; displayMenu.addChild(titleField); _local6 = new StaticTextField("FPS:", defautTFBold); fpsLabel = new StaticTextField(); displayMenu.addChild(_local6); displayMenu.addChild(fpsLabel); _local6.x = 3; _local6.y = (fpsLabel.y = 30); fpsLabel.x = ((_local6.x + _local6.width) - 2); _local7 = new StaticTextField("AFPS:", defautTFBold); avfpsLabel = new StaticTextField(); displayMenu.addChild(_local7); displayMenu.addChild(avfpsLabel); _local7.x = 52; _local7.y = (avfpsLabel.y = fpsLabel.y); avfpsLabel.x = ((_local7.x + _local7.width) - 2); _local8 = new StaticTextField("Max:", defautTFBold); peakLabel = new StaticTextField(); displayMenu.addChild(_local8); displayMenu.addChild(peakLabel); _local8.x = 107; _local8.y = (peakLabel.y = avfpsLabel.y); _local8.autoSize = "left"; peakLabel.x = ((_local8.x + _local8.width) - 2); _local9 = new StaticTextField("MS:", defautTFBold); perfLabel = new StaticTextField(); perfLabel.defaultTextFormat = defautTF; displayMenu.addChild(_local9); displayMenu.addChild(perfLabel); _local9.x = 177; _local9.y = (perfLabel.y = fpsLabel.y); _local9.autoSize = "left"; perfLabel.x = ((_local9.x + _local9.width) - 2); _local10 = new StaticTextField("RAM:", defautTFBold); ramLabel = new StaticTextField(); displayMenu.addChild(_local10); displayMenu.addChild(ramLabel); _local10.x = 3; _local10.y = (ramLabel.y = 46); _local10.autoSize = "left"; ramLabel.x = ((_local10.x + _local10.width) - 2); _local11 = new StaticTextField("MESHES:", defautTFBold); meshLabel = new StaticTextField(); displayMenu.addChild(_local11); displayMenu.addChild(meshLabel); _local11.x = 90; _local11.y = (meshLabel.y = ramLabel.y); _local11.autoSize = "left"; meshLabel.x = ((_local11.x + _local11.width) - 2); _local12 = new StaticTextField("SWF FR:", defautTFBold); swfframerateLabel = new StaticTextField(); displayMenu.addChild(_local12); displayMenu.addChild(swfframerateLabel); _local12.x = 170; _local12.y = (swfframerateLabel.y = ramLabel.y); _local12.autoSize = "left"; swfframerateLabel.x = ((_local12.x + _local12.width) - 2); _local13 = new StaticTextField("T ELEMENTS:", defautTFBold); faceLabel = new StaticTextField(); displayMenu.addChild(_local13); displayMenu.addChild(faceLabel); _local13.x = 3; _local13.y = (faceLabel.y = 62); _local13.autoSize = "left"; faceLabel.x = ((_local13.x + _local13.width) - 2); _local14 = new StaticTextField("R ELEMENTS:", defautTFBold); faceRenderLabel = new StaticTextField(); displayMenu.addChild(_local14); displayMenu.addChild(faceRenderLabel); _local14.x = 115; _local14.y = (faceRenderLabel.y = faceLabel.y); _local14.autoSize = "left"; faceRenderLabel.x = ((_local14.x + _local14.width) - 2); } public function visitWebsite(_arg1:ContextMenuEvent):void{ var url:String; var request:URLRequest; var e = _arg1; url = "http://www.away3d.com"; request = new URLRequest(url); try { navigateToURL(request); } catch(error:Error) { }; } public function displayStats(_arg1:ContextMenuEvent=null):void{ if (!displayMenu){ scopeMenu.statsOpen = true; generateSprite(); addEventMouse(); }; } private function mouseReleased(_arg1:MouseEvent):void{ displayMenu.stopDrag(); scopeMenu.removeEventListener(MouseEvent.MOUSE_UP, mouseReleased); } public function viewSource(_arg1:ContextMenuEvent):void{ var request:URLRequest; var e = _arg1; request = new URLRequest(sourceURL); try { navigateToURL(request, "_blank"); } catch(error:Error) { }; } private function createCamMenu():void{ var _local1:Matrix; var _local2:TextFormat; var _local3:TextField; var _local4:int; var _local5:int; camMenu = new Sprite(); _local1 = new Matrix(); _local1.rotate(((90 * Math.PI) / 180)); camMenu.graphics.beginGradientFill("linear", [3355494, 0xCCCCCC], [1, 1], [0, 0xFF], _local1, "pad", "rgb", 0); camMenu.graphics.drawRect(0, 0, 250, 220); displayMenu.addChild(camMenu); camMenu.y = 26; camLabel = new TextField(); camLabel.height = 210; camLabel.width = 170; camLabel.multiline = true; camLabel.selectable = false; _local2 = defautTF; _local2.leading = 1.5; camLabel.defaultTextFormat = _local2; camLabel.wordWrap = true; camMenu.addChild(camLabel); camLabel.x = 100; camLabel.y = 3; camProp = ["x", "y", "z", "zoom", "focus", "distance", "panangle", "tiltangle", "targetpanangle", "targettiltangle", "mintiltangle", "maxtiltangle", "steps", "target"]; _local3 = new TextField(); _local2 = new TextFormat("Verdana", 10, 0, true); _local2.leading = 1.5; _local2.align = "right"; _local3.defaultTextFormat = _local2; _local3.x = (_local3.y = 3); _local3.multiline = true; _local3.selectable = false; _local3.autoSize = "left"; _local3.height = 210; _local4 = camProp.length; _local5 = 0; while (_local5 < _local4) { _local3.appendText((camProp[_local5] + ":\n")); _local5++; }; camMenu.addChild(_local3); } public function addObject(_arg1:Mesh):void{ type = _arg1.type; elementcount = _arg1.elements.length; url = _arg1.url; if (((!((type == null))) && (!((elementcount == 0))))){ stats = (stats + ((((((" - " + type) + " , elements: ") + elementcount) + ", url: ") + url) + "\n")); geomLastAdded = ((((((" - " + type) + " , elements: ") + elementcount) + ", url: ") + url) + "\n"); totalElements = (totalElements + elementcount); meshes = (meshes + 1); } else { stats = (stats + ((((" - " + type) + " , url: ") + url) + "\n")); geomLastAdded = ((((" - " + type) + " , url: ") + url) + "\n"); }; } public function updateStats(_arg1:int, _arg2:Camera3D):void{ var now:int; var perf:int; var procent:int; var colorTransform:ColorTransform; var fps:int; var average:int; var w:int; var caminfo:String; var _length:int; var i:int; var info:String; var renderedfaces = _arg1; var camera = _arg2; now = getTimer(); perf = (now - lastrender); lastrender = now; if (perf < 1000){ fps = int((1000 / (perf + 0.001))); fpstotal = (fpstotal + fps); refreshes++; average = (fpstotal / refreshes); bestfps = ((fps)>bestfps) ? fps : bestfps; lowestfps = ((fps)<lowestfps) ? fps : lowestfps; w = (barscale * fps); bar.width = ((w)<=barwidth) ? w : barwidth; }; procent = ((bar.width / barwidth) * 100); colorTransform = bar.transform.colorTransform; colorTransform.color = ((((0xFF - (2.55 * procent)) << 16) | ((2.55 * procent) << 8)) | 40); bar.transform.colorTransform = colorTransform; if (displayState == 0){ avfpsLabel.text = ("" + average); ramLabel.text = (("" + (int(((System.totalMemory / 0x0400) / 102.4)) / 10)) + "MB"); peakLabel.text = ((lowestfps + "/") + bestfps); fpsLabel.text = ("" + fps); perfLabel.text = ("" + perf); faceLabel.text = ("" + totalElements); faceRenderLabel.text = ("" + renderedfaces); meshLabel.text = ("" + meshes); swfframerateLabel.text = ("" + stageframerate); } else { if (displayState == 1){ caminfo = ""; _length = camProp.length; i = 0; while (i < _length) { try { if (i > 12){ caminfo = (caminfo + (String(camera[camProp[i]]) + "\n")); } else { info = String(camera[camProp[i]]); caminfo = (caminfo + (info.substring(0, 19) + "\n")); }; } catch(e:Error) { caminfo = (caminfo + "\n"); }; i = (i + 1); }; camLabel.text = caminfo; } else { if (displayState == 2){ geomDetailsLabel.text = stats; }; }; }; } private function showCamInfo():void{ if (camMenu == null){ createCamMenu(); } else { displayMenu.addChild(camMenu); camMenu.y = 26; }; } private function hideGeomInfo():void{ if (geomMenu != null){ displayMenu.removeChild(geomMenu); }; } private function hideCamInfo():void{ if (camMenu != null){ displayMenu.removeChild(camMenu); }; } private function closeStats():void{ scopeMenu.statsOpen = false; displayState = 0; scopeMenu.removeEventListener(MouseEvent.MOUSE_DOWN, onCheckMouse); scopeMenu.removeEventListener(MouseEvent.MOUSE_MOVE, updateTips); scopeMenu.removeChild(displayMenu); displayMenu = null; } private function updateTips(_arg1:MouseEvent):void{ var x:Number; var y:Number; var pt:Point; var me = _arg1; if (scopeMenu != null){ x = displayMenu.mouseX; y = displayMenu.mouseY; pt = new Point(x, y); try { if (rectcam.containsPoint(pt)){ titleField.text = "CAMERA INFO"; } else { if (rectclose.containsPoint(pt)){ titleField.text = "CLOSE STATS"; } else { if (rectclear.containsPoint(pt)){ titleField.text = "CLEAR AVERAGES"; } else { if (rectdetails.containsPoint(pt)){ titleField.text = "MESH INFO"; } else { titleField.text = "AWAY3D PROJECT"; }; }; }; }; } catch(e:Error) { }; }; } public function addSourceURL(_arg1:String):void{ var _local2:ContextMenu; sourceURL = _arg1; _local2 = new ContextMenu(); _local2.customItems = (sourceURL) ? [menu0, menu1, menu2] : [menu0, menu2]; scopeMenu.contextMenu = _local2; } private function addEventMouse():void{ scopeMenu.addEventListener(MouseEvent.MOUSE_DOWN, onCheckMouse); scopeMenu.addEventListener(MouseEvent.MOUSE_MOVE, updateTips); } private function onCheckMouse(_arg1:MouseEvent):void{ var _local2:Number; var _local3:Number; var _local4:Point; _local2 = displayMenu.mouseX; _local3 = displayMenu.mouseY; _local4 = new Point(_local2, _local3); if (rectcam.containsPoint(_local4)){ if (displayState != 1){ closeOtherScreen(displayState); displayState = 1; showCamInfo(); } else { displayState = 0; hideCamInfo(); }; } else { if (rectdetails.containsPoint(_local4)){ if (displayState != 2){ closeOtherScreen(displayState); displayState = 2; showGeomInfo(); } else { displayState = 0; hideGeomInfo(); }; } else { if (rectclose.containsPoint(_local4)){ closeStats(); } else { if (rectclear.containsPoint(_local4)){ clearStats(); } else { if (displayMenu.mouseY <= 20){ displayMenu.startDrag(); scopeMenu.addEventListener(MouseEvent.MOUSE_UP, mouseReleased); }; }; }; }; }; } private function displayPicto():void{ var _local1:Shape; _local1 = new Logo(); displayMenu.addChild(_local1); _local1.x = (_local1.y = 4); } } }//package away3d.core.stats
Section 90
//LightTraverser (away3d.core.traverse.LightTraverser) package away3d.core.traverse { import away3d.core.base.*; import away3d.core.light.*; public class LightTraverser extends Traverser { override public function match(_arg1:Object3D):Boolean{ return (_arg1.visible); } override public function apply(_arg1:Object3D):void{ if (_arg1.ownLights){ _arg1.lightarray.clear(); }; if ((_arg1 is ILightProvider)){ (_arg1 as ILightProvider).light(_arg1.parent.lightarray); }; } } }//package away3d.core.traverse
Section 91
//PrimitiveTraverser (away3d.core.traverse.PrimitiveTraverser) package away3d.core.traverse { import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.materials.*; import away3d.core.light.*; import away3d.core.geom.*; import flash.utils.*; import away3d.core.project.*; public class PrimitiveTraverser extends Traverser { private var _view:View3D; private var _viewTransform:Matrix3D; private var _consumer:IPrimitiveConsumer; private var _light:ILightProvider; private var _mouseEnableds:Array; private var _clipping:Clipping; private var _nodeClassification:int; private var _cameraVarsStore:CameraVarsStore; private var _projectorDictionary:Dictionary; private var _mouseEnabled:Boolean; public function PrimitiveTraverser(){ _mouseEnableds = new Array(); _projectorDictionary = new Dictionary(true); super(); } override public function match(_arg1:Object3D):Boolean{ _clipping = _view.clipping; if (((!(_arg1.visible)) || (((_clipping.objectCulling) && (!(_cameraVarsStore.nodeClassificationDictionary[_arg1])))))){ return (false); }; if ((_arg1 is ILODObject)){ return ((_arg1 as ILODObject).matchLOD(_view.camera)); }; return (true); } public function set view(_arg1:View3D):void{ _view = _arg1; _mouseEnabled = true; _mouseEnableds.length = 0; _cameraVarsStore = _view.cameraVarsStore; _projectorDictionary[ProjectorType.CONVEX_BLOCK] = _view._convexBlockProjector; _projectorDictionary[ProjectorType.DIR_SPRITE] = _view._dirSpriteProjector; _projectorDictionary[ProjectorType.DOF_SPRITE] = _view._dofSpriteProjector; _projectorDictionary[ProjectorType.MESH] = _view._meshProjector; _projectorDictionary[ProjectorType.MOVIE_CLIP_SPRITE] = _view._movieClipSpriteProjector; _projectorDictionary[ProjectorType.OBJECT_CONTAINER] = _view._objectContainerProjector; _projectorDictionary[ProjectorType.SPRITE] = _view._spriteProjector; } override public function enter(_arg1:Object3D):void{ _mouseEnableds.push(_mouseEnabled); } public function get view():View3D{ return (_view); } override public function apply(_arg1:Object3D):void{ if (_arg1.session.updated){ _viewTransform = _cameraVarsStore.viewTransformDictionary[_arg1]; _consumer = _arg1.session.getConsumer(_view); if (_arg1.projectorType){ (_projectorDictionary[_arg1.projectorType] as IPrimitiveProvider).primitives(_arg1, _viewTransform, _consumer); }; if (((_arg1.debugbb) && (_arg1.debugBoundingBox.visible))){ _arg1.debugBoundingBox._session = _arg1.session; if (_clipping.objectCulling){ _cameraVarsStore.frustumDictionary[_arg1.debugBoundingBox] = _cameraVarsStore.frustumDictionary[_arg1]; _nodeClassification = _cameraVarsStore.nodeClassificationDictionary[_arg1]; if (_nodeClassification == Frustum.INTERSECT){ (_arg1.debugBoundingBox.material as WireframeMaterial).color = 0xFF0000; } else { (_arg1.debugBoundingBox.material as WireframeMaterial).color = 0x333333; }; }; _view._meshProjector.primitives(_arg1.debugBoundingBox, _viewTransform, _consumer); }; if (((_arg1.debugbs) && (_arg1.debugBoundingSphere.visible))){ _arg1.debugBoundingSphere._session = _arg1.session; if (_clipping.objectCulling){ _cameraVarsStore.frustumDictionary[_arg1.debugBoundingSphere] = _cameraVarsStore.frustumDictionary[_arg1]; _nodeClassification = _cameraVarsStore.nodeClassificationDictionary[_arg1]; if (_nodeClassification == Frustum.INTERSECT){ (_arg1.debugBoundingSphere.material as WireframeMaterial).color = 0xFF0000; } else { (_arg1.debugBoundingSphere.material as WireframeMaterial).color = 0xFFFF; }; }; _view._meshProjector.primitives(_arg1.debugBoundingSphere, _viewTransform, _consumer); }; if ((_arg1 is ILightProvider)){ _light = (_arg1 as ILightProvider); if (_light.debug){ _light.debugPrimitive._session = _arg1.session; if (_clipping.objectCulling){ _cameraVarsStore.frustumDictionary[_light.debugPrimitive] = _cameraVarsStore.frustumDictionary[_light]; }; _view._meshProjector.primitives(_light.debugPrimitive, _viewTransform, _consumer); }; }; }; _mouseEnabled = (_arg1._mouseEnabled = ((_mouseEnabled) && (_arg1.mouseEnabled))); } override public function leave(_arg1:Object3D):void{ _mouseEnabled = _mouseEnableds.pop(); } } }//package away3d.core.traverse
Section 92
//ProjectionTraverser (away3d.core.traverse.ProjectionTraverser) package away3d.core.traverse { import away3d.containers.*; import away3d.core.base.*; import away3d.cameras.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.geom.*; import away3d.cameras.lenses.*; import away3d.core.project.*; public class ProjectionTraverser extends Traverser { private var _view:View3D; private var _camera:Camera3D; private var _mesh:Mesh; private var _viewTransform:Matrix3D; private var _lens:ILens; private var _clipping:Clipping; private var _frustum:Frustum; private var _nodeClassification:int; private var _cameraViewMatrix:Matrix3D; private var _cameraVarsStore:CameraVarsStore; override public function match(_arg1:Object3D):Boolean{ if (!_arg1.visible){ return (false); }; _viewTransform = _cameraVarsStore.createViewTransform(_arg1); _viewTransform.multiply(_cameraViewMatrix, _arg1.sceneTransform); if (_clipping.objectCulling){ _frustum = _lens.getFrustum(_arg1, _viewTransform); if ((((_arg1 is Scene3D)) || ((_cameraVarsStore.nodeClassificationDictionary[_arg1.parent] == Frustum.INTERSECT)))){ if (_arg1.pivotZero){ _nodeClassification = (_cameraVarsStore.nodeClassificationDictionary[_arg1] = _frustum.classifyRadius(_arg1.boundingRadius)); } else { _nodeClassification = (_cameraVarsStore.nodeClassificationDictionary[_arg1] = _frustum.classifySphere(_arg1.pivotPoint, _arg1.boundingRadius)); }; } else { _nodeClassification = (_cameraVarsStore.nodeClassificationDictionary[_arg1] = _cameraVarsStore.nodeClassificationDictionary[_arg1.parent]); }; if (_nodeClassification == Frustum.OUT){ _arg1.updateObject(); return (false); }; }; if ((_arg1 is ILODObject)){ return ((_arg1 as ILODObject).matchLOD(_camera)); }; return (true); } public function set view(_arg1:View3D):void{ _view = _arg1; _cameraVarsStore = _arg1.cameraVarsStore; _clipping = _arg1.clipping; _camera = _arg1.camera; _lens = _camera.lens; _cameraViewMatrix = _camera.viewMatrix; if (_arg1.statsOpen){ _arg1.statsPanel.clearObjects(); }; } override public function enter(_arg1:Object3D):void{ if (((_view.statsOpen) && ((_arg1 is Mesh)))){ _view.statsPanel.addObject((_arg1 as Mesh)); }; } public function get view():View3D{ return (_view); } override public function apply(_arg1:Object3D):void{ if (_arg1.projectorType == ProjectorType.CONVEX_BLOCK){ _view.blockers[_arg1] = _arg1; }; if ((_mesh = (_arg1 as Mesh))){ if (!_view.scene.meshes[_arg1]){ _view.scene.meshes[_arg1] = []; }; _view.scene.meshes[_arg1].push(_view); _view.scene.geometries[_mesh.geometry] = _mesh.geometry; }; } override public function leave(_arg1:Object3D):void{ _arg1.updateObject(); } } }//package away3d.core.traverse
Section 93
//SessionTraverser (away3d.core.traverse.SessionTraverser) package away3d.core.traverse { import away3d.core.base.*; public class SessionTraverser extends Traverser { override public function match(_arg1:Object3D):Boolean{ return (_arg1.visible); } override public function apply(_arg1:Object3D):void{ _arg1.updateSession(); } } }//package away3d.core.traverse
Section 94
//TickTraverser (away3d.core.traverse.TickTraverser) package away3d.core.traverse { import away3d.core.base.*; public class TickTraverser extends Traverser { public var now:int; override public function enter(_arg1:Object3D):void{ _arg1.tick(now); } } }//package away3d.core.traverse
Section 95
//Traverser (away3d.core.traverse.Traverser) package away3d.core.traverse { import away3d.core.base.*; public class Traverser { public function match(_arg1:Object3D):Boolean{ return (true); } public function leave(_arg1:Object3D):void{ } public function enter(_arg1:Object3D):void{ } public function apply(_arg1:Object3D):void{ } } }//package away3d.core.traverse
Section 96
//BillboardVO (away3d.core.utils.BillboardVO) package away3d.core.utils { import away3d.core.base.*; import away3d.materials.*; public class BillboardVO { public var vertex:Vertex; public var width:Number; public var material:IBillboardMaterial; public var command:String; public var scaling:Number; public var billboard:Billboard; public var rotation:Number; public var height:Number; } }//package away3d.core.utils
Section 97
//CacheStore (away3d.core.utils.CacheStore) package away3d.core.utils { import flash.utils.*; public class CacheStore { public static var whiteShadingCache:Dictionary = new Dictionary(true); } }//package away3d.core.utils
Section 98
//CameraVarsStore (away3d.core.utils.CameraVarsStore) package away3d.core.utils { import away3d.containers.*; import away3d.core.base.*; import away3d.core.math.*; import away3d.materials.*; import away3d.core.geom.*; import away3d.core.render.*; import flash.utils.*; public class CameraVarsStore { private var _vtStore:Array; private var _uvStore:Array; public var frustumDictionary:Dictionary; private var _sActive:Array; private var _frustum:Frustum; public var view:View3D; private var _vStore:Array; private var _segmentVO:SegmentVO; private var _frStore:Array; private var _source:Object3D; public var viewTransformDictionary:Dictionary; public var nodeClassificationDictionary:Dictionary; private var _uv:UV; private var _vertex:Vertex; private var _vtActive:Array; private var _vc:VertexClassification; private var _fActive:Array; private var _frActive:Array; private var _fStore:Array; private var _session:AbstractRenderSession; private var _sStore:Array; private var _vt:Matrix3D; private var _object:Object; private var _vActive:Array; private var _sourceDictionary:Dictionary; private var _faceVO:FaceVO; private var _uvDictionary:Dictionary; private var _v:Object; private var _uvArray:Array; private var _vcStore:Array; private var _vertexClassificationDictionary:Dictionary; public function CameraVarsStore(){ _sourceDictionary = new Dictionary(true); _vtActive = []; _vtStore = []; _frActive = []; _frStore = []; _vActive = []; _vStore = []; _vcStore = []; _uvDictionary = new Dictionary(true); _uvStore = []; _fActive = []; _fStore = []; _sActive = []; _sStore = []; viewTransformDictionary = new Dictionary(true); nodeClassificationDictionary = new Dictionary(true); frustumDictionary = new Dictionary(true); super(); } public function createFaceVO(_arg1:Face, _arg2:ITriangleMaterial, _arg3:ITriangleMaterial, _arg4:UV, _arg5:UV, _arg6:UV):FaceVO{ if (_fStore.length){ _fActive.push((_faceVO = _fStore.pop())); } else { _fActive.push((_faceVO = new FaceVO())); }; _faceVO.face = _arg1; _faceVO.uv0 = _arg4; _faceVO.uv1 = _arg5; _faceVO.uv2 = _arg6; _faceVO.material = _arg2; _faceVO.back = _arg3; _faceVO.generated = true; return (_faceVO); } public function createVertexClassificationDictionary(_arg1:Object3D):Dictionary{ if (!(_vertexClassificationDictionary = _sourceDictionary[_arg1])){ _vertexClassificationDictionary = (_sourceDictionary[_arg1] = new Dictionary(true)); }; return (_vertexClassificationDictionary); } public function createSegmentVO(_arg1:ISegmentMaterial):SegmentVO{ if (_sStore.length){ _sActive.push((_segmentVO = _sStore.pop())); } else { _sActive.push((_segmentVO = new SegmentVO())); }; _segmentVO.generated = true; return (_segmentVO); } public function createUV(_arg1:Number, _arg2:Number, _arg3:AbstractRenderSession):UV{ if (!(_uvArray = _uvDictionary[_arg3])){ _uvArray = (_uvDictionary[_arg3] = []); }; if (_uvStore.length){ _uvArray.push((_uv = _uvStore.pop())); _uv.u = _arg1; _uv.v = _arg2; } else { _uvArray.push((_uv = new UV(_arg1, _arg2))); }; return (_uv); } public function createViewTransform(_arg1:Object3D):Matrix3D{ if (_vtStore.length){ _vtActive.push((_vt = (viewTransformDictionary[_arg1] = _vtStore.pop()))); } else { _vtActive.push((_vt = (viewTransformDictionary[_arg1] = new Matrix3D()))); }; return (_vt); } public function createVertex(_arg1:Number, _arg2:Number, _arg3:Number):Vertex{ if (_vStore.length){ _vActive.push((_vertex = _vStore.pop())); _vertex.x = _arg1; _vertex.y = _arg2; _vertex.z = _arg3; } else { _vActive.push((_vertex = new Vertex(_arg1, _arg2, _arg3))); }; return (_vertex); } public function reset():void{ for (_object in _sourceDictionary) { _source = (_object as Object3D); if (((_source.session) && (_source.session.updated))){ for (_v in _sourceDictionary[_source]) { _vcStore.push(_sourceDictionary[_source][_v]); delete _sourceDictionary[_source][_v]; }; }; }; nodeClassificationDictionary = new Dictionary(true); _vtStore = _vtStore.concat(_vtActive); _vtActive.length = 0; _frStore = _frStore.concat(_frActive); _frActive.length = 0; _vStore = _vStore.concat(_vActive); _vActive.length = 0; for (_object in _uvDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _uvArray = (_uvDictionary[_session] as Array); _uvStore = _uvStore.concat(); _uvArray.length = 0; }; }; _fStore = _fStore.concat(_fActive); _fActive.length = 0; _sStore = _sStore.concat(_sActive); _sActive.length = 0; } public function createVertexClassification(_arg1:Vertex):VertexClassification{ if ((_vc = _vertexClassificationDictionary[_arg1])){ return (_vc); }; if (_vcStore.length){ _vc = (_vertexClassificationDictionary[_arg1] = _vcStore.pop()); } else { _vc = (_vertexClassificationDictionary[_arg1] = new VertexClassification()); }; _vc.vertex = _arg1; _vc.plane = null; return (_vc); } public function createFrustum(_arg1:Object3D):Frustum{ if (_frStore.length){ _frActive.push((_frustum = (frustumDictionary[_arg1] = _frStore.pop()))); } else { _frActive.push((_frustum = (frustumDictionary[_arg1] = new Frustum()))); }; return (_frustum); } } }//package away3d.core.utils
Section 99
//Cast (away3d.core.utils.Cast) package away3d.core.utils { import flash.geom.*; import flash.display.*; import away3d.materials.*; import flash.utils.*; public class Cast { private static var colornames:Dictionary; private static var hexchars:String = "0123456789abcdefABCDEF"; private static var classes:Dictionary = new Dictionary(); private static var notclasses:Dictionary = new Dictionary(); public static function color(_arg1):uint{ var _local2:uint; _local2 = trycolor(_arg1); if (_local2 == 4294967295){ throw (new CastError(("Can't cast to color: " + _arg1))); }; return (_local2); } public static function material(_arg1):IMaterial{ var hash:Array; var line:Array; var bmd:BitmapData; var ini:Init; var bitmap:BitmapData; var color:uint; var alpha:Number; var lighting:Boolean; var wire:WireframeMaterial; var smooth:Boolean; var precision:Number; var data = _arg1; if (data == null){ return (null); }; if ((data is String)){ data = tryclass(data); }; if ((data is Class)){ try { data = new (data); } catch(materialerror:ArgumentError) { data = new data(0, 0); }; }; if ((data is IMaterial)){ return (data); }; if ((data is int)){ return (new ColorMaterial(data)); }; if ((data is MovieClip)){ return (new MovieMaterial(data)); }; if ((data is String)){ if (data == ""){ return (null); }; if ((data as String).indexOf("#") != -1){ hash = (data as String).split("#"); if (hash[1] == ""){ return (new WireColorMaterial(color(hash[0]))); }; if (hash[1].indexOf("|") == -1){ if (hash[0] == ""){ return (new WireframeMaterial(color(hash[1]))); }; return (new WireColorMaterial(color(hash[0]), {wirecolor:color(hash[1])})); } else { line = hash[1].split("|"); if (hash[0] == ""){ return (new WireframeMaterial(color(line[0]), {width:parseFloat(line[1])})); }; return (new WireColorMaterial(color(hash[0]), {wirecolor:color(line[0]), width:parseFloat(line[1])})); }; } else { if ((data as String).indexOf("@") != -1){ hash = (data as String).split("@"); if (hash[1] == ""){ return (new ShadingColorMaterial({color:color(hash[0])})); }; } else { return (new ColorMaterial(color(data))); }; }; }; try { bmd = Cast.bitmap(data); return (new BitmapMaterial(bmd)); } catch(error:CastError) { }; if ((data is Object)){ ini = Init.parse(data); bitmap = ini.getBitmap("bitmap"); color = ini.getColor("color", 4294967295); alpha = ini.getNumber("alpha", 1, {min:0, max:1}); lighting = ini.getBoolean("lighting", false); wire = (wirematerial(ini.getObject("wire")) as WireframeMaterial); if (((!((bitmap == null))) && (!((color == 4294967295))))){ throw (new CastError(("Can't create material with color and bitmap: " + data))); }; if (bitmap != null){ if (wire != null){ Debug.warning("Bitmap materials do not support wire"); }; smooth = ini.getBoolean("smooth", false); precision = ini.getNumber("precision", 0); if (precision){ if (lighting){ return (new WhiteShadingBitmapMaterial(bitmap, {smooth:smooth, precision:precision})); }; if (alpha < 1){ Debug.warning("Can't create precise bitmap material with alpha (yet)"); }; return (new BitmapMaterial(bitmap, {smooth:smooth, precision:precision})); }; if (lighting){ if (alpha < 1){ Debug.warning("Can't create bitmap material with lighting and alpha (yet)"); }; return (new WhiteShadingBitmapMaterial(bitmap, {smooth:smooth, alpha:alpha})); }; return (new BitmapMaterial(bitmap, {smooth:smooth})); }; if (color != 4294967295){ if (lighting){ if (wire != null){ Debug.warning("Can't create shading material with wire"); }; return (new ShadingColorMaterial({color:color, alpha:alpha})); }; if (wire == null){ return (new ColorMaterial(color, {alpha:alpha})); }; return (new WireColorMaterial(color, {alpha:alpha, wirecolor:wire.color, wirealpha:wire.alpha, width:wire.width})); }; if (wire != null){ return (wire); }; }; throw (new CastError(("Can't cast to material: " + data))); } public static function trycolor(_arg1):uint{ if ((_arg1 is uint)){ return ((_arg1 as uint)); }; if ((_arg1 is int)){ return ((_arg1 as uint)); }; if ((_arg1 is String)){ if (_arg1 == "random"){ return (uint((Math.random() * 16777216))); }; if (colornames == null){ colornames = new Dictionary(); colornames["steelblue"] = 4620980; colornames["royalblue"] = 267920; colornames["cornflowerblue"] = 6591981; colornames["lightsteelblue"] = 11584734; colornames["mediumslateblue"] = 8087790; colornames["slateblue"] = 6970061; colornames["darkslateblue"] = 4734347; colornames["midnightblue"] = 1644912; colornames["navy"] = 128; colornames["darkblue"] = 139; colornames["mediumblue"] = 205; colornames["blue"] = 0xFF; colornames["dodgerblue"] = 2003199; colornames["deepskyblue"] = 49151; colornames["lightskyblue"] = 8900346; colornames["skyblue"] = 8900331; colornames["lightblue"] = 11393254; colornames["powderblue"] = 11591910; colornames["azure"] = 15794175; colornames["lightcyan"] = 14745599; colornames["paleturquoise"] = 11529966; colornames["mediumturquoise"] = 4772300; colornames["lightseagreen"] = 2142890; colornames["darkcyan"] = 0x8B8B; colornames["teal"] = 0x8080; colornames["cadetblue"] = 6266528; colornames["darkturquoise"] = 52945; colornames["aqua"] = 0xFFFF; colornames["cyan"] = 0xFFFF; colornames["turquoise"] = 4251856; colornames["aquamarine"] = 8388564; colornames["mediumaquamarine"] = 6737322; colornames["darkseagreen"] = 9419919; colornames["mediumseagreen"] = 3978097; colornames["seagreen"] = 3050327; colornames["darkgreen"] = 0x6400; colornames["green"] = 0x8000; colornames["forestgreen"] = 2263842; colornames["limegreen"] = 3329330; colornames["lime"] = 0xFF00; colornames["chartreuse"] = 0x7FFF00; colornames["lawngreen"] = 0x7CFC00; colornames["greenyellow"] = 11403055; colornames["yellowgreen"] = 10145074; colornames["palegreen"] = 10025880; colornames["lightgreen"] = 9498256; colornames["springgreen"] = 65407; colornames["mediumspringgreen"] = 64154; colornames["darkolivegreen"] = 5597999; colornames["olivedrab"] = 7048739; colornames["olive"] = 0x808000; colornames["darkkhaki"] = 12433259; colornames["darkgoldenrod"] = 12092939; colornames["goldenrod"] = 14329120; colornames["gold"] = 0xFFD700; colornames["yellow"] = 0xFFFF00; colornames["khaki"] = 15787660; colornames["palegoldenrod"] = 15657130; colornames["blanchedalmond"] = 16772045; colornames["moccasin"] = 16770229; colornames["wheat"] = 16113331; colornames["navajowhite"] = 16768685; colornames["burlywood"] = 14596231; colornames["tan"] = 13808780; colornames["rosybrown"] = 12357519; colornames["sienna"] = 10506797; colornames["saddlebrown"] = 9127187; colornames["chocolate"] = 13789470; colornames["peru"] = 13468991; colornames["sandybrown"] = 16032864; colornames["darkred"] = 0x8B0000; colornames["maroon"] = 0x800000; colornames["brown"] = 10824234; colornames["firebrick"] = 11674146; colornames["indianred"] = 13458524; colornames["lightcoral"] = 15761536; colornames["salmon"] = 16416882; colornames["darksalmon"] = 15308410; colornames["lightsalmon"] = 16752762; colornames["coral"] = 16744272; colornames["tomato"] = 16737095; colornames["darkorange"] = 0xFF8C00; colornames["orange"] = 0xFFA500; colornames["orangered"] = 0xFF4500; colornames["crimson"] = 14423100; colornames["red"] = 0xFF0000; colornames["deeppink"] = 16716947; colornames["fuchsia"] = 0xFF00FF; colornames["magenta"] = 0xFF00FF; colornames["hotpink"] = 16738740; colornames["lightpink"] = 16758465; colornames["pink"] = 16761035; colornames["palevioletred"] = 14381203; colornames["mediumvioletred"] = 13047173; colornames["purple"] = 0x800080; colornames["darkmagenta"] = 0x8B008B; colornames["mediumpurple"] = 9662683; colornames["blueviolet"] = 9055202; colornames["indigo"] = 0x4B0082; colornames["darkviolet"] = 0x9400D3; colornames["darkorchid"] = 10040012; colornames["mediumorchid"] = 12211667; colornames["orchid"] = 14315734; colornames["violet"] = 15631086; colornames["plum"] = 14524637; colornames["thistle"] = 14204888; colornames["lavender"] = 15132410; colornames["ghostwhite"] = 16316671; colornames["aliceblue"] = 15792383; colornames["mintcream"] = 16121850; colornames["honeydew"] = 15794160; colornames["lightgoldenrodyellow"] = 16448210; colornames["lemonchiffon"] = 16775885; colornames["cornsilk"] = 16775388; colornames["lightyellow"] = 16777184; colornames["ivory"] = 16777200; colornames["floralwhite"] = 16775920; colornames["linen"] = 16445670; colornames["oldlace"] = 16643558; colornames["antiquewhite"] = 16444375; colornames["bisque"] = 16770244; colornames["peachpuff"] = 16767673; colornames["papayawhip"] = 16773077; colornames["beige"] = 16119260; colornames["seashell"] = 16774638; colornames["lavenderblush"] = 16773365; colornames["mistyrose"] = 16770273; colornames["snow"] = 16775930; colornames["white"] = 0xFFFFFF; colornames["whitesmoke"] = 0xF5F5F5; colornames["gainsboro"] = 0xDCDCDC; colornames["lightgrey"] = 0xD3D3D3; colornames["silver"] = 0xC0C0C0; colornames["darkgrey"] = 0xA9A9A9; colornames["grey"] = 0x808080; colornames["lightslategrey"] = 7833753; colornames["slategrey"] = 7372944; colornames["dimgrey"] = 0x696969; colornames["darkslategrey"] = 3100495; colornames["black"] = 0; colornames["transparent"] = 4278190080; }; if (colornames[_arg1] != null){ return (colornames[_arg1]); }; if (((((_arg1 as String).length == 6)) && (hexstring(_arg1)))){ return (parseInt(("0x" + _arg1))); }; }; return (0xFFFFFF); } private static function hexstring(_arg1:String):Boolean{ var _local2:int; var _local3:int; _local2 = _arg1.length; _local3 = 0; while (_local3 < _local2) { if (hexchars.indexOf(_arg1.charAt(_local3)) == -1){ return (false); }; _local3++; }; return (true); } public static function wirematerial(_arg1):ISegmentMaterial{ var _local2:Array; var _local3:Init; var _local4:uint; var _local5:Number; var _local6:Number; if (_arg1 == null){ return (null); }; if ((_arg1 is ISegmentMaterial)){ return (_arg1); }; if ((_arg1 is int)){ return (new WireframeMaterial(_arg1)); }; if ((_arg1 is String)){ if (_arg1 == ""){ return (null); }; if ((_arg1 as String).indexOf("#") == 0){ _arg1 = (_arg1 as String).substring(1); }; if ((_arg1 as String).indexOf("|") == -1){ return (new WireframeMaterial(color(_arg1))); }; _local2 = (_arg1 as String).split("|"); return (new WireframeMaterial(color(_local2[0]), {width:parseFloat(_local2[1])})); }; if ((_arg1 is Object)){ _local3 = Init.parse(_arg1); _local4 = _local3.getColor("color", 0); _local5 = _local3.getNumber("alpha", 1, {min:0, max:1}); _local6 = _local3.getNumber("width", 1, {min:0}); return (new WireframeMaterial(_local4, {alpha:_local5, width:_local6})); }; throw (new CastError(("Can't cast to wirematerial: " + _arg1))); } public static function bitmap(_arg1):BitmapData{ var ds:DisplayObject; var bmd:BitmapData; var mat:Matrix; var data = _arg1; if (data == null){ return (null); }; if ((data is String)){ data = tryclass(data); }; if ((data is Class)){ try { data = new (data); } catch(bitmaperror:ArgumentError) { data = new data(0, 0); }; }; if ((data is BitmapData)){ return (data); }; if ((data is Bitmap)){ if ((data as Bitmap).hasOwnProperty("bitmapData")){ return ((data as Bitmap).bitmapData); }; }; if ((data is DisplayObject)){ ds = (data as DisplayObject); bmd = new BitmapData(ds.width, ds.height, true, 0xFFFFFF); mat = ds.transform.matrix.clone(); mat.tx = 0; mat.ty = 0; bmd.draw(ds, mat, ds.transform.colorTransform, ds.blendMode, bmd.rect, true); return (bmd); }; throw (new CastError(("Can't cast to bitmap: " + data))); } public static function bytearray(_arg1):ByteArray{ if ((_arg1 is Class)){ _arg1 = new (_arg1); }; if ((_arg1 is ByteArray)){ return (_arg1); }; return (ByteArray(_arg1)); } public static function xml(_arg1):XML{ if ((_arg1 is Class)){ _arg1 = new (_arg1); }; if ((_arg1 is XML)){ return (_arg1); }; return (XML(_arg1)); } public static function string(_arg1):String{ if ((_arg1 is Class)){ _arg1 = new (_arg1); }; if ((_arg1 is String)){ return (_arg1); }; return (String(_arg1)); } public static function tryclass(_arg1:String):Object{ var result:Class; var name = _arg1; if (notclasses[name]){ return (name); }; result = classes[name]; if (result != null){ return (result); }; try { result = (getDefinitionByName(name) as Class); classes[name] = result; return (result); } catch(error:ReferenceError) { }; notclasses[name] = true; return (name); } } }//package away3d.core.utils
Section 100
//CastError (away3d.core.utils.CastError) package away3d.core.utils { public class CastError extends Error { public function CastError(_arg1:String){ super(_arg1); } } }//package away3d.core.utils
Section 101
//Color (away3d.core.utils.Color) package away3d.core.utils { public class Color { public static const green:int = 0xFF00; public static const cyan:int = 0xFFFF; public static const white:int = 0xFFFFFF; public static const red:int = 0xFF0000; public static const blue:int = 0xFF; public static const yellow:int = 0xFFFF00; public static const purple:int = 0xFF00FF; public static const black:int = 0; public static function inverseAdd(_arg1:int, _arg2:int):int{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; _local3 = ((0xFF - _arg1) & (0xFF0000 >> 16)); _local4 = ((0xFF - _arg1) & (0xFF00 >> 8)); _local5 = ((0xFF - _arg1) & 0xFF); _local6 = ((0xFF - _arg2) & (0xFF0000 >> 16)); _local7 = ((0xFF - _arg2) & (0xFF00 >> 8)); _local8 = ((0xFF - _arg2) & 0xFF); return (fromIntsCheck((0xFF - (_local3 + _local6)), (0xFF - (_local4 + _local7)), (0xFF - (_local5 + _local8)))); } public static function add(_arg1:int, _arg2:int):int{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; _local3 = (_arg1 & (0xFF0000 >> 16)); _local4 = (_arg1 & (0xFF00 >> 8)); _local5 = (_arg1 & 0xFF); _local6 = (_arg2 & (0xFF0000 >> 16)); _local7 = (_arg2 & (0xFF00 >> 8)); _local8 = (_arg2 & 0xFF); return (fromIntsCheck((_local3 + _local6), (_local4 + _local7), (_local5 + _local8))); } public static function multiply(_arg1:int, _arg2:Number):int{ var _local3:int; var _local4:int; var _local5:int; _local3 = (_arg1 & (0xFF0000 >> 16)); _local4 = (_arg1 & (0xFF00 >> 8)); _local5 = (_arg1 & 0xFF); return (fromIntsCheck(int((_local3 * _arg2)), int((_local4 * _arg2)), int((_local5 * _arg2)))); } public static function fromIntsCheck(_arg1:int, _arg2:int, _arg3:int):int{ _arg1 = Math.max(0, Math.min(0xFF, _arg1)); _arg2 = Math.max(0, Math.min(0xFF, _arg2)); _arg3 = Math.max(0, Math.min(0xFF, _arg3)); return ((((65536 * _arg1) + (0x0100 * _arg2)) + _arg3)); } public static function fromFloats(_arg1:Number, _arg2:Number, _arg3:Number):int{ return ((((65536 * int((_arg1 * 0xFF))) + (0x0100 * int((_arg2 * 0xFF)))) + int((_arg3 * 0xFF)))); } public static function fromInts(_arg1:int, _arg2:int, _arg3:int):int{ return ((((65536 * _arg1) + (0x0100 * _arg2)) + _arg3)); } public static function fromHSV(_arg1:Number, _arg2:Number, _arg3:Number):int{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:int; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; _local4 = (((_arg1 % 360) + 360) % 360); _local5 = _arg2; _local6 = _arg3; _local7 = (int((_local4 / 60)) % 6); _local8 = ((_local4 / 60) - _local7); _local9 = (_local6 * (1 - _local5)); _local10 = (_local6 * (1 - (_local8 * _local5))); _local11 = (_local6 * (1 - ((1 - _local8) * _local5))); switch (_local7){ case 0: return (fromFloats(_local6, _local11, _local9)); case 1: return (fromFloats(_local10, _local6, _local9)); case 2: return (fromFloats(_local9, _local6, _local11)); case 3: return (fromFloats(_local9, _local10, _local6)); case 4: return (fromFloats(_local11, _local9, _local6)); case 5: return (fromFloats(_local6, _local9, _local10)); }; return (0); } } }//package away3d.core.utils
Section 102
//Debug (away3d.core.utils.Debug) package away3d.core.utils { public class Debug { public static var warningsAsErrors:Boolean = false; public static var active:Boolean = false; public static function warning(_arg1:Object):void{ if (warningsAsErrors){ error(_arg1); return; }; trace(("WARNING: " + _arg1)); } public static function trace(_arg1:Object):void{ if (active){ dotrace(_arg1); }; } public static function delimiter():void{ } public static function clear():void{ } public static function error(_arg1:Object):void{ trace(("ERROR: " + _arg1)); throw (new Error(_arg1)); } } }//package away3d.core.utils private const dotrace:Function = function (_arg1:Object):void{ trace(_arg1); };
Section 103
//DofCache (away3d.core.utils.DofCache) package away3d.core.utils { import flash.geom.*; import flash.display.*; import flash.utils.*; import flash.filters.*; public class DofCache { private var minBitmap:BitmapData; private var bitmaps:Array; private var maxBitmap:BitmapData; private var levels:Number; public static var doflevels:Number = 16; public static var maxblur:Number = 150; public static var aperture:Number = 22; private static var caches:Dictionary = new Dictionary(); public static var usedof:Boolean = false; public static var focus:Number; public function DofCache(_arg1:Number, _arg2:BitmapData){ var _local3:Matrix; var _local4:Point; var _local5:Number; var _local6:BlurFilter; var _local7:int; var _local8:BitmapData; super(); this.levels = _arg1; _local3 = new Matrix(); _local4 = new Point(0, 0); bitmaps = new Array(_arg1); _local5 = 0; while (_local5 < _arg1) { _local6 = new BlurFilter((2 + ((maxblur * _local5) / _arg1)), (2 + ((maxblur * _local5) / _arg1)), 4); _local3.identity(); _local7 = (_arg2.width * (1 + (_local5 / (_arg1 / 2)))); _local3.translate((-(_arg2.width) / 2), (-(_arg2.height) / 2)); _local3.translate((_local7 / 2), (_local7 / 2)); _local8 = new BitmapData(_local7, _local7, true, 0); _local8.draw(_arg2, _local3); _local8.applyFilter(_local8, _local8.rect, _local4, _local6); bitmaps[_local5] = _local8; _local5++; }; minBitmap = bitmaps[0]; maxBitmap = bitmaps[(bitmaps.length - 1)]; } public function getBitmap(_arg1:Number):BitmapData{ var _local2:Number; _local2 = (focus - _arg1); if ((focus - _arg1) < 0){ _local2 = -(_local2); }; _local2 = (_local2 / aperture); _local2 = Math.floor(_local2); if (_local2 > (levels - 1)){ return (maxBitmap); }; if (_local2 < 0){ return (minBitmap); }; return (bitmaps[_local2]); } public static function resetDof(_arg1:Boolean):void{ var _local2:DofCache; usedof = _arg1; for each (_local2 in caches) { if (!_arg1){ _local2 = new DofCache(1, _local2.bitmaps[0]); } else { _local2 = new DofCache(doflevels, _local2.bitmaps[0]); }; }; } public static function getDofCache(_arg1:BitmapData):DofCache{ if (caches[_arg1] == null){ if (!usedof){ caches[_arg1] = new DofCache(1, _arg1); } else { caches[_arg1] = new DofCache(doflevels, _arg1); }; }; return (caches[_arg1]); } } }//package away3d.core.utils
Section 104
//DrawPrimitiveStore (away3d.core.utils.DrawPrimitiveStore) package away3d.core.utils { import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.materials.*; import away3d.core.block.*; import away3d.core.render.*; import flash.utils.*; public class DrawPrimitiveStore { private var _sv:ScreenVertex; private var _cbStore:Array; private var _length:int; private var _sbArray:Array; private var _dbDictionary:Dictionary; private var _seg:DrawSegment; private var _sbStore:Array; private var _screenIndices:Array; private var _cblocker:ConvexBlocker; private var _sbitmap:DrawScaledBitmap; private var _screenVertices:Array; private var _dtDictionary:Dictionary; private var _sbDictionary:Dictionary; public var blockerDictionary:Dictionary; private var _screenCommands:Array; private var _cbDictionary:Dictionary; private var _source:Object3D; private var _vertex:Object; private var _dbStore:Array; public var view:View3D; private var _indexDictionary:Dictionary; private var _dsArray:Array; private var _index:int; private var _doArray:Array; private var _session:AbstractRenderSession; private var _array:Array; private var _object:Object; private var _dsStore:Array; private var _doDictionary:Dictionary; private var _dbArray:Array; private var _dtArray:Array; private var _dobject:DrawDisplayObject; private var _tri:DrawTriangle; private var _bill:DrawBillboard; private var _doStore:Array; private var _dtStore:Array; private var _dsDictionary:Dictionary; private var _svArray:Array; private var _cbArray:Array; private var _svStore:Array; public function DrawPrimitiveStore(){ _screenVertices = new Array(); _screenIndices = new Array(); _screenCommands = new Array(); _array = new Array(); _svStore = []; _dtDictionary = new Dictionary(true); _dtStore = []; _dsDictionary = new Dictionary(true); _dsStore = []; _dbDictionary = new Dictionary(true); _dbStore = []; _cbDictionary = new Dictionary(true); _cbStore = []; _sbDictionary = new Dictionary(true); _sbStore = []; _doDictionary = new Dictionary(true); _doStore = []; blockerDictionary = new Dictionary(true); super(); } public function getScreenCommands(_arg1:int):Array{ return (((_screenCommands[_arg1]) || ((_screenCommands[_arg1] = [])))); } public function createDrawTriangle(_arg1:Object3D, _arg2:FaceVO, _arg3:ITriangleMaterial, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:int, _arg8:int, _arg9:UV, _arg10:UV, _arg11:UV, _arg12:Boolean=false):DrawTriangle{ if (!(_dtArray = _dtDictionary[_arg1.session])){ _dtArray = (_dtDictionary[_arg1.session] = []); }; if (_dtStore.length){ _dtArray[_dtArray.length] = (_tri = _dtStore.pop()); } else { _dtArray[_dtArray.length] = (_tri = new DrawTriangle()); _tri.view = view; _tri.create = createDrawTriangle; }; _tri.reverseArea = _arg2.reverseArea; _tri.generated = _arg12; _tri.source = _arg1; _tri.faceVO = _arg2; _tri.material = _arg3; _tri.screenVertices = _arg4; _tri.screenIndices = _arg5; _tri.screenCommands = _arg6; _tri.startIndex = _arg7; _tri.endIndex = _arg8; _tri.uv0 = _arg9; _tri.uv1 = _arg10; _tri.uv2 = _arg11; _tri.calc(); return (_tri); } public function createConvexBlocker(_arg1:Object3D, _arg2:Array):ConvexBlocker{ if (!(_cbArray = _cbDictionary[_arg1.session])){ _cbArray = (_cbDictionary[_arg1.session] = []); }; if (_cbStore.length){ _cbArray[_cbArray.length] = (_cblocker = (blockerDictionary[_arg1] = _cbStore.pop())); } else { _cbArray[_cbArray.length] = (_cblocker = (blockerDictionary[_arg1] = new ConvexBlocker())); _cblocker.view = view; _cblocker.create = createConvexBlocker; }; _cblocker.source = _arg1; _cblocker.vertices = _arg2; _cblocker.calc(); return (_cblocker); } public function createDrawDisplayObject(_arg1:Object3D, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:AbstractRenderSession, _arg6:DisplayObject, _arg7:Boolean=false):DrawDisplayObject{ if (!(_doArray = _doDictionary[_arg1.session])){ _doArray = (_doDictionary[_arg1.session] = []); }; if (_doStore.length){ _doArray[_doArray.length] = (_dobject = _doStore.pop()); } else { _doArray[_doArray.length] = (_dobject = new DrawDisplayObject()); _dobject.view = view; _dobject.create = createDrawSegment; }; _dobject.generated = _arg7; _dobject.source = _arg1; _dobject.vx = _arg2; _dobject.vy = _arg3; _dobject.vz = _arg4; _dobject.session = _arg5; _dobject.displayobject = _arg6; _dobject.calc(); return (_dobject); } public function getScreenVertices(_arg1:int):Array{ return (((_screenVertices[_arg1]) || ((_screenVertices[_arg1] = [])))); } public function createDrawScaledBitmap(_arg1:Object3D, _arg2:Array, _arg3:Boolean, _arg4:BitmapData, _arg5:Number, _arg6:Number, _arg7:Boolean=false):DrawScaledBitmap{ if (!(_sbArray = _sbDictionary[_arg1.session])){ _sbArray = (_sbDictionary[_arg1.session] = []); }; if (_sbStore.length){ _sbArray[_sbArray.length] = (_sbitmap = _sbStore.pop()); } else { _sbArray[_sbArray.length] = (_sbitmap = new DrawScaledBitmap()); _sbitmap.view = view; _sbitmap.create = createDrawSegment; }; _sbitmap.generated = _arg7; _sbitmap.source = _arg1; _sbitmap.vx = _arg2[0]; _sbitmap.vy = _arg2[1]; _sbitmap.vz = _arg2[2]; _sbitmap.smooth = _arg3; _sbitmap.bitmap = _arg4; _sbitmap.scale = _arg5; _sbitmap.rotation = _arg6; _sbitmap.calc(); return (_sbitmap); } public function createDrawBillboard(_arg1:Object3D, _arg2:BillboardVO, _arg3:IBillboardMaterial, _arg4:Array, _arg5:Array, _arg6:uint, _arg7:Number, _arg8:Boolean=false):DrawBillboard{ if (!(_dbArray = _dbDictionary[_arg1.session])){ _dbArray = (_dbDictionary[_arg1.session] = []); }; if (_dbStore.length){ _dbArray.push((_bill = _dbStore.pop())); } else { _dbArray.push((_bill = new DrawBillboard())); _bill.view = view; _bill.create = createDrawBillboard; }; _bill.generated = _arg8; _bill.source = _arg1; _bill.material = _arg3; _bill.billboardVO = _arg2; _bill.screenVertices = _arg4; _bill.screenIndices = _arg5; _bill.index = _arg6; _bill.width = _arg2.width; _bill.height = _arg2.height; _bill.rotation = _arg2.rotation; _bill.scale = _arg7; _bill.calc(); return (_bill); } public function createDrawSegment(_arg1:Object3D, _arg2:SegmentVO, _arg3:ISegmentMaterial, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:int, _arg8:int, _arg9:Boolean=false):DrawSegment{ if (!(_dsArray = _dsDictionary[_arg1.session])){ _dsArray = (_dsDictionary[_arg1.session] = []); }; if (_dsStore.length){ _dsArray[_dsArray.length] = (_seg = _dsStore.pop()); } else { _dsArray[_dsArray.length] = (_seg = new DrawSegment()); _seg.view = view; _seg.create = createDrawSegment; }; _seg.generated = _arg9; _seg.source = _arg1; _seg.segmentVO = _arg2; _seg.material = _arg3; _seg.screenVertices = _arg4; _seg.screenIndices = _arg5; _seg.screenCommands = _arg6; _seg.startIndex = _arg7; _seg.endIndex = _arg8; _seg.calc(); return (_seg); } public function getScreenIndices(_arg1:int):Array{ return (((_screenIndices[_arg1]) || ((_screenIndices[_arg1] = [])))); } public function reset():void{ for (_object in _dtDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _dtArray = (_dtDictionary[_session] as Array); if (_dtArray.length){ _dtStore = _dtStore.concat(_dtArray); _dtArray.length = 0; }; }; }; for (_object in _dsDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _dsArray = (_dsDictionary[_session] as Array); if (_dsArray.length){ _dsStore = _dsStore.concat(_dsArray); _dsArray.length = 0; }; }; }; for (_object in _dbDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _dbArray = (_dbDictionary[_session] as Array); if (_dbArray.length){ _dbStore = _dbStore.concat(_dbArray); _dbArray.length = 0; }; }; }; for (_object in _cbDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _cbArray = (_cbDictionary[_session] as Array); if (_cbArray.length){ _cbStore = _cbStore.concat(_cbArray); _cbArray.length = 0; }; }; }; for (_object in _sbDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _sbArray = (_sbDictionary[_session] as Array); if (_sbArray.length){ _sbStore = _sbStore.concat(_sbArray); _sbArray.length = 0; }; }; }; for (_object in _doDictionary) { _session = (_object as AbstractRenderSession); if (_session.updated){ _doArray = (_doDictionary[_session] as Array); if (_doArray.length){ _doStore = _doStore.concat(_doArray); _doArray.length = 0; }; }; }; } } }//package away3d.core.utils
Section 105
//FaceMaterialVO (away3d.core.utils.FaceMaterialVO) package away3d.core.utils { import flash.geom.*; import flash.display.*; import away3d.containers.*; import away3d.core.base.*; public class FaceMaterialVO { public var invtexturemapping:Matrix; public var width:int; public var invalidated:Boolean;// = true public var backface:Boolean;// = false public var texturemapping:Matrix; public var source:Object3D; public var color:uint; public var view:View3D; public var height:int; public var cleared:Boolean;// = true public var bitmap:BitmapData; public var resized:Boolean; public var updated:Boolean;// = false public function FaceMaterialVO(_arg1:Object3D=null, _arg2:View3D=null){ cleared = true; updated = false; invalidated = true; backface = false; super(); this.source = _arg1; this.view = _arg2; } public function clear():void{ cleared = true; updated = true; } public function resize(_arg1:Number, _arg2:Number, _arg3:Boolean=true):void{ if ((((this.width == _arg1)) && ((this.height == _arg2)))){ return; }; resized = true; updated = true; this.width = _arg1; this.height = _arg2; this.color = color; if (bitmap){ bitmap.dispose(); }; bitmap = new BitmapData(_arg1, _arg2, _arg3, 0); bitmap.lock(); } } }//package away3d.core.utils
Section 106
//FaceVO (away3d.core.utils.FaceVO) package away3d.core.utils { import flash.geom.*; import away3d.core.base.*; import away3d.materials.*; public class FaceVO { public var commands:Array; public var generated:Boolean; public var face:Face; public var reverseArea:Boolean; public var material:ITriangleMaterial; public var back:ITriangleMaterial; public var uv0:UV; public var uv1:UV; public var uv2:UV; public var bitmapRect:Rectangle; public var vertices:Array; public var v0:Vertex; public var v1:Vertex; public var v2:Vertex; public function FaceVO(){ commands = new Array(); vertices = new Array(); super(); } public function get maxU():Number{ if (uv0.u > uv1.u){ if (uv0.u > uv2.u){ return (uv0.u); }; return (uv2.u); //unresolved jump }; if (uv1.u > uv2.u){ return (uv1.u); }; return (uv2.u); } public function get minU():Number{ if (uv0.u < uv1.u){ if (uv0.u < uv2.u){ return (uv0.u); }; return (uv2.u); //unresolved jump }; if (uv1.u < uv2.u){ return (uv1.u); }; return (uv2.u); } public function get minV():Number{ if (uv0.v < uv1.v){ if (uv0.v < uv2.v){ return (uv0.v); }; return (uv2.v); //unresolved jump }; if (uv1.v < uv2.v){ return (uv1.v); }; return (uv2.v); } public function get maxV():Number{ if (uv0.v > uv1.v){ if (uv0.v > uv2.v){ return (uv0.v); }; return (uv2.v); //unresolved jump }; if (uv1.v > uv2.v){ return (uv1.v); }; return (uv2.v); } } }//package away3d.core.utils
Section 107
//IClonable (away3d.core.utils.IClonable) package away3d.core.utils { import away3d.core.base.*; public interface IClonable { function clone(_arg1:Object3D=null):Object3D; } }//package away3d.core.utils
Section 108
//Init (away3d.core.utils.Init) package away3d.core.utils { import flash.display.*; import away3d.core.base.*; import away3d.core.math.*; import away3d.primitives.data.*; import away3d.materials.*; public class Init { var init:Object; private static var inits:Array = []; public function Init(_arg1:Object){ this.init = _arg1; } public function getArray(_arg1:String):Array{ var _local2:Array; if (init == null){ return ([]); }; if (!init.hasOwnProperty(_arg1)){ return ([]); }; _local2 = init[_arg1]; delete init[_arg1]; return (_local2); } public function getSegmentMaterial(_arg1:String):ISegmentMaterial{ var _local2:ISegmentMaterial; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; _local2 = Cast.wirematerial(init[_arg1]); delete init[_arg1]; return (_local2); } public function getBitmap(_arg1:String):BitmapData{ var _local2:BitmapData; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; _local2 = Cast.bitmap(init[_arg1]); delete init[_arg1]; return (_local2); } public function getObject3D(_arg1:String):Object3D{ return ((getObject(_arg1, Object3D) as Object3D)); } public function getString(_arg1:String, _arg2:String):String{ var _local3:String; if (init == null){ return (_arg2); }; if (!init.hasOwnProperty(_arg1)){ return (_arg2); }; _local3 = init[_arg1]; delete init[_arg1]; return (_local3); } public function getObjectOrInit(_arg1:String, _arg2:Class=null):Object{ var _local3:Object; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; _local3 = init[_arg1]; delete init[_arg1]; if (_local3 == null){ return (null); }; if (_arg2 != null){ if (!(_local3 is _arg2)){ return (new _arg2(_local3)); }; }; return (_local3); } function removeFromCheck():void{ if (init == null){ return; }; init["dontCheckUnused"] = true; } public function getPosition(_arg1:String):Number3D{ var _local2:Object; var _local3:Object3D; _local2 = getObject(_arg1); if (_local2 == null){ return (null); }; if ((_local2 is Number3D)){ return ((_local2 as Number3D)); }; if ((_local2 is Object3D)){ _local3 = (_local2 as Object3D); return ((_local3.scene) ? _local3.scenePosition : _local3.position); }; if ((_local2 is String)){ if (_local2 == "center"){ return (new Number3D()); }; }; throw (new CastError(("Cast get position of " + _local2))); } public function getInit(_arg1:String):Init{ var _local2:Init; if (init == null){ return (new Init(null)); }; if (!init.hasOwnProperty(_arg1)){ return (new Init(null)); }; _local2 = Init.parse(init[_arg1]); delete init[_arg1]; return (_local2); } public function getBoolean(_arg1:String, _arg2:Boolean):Boolean{ var _local3:Boolean; if (init == null){ return (_arg2); }; if (!init.hasOwnProperty(_arg1)){ return (_arg2); }; _local3 = init[_arg1]; delete init[_arg1]; return (_local3); } public function getColor(_arg1:String, _arg2:uint):uint{ var _local3:uint; if (init == null){ return (_arg2); }; if (!init.hasOwnProperty(_arg1)){ return (_arg2); }; _local3 = Cast.color(init[_arg1]); delete init[_arg1]; return (_local3); } public function getObject(_arg1:String, _arg2:Class=null):Object{ var _local3:Object; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; _local3 = init[_arg1]; delete init[_arg1]; if (_local3 == null){ return (null); }; if (_arg2 != null){ if (!(_local3 is _arg2)){ throw (new CastError(((((("Parameter \"" + _arg1) + "\" is not of class ") + _arg2) + ": ") + _local3))); }; }; return (_local3); } public function getNumber3D(_arg1:String):Number3D{ return ((getObject(_arg1, Number3D) as Number3D)); } function addForCheck():void{ if (init == null){ return; }; init["dontCheckUnused"] = false; inits.push(init); } public function getInt(_arg1:String, _arg2:int, _arg3:Object=null):int{ var _local4:int; var _local5:int; var _local6:int; if (init == null){ return (_arg2); }; if (!init.hasOwnProperty(_arg1)){ return (_arg2); }; _local4 = init[_arg1]; if (_arg3 != null){ if (_arg3.hasOwnProperty("min")){ _local5 = _arg3["min"]; if (_local4 < _local5){ _local4 = _local5; }; }; if (_arg3.hasOwnProperty("max")){ _local6 = _arg3["max"]; if (_local4 > _local6){ _local4 = _local6; }; }; }; delete init[_arg1]; return (_local4); } public function getCubeMaterials(_arg1:String):CubeMaterialsData{ var _local2:CubeMaterialsData; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; if ((init[_arg1] is CubeMaterialsData)){ _local2 = (init[_arg1] as CubeMaterialsData); } else { if ((init[_arg1] is Object)){ _local2 = new CubeMaterialsData(init[_arg1]); }; }; delete init[_arg1]; return (_local2); } public function getMaterial(_arg1:String):IMaterial{ var _local2:IMaterial; if (init == null){ return (null); }; if (!init.hasOwnProperty(_arg1)){ return (null); }; _local2 = Cast.material(init[_arg1]); delete init[_arg1]; return (_local2); } public function getNumber(_arg1:String, _arg2:Number, _arg3:Object=null):Number{ var _local4:Number; var _local5:Number; var _local6:Number; if (init == null){ return (_arg2); }; if (!init.hasOwnProperty(_arg1)){ return (_arg2); }; _local4 = init[_arg1]; if (_arg3 != null){ if (_arg3.hasOwnProperty("min")){ _local5 = _arg3["min"]; if (_local4 < _local5){ _local4 = _local5; }; }; if (_arg3.hasOwnProperty("max")){ _local6 = _arg3["max"]; if (_local4 > _local6){ _local4 = _local6; }; }; }; delete init[_arg1]; return (_local4); } static function checkUnusedArguments():void{ var _local1:Array; var _local2:Object; var _local3:String; var _local4:String; if (inits.length == 0){ return; }; _local1 = inits; inits = []; for each (_local2 in _local1) { if (_local2.hasOwnProperty("dontCheckUnused")){ //unresolved if } else { _local3 = null; for (_local4 in _local2) { if (_local4 == "dontCheckUnused"){ } else { if (_local3 == null){ _local3 = ""; } else { _local3 = (_local3 + ", "); }; _local3 = (_local3 + ((_local4 + ":") + _local2[_local4])); }; }; if (_local3 != null){ Debug.warning((("Unused arguments: {" + _local3) + "}")); }; }; }; } public static function parse(_arg1:Object):Init{ if (_arg1 == null){ return (new Init(null)); }; if ((_arg1 is Init)){ return ((_arg1 as Init)); }; inits.push(_arg1); return (new Init(_arg1)); } } }//package away3d.core.utils
Section 109
//SegmentVO (away3d.core.utils.SegmentVO) package away3d.core.utils { import away3d.core.base.*; import away3d.materials.*; public class SegmentVO { public var commands:Array; public var material:ISegmentMaterial; public var generated:Boolean; public var vertices:Array; public var v0:Vertex; public var v1:Vertex; public function SegmentVO(){ commands = new Array(); vertices = new Array(); super(); } } }//package away3d.core.utils
Section 110
//ValueObject (away3d.core.utils.ValueObject) package away3d.core.utils { import flash.events.*; public class ValueObject extends EventDispatcher { private static var changed:Event; public function addOnChange(_arg1:Function):void{ addEventListener("changed", _arg1, false, 0, true); } public function removeOnChange(_arg1:Function):void{ removeEventListener("changed", _arg1, false); } protected function notifyChange():void{ if (!hasEventListener("changed")){ return; }; if (changed == null){ changed = new Event("changed"); }; dispatchEvent(changed); } } }//package away3d.core.utils
Section 111
//AnimationEvent (away3d.events.AnimationEvent) package away3d.events { import flash.events.*; import away3d.core.base.*; public class AnimationEvent extends Event { public var animation:Animation; public static const SEQUENCE_DONE:String = "sequenceDone"; public static const CYCLE:String = "cycle"; public static const SEQUENCE_UPDATE:String = "sequenceUpdate"; public function AnimationEvent(_arg1:String, _arg2:Animation){ super(_arg1); this.animation = _arg2; } override public function clone():Event{ return (new AnimationEvent(type, animation)); } } }//package away3d.events
Section 112
//CameraEvent (away3d.events.CameraEvent) package away3d.events { import flash.events.*; import away3d.cameras.*; public class CameraEvent extends Event { public var camera:Camera3D; public static const CAMERA_UPDATED:String = "cameraUpdated"; public function CameraEvent(_arg1:String, _arg2:Camera3D){ super(_arg1); this.camera = _arg2; } override public function clone():Event{ return (new CameraEvent(type, camera)); } } }//package away3d.events
Section 113
//ClippingEvent (away3d.events.ClippingEvent) package away3d.events { import flash.events.*; import away3d.core.clip.*; public class ClippingEvent extends Event { public var clipping:Clipping; public static const SCREEN_UPDATED:String = "screenUpdated"; public static const CLIPPING_UPDATED:String = "clippingUpdated"; public function ClippingEvent(_arg1:String, _arg2:Clipping){ super(_arg1); this.clipping = _arg2; } override public function clone():Event{ return (new ClippingEvent(type, clipping)); } } }//package away3d.events
Section 114
//ElementEvent (away3d.events.ElementEvent) package away3d.events { import flash.events.*; import away3d.core.base.*; public class ElementEvent extends Event { public var element:Element; public static const MAPPING_CHANGED:String = "mappingChanged"; public static const VISIBLE_CHANGED:String = "visibleChanged"; public static const VERTEX_CHANGED:String = "vertexChanged"; public static const VERTEXVALUE_CHANGED:String = "vertexvalueChanged"; public function ElementEvent(_arg1:String, _arg2:Element){ super(_arg1); this.element = _arg2; } override public function clone():Event{ return (new ElementEvent(type, element)); } } }//package away3d.events
Section 115
//GeometryEvent (away3d.events.GeometryEvent) package away3d.events { import flash.events.*; import away3d.core.base.*; public class GeometryEvent extends Event { public var geometry:Geometry; public static const DIMENSIONS_CHANGED:String = "dimensionsChanged"; public function GeometryEvent(_arg1:String, _arg2:Geometry){ super(_arg1); this.geometry = _arg2; } override public function clone():Event{ return (new GeometryEvent(type, geometry)); } } }//package away3d.events
Section 116
//MaterialEvent (away3d.events.MaterialEvent) package away3d.events { import flash.events.*; import away3d.materials.*; public class MaterialEvent extends Event { public var extra:Object; public var material:IMaterial; public static const MATERIAL_UPDATED:String = "materialUpdated"; public static const LOAD_PROGRESS:String = "loadProgress"; public static const LOAD_SUCCESS:String = "loadSuccess"; public static const MATERIAL_CHANGED:String = "materialChanged"; public static const LOAD_ERROR:String = "loadError"; public function MaterialEvent(_arg1:String, _arg2:IMaterial){ super(_arg1); this.material = _arg2; } override public function clone():Event{ return (new MaterialEvent(type, material)); } } }//package away3d.events
Section 117
//MouseEvent3D (away3d.events.MouseEvent3D) package away3d.events { import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.materials.*; public class MouseEvent3D extends Event { public var shiftKey:Boolean; public var sceneX:Number; public var sceneY:Number; public var sceneZ:Number; public var view:View3D; public var uv:UV; public var screenY:Number; public var screenZ:Number; public var drawpri:DrawPrimitive; public var screenX:Number; public var ctrlKey:Boolean; public var material:IUVMaterial; public var element:Object; public var object:Object3D; public static const MOUSE_MOVE:String = "mouseMove3d"; public static const MOUSE_OVER:String = "mouseOver3d"; public static const ROLL_OUT:String = "rollOut3d"; public static const MOUSE_OUT:String = "mouseOut3d"; public static const MOUSE_UP:String = "mouseUp3d"; public static const MOUSE_DOWN:String = "mouseDown3d"; public static const ROLL_OVER:String = "rollOver3d"; public function MouseEvent3D(_arg1:String){ super(_arg1, false, true); } override public function clone():Event{ var _local1:MouseEvent3D; _local1 = new MouseEvent3D(type); if (isDefaultPrevented()){ _local1.preventDefault(); }; _local1.screenX = screenX; _local1.screenY = screenY; _local1.screenZ = screenZ; _local1.sceneX = sceneX; _local1.sceneY = sceneY; _local1.sceneZ = sceneZ; _local1.view = view; _local1.object = object; _local1.element = element; _local1.drawpri = drawpri; _local1.material = material; _local1.uv = uv; _local1.ctrlKey = ctrlKey; _local1.shiftKey = shiftKey; return (_local1); } } }//package away3d.events
Section 118
//Object3DEvent (away3d.events.Object3DEvent) package away3d.events { import flash.events.*; import away3d.core.base.*; public class Object3DEvent extends Event { public var object:Object3D; public static const TRANSFORM_CHANGED:String = "transformChanged"; public static const PARENT_UPDATED:String = "parentUpdated"; public static const SCENE_CHANGED:String = "sceneChanged"; public static const SESSION_CHANGED:String = "sessionChanged"; public static const SESSION_UPDATED:String = "sessionUpdated"; public static const SCENETRANSFORM_CHANGED:String = "scenetransformChanged"; public static const DIMENSIONS_CHANGED:String = "dimensionsChanged"; public function Object3DEvent(_arg1:String, _arg2:Object3D){ super(_arg1); this.object = _arg2; } override public function clone():Event{ return (new Object3DEvent(type, object)); } } }//package away3d.events
Section 119
//SessionEvent (away3d.events.SessionEvent) package away3d.events { import flash.events.*; import away3d.core.render.*; public class SessionEvent extends Event { public var session:AbstractRenderSession; public static const SESSION_UPDATED:String = "sessionUpdated"; public function SessionEvent(_arg1:String, _arg2:AbstractRenderSession){ super(_arg1); this.session = _arg2; } override public function clone():Event{ return (new SessionEvent(type, session)); } } }//package away3d.events
Section 120
//ViewEvent (away3d.events.ViewEvent) package away3d.events { import flash.events.*; import away3d.containers.*; public class ViewEvent extends Event { public var view:View3D; public static const RENDER_COMPLETE:String = "renderComplete"; public static const UPDATE_SCENE:String = "updateScene"; public function ViewEvent(_arg1:String, _arg2:View3D){ super(_arg1); this.view = _arg2; } override public function clone():Event{ return (new ViewEvent(type, view)); } } }//package away3d.events
Section 121
//Merge (away3d.geom.Merge) package away3d.geom { import away3d.core.base.*; import away3d.core.math.*; import away3d.materials.*; public class Merge { private var _unicgeometry:Boolean; private var _objectspace:Boolean; private var _keepMaterial:Boolean; public function Merge(_arg1:Boolean=true, _arg2:Boolean=false, _arg3:Boolean=false):void{ _objectspace = _arg1; _unicgeometry = _arg2; _keepMaterial = _arg3; } public function get unicgeometry():Boolean{ return (_unicgeometry); } public function set unicgeometry(_arg1:Boolean):void{ _unicgeometry = _arg1; } public function get keepMaterial():Boolean{ return (_keepMaterial); } public function apply(_arg1:Mesh, _arg2:Mesh):void{ merge(_arg1, _arg2); } public function set keepmaterial(_arg1:Boolean):void{ _keepMaterial = _arg1; } public function set objectspace(_arg1:Boolean):void{ _objectspace = _arg1; } private function applyPosition(_arg1:Vertex, _arg2:Number3D, _arg3:Number, _arg4:Number, _arg5:Number):Vertex{ 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; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; _local11 = (Math.PI / 180); _local12 = (_arg3 * _local11); _local13 = (_arg4 * _local11); _local14 = (_arg5 * _local11); _local15 = Math.sin(_local12); _local16 = Math.cos(_local12); _local17 = Math.sin(_local13); _local18 = Math.cos(_local13); _local19 = Math.sin(_local14); _local20 = Math.cos(_local14); _local6 = (_arg1.x + _arg2.x); _local7 = (_arg1.y + _arg2.y); _local8 = (_arg1.z + _arg2.z); _local10 = _local7; _local7 = ((_local10 * _local16) + (_local8 * -(_local15))); _local8 = ((_local10 * _local15) + (_local8 * _local16)); _local9 = _local6; _local6 = ((_local9 * _local18) + (_local8 * _local17)); _local8 = ((_local9 * -(_local17)) + (_local8 * _local18)); _local9 = _local6; _local6 = ((_local9 * _local20) + (_local7 * -(_local19))); _local7 = ((_local9 * _local19) + (_local7 * _local20)); _arg1.setValue(_local6, _local7, _local8); return (_arg1); } private function merge(_arg1:Mesh, _arg2:Mesh):void{ var _local3:int; var _local4:Vertex; var _local5:Vertex; var _local6:Vertex; var _local7:UV; var _local8:UV; var _local9:UV; var _local10:Face; var _local11:ITriangleMaterial; if (((_unicgeometry) || (!(_objectspace)))){ _local3 = 0; while (_local3 < _arg2.faces.length) { _local10 = _arg2.faces[_local3]; _local4 = new Vertex(_local10.v0.x, _local10.v0.y, _local10.v0.z); _local5 = new Vertex(_local10.v1.x, _local10.v1.y, _local10.v1.z); _local6 = new Vertex(_local10.v2.x, _local10.v2.y, _local10.v2.z); _local7 = new UV(_local10.uv0.u, _local10.uv0.v); _local8 = new UV(_local10.uv1.u, _local10.uv1.v); _local9 = new UV(_local10.uv2.u, _local10.uv2.v); if (!_objectspace){ _local4 = applyPosition(_local4, _arg2.scenePosition, _arg2.rotationX, _arg2.rotationY, _arg2.rotationZ); _local5 = applyPosition(_local5, _arg2.scenePosition, _arg2.rotationX, _arg2.rotationY, _arg2.rotationZ); _local6 = applyPosition(_local6, _arg2.scenePosition, _arg2.rotationX, _arg2.rotationY, _arg2.rotationZ); }; _local11 = (_keepMaterial) ? (_arg2.material as ITriangleMaterial) : (_arg1.material as ITriangleMaterial); _arg1.addFace(new Face(_local4, _local5, _local6, _local11, _local7, _local8, _local9)); _local3++; }; } else { _local3 = 0; while (_local3 < _arg2.faces.length) { _local11 = (_keepMaterial) ? (_arg2.material as ITriangleMaterial) : (_arg1.material as ITriangleMaterial); _local10 = _arg2.faces[_local3]; _arg1.addFace(new Face(_local10.v0, _local10.v1, _local10.v2, _local11, _local10.uv0, _local10.uv1, _local10.uv2)); _local3++; }; }; } public function get objectspace():Boolean{ return (_objectspace); } } }//package away3d.geom
Section 122
//AmbientLight3D (away3d.lights.AmbientLight3D) package away3d.lights { import away3d.primitives.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.materials.*; import away3d.core.light.*; public class AmbientLight3D extends Object3D implements ILightProvider, IClonable { private var _green:int; private var _ls:AmbientLight; private var _color:int; private var _debugMaterial:ColorMaterial; private var _blue:int; private var _ambient:Number; private var _debug:Boolean; private var _colorDirty:Boolean; private var _red:int; private var _debugPrimitive:Sphere; private var _ambientDirty:Boolean; public function AmbientLight3D(_arg1:Object=null){ _ls = new AmbientLight(); super(_arg1); color = ini.getColor("color", 0xFFFFFF); ambient = ini.getNumber("ambient", 0.5, {min:0, max:1}); debug = ini.getBoolean("debug", false); } public function get debug():Boolean{ return (_debug); } public function get ambient():Number{ return (_ambient); } public function set debug(_arg1:Boolean):void{ _debug = _arg1; } public function set color(_arg1:int):void{ _color = _arg1; _red = ((_color & 0xFF0000) >> 16); _green = ((_color & 0xFF00) >> 8); _blue = (_color & 0xFF); _colorDirty = true; } public function set ambient(_arg1:Number):void{ _ambient = _arg1; _ambientDirty = true; } public function light(_arg1:ILightConsumer):void{ if (_colorDirty){ _ls.red = _red; _ls.green = _green; _ls.blue = _blue; _colorDirty = false; }; if (_ambientDirty){ _ambientDirty = false; _ls.updateAmbientBitmap(_ambient); }; _arg1.ambientLight(_ls); } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:AmbientLight3D; _local2 = (((_arg1 as AmbientLight3D)) || (new AmbientLight3D())); super.clone(_local2); _local2.color = color; _local2.ambient = ambient; _local2.debug = debug; return (_local2); } public function get color():int{ return (_color); } public function get debugPrimitive():Object3D{ if (!_debugPrimitive){ _debugPrimitive = new Sphere(); _scene.clearId(_id); }; if (!_debugMaterial){ _debugMaterial = new ColorMaterial(); _debugPrimitive.material = _debugMaterial; }; _debugMaterial.color = color; return (_debugPrimitive); } } }//package away3d.lights
Section 123
//DirectionalLight3D (away3d.lights.DirectionalLight3D) package away3d.lights { import away3d.primitives.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.materials.*; import away3d.core.light.*; public class DirectionalLight3D extends Object3D implements ILightProvider, IClonable { private var _green:Number; private var _diffuse:Number; private var _ls:DirectionalLight; private var _specularDirty:Boolean; private var _color:int; private var _specular:Number; private var _debugMaterial:ColorMaterial; private var _blue:Number; private var _ambient:Number; private var _debug:Boolean; private var _diffuseDirty:Boolean; private var _colorDirty:Boolean; private var _red:Number; private var _debugPrimitive:Sphere; private var _brightness:Number; private var _ambientDirty:Boolean; public function DirectionalLight3D(_arg1:Object=null){ _ls = new DirectionalLight(); super(_arg1); color = ini.getColor("color", 0xFFFFFF); ambient = ini.getNumber("ambient", 0.5, {min:0, max:1}); diffuse = ini.getNumber("diffuse", 0.5, {min:0, max:10}); specular = ini.getNumber("specular", 1, {min:0, max:1}); brightness = ini.getNumber("brightness", 1); debug = ini.getBoolean("debug", false); _ls.light = this; } public function get brightness():Number{ return (_brightness); } public function get debug():Boolean{ return (_debug); } public function set specular(_arg1:Number):void{ if (_arg1 < 0){ _arg1 = 0; }; _specular = _arg1; _specularDirty = true; } public function get ambient():Number{ return (_ambient); } public function set brightness(_arg1:Number):void{ _brightness = _arg1; _ambientDirty = true; _diffuseDirty = true; _specularDirty = true; } public function set debug(_arg1:Boolean):void{ _debug = _arg1; } public function set color(_arg1:int):void{ _color = _arg1; _red = (((color & 0xFF0000) >> 16) / 0xFF); _green = (((color & 0xFF00) >> 8) / 0xFF); _blue = ((color & 0xFF) / 0xFF); _colorDirty = true; _ambientDirty = true; _diffuseDirty = true; _specularDirty = true; } public function set diffuse(_arg1:Number):void{ if (_arg1 < 0){ _arg1 = 0; }; _diffuse = _arg1; _diffuseDirty = true; } public function set ambient(_arg1:Number):void{ if (_arg1 < 0){ _arg1 = 0; }; _ambient = _arg1; _ambientDirty = true; } public function light(_arg1:ILightConsumer):void{ if (_colorDirty){ _ls.red = _red; _ls.green = _green; _ls.blue = _blue; }; _ls.ambient = (_ambient * _brightness); _ls.diffuse = (_diffuse * _brightness); _ls.specular = (_specular * _brightness); if (((_ambientDirty) || (_diffuseDirty))){ _ls.updateAmbientDiffuseBitmap(); }; if (_ambientDirty){ _ambientDirty = false; _ls.updateAmbientBitmap(); }; if (_diffuseDirty){ _diffuseDirty = false; _ls.updateDiffuseBitmap(); }; if (_specularDirty){ _specularDirty = false; _ls.updateSpecularBitmap(); }; _arg1.directionalLight(_ls); _colorDirty = false; } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:DirectionalLight3D; _local2 = (((_arg1 as DirectionalLight3D)) || (new DirectionalLight3D())); super.clone(_local2); _local2.color = color; _local2.brightness = brightness; _local2.ambient = ambient; _local2.diffuse = diffuse; _local2.specular = specular; _local2.debug = debug; return (_local2); } public function get diffuse():Number{ return (_diffuse); } public function get specular():Number{ return (_specular); } public function get color():int{ return (_color); } public function get debugPrimitive():Object3D{ if (!_debugPrimitive){ _debugPrimitive = new Sphere({radius:10}); _scene.clearId(_id); }; if (!_debugMaterial){ _debugMaterial = new ColorMaterial(); _debugPrimitive.material = _debugMaterial; }; _debugMaterial.color = color; return (_debugPrimitive); } } }//package away3d.lights
Section 124
//PointLight3D (away3d.lights.PointLight3D) package away3d.lights { import away3d.primitives.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.materials.*; import away3d.core.light.*; import away3d.geom.*; public class PointLight3D extends Object3D implements ILightProvider, IClonable { private var _ls:PointLight; public var brightness:Number; private var _color:uint; public var ambient:Number; private var _debugMaterial:ColorMaterial; private var _falloff:Number;// = 1000 public var diffuse:Number; private var _debug:Boolean; public var specular:Number; private var _radius:Number;// = 200 private var _debugPrimitive:Sphere; public function PointLight3D(_arg1:Object=null){ _ls = new PointLight(); _radius = 200; _falloff = 1000; super(_arg1); _color = ini.getColor("color", 0xFFFFFF); ambient = ini.getNumber("ambient", 1); diffuse = ini.getNumber("diffuse", 1); specular = ini.getNumber("specular", 1); brightness = (ini.getNumber("brightness", 1000) * 0xFF); debug = ini.getBoolean("debug", false); _radius = ini.getNumber("radius", 50); _falloff = ini.getNumber("fallOff", 1000); _ls.light = this; } public function get debug():Boolean{ return (_debug); } public function get radius():Number{ return (_radius); } public function set debug(_arg1:Boolean):void{ _debug = _arg1; } public function set color(_arg1:uint):void{ _color = _arg1; _ls.red = (((_color & 0xFF0000) >> 16) / 0xFF); _ls.green = (((_color & 0xFF00) >> 8) / 0xFF); _ls.blue = ((_color & 0xFF) / 0xFF); _debugPrimitive = null; } public function set radius(_arg1:Number):void{ _radius = _arg1; _falloff = ((radius)>_falloff) ? (radius + 1) : _falloff; _debugPrimitive = null; } public function light(_arg1:ILightConsumer):void{ _ls.red = (((_color & 0xFF0000) >> 16) / 0xFF); _ls.green = (((_color & 0xFF00) >> 8) / 0xFF); _ls.blue = ((_color & 0xFF) / 0xFF); _ls.ambient = (ambient * brightness); _ls.diffuse = (diffuse * brightness); _ls.specular = (specular * brightness); _ls.radius = _radius; _ls.fallOff = _falloff; _arg1.pointLight(_ls); } override public function clone(_arg1:Object3D=null):Object3D{ var _local2:PointLight3D; _local2 = (((_arg1 as PointLight3D)) || (new PointLight3D())); super.clone(_local2); _local2.color = _color; _local2.ambient = ambient; _local2.diffuse = diffuse; _local2.specular = specular; _local2.debug = debug; _local2.radius = _radius; _local2.fallOff = _falloff; return (_local2); } public function get color():uint{ return (_color); } public function get debugPrimitive():Object3D{ var _local1:Merge; var _local2:Sphere; if (!_debugPrimitive){ _debugPrimitive = new Sphere({radius:radius}); _scene.setId(_debugPrimitive); _debugMaterial = new ColorMaterial(); _debugPrimitive.material = _debugMaterial; _debugMaterial.color = color; _debugMaterial.alpha = 0.15; _local1 = new Merge(false, true, false); _local2 = new Sphere({segmentsW:10, segmentsH:8, material:_debugMaterial, radius:_falloff}); _local1.apply(_debugPrimitive, _local2); }; return (_debugPrimitive); } public function set fallOff(_arg1:Number):void{ _falloff = ((radius)>_falloff) ? (radius + 1) : _arg1; _debugPrimitive = null; _scene.clearId(_id); } public function get fallOff():Number{ return (_falloff); } } }//package away3d.lights
Section 125
//AnimationData (away3d.loaders.data.AnimationData) package away3d.loaders.data { import away3d.containers.*; import away3d.core.base.*; import flash.utils.*; import away3d.animators.*; public class AnimationData { public var start:Number;// = INF public var animation:IMeshAnimation; public var channels:Dictionary; public var name:String; public var end:Number;// = 0 public var animationType:String;// = "skinAnimation" public static const VERTEX_ANIMATION:String = "vertexAnimation"; public static const SKIN_ANIMATION:String = "skinAnimation"; public function AnimationData(){ start = Infinity; end = 0; animationType = SKIN_ANIMATION; channels = new Dictionary(true); super(); } public function clone(_arg1:Object3D):AnimationData{ var _local2:AnimationData; _local2 = _arg1.animationLibrary.addAnimation(name); _local2.start = start; _local2.end = end; _local2.animationType = animationType; _local2.animation = animation.clone((_arg1 as ObjectContainer3D)); return (_local2); } } }//package away3d.loaders.data
Section 126
//GeometryData (away3d.loaders.data.GeometryData) package away3d.loaders.data { import away3d.core.base.*; public class GeometryData { public var vertices:Array; public var maxX:Number; public var maxZ:Number; public var geoXML:XML; public var minZ:Number; public var geometry:Geometry; public var name:String; public var minX:Number; public var minY:Number; public var skinVertices:Array; public var skinControllers:Array; public var bothsides:Boolean; public var uvs:Array; public var ctrlXML:XML; public var maxY:Number; public var materials:Array; public var faces:Array; public function GeometryData(){ vertices = []; uvs = []; faces = []; materials = []; skinVertices = []; skinControllers = []; super(); } } }//package away3d.loaders.data
Section 127
//MaterialData (away3d.loaders.data.MaterialData) package away3d.loaders.data { import flash.display.*; import away3d.core.base.*; import away3d.materials.*; public class MaterialData { private var _material:IMaterial; public var materialType:String;// = "wireframeMaterial" public var name:String; public var shininess:Number; public var specularColor:uint; public var diffuseColor:uint; public var textureFileName:String; public var textureBitmap:BitmapData; public var ambientColor:uint; public var elements:Array; public static const COLOR_MATERIAL:String = "colorMaterial"; public static const TEXTURE_MATERIAL:String = "textureMaterial"; public static const SHADING_MATERIAL:String = "shadingMaterial"; public static const WIREFRAME_MATERIAL:String = "wireframeMaterial"; public function MaterialData(){ materialType = WIREFRAME_MATERIAL; elements = []; super(); } public function set material(_arg1:IMaterial):void{ var _local2:Element; if (_material == _arg1){ return; }; _material = _arg1; if ((_material is IUVMaterial)){ textureBitmap = (_material as IUVMaterial).bitmap; }; if ((_material is ITriangleMaterial)){ for each (_local2 in elements) { (_local2 as Face).material = (_material as ITriangleMaterial); }; } else { if ((_material is ISegmentMaterial)){ for each (_local2 in elements) { (_local2 as Segment).material = (_material as ISegmentMaterial); }; }; }; } public function clone(_arg1:Object3D):MaterialData{ var _local2:MaterialData; var _local3:Element; var _local4:Geometry; var _local5:Element; _local2 = _arg1.materialLibrary.addMaterial(name); _local2.materialType = materialType; _local2.ambientColor = ambientColor; _local2.diffuseColor = diffuseColor; _local2.shininess = shininess; _local2.specularColor = specularColor; _local2.textureBitmap = textureBitmap; _local2.textureFileName = textureFileName; _local2.material = material; for each (_local3 in elements) { _local4 = _local3.parent; _local5 = _local4.cloneElementDictionary[_local3]; _local2.elements.push(_local5); }; return (_local2); } public function get material():IMaterial{ return (_material); } } }//package away3d.loaders.data
Section 128
//AnimationLibrary (away3d.loaders.utils.AnimationLibrary) package away3d.loaders.utils { import away3d.core.utils.*; import flash.utils.*; import away3d.loaders.data.*; public dynamic class AnimationLibrary extends Dictionary { public function addAnimation(_arg1:String):AnimationData{ var _local2:AnimationData; if (this[_arg1]){ return (this[_arg1]); }; _local2 = new AnimationData(); var _local3 = (_local2.name = _arg1); this[_local3] = _local2; return (_local2); } public function getAnimation(_arg1:String):AnimationData{ if (this[_arg1]){ return (this[_arg1]); }; Debug.warning((("Animation '" + _arg1) + "' does not exist")); return (null); } } }//package away3d.loaders.utils
Section 129
//GeometryLibrary (away3d.loaders.utils.GeometryLibrary) package away3d.loaders.utils { import away3d.core.utils.*; import flash.utils.*; import away3d.loaders.data.*; public dynamic class GeometryLibrary extends Dictionary { private var _geometryArrayDirty:Boolean; public var name:String; private var _geometryArray:Array; public function getGeometry(_arg1:String):GeometryData{ if (this[_arg1]){ return (this[_arg1]); }; Debug.warning((("Geometry '" + _arg1) + "' does not exist")); return (null); } public function addGeometry(_arg1:String, _arg2:XML=null, _arg3:XML=null):GeometryData{ var _local4:GeometryData; if (this[_arg1]){ return (this[_arg1]); }; _geometryArrayDirty = true; _local4 = new GeometryData(); _local4.geoXML = _arg2; _local4.ctrlXML = _arg3; var _local5 = (_local4.name = _arg1); this[_local5] = _local4; return (_local4); } public function getGeometryArray():Array{ if (_geometryArrayDirty){ updateGeometryArray(); }; return (_geometryArray); } private function updateGeometryArray():void{ var _local1:GeometryData; _geometryArray = []; for each (_local1 in this) { _geometryArray.push(_local1); }; } } }//package away3d.loaders.utils
Section 130
//MaterialLibrary (away3d.loaders.utils.MaterialLibrary) package away3d.loaders.utils { import flash.display.*; import away3d.core.utils.*; import away3d.materials.*; import flash.utils.*; import away3d.loaders.data.*; public dynamic class MaterialLibrary extends Dictionary { public var texturePath:String; public var loadRequired:Boolean; private var length:int;// = 0 public function MaterialLibrary(){ length = 0; super(); } public function getMaterial(_arg1:String):MaterialData{ if (this[_arg1]){ return (this[_arg1]); }; Debug.warning((("Material '" + _arg1) + "' does not exist")); return (null); } public function addMaterial(_arg1:String):MaterialData{ var _local2:MaterialData; if (this[_arg1]){ return (this[_arg1]); }; length++; _local2 = new MaterialData(); var _local3 = (_local2.name = _arg1); this[_local3] = _local2; return (_local2); } public function texturesLoaded(_arg1:TextureLoadQueue):void{ var images:Array; var _materialData:MaterialData; var _image:TextureLoader; var loadQueue = _arg1; loadRequired = false; images = loadQueue.images; for each (_materialData in this) { for each (_image in images) { if ((texturePath + _materialData.textureFileName) == _image.filename){ try { _materialData.textureBitmap = new BitmapData(_image.width, _image.height, true, 0xFFFFFF); _materialData.textureBitmap.draw(_image); _materialData.material = new BitmapMaterial(_materialData.textureBitmap); } catch(e) { Debug.warning((("File not found : " + texturePath) + _materialData.textureFileName)); _materialData.material = new WireframeMaterial(); }; }; }; }; } } }//package away3d.loaders.utils
Section 131
//TextureLoader (away3d.loaders.utils.TextureLoader) package away3d.loaders.utils { import flash.display.*; import flash.net.*; import flash.system.*; public class TextureLoader extends Loader { private var _filename:String; public function get filename():String{ return (_filename); } override public function load(_arg1:URLRequest, _arg2:LoaderContext=null):void{ _filename = _arg1.url; super.load(_arg1, _arg2); } } }//package away3d.loaders.utils
Section 132
//TextureLoadQueue (away3d.loaders.utils.TextureLoadQueue) package away3d.loaders.utils { import flash.events.*; import flash.net.*; public class TextureLoadQueue extends EventDispatcher { private var _queue:Array; private var _currentItemIndex:int; public function TextureLoadQueue(){ _queue = []; } public function get currentURLRequest():URLRequest{ return ((_queue[currentItemIndex] as LoaderAndRequest).request); } public function get numItems():int{ return (_queue.length); } public function addItem(_arg1:TextureLoader, _arg2:URLRequest):void{ var _local3:LoaderAndRequest; for each (_local3 in _queue) { if (_local3.request.url == _arg2.url){ return; }; }; _queue.push(new LoaderAndRequest(_arg1, _arg2)); } public function get currentItemIndex():int{ return (_currentItemIndex); } private function calcProgress():Number{ var _local1:Number; var _local2:Number; _local1 = (currentItemIndex / numItems); _local2 = (calcCurrentLoaderAmountLoaded() / numItems); _local1 = _local2; return (_local1); } public function start():void{ _currentItemIndex = 0; loadNext(); } public function get percentLoaded():Number{ return ((progress * 100)); } private function onItemComplete(_arg1:Event):void{ cleanUpOldItem(currentLoader); _currentItemIndex++; loadNext(); } private function redispatchEvent(_arg1:Event):void{ dispatchEvent(_arg1); } public function get currentLoader():TextureLoader{ return ((_queue[currentItemIndex] as LoaderAndRequest).loader); } private function calcCurrentLoaderAmountLoaded():Number{ if (currentLoader.contentLoaderInfo.bytesLoaded > 0){ return ((currentLoader.contentLoaderInfo.bytesLoaded / currentLoader.contentLoaderInfo.bytesTotal)); }; return (0); } private function cleanUpOldItem(_arg1:TextureLoader):void{ currentLoader.removeEventListener(Event.COMPLETE, onItemComplete, false); currentLoader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, redispatchEvent, false); currentLoader.removeEventListener(IOErrorEvent.IO_ERROR, redispatchEvent, false); currentLoader.removeEventListener(ProgressEvent.PROGRESS, redispatchEvent, false); currentLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, redispatchEvent, false); } public function get images():Array{ var _local1:Array; var _local2:LoaderAndRequest; _local1 = []; for each (_local2 in _queue) { _local1.push(_local2.loader); }; return (_local1); } private function loadNext():void{ var _local1:ProgressEvent; if (_currentItemIndex >= numItems){ dispatchEvent(new Event(Event.COMPLETE)); } else { _local1 = new ProgressEvent(ProgressEvent.PROGRESS); _local1.bytesTotal = 100; _local1.bytesLoaded = percentLoaded; dispatchEvent(_local1); if ((((currentLoader.contentLoaderInfo.bytesLoaded > 0)) && ((currentLoader.contentLoaderInfo.bytesLoaded == currentLoader.contentLoaderInfo.bytesTotal)))){ } else { currentLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onItemComplete, false, int.MIN_VALUE, true); currentLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, redispatchEvent, false, 0, true); currentLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, redispatchEvent, false, 0, true); currentLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, redispatchEvent, false, 0, true); currentLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, redispatchEvent, false, 0, true); currentLoader.load(currentURLRequest); }; }; } public function get progress():Number{ return (calcProgress()); } } }//package away3d.loaders.utils import flash.net.*; class LoaderAndRequest { public var loader:TextureLoader; public var request:URLRequest; private function LoaderAndRequest(_arg1:TextureLoader, _arg2:URLRequest){ this.loader = _arg1; this.request = _arg2; } }
Section 133
//BitmapMaterial (away3d.materials.BitmapMaterial) package away3d.materials { import flash.geom.*; import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.clip.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.render.*; import flash.utils.*; import away3d.events.*; import away3d.cameras.lenses.*; public class BitmapMaterial extends EventDispatcher implements ITriangleMaterial, IUVMaterial, ILayerMaterial, IBillboardMaterial { var _green:Number;// = 1 var _blendMode:String; var _bitmapDirty:Boolean; private var ai:Number; private var ax:Number; private var ay:Number; private var az:Number; var _renderBitmap:BitmapData; var _zeroPoint:Point; var _bitmap:BitmapData; private var mcaz:Number; private var mcay:Number; private var bi:Number; private var by:Number; private var bz:Number; private var mcax:Number; private var bx:Number; var _alpha:Number;// = 1 var _color:uint;// = 0xFFFFFF private var ci:Number; private var cx:Number; private var cy:Number; private var cz:Number; private var x:Number; private var y:Number; var _faceMaterialVO:FaceMaterialVO; private var dmax:Number; private var _nn:Number3D; private var _shape:Shape; private var _screenVertices:Array; var _blendModeDirty:Boolean; private var _repeat:Boolean; private var mbcx:Number; private var mbcy:Number; private var mbcz:Number; private var _smooth:Boolean; private var _sv0x:Number; private var index:int; private var focus:Number; private var _sv0y:Number; private var _sv1x:Number; private var mabx:Number; private var maby:Number; private var dsab:Number; var _materialDirty:Boolean; private var dcax:Number; private var _showNormals:Boolean; private var _sv1y:Number; private var mabz:Number; private var dcay:Number; var _faceDictionary:Dictionary; private var _precision:Number; private var _near:Number; private var dsbc:Number; private var faz:Number; private var dsca:Number; private var _screenCommands:Array; var _blue:Number;// = 1 private var fbz:Number; var _bitmapRect:Rectangle; private var _debug:Boolean; var _session:AbstractRenderSession; var _colorTransformDirty:Boolean; private var map:Matrix; private var fcz:Number; var _colorTransform:ColorTransform; var _texturemapping:Matrix; var _sourceVO:FaceMaterialVO; private var _materialupdated:MaterialEvent; private var dbcx:Number; private var dbcy:Number; private var _view:View3D; var _mapping:Matrix; private var dabx:Number; private var _screenIndices:Array; private var daby:Number; var _id:int; var _red:Number;// = 1 var _graphics:Graphics; protected var ini:Init; var _s:Shape; public function BitmapMaterial(_arg1:BitmapData, _arg2:Object=null){ _color = 0xFFFFFF; _red = 1; _green = 1; _blue = 1; _alpha = 1; _faceDictionary = new Dictionary(true); _zeroPoint = new Point(0, 0); _s = new Shape(); map = new Matrix(); _nn = new Number3D(); super(); _bitmap = _arg1; ini = Init.parse(_arg2); smooth = ini.getBoolean("smooth", false); debug = ini.getBoolean("debug", false); repeat = ini.getBoolean("repeat", false); precision = ini.getNumber("precision", 0); _blendMode = ini.getString("blendMode", BlendMode.NORMAL); alpha = ini.getNumber("alpha", _alpha, {min:0, max:1}); color = ini.getColor("color", _color); colorTransform = (ini.getObject("colorTransform", ColorTransform) as ColorTransform); showNormals = ini.getBoolean("showNormals", false); _colorTransformDirty = true; } public function get debug():Boolean{ return (_debug); } public function set bitmap(_arg1:BitmapData):void{ _bitmap = _arg1; _bitmapDirty = true; } public function renderBillboard(_arg1:DrawBillboard):void{ _arg1.source.session.renderBillboardBitmap(_renderBitmap, _arg1, smooth); } function notifyMaterialUpdate():void{ _materialDirty = false; if (!hasEventListener(MaterialEvent.MATERIAL_UPDATED)){ return; }; if (_materialupdated == null){ _materialupdated = new MaterialEvent(MaterialEvent.MATERIAL_UPDATED, this); }; dispatchEvent(_materialupdated); } public function get precision():Number{ return (_precision); } protected function getMapping(_arg1:DrawTriangle):Matrix{ if (_arg1.generated){ _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); return (_texturemapping); }; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO); if (!_faceMaterialVO.invalidated){ return (_faceMaterialVO.texturemapping); }; _faceMaterialVO.invalidated = false; _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); return ((_faceMaterialVO.texturemapping = _texturemapping)); } public function set colorTransform(_arg1:ColorTransform):void{ _colorTransform = _arg1; if (_colorTransform){ _red = _colorTransform.redMultiplier; _green = _colorTransform.greenMultiplier; _blue = _colorTransform.blueMultiplier; _alpha = _colorTransform.alphaMultiplier; _color = ((((_red * 0xFF) << 16) + ((_green * 0xFF) << 8)) + (_blue * 0xFF)); }; _colorTransformDirty = true; } protected function updateColorTransform():void{ _colorTransformDirty = false; _bitmapDirty = true; _materialDirty = true; if ((((_alpha == 1)) && ((_color == 0xFFFFFF)))){ _renderBitmap = _bitmap; if (((!(_colorTransform)) || (((((!(_colorTransform.redOffset)) && (!(_colorTransform.greenOffset)))) && (!(_colorTransform.blueOffset)))))){ _colorTransform = null; return; }; } else { if (!_colorTransform){ _colorTransform = new ColorTransform(); }; }; _colorTransform.redMultiplier = _red; _colorTransform.greenMultiplier = _green; _colorTransform.blueMultiplier = _blue; _colorTransform.alphaMultiplier = _alpha; if (_alpha == 0){ _renderBitmap = null; return; }; } public function set debug(_arg1:Boolean):void{ if (_debug == _arg1){ return; }; _debug = _arg1; _materialDirty = true; } public function get showNormals():Boolean{ return (_showNormals); } public function set alpha(_arg1:Number):void{ if (_arg1 > 1){ _arg1 = 1; }; if (_arg1 < 0){ _arg1 = 0; }; if (_alpha == _arg1){ return; }; _alpha = _arg1; _colorTransformDirty = true; } public function set color(_arg1:uint):void{ if (_color == _arg1){ return; }; _color = _arg1; _red = (((_color & 0xFF0000) >> 16) / 0xFF); _green = (((_color & 0xFF00) >> 8) / 0xFF); _blue = ((_color & 0xFF) / 0xFF); _colorTransformDirty = true; } public function get visible():Boolean{ return ((_alpha > 0)); } public function set precision(_arg1:Number):void{ _precision = ((_arg1 * _arg1) * 1.4); _materialDirty = true; } public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ _graphics = null; if (_colorTransformDirty){ updateColorTransform(); }; if (_bitmapDirty){ updateRenderBitmap(); }; if (((_materialDirty) || (_blendModeDirty))){ clearFaces(_arg1, _arg2); }; _blendModeDirty = false; } private function renderRec(_arg1:Number, _arg2:Number):void{ var _local3:int; var _local4:int; var _local5:int; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:int; var _local13:int; var _local14:int; _local3 = _screenIndices[_arg1]; ai = (_local3 * 3); ax = _screenVertices[ai]; ay = _screenVertices[(ai + 1)]; az = _screenVertices[(ai + 2)]; _local4 = _screenIndices[(_arg1 + 1)]; bi = (_local4 * 3); bx = _screenVertices[bi]; by = _screenVertices[(bi + 1)]; bz = _screenVertices[(bi + 2)]; _local5 = _screenIndices[(_arg1 + 2)]; ci = (_local5 * 3); cx = _screenVertices[ci]; cy = _screenVertices[(ci + 1)]; cz = _screenVertices[(ci + 2)]; if (((!((_view.screenClipping is FrustumClipping))) && (!(_view.screenClipping.rect(Math.min(ax, Math.min(bx, cx)), Math.min(ay, Math.min(by, cy)), Math.max(ax, Math.max(bx, cx)), Math.max(ay, Math.max(by, cy))))))){ return; }; if ((((_view.screenClipping is RectangleClipping)) && ((((((az < _near)) || ((bz < _near)))) || ((cz < _near)))))){ return; }; if ((((((((index >= 1000)) || ((focus == Infinity)))) || (((Math.max(Math.max(ax, bx), cx) - Math.min(Math.min(ax, bx), cx)) < 10)))) || (((Math.max(Math.max(ay, by), cy) - Math.min(Math.min(ay, by), cy)) < 10)))){ _session.renderTriangleBitmap(_renderBitmap, map, _screenVertices, _screenIndices, _arg1, _arg2, smooth, repeat, _graphics); if (debug){ _session.renderTriangleLine(1, 0xFF00, 1, _screenVertices, _screenCommands, _screenIndices, _arg1, _arg2); }; return; }; faz = (focus + az); fbz = (focus + bz); fcz = (focus + cz); mabz = (2 / (faz + fbz)); mbcz = (2 / (fbz + fcz)); mcaz = (2 / (fcz + faz)); dabx = ((ax + bx) - (mabx = (((ax * faz) + (bx * fbz)) * mabz))); daby = ((ay + by) - (maby = (((ay * faz) + (by * fbz)) * mabz))); dbcx = ((bx + cx) - (mbcx = (((bx * fbz) + (cx * fcz)) * mbcz))); dbcy = ((by + cy) - (mbcy = (((by * fbz) + (cy * fcz)) * mbcz))); dcax = ((cx + ax) - (mcax = (((cx * fcz) + (ax * faz)) * mcaz))); dcay = ((cy + ay) - (mcay = (((cy * fcz) + (ay * faz)) * mcaz))); dsab = ((dabx * dabx) + (daby * daby)); dsbc = ((dbcx * dbcx) + (dbcy * dbcy)); dsca = ((dcax * dcax) + (dcay * dcay)); if ((((((dsab <= precision)) && ((dsca <= precision)))) && ((dsbc <= precision)))){ _session.renderTriangleBitmap(_renderBitmap, map, _screenVertices, _screenIndices, _arg1, _arg2, smooth, repeat, _graphics); if (debug){ _session.renderTriangleLine(1, 0xFF00, 1, _screenVertices, _screenCommands, _screenIndices, _arg1, _arg2); }; return; }; _local6 = map.a; _local7 = map.b; _local8 = map.c; _local9 = map.d; _local10 = map.tx; _local11 = map.ty; index++; _local14 = (_screenVertices.length / 3); _screenVertices[_screenVertices.length] = (mbcx / 2); _screenVertices[_screenVertices.length] = (mbcy / 2); _screenVertices[_screenVertices.length] = ((bz + cz) / 2); if ((((((dsab > precision)) && ((dsca > precision)))) && ((dsbc > precision)))){ index = (index + 2); _local12 = (_screenVertices.length / 3); _screenVertices[_screenVertices.length] = (mabx / 2); _screenVertices[_screenVertices.length] = (maby / 2); _screenVertices[_screenVertices.length] = ((az + bz) / 2); _local13 = (_screenVertices.length / 3); _screenVertices[_screenVertices.length] = (mcax / 2); _screenVertices[_screenVertices.length] = (mcay / 2); _screenVertices[_screenVertices.length] = ((cz + az) / 2); _arg1 = _screenIndices.length; var _local15 = _arg1; _screenIndices[_local15] = _local3; _screenIndices[_screenIndices.length] = _local12; _screenIndices[_screenIndices.length] = _local13; _arg2 = _screenIndices.length; _local6 = (_local6 * 2); map.a = _local6; _local7 = (_local7 * 2); map.b = _local7; _local8 = (_local8 * 2); map.c = _local8; _local9 = (_local9 * 2); map.d = _local9; _local10 = (_local10 * 2); map.tx = _local10; _local11 = (_local11 * 2); map.ty = _local11; renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; var _local16 = _arg1; _screenIndices[_local16] = _local12; _screenIndices[_screenIndices.length] = _local4; _screenIndices[_screenIndices.length] = _local14; _arg2 = _screenIndices.length; map.a = _local6; map.b = _local7; map.c = _local8; map.d = _local9; map.tx = (_local10 - 1); map.ty = _local11; renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; var _local17 = _arg1; _screenIndices[_local17] = _local13; _screenIndices[_screenIndices.length] = _local14; _screenIndices[_screenIndices.length] = _local5; _arg2 = _screenIndices.length; map.a = _local6; map.b = _local7; map.c = _local8; map.d = _local9; map.tx = _local10; map.ty = (_local11 - 1); renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; var _local18 = _arg1; _screenIndices[_local18] = _local14; _screenIndices[_screenIndices.length] = _local13; _screenIndices[_screenIndices.length] = _local12; _arg2 = _screenIndices.length; map.a = -(_local6); map.b = -(_local7); map.c = -(_local8); map.d = -(_local9); map.tx = (1 - _local10); map.ty = (1 - _local11); renderRec(_arg1, _arg2); return; }; dmax = Math.max(dsab, Math.max(dsca, dsbc)); if (dsab == dmax){ index++; _local12 = (_screenVertices.length / 3); _screenVertices[_screenVertices.length] = (mabx / 2); _screenVertices[_screenVertices.length] = (maby / 2); _screenVertices[_screenVertices.length] = ((az + bz) / 2); _arg1 = _screenIndices.length; _local15 = _arg1; _screenIndices[_local15] = _local3; _screenIndices[_screenIndices.length] = _local12; _screenIndices[_screenIndices.length] = _local5; _arg2 = _screenIndices.length; _local6 = (_local6 * 2); map.a = _local6; _local8 = (_local8 * 2); map.c = _local8; _local10 = (_local10 * 2); map.tx = _local10; renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; _local16 = _arg1; _screenIndices[_local16] = _local12; _screenIndices[_screenIndices.length] = _local4; _screenIndices[_screenIndices.length] = _local5; _arg2 = _screenIndices.length; map.a = (_local6 + _local7); map.b = _local7; map.c = (_local8 + _local9); map.d = _local9; map.tx = ((_local10 + _local11) - 1); map.ty = _local11; renderRec(_arg1, _arg2); return; }; if (dsca == dmax){ index++; _local13 = (_screenVertices.length / 3); _screenVertices[_screenVertices.length] = (mcax / 2); _screenVertices[_screenVertices.length] = (mcay / 2); _screenVertices[_screenVertices.length] = ((cz + az) / 2); _arg1 = _screenIndices.length; _local15 = _arg1; _screenIndices[_local15] = _local3; _screenIndices[_screenIndices.length] = _local4; _screenIndices[_screenIndices.length] = _local13; _arg2 = _screenIndices.length; _local7 = (_local7 * 2); map.b = _local7; _local9 = (_local9 * 2); map.d = _local9; _local11 = (_local11 * 2); map.ty = _local11; renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; _local16 = _arg1; _screenIndices[_local16] = _local13; _screenIndices[_screenIndices.length] = _local4; _screenIndices[_screenIndices.length] = _local5; _arg2 = _screenIndices.length; map.a = _local6; map.b = (_local7 + _local6); map.c = _local8; map.d = (_local9 + _local8); map.tx = _local10; map.ty = ((_local11 + _local10) - 1); renderRec(_arg1, _arg2); return; }; _arg1 = _screenIndices.length; _local15 = _arg1; _screenIndices[_local15] = _local3; _screenIndices[_screenIndices.length] = _local4; _screenIndices[_screenIndices.length] = _local14; _arg2 = _screenIndices.length; map.a = (_local6 - _local7); map.b = (_local7 * 2); map.c = (_local8 - _local9); map.d = (_local9 * 2); map.tx = (_local10 - _local11); map.ty = (_local11 * 2); renderRec(_arg1, _arg2); _arg1 = _screenIndices.length; _local16 = _arg1; _screenIndices[_local16] = _local3; _screenIndices[_screenIndices.length] = _local14; _screenIndices[_screenIndices.length] = _local5; _arg2 = _screenIndices.length; map.a = (_local6 * 2); map.b = (_local7 - _local6); map.c = (_local8 * 2); map.d = (_local9 - _local8); map.tx = (_local10 * 2); map.ty = (_local11 - _local10); renderRec(_arg1, _arg2); } public function get id():int{ return (_id); } public function get height():Number{ return (_bitmap.height); } public function get bitmap():BitmapData{ return (_bitmap); } public function getPixel32(_arg1:Number, _arg2:Number):uint{ if (repeat){ x = (_arg1 % 1); y = (1 - (_arg2 % 1)); } else { x = _arg1; y = (1 - _arg2); }; return (_bitmap.getPixel32((x * _bitmap.width), (y * _bitmap.height))); } public function set blendMode(_arg1:String):void{ if (_blendMode == _arg1){ return; }; _blendMode = _arg1; _blendModeDirty = true; } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void{ var _local3:FaceMaterialVO; _materialDirty = true; for each (_local3 in _faceDictionary) { _local3.invalidated = true; }; } public function set repeat(_arg1:Boolean):void{ if (_repeat == _arg1){ return; }; _repeat = _arg1; _materialDirty = true; } public function get colorTransform():ColorTransform{ return (_colorTransform); } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } public function getFaceMaterialVO(_arg1:FaceVO, _arg2:Object3D=null, _arg3:View3D=null):FaceMaterialVO{ if ((_faceMaterialVO = _faceDictionary[_arg1])){ return (_faceMaterialVO); }; return ((_faceDictionary[_arg1] = new FaceMaterialVO())); } function renderSource(_arg1:Object3D, _arg2:Rectangle, _arg3:Matrix):void{ if (!(_sourceVO = _faceDictionary[_arg1])){ _sourceVO = (_faceDictionary[_arg1] = new FaceMaterialVO()); }; _sourceVO.resize(_arg2.width, _arg2.height); if (((_sourceVO.invalidated) || (_sourceVO.updated))){ _arg3.scale((_arg2.width / width), (_arg2.height / height)); _sourceVO.invalidated = false; _sourceVO.cleared = false; _sourceVO.updated = false; if ((((((((((((_arg3.a == 1)) && ((_arg3.d == 1)))) && ((_arg3.b == 0)))) && ((_arg3.c == 0)))) && ((_arg3.tx == 0)))) && ((_arg3.ty == 0)))){ _sourceVO.bitmap.copyPixels(_bitmap, _arg2, _zeroPoint); } else { _graphics = _s.graphics; _graphics.clear(); _graphics.beginBitmapFill(_bitmap, _arg3, repeat, smooth); _graphics.drawRect(0, 0, _arg2.width, _arg2.height); _graphics.endFill(); _sourceVO.bitmap.draw(_s, null, _colorTransform, _blendMode, _sourceVO.bitmap.rect); }; }; } public function renderLayer(_arg1:DrawTriangle, _arg2:Sprite, _arg3:int):int{ if (blendMode == BlendMode.NORMAL){ _graphics = _arg2.graphics; } else { _session = _arg1.source.session; var _temp1 = _arg3; _arg3 = (_arg3 + 1); _shape = _session.getShape(this, _temp1, _arg2); _shape.blendMode = _blendMode; _graphics = _shape.graphics; }; renderTriangle(_arg1); return (_arg3); } public function get alpha():Number{ return (_alpha); } public function set smooth(_arg1:Boolean):void{ if (_smooth == _arg1){ return; }; _smooth = _arg1; _materialDirty = true; } public function set showNormals(_arg1:Boolean):void{ if (_showNormals == _arg1){ return; }; _showNormals = _arg1; _materialDirty = true; } public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{ var _local3:FaceMaterialVO; notifyMaterialUpdate(); for each (_local3 in _faceDictionary) { if (!_local3.cleared){ _local3.clear(); }; }; } public function get color():uint{ return (_color); } public function get repeat():Boolean{ return (_repeat); } public function get smooth():Boolean{ return (_smooth); } public function get blendMode():String{ return (_blendMode); } public function renderTriangle(_arg1:DrawTriangle):void{ _mapping = getMapping(_arg1); _session = _arg1.source.session; _screenCommands = _arg1.screenCommands; _screenVertices = _arg1.screenVertices; _screenIndices = _arg1.screenIndices; _view = _arg1.view; _near = _view.camera.lens.near; if (precision){ if ((_view.camera.lens is ZoomFocusLens)){ focus = _arg1.view.camera.focus; } else { focus = 0; }; map.a = _mapping.a; map.b = _mapping.b; map.c = _mapping.c; map.d = _mapping.d; map.tx = _mapping.tx; map.ty = _mapping.ty; index = 0; renderRec(_arg1.startIndex, _arg1.endIndex); } else { _session.renderTriangleBitmap(_renderBitmap, _mapping, _screenVertices, _screenIndices, _arg1.startIndex, _arg1.endIndex, smooth, repeat, _graphics); }; if (debug){ _session.renderTriangleLine(0, 0xFF, 1, _screenVertices, _arg1.screenCommands, _screenIndices, _arg1.startIndex, _arg1.endIndex); }; if (showNormals){ _nn.rotate(_arg1.faceVO.face.normal, _arg1.view.cameraVarsStore.viewTransformDictionary[_arg1.source]); _sv0x = (((_arg1.v0x + _arg1.v1x) + _arg1.v2x) / 3); _sv0y = (((_arg1.v0y + _arg1.v1y) + _arg1.v2y) / 3); _sv1x = (_sv0x - (30 * _nn.x)); _sv1y = (_sv0y - (30 * _nn.y)); _session.renderLine(_sv0x, _sv0y, _sv1x, _sv1y, 0, 0xFF00FF, 1); }; } public function get width():Number{ return (_bitmap.width); } protected function updateRenderBitmap():void{ _bitmapDirty = false; if (_colorTransform){ if (((!(_bitmap.transparent)) && (!((_alpha == 1))))){ _renderBitmap = new BitmapData(_bitmap.width, _bitmap.height, true); _renderBitmap.draw(_bitmap); } else { _renderBitmap = _bitmap.clone(); }; _renderBitmap.colorTransform(_renderBitmap.rect, _colorTransform); } else { _renderBitmap = _bitmap; }; invalidateFaces(); } public function renderBitmapLayer(_arg1:DrawTriangle, _arg2:Rectangle, _arg3:FaceMaterialVO):FaceMaterialVO{ renderSource(_arg1.source, _arg2, new Matrix()); _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO); if (_arg3.resized){ _arg3.resized = false; _faceMaterialVO.resized = true; }; _faceMaterialVO.invtexturemapping = _arg3.invtexturemapping; if (((((_arg3.updated) || (_faceMaterialVO.invalidated))) || (_faceMaterialVO.updated))){ _arg3.updated = false; _faceMaterialVO.invalidated = false; _faceMaterialVO.cleared = false; _faceMaterialVO.updated = true; _faceMaterialVO.bitmap = _arg3.bitmap.clone(); _faceMaterialVO.bitmap.copyPixels(_sourceVO.bitmap, _arg1.faceVO.bitmapRect, _zeroPoint, null, null, true); }; return (_faceMaterialVO); } } }//package away3d.materials
Section 134
//BitmapMaterialContainer (away3d.materials.BitmapMaterialContainer) package away3d.materials { import flash.geom.*; import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import flash.utils.*; import away3d.events.*; public class BitmapMaterialContainer extends BitmapMaterial implements ITriangleMaterial, ILayerMaterial { protected var materials:Array; private var _containerDictionary:Dictionary; private var _height:Number; private var _containerVO:FaceMaterialVO; private var _fMaterialVO:FaceMaterialVO; public var transparent:Boolean; private var _cacheDictionary:Dictionary; private var _faceHeight:int; private var _width:Number; private var _faceWidth:int; private var _faceVO:FaceVO; public function BitmapMaterialContainer(_arg1:int, _arg2:int, _arg3:Object=null){ var _local4:ILayerMaterial; _containerDictionary = new Dictionary(true); _cacheDictionary = new Dictionary(true); super(new BitmapData(_arg1, _arg2, true, 0xFFFFFF), _arg3); materials = ini.getArray("materials"); _width = _arg1; _height = _arg2; _bitmapRect = new Rectangle(0, 0, _width, _height); for each (_local4 in materials) { _local4.addOnMaterialUpdate(onMaterialUpdate); }; transparent = ini.getBoolean("transparent", true); } override public function renderBitmapLayer(_arg1:DrawTriangle, _arg2:Rectangle, _arg3:FaceMaterialVO):FaceMaterialVO{ var _local4:ILayerMaterial; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO); _faceWidth = _arg1.faceVO.bitmapRect.width; _faceHeight = _arg1.faceVO.bitmapRect.height; if (!(_containerVO = _containerDictionary[_arg1])){ _containerVO = (_containerDictionary[_arg1] = new FaceMaterialVO()); }; if (_arg3.resized){ _arg3.resized = false; _containerVO.resize(_faceWidth, _faceHeight, transparent); }; for each (_local4 in materials) { _containerVO = _local4.renderBitmapLayer(_arg1, _arg2, _containerVO); }; if (((_arg3.updated) || (_containerVO.updated))){ _arg3.updated = false; _containerVO.updated = false; _faceMaterialVO.invalidated = false; _faceMaterialVO.cleared = false; _faceMaterialVO.updated = true; _faceMaterialVO.bitmap = _arg3.bitmap.clone(); _faceMaterialVO.bitmap.lock(); _sourceVO = _faceMaterialVO; if ((((_blendMode == BlendMode.NORMAL)) && (!(_colorTransform)))){ _faceMaterialVO.bitmap.copyPixels(_containerVO.bitmap, _containerVO.bitmap.rect, _zeroPoint, null, null, true); } else { _faceMaterialVO.bitmap.draw(_containerVO.bitmap, null, _colorTransform, _blendMode); }; }; return (_faceMaterialVO); } override public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ var _local3:ILayerMaterial; for each (_local3 in materials) { _local3.updateMaterial(_arg1, _arg2); }; if (_colorTransformDirty){ updateColorTransform(); }; if (_bitmapDirty){ updateRenderBitmap(); }; if (((_materialDirty) || (_blendModeDirty))){ clearFaces(); }; _blendModeDirty = false; } override public function renderLayer(_arg1:DrawTriangle, _arg2:Sprite, _arg3:int):int{ throw (new Error("Not implemented")); } public function clearMaterials():void{ var _local1:int; _local1 = materials.length; while (_local1--) { removeMaterial(materials[_local1]); }; } private function onMaterialUpdate(_arg1:MaterialEvent):void{ _materialDirty = true; } override protected function getMapping(_arg1:DrawTriangle):Matrix{ var _local2:ILayerMaterial; _faceVO = _arg1.faceVO; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO, _arg1.source, _arg1.view); if (((((_arg1.generated) || (_faceMaterialVO.invalidated))) || (_faceMaterialVO.updated))){ _faceMaterialVO.updated = true; _faceMaterialVO.cleared = false; if (_faceMaterialVO.invalidated){ _faceMaterialVO.invalidated = false; _faceVO.bitmapRect = new Rectangle(int((_width * _faceVO.minU)), int((_height * (1 - _faceVO.maxV))), int(((_width * (_faceVO.maxU - _faceVO.minU)) + 2)), int(((_height * (_faceVO.maxV - _faceVO.minV)) + 2))); _faceWidth = _faceVO.bitmapRect.width; _faceHeight = _faceVO.bitmapRect.height; _faceMaterialVO.invtexturemapping = _arg1.transformUV(this).clone(); _faceMaterialVO.texturemapping = _faceMaterialVO.invtexturemapping.clone(); _faceMaterialVO.texturemapping.invert(); _faceMaterialVO.resize(_faceWidth, _faceHeight, transparent); }; _fMaterialVO = _faceMaterialVO; for each (_local2 in materials) { _fMaterialVO = _local2.renderBitmapLayer(_arg1, _bitmapRect, _fMaterialVO); }; _renderBitmap = (_cacheDictionary[_faceVO] = _fMaterialVO.bitmap); _fMaterialVO.updated = false; return (_faceMaterialVO.texturemapping); }; _renderBitmap = _cacheDictionary[_faceVO]; if (_faceMaterialVO.invalidated){ _faceMaterialVO.invalidated = false; _faceMaterialVO.invtexturemapping = _arg1.transformUV(this).clone(); _faceMaterialVO.texturemapping = _faceMaterialVO.invtexturemapping.clone(); _faceMaterialVO.texturemapping.invert(); }; return (_faceMaterialVO.texturemapping); } public function removeMaterial(_arg1:ILayerMaterial):void{ var _local2:int; _local2 = materials.indexOf(_arg1); if (_local2 == -1){ return; }; _arg1.removeOnMaterialUpdate(onMaterialUpdate); materials.splice(_local2, 1); _materialDirty = true; } override protected function updateRenderBitmap():void{ _bitmapDirty = false; invalidateFaces(); _materialDirty = true; } public function addMaterial(_arg1:ILayerMaterial):void{ _arg1.addOnMaterialUpdate(onMaterialUpdate); materials.push(_arg1); _materialDirty = true; } } }//package away3d.materials
Section 135
//CenterLightingMaterial (away3d.materials.CenterLightingMaterial) package away3d.materials { import flash.display.*; import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; import away3d.core.light.*; import away3d.core.render.*; import flash.utils.*; import away3d.events.*; public class CenterLightingMaterial extends EventDispatcher implements ITriangleMaterial { private var ksb:Number; private var draw_fall_k:Number;// = 1 private var diff:Number; private var ksr:Number; private var kdb:Number; private var kdg:Number; private var rf:Number; private var draw_reflect_k:Number;// = 1 private var dfx:Number; private var dfy:Number; private var dfz:Number; private var kdr:Number; private var persp:Number; private var draw_normal:Boolean;// = false public var shininess:Number;// = 20 private var rz:Number; private var sum:Number; private var rx:Number; private var ry:Number; public var ambient_brightness:Number;// = 1 private var blue:Number; private var cx:Number; private var cy:Number; private var cz:Number; private var df:Number; private var fade:Number; private var _diffuseTransform:Matrix3D; private var graphics:Graphics; private var red:Number; var session:AbstractRenderSession; private var draw_reflect:Boolean;// = false private var rfx:Number; private var rfy:Number; private var rfz:Number; private var fx:Number; private var fy:Number; private var fz:Number; private var focus:Number; private var _viewPosition:Number3D; public var specular_brightness:Number;// = 1 var _materialDirty:Boolean; private var pdd:Number; private var _specularTransform:Matrix3D; private var green:Number; private var _source:Mesh; private var v0x:Number; private var v0y:Number; private var v0z:Number; public var diffuse_brightness:Number;// = 1 private var v1x:Number; private var v1y:Number; private var v1z:Number; private var ncx:Number; private var ncy:Number; private var ncz:Number; private var _materialupdated:MaterialEvent; private var v2x:Number; private var v2y:Number; private var v2z:Number; private var _view:View3D; private var draw_fall:Boolean;// = false private var amb:Number; private var ffy:Number; var _id:int; private var spec:Number; private var nf:Number; private var ffz:Number; private var ffx:Number; private var nx:Number; private var d1x:Number; private var d1y:Number; private var d1z:Number; private var kag:Number; private var ny:Number; private var zoom:Number; private var kab:Number; private var kar:Number; protected var ini:Init; private var d2x:Number; private var d2z:Number; private var c0z:Number; private var nz:Number; private var pa:Number; private var c0x:Number; private var pc:Number; private var pb:Number; private var d2y:Number; private var c0y:Number; private var ksg:Number; public function CenterLightingMaterial(_arg1:Object=null){ draw_normal = false; draw_fall = false; draw_fall_k = 1; draw_reflect = false; draw_reflect_k = 1; ambient_brightness = 1; diffuse_brightness = 1; specular_brightness = 1; shininess = 20; super(); ini = Init.parse(_arg1); shininess = ini.getColor("shininess", 20); } protected function renderTri(_arg1:DrawTriangle, _arg2:AbstractRenderSession, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number):void{ throw (new Error("Not implemented")); } public function get visible():Boolean{ throw (new Error("Not implemented")); } function notifyMaterialUpdate():void{ _materialDirty = false; if (!hasEventListener(MaterialEvent.MATERIAL_UPDATED)){ return; }; if (_materialupdated == null){ _materialupdated = new MaterialEvent(MaterialEvent.MATERIAL_UPDATED, this); }; dispatchEvent(_materialupdated); } public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ var _local3:Array; var _local4:DirectionalLight; var _local5:Array; var _local6:PointLight; _local3 = _arg1.lightarray.directionals; for each (_local4 in _local3) { if (((!(_local4.diffuseTransform[_arg1])) || (_arg2.scene.updatedObjects[_arg1]))){ _local4.setDiffuseTransform(_arg1); _materialDirty = true; }; if (!_local4.specularTransform[_arg1]){ _local4.specularTransform[_arg1] = new Dictionary(true); }; if (((((!(_local4.specularTransform[_arg1][_arg2])) || (_arg2.scene.updatedObjects[_arg1]))) || (_arg2.updated))){ _local4.setSpecularTransform(_arg1, _arg2); _materialDirty = true; }; }; _local5 = _arg1.lightarray.points; for each (_local6 in _local5) { if (((((!(_local6.viewPositions[_arg2])) || (_arg2.scene.updatedObjects[_arg1]))) || (_arg2.updated))){ _local6.setViewPosition(_arg2); _materialDirty = true; }; }; if (_materialDirty){ clearFaces(_arg1, _arg2); }; } public function get id():int{ return (_id); } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{ notifyMaterialUpdate(); } public function renderTriangle(_arg1:DrawTriangle):void{ var _local2:DirectionalLight; var _local3:Array; var _local4:Array; var _local5:PointLight; var _local6:uint; var _local7:uint; var _local8:uint; var _local9:Array; session = _arg1.source.session; focus = _arg1.view.camera.focus; zoom = _arg1.view.camera.zoom; if ((_arg1.endIndex - _arg1.startIndex) > 10){ _local6 = (_arg1.screenIndices[0] * 3); _local7 = (_arg1.screenIndices[5] * 3); _local8 = (_arg1.screenIndices[9] * 3); v0z = _arg1.screenVertices[(_local6 + 2)]; persp = ((1 + (v0z / focus)) / zoom); v0x = (_arg1.screenVertices[_local6] * persp); v0y = (_arg1.screenVertices[(_local6 + 1)] * persp); v1z = _arg1.screenVertices[(_local7 + 2)]; persp = ((1 + (v1z / focus)) / zoom); v1x = (_arg1.screenVertices[_local7] * persp); v1y = (_arg1.screenVertices[(_local7 + 1)] * persp); v2z = _arg1.screenVertices[(_local8 + 2)]; persp = ((1 + (v2z / focus)) / zoom); v2x = (_arg1.screenVertices[_local8] * persp); v2y = (_arg1.screenVertices[(_local8 + 1)] * persp); } else { v0z = _arg1.v0z; persp = ((1 + (v0z / focus)) / zoom); v0x = (_arg1.v0x * persp); v0y = (_arg1.v0y * persp); v1z = _arg1.v1z; persp = ((1 + (v1z / focus)) / zoom); v1x = (_arg1.v1x * persp); v1y = (_arg1.v1y * persp); v2z = _arg1.v2z; persp = ((1 + (v2z / focus)) / zoom); v2x = (_arg1.v2x * persp); v2y = (_arg1.v2y * persp); }; d1x = (v1x - v0x); d1y = (v1y - v0y); d1z = (v1z - v0z); d2x = (v2x - v0x); d2y = (v2y - v0y); d2z = (v2z - v0z); pa = ((d1y * d2z) - (d1z * d2y)); pb = ((d1z * d2x) - (d1x * d2z)); pc = ((d1x * d2y) - (d1y * d2x)); pdd = Math.sqrt((((pa * pa) + (pb * pb)) + (pc * pc))); pa = (pa / pdd); pb = (pb / pdd); pc = (pc / pdd); c0x = (((v0x + v1x) + v2x) / 3); c0y = (((v0y + v1y) + v2y) / 3); c0z = (((v0z + v1z) + v2z) / 3); kar = (kag = (kab = (kdr = (kdg = (kdb = (ksr = (ksg = (ksb = 0)))))))); _source = (_arg1.source as Mesh); _view = _arg1.view; _local3 = _arg1.source.lightarray.directionals; for each (_local2 in _local3) { _diffuseTransform = _local2.diffuseTransform[_source]; red = _local2.red; green = _local2.green; blue = _local2.blue; dfx = _diffuseTransform.szx; dfy = _diffuseTransform.szy; dfz = _diffuseTransform.szz; nx = _arg1.faceVO.face.normal.x; ny = _arg1.faceVO.face.normal.y; nz = _arg1.faceVO.face.normal.z; amb = (_local2.ambient * ambient_brightness); kar = (kar + (red * amb)); kag = (kag + (green * amb)); kab = (kab + (blue * amb)); nf = (((dfx * nx) + (dfy * ny)) + (dfz * nz)); if (nf < 0){ } else { diff = ((_local2.diffuse * nf) * diffuse_brightness); kdr = (kdr + (red * diff)); kdg = (kdg + (green * diff)); kdb = (kdb + (blue * diff)); _specularTransform = _local2.specularTransform[_source][_view]; rfx = _specularTransform.szx; rfy = _specularTransform.szy; rfz = _specularTransform.szz; rf = (((rfx * nx) + (rfy * ny)) + (rfz * nz)); spec = ((_local2.specular * Math.pow(rf, shininess)) * specular_brightness); ksr = (ksr + (red * spec)); ksg = (ksg + (green * spec)); ksb = (ksb + (blue * spec)); }; }; _local4 = _arg1.source.lightarray.points; for each (_local5 in _local4) { red = _local5.red; green = _local5.green; blue = _local5.blue; _viewPosition = _local5.viewPositions[_arg1.view]; dfx = (_viewPosition.x - c0x); dfy = (_viewPosition.y - c0y); dfz = (_viewPosition.z - c0z); df = Math.sqrt((((dfx * dfx) + (dfy * dfy)) + (dfz * dfz))); dfx = (dfx / df); dfy = (dfy / df); dfz = (dfz / df); fade = ((1 / df) / df); amb = ((_local5.ambient * fade) * ambient_brightness); kar = (kar + (red * amb)); kag = (kag + (green * amb)); kab = (kab + (blue * amb)); nf = (((dfx * pa) + (dfy * pb)) + (dfz * pc)); if (nf < 0){ } else { diff = (((_local5.diffuse * fade) * nf) * diffuse_brightness); kdr = (kdr + (red * diff)); kdg = (kdg + (green * diff)); kdb = (kdb + (blue * diff)); rfz = (dfz - ((2 * nf) * pc)); if (rfz < 0){ } else { rfx = (dfx - ((2 * nf) * pa)); rfy = (dfy - ((2 * nf) * pb)); spec = (((_local5.specular * fade) * Math.pow(rfz, shininess)) * specular_brightness); ksr = (ksr + (red * spec)); ksg = (ksg + (green * spec)); ksb = (ksb + (blue * spec)); }; }; }; renderTri(_arg1, session, kar, kag, kab, kdr, kdg, kdb, ksr, ksg, ksb); if (((((draw_fall) || (draw_reflect))) || (draw_normal))){ graphics = session.graphics; cz = c0z; cx = ((c0x * zoom) / (1 + (cz / focus))); cy = ((c0y * zoom) / (1 + (cz / focus))); if (draw_normal){ ncz = (c0z + (30 * pc)); ncx = ((((c0x + (30 * pa)) * zoom) * focus) / (focus + ncz)); ncy = ((((c0y + (30 * pb)) * zoom) * focus) / (focus + ncz)); graphics.lineStyle(1, 0, 1); graphics.moveTo(cx, cy); graphics.lineTo(ncx, ncy); graphics.moveTo(cx, cy); graphics.drawCircle(cx, cy, 2); }; if (((draw_fall) || (draw_reflect))){ _local9 = _arg1.source.lightarray.points; for each (_local5 in _local9) { red = _local5.red; green = _local5.green; blue = _local5.blue; sum = (((red + green) + blue) / 0xFF); red = (red / sum); green = (green / sum); blue = (blue / sum); dfx = (_viewPosition.x - c0x); dfy = (_viewPosition.y - c0y); dfz = (_viewPosition.z - c0z); df = Math.sqrt((((dfx * dfx) + (dfy * dfy)) + (dfz * dfz))); dfx = (dfx / df); dfy = (dfy / df); dfz = (dfz / df); nf = (((dfx * pa) + (dfy * pb)) + (dfz * pc)); if (nf < 0){ } else { if (draw_fall){ ffz = (c0z + ((30 * dfz) * (1 - draw_fall_k))); ffx = ((((c0x + ((30 * dfx) * (1 - draw_fall_k))) * zoom) * focus) / (focus + ffz)); ffy = ((((c0y + ((30 * dfy) * (1 - draw_fall_k))) * zoom) * focus) / (focus + ffz)); fz = (c0z + (30 * dfz)); fx = ((((c0x + (30 * dfx)) * zoom) * focus) / (focus + fz)); fy = ((((c0y + (30 * dfy)) * zoom) * focus) / (focus + fz)); graphics.lineStyle(1, (((int(red) * 65536) + (int(green) * 0x0100)) + int(blue)), 1); graphics.moveTo(ffx, ffy); graphics.lineTo(fx, fy); graphics.moveTo(ffx, ffy); }; if (draw_reflect){ rfx = (dfx - ((2 * nf) * pa)); rfy = (dfy - ((2 * nf) * pb)); rfz = (dfz - ((2 * nf) * pc)); rz = (c0z - ((30 * rfz) * draw_reflect_k)); rx = ((((c0x - ((30 * rfx) * draw_reflect_k)) * zoom) * focus) / (focus + rz)); ry = ((((c0y - ((30 * rfy) * draw_reflect_k)) * zoom) * focus) / (focus + rz)); graphics.lineStyle(1, (((int((red * 0.5)) * 65536) + (int((green * 0.5)) * 0x0100)) + int((blue * 0.5))), 1); graphics.moveTo(cx, cy); graphics.lineTo(rx, ry); graphics.moveTo(cx, cy); }; }; }; }; }; } } }//package away3d.materials
Section 136
//ColorMaterial (away3d.materials.ColorMaterial) package away3d.materials { import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.events.*; public class ColorMaterial extends EventDispatcher implements ITriangleMaterial, IFogMaterial, IBillboardMaterial { var _id:int; private var _alpha:Number; private var _color:uint; protected var ini:Init; private var _materialDirty:Boolean; private var _materialupdated:MaterialEvent; public function ColorMaterial(_arg1=null, _arg2:Object=null){ if (_arg1 == null){ _arg1 = "random"; }; this.color = Cast.trycolor(_arg1); ini = Init.parse(_arg2); _alpha = ini.getNumber("alpha", 1, {min:0, max:1}); } function notifyMaterialUpdate():void{ if (!hasEventListener(MaterialEvent.MATERIAL_UPDATED)){ return; }; if (_materialupdated == null){ _materialupdated = new MaterialEvent(MaterialEvent.MATERIAL_UPDATED, this); }; dispatchEvent(_materialupdated); } public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ if (_materialDirty){ _materialDirty = false; notifyMaterialUpdate(); }; } public function get id():int{ return (_id); } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function renderTriangle(_arg1:DrawTriangle):void{ _arg1.source.session.renderTriangleColor(_color, _alpha, _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); } public function set alpha(_arg1:Number):void{ if (_alpha == _arg1){ return; }; _alpha = _arg1; _materialDirty = true; } public function set color(_arg1:uint):void{ if (_color == _arg1){ return; }; _color = _arg1; _materialDirty = true; } public function renderBillboard(_arg1:DrawBillboard):void{ _arg1.source.session.renderBillboardColor(_color, _alpha, _arg1); } public function clone():IFogMaterial{ return (new ColorMaterial(_color, {alpha:_alpha})); } public function get alpha():Number{ return (_alpha); } public function renderFog(_arg1:DrawFog):void{ _arg1.source.session.renderFogColor(_arg1.clip, _color, _alpha); } public function get color():uint{ return (_color); } public function get visible():Boolean{ return ((alpha > 0)); } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } } }//package away3d.materials
Section 137
//IBillboardMaterial (away3d.materials.IBillboardMaterial) package away3d.materials { import away3d.core.draw.*; public interface IBillboardMaterial extends IMaterial { function renderBillboard(_arg1:DrawBillboard):void; } }//package away3d.materials
Section 138
//IFogMaterial (away3d.materials.IFogMaterial) package away3d.materials { import away3d.core.draw.*; public interface IFogMaterial extends ITriangleMaterial { function renderFog(_arg1:DrawFog):void; function set alpha(_arg1:Number):void; function clone():IFogMaterial; function get alpha():Number; } }//package away3d.materials
Section 139
//ILayerMaterial (away3d.materials.ILayerMaterial) package away3d.materials { import flash.geom.*; import flash.display.*; import away3d.core.draw.*; import away3d.core.utils.*; public interface ILayerMaterial extends IMaterial { function renderLayer(_arg1:DrawTriangle, _arg2:Sprite, _arg3:int):int; function renderBitmapLayer(_arg1:DrawTriangle, _arg2:Rectangle, _arg3:FaceMaterialVO):FaceMaterialVO; } }//package away3d.materials
Section 140
//IMaterial (away3d.materials.IMaterial) package away3d.materials { import away3d.containers.*; import away3d.core.base.*; public interface IMaterial { function updateMaterial(_arg1:Object3D, _arg2:View3D):void; function get visible():Boolean; function removeOnMaterialUpdate(_arg1:Function):void; function addOnMaterialUpdate(_arg1:Function):void; function get id():int; } }//package away3d.materials
Section 141
//ISegmentMaterial (away3d.materials.ISegmentMaterial) package away3d.materials { import away3d.core.draw.*; public interface ISegmentMaterial extends IMaterial { function renderSegment(_arg1:DrawSegment):void; } }//package away3d.materials
Section 142
//ITriangleMaterial (away3d.materials.ITriangleMaterial) package away3d.materials { import away3d.core.draw.*; public interface ITriangleMaterial extends IMaterial { function renderTriangle(_arg1:DrawTriangle):void; } }//package away3d.materials
Section 143
//IUVMaterial (away3d.materials.IUVMaterial) package away3d.materials { import flash.display.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; public interface IUVMaterial extends IMaterial { function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void; function get width():Number; function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void; function get height():Number; function getPixel32(_arg1:Number, _arg2:Number):uint; function get bitmap():BitmapData; function getFaceMaterialVO(_arg1:FaceVO, _arg2:Object3D=null, _arg3:View3D=null):FaceMaterialVO; } }//package away3d.materials
Section 144
//MovieMaterial (away3d.materials.MovieMaterial) package away3d.materials { import flash.geom.*; import flash.display.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.events.*; public class MovieMaterial extends TransformBitmapMaterial implements ITriangleMaterial, IUVMaterial { private var _bMode:String; private var _movie:Sprite; public var autoUpdate:Boolean; private var x:Number; public var transparent:Boolean; private var y:Number; private var t:Matrix; private var _lockH:Number; private var _lockW:Number; private var _colTransform:ColorTransform; private var _clipRect:Rectangle; private var rendered:Boolean; public var interactive:Boolean; public function MovieMaterial(_arg1:Sprite, _arg2:Object=null){ ini = Init.parse(_arg2); transparent = ini.getBoolean("transparent", true); autoUpdate = ini.getBoolean("autoUpdate", true); interactive = ini.getBoolean("interactive", false); _movie = _arg1; _lockW = ini.getNumber("lockW", _arg1.width); _lockH = ini.getNumber("lockH", _arg1.height); _bitmap = new BitmapData(Math.max(1, _lockW), Math.max(1, _lockH), transparent, (transparent) ? 0xFFFFFF : 0); super(_bitmap, ini); } public function set lockH(_arg1:Number):void{ _lockH = (((!(isNaN(_arg1))) && ((_arg1 > 1)))) ? _arg1 : _lockH; if (_renderBitmap != null){ _bitmap.dispose(); _renderBitmap.dispose(); _bitmap = new BitmapData(Math.max(1, _lockW), Math.max(1, _lockH), transparent, (transparent) ? 0xFFFFFF : 0); _renderBitmap = _bitmap.clone(); update(); }; } private function resetInteractiveLayer():void{ movie.x = -10000; movie.y = -10000; } override public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ super.updateMaterial(_arg1, _arg2); if (autoUpdate){ update(); }; _session = _arg1.session; if (interactive){ if (!_arg2._interactiveLayer.contains(movie)){ _arg2._interactiveLayer.addChild(movie); resetInteractiveLayer(); _arg1.addOnMouseOver(onMouseOver); _arg1.addOnMouseOut(onMouseOut); }; } else { if (_arg2._interactiveLayer.contains(movie)){ _arg2._interactiveLayer.removeChild(movie); _arg1.removeOnMouseOver(onMouseOver); _arg1.removeOnMouseOut(onMouseOut); }; }; } public function set lockW(_arg1:Number):void{ _lockW = (((!(isNaN(_arg1))) && ((_arg1 > 1)))) ? _arg1 : _lockW; if (_renderBitmap != null){ _bitmap.dispose(); _renderBitmap.dispose(); _bitmap = new BitmapData(Math.max(1, _lockW), Math.max(1, _lockH), transparent, (transparent) ? 0xFFFFFF : 0); _renderBitmap = _bitmap.clone(); update(); }; } override public function get height():Number{ return (_renderBitmap.height); } public function get movie():Sprite{ return (_movie); } public function get clipRect():Rectangle{ return (_clipRect); } public function get lockH():Number{ return (_lockH); } public function get lockW():Number{ return (_lockW); } private function onMouseOut(_arg1:MouseEvent3D):void{ if (_arg1.material == this){ _arg1.object.removeOnMouseMove(onMouseMove); resetInteractiveLayer(); }; } public function set clipRect(_arg1:Rectangle):void{ _clipRect = _arg1; } public function set movie(_arg1:Sprite):void{ if (_movie == _arg1){ return; }; if (((_movie) && (_movie.parent))){ _movie.parent.removeChild(_movie); }; _movie = _arg1; if (!autoUpdate){ update(); }; } public function update():void{ var _local1:Rectangle; if (_renderBitmap != null){ notifyMaterialUpdate(); _local1 = ((((_clipRect == null)) || (!(rendered)))) ? _renderBitmap.rect : _clipRect; if (transparent){ _renderBitmap.fillRect(_local1, 0xFFFFFF); }; if (((!((_alpha == 1))) || (!((_color == 0xFFFFFF))))){ _colTransform = _colorTransform; } else { _colTransform = movie.transform.colorTransform; }; if (_blendMode != BlendMode.NORMAL){ _bMode = _blendMode; } else { _bMode = movie.blendMode; }; _renderBitmap.draw(movie, new Matrix(movie.scaleX, 0, 0, movie.scaleY), _colTransform, _bMode, _local1); if (!rendered){ rendered = true; }; }; } override protected function updateRenderBitmap():void{ } override public function get width():Number{ return (_renderBitmap.width); } private function onMouseOver(_arg1:MouseEvent3D):void{ if (_arg1.material == this){ _arg1.object.addOnMouseMove(onMouseMove); onMouseMove(_arg1); }; } private function onMouseMove(_arg1:MouseEvent3D):void{ x = (_arg1.uv.u * _renderBitmap.width); y = ((1 - _arg1.uv.v) * _renderBitmap.height); if (_transform){ t = _transform.clone(); t.invert(); movie.x = (((_arg1.screenX - (x * t.a)) - (y * t.c)) - t.tx); movie.y = (((_arg1.screenY - (x * t.b)) - (y * t.d)) - t.ty); } else { movie.x = (_arg1.screenX - x); movie.y = (_arg1.screenY - y); }; } } }//package away3d.materials
Section 145
//ShadingColorMaterial (away3d.materials.ShadingColorMaterial) package away3d.materials { import away3d.core.draw.*; import away3d.core.utils.*; import away3d.core.render.*; public class ShadingColorMaterial extends CenterLightingMaterial { public var cache:Boolean; public var ambient:uint; private var sfg:int; private var fb:int; private var fg:int; public var specular:uint; private var fr:int; public var diffuse:uint; public var alpha:Number; private var _color:uint; private var sfb:int; private var sfr:int; public function ShadingColorMaterial(_arg1=null, _arg2:Object=null){ color = ((_arg1)==null) ? "random" : _arg1; super(_arg2); ambient = ini.getColor("ambient", color); diffuse = ini.getColor("diffuse", color); specular = ini.getColor("specular", color); alpha = ini.getNumber("alpha", 1); cache = ini.getBoolean("cache", false); } override protected function renderTri(_arg1:DrawTriangle, _arg2:AbstractRenderSession, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number):void{ fr = int((((((ambient & 0xFF0000) * _arg3) + ((diffuse & 0xFF0000) * _arg6)) + ((specular & 0xFF0000) * _arg9)) >> 16)); fg = int((((((ambient & 0xFF00) * _arg4) + ((diffuse & 0xFF00) * _arg7)) + ((specular & 0xFF00) * _arg10)) >> 8)); fb = int(((((ambient & 0xFF) * _arg5) + ((diffuse & 0xFF) * _arg8)) + ((specular & 0xFF) * _arg11))); if (fr > 0xFF){ fr = 0xFF; }; if (fg > 0xFF){ fg = 0xFF; }; if (fb > 0xFF){ fb = 0xFF; }; _arg2.renderTriangleColor((((fr << 16) | (fg << 8)) | fb), alpha, _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); if (cache){ if (_arg1.faceVO != null){ sfr = int(((((ambient & 0xFF0000) * _arg3) + ((diffuse & 0xFF0000) * _arg6)) >> 16)); sfg = int(((((ambient & 0xFF00) * _arg4) + ((diffuse & 0xFF00) * _arg7)) >> 8)); sfb = int((((ambient & 0xFF) * _arg5) + ((diffuse & 0xFF) * _arg8))); if (sfr > 0xFF){ sfr = 0xFF; }; if (sfg > 0xFF){ sfg = 0xFF; }; if (sfb > 0xFF){ sfb = 0xFF; }; _arg1.faceVO.material = new ColorMaterial((((sfr << 16) | (sfg << 8)) | sfb)); }; }; } public function set color(_arg1):void{ if (_color == Cast.trycolor(_arg1)){ return; }; _color = Cast.trycolor(_arg1); ambient = (diffuse = (specular = _color)); _materialDirty = true; } public function get color():uint{ return (_color); } override public function get visible():Boolean{ return (true); } } }//package away3d.materials
Section 146
//TransformBitmapMaterial (away3d.materials.TransformBitmapMaterial) package away3d.materials { import flash.geom.*; import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.math.*; public class TransformBitmapMaterial extends BitmapMaterial implements ITriangleMaterial, IUVMaterial { private var line:Point; private var py:Number; private var px:Number; private var normalR:Number3D; private var t:Matrix; private var _throughProjection:Boolean; private var x:Number; private var v0:Number3D; private var v1:Number3D; private var y:Number; private var _projectionDirty:Boolean; private var mapb:Number; private var v2:Number3D; private var mapa:Number; private var mapc:Number; private var mapd:Number; private var DOWN:Number3D; private var point3:Point; private var fPoint1:Point; private var fPoint2:Point; private var fPoint3:Point; private var point1:Point; private var _globalProjection:Boolean; private var zero:Number; private var point2:Point; private var _projectionVector:Number3D; private var _rotation:Number;// = 0 private var maptx:Number; private var mapty:Number; private var _offsetY:Number;// = 0 private var _offsetX:Number;// = 0 private var _u1:Number; private var _u2:Number; private var _u0:Number; private var _invtexturemapping:Matrix; private var _v0:Number; private var _v1:Number; private var _v2:Number; private var v0y:Number; private var v0z:Number; private var v0x:Number; private var v1x:Number; private var v1z:Number; private var flag:Boolean; private var v1y:Number; private var _scaleY:Number;// = 1 private var mPoint2:Point; private var mPoint1:Point; private var dot:Number; private var mPoint3:Point; private var mPoint4:Point; private var v2x:Number; private var v2y:Number; private var v2z:Number; private var _scaleX:Number;// = 1 private var sign:Number; private var _N:Number3D; private var faceVO:FaceVO; private var _M:Number3D; private var _transformDirty:Boolean; var _transform:Matrix; private var RIGHT:Number3D; public function TransformBitmapMaterial(_arg1:BitmapData, _arg2:Object=null){ _transform = new Matrix(); _scaleX = 1; _scaleY = 1; _offsetX = 0; _offsetY = 0; _rotation = 0; _N = new Number3D(); _M = new Number3D(); DOWN = new Number3D(0, -1, 0); RIGHT = new Number3D(1, 0, 0); normalR = new Number3D(); v0 = new Number3D(); v1 = new Number3D(); v2 = new Number3D(); fPoint1 = new Point(); fPoint2 = new Point(); fPoint3 = new Point(); mPoint1 = new Point(); mPoint2 = new Point(); mPoint3 = new Point(); mPoint4 = new Point(); line = new Point(); super(_arg1, _arg2); transform = (ini.getObject("transform", Matrix) as Matrix); scaleX = ini.getNumber("scaleX", _scaleX); scaleY = ini.getNumber("scaleY", _scaleY); offsetX = ini.getNumber("offsetX", _offsetX); offsetY = ini.getNumber("offsetY", _offsetY); rotation = ini.getNumber("rotation", _rotation); projectionVector = (ini.getObject("projectionVector", Number3D) as Number3D); throughProjection = ini.getBoolean("throughProjection", true); globalProjection = ini.getBoolean("globalProjection", false); } public function get offsetX():Number{ return (_offsetX); } public function get offsetY():Number{ return (_offsetY); } public function set offsetX(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(offsetX)")); }; if (_arg1 == Infinity){ Debug.warning("offsetX == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("offsetX == -Infinity"); }; _offsetX = _arg1; _transformDirty = true; } public function set offsetY(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(offsetY)")); }; if (_arg1 == Infinity){ Debug.warning("offsetY == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("offsetY == -Infinity"); }; _offsetY = _arg1; _transformDirty = true; } public function get scaleY():Number{ return (_scaleY); } public function get globalProjection():Boolean{ return (_globalProjection); } public function get scaleX():Number{ return (_scaleX); } private function getContainerPoints(_arg1:Rectangle):Array{ return ([_arg1.topLeft, new Point(_arg1.top, _arg1.right), _arg1.bottomRight, new Point(_arg1.bottom, _arg1.left)]); } override protected function getMapping(_arg1:DrawTriangle):Matrix{ if (_arg1.generated){ if (projectionVector){ _texturemapping = projectUV(_arg1); } else { _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); }; if (_transform){ _mapping = _transform.clone(); _mapping.concat(_texturemapping); } else { _mapping = _texturemapping; }; return (_mapping); }; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO, _arg1.source); if (!_faceMaterialVO.invalidated){ return (_faceMaterialVO.texturemapping); }; _faceMaterialVO.invalidated = false; if (projectionVector){ _texturemapping = projectUV(_arg1); } else { _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); }; if (_transform){ _faceMaterialVO.texturemapping = _transform.clone(); _faceMaterialVO.texturemapping.concat(_texturemapping); return (_faceMaterialVO.texturemapping); }; return ((_faceMaterialVO.texturemapping = _texturemapping)); } public function set scaleY(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(scaleY)")); }; if (_arg1 == Infinity){ Debug.warning("scaleY == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("scaleY == -Infinity"); }; if (_arg1 == 0){ Debug.warning("scaleY == 0"); }; _scaleY = _arg1; _transformDirty = true; } private function updateTransform():void{ _transformDirty = false; if ((((((((((_scaleX == 1)) && ((_scaleY == 1)))) && ((_offsetX == 0)))) && ((_offsetY == 0)))) && ((_rotation == 0)))){ _transform = null; } else { _transform = new Matrix(); _transform.scale(_scaleX, _scaleY); _transform.rotate(_rotation); _transform.translate(_offsetX, _offsetY); }; _materialDirty = true; } public function set globalProjection(_arg1:Boolean):void{ _globalProjection = _arg1; _projectionDirty = true; } public function set scaleX(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(scaleX)")); }; if (_arg1 == Infinity){ Debug.warning("scaleX == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("scaleX == -Infinity"); }; if (_arg1 == 0){ Debug.warning("scaleX == 0"); }; _scaleX = _arg1; _transformDirty = true; } public function get projectionVector():Number3D{ return (_projectionVector); } public function set transform(_arg1:Matrix):void{ _transform = _arg1; if (_transform){ _rotation = Math.atan2(_transform.b, _transform.a); _scaleX = (_transform.a / Math.cos(_rotation)); _scaleY = (_transform.d / Math.cos(_rotation)); _offsetX = _transform.tx; _offsetY = _transform.ty; } else { _scaleX = (_scaleY = 1); _offsetX = (_offsetY = (_rotation = 0)); }; } private function checkEdge(_arg1:Array, _arg2:Array):Boolean{ var _local3:int; var _local4:String; var _local5:Point; _local3 = _arg1.length; for (_local4 in _arg1) { point2 = _arg1[_local4]; if (int(_local4) == 0){ point1 = _arg1[(_local3 - 1)]; point3 = _arg1[(_local3 - 2)]; } else { point1 = _arg1[(int(_local4) - 1)]; if (int(_local4) == 1){ point3 = _arg1[(_local3 - 1)]; } else { point3 = _arg1[(int(_local4) - 2)]; }; }; line.x = (point2.y - point1.y); line.y = (point1.x - point2.x); zero = ((point1.x * line.x) + (point1.y * line.y)); sign = ((zero - (point3.x * line.x)) - (point3.y * line.y)); flag = true; for each (_local5 in _arg2) { dot = ((_local5.x * line.x) + (_local5.y * line.y)); if ((zero * sign) > (dot * sign)){ flag = false; break; }; }; if (flag){ return (true); }; }; return (false); } public function set projectionVector(_arg1:Number3D):void{ _projectionVector = _arg1; if (_projectionVector){ _N.cross(_projectionVector, DOWN); if (!_N.modulo){ _N = RIGHT; }; _M.cross(_N, _projectionVector); _N.cross(_M, _projectionVector); _N.normalize(); _M.normalize(); }; _projectionDirty = true; } private function findSeparatingAxis(_arg1:Array, _arg2:Array):Boolean{ if (checkEdge(_arg1, _arg2)){ return (true); }; if (checkEdge(_arg2, _arg1)){ return (true); }; return (false); } override public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ _graphics = null; if (_colorTransformDirty){ updateColorTransform(); }; if (_bitmapDirty){ updateRenderBitmap(); }; if (((_projectionDirty) || (_transformDirty))){ invalidateFaces(); }; if (_transformDirty){ updateTransform(); }; if (((_materialDirty) || (_blendModeDirty))){ clearFaces(); }; _projectionDirty = false; _blendModeDirty = false; } public function set rotation(_arg1:Number):void{ if (isNaN(_arg1)){ throw (new Error("isNaN(rotation)")); }; if (_arg1 == Infinity){ Debug.warning("rotation == Infinity"); }; if (_arg1 == -(Infinity)){ Debug.warning("rotation == -Infinity"); }; _rotation = _arg1; _transformDirty = true; } public function get throughProjection():Boolean{ return (_throughProjection); } override public function getPixel32(_arg1:Number, _arg2:Number):uint{ if (_transform){ x = (_arg1 * _bitmap.width); y = ((1 - _arg2) * _bitmap.height); t = _transform.clone(); t.invert(); if (repeat){ px = ((((x * t.a) + (y * t.c)) + t.tx) % _bitmap.width); py = ((((x * t.b) + (y * t.d)) + t.ty) % _bitmap.height); if (px < 0){ px = (px + _bitmap.width); }; if (py < 0){ py = (py + _bitmap.height); }; return (_bitmap.getPixel32(px, py)); } else { return (_bitmap.getPixel32((((x * t.a) + (y * t.c)) + t.tx), (((x * t.b) + (y * t.d)) + t.ty))); }; }; return (super.getPixel32(_arg1, _arg2)); } public function get transform():Matrix{ return (_transform); } private function projectUV(_arg1:DrawTriangle):Matrix{ faceVO = _arg1.faceVO; if (globalProjection){ v0.transform(faceVO.v0.position, _arg1.source.sceneTransform); v1.transform(faceVO.v1.position, _arg1.source.sceneTransform); v2.transform(faceVO.v2.position, _arg1.source.sceneTransform); } else { v0 = faceVO.v0.position; v1 = faceVO.v1.position; v2 = faceVO.v2.position; }; v0x = v0.x; v0y = v0.y; v0z = v0.z; v1x = v1.x; v1y = v1.y; v1z = v1.z; v2x = v2.x; v2y = v2.y; v2z = v2.z; _u0 = (((v0x * _N.x) + (v0y * _N.y)) + (v0z * _N.z)); _u1 = (((v1x * _N.x) + (v1y * _N.y)) + (v1z * _N.z)); _u2 = (((v2x * _N.x) + (v2y * _N.y)) + (v2z * _N.z)); _v0 = (((v0x * _M.x) + (v0y * _M.y)) + (v0z * _M.z)); _v1 = (((v1x * _M.x) + (v1y * _M.y)) + (v1z * _M.z)); _v2 = (((v2x * _M.x) + (v2y * _M.y)) + (v2z * _M.z)); if ((((((_u0 == _u1)) && ((_v0 == _v1)))) || ((((_u0 == _u2)) && ((_v0 == _v2)))))){ if (_u0 > 0.05){ _u0 = (_u0 - 0.05); } else { _u0 = (_u0 + 0.05); }; if (_v0 > 0.07){ _v0 = (_v0 - 0.07); } else { _v0 = (_v0 + 0.07); }; }; if ((((_u2 == _u1)) && ((_v2 == _v1)))){ if (_u2 > 0.04){ _u2 = (_u2 - 0.04); } else { _u2 = (_u2 + 0.04); }; if (_v2 > 0.06){ _v2 = (_v2 - 0.06); } else { _v2 = (_v2 + 0.06); }; }; t = new Matrix((_u1 - _u0), (_v1 - _v0), (_u2 - _u0), (_v2 - _v0), _u0, _v0); t.invert(); return (t); } private function getFacePoints(_arg1:Matrix):Array{ fPoint1.x = (_u0 = _arg1.tx); fPoint2.x = (_arg1.a + _u0); fPoint3.x = (_arg1.c + _u0); fPoint1.y = (_v0 = _arg1.ty); fPoint2.y = (_arg1.b + _v0); fPoint3.y = (_arg1.d + _v0); return ([fPoint1, fPoint2, fPoint3]); } public function get rotation():Number{ return (_rotation); } private function getMappingPoints(_arg1:Matrix):Array{ mapa = (_arg1.a * width); mapb = (_arg1.b * width); mapc = (_arg1.c * height); mapd = (_arg1.d * height); maptx = _arg1.tx; mapty = _arg1.ty; mPoint1.x = maptx; mPoint1.y = mapty; mPoint2.x = (maptx + mapc); mPoint2.y = (mapty + mapd); mPoint3.x = ((maptx + mapa) + mapc); mPoint3.y = ((mapty + mapb) + mapd); mPoint4.x = (maptx + mapa); mPoint4.y = (mapty + mapb); return ([mPoint1, mPoint2, mPoint3, mPoint4]); } override public function renderTriangle(_arg1:DrawTriangle):void{ if (((_projectionVector) && (!(throughProjection)))){ if (globalProjection){ normalR.rotate(_arg1.faceVO.face.normal, _arg1.source.sceneTransform); if (normalR.dot(_projectionVector) < 0){ return; }; } else { if (_arg1.faceVO.face.normal.dot(_projectionVector) < 0){ return; }; }; }; super.renderTriangle(_arg1); } override public function renderBitmapLayer(_arg1:DrawTriangle, _arg2:Rectangle, _arg3:FaceMaterialVO):FaceMaterialVO{ if (_transform){ _mapping = _transform.clone(); } else { _mapping = new Matrix(); }; if (!_projectionVector){ renderSource(_arg1.source, _arg2, _mapping); }; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO); if (_arg3.resized){ _arg3.resized = false; _faceMaterialVO.resized = true; }; _faceMaterialVO.invtexturemapping = _arg3.invtexturemapping; if (((((_arg3.updated) || (_faceMaterialVO.invalidated))) || (_faceMaterialVO.updated))){ _arg3.updated = false; _bitmapRect = _arg1.faceVO.bitmapRect; if (_faceMaterialVO.invalidated){ _faceMaterialVO.invalidated = false; } else { _faceMaterialVO.updated = true; }; _faceMaterialVO.bitmap = _arg3.bitmap.clone(); if (_projectionVector){ _invtexturemapping = _faceMaterialVO.invtexturemapping; _mapping.concat(projectUV(_arg1)); _mapping.concat(_invtexturemapping); normalR.clone(_arg1.faceVO.face.normal); if (_globalProjection){ normalR.rotate(normalR, _arg1.source.sceneTransform); }; if (((((throughProjection) || ((normalR.dot(_projectionVector) >= 0)))) && (((repeat) || (!(findSeparatingAxis(getFacePoints(_invtexturemapping), getMappingPoints(_mapping)))))))){ if (_faceMaterialVO.cleared){ _faceMaterialVO.bitmap = _arg3.bitmap.clone(); }; _faceMaterialVO.cleared = false; _faceMaterialVO.updated = true; _graphics = _s.graphics; _graphics.clear(); _graphics.beginBitmapFill(_bitmap, _mapping, repeat, smooth); _graphics.drawRect(0, 0, _bitmapRect.width, _bitmapRect.height); _graphics.endFill(); _faceMaterialVO.bitmap.draw(_s, null, _colorTransform, _blendMode, _faceMaterialVO.bitmap.rect); }; } else { if (((repeat) && (!(findSeparatingAxis(getContainerPoints(_arg2), getMappingPoints(_mapping)))))){ _faceMaterialVO.cleared = false; _faceMaterialVO.updated = true; _faceMaterialVO.bitmap.copyPixels(_sourceVO.bitmap, _bitmapRect, _zeroPoint, null, null, true); }; }; }; return (_faceMaterialVO); } public function set throughProjection(_arg1:Boolean):void{ _throughProjection = _arg1; _projectionDirty = true; } } }//package away3d.materials
Section 147
//WhiteShadingBitmapMaterial (away3d.materials.WhiteShadingBitmapMaterial) package away3d.materials { import flash.geom.*; import flash.display.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.core.render.*; import flash.utils.*; import flash.filters.*; public class WhiteShadingBitmapMaterial extends CenterLightingMaterial implements IUVMaterial { private var cache:Dictionary; private var _faceDictionary:Dictionary; private var bitmapPoint:Point; public var smooth:Boolean; public var repeat:Boolean; private var step:int;// = 1 private var _bitmap:BitmapData; private var mapping:Matrix; private var colorTransform:ColorMatrixFilter; private var whitek:Number;// = 0.2 private var br:Number; private var blackrender:Boolean; private var _texturemapping:Matrix; private var _faceMaterialVO:FaceMaterialVO; private var whiterender:Boolean; public function WhiteShadingBitmapMaterial(_arg1:BitmapData, _arg2:Object=null){ _faceDictionary = new Dictionary(true); whitek = 0.2; bitmapPoint = new Point(0, 0); colorTransform = new ColorMatrixFilter(); step = 1; _bitmap = _arg1; super(_arg2); smooth = ini.getBoolean("smooth", false); repeat = ini.getBoolean("repeat", false); if (!CacheStore.whiteShadingCache[_bitmap]){ CacheStore.whiteShadingCache[_bitmap] = new Dictionary(true); }; cache = CacheStore.whiteShadingCache[_bitmap]; } override public function get visible():Boolean{ return (true); } public function doubleStepTo(_arg1:int):void{ if (step < _arg1){ step = (step * 2); }; } protected function getMapping(_arg1:DrawTriangle):Matrix{ if (_arg1.generated){ _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); return (_texturemapping); }; _faceMaterialVO = getFaceMaterialVO(_arg1.faceVO, _arg1.source, _arg1.view); if (!_faceMaterialVO.invalidated){ return (_faceMaterialVO.texturemapping); }; _texturemapping = _arg1.transformUV(this).clone(); _texturemapping.invert(); return ((_faceMaterialVO.texturemapping = _texturemapping)); } public function get height():Number{ return (_bitmap.height); } private function ladder(_arg1:Number):Number{ if (_arg1 < (1 / 0xFF)){ return (0); }; if (_arg1 > 0xFF){ _arg1 = 0xFF; }; return (Math.exp((Math.round((Math.log(_arg1) * step)) / step))); } public function get bitmap():BitmapData{ return (_bitmap); } override protected function renderTri(_arg1:DrawTriangle, _arg2:AbstractRenderSession, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number):void{ var _local12:Number; var _local13:BitmapData; br = (((((((((_arg3 + _arg4) + _arg5) + _arg6) + _arg7) + _arg8) + _arg9) + _arg10) + _arg11) / 3); mapping = getMapping(_arg1); if ((((br < 1)) && (((blackrender) || ((((step < 16)) && (!(_bitmap.transparent)))))))){ _arg2.renderTriangleBitmap(_bitmap, mapping, _arg1.screenVertices, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex, smooth, repeat); _arg2.renderTriangleColor(0, (1 - br), _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); } else { if ((((br > 1)) && (whiterender))){ _arg2.renderTriangleBitmap(_bitmap, mapping, _arg1.screenVertices, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex, smooth, repeat); _arg2.renderTriangleColor(0xFFFFFF, ((br - 1) * whitek), _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); } else { if (step < 64){ if (Math.random() < 0.01){ doubleStepTo(64); }; }; _local12 = ladder(br); _local13 = cache[_local12]; if (_local13 == null){ _local13 = new BitmapData(_bitmap.width, _bitmap.height, true, 0); colorTransform.matrix = [_local12, 0, 0, 0, 0, 0, _local12, 0, 0, 0, 0, 0, _local12, 0, 0, 0, 0, 0, 1, 0]; _local13.applyFilter(_bitmap, _local13.rect, bitmapPoint, colorTransform); cache[_local12] = _local13; }; _arg2.renderTriangleBitmap(_local13, mapping, _arg1.screenVertices, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex, smooth, repeat); }; }; } public function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void{ var _local3:FaceMaterialVO; for each (_local3 in _faceDictionary) { _local3.invalidated = true; }; } public function getPixel32(_arg1:Number, _arg2:Number):uint{ return (_bitmap.getPixel32((_arg1 * _bitmap.width), ((1 - _arg2) * _bitmap.height))); } public function getFaceMaterialVO(_arg1:FaceVO, _arg2:Object3D=null, _arg3:View3D=null):FaceMaterialVO{ if ((_faceMaterialVO = _faceDictionary[_arg1])){ return (_faceMaterialVO); }; return ((_faceDictionary[_arg1] = new FaceMaterialVO())); } public function get width():Number{ return (_bitmap.width); } override public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{ var _local3:FaceMaterialVO; for each (_local3 in _faceDictionary) { if (!_local3.cleared){ _local3.clear(); }; }; } } }//package away3d.materials
Section 148
//WireColorMaterial (away3d.materials.WireColorMaterial) package away3d.materials { import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.events.*; public class WireColorMaterial extends EventDispatcher implements ITriangleMaterial { public var width:Number; public var color:int; protected var ini:Init; public var alpha:Number; public var wirealpha:Number; var _id:int; public var wirecolor:int; public function WireColorMaterial(_arg1=null, _arg2:Object=null){ if (_arg1 == null){ _arg1 = "random"; }; this.color = Cast.trycolor(_arg1); ini = Init.parse(_arg2); alpha = ini.getNumber("alpha", 1, {min:0, max:1}); wirecolor = ini.getColor("wirecolor", 0); width = ini.getNumber("width", 1, {min:0}); wirealpha = ini.getNumber("wirealpha", 1, {min:0, max:1}); } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function renderTriangle(_arg1:DrawTriangle):void{ _arg1.source.session.renderTriangleLineFill(width, color, alpha, wirecolor, wirealpha, _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); } public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ } public function get id():int{ return (_id); } public function get visible():Boolean{ return ((((alpha > 0)) || ((wirealpha > 0)))); } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } } }//package away3d.materials
Section 149
//WireframeMaterial (away3d.materials.WireframeMaterial) package away3d.materials { import flash.events.*; import away3d.core.draw.*; import away3d.containers.*; import away3d.core.base.*; import away3d.core.utils.*; import away3d.events.*; public class WireframeMaterial extends EventDispatcher implements ITriangleMaterial, ISegmentMaterial { public var width:Number; public var color:int; protected var ini:Init; public var alpha:Number; var _id:int; public function WireframeMaterial(_arg1=null, _arg2:Object=null){ if (_arg1 == null){ _arg1 = "random"; }; this.color = Cast.trycolor(_arg1); ini = Init.parse(_arg2); alpha = ini.getNumber("alpha", 1, {min:0, max:1}); width = ini.getNumber("width", 1, {min:0}); } public function removeOnMaterialUpdate(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false); } public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{ } public function get id():int{ return (_id); } public function addOnMaterialUpdate(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true); } public function get visible():Boolean{ return ((alpha > 0)); } public function renderSegment(_arg1:DrawSegment):void{ if (alpha <= 0){ return; }; _arg1.source.session.renderLine(_arg1.v0x, _arg1.v0y, _arg1.v1x, _arg1.v1y, width, color, alpha); } public function renderTriangle(_arg1:DrawTriangle):void{ if (alpha <= 0){ return; }; _arg1.source.session.renderTriangleLine(width, color, alpha, _arg1.screenVertices, _arg1.screenCommands, _arg1.screenIndices, _arg1.startIndex, _arg1.endIndex); } } }//package away3d.materials
Section 150
//IOverlay (away3d.overlays.IOverlay) package away3d.overlays { public interface IOverlay { function update():void; } }//package away3d.overlays
Section 151
//CubeMaterialsData (away3d.primitives.data.CubeMaterialsData) package away3d.primitives.data { import flash.events.*; import away3d.core.utils.*; import away3d.materials.*; import away3d.events.*; public class CubeMaterialsData extends EventDispatcher { private var _top:ITriangleMaterial; private var _bottom:ITriangleMaterial; private var _right:ITriangleMaterial; private var _back:ITriangleMaterial; protected var ini:Init; private var _left:ITriangleMaterial; private var _front:ITriangleMaterial; private var _materialchanged:MaterialEvent; public function CubeMaterialsData(_arg1:Object=null){ ini = Init.parse(_arg1); _left = (ini.getMaterial("left") as ITriangleMaterial); _right = (ini.getMaterial("right") as ITriangleMaterial); _bottom = (ini.getMaterial("bottom") as ITriangleMaterial); _top = (ini.getMaterial("top") as ITriangleMaterial); _front = (ini.getMaterial("front") as ITriangleMaterial); _back = (ini.getMaterial("back") as ITriangleMaterial); } public function set bottom(_arg1:ITriangleMaterial):void{ if (_bottom == _arg1){ return; }; _bottom = _arg1; notifyMaterialChange(_bottom, "bottom"); } public function set front(_arg1:ITriangleMaterial):void{ if (_front == _arg1){ return; }; _front = _arg1; notifyMaterialChange(_front, "front"); } public function removeOnMaterialChange(_arg1:Function):void{ removeEventListener(MaterialEvent.MATERIAL_CHANGED, _arg1, false); } public function get left():ITriangleMaterial{ return (_left); } private function notifyMaterialChange(_arg1:ITriangleMaterial, _arg2:String):void{ if (!hasEventListener(MaterialEvent.MATERIAL_CHANGED)){ return; }; _materialchanged = new MaterialEvent(MaterialEvent.MATERIAL_CHANGED, _arg1); _materialchanged.extra = _arg2; dispatchEvent(_materialchanged); } public function set back(_arg1:ITriangleMaterial):void{ if (_back == _arg1){ return; }; _back = _arg1; notifyMaterialChange(_back, "back"); } public function get right():ITriangleMaterial{ return (_right); } public function get back():ITriangleMaterial{ return (_back); } public function get front():ITriangleMaterial{ return (_front); } public function get bottom():ITriangleMaterial{ return (_bottom); } public function get top():ITriangleMaterial{ return (_top); } public function set left(_arg1:ITriangleMaterial):void{ if (_left == _arg1){ return; }; _left = _arg1; notifyMaterialChange(_left, "left"); } public function set top(_arg1:ITriangleMaterial):void{ if (_top == _arg1){ return; }; _top = _arg1; notifyMaterialChange(_top, "top"); } public function addOnMaterialChange(_arg1:Function):void{ addEventListener(MaterialEvent.MATERIAL_CHANGED, _arg1, false, 0, false); } public function set right(_arg1:ITriangleMaterial):void{ if (_right == _arg1){ return; }; _right = _arg1; notifyMaterialChange(_right, "right"); } } }//package away3d.primitives.data
Section 152
//AbstractPrimitive (away3d.primitives.AbstractPrimitive) package away3d.primitives { import away3d.core.base.*; import away3d.materials.*; public class AbstractPrimitive extends Mesh { var _segmentActive:Array; var _uvActive:Array; var _faceStore:Array; var _vStore:Array; var _face:Face; var _uv:UV; var _faceActive:Array; var _segmentStore:Array; var _uvStore:Array; var _primitiveDirty:Boolean; var _vActive:Array; var _segment:Segment; private var _index:int; var _v:Vertex; public function AbstractPrimitive(_arg1:Object=null){ _vStore = []; _vActive = []; _uvStore = []; _uvActive = []; _faceStore = []; _faceActive = []; _segmentStore = []; _segmentActive = []; super(_arg1); _primitiveDirty = true; } protected function buildPrimitive():void{ _primitiveDirty = false; _objectDirty = true; _index = faces.length; while (_index--) { removeFace(faces[_index]); }; _index = segments.length; while (_index--) { removeSegment(segments[_index]); }; _vStore = _vStore.concat(_vActive); _vActive = []; _uvStore = _uvStore.concat(_uvActive); _uvActive = []; _faceStore = _faceStore.concat(_faceActive); _faceActive = []; _segmentStore = _segmentStore.concat(_segmentActive); _segmentActive = []; } protected function updatePrimitive():void{ var _local1:int; buildPrimitive(); _local1 = geometry.quarterFacesTotal; while (_local1--) { quarterFaces(); }; } override public function get minX():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.minX); } override public function get minY():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.minY); } override public function get minZ():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.minZ); } override public function get geometry():Geometry{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry); } function createUV(_arg1:Number=0, _arg2:Number=0):UV{ if (_uvStore.length){ _uvActive.push((_uv = _uvStore.pop())); _uv.u = _arg1; _uv.v = _arg2; } else { _uvActive.push((_uv = new UV(_arg1, _arg2))); }; return (_uv); } override public function get objectDepth():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.objectDepth); } override public function get elements():Array{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry.elements); } function createSegment(_arg1:Vertex, _arg2:Vertex, _arg3:ISegmentMaterial=null):Segment{ if (_segmentStore.length){ _segmentActive.push((_segment = _segmentStore.pop())); _segment.v0 = _arg1; _segment.v1 = _arg2; _segment.material = _arg3; } else { _segmentActive.push((_segment = new Segment(_arg1, _arg2, _arg3))); }; return (_segment); } override public function get billboards():Array{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry.billboards); } override public function get objectHeight():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.objectHeight); } override public function get boundingRadius():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.boundingRadius); } override public function updateObject():void{ if (_primitiveDirty){ updatePrimitive(); }; super.updateObject(); } function createFace(_arg1:Vertex, _arg2:Vertex, _arg3:Vertex, _arg4:ITriangleMaterial=null, _arg5:UV=null, _arg6:UV=null, _arg7:UV=null):Face{ if (_faceStore.length){ _faceActive.push((_face = _faceStore.pop())); _face.v0 = _arg1; _face.v1 = _arg2; _face.v2 = _arg3; _face.material = _arg4; _face.uv0 = _arg5; _face.uv1 = _arg6; _face.uv2 = _arg7; } else { _faceActive.push((_face = new Face(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7))); }; return (_face); } override public function get maxX():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.maxX); } override public function get maxY():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.maxY); } override public function get maxZ():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.maxZ); } override public function get segments():Array{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry.segments); } override public function get faces():Array{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry.faces); } function createVertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):Vertex{ if (_vStore.length){ _vActive.push((_v = _vStore.pop())); _v.x = _arg1; _v.y = _arg2; _v.z = _arg3; } else { _vActive.push((_v = new Vertex(_arg1, _arg2, _arg3))); }; return (_v); } override public function get objectWidth():Number{ if (_primitiveDirty){ updatePrimitive(); }; return (super.objectWidth); } override public function get vertices():Array{ if (_primitiveDirty){ updatePrimitive(); }; return (_geometry.vertices); } } }//package away3d.primitives
Section 153
//Cube (away3d.primitives.Cube) package away3d.primitives { import away3d.core.base.*; import away3d.core.utils.*; import away3d.primitives.data.*; import away3d.materials.*; import away3d.events.*; public class Cube extends AbstractPrimitive { private var _dbv:Array; private var _height:Number; private var _leftFaces:Array; private var _frontFaces:Array; private var _width:Number; private var _topFaces:Array; private var _bottomFaces:Array; private var _dbu:Array; private var _segmentsH:int; private var _segmentsW:int; private var _rightFaces:Array; private var _flip:Boolean; private var _backFaces:Array; private var _cubeMaterials:CubeMaterialsData; private var _cubeFaceArray:Array; private var _offset:Number;// = 0.333333333333333 private var _map6:Boolean; private var _depth:Number; public function Cube(_arg1:Object=null){ _offset = (1 / 3); super(_arg1); _width = ini.getNumber("width", 100, {min:0}); _height = ini.getNumber("height", 100, {min:0}); _depth = ini.getNumber("depth", 100, {min:0}); _flip = ini.getBoolean("flip", false); _cubeMaterials = ini.getCubeMaterials("faces"); _segmentsW = ini.getInt("segmentsW", 1, {min:1}); _segmentsH = ini.getInt("segmentsH", 1, {min:1}); _map6 = ini.getBoolean("map6", false); if (!_cubeMaterials){ _cubeMaterials = ini.getCubeMaterials("cubeMaterials"); }; if (!_cubeMaterials){ _cubeMaterials = new CubeMaterialsData(); }; _cubeMaterials.addOnMaterialChange(onCubeMaterialChange); type = "Cube"; url = "primitive"; } override protected function buildPrimitive():void{ var _local1:Array; var _local2:Array; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:int; var _local7:Vertex; var _local8:Vertex; var _local9:Vertex; var _local10:UV; var _local11:UV; var _local12:UV; var _local13:Face; var _local14:Number; var _local15:Number; var _local16:Number; super.buildPrimitive(); _leftFaces = []; _rightFaces = []; _bottomFaces = []; _topFaces = []; _frontFaces = []; _backFaces = []; _local1 = []; _local2 = []; _local3 = (_width * 0.5); _local4 = (_height * 0.5); _local5 = (_depth * 0.5); _dbv = []; _dbu = []; _local14 = (_width / _segmentsW); _local6 = 0; while (_local6 <= _segmentsW) { _local1[_local6] = createVertex((-(_local3) + (_local6 * _local14)), _local4, -(_local5)); _local2[_local6] = createVertex((-(_local3) + (_local6 * _local14)), -(_local4), -(_local5)); _local6++; }; buildSide([_local2, _local1], _cubeMaterials.back, _backFaces, "b"); _local2 = []; _local1 = []; _local15 = (_map6) ? _offset : 0; _local16 = (_map6) ? 0.5 : 0; _local6 = 0; while (_local6 < _backFaces.length) { _local13 = _backFaces[_local6]; _local7 = makeVertex(_local13.v0.x, _local13.v0.y, -(_local13.v0.z)); _local8 = makeVertex(_local13.v1.x, _local13.v1.y, -(_local13.v1.z)); _local9 = makeVertex(_local13.v2.x, _local13.v2.y, -(_local13.v2.z)); _local10 = makeUV((1 - (_local13.uv0.u + _local15)), (_local13.uv0.v + _local16)); _local11 = makeUV((1 - (_local13.uv1.u + _local15)), (_local13.uv1.v + _local16)); _local12 = makeUV((1 - (_local13.uv2.u + _local15)), (_local13.uv2.v + _local16)); addFace(createFace(_local8, _local7, _local9, _cubeMaterials.front, _local11, _local10, _local12)); _frontFaces.push(faces[(faces.length - 1)]); _local6++; }; _local14 = (_depth / _segmentsW); _local6 = 0; while (_local6 <= _segmentsW) { _local1[_local6] = makeVertex(_local3, _local4, (-(_local5) + (_local6 * _local14))); _local2[_local6] = makeVertex(_local3, -(_local4), (-(_local5) + (_local6 * _local14))); _local6++; }; buildSide([_local2, _local1], _cubeMaterials.left, _leftFaces, "l"); _local1 = []; _local2 = []; _local15 = (_map6) ? 0.5 : 0; _local6 = 0; while (_local6 < _leftFaces.length) { _local13 = _leftFaces[_local6]; _local7 = makeVertex(-(_local13.v0.x), _local13.v0.y, _local13.v0.z); _local8 = makeVertex(-(_local13.v1.x), _local13.v1.y, _local13.v1.z); _local9 = makeVertex(-(_local13.v2.x), _local13.v2.y, _local13.v2.z); _local10 = makeUV((1 - _local13.uv0.u), _local13.uv0.v); _local11 = makeUV((1 - _local13.uv1.u), _local13.uv1.v); _local12 = makeUV((1 - _local13.uv2.u), _local13.uv2.v); addFace(createFace(_local8, _local7, _local9, _cubeMaterials.right, _local11, _local10, _local12)); _rightFaces.push(faces[(faces.length - 1)]); _local6++; }; _local14 = (_map6) ? (_depth / _segmentsW) : (_width / _segmentsW); _local6 = 0; while (_local6 <= _segmentsW) { if (_map6){ _local1[_local6] = makeVertex(-(_local3), _local4, (_local5 - (_local6 * _local14))); _local2[_local6] = makeVertex(_local3, _local4, (_local5 - (_local6 * _local14))); } else { _local1[_local6] = makeVertex((_local3 - (_local6 * _local14)), _local4, _local5); _local2[_local6] = makeVertex((_local3 - (_local6 * _local14)), _local4, -(_local5)); }; _local6++; }; buildSide([_local1, _local2], _cubeMaterials.top, _topFaces, "t"); _local15 = (_map6) ? _offset : 0; _local6 = 0; while (_local6 < _topFaces.length) { _local13 = _topFaces[_local6]; _local7 = makeVertex(_local13.v0.x, -(_local13.v0.y), _local13.v0.z); _local8 = makeVertex(_local13.v1.x, -(_local13.v1.y), _local13.v1.z); _local9 = makeVertex(_local13.v2.x, -(_local13.v2.y), _local13.v2.z); _local10 = makeUV(((1 - _local13.uv0.u) + _local15), _local13.uv0.v); _local11 = makeUV(((1 - _local13.uv1.u) + _local15), _local13.uv1.v); _local12 = makeUV(((1 - _local13.uv2.u) + _local15), _local13.uv2.v); addFace(createFace(_local8, _local7, _local9, _cubeMaterials.bottom, _local11, _local10, _local12)); _bottomFaces.push(faces[(faces.length - 1)]); _local6++; }; _local2 = (_dbv = (_dbu = null)); _local1 = _local2; } public function get map6():Boolean{ return (_map6); } public function set height(_arg1:Number):void{ if (_height == _arg1){ return; }; _height = _arg1; _primitiveDirty = true; } public function get flip():Boolean{ return (_flip); } public function set map6(_arg1:Boolean):void{ _map6 = _arg1; } public function get depth():Number{ return (_depth); } public function get segmentsH():Number{ return (_segmentsH); } public function get segmentsW():Number{ return (_segmentsW); } private function buildSide(_arg1:Array, _arg2:ITriangleMaterial, _arg3:Array, _arg4:String):void{ var _local5:int; var _local6:int; _local5 = (_arg1.length - 1); _local6 = 0; while (_local6 < _local5) { generateFaces(_arg1[_local6], _arg1[(_local6 + 1)], ((1 / _local5) * _local6), _local5, _arg2, _arg3, _arg4); _local6++; }; } public function set cubeMaterials(_arg1:CubeMaterialsData):void{ if (_cubeMaterials == _arg1){ return; }; if (_cubeMaterials){ _cubeMaterials.addOnMaterialChange(onCubeMaterialChange); }; _cubeMaterials = _arg1; _cubeMaterials.addOnMaterialChange(onCubeMaterialChange); } public function get height():Number{ return (_height); } public function set flip(_arg1:Boolean):void{ _flip = _arg1; } private function makeUV(_arg1:Number, _arg2:Number):UV{ var _local3:int; var _local4:UV; _local3 = 0; while (_local3 < _dbu.length) { if ((((_dbu[_local3].u == _arg1)) && ((_dbu[_local3].v == _arg2)))){ return (_dbu[_local3]); }; _local3++; }; _local4 = createUV(_arg1, _arg2); _dbu[_dbu.length] = _local4; return (_local4); } public function set segmentsH(_arg1:Number):void{ if (_segmentsH == _arg1){ return; }; _segmentsH = _arg1; _primitiveDirty = true; } public function get cubeMaterials():CubeMaterialsData{ return (_cubeMaterials); } private function onCubeMaterialChange(_arg1:MaterialEvent):void{ var _local2:Face; switch (_arg1.extra){ case "left": _cubeFaceArray = _leftFaces; break; case "right": _cubeFaceArray = _rightFaces; break; case "bottom": _cubeFaceArray = _bottomFaces; break; case "top": _cubeFaceArray = _topFaces; break; case "front": _cubeFaceArray = _frontFaces; break; case "back": _cubeFaceArray = _backFaces; }; for each (_local2 in _cubeFaceArray) { _local2.material = (_arg1.material as ITriangleMaterial); }; } public function set width(_arg1:Number):void{ if (_width == _arg1){ return; }; _width = _arg1; _primitiveDirty = true; } public function set depth(_arg1:Number):void{ if (_depth == _arg1){ return; }; _depth = _arg1; _primitiveDirty = true; } public function set segmentsW(_arg1:Number):void{ if (_segmentsW == _arg1){ return; }; _segmentsW = _arg1; _primitiveDirty = true; } private function generateFaces(_arg1:Array, _arg2:Array, _arg3:Number, _arg4:int, _arg5:ITriangleMaterial, _arg6:Array, _arg7:String):void{ var _local8:Array; var _local9:int; var _local10:int; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:UV; var _local15:UV; var _local16:UV; var _local17:UV; var _local18:Vertex; var _local19:Vertex; var _local20:Vertex; var _local21:Vertex; var _local22:Number; var _local23:Number; var _local24:int; var _local25:Number; var _local26:Number; var _local27:Number; var _local28:Number; _local8 = []; _local24 = 0; _local25 = 0; _local26 = (1 / (_arg1.length - 1)); _local27 = 0; _local28 = 0; _local9 = 0; while (_local9 < _arg1.length) { _local11 = ((_arg2[_local9].x - _arg1[_local9].x) / _segmentsH); _local12 = ((_arg2[_local9].y - _arg1[_local9].y) / _segmentsH); _local13 = ((_arg2[_local9].z - _arg1[_local9].z) / _segmentsH); _local10 = 0; while (_local10 < (_segmentsH + 1)) { _local8.push(makeVertex((_arg1[_local9].x + (_local11 * _local10)), (_arg1[_local9].y + (_local12 * _local10)), (_arg1[_local9].z + (_local13 * _local10)))); _local10++; }; _local9++; }; _local9 = 0; while (_local9 < (_arg1.length - 1)) { _local22 = _local25; _local25 = (_local25 + _local26); _local23 = _local25; if (_map6){ switch (_arg7){ case "b": _local22 = (_local22 * _offset); _local23 = (_local23 * _offset); break; case "l": _local22 = (_local22 * _offset); _local23 = (_local23 * _offset); break; default: _local22 = ((_local22 * _offset) + _offset); _local23 = ((_local23 * _offset) + _offset); }; }; _local10 = 0; while (_local10 < _segmentsH) { _local27 = (_arg3 + ((_local10 / _segmentsH) / _arg4)); _local28 = (_arg3 + (((_local10 + 1) / _segmentsH) / _arg4)); if (_map6){ switch (_arg7){ case "b": _local27 = (_local27 * 0.5); _local28 = (_local28 * 0.5); break; case "l": _local27 = ((_local27 * 0.5) + 0.5); _local28 = ((_local28 * 0.5) + 0.5); break; case "t": _local27 = (_local27 * 0.5); _local28 = (_local28 * 0.5); break; }; }; _local14 = makeUV(_local22, _local27); _local15 = makeUV(_local22, _local28); _local16 = makeUV(_local23, _local28); _local17 = makeUV(_local23, _local27); _local18 = _local8[(_local24 + _local10)]; _local19 = _local8[((_local24 + _local10) + 1)]; _local20 = _local8[((_local24 + _local10) + (_segmentsH + 2))]; _local21 = _local8[((_local24 + _local10) + (_segmentsH + 1))]; if (_flip){ addFace(createFace(_local18, _local19, _local20, _arg5, _local14, _local15, _local16)); addFace(createFace(_local18, _local20, _local21, _arg5, _local14, _local16, _local17)); } else { addFace(createFace(_local19, _local18, _local20, _arg5, _local15, _local14, _local16)); addFace(createFace(_local20, _local18, _local21, _arg5, _local16, _local14, _local17)); }; _arg6.push(faces[(faces.length - 2)], faces[(faces.length - 1)]); _local10++; }; _local24 = (_local24 + (_segmentsH + 1)); _local9++; }; } private function makeVertex(_arg1:Number, _arg2:Number, _arg3:Number):Vertex{ var _local4:int; var _local5:Vertex; _local4 = 0; while (_local4 < _dbv.length) { if ((((((_dbv[_local4].x == _arg1)) && ((_dbv[_local4].y == _arg2)))) && ((_dbv[_local4].z == _arg3)))){ return (_dbv[_local4]); }; _local4++; }; _local5 = createVertex(_arg1, _arg2, _arg3); _dbv[_dbv.length] = _local5; return (_local5); } public function get width():Number{ return (_width); } } }//package away3d.primitives
Section 154
//Sphere (away3d.primitives.Sphere) package away3d.primitives { import away3d.core.base.*; public class Sphere extends AbstractPrimitive { private var _yUp:Boolean; private var _segmentsH:int; private var _segmentsW:int; private var grid:Array; private var _radius:Number; public function Sphere(_arg1:Object=null){ super(_arg1); _radius = ini.getNumber("radius", 100, {min:0}); _segmentsW = ini.getInt("segmentsW", 8, {min:3}); _segmentsH = ini.getInt("segmentsH", 6, {min:2}); _yUp = ini.getBoolean("yUp", true); type = "Sphere"; url = "primitive"; } override protected function buildPrimitive():void{ var _local1:int; var _local2:int; var _local3:Vertex; var _local4:Vertex; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Vertex; var _local12:Vertex; var _local13:Vertex; var _local14:Vertex; var _local15:int; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:UV; var _local21:UV; var _local22:UV; var _local23:UV; super.buildPrimitive(); grid = new Array((_segmentsH + 1)); _local3 = (_yUp) ? createVertex(0, -(_radius), 0) : createVertex(0, 0, -(_radius)); grid[0] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { grid[0][_local1] = _local3; _local1++; }; _local2 = 1; while (_local2 < _segmentsH) { _local5 = ((_local2 / _segmentsH) * Math.PI); _local6 = (-(_radius) * Math.cos(_local5)); _local7 = (_radius * Math.sin(_local5)); grid[_local2] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { _local8 = (((2 * _local1) / _segmentsW) * Math.PI); _local9 = (_local7 * Math.sin(_local8)); _local10 = (_local7 * Math.cos(_local8)); if (_yUp){ grid[_local2][_local1] = createVertex(_local10, _local6, _local9); } else { grid[_local2][_local1] = createVertex(_local10, -(_local9), _local6); }; _local1++; }; _local2++; }; _local4 = (_yUp) ? createVertex(0, _radius, 0) : createVertex(0, 0, _radius); grid[_segmentsH] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { grid[_segmentsH][_local1] = _local4; _local1++; }; _local2 = 1; while (_local2 <= _segmentsH) { _local1 = 0; while (_local1 < _segmentsW) { _local11 = grid[_local2][_local1]; _local12 = grid[_local2][(((_local1 - 1) + _segmentsW) % _segmentsW)]; _local13 = grid[(_local2 - 1)][(((_local1 - 1) + _segmentsW) % _segmentsW)]; _local14 = grid[(_local2 - 1)][_local1]; _local15 = _local1; if (_local1 == 0){ _local15 = _segmentsW; }; _local16 = (_local2 / _segmentsH); _local17 = ((_local2 - 1) / _segmentsH); _local18 = (_local15 / _segmentsW); _local19 = ((_local15 - 1) / _segmentsW); _local20 = createUV(_local18, _local16); _local21 = createUV(_local19, _local16); _local22 = createUV(_local19, _local17); _local23 = createUV(_local18, _local17); if (_local2 < _segmentsH){ addFace(createFace(_local11, _local12, _local13, null, _local20, _local21, _local22)); }; if (_local2 > 1){ addFace(createFace(_local11, _local13, _local14, null, _local20, _local22, _local23)); }; _local1++; }; _local2++; }; } public function get radius():Number{ return (_radius); } public function get segmentsH():Number{ return (_segmentsH); } public function get segmentsW():Number{ return (_segmentsW); } public function set segmentsH(_arg1:Number):void{ if (_segmentsH == _arg1){ return; }; _segmentsH = _arg1; _primitiveDirty = true; } public function get yUp():Boolean{ return (_yUp); } public function set radius(_arg1:Number):void{ if (_radius == _arg1){ return; }; _radius = _arg1; _primitiveDirty = true; } public function vertex(_arg1:int, _arg2:int):Vertex{ if (_primitiveDirty){ updatePrimitive(); }; return (grid[_arg2][_arg1]); } public function set segmentsW(_arg1:Number):void{ if (_segmentsW == _arg1){ return; }; _segmentsW = _arg1; _primitiveDirty = true; } public function set yUp(_arg1:Boolean):void{ if (_yUp == _arg1){ return; }; _yUp = _arg1; _primitiveDirty = true; } } }//package away3d.primitives
Section 155
//WireCube (away3d.primitives.WireCube) package away3d.primitives { import away3d.core.base.*; public class WireCube extends AbstractPrimitive { public var v001:Vertex; public var v110:Vertex; public var v010:Vertex; public var v011:Vertex; private var _height:Number; private var _width:Number; public var v100:Vertex; private var _depth:Number; public var v101:Vertex; public var v111:Vertex; public var v000:Vertex; public function WireCube(_arg1:Object=null){ super(_arg1); _width = ini.getNumber("width", 100, {min:0}); _height = ini.getNumber("height", 100, {min:0}); _depth = ini.getNumber("depth", 100, {min:0}); type = "WireCube"; url = "primitive"; } override protected function buildPrimitive():void{ super.buildPrimitive(); v000 = createVertex((-(_width) / 2), (-(_height) / 2), (-(_depth) / 2)); v001 = createVertex((-(_width) / 2), (-(_height) / 2), (_depth / 2)); v010 = createVertex((-(_width) / 2), (_height / 2), (-(_depth) / 2)); v011 = createVertex((-(_width) / 2), (_height / 2), (_depth / 2)); v100 = createVertex((_width / 2), (-(_height) / 2), (-(_depth) / 2)); v101 = createVertex((_width / 2), (-(_height) / 2), (_depth / 2)); v110 = createVertex((_width / 2), (_height / 2), (-(_depth) / 2)); v111 = createVertex((_width / 2), (_height / 2), (_depth / 2)); addSegment(createSegment(v000, v001)); addSegment(createSegment(v011, v001)); addSegment(createSegment(v011, v010)); addSegment(createSegment(v000, v010)); addSegment(createSegment(v100, v000)); addSegment(createSegment(v101, v001)); addSegment(createSegment(v111, v011)); addSegment(createSegment(v110, v010)); addSegment(createSegment(v100, v101)); addSegment(createSegment(v111, v101)); addSegment(createSegment(v111, v110)); addSegment(createSegment(v100, v110)); } public function set height(_arg1:Number):void{ if (_height == _arg1){ return; }; _height = _arg1; _primitiveDirty = true; } public function get depth():Number{ return (_depth); } public function get height():Number{ return (_height); } public function set width(_arg1:Number):void{ if (_width == _arg1){ return; }; _width = _arg1; _primitiveDirty = true; } public function set depth(_arg1:Number):void{ if (_depth == _arg1){ return; }; _depth = _arg1; _primitiveDirty = true; } public function get width():Number{ return (_width); } } }//package away3d.primitives
Section 156
//WireSphere (away3d.primitives.WireSphere) package away3d.primitives { import away3d.core.base.*; public class WireSphere extends AbstractPrimitive { private var _yUp:Boolean; private var _segmentsH:int; private var _segmentsW:int; private var grid:Array; private var _radius:Number; public function WireSphere(_arg1:Object=null){ super(_arg1); _radius = ini.getNumber("radius", 100, {min:0}); _segmentsW = ini.getInt("segmentsW", 8, {min:3}); _segmentsH = ini.getInt("segmentsH", 6, {min:2}); _yUp = ini.getBoolean("yUp", true); type = "WireSphere"; url = "primitive"; } override protected function buildPrimitive():void{ var _local1:int; var _local2:int; var _local3:Vertex; var _local4:Vertex; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Vertex; var _local12:Vertex; var _local13:Vertex; var _local14:Vertex; super.buildPrimitive(); grid = new Array((_segmentsH + 1)); _local3 = (_yUp) ? createVertex(0, -(_radius), 0) : createVertex(0, 0, -(_radius)); grid[0] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { grid[0][_local1] = _local3; _local1++; }; _local2 = 1; while (_local2 < _segmentsH) { _local5 = ((_local2 / _segmentsH) * Math.PI); _local6 = (-(_radius) * Math.cos(_local5)); _local7 = (_radius * Math.sin(_local5)); grid[_local2] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { _local8 = (((2 * _local1) / _segmentsW) * Math.PI); _local9 = (_local7 * Math.sin(_local8)); _local10 = (_local7 * Math.cos(_local8)); if (_yUp){ grid[_local2][_local1] = createVertex(_local10, _local6, _local9); } else { grid[_local2][_local1] = createVertex(_local10, -(_local9), _local6); }; _local1++; }; _local2++; }; _local4 = (_yUp) ? createVertex(0, _radius, 0) : createVertex(0, 0, _radius); grid[_segmentsH] = new Array(_segmentsW); _local1 = 0; while (_local1 < _segmentsW) { grid[_segmentsH][_local1] = _local4; _local1++; }; _local2 = 1; while (_local2 <= _segmentsH) { _local1 = 0; while (_local1 < _segmentsW) { _local11 = grid[_local2][_local1]; _local12 = grid[_local2][(((_local1 - 1) + _segmentsW) % _segmentsW)]; _local13 = grid[(_local2 - 1)][(((_local1 - 1) + _segmentsW) % _segmentsW)]; _local14 = grid[(_local2 - 1)][_local1]; addSegment(createSegment(_local11, _local14)); addSegment(createSegment(_local12, _local13)); if (_local2 < _segmentsH){ addSegment(createSegment(_local11, _local12)); }; _local1++; }; _local2++; }; } public function get radius():Number{ return (_radius); } public function get segmentsH():Number{ return (_segmentsH); } public function get segmentsW():Number{ return (_segmentsW); } public function set segmentsH(_arg1:Number):void{ if (_segmentsH == _arg1){ return; }; _segmentsH = _arg1; _primitiveDirty = true; } public function get yUp():Boolean{ return (_yUp); } public function set radius(_arg1:Number):void{ if (_radius == _arg1){ return; }; _radius = _arg1; _primitiveDirty = true; } public function vertex(_arg1:int, _arg2:int):Vertex{ if (_primitiveDirty){ updatePrimitive(); }; return (grid[_arg2][_arg1]); } public function set segmentsW(_arg1:Number):void{ if (_segmentsW == _arg1){ return; }; _segmentsW = _arg1; _primitiveDirty = true; } public function set yUp(_arg1:Boolean):void{ if (_yUp == _arg1){ return; }; _yUp = _arg1; _primitiveDirty = true; } } }//package away3d.primitives
Section 157
//DirSprite2D (away3d.sprites.DirSprite2D) package away3d.sprites { import flash.display.*; import away3d.core.base.*; import away3d.core.utils.*; import flash.utils.*; import away3d.core.project.*; public class DirSprite2D extends Object3D { private var _vertices:Array; public var rotation:Number; public var scaling:Number; public var deltaZ:Number; public var smooth:Boolean; private var _bitmaps:Dictionary; public function DirSprite2D(_arg1:Object=null){ var _local2:Array; var _local3:Init; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:BitmapData; _vertices = []; _bitmaps = new Dictionary(true); super(_arg1); scaling = ini.getNumber("scaling", 1, {min:0}); rotation = ini.getNumber("rotation", 0); smooth = ini.getBoolean("smooth", false); deltaZ = ini.getNumber("deltaZ", 0); _local2 = ini.getArray("bitmaps"); for each (_local3 in _local2) { _local3 = Init.parse(_local3); _local4 = _local3.getNumber("x", 0); _local5 = _local3.getNumber("y", 0); _local6 = _local3.getNumber("z", 0); _local7 = _local3.getBitmap("bitmap"); add(_local4, _local5, _local6, _local7); }; projectorType = ProjectorType.DIR_SPRITE; } public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:BitmapData):void{ var _local5:Vertex; var _local6:Vertex; if (_arg4){ for each (_local6 in _vertices) { if ((((((_local6.x == _arg1)) && ((_local6.y == _arg2)))) && ((_local6.z == _arg3)))){ Debug.warning(("Same base point for two bitmaps: " + _local6)); return; }; }; }; _local5 = new Vertex(_arg1, _arg2, _arg3); _vertices.push(_local5); _bitmaps[_local5] = _arg4; } public function get bitmaps():Dictionary{ return (_bitmaps); } public function get vertices():Array{ return (_vertices); } } }//package away3d.sprites
Section 158
//DofSprite2D (away3d.sprites.DofSprite2D) package away3d.sprites { import flash.display.*; import away3d.core.base.*; import away3d.core.project.*; public class DofSprite2D extends Object3D { public var bitmap:BitmapData; public var rotation:Number; public var scaling:Number; public var deltaZ:Number; public var smooth:Boolean; public function DofSprite2D(_arg1:BitmapData, _arg2:Object=null){ this.bitmap = _arg1; super(_arg2); scaling = ini.getNumber("scaling", 1, {min:0}); rotation = ini.getNumber("rotation", 0); smooth = ini.getBoolean("smooth", false); deltaZ = ini.getNumber("deltaZ", 0); projectorType = ProjectorType.DOF_SPRITE; } } }//package away3d.sprites
Section 159
//MovieClipSprite (away3d.sprites.MovieClipSprite) package away3d.sprites { import flash.display.*; import away3d.core.base.*; import away3d.core.project.*; public class MovieClipSprite extends Object3D { public var movieclip:DisplayObject; public var rescale:Boolean; public var align:String; public var scaling:Number; public var deltaZ:Number; public function MovieClipSprite(_arg1:DisplayObject, _arg2:Object=null){ super(_arg2); this.movieclip = _arg1; scaling = ini.getNumber("scaling", 1); deltaZ = ini.getNumber("deltaZ", 0); rescale = ini.getBoolean("rescale", false); align = ini.getString("align", "center"); projectorType = ProjectorType.MOVIE_CLIP_SPRITE; } } }//package away3d.sprites
Section 160
//Sprite2D (away3d.sprites.Sprite2D) package away3d.sprites { import flash.display.*; import away3d.core.base.*; import away3d.core.project.*; public class Sprite2D extends Object3D { public var bitmap:BitmapData; public var rotation:Number; public var scaling:Number; public var deltaZ:Number; public var smooth:Boolean; public function Sprite2D(_arg1:BitmapData, _arg2:Object=null){ this.bitmap = _arg1; super(_arg2); scaling = ini.getNumber("scaling", 1, {min:0}); rotation = ini.getNumber("rotation", 0); smooth = ini.getBoolean("smooth", false); deltaZ = ini.getNumber("deltaZ", 0); projectorType = ProjectorType.SPRITE; } } }//package away3d.sprites
Section 161
//arcane (away3d.arcane) package away3d { public namespace arcane; }//package away3d
Section 162
//MuteUnmuteBtn_8 (cub_fla.MuteUnmuteBtn_8) package cub_fla { import flash.display.*; import flash.events.*; public dynamic class MuteUnmuteBtn_8 extends MovieClip { public var muteBtn:SimpleButton; public var unmuteBtn:SimpleButton; public function MuteUnmuteBtn_8(){ addFrameScript(0, frame1, 1, frame2); } public function unmuteBtn_clickHandler(_arg1:MouseEvent):void{ Application.soundOn(Application.soundVol); gotoAndStop("mute"); } function frame1(){ stop(); if (!Application.isSoundOn){ gotoAndStop("unmute"); }; muteBtn.addEventListener(MouseEvent.CLICK, muteBtn_clickHandler); } function frame2(){ stop(); unmuteBtn.addEventListener(MouseEvent.CLICK, unmuteBtn_clickHandler); } public function muteBtn_clickHandler(_arg1:MouseEvent):void{ Application.soundOff(); gotoAndStop("unmute"); } } }//package cub_fla
Section 163
//MochiAd (mochi.as3.MochiAd) package mochi.as3 { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.net.*; import flash.system.*; public class MochiAd { public static function getVersion():String{ return (MochiServices.getVersion()); } public static function showClickAwayAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_timeout:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var sendHostProgress:Boolean; var options = _arg1; DEFAULTS = {ad_timeout:2000, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{ }, ad_finished:function ():void{ }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; ad_timeout = options.ad_timeout; delete options.ad_timeout; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; sendHostProgress = false; mc.regContLC = function (_arg1:String):void{ mc._containerLCName = _arg1; }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Number; var _local3:Boolean; var _local4:Number; if (!this.parent){ delete this.onEnterFrame; return; }; _local1 = this.parent._mochiad_ctr; _local2 = (getTimer() - this.started); _local3 = false; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; _local3 = true; chk.started = getTimer(); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (this.root == null){ _local3 = true; }; if (_local3){ delete this.onEnterFrame; }; }; doOnEnterFrame(chk); } public static function _isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } public static function _allowDomains(_arg1:String):String{ var _local2:String; _local2 = _arg1.split("/")[2].split(":")[0]; if (Security.sandboxType == "application"){ return (_local2); }; Security.allowDomain("*"); Security.allowDomain(_local2); Security.allowInsecureDomain("*"); Security.allowInsecureDomain(_local2); return (_local2); } public static function unload(_arg1:Object):Boolean{ if (((_arg1.clip) && (_arg1.clip._mochiad))){ _arg1 = _arg1.clip; }; if (_arg1.origFrameRate != undefined){ _arg1.stage.frameRate = _arg1.origFrameRate; }; if (!_arg1._mochiad){ return (false); }; if (_arg1._mochiad._containerLCName != undefined){ _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "notify", {id:"unload"}); }; if (_arg1._mochiad.onUnload){ _arg1._mochiad.onUnload(); }; delete _arg1._mochiad_loaded; delete _arg1._mochiad; return (true); } public static function showInterLevelAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_msec:Number; var ad_timeout:Number; var fadeout_time:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var options = _arg1; DEFAULTS = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; ad_msec = 11000; ad_timeout = options.ad_timeout; delete options.ad_timeout; fadeout_time = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ var _local1:Number; if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; _local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object; _local2 = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = (_arg1 - 250); }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Number; var _local3:Boolean; var _local4:Number; if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; _local1 = this.parent._mochiad_ctr; _local2 = (getTimer() - this.started); _local3 = false; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (_local2 > chk.ad_msec){ _local3 = true; }; if (_local3){ if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = this.fadeFunction; }; }; }; doOnEnterFrame(chk); } public static function _parseOptions(_arg1:Object, _arg2:Object):Object{ var _local3:Object; var _local4:String; var _local5:Array; var _local6:Number; var _local7:Array; _local3 = {}; for (_local4 in _arg2) { _local3[_local4] = _arg2[_local4]; }; if (_arg1){ for (_local4 in _arg1) { _local3[_local4] = _arg1[_local4]; }; }; if (_local3.clip == undefined){ throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite.")); }; _arg1 = _local3.clip.loaderInfo.parameters.mochiad_options; if (_arg1){ _local5 = _arg1.split("&"); _local6 = 0; while (_local6 < _local5.length) { _local7 = _local5[_local6].split("="); _local3[unescape(_local7[0])] = unescape(_local7[1]); _local6++; }; }; if (_local3.id == "test"){ trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!"); }; return (_local3); } public static function _cleanup(_arg1:Object):void{ var idx:Number; var k:String; var lc:LocalConnection; var f:Function; var mc = _arg1; if (("lc" in mc)){ lc = mc.lc; f = function ():void{ try { lc.client = null; lc.close(); } catch(e:Error) { }; }; setTimeout(f, 0); }; idx = DisplayObjectContainer(mc).numChildren; while (idx > 0) { idx = (idx - 1); DisplayObjectContainer(mc).removeChildAt(idx); }; for (k in mc) { delete mc[k]; }; } public static function load(_arg1:Object):MovieClip{ var DEFAULTS:Object; var clip:Object; var depth:Number; var mc:MovieClip; var wh:Array; var lv:URLVariables; var k:String; var server:String; var hostname:String; var lc:LocalConnection; var name:String; var loader:Loader; var g:Function; var req:URLRequest; var v:Object; var options = _arg1; DEFAULTS = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"}; options = MochiAd._parseOptions(options, DEFAULTS); options.swfv = 9; options.mav = MochiAd.getVersion(); clip = options.clip; if (!(clip is DisplayObject)){ trace("Warning: Object passed as container clip not a descendant of the DisplayObject type"); return (null); }; if (MovieClip(clip).stage == null){ trace("Warning: Container clip for ad is not attached to the stage"); return (null); }; if (!MochiAd._isNetworkAvailable()){ return (null); }; try { if (clip._mochiad_loaded){ return (null); }; } catch(e:Error) { throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic.")); }; depth = options.depth; delete options.depth; mc = createEmptyMovieClip(clip, "_mochiad", depth); wh = MochiAd._getRes(options, clip); options.res = ((wh[0] + "x") + wh[1]); options.server = (options.server + options.id); delete options.id; clip._mochiad_loaded = true; if (clip.loaderInfo.loaderURL.indexOf("http") == 0){ options.as3_swf = clip.loaderInfo.loaderURL; } else { trace("[MochiAd] NOTE: Security Sandbox Violation errors below are normal"); }; lv = new URLVariables(); for (k in options) { v = options[k]; if (!(v is Function)){ lv[k] = v; }; }; server = lv.server; delete lv.server; hostname = _allowDomains(server); lc = new LocalConnection(); lc.client = mc; name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_"); lc.allowDomain("*", "localhost"); lc.allowInsecureDomain("*", "localhost"); lc.connect(name); mc.lc = lc; mc.lcName = name; lv.lc = name; lv.st = getTimer(); loader = new Loader(); g = function (_arg1:Object):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); MochiAd.unload(clip); }; loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g); req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime())); req.contentType = "application/x-www-form-urlencoded"; req.method = URLRequestMethod.POST; req.data = lv; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:IOErrorEvent):void{ trace("[MochiAds] Blocked URL"); }); if (!options.skip){ loader.load(req); }; mc.addChild(loader); mc._mochiad_ctr = loader; return (mc); } public static function runMethod(_arg1:Object, _arg2:String, _arg3:Array):Object{ var _local4:Array; var _local5:Number; _local4 = _arg2.split("."); _local5 = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return (undefined); }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; if (typeof(_arg1[_local4[_local5]]) == "function"){ return (_arg1[_local4[_local5]].apply(_arg1, _arg3)); }; return (undefined); } public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{ var _local4:MovieClip; _local4 = new MovieClip(); if (((false) && (_arg3))){ _arg1.addChildAt(_local4, _arg3); } else { _arg1.addChild(_local4); }; _arg1[_arg2] = _local4; _local4["_name"] = _arg2; return (_local4); } public static function _getRes(_arg1:Object, _arg2:Object):Array{ var _local3:Object; var _local4:Number; var _local5:Number; var _local6:Array; _local3 = _arg2.getBounds(_arg2.root); _local4 = 0; _local5 = 0; if (typeof(_arg1.res) != "undefined"){ _local6 = _arg1.res.split("x"); _local4 = parseFloat(_local6[0]); _local5 = parseFloat(_local6[1]); } else { _local4 = (_local3.xMax - _local3.xMin); _local5 = (_local3.yMax - _local3.yMin); }; if ((((_local4 == 0)) || ((_local5 == 0)))){ _local4 = _arg2.stage.stageWidth; _local5 = _arg2.stage.stageHeight; }; return ([_local4, _local5]); } public static function adShowing(_arg1:Object):void{ _arg1.origFrameRate = _arg1.stage.frameRate; _arg1.stage.frameRate = 30; } public static function getValue(_arg1:Object, _arg2:String):Object{ var _local3:Array; var _local4:Number; _local3 = _arg2.split("."); _local4 = 0; while (_local4 < (_local3.length - 1)) { if ((((_arg1[_local3[_local4]] == undefined)) || ((_arg1[_local3[_local4]] == null)))){ return (undefined); }; _arg1 = _arg1[_local3[_local4]]; _local4++; }; return (_arg1[_local3[_local4]]); } public static function rpc(_arg1:Object, _arg2:Number, _arg3:Object):void{ var _local4:Object; var _local5:Object; switch (_arg3.id){ case "setValue": MochiAd.setValue(_arg1, _arg3.objectName, _arg3.value); break; case "getValue": _local4 = MochiAd.getValue(_arg1, _arg3.objectName); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local4); break; case "runMethod": _local5 = MochiAd.runMethod(_arg1, _arg3.method, _arg3.args); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local5); break; default: trace(("[mochiads rpc] unknown rpc id: " + _arg3.id)); }; } public static function setValue(_arg1:Object, _arg2:String, _arg3:Object):void{ var _local4:Array; var _local5:Number; _local4 = _arg2.split("."); _local5 = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return; }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; _arg1[_local4[_local5]] = _arg3; } public static function showPreGameAd(_arg1:Object):void{ var DEFAULTS:Object; var clip:Object; var ad_msec:Number; var ad_timeout:Number; var fadeout_time:Number; var mc:MovieClip; var wh:Array; var w:Number; var h:Number; var chk:MovieClip; var bar:MovieClip; var bar_w:Number; var bar_color:Number; var bar_background:Number; var bar_outline:Number; var backing_mc:MovieClip; var backing:Object; var inside_mc:MovieClip; var inside:Object; var outline_mc:MovieClip; var outline:Object; var complete:Boolean; var unloaded:Boolean; var progress:Number; var f:Function; var sendHostProgress:Boolean; var fn:Function; var r:MovieClip; var options = _arg1; DEFAULTS = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }, ad_progress:function (_arg1:Number):void{ }, progress_override:function (_arg1:Object):Number{ return (NaN); }, bar_offset:0}; options = MochiAd._parseOptions(options, DEFAULTS); if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){ options.ad_started(); fn = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); return; }; clip = options.clip; ad_msec = 11000; ad_timeout = options.ad_timeout; if (options.skip){ ad_timeout = 0; }; delete options.ad_timeout; fadeout_time = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ var fn:Function; MochiAd._cleanup(mc); fn = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); }; wh = MochiAd._getRes(options, clip); w = wh[0]; h = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.x = (w * -0.5); chk.y = (h * -0.5); bar = createEmptyMovieClip(chk, "_mochiad_bar", 4); if (options.no_progress_bar){ bar.visible = false; delete options.no_progress_bar; } else { bar.x = (10 + options.bar_offset); bar.y = (h - 20); }; bar_w = ((w - bar.x) - 10); bar_color = options.color; delete options.color; bar_background = options.background; delete options.background; bar_outline = options.outline; delete options.outline; backing_mc = createEmptyMovieClip(bar, "_outline", 1); backing = backing_mc.graphics; backing.beginFill(bar_background); backing.moveTo(0, 0); backing.lineTo(bar_w, 0); backing.lineTo(bar_w, 10); backing.lineTo(0, 10); backing.lineTo(0, 0); backing.endFill(); inside_mc = createEmptyMovieClip(bar, "_inside", 2); inside = inside_mc.graphics; inside.beginFill(bar_color); inside.moveTo(0, 0); inside.lineTo(bar_w, 0); inside.lineTo(bar_w, 10); inside.lineTo(0, 10); inside.lineTo(0, 0); inside.endFill(); inside_mc.scaleX = 0; outline_mc = createEmptyMovieClip(bar, "_outline", 3); outline = outline_mc.graphics; outline.lineStyle(0, bar_outline, 100); outline.moveTo(0, 0); outline.lineTo(bar_w, 0); outline.lineTo(bar_w, 10); outline.lineTo(0, 10); outline.lineTo(0, 0); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.last_pcnt = 0; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ var _local1:Number; _local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; complete = false; unloaded = false; progress = Math.min(1, options.progress_override(clip)); f = function (_arg1:Event):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); complete = true; if (unloaded){ MochiAd.unload(clip); }; }; if (!isNaN(progress)){ complete = (progress == 1); } else { if (clip.loaderInfo.bytesLoaded == clip.loaderInfo.bytesTotal){ complete = true; } else { if ((clip.root is MovieClip)){ r = (clip.root as MovieClip); if (r.framesLoaded >= r.totalFrames){ complete = true; } else { clip.loaderInfo.addEventListener(Event.COMPLETE, f); }; } else { clip.loaderInfo.addEventListener(Event.COMPLETE, f); }; }; }; mc.unloadAd = function ():void{ unloaded = true; if (complete){ MochiAd.unload(clip); }; }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object; _local2 = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = _arg1; }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; mc.rpcTestFn = function (_arg1:String):Object{ trace(("[MOCHIAD rpcTestFn] " + _arg1)); return (_arg1); }; mc.regContLC = function (_arg1:String):void{ mc._containerLCName = _arg1; }; sendHostProgress = false; mc.sendHostLoadProgress = function (_arg1:String):void{ sendHostProgress = true; }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Object; var _local3:Number; var _local4:Boolean; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Object; var _local11:Number; var _local12:Number; if (((!(this.parent)) || (!(this.parent.parent)))){ delete this["onEnterFrame"]; return; }; _local1 = this.parent.parent.root; _local2 = this.parent._mochiad_ctr; _local3 = (getTimer() - this.started); _local4 = false; _local5 = _local1.loaderInfo.bytesTotal; _local6 = _local1.loaderInfo.bytesLoaded; _local7 = Math.min(1, options.progress_override(_local1)); if (_local7 == 1){ complete = true; }; if (complete){ _local6 = Math.max(1, _local6); _local5 = _local6; }; _local8 = ((100 * _local6) / _local5); if (!isNaN(_local7)){ _local8 = (100 * _local7); }; _local9 = ((100 * _local3) / chk.ad_msec); _local10 = this._mochiad_bar._inside; _local11 = Math.min(100, Math.min(((_local8) || (0)), _local9)); _local11 = Math.max(this.last_pcnt, _local11); this.last_pcnt = _local11; _local10.scaleX = (_local11 * 0.01); options.ad_progress(_local11); if (sendHostProgress){ clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:_local8}); if (_local8 >= 100){ sendHostProgress = false; }; }; if (!chk.showing){ _local12 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local12 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if ((((_local3 > chk.ad_timeout)) && ((_local8 == 100)))){ options.ad_failed(); _local4 = true; }; }; }; if (_local3 > chk.ad_msec){ _local4 = true; }; if (((complete) && (_local4))){ if (unloaded){ MochiAd.unload(_local1); } else { if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = chk.fadeFunction; }; }; }; }; doOnEnterFrame(chk); } public static function showPreloaderAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0"); MochiAd.showPreGameAd(_arg1); } public static function showTimedAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0"); MochiAd.showInterLevelAd(_arg1); } public static function doOnEnterFrame(_arg1:MovieClip):void{ var f:Function; var mc = _arg1; f = function (_arg1:Object):void{ if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){ mc.onEnterFrame(); } else { _arg1.target.removeEventListener(_arg1.type, arguments.callee); }; }; mc.addEventListener(Event.ENTER_FRAME, f); } } }//package mochi.as3
Section 164
//MochiCoins (mochi.as3.MochiCoins) package mochi.as3 { public class MochiCoins { public static const STORE_HIDE:String = "StoreHide"; public static const NO_USER:String = "NoUser"; public static const IO_ERROR:String = "IOError"; public static const ITEM_NEW:String = "ItemNew"; public static const ITEM_OWNED:String = "ItemOwned"; public static const STORE_ITEMS:String = "StoreItems"; public static const ERROR:String = "Error"; public static const STORE_SHOW:String = "StoreShow"; public static var _inventory:MochiInventory; public static function triggerEvent(_arg1:String, _arg2:Object):void{ MochiSocial.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ MochiSocial.removeEventListener(_arg1, _arg2); } public static function addEventListener(_arg1:String, _arg2:Function):void{ MochiSocial.addEventListener(_arg1, _arg2); } public static function getStoreItems():void{ MochiServices.send("coins_getStoreItems"); } public static function get inventory():MochiInventory{ return (_inventory); } public static function showStore(_arg1:Object=null):void{ MochiServices.bringToTop(); MochiServices.send("coins_showStore", {options:_arg1}, null, null); } public static function showItem(_arg1:Object=null):void{ if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){ trace("ERROR: showItem call must pass an Object with an item key"); return; }; MochiServices.bringToTop(); MochiServices.send("coins_showItem", {options:_arg1}, null, null); } public static function getVersion():String{ return (MochiServices.getVersion()); } public static function showVideo(_arg1:Object=null):void{ if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){ trace("ERROR: showVideo call must pass an Object with an item key"); return; }; MochiServices.bringToTop(); MochiServices.send("coins_showVideo", {options:_arg1}, null, null); } MochiSocial.addEventListener(MochiSocial.LOGGED_IN, function (_arg1:Object):void{ _inventory = new MochiInventory(); }); MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, function (_arg1:Object):void{ _inventory = null; }); } }//package mochi.as3
Section 165
//MochiDigits (mochi.as3.MochiDigits) package mochi.as3 { public final class MochiDigits { private var Sibling:MochiDigits; private var Fragment:Number; private var Encoder:Number; public function MochiDigits(_arg1:Number=0, _arg2:uint=0):void{ Encoder = 0; setValue(_arg1, _arg2); } public function set value(_arg1:Number):void{ setValue(_arg1); } public function reencode():void{ var _local1:uint; _local1 = int((2147483647 * Math.random())); Fragment = (Fragment ^ (_local1 ^ Encoder)); Encoder = _local1; } public function toString():String{ var _local1:String; _local1 = String.fromCharCode((Fragment ^ Encoder)); if (Sibling != null){ _local1 = (_local1 + Sibling.toString()); }; return (_local1); } public function get value():Number{ return (Number(this.toString())); } public function setValue(_arg1:Number=0, _arg2:uint=0):void{ var _local3:String; _local3 = _arg1.toString(); var _temp1 = _arg2; _arg2 = (_arg2 + 1); Fragment = (_local3.charCodeAt(_temp1) ^ Encoder); if (_arg2 < _local3.length){ Sibling = new MochiDigits(_arg1, _arg2); } else { Sibling = null; }; reencode(); } public function addValue(_arg1:Number):void{ value = (value + _arg1); } } }//package mochi.as3
Section 166
//MochiEventDispatcher (mochi.as3.MochiEventDispatcher) package mochi.as3 { public class MochiEventDispatcher { private var eventTable:Object; public function MochiEventDispatcher():void{ eventTable = {}; } public function triggerEvent(_arg1:String, _arg2:Object):void{ var _local3:Object; if (eventTable[_arg1] == undefined){ return; }; for (_local3 in eventTable[_arg1]) { var _local6 = eventTable[_arg1]; _local6[_local3](_arg2); }; } public function removeEventListener(_arg1:String, _arg2:Function):void{ var _local3:Object; if (eventTable[_arg1] == undefined){ eventTable[_arg1] = []; return; }; for (_local3 in eventTable[_arg1]) { if (eventTable[_arg1][_local3] != _arg2){ } else { eventTable[_arg1].splice(Number(_local3), 1); }; }; } public function addEventListener(_arg1:String, _arg2:Function):void{ removeEventListener(_arg1, _arg2); eventTable[_arg1].push(_arg2); } } }//package mochi.as3
Section 167
//MochiEvents (mochi.as3.MochiEvents) package mochi.as3 { import flash.display.*; public class MochiEvents { public static const ALIGN_BOTTOM_LEFT:String = "ALIGN_BL"; public static const FORMAT_LONG:String = "LongForm"; public static const ALIGN_BOTTOM:String = "ALIGN_B"; public static const ACHIEVEMENT_RECEIVED:String = "AchievementReceived"; public static const FORMAT_SHORT:String = "ShortForm"; public static const ALIGN_TOP_RIGHT:String = "ALIGN_TR"; public static const ALIGN_BOTTOM_RIGHT:String = "ALIGN_BR"; public static const ALIGN_TOP:String = "ALIGN_T"; public static const ALIGN_LEFT:String = "ALIGN_L"; public static const ALIGN_RIGHT:String = "ALIGN_R"; public static const ALIGN_TOP_LEFT:String = "ALIGN_TL"; public static const ALIGN_CENTER:String = "ALIGN_C"; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); private static var gameStart:Number; private static var levelStart:Number; public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function startSession(_arg1:String):void{ MochiServices.send("events_beginSession", {achievementID:_arg1}, null, null); } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function setNotifications(_arg1:MovieClip, _arg2:Object):void{ var _local3:Object; var _local4:Object; _local3 = {}; for (_local4 in _arg2) { _local3[_local4] = _arg2[_local4]; }; _local3.clip = _arg1; MochiServices.send("events_setNotifications", _local3, null, null); } public static function endGame():void{ var _local1:Number; _local1 = (new Date().time - gameStart); trigger("end_game", {time:_local1}); } public static function startGame():void{ gameStart = new Date().time; trigger("start_game"); } public static function trigger(_arg1:String, _arg2:Object=null):void{ if (_arg2 == null){ _arg2 = {}; } else { if (_arg2["kind"] != undefined){ trace("WARNING: optional arguments package contains key 'id', it will be overwritten"); _arg2["kind"] = _arg1; }; }; MochiServices.send("events_triggerEvent", {eventObject:_arg2}, null, null); } public static function getVersion():String{ return (MochiServices.getVersion()); } public static function startLevel():void{ levelStart = new Date().time; trigger("start_level"); } public static function endLevel():void{ var _local1:Number; _local1 = (new Date().time - levelStart); trigger("end_level", {time:_local1}); } } }//package mochi.as3
Section 168
//MochiInventory (mochi.as3.MochiInventory) package mochi.as3 { import flash.events.*; import flash.utils.*; public dynamic class MochiInventory extends Proxy { private var _timer:Timer; private var _names:Array; private var _consumableProperties:Object; private var _syncID:Number; private var _storeSync:Object; private var _outstandingID:Number; private var _syncPending:Boolean; public static const READY:String = "InvReady"; public static const ERROR:String = "Error"; public static const IO_ERROR:String = "IoError"; private static const KEY_SALT:String = " syncMaint"; public static const WRITTEN:String = "InvWritten"; public static const NOT_READY:String = "InvNotReady"; public static const VALUE_ERROR:String = "InvValueError"; private static const CONSUMER_KEY:String = "MochiConsumables"; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public function MochiInventory():void{ MochiCoins.addEventListener(MochiCoins.ITEM_OWNED, itemOwned); MochiCoins.addEventListener(MochiCoins.ITEM_NEW, newItems); MochiSocial.addEventListener(MochiSocial.LOGGED_IN, loggedIn); MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, loggedOut); _storeSync = new Object(); _syncPending = false; _outstandingID = 0; _syncID = 0; _timer = new Timer(1000); _timer.addEventListener(TimerEvent.TIMER, sync); _timer.start(); if (MochiSocial.loggedIn){ loggedIn(); } else { loggedOut(); }; } private function newItems(_arg1:Object):void{ if (!this[(_arg1.id + KEY_SALT)]){ this[(_arg1.id + KEY_SALT)] = 0; }; if (!this[_arg1.id]){ this[_arg1.id] = 0; }; this[(_arg1.id + KEY_SALT)] = (this[(_arg1.id + KEY_SALT)] + _arg1.count); this[_arg1.id] = (this[_arg1.id] + _arg1.count); if (_arg1.privateProperties.consumable){ if (!this[_arg1.privateProperties.tag]){ this[_arg1.privateProperties.tag] = 0; }; this[_arg1.privateProperties.tag] = (this[_arg1.privateProperties.tag] + (_arg1.privateProperties.inc * _arg1.count)); }; } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(_arg1){ if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return (-1); }; if (_consumableProperties[_arg1]){ return (MochiDigits(_consumableProperties[_arg1]).value); }; return (undefined); } public function release():void{ MochiCoins.removeEventListener(MochiCoins.ITEM_NEW, newItems); MochiSocial.removeEventListener(MochiSocial.LOGGED_IN, loggedIn); MochiSocial.removeEventListener(MochiSocial.LOGGED_OUT, loggedOut); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function hasProperty(_arg1):Boolean{ if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return (false); }; if (_consumableProperties[_arg1] == undefined){ return (false); }; return (true); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextNameIndex(_arg1:int):int{ return (((_arg1)>=_names.length) ? 0 : (_arg1 + 1)); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(_arg1, _arg2):void{ var _local3:MochiDigits; if (_consumableProperties == null){ triggerEvent(ERROR, {type:NOT_READY}); return; }; if (!(_arg2 is Number)){ triggerEvent(ERROR, {type:VALUE_ERROR, error:"Invalid type", arg:_arg2}); return; }; if (_consumableProperties[_arg1]){ _local3 = MochiDigits(_consumableProperties[_arg1]); if (_local3.value == _arg2){ return; }; _local3.value = _arg2; } else { _names.push(_arg1); _consumableProperties[_arg1] = new MochiDigits(_arg2); }; _syncID++; } private function sync(_arg1:Event=null):void{ var _local2:Object; var _local3:String; if (((_syncPending) || ((_syncID == _outstandingID)))){ return; }; _outstandingID = _syncID; _local2 = {}; for (_local3 in _consumableProperties) { _local2[_local3] = MochiDigits(_consumableProperties[_local3]).value; }; MochiUserData.put(CONSUMER_KEY, _local2, putConsumableBag); _syncPending = true; } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextName(_arg1:int):String{ return (_names[(_arg1 - 1)]); } private function loggedIn(_arg1:Object=null):void{ MochiUserData.get(CONSUMER_KEY, getConsumableBag); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function deleteProperty(_arg1):Boolean{ if (!_consumableProperties[_arg1]){ return (false); }; _names.splice(_names.indexOf(_arg1), 1); delete _consumableProperties[_arg1]; return (true); } private function itemOwned(_arg1:Object):void{ _storeSync[_arg1.id] = {properties:_arg1.properties, count:_arg1.count}; } private function putConsumableBag(_arg1:MochiUserData):void{ _syncPending = false; if (_arg1.error){ triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error}); _outstandingID = -1; }; triggerEvent(WRITTEN, {}); } private function getConsumableBag(_arg1:MochiUserData):void{ var _local2:String; var _local3:Number; if (_arg1.error){ triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error}); return; }; _consumableProperties = {}; _names = new Array(); if (_arg1.data){ for (_local2 in _arg1.data) { _names.push(_local2); _consumableProperties[_local2] = new MochiDigits(_arg1.data[_local2]); }; }; for (_local2 in _storeSync) { _local3 = _storeSync[_local2].count; if (_consumableProperties[(_local2 + KEY_SALT)]){ _local3 = (_local3 - _consumableProperties[_local2]); }; if (_local3 == 0){ } else { newItems({id:_local2, count:_local3, properties:_storeSync[_local2].properties}); }; }; triggerEvent(READY, {}); } private function loggedOut(_arg1:Object=null):void{ _consumableProperties = null; } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } } }//package mochi.as3
Section 169
//MochiServices (mochi.as3.MochiServices) package mochi.as3 { import flash.geom.*; import flash.display.*; import flash.events.*; import flash.utils.*; import flash.net.*; import flash.system.*; public class MochiServices { private static var _container:Object; private static var _connected:Boolean = false; private static var _swfVersion:String; private static var _preserved:Object; public static var netupAttempted:Boolean = false; private static var _sendChannel:LocalConnection; public static var servicesSync:MochiSync = new MochiSync(); private static var _clip:MovieClip; private static var _id:String; private static var _services:String = "services.swf"; private static var _servURL:String = "http://www.mochiads.com/static/lib/services/"; public static var widget:Boolean = false; private static var _timer:Timer; private static var _sendChannelName:String; private static var _loader:Loader; private static var _connecting:Boolean = false; private static var _mochiLocalConnection:MovieClip; private static var _listenChannelName:String = "__ms_"; public static var onError:Object; public static var netup:Boolean = true; private static var _mochiLC:String = "MochiLC.swf"; public static function isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } public static function get connected():Boolean{ return (_connected); } private static function onReceive(_arg1:Object):void{ var cb:String; var cblst:Object; var method:*; var methodName:String; var obj:Object; var pkg = _arg1; cb = pkg.callbackID; cblst = _clip._callbacks[cb]; if (!cblst){ return; }; method = cblst.callbackMethod; methodName = ""; obj = cblst.callbackObject; if (((obj) && ((typeof(method) == "string")))){ methodName = method; if (obj[method] != null){ method = obj[method]; } else { trace((("Error: Method " + method) + " does not exist.")); }; }; if (method != undefined){ try { method.apply(obj, pkg.args); } catch(error:Error) { trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString())); }; } else { if (obj != null){ try { obj(pkg.args); } catch(error:Error) { trace(("Error invoking method on object: " + error.toString())); }; }; }; delete _clip._callbacks[cb]; } public static function get childClip():Object{ return (_clip); } public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{ if (_connected){ _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID}); } else { if ((((_clip == null)) || (!(_connecting)))){ trace(("Error: MochiServices not connected. Please call MochiServices.connect(). Function: " + _arg1)); handleError(_arg2, _arg3, _arg4); flush(true); return; }; _clip._queue.push({methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID}); }; if (_clip != null){ if (((!((_clip._callbacks == null))) && (!((_clip._nextcallbackID == null))))){ _clip._callbacks[_clip._nextcallbackID] = {callbackObject:_arg3, callbackMethod:_arg4}; _clip._nextcallbackID++; }; }; } private static function init(_arg1:String, _arg2:Object):void{ _id = _arg1; if (_arg2 != null){ _container = _arg2; loadCommunicator(_arg1, _container); }; } private static function clickMovie(_arg1:String, _arg2:Function):MovieClip{ var _local3:Array; var _local4:int; var _local5:Array; var _local6:Array; var _local7:MovieClip; var _local8:LocalConnection; var _local9:String; var _local10:ByteArray; var _local11:ByteArray; var _local12:uint; var _local13:uint; var _local14:Loader; _local3 = [150, 21, 0, 7, 1, 0, 0, 0, 0, 98, 116, 110, 0, 7, 2, 0, 0, 0, 0, 116, 104, 105, 115, 0, 28, 150, 22, 0, 0, 99, 114, 101, 97, 116, 101, 69, 109, 112, 116, 121, 77, 111, 118, 105, 101, 67, 108, 105, 112, 0, 82, 135, 1, 0, 0, 23, 150, 13, 0, 4, 0, 0, 111, 110, 82, 101, 108, 101, 97, 115, 101, 0, 142, 8, 0, 0, 0, 0, 2, 42, 0, 114, 0, 150, 17, 0, 0, 32, 0, 7, 1, 0, 0, 0, 8, 0, 0, 115, 112, 108, 105, 116, 0, 82, 135, 1, 0, 1, 23, 150, 7, 0, 4, 1, 7, 0, 0, 0, 0, 78, 150, 8, 0, 0, 95, 98, 108, 97, 110, 107, 0, 154, 1, 0, 0, 150, 7, 0, 0, 99, 108, 105, 99, 107, 0, 150, 7, 0, 4, 1, 7, 1, 0, 0, 0, 78, 150, 27, 0, 7, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 76, 111, 99, 97, 108, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 0, 64, 150, 6, 0, 0, 115, 101, 110, 100, 0, 82, 79, 150, 15, 0, 4, 0, 0, 95, 97, 108, 112, 104, 97, 0, 7, 0, 0, 0, 0, 79, 150, 23, 0, 7, 0xFF, 0, 0xFF, 0, 7, 1, 0, 0, 0, 4, 0, 0, 98, 101, 103, 105, 110, 70, 105, 108, 108, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 109, 111, 118, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 16, 0, 7, 0, 0, 0, 0, 4, 0, 0, 101, 110, 100, 70, 105, 108, 108, 0, 82, 23]; _local5 = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3]; _local6 = [0, 64, 0, 0, 0]; _local7 = new MovieClip(); _local8 = new LocalConnection(); _local9 = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().time)); _local8 = new LocalConnection(); _local7.lc = _local8; _local7.click = _arg2; _local8.client = _local7; _local8.connect(_local9); _local10 = new ByteArray(); _local11 = new ByteArray(); _local11.endian = Endian.LITTLE_ENDIAN; _local11.writeShort(1); _local11.writeUTFBytes(((_arg1 + " ") + _local9)); _local11.writeByte(0); _local12 = ((_local3.length + _local11.length) + 4); _local13 = (_local12 + 35); _local10.endian = Endian.LITTLE_ENDIAN; _local10.writeUTFBytes("FWS"); _local10.writeByte(8); _local10.writeUnsignedInt(_local13); for each (_local4 in _local5) { _local10.writeByte(_local4); }; _local10.writeUnsignedInt(_local12); _local10.writeByte(136); _local10.writeShort(_local11.length); _local10.writeBytes(_local11); for each (_local4 in _local3) { _local10.writeByte(_local4); }; for each (_local4 in _local6) { _local10.writeByte(_local4); }; _local14 = new Loader(); _local14.loadBytes(_local10); _local7.addChild(_local14); return (_local7); } public static function stayOnTop():void{ _container.addEventListener(Event.ENTER_FRAME, MochiServices.bringToTop, false, 0, true); if (_clip != null){ _clip.visible = true; }; } public static function addLinkEvent(_arg1:String, _arg2:String, _arg3:DisplayObjectContainer, _arg4:Function=null):void{ var vars:Object; var avm1Click:DisplayObject; var s:String; var i:Number; var x:String; var req:URLRequest; var loader:Loader; var setURL:Function; var err:Function; var complete:Function; var url = _arg1; var burl = _arg2; var btn = _arg3; var onClick = _arg4; vars = new Object(); vars["mav"] = getVersion(); vars["swfv"] = "9"; vars["swfurl"] = btn.loaderInfo.loaderURL; vars["fv"] = Capabilities.version; vars["os"] = Capabilities.os; vars["lang"] = Capabilities.language; vars["scres"] = ((Capabilities.screenResolutionX + "x") + Capabilities.screenResolutionY); s = "?"; i = 0; for (x in vars) { if (i != 0){ s = (s + "&"); }; i = (i + 1); s = (((s + x) + "=") + escape(vars[x])); }; req = new URLRequest("http://x.mochiads.com/linkping.swf"); loader = new Loader(); setURL = function (_arg1:String):void{ var _local2:Rectangle; if (avm1Click){ btn.removeChild(avm1Click); }; avm1Click = clickMovie(_arg1, onClick); _local2 = btn.getBounds(btn); btn.addChild(avm1Click); avm1Click.x = _local2.x; avm1Click.y = _local2.y; avm1Click.scaleX = (0.01 * _local2.width); avm1Click.scaleY = (0.01 * _local2.height); }; err = function (_arg1:Object):void{ netup = false; _arg1.target.removeEventListener(_arg1.type, arguments.callee); setURL(burl); }; complete = function (_arg1:Object):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); }; if (netup){ setURL((url + s)); } else { setURL(burl); }; if (!((netupAttempted) || (_connected))){ netupAttempted = true; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, err); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete); loader.load(req); }; } public static function warnID(_arg1:String, _arg2:Boolean):void{ var _local3:Number; _arg1 = _arg1.toLowerCase(); if (_arg1.length != 16){ trace((("WARNING: " + (_arg2) ? "board" : "game") + " ID is not the appropriate length")); return; } else { if (_arg1 == "1e113c7239048b3f"){ if (_arg2){ trace("WARNING: Using testing board ID"); } else { trace("WARNING: Using testing board ID as game ID"); }; return; } else { if (_arg1 == "84993a1de4031cd8"){ if (_arg2){ trace("WARNING: Using testing game ID as board ID"); } else { trace("WARNING: Using testing game ID"); }; return; }; }; }; _local3 = 0; while (_local3 < _arg1.length) { switch (_arg1.charAt(_local3)){ case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "a": case "b": case "c": case "d": case "e": case "f": break; default: trace(("WARNING: Board ID contains illegal characters: " + _arg1)); return; }; _local3++; }; } public static function disconnect():void{ if (((_connected) || (_connecting))){ if (_clip != null){ if (_clip.parent != null){ if ((_clip.parent is Sprite)){ Sprite(_clip.parent).removeChild(_clip); _clip = null; }; }; }; _connecting = (_connected = false); flush(true); try { _mochiLocalConnection.close(); } catch(error:Error) { }; }; if (_timer != null){ try { _timer.stop(); } catch(error:Error) { }; }; } public static function allowDomains(_arg1:String):String{ var _local2:String; if (Security.sandboxType != "application"){ Security.allowDomain("*"); Security.allowInsecureDomain("*"); }; if (_arg1.indexOf("http://") != -1){ _local2 = _arg1.split("/")[2].split(":")[0]; if (Security.sandboxType != "application"){ Security.allowDomain(_local2); Security.allowInsecureDomain(_local2); }; }; return (_local2); } public static function getVersion():String{ return ("3.7 as3"); } public static function doClose():void{ _container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop); } private static function flush(_arg1:Boolean):void{ var _local2:Object; var _local3:Object; if (((_clip) && (_clip._queue))){ while (_clip._queue.length > 0) { _local2 = _clip._queue.shift(); _local3 = null; if (_local2 != null){ if (_local2.callbackID != null){ _local3 = _clip._callbacks[_local2.callbackID]; }; delete _clip._callbacks[_local2.callbackID]; if (((_arg1) && (!((_local3 == null))))){ handleError(_local2.args, _local3.callbackObject, _local3.callbackMethod); }; }; }; }; } public static function get id():String{ return (_id); } private static function onEvent(_arg1:Object):void{ var _local2:String; var _local3:String; _local2 = _arg1.target; _local3 = _arg1.event; switch (_local2){ case "events": MochiEvents.triggerEvent(_arg1.event, _arg1.args); break; case "coins": MochiCoins.triggerEvent(_arg1.event, _arg1.args); break; case "sync": servicesSync.triggerEvent(_arg1.event, _arg1.args); break; }; } private static function urlOptions(_arg1:Object):Object{ var _local2:Object; var _local3:String; var _local4:Array; var _local5:Number; var _local6:Array; _local2 = {}; if (_arg1.stage){ _local3 = _arg1.stage.loaderInfo.parameters.mochiad_options; } else { _local3 = _arg1.loaderInfo.parameters.mochiad_options; }; if (_local3){ _local4 = _local3.split("&"); _local5 = 0; while (_local5 < _local4.length) { _local6 = _local4[_local5].split("="); _local2[unescape(_local6[0])] = unescape(_local6[1]); _local5++; }; }; return (_local2); } public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{ if (_arg1 != null){ if ((_arg1 is Sprite)){ _container = _arg1; }; }; if (_arg2){ if ((_container is Sprite)){ Sprite(_container).addChild(_clip); }; }; } private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{ var args = _arg1; var callbackObject = _arg2; var callbackMethod = _arg3; if (args != null){ if (args.onError != null){ args.onError.apply(null, ["NotConnected"]); }; if (((!((args.options == null))) && (!((args.options.onError == null))))){ args.options.onError.apply(null, ["NotConnected"]); }; }; if (callbackMethod != null){ args = {}; args.error = true; args.errorCode = "NotConnected"; if (((!((callbackObject == null))) && ((callbackMethod is String)))){ try { var _local5 = callbackObject; _local5[callbackMethod](args); } catch(error:Error) { }; } else { if (callbackMethod != null){ try { callbackMethod.apply(args); } catch(error:Error) { }; }; }; }; } private static function loadError(_arg1:Object):void{ _clip._mochiad_ctr_failed = true; trace("MochiServices could not load."); MochiServices.disconnect(); MochiServices.onError("IOError"); } private static function initComChannels():void{ if (!_connected){ trace("[SERVICES_API] connected!"); _connecting = false; _connected = true; _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"}); _mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"registerGame", preserved:_preserved, id:_id, version:getVersion(), parentURL:_container.loaderInfo.loaderURL}); _clip.onReceive = onReceive; _clip.onEvent = onEvent; _clip.onError = function ():void{ MochiServices.onError("IOError"); }; while (_clip._queue.length > 0) { _mochiLocalConnection.send(_sendChannelName, "onReceive", _clip._queue.shift()); }; }; } private static function loadLCBridge(_arg1:Object):void{ var loader:Loader; var mochiLCURL:String; var req:URLRequest; var complete:Function; var clip = _arg1; loader = new Loader(); mochiLCURL = (_servURL + _mochiLC); req = new URLRequest(mochiLCURL); complete = function (_arg1:Object):void{ _mochiLocalConnection = MovieClip(loader.content); listen(); }; loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError); loader.load(req); clip.addChild(loader); } private static function listen():void{ _mochiLocalConnection.connect(_listenChannelName); _clip.handshake = function (_arg1:Object):void{ MochiServices.comChannelName = _arg1.newChannel; }; trace("Waiting for MochiAds services to connect..."); } public static function get clip():Object{ return (_container); } public static function set comChannelName(_arg1:String):void{ if (_arg1 != null){ if (_arg1.length > 3){ _sendChannelName = (_arg1 + "_fromgame"); initComChannels(); }; }; } private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{ var _local3:String; var _local4:String; var _local5:URLRequest; var _local6:URLVariables; _local3 = ("_mochiservices_com_" + _arg1); if (_clip != null){ return (_clip); }; if (!MochiServices.isNetworkAvailable()){ return (null); }; if (urlOptions(_arg2).servURL){ _servURL = urlOptions(_arg2).servURL; }; _local4 = (_servURL + _services); if (urlOptions(_arg2).servicesURL){ _local4 = urlOptions(_arg2).servicesURL; }; _listenChannelName = (_listenChannelName + ((Math.floor(new Date().time) + "_") + Math.floor((Math.random() * 99999)))); MochiServices.allowDomains(_local4); _clip = createEmptyMovieClip(_arg2, _local3, 10336, false); loadLCBridge(_clip); _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError); _local5 = new URLRequest(_local4); _local6 = new URLVariables(); _local6.listenLC = _listenChannelName; _local6.mochiad_options = _arg2.loaderInfo.parameters.mochiad_options; _local6.api_version = getVersion(); if (widget){ _local6.widget = true; }; _local5.data = _local6; _loader.load(_local5); _clip.addChild(_loader); _clip._mochiservices_com = _loader; _sendChannel = new LocalConnection(); _clip._queue = []; _clip._nextcallbackID = 0; _clip._callbacks = {}; _timer = new Timer(10000, 1); _timer.addEventListener(TimerEvent.TIMER, connectWait); _timer.start(); return (_clip); } public static function connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{ var id = _arg1; var clip = _arg2; var onError = _arg3; warnID(id, false); if ((clip is DisplayObject)){ if (clip.stage == null){ trace("MochiServices connect requires the containing clip be attached to the stage"); }; if (((!(_connected)) && ((_clip == null)))){ trace("MochiServices Connecting..."); _connecting = true; init(id, clip); }; } else { trace("Error, MochiServices requires a Sprite, Movieclip or instance of the stage."); }; if (onError != null){ MochiServices.onError = onError; } else { if (MochiServices.onError == null){ MochiServices.onError = function (_arg1:String):void{ trace(_arg1); }; }; }; } public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Boolean=true):MovieClip{ var mc:MovieClip; var parent = _arg1; var name = _arg2; var depth = _arg3; var doAdd = _arg4; mc = new MovieClip(); if (doAdd){ if (((false) && (depth))){ parent.addChildAt(mc, depth); } else { parent.addChild(mc); }; }; try { parent[name] = mc; } catch(e:Error) { throw (new Error("MochiServices requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic.")); }; mc["_name"] = name; return (mc); } public static function bringToTop(_arg1:Event=null):void{ var e = _arg1; if (((!((MochiServices.clip == null))) && (!((MochiServices.childClip == null))))){ try { if (MochiServices.clip.numChildren > 1){ MochiServices.clip.setChildIndex(MochiServices.childClip, (MochiServices.clip.numChildren - 1)); }; } catch(errorObject:Error) { trace("Warning: Depth sort error."); _container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop); }; }; } public static function connectWait(_arg1:TimerEvent):void{ if (!_connected){ _clip._mochiad_ctr_failed = true; trace("MochiServices could not load. (timeout)"); MochiServices.disconnect(); MochiServices.onError("IOError"); }; } } }//package mochi.as3
Section 170
//MochiSocial (mochi.as3.MochiSocial) package mochi.as3 { public class MochiSocial { public static const LOGGED_IN:String = "LoggedIn"; public static const PROFILE_HIDE:String = "ProfileHide"; public static const NO_USER:String = "NoUser"; public static const PROPERTIES_SIZE:String = "PropertiesSize"; public static const IO_ERROR:String = "IOError"; public static const PROPERTIES_SAVED:String = "PropertySaved"; public static const WIDGET_LOADED:String = "WidgetLoaded"; public static const USER_INFO:String = "UserInfo"; public static const ERROR:String = "Error"; public static const LOGIN_SHOW:String = "LoginShow"; public static const LOGGED_OUT:String = "LoggedOut"; public static const PROFILE_SHOW:String = "ProfileShow"; public static const LOGIN_SHOWN:String = "LoginShown"; public static const LOGIN_HIDE:String = "LoginHide"; private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher(); public static var _user_info:Object = null; public static function getVersion():String{ return (MochiServices.getVersion()); } public static function saveUserProperties(_arg1:Object):void{ MochiServices.send("coins_saveUserProperties", _arg1); } public static function get loggedIn():Boolean{ return (!((_user_info == null))); } public static function triggerEvent(_arg1:String, _arg2:Object):void{ _dispatcher.triggerEvent(_arg1, _arg2); } public static function addEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.addEventListener(_arg1, _arg2); } public static function getUserInfo():void{ MochiServices.send("coins_getUserInfo"); } public static function showLoginWidget(_arg1:Object=null):void{ MochiServices.setContainer(); MochiServices.bringToTop(); MochiServices.send("coins_showLoginWidget", {options:_arg1}); } public static function removeEventListener(_arg1:String, _arg2:Function):void{ _dispatcher.removeEventListener(_arg1, _arg2); } public static function requestLogin():void{ MochiServices.send("coins_requestLogin"); } public static function getAPIURL():String{ if (!_user_info){ return (null); }; return (_user_info.api_url); } public static function hideLoginWidget():void{ MochiServices.send("coins_hideLoginWidget"); } public static function getAPIToken():String{ if (!_user_info){ return (null); }; return (_user_info.api_token); } MochiSocial.addEventListener(MochiSocial.LOGGED_IN, function (_arg1:Object):void{ _user_info = _arg1; }); MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, function (_arg1:Object):void{ _user_info = null; }); } }//package mochi.as3
Section 171
//MochiSync (mochi.as3.MochiSync) package mochi.as3 { import flash.utils.*; public dynamic class MochiSync extends Proxy { private var _syncContainer:Object; public static var SYNC_PROPERTY:String = "UpdateProperty"; public static var SYNC_REQUEST:String = "SyncRequest"; public function MochiSync():void{ _syncContainer = {}; } public function triggerEvent(_arg1:String, _arg2:Object):void{ switch (_arg1){ case SYNC_REQUEST: MochiServices.send("sync_syncronize", _syncContainer); break; case SYNC_PROPERTY: _syncContainer[_arg2.name] = _arg2.value; break; }; } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(_arg1){ return (_syncContainer[_arg1]); } override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(_arg1, _arg2):void{ var _local3:String; if (_syncContainer[_arg1] == _arg2){ return; }; _local3 = _arg1.toString(); _syncContainer[_local3] = _arg2; MochiServices.send("sync_propUpdate", {name:_local3, value:_arg2}); } } }//package mochi.as3
Section 172
//MochiUserData (mochi.as3.MochiUserData) package mochi.as3 { import flash.events.*; import flash.utils.*; import flash.net.*; public class MochiUserData extends EventDispatcher { public var callback:Function;// = null public var error:Event;// = null public var key:String;// = null public var operation:String;// = null public var data;// = null public var _loader:URLLoader; public function MochiUserData(_arg1:String="", _arg2:Function=null){ key = null; data = null; error = null; operation = null; callback = null; super(); this.key = _arg1; this.callback = _arg2; } public function securityErrorHandler(_arg1:SecurityErrorEvent):void{ errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + _arg1.toString()))); } public function putEvent(_arg1):void{ request("put", serialize(_arg1)); } public function request(_arg1:String, _arg2:ByteArray):void{ var api_url:String; var api_token:String; var args:URLVariables; var req:URLRequest; var _operation = _arg1; var _data = _arg2; operation = _operation; api_url = MochiSocial.getAPIURL(); api_token = MochiSocial.getAPIToken(); if ((((api_url == null)) || ((api_token == null)))){ errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, "not logged in")); return; }; _loader = new URLLoader(); args = new URLVariables(); args.op = _operation; args.key = key; req = new URLRequest((((MochiSocial.getAPIURL() + "/") + "MochiUserData?") + args.toString())); req.method = URLRequestMethod.POST; req.contentType = "application/x-mochi-userdata"; req.requestHeaders = [new URLRequestHeader("x-mochi-services-version", MochiServices.getVersion()), new URLRequestHeader("x-mochi-api-token", api_token)]; req.data = _data; _loader.dataFormat = URLLoaderDataFormat.BINARY; _loader.addEventListener(Event.COMPLETE, completeHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); try { _loader.load(req); } catch(e:SecurityError) { errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + e.toString()))); }; } public function completeHandler(_arg1:Event):void{ var event = _arg1; try { if (_loader.data.length){ data = deserialize(_loader.data); } else { data = null; }; } catch(e:Error) { errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("deserialize error: " + e.toString()))); return; }; if (callback != null){ performCallback(); } else { dispatchEvent(event); }; close(); } public function performCallback():void{ try { callback(this); } catch(e:Error) { trace(("[MochiUserData] exception during callback: " + e)); }; } public function serialize(_arg1):ByteArray{ var _local2:ByteArray; _local2 = new ByteArray(); _local2.objectEncoding = ObjectEncoding.AMF3; _local2.writeObject(_arg1); _local2.compress(); return (_local2); } public function errorHandler(_arg1:IOErrorEvent):void{ data = null; error = _arg1; if (callback != null){ performCallback(); } else { dispatchEvent(_arg1); }; close(); } public function getEvent():void{ request("get", serialize(null)); } override public function toString():String{ return ((((((((("[MochiUserData operation=" + operation) + " key=\"") + key) + "\" data=") + data) + " error=\"") + error) + "\"]")); } public function close():void{ if (_loader){ _loader.removeEventListener(Event.COMPLETE, completeHandler); _loader.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler); _loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); _loader.close(); _loader = null; }; error = null; callback = null; } public function deserialize(_arg1:ByteArray){ _arg1.objectEncoding = ObjectEncoding.AMF3; _arg1.uncompress(); return (_arg1.readObject()); } public static function get(_arg1:String, _arg2:Function):void{ var _local3:MochiUserData; _local3 = new MochiUserData(_arg1, _arg2); _local3.getEvent(); } public static function put(_arg1:String, _arg2, _arg3:Function):void{ var _local4:MochiUserData; _local4 = new MochiUserData(_arg1, _arg3); _local4.putEvent(_arg2); } } }//package mochi.as3
Section 173
//Application (Application) package { import away3d.primitives.*; import flash.display.*; import flash.events.*; import away3d.containers.*; import away3d.cameras.*; import away3d.primitives.data.*; import away3d.materials.*; import away3d.core.render.*; import flash.utils.*; import mochi.as3.*; import away3d.events.*; import flash.net.*; import flash.text.*; import flash.media.*; import away3d.core.filter.*; import fl.transitions.easing.*; public class Application extends MovieClip { private var rotationIndex:Number;// = 0 private var lastTiltAngle:Number; public var startView:StartViewMc; private var cubePressed:Boolean;// = false private var rotationQueue:Array; private var delMouseX:Number; private var delMouseY:Number; private var center:Number;// = 0 public var timeTxt:TextField; private var rotationInterval:Number;// = 0 private var scene:Scene3D; private var lastMouseY:Number; public var nextLevelView:NextLevelViewMc; private var lastMouseX:Number; public var shuffleBtn:SimpleButton; private var view:View3D; private var centerExtremum:Number;// = 0 public var cubeDimension:Number;// = 0 private var cubesArr:Array; public var vscroll:VScroll; private var renderer:BasicRenderer; private var currentAngle:Number;// = 0 public var back:MovieClip; private var lastPanAngle:Number; public var stopBtn:SimpleButton; private var camera:HoverCamera3D; private var curTime:Number;// = 0 public var hscroll:HScroll; private var cubesObj:Object; private var cubesSpan:Number;// = 2 private var cubeSideSize:Number;// = 0 private var maxCubeSize:Number;// = 150 private var timeTimerInterval:Number;// = 0 private var stepAngle:Number;// = 5 private var gameStopped:Boolean;// = false private var timerStarted:Boolean;// = false public var saveBtn:SimpleButton; private var minMouseDel:Number;// = 100 private var lastPart:Number; public var instructions:InstructionsMc; public var muteUnmute:MovieClip; private var posExtremum:Number;// = 0 private var lastCubePressed:Cube; private var cubRots:Array; private var lst:Number;// = 0 private var move:Boolean;// = false public var loadGame:LoadGame; private var rotationAngle:Number; public static var app:Application; public static var isSoundOn:Boolean = true; private static var levelSound:Sound = null; private static var mainSoundChannel:SoundChannel = null; private static var _rotationSoundChannel:SoundChannel = null; private static var _rotationSound:Sound = null; public static var soundVol:Number = 1; private static var mainSound:Sound = null; public function Application(){ maxCubeSize = 150; cubeSideSize = 0; cubeDimension = 0; cubesSpan = 2; posExtremum = 0; centerExtremum = 0; center = 0; lst = 0; move = false; cubePressed = false; minMouseDel = 100; rotationInterval = 0; currentAngle = 0; stepAngle = 5; rotationIndex = 0; timerStarted = false; timeTimerInterval = 0; curTime = 0; gameStopped = false; super(); app = this; stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.EXACT_FIT; cubesArr = new Array(); cubesObj = new Object(); rotationQueue = new Array(); initEngine(); initListeners(); camera.hover(); view.render(); hscroll.visible = false; vscroll.visible = false; timeTxt.visible = false; stopBtn.visible = false; shuffleBtn.visible = false; saveBtn.visible = false; muteUnmute.visible = false; stopBtn.addEventListener(MouseEvent.CLICK, stopBtnClickHandler); shuffleBtn.addEventListener(MouseEvent.CLICK, shuffleBtnClickHandler); saveBtn.addEventListener(MouseEvent.CLICK, saveBtnClickHandler); mainSound = new MainSound(); levelSound = new LevelSound(); soundOn(); MochiAd.showPreGameAd({clip:startView, id:"51c1df8a6e4df379", res:"600x500", background:0xD5AA00, color:26367, outline:0xB30000, no_bg:false}); } public function showMenu():void{ removeCube(); startView.x = 0; startView.y = 0; hscroll.visible = false; vscroll.visible = false; timeTxt.visible = false; stopBtn.visible = false; shuffleBtn.visible = false; saveBtn.visible = false; muteUnmute.visible = false; } private function enterFrameHandler(_arg1:Event=null):void{ if (((!(cubePressed)) && (move))){ camera.targetpanangle = ((0.5 * (back.mouseX - lastMouseX)) + lastPanAngle); camera.targettiltangle = ((0.5 * (back.mouseY - lastMouseY)) + lastTiltAngle); if (camera.targetpanangle > 0){ rotationIndex = Math.floor(((camera.targetpanangle + 180) / 360)); } else { rotationIndex = Math.ceil(((camera.targetpanangle - 180) / 360)); }; hscroll.percent = ((camera.targetpanangle % 360) / 360); vscroll.percent = (Math.min(Math.max(camera.targettiltangle, -90), 90) / 180); }; camera.hover(); view.render(); } private function cubePropsArr():Array{ var _local1:Array; var _local2:Number; _local1 = new Array(); _local2 = 0; while (_local2 < cubesArr.length) { _local1.push(getCubePropsByCube(cubesArr[_local2])); _local2++; }; return (_local1); } private function startTimeTimer():void{ timeTimerInterval = setInterval(timeTimer, 10); } private function stageCubeMouseUpHandler(_arg1:MouseEvent=null):void{ removeEventListener(MouseEvent.MOUSE_MOVE, stageCubeMouseMoveHandler); removeEventListener(MouseEvent.MOUSE_UP, stageCubeMouseUpHandler); } public function changeCamX(_arg1:Number):void{ var _local2:Number; _local2 = ((_arg1 - 0.5) * 360); camera.targetpanangle = ((360 * rotationIndex) + _local2); } public function changeCamY(_arg1:Number):void{ var _local2:Number; _local2 = ((_arg1 - 0.5) * 180); camera.targettiltangle = _local2; } private function getRandomRotation():Object{ var _local1:Object; var _local2:Number; _local1 = new Object(); _local2 = Math.round((Math.random() * 2)); _local1.keyPar = ((_local2 == 0)) ? "x" : ((_local2 == 1)) ? "y" : "z"; _local1.rPar = ("rotation" + String(_local1.keyPar).toUpperCase()); _local2 = Math.round((Math.random() * (cubeDimension - 1))); _local1.keyParVal = ((_local2 - center) * (cubeSideSize + cubesSpan)); _local2 = Math.round((Math.random() * 1)); _local1.angle = ((_local2 == 0)) ? 90 : -90; switch (_local1.keyPar){ case "x": _local1.xPar = "y"; _local1.yPar = "z"; break; case "y": _local1.xPar = "x"; _local1.yPar = "z"; break; case "z": _local1.xPar = "y"; _local1.yPar = "x"; break; }; return (_local1); } private function getPart(_arg1:Number, _arg2:Number, _arg3:Number):Number{ if (Math.round(_arg3) == posExtremum){ return (1); }; if (Math.round(_arg3) == -(posExtremum)){ return (2); }; if (Math.round(_arg1) == posExtremum){ return (3); }; if (Math.round(_arg1) == -(posExtremum)){ return (4); }; if (Math.round(_arg2) == posExtremum){ return (5); }; if (Math.round(_arg2) == -(posExtremum)){ return (6); }; return (0); } private function timeTimer():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; curTime = (curTime + 10); _local1 = Math.floor((curTime / ((1000 * 60) * 60))); _local2 = Math.floor((curTime / (1000 * 60))); _local3 = Math.floor((curTime / 1000)); _local4 = Math.round(((curTime % 1000) / 100)); timeTxt.text = ((((((((_local1 > 9)) ? ("" + _local1) : ("0" + _local1) + ":") + ((_local2 > 9)) ? ("" + _local2) : ("0" + _local2)) + ":") + ((_local3 > 9)) ? ("" + _local3) : ("0" + _local3)) + ":") + ((_local4 > 9)) ? ("" + _local4) : ("0" + _local4)); } private function getCubeMaterialByString(_arg1:String):ColorMaterial{ switch (_arg1){ case "white": return (new ColorMaterial(0xF0F0F0)); case "red": return (new ColorMaterial(0xB30000)); case "blue": return (new ColorMaterial(26367)); case "green": return (new ColorMaterial(0x4800)); case "yello": return (new ColorMaterial(0xD5AA00)); case "lilac": return (new ColorMaterial(0x330066)); case "inviz": return (new ColorMaterial(0)); }; return (new ColorMaterial(0)); } private function getStringByColorMaterial(_arg1:ITriangleMaterial):String{ switch (_arg1["color"]){ case 0xF0F0F0: return ("white"); case 0xB30000: return ("red"); case 26367: return ("blue"); case 0x4800: return ("green"); case 0xD5AA00: return ("yello"); case 0x330066: return ("lilac"); case 0: return ("inviz"); }; return ("inviz"); } private function stopTimeTimer():void{ clearInterval(timeTimerInterval); curTime = 0; } private function cubeMouseUpHandler(_arg1:MouseEvent3D):void{ stageCubeMouseUpHandler(); mouseUpHandler(); } private function stageMouseLeaveHandler(_arg1:Event):void{ move = false; stage.removeEventListener(Event.MOUSE_LEAVE, stageMouseLeaveHandler); } private function mouseDownHandler(_arg1:MouseEvent):void{ lastPanAngle = camera.targetpanangle; lastTiltAngle = camera.targettiltangle; lastMouseX = back.mouseX; lastMouseY = back.mouseY; move = true; stage.addEventListener(Event.MOUSE_LEAVE, stageMouseLeaveHandler); } private function finishLevel():void{ rotationQueue = new Array(); stopTimeTimer(); timerStarted = false; curTime = 0; hscroll.visible = false; vscroll.visible = false; timeTxt.visible = false; stopBtn.visible = false; shuffleBtn.visible = false; saveBtn.visible = false; muteUnmute.visible = false; if (app.getChildAt((app.numChildren - 1)) != nextLevelView){ app.swapChildren(nextLevelView, app.getChildAt((app.numChildren - 1))); }; nextLevelView.x = 0; nextLevelView.y = 0; nextLevelView.refresh(); timeTxt.text = "00:00:00:00"; gameStopped = true; } private function cubeMouseDownHandler(_arg1:MouseEvent3D):void{ lastPart = getPart(_arg1.sceneX, _arg1.sceneY, _arg1.sceneZ); lastCubePressed = (_arg1.object as Cube); cubePressed = true; lastMouseX = back.mouseX; lastMouseY = back.mouseY; addEventListener(MouseEvent.MOUSE_MOVE, stageCubeMouseMoveHandler); addEventListener(MouseEvent.MOUSE_UP, stageCubeMouseUpHandler); } private function stageCubeMouseMoveHandler(_arg1:MouseEvent):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; delMouseX = (back.mouseX - lastMouseX); delMouseY = (back.mouseY - lastMouseY); if ((((Math.abs(delMouseX) < minMouseDel)) && ((Math.abs(delMouseY) < minMouseDel)))){ return; }; _local2 = 90; _local3 = 90; if (delMouseX > 0){ _local2 = -90; }; if (delMouseY > 0){ _local3 = -90; }; switch (lastPart){ case 1: case1(delMouseX, delMouseY, _local2, _local3); break; case 2: case2(delMouseX, delMouseY, _local2, _local3); break; case 3: case3(delMouseX, delMouseY, _local2, _local3); break; case 4: case4(delMouseX, delMouseY, _local2, _local3); break; case 5: _local4 = (((camera.targetpanangle % 360) + 360) % 360); case5(delMouseX, delMouseY, _local2, _local3, _local4); break; case 6: _local5 = (((camera.targetpanangle % 360) + 360) % 360); case6(delMouseX, delMouseY, _local2, _local3, _local5); break; }; stageCubeMouseUpHandler(); } private function checkForReadiness():void{ var _local1:Array; var _local2:Array; var _local3:Array; var _local4:Array; var _local5:Array; var _local6:Array; var _local7:Number; var _local8:Boolean; _local1 = new Array(); _local2 = new Array(); _local3 = new Array(); _local4 = new Array(); _local5 = new Array(); _local6 = new Array(); _local7 = 0; while (_local7 < cubesArr.length) { if (cubesArr[_local7].x == centerExtremum){ _local2.push(cubesArr[_local7]); }; if (cubesArr[_local7].x == -(centerExtremum)){ _local4.push(cubesArr[_local7]); }; if (cubesArr[_local7].y == centerExtremum){ _local5.push(cubesArr[_local7]); }; if (cubesArr[_local7].y == -(centerExtremum)){ _local6.push(cubesArr[_local7]); }; if (cubesArr[_local7].z == centerExtremum){ _local1.push(cubesArr[_local7]); }; if (cubesArr[_local7].z == -(centerExtremum)){ _local3.push(cubesArr[_local7]); }; _local7++; }; _local8 = true; _local8 = ((_local8) && (sideColorIdentity(_local1, "front"))); _local8 = ((_local8) && (sideColorIdentity(_local2, "left"))); _local8 = ((_local8) && (sideColorIdentity(_local3, "back"))); _local8 = ((_local8) && (sideColorIdentity(_local4, "right"))); _local8 = ((_local8) && (sideColorIdentity(_local5, "top"))); _local8 = ((_local8) && (sideColorIdentity(_local6, "bottom"))); if (_local8){ if (isSoundOn){ levelSound.play(); }; finishLevel(); }; } private function stopBtnClickHandler(_arg1:MouseEvent):void{ finishLevel(); } private function removeCube():void{ var _local1:Number; _local1 = 0; while (_local1 < cubesArr.length) { scene.removeChild(cubesArr[_local1]); _local1++; }; cubesArr = new Array(); rotationQueue = new Array(); } private function shuffleBtnClickHandler(_arg1:MouseEvent):void{ shuffle(10); } private function shuffle(_arg1:Number=10):void{ var _local2:Number; var _local3:Object; _local2 = 0; while (_local2 < _arg1) { rotationQueue.push(getRandomRotation()); _local2++; }; _local3 = rotationQueue.shift(); rotate(_local3.keyPar, _local3.keyParVal, _local3.angle, _local3.xPar, _local3.yPar, _local3.rPar); } private function case4(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("y", lastCubePressed.y, _arg3, "x", "z", "rotationY"); } else { rotate("z", lastCubePressed.z, -(_arg4), "y", "x", "rotationZ"); }; } private function case5(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{ if ((((_arg5 >= 315)) || ((_arg5 <= 45)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("z", lastCubePressed.z, -(_arg3), "y", "x", "rotationZ"); } else { rotate("x", lastCubePressed.x, _arg4, "y", "z", "rotationX"); }; } else { if ((((_arg5 >= 45)) && ((_arg5 <= 135)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("x", lastCubePressed.x, ((_arg1 > 0)) ? -90 : 90, "y", "z", "rotationX"); } else { rotate("z", lastCubePressed.z, ((_arg2 > 0)) ? -90 : 90, "y", "x", "rotationZ"); }; } else { if ((((_arg5 >= 135)) && ((_arg5 <= 225)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("z", lastCubePressed.z, _arg3, "y", "x", "rotationZ"); } else { rotate("x", lastCubePressed.x, -(_arg4), "y", "z", "rotationX"); }; } else { if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("x", lastCubePressed.x, ((_arg1 > 0)) ? 90 : -90, "y", "z", "rotationX"); } else { rotate("z", lastCubePressed.z, ((_arg2 > 0)) ? 90 : -90, "y", "x", "rotationZ"); }; }; }; }; } private function case6(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{ if ((((_arg5 >= 315)) || ((_arg5 <= 45)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("z", lastCubePressed.z, _arg3, "y", "x", "rotationZ"); } else { rotate("x", lastCubePressed.x, _arg4, "y", "z", "rotationX"); }; } else { if ((((_arg5 >= 45)) && ((_arg5 <= 135)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("x", lastCubePressed.x, ((_arg1 > 0)) ? 90 : -90, "y", "z", "rotationX"); } else { rotate("z", lastCubePressed.z, ((_arg2 > 0)) ? -90 : 90, "y", "x", "rotationZ"); }; } else { if ((((_arg5 >= 135)) && ((_arg5 <= 225)))){ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("z", lastCubePressed.z, -(_arg3), "y", "x", "rotationZ"); } else { rotate("x", lastCubePressed.x, -(_arg4), "y", "z", "rotationX"); }; } else { if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("x", lastCubePressed.x, ((_arg1 > 0)) ? -90 : 90, "y", "z", "rotationX"); } else { rotate("z", lastCubePressed.z, ((_arg2 > 0)) ? 90 : -90, "y", "x", "rotationZ"); }; }; }; }; } private function case1(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("y", lastCubePressed.y, _arg3, "x", "z", "rotationY"); } else { rotate("x", lastCubePressed.x, _arg4, "y", "z", "rotationX"); }; } private function case2(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("y", lastCubePressed.y, _arg3, "x", "z", "rotationY"); } else { rotate("x", lastCubePressed.x, -(_arg4), "y", "z", "rotationX"); }; } public function getGameHistory():Object{ var _local1:SharedObject; _local1 = SharedObject.getLocal("cubic_rubic"); return (_local1.data.gameHistory); } private function mouseUpHandler(_arg1:MouseEvent=null):void{ if (cubePressed){ cubePressed = false; }; move = false; if (stage.hasEventListener(Event.MOUSE_LEAVE)){ stage.removeEventListener(Event.MOUSE_LEAVE, stageMouseLeaveHandler); }; } private function case3(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ if (Math.abs(_arg1) >= Math.abs(_arg2)){ rotate("y", lastCubePressed.y, _arg3, "x", "z", "rotationY"); } else { rotate("z", lastCubePressed.z, _arg4, "y", "x", "rotationZ"); }; } private function initListeners():void{ back.addEventListener(Event.ENTER_FRAME, enterFrameHandler); back.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); back.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); back.addEventListener(Event.RESIZE, resizeHandler); resizeHandler(); } private function getCubePropsByCube(_arg1:Cube):CubeProps{ var _local2:CubeProps; _local2 = new CubeProps(); _local2.x = _arg1.x; _local2.y = _arg1.y; _local2.z = _arg1.z; _local2.back = getStringByColorMaterial(_arg1.cubeMaterials.back); _local2.front = getStringByColorMaterial(_arg1.cubeMaterials.front); _local2.bottom = getStringByColorMaterial(_arg1.cubeMaterials.bottom); _local2.top = getStringByColorMaterial(_arg1.cubeMaterials.top); _local2.right = getStringByColorMaterial(_arg1.cubeMaterials.right); _local2.left = getStringByColorMaterial(_arg1.cubeMaterials.left); return (_local2); } private function sideColorIdentity(_arg1:Array, _arg2:String):Boolean{ var _local3:Boolean; var _local4:*; _local3 = true; _local4 = 1; while (_local4 < _arg1.length) { _local3 = ((_local3) && ((_arg1[_local4].cubeMaterials[_arg2] == _arg1[0].cubeMaterials[_arg2]))); _local4++; }; return (_local3); } public function saveGame():void{ var _local1:Object; var _local2:SharedObject; var _local3:Object; var _local4:Object; _local1 = new Object(); _local1.cubesProperties = cubePropsArr(); _local1.curTime = curTime; _local1.targetpanangle = (camera.targetpanangle % 360); _local1.targettiltangle = (camera.targettiltangle % 360); _local2 = SharedObject.getLocal("cubic_rubic"); _local3 = _local2.data.gameHistory; if (_local3 == null){ _local3 = new Object(); }; _local3[("d" + cubeDimension)] = _local1; _local2.data.gameHistory = _local3; _local4 = _local2.flush(); } public function createCube(_arg1:Number):void{ var _local2:Number; var _local3:ColorMaterial; var _local4:ColorMaterial; var _local5:ColorMaterial; var _local6:ColorMaterial; var _local7:ColorMaterial; var _local8:ColorMaterial; var _local9:ColorMaterial; var _local10:CubeMaterialsData; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Cube; gameStopped = false; removeCube(); camera.targetpanangle = (camera.panangle = -20); camera.targettiltangle = (camera.tiltangle = 20); cubeDimension = _arg1; cubeSideSize = (maxCubeSize / cubeDimension); center = ((cubeDimension / 2) - 0.5); lst = (_arg1 - 1); posExtremum = ((center * (cubeSideSize + cubesSpan)) + (cubeSideSize / 2)); centerExtremum = (center * (cubeSideSize + cubesSpan)); cubRots = new Array(); cubesArr = new Array(); _local2 = 0; while (_local2 < (_arg1 * _arg1)) { cubRots.push(new CubeRotation()); _local2++; }; _local3 = new ColorMaterial(0xF0F0F0); _local4 = new ColorMaterial(0xB30000); _local5 = new ColorMaterial(26367); _local6 = new ColorMaterial(0x4800); _local7 = new ColorMaterial(0xD5AA00); _local8 = new ColorMaterial(0x330066); _local9 = new ColorMaterial(0); _local11 = 0; while (_local11 < _arg1) { _local12 = 0; while (_local12 < _arg1) { _local13 = 0; while (_local13 < _arg1) { if (((((((!((_local11 == 0))) && (!((_local11 == lst))))) && (((!((_local12 == 0))) && (!((_local12 == lst))))))) && (((!((_local13 == 0))) && (!((_local13 == lst))))))){ } else { _local14 = new Cube({width:cubeSideSize, height:cubeSideSize, depth:cubeSideSize}); _local14.x = ((_local13 - center) * (cubeSideSize + cubesSpan)); _local14.y = ((_local12 - center) * (cubeSideSize + cubesSpan)); _local14.z = ((_local11 - center) * (cubeSideSize + cubesSpan)); _local10 = new CubeMaterialsData({front:_local9, left:_local9, right:_local9, top:_local9, bottom:_local9, back:_local9}); if (_local11 == 0){ _local10.back = _local8; }; if (_local11 == lst){ _local10.front = _local4; }; if (_local12 == 0){ _local10.bottom = _local7; }; if (_local12 == lst){ _local10.top = _local3; }; if (_local13 == 0){ _local10.right = _local5; }; if (_local13 == lst){ _local10.left = _local6; }; _local14.cubeMaterials = _local10; _local14.addEventListener(MouseEvent3D.MOUSE_DOWN, cubeMouseDownHandler); _local14.addEventListener(MouseEvent3D.MOUSE_UP, cubeMouseUpHandler); _local14.useHandCursor = true; scene.addChild(_local14); cubesArr.push(_local14); cubesObj[((((_local13 + "x") + _local12) + "x") + _local11)] = _local14; }; _local13++; }; _local12++; }; _local11++; }; shuffle(20); hscroll.visible = true; vscroll.visible = true; timeTxt.visible = true; stopBtn.visible = true; shuffleBtn.visible = true; saveBtn.visible = true; muteUnmute.visible = true; if (isSoundOn){ soundOn(0.1); } else { soundVol = 0.1; }; } private function rotate(_arg1:String, _arg2:Number, _arg3:Number, _arg4:String, _arg5:String, _arg6:String):void{ var _local7:Number; var _local8:Object; var _local9:Number; var _local10:CubeRotation; if (rotationInterval != 0){ return; }; _local7 = 0; _local8 = new Object(); _local9 = 0; while (_local9 < cubesArr.length) { if (cubesArr[_local9][_arg1] == _arg2){ if (_local8[((cubesArr[_local9][_arg4] + "x") + cubesArr[_local9][_arg5])] != undefined){ } else { _local8[((cubesArr[_local9][_arg4] + "x") + cubesArr[_local9][_arg5])] = 1; var _temp1 = _local7; _local7 = (_local7 + 1); _local10 = cubRots[_temp1]; _local10.init(cubesArr[_local9], _arg4, _arg5, _arg6); }; }; _local9++; }; if (_arg3 > 0){ stepAngle = Math.abs(stepAngle); } else { stepAngle = (Math.abs(stepAngle) * -1); }; rotationAngle = _arg3; currentAngle = 0; rotationInterval = setInterval(rotateGroup, 15); if (isSoundOn){ _rotationSoundChannel = rotationSound.play(); }; } private function initEngine():void{ var _local1:FogFilter; scene = new Scene3D(); camera = new HoverCamera3D(); camera.yfactor = 1; camera.focus = 50; camera.distance = 300; camera.mintiltangle = -90; camera.maxtiltangle = 90; camera.targetpanangle = (camera.panangle = -20); camera.targettiltangle = (camera.tiltangle = 20); hscroll.percent = (camera.targetpanangle / 360); vscroll.percent = (camera.targettiltangle / 180); _local1 = new FogFilter(); _local1.material = new ColorMaterial(0x666666); _local1.minZ = 500; _local1.maxZ = 2000; renderer = new BasicRenderer(); view = new View3D(); view.scene = scene; view.camera = camera; view.renderer = renderer; addChild(view); } public function restoreGame(_arg1:Number):void{ var _local2:SharedObject; var _local3:Object; var _local4:Array; var _local5:Cube; var _local6:Number; var _local7:Number; _local2 = SharedObject.getLocal("cubic_rubic"); _local3 = _local2.data.gameHistory; if (_local3[("d" + _arg1)] == null){ return; }; camera.targetpanangle = _local3[("d" + _arg1)].targetpanangle; camera.targettiltangle = _local3[("d" + _arg1)].targettiltangle; _local4 = _local3[("d" + _arg1)].cubesProperties; if ((((_local4 == null)) || ((_local4.length == 0)))){ return; }; gameStopped = false; removeCube(); cubeDimension = _arg1; cubeSideSize = (maxCubeSize / cubeDimension); center = ((cubeDimension / 2) - 0.5); lst = (_arg1 - 1); posExtremum = ((center * (cubeSideSize + cubesSpan)) + (cubeSideSize / 2)); centerExtremum = (center * (cubeSideSize + cubesSpan)); cubRots = new Array(); _local6 = 0; while (_local6 < (_arg1 * _arg1)) { cubRots.push(new CubeRotation()); _local6++; }; cubesArr = new Array(); cubesObj = new Object(); _local7 = 0; while (_local7 < _local4.length) { _local5 = getCubeByCubeProps(_local4[_local7]); _local5.addEventListener(MouseEvent3D.MOUSE_DOWN, cubeMouseDownHandler); _local5.addEventListener(MouseEvent3D.MOUSE_UP, cubeMouseUpHandler); _local5.useHandCursor = true; scene.addChild(_local5); cubesArr.push(_local5); cubesObj[((((_local5.x + "x") + _local5.y) + "x") + _local5.z)] = _local5; _local7++; }; hscroll.visible = true; vscroll.visible = true; timeTxt.visible = true; stopBtn.visible = true; shuffleBtn.visible = true; saveBtn.visible = true; muteUnmute.visible = true; if (isSoundOn){ soundOn(0.1); }; startTimeTimer(); timerStarted = true; curTime = _local3[("d" + _arg1)].curTime; } private function saveBtnClickHandler(_arg1:MouseEvent):void{ if (rotationQueue.length == 0){ saveGame(); }; } private function rotateGroup():void{ var _local1:Number; var _local2:Object; currentAngle = (currentAngle + stepAngle); if (Math.abs(currentAngle) > Math.abs(rotationAngle)){ currentAngle = rotationAngle; }; _local1 = 0; while (_local1 < cubRots.length) { if (cubRots[_local1].done){ } else { cubRots[_local1].angle = (cubRots[_local1].startAngle - currentAngle); }; _local1++; }; if (_rotationSoundChannel != null){ _rotationSoundChannel.stop(); }; if (currentAngle == rotationAngle){ clearInterval(rotationInterval); rotationInterval = 0; _local1 = 0; while (_local1 < cubRots.length) { if (cubRots[_local1].done){ } else { cubRots[_local1].finalize(rotationAngle, ((cubeSideSize + cubesSpan) / 2)); }; _local1++; }; if (rotationQueue.length > 0){ _local2 = rotationQueue.shift(); rotate(_local2.keyPar, _local2.keyParVal, _local2.angle, _local2.xPar, _local2.yPar, _local2.rPar); } else { if (!gameStopped){ if (!timerStarted){ startTimeTimer(); timerStarted = true; }; checkForReadiness(); }; }; } else { if (isSoundOn){ _rotationSoundChannel = rotationSound.play(((rotationSound.length * Math.abs(currentAngle)) / Math.abs(rotationAngle))); }; }; } private function getCubeByCubeProps(_arg1:Object):Cube{ var _local2:Cube; var _local3:CubeMaterialsData; _local2 = new Cube({width:cubeSideSize, height:cubeSideSize, depth:cubeSideSize}); _local2.x = _arg1["x"]; _local2.y = _arg1["y"]; _local2.z = _arg1["z"]; _local3 = new CubeMaterialsData({front:getCubeMaterialByString(_arg1["front"]), left:getCubeMaterialByString(_arg1["left"]), right:getCubeMaterialByString(_arg1["right"]), top:getCubeMaterialByString(_arg1["top"]), bottom:getCubeMaterialByString(_arg1["bottom"]), back:getCubeMaterialByString(_arg1["back"])}); _local2.cubeMaterials = _local3; return (_local2); } private function resizeHandler(_arg1:Event=null):void{ view.x = (back.width / 2); view.y = (back.height / 2); } public static function soundOff():void{ if (mainSoundChannel != null){ mainSoundChannel.stop(); mainSoundChannel = null; }; isSoundOn = false; } public static function soundOn(_arg1:Number=1):void{ var _local2:SoundTransform; soundVol = _arg1; if (mainSoundChannel == null){ mainSoundChannel = mainSound.play(0, int.MAX_VALUE, new SoundTransform(soundVol)); }; _local2 = mainSoundChannel.soundTransform; _local2.volume = soundVol; mainSoundChannel.soundTransform = _local2; isSoundOn = true; } public static function get rotationSound():Sound{ if (_rotationSound == null){ _rotationSound = new RotationSound(); }; return (_rotationSound); } public static function get rotationSoundChannel():SoundChannel{ if (_rotationSoundChannel == null){ _rotationSoundChannel = rotationSound.play(0, int.MAX_VALUE); }; return (_rotationSoundChannel); } } }//package
Section 174
//CubeProps (CubeProps) package { public class CubeProps { public var back:String; public var front:String; public var bottom:String; public var left:String; public var top:String; public var x:Number; public var y:Number; public var z:Number; public var right:String; public function CubeProps(){ x = 0; y = 0; z = 0; top = "inviz"; bottom = "inviz"; left = "inviz"; right = "inviz"; front = "inviz"; back = "inviz"; } } }//package
Section 175
//CubeRotation (CubeRotation) package { import away3d.primitives.*; import flash.geom.*; import away3d.primitives.data.*; import away3d.materials.*; public class CubeRotation { public var done:Boolean;// = true private var rParName:String; public var startAngle:Number;// = 0 private var yParName:String; private var _angle:Number; private var r:Number; private var xParName:String; private var cube:Cube;// = null private var startRParam:Number;// = 0 public function CubeRotation(){ cube = null; startAngle = 0; startRParam = 0; done = true; super(); } private function rotateZMaterials(_arg1:Number):void{ var _local2:CubeMaterialsData; var _local3:ITriangleMaterial; _local2 = cube.cubeMaterials; if (_arg1 == 90){ _local3 = _local2.top; _local2.top = _local2.left; _local2.left = _local2.bottom; _local2.bottom = _local2.right; _local2.right = _local3; } else { if (_arg1 == -90){ _local3 = _local2.top; _local2.top = _local2.right; _local2.right = _local2.bottom; _local2.bottom = _local2.left; _local2.left = _local3; }; }; cube.cubeMaterials = _local2; cube.rotationZ = 0; } public function init(_arg1:Cube, _arg2:String, _arg3:String, _arg4:String):void{ this.cube = _arg1; this.xParName = _arg2; this.yParName = _arg3; this.rParName = _arg4; this.r = Math.sqrt(((_arg1[_arg2] * _arg1[_arg2]) + (_arg1[_arg3] * _arg1[_arg3]))); startAngle = angle; startRParam = (5 * Math.round((_arg1[_arg4] / 5))); done = false; } private function getPointOnAngle(_arg1:Number):Point{ var _local2:Number; var _local3:Number; var _local4:Point; _local2 = (r * Math.cos(((_arg1 / 180) * Math.PI))); _local3 = (r * Math.sin(((_arg1 / 180) * Math.PI))); _local4 = new Point(Math.round(_local2), Math.round(_local3)); return (_local4); } private function rotateXMaterials(_arg1:Number):void{ var _local2:CubeMaterialsData; var _local3:ITriangleMaterial; _local2 = cube.cubeMaterials; if (_arg1 == 90){ _local3 = _local2.top; _local2.top = _local2.front; _local2.front = _local2.bottom; _local2.bottom = _local2.back; _local2.back = _local3; } else { if (_arg1 == -90){ _local3 = _local2.top; _local2.top = _local2.back; _local2.back = _local2.bottom; _local2.bottom = _local2.front; _local2.front = _local3; }; }; cube.cubeMaterials = _local2; cube.rotationX = 0; } public function get angle():Number{ var _local1:Number; _local1 = ((r)==0) ? cube[rParName] : angleOfPoint(cube[xParName], cube[yParName]); return (_local1); } public function finalize(_arg1:Number, _arg2:Number):void{ done = true; cube[xParName] = (Math.round((cube[xParName] / _arg2)) * _arg2); cube[yParName] = (Math.round((cube[yParName] / _arg2)) * _arg2); switch (rParName){ case "rotationX": rotateXMaterials(_arg1); break; case "rotationY": rotateYMaterials(_arg1); break; case "rotationZ": rotateZMaterials(_arg1); break; }; } public function set angle(_arg1:Number):void{ var _local2:Point; _arg1 = ((_arg1 + Math.round(360)) % 360); _angle = _arg1; _local2 = getPointOnAngle(_arg1); cube[xParName] = _local2.x; cube[yParName] = _local2.y; cube[rParName] = (startRParam - (_arg1 - startAngle)); } private function rotateYMaterials(_arg1:Number):void{ var _local2:CubeMaterialsData; var _local3:ITriangleMaterial; _local2 = cube.cubeMaterials; if (_arg1 == 90){ _local3 = _local2.front; _local2.front = _local2.right; _local2.right = _local2.back; _local2.back = _local2.left; _local2.left = _local3; } else { if (_arg1 == -90){ _local3 = _local2.front; _local2.front = _local2.left; _local2.left = _local2.back; _local2.back = _local2.right; _local2.right = _local3; }; }; cube.cubeMaterials = _local2; cube.rotationY = 0; } private function angleOfPoint(_arg1:Number, _arg2:Number):Number{ var _local3:Number; _local3 = ((Math.atan((_arg2 / _arg1)) / Math.PI) * 180); if (_arg1 < 0){ _local3 = (_local3 + 180); } else { if (_arg2 < 0){ _local3 = (_local3 + 360); }; }; return (_local3); } } }//package
Section 176
//CustomHScroll (CustomHScroll) package { import flash.geom.*; import flash.display.*; import flash.events.*; public class CustomHScroll extends MovieClip { public var scrollBar:MovieClip; public var scrollBase:MovieClip; public function CustomHScroll(){ scrollBar.useHandCursor = true; scrollBar.buttonMode = true; scrollBar.addEventListener(MouseEvent.MOUSE_DOWN, scrollMouseDown); } public function set percent(_arg1:Number):void{ if (_arg1 < -0.5){ _arg1 = (_arg1 + 1); } else { if (_arg1 > 0.5){ _arg1--; }; }; scrollBar.x = (scrollBase.width * _arg1); } private function scrollMouseDown(_arg1:MouseEvent):void{ var _local2:Rectangle; _local2 = new Rectangle(-((scrollBase.width / 2)), 0, scrollBase.width, 0); scrollBar.startDrag(false, _local2); Application.app.addEventListener(MouseEvent.MOUSE_UP, scrollMouseUp); Application.app.addEventListener(MouseEvent.MOUSE_MOVE, scrollMouseMove); } private function scrollMouseUp(_arg1:MouseEvent):void{ scrollBar.stopDrag(); Application.app.removeEventListener(MouseEvent.MOUSE_UP, scrollMouseUp); Application.app.removeEventListener(MouseEvent.MOUSE_MOVE, scrollMouseMove); } private function scrollMouseMove(_arg1:MouseEvent):void{ var _local2:Number; _local2 = ((scrollBar.x + (scrollBase.width / 2)) / scrollBase.width); _local2 = (Math.round((_local2 * 100)) / 100); Application.app.changeCamX(_local2); } } }//package
Section 177
//CustomVScroll (CustomVScroll) package { import flash.geom.*; import flash.display.*; import flash.events.*; public class CustomVScroll extends MovieClip { public var scrollBar:MovieClip; public var scrollBase:MovieClip; public function CustomVScroll(){ scrollBar.useHandCursor = true; scrollBar.buttonMode = true; scrollBar.addEventListener(MouseEvent.MOUSE_DOWN, scrollMouseDown); } public function set percent(_arg1:Number):void{ scrollBar.y = (scrollBase.height * _arg1); } private function scrollMouseDown(_arg1:MouseEvent):void{ var _local2:Rectangle; _local2 = new Rectangle(0, -((scrollBase.height / 2)), 0, scrollBase.height); scrollBar.startDrag(false, _local2); Application.app.addEventListener(MouseEvent.MOUSE_UP, scrollMouseUp); Application.app.addEventListener(MouseEvent.MOUSE_MOVE, scrollMouseMove); } private function scrollMouseUp(_arg1:MouseEvent):void{ scrollBar.stopDrag(); Application.app.removeEventListener(MouseEvent.MOUSE_UP, scrollMouseUp); Application.app.removeEventListener(MouseEvent.MOUSE_MOVE, scrollMouseMove); } private function scrollMouseMove(_arg1:MouseEvent):void{ var _local2:Number; _local2 = ((scrollBar.y + (scrollBase.height / 2)) / scrollBase.height); _local2 = (Math.round((_local2 * 100)) / 100); Application.app.changeCamY(_local2); } } }//package
Section 178
//HScroll (HScroll) package { public dynamic class HScroll extends CustomHScroll { } }//package
Section 179
//Instructions (Instructions) package { import flash.display.*; import flash.events.*; public class Instructions extends MovieClip { public var menuBtn:SimpleButton; public function Instructions(){ menuBtn.addEventListener(MouseEvent.CLICK, menuBtnClick); } private function menuBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.startView.x = 0; Application.app.startView.y = 0; } } }//package
Section 180
//InstructionsMc (InstructionsMc) package { public dynamic class InstructionsMc extends Instructions { } }//package
Section 181
//LevelSound (LevelSound) package { import flash.media.*; public dynamic class LevelSound extends Sound { } }//package
Section 182
//LoadGame (LoadGame) package { public dynamic class LoadGame extends LoadGameView { } }//package
Section 183
//LoadGameView (LoadGameView) package { import flash.display.*; import flash.events.*; public class LoadGameView extends MovieClip { public var normalBtn:SimpleButton; public var easyBtn:SimpleButton; public var veryHardBtn:SimpleButton; public var hardBtn:SimpleButton; public var menuBtn:SimpleButton; public function LoadGameView(){ easyBtn.addEventListener(MouseEvent.CLICK, easyBtnClick); normalBtn.addEventListener(MouseEvent.CLICK, normalBtnClick); hardBtn.addEventListener(MouseEvent.CLICK, hardBtnClick); veryHardBtn.addEventListener(MouseEvent.CLICK, veryHardBtnClick); menuBtn.addEventListener(MouseEvent.CLICK, menuBtnClick); } private function menuBtnClick(_arg1:MouseEvent):void{ this.x = 605; Application.app.showMenu(); } public function refreshList():void{ var _local1:Object; _local1 = Application.app.getGameHistory(); if (_local1 == null){ _local1 = new Object(); }; if (_local1["d2"] == undefined){ easyBtn.visible = false; } else { easyBtn.visible = true; }; if (_local1["d3"] == undefined){ normalBtn.visible = false; } else { normalBtn.visible = true; }; if (_local1["d4"] == undefined){ hardBtn.visible = false; } else { hardBtn.visible = true; }; if (_local1["d5"] == undefined){ veryHardBtn.visible = false; } else { veryHardBtn.visible = true; }; } private function hardBtnClick(_arg1:MouseEvent):void{ loadGame(4); } private function normalBtnClick(_arg1:MouseEvent):void{ loadGame(3); } private function easyBtnClick(_arg1:MouseEvent):void{ loadGame(2); } private function veryHardBtnClick(_arg1:MouseEvent):void{ loadGame(5); } private function loadGame(_arg1:Number):void{ this.x = 605; Application.app.restoreGame(_arg1); } } }//package
Section 184
//MainSound (MainSound) package { import flash.media.*; public dynamic class MainSound extends Sound { } }//package
Section 185
//NextLevelView (NextLevelView) package { import flash.display.*; import flash.events.*; import flash.text.*; public class NextLevelView extends MovieClip { public var replayBtn:SimpleButton; public var timeTxt:TextField; public var nextLevelBtn:SimpleButton; public var menuBtn:SimpleButton; public function NextLevelView(){ nextLevelBtn.addEventListener(MouseEvent.CLICK, nextLevelBtnClick); replayBtn.addEventListener(MouseEvent.CLICK, replayBtnClick); menuBtn.addEventListener(MouseEvent.CLICK, menuBtnClick); } private function menuBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.showMenu(); } private function replayBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.createCube(Application.app.cubeDimension); } public function refresh():void{ timeTxt.text = Application.app.timeTxt.text; } private function nextLevelBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.createCube(Math.min(++Application.app.cubeDimension, 5)); } } }//package
Section 186
//NextLevelViewMc (NextLevelViewMc) package { public dynamic class NextLevelViewMc extends NextLevelView { } }//package
Section 187
//RotationSound (RotationSound) package { import flash.media.*; public dynamic class RotationSound extends Sound { } }//package
Section 188
//StartView (StartView) package { import flash.display.*; import flash.events.*; public class StartView extends MovieClip { public var easyBtn:SimpleButton; public var normalBtn:SimpleButton; public var loadGameBtn:SimpleButton; public var veryHardBtn:SimpleButton; public var hardBtn:SimpleButton; public var instructionsBtn:SimpleButton; public function StartView(){ easyBtn.addEventListener(MouseEvent.CLICK, easyBtnClick); normalBtn.addEventListener(MouseEvent.CLICK, normalBtnClick); hardBtn.addEventListener(MouseEvent.CLICK, hardBtnClick); veryHardBtn.addEventListener(MouseEvent.CLICK, veryHardBtnClick); loadGameBtn.addEventListener(MouseEvent.CLICK, loadGameBtnClick); instructionsBtn.addEventListener(MouseEvent.CLICK, instructionsBtnClick); } private function instructionsBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.instructions.x = 0; Application.app.instructions.y = 0; } private function startGame(_arg1:Number):void{ this.x = -600; this.y = -500; Application.app.createCube(_arg1); } private function normalBtnClick(_arg1:MouseEvent):void{ startGame(3); } private function hardBtnClick(_arg1:MouseEvent):void{ startGame(4); } private function loadGameBtnClick(_arg1:MouseEvent):void{ this.x = -600; this.y = -500; Application.app.loadGame.refreshList(); Application.app.loadGame.x = 0; Application.app.loadGame.y = 0; } private function easyBtnClick(_arg1:MouseEvent):void{ startGame(2); } private function veryHardBtnClick(_arg1:MouseEvent):void{ startGame(5); } } }//package
Section 189
//StartViewMc (StartViewMc) package { public dynamic class StartViewMc extends StartView { } }//package
Section 190
//VScroll (VScroll) package { public dynamic class VScroll extends CustomVScroll { } }//package

Library Items

Symbol 1 Sound {RotationSound}
Symbol 2 Sound {MainSound}
Symbol 3 Sound {LevelSound}
Symbol 4 GraphicUsed by:5
Symbol 5 MovieClipUses:4Used by:26 91 95
Symbol 6 FontUsed by:7 8
Symbol 7 EditableTextUses:6Used by:26
Symbol 8 EditableTextUses:6Used by:26
Symbol 9 FontUsed by:10 12 13 18 19 20 22 23 24 33 34 37 40 41 44 46 47 50 52 53 56 58 60 61 72 73 74 76 77 78 79 81 82 83 85 86 87 88 89
Symbol 10 EditableTextUses:9Used by:17
Symbol 11 GraphicUsed by:17 21 25 39 45 51 57
Symbol 12 EditableTextUses:9Used by:17
Symbol 13 EditableTextUses:9Used by:17
Symbol 14 GraphicUsed by:17 21 25
Symbol 15 SoundUsed by:17 21 25 39 45 51 57 63 75 138 143 147
Symbol 16 SoundUsed by:17 21 25 39 45 51 57 63 75 138 143 147
Symbol 17 ButtonUses:10 11 12 13 14 15 16Used by:26
Symbol 18 EditableTextUses:9Used by:21
Symbol 19 EditableTextUses:9Used by:21
Symbol 20 EditableTextUses:9Used by:21
Symbol 21 ButtonUses:18 11 19 20 14 15 16Used by:26 95 132
Symbol 22 EditableTextUses:9Used by:25
Symbol 23 EditableTextUses:9Used by:25
Symbol 24 EditableTextUses:9Used by:25
Symbol 25 ButtonUses:22 11 23 24 14 15 16Used by:26
Symbol 26 MovieClip {NextLevelViewMc}Uses:5 7 8 17 21 25Used by:Timeline
Symbol 27 FontUsed by:28 94 112 113 120 121 122 123 125 126 127 133 135 136 139 140 141 144 145 146 148 149
Symbol 28 EditableTextUses:27Used by:91
Symbol 29 BitmapUsed by:30
Symbol 30 GraphicUses:29Used by:31
Symbol 31 MovieClipUses:30Used by:91
Symbol 32 GraphicUsed by:91
Symbol 33 TextUses:9Used by:39
Symbol 34 TextUses:9Used by:39
Symbol 35 BitmapUsed by:36
Symbol 36 GraphicUses:35Used by:39
Symbol 37 TextUses:9Used by:39
Symbol 38 GraphicUsed by:39 45 51 57
Symbol 39 ButtonUses:33 11 34 36 37 38 15 16Used by:91 95
Symbol 40 TextUses:9Used by:45
Symbol 41 TextUses:9Used by:45
Symbol 42 BitmapUsed by:43
Symbol 43 GraphicUses:42Used by:45
Symbol 44 TextUses:9Used by:45
Symbol 45 ButtonUses:40 11 41 43 44 38 15 16Used by:91 95
Symbol 46 TextUses:9Used by:51
Symbol 47 TextUses:9Used by:51
Symbol 48 BitmapUsed by:49
Symbol 49 GraphicUses:48Used by:51
Symbol 50 TextUses:9Used by:51
Symbol 51 ButtonUses:46 11 47 49 50 38 15 16Used by:91 95
Symbol 52 TextUses:9Used by:57
Symbol 53 TextUses:9Used by:57
Symbol 54 BitmapUsed by:55
Symbol 55 GraphicUses:54Used by:57
Symbol 56 TextUses:9Used by:57
Symbol 57 ButtonUses:52 11 53 55 56 38 15 16Used by:91 95
Symbol 58 EditableTextUses:9Used by:63
Symbol 59 GraphicUsed by:63 75
Symbol 60 EditableTextUses:9Used by:63
Symbol 61 EditableTextUses:9Used by:63
Symbol 62 GraphicUsed by:63 75
Symbol 63 ButtonUses:58 59 60 61 62 15 16Used by:91
Symbol 64 GraphicUsed by:67
Symbol 65 GraphicUsed by:67 70
Symbol 66 GraphicUsed by:67
Symbol 67 ButtonUses:64 65 66Used by:71
Symbol 68 GraphicUsed by:70
Symbol 69 GraphicUsed by:70
Symbol 70 ButtonUses:68 69 65Used by:71
Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8}Uses:67 70Used by:91  Timeline
Symbol 72 EditableTextUses:9Used by:75
Symbol 73 EditableTextUses:9Used by:75
Symbol 74 EditableTextUses:9Used by:75
Symbol 75 ButtonUses:72 59 73 74 62 15 16Used by:91
Symbol 76 TextUses:9Used by:80
Symbol 77 TextUses:9Used by:80
Symbol 78 TextUses:9Used by:80
Symbol 79 TextUses:9Used by:80
Symbol 80 MovieClipUses:76 77 78 79Used by:91
Symbol 81 TextUses:9Used by:84
Symbol 82 TextUses:9Used by:84
Symbol 83 TextUses:9Used by:84
Symbol 84 MovieClipUses:81 82 83Used by:91
Symbol 85 TextUses:9Used by:90
Symbol 86 TextUses:9Used by:90
Symbol 87 TextUses:9Used by:90
Symbol 88 TextUses:9Used by:90
Symbol 89 TextUses:9Used by:90
Symbol 90 MovieClipUses:85 86 87 88 89Used by:91
Symbol 91 MovieClip {StartViewMc}Uses:5 28 31 32 39 45 51 57 63 71 75 80 84 90Used by:Timeline
Symbol 92 BitmapUsed by:93
Symbol 93 GraphicUses:92Used by:95
Symbol 94 TextUses:27Used by:95
Symbol 95 MovieClip {LoadGame}Uses:5 93 21 39 45 51 57 94Used by:Timeline
Symbol 96 GraphicUsed by:97
Symbol 97 MovieClipUses:96Used by:132  Timeline
Symbol 98 BitmapUsed by:99
Symbol 99 GraphicUses:98Used by:100
Symbol 100 MovieClipUses:99Used by:132
Symbol 101 BitmapUsed by:102
Symbol 102 GraphicUses:101Used by:103
Symbol 103 MovieClipUses:102Used by:132
Symbol 104 GraphicUsed by:105
Symbol 105 MovieClipUses:104Used by:110 111 129 130 131
Symbol 106 GraphicUsed by:107
Symbol 107 MovieClipUses:106Used by:110 111 129 130 131
Symbol 108 BitmapUsed by:109
Symbol 109 GraphicUses:108Used by:110 111 129 130 131
Symbol 110 MovieClipUses:105 107 109Used by:132
Symbol 111 MovieClipUses:105 107 109Used by:132
Symbol 112 TextUses:27Used by:132
Symbol 113 TextUses:27Used by:132
Symbol 114 BitmapUsed by:115
Symbol 115 GraphicUses:114Used by:132
Symbol 116 GraphicUsed by:117
Symbol 117 MovieClipUses:116Used by:124 128
Symbol 118 GraphicUsed by:119
Symbol 119 MovieClipUses:118Used by:124 128
Symbol 120 TextUses:27Used by:124
Symbol 121 TextUses:27Used by:124
Symbol 122 TextUses:27Used by:124
Symbol 123 TextUses:27Used by:124 128
Symbol 124 MovieClip {HScroll}Uses:117 119 120 121 122 123Used by:132  Timeline
Symbol 125 TextUses:27Used by:128
Symbol 126 TextUses:27Used by:128
Symbol 127 TextUses:27Used by:128
Symbol 128 MovieClip {VScroll}Uses:117 119 125 126 127 123Used by:132  Timeline
Symbol 129 MovieClipUses:107 105 109Used by:132
Symbol 130 MovieClipUses:107 105 109Used by:132
Symbol 131 MovieClipUses:105 107 109Used by:132
Symbol 132 MovieClip {InstructionsMc}Uses:97 100 103 110 111 112 113 115 124 128 129 130 131 21Used by:Timeline
Symbol 133 EditableTextUses:27Used by:138
Symbol 134 GraphicUsed by:138 143 147
Symbol 135 EditableTextUses:27Used by:138
Symbol 136 EditableTextUses:27Used by:138
Symbol 137 GraphicUsed by:138 147
Symbol 138 ButtonUses:133 134 135 136 137 15 16Used by:Timeline
Symbol 139 EditableTextUses:27Used by:143
Symbol 140 EditableTextUses:27Used by:143
Symbol 141 EditableTextUses:27Used by:143
Symbol 142 GraphicUsed by:143
Symbol 143 ButtonUses:139 134 140 141 142 15 16Used by:Timeline
Symbol 144 EditableTextUses:27Used by:147
Symbol 145 EditableTextUses:27Used by:147
Symbol 146 EditableTextUses:27Used by:147
Symbol 147 ButtonUses:144 134 145 146 137 15 16Used by:Timeline
Symbol 148 EditableTextUses:27Used by:Timeline
Symbol 149 EditableTextUses:27Used by:Timeline

Instance Names

"back"Frame 1Symbol 97 MovieClip
"hscroll"Frame 1Symbol 124 MovieClip {HScroll}
"vscroll"Frame 1Symbol 128 MovieClip {VScroll}
"stopBtn"Frame 1Symbol 138 Button
"shuffleBtn"Frame 1Symbol 143 Button
"muteUnmute"Frame 1Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8}
"saveBtn"Frame 1Symbol 147 Button
"timeTxt"Frame 1Symbol 149 EditableText
"instructions"Frame 1Symbol 132 MovieClip {InstructionsMc}
"loadGame"Frame 1Symbol 95 MovieClip {LoadGame}
"startView"Frame 1Symbol 91 MovieClip {StartViewMc}
"nextLevelView"Frame 1Symbol 26 MovieClip {NextLevelViewMc}
"timeTxt"Symbol 26 MovieClip {NextLevelViewMc} Frame 1Symbol 8 EditableText
"nextLevelBtn"Symbol 26 MovieClip {NextLevelViewMc} Frame 1Symbol 17 Button
"menuBtn"Symbol 26 MovieClip {NextLevelViewMc} Frame 1Symbol 21 Button
"replayBtn"Symbol 26 MovieClip {NextLevelViewMc} Frame 1Symbol 25 Button
"muteBtn"Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8} Frame 1Symbol 67 Button
"unmuteBtn"Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8} Frame 2Symbol 70 Button
"easyBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 39 Button
"normalBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 45 Button
"hardBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 51 Button
"veryHardBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 57 Button
"instructionsBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 63 Button
"loadGameBtn"Symbol 91 MovieClip {StartViewMc} Frame 1Symbol 75 Button
"menuBtn"Symbol 95 MovieClip {LoadGame} Frame 1Symbol 21 Button
"easyBtn"Symbol 95 MovieClip {LoadGame} Frame 1Symbol 39 Button
"normalBtn"Symbol 95 MovieClip {LoadGame} Frame 1Symbol 45 Button
"hardBtn"Symbol 95 MovieClip {LoadGame} Frame 1Symbol 51 Button
"veryHardBtn"Symbol 95 MovieClip {LoadGame} Frame 1Symbol 57 Button
"scrollBase"Symbol 124 MovieClip {HScroll} Frame 1Symbol 117 MovieClip
"scrollBar"Symbol 124 MovieClip {HScroll} Frame 1Symbol 119 MovieClip
"scrollBase"Symbol 128 MovieClip {VScroll} Frame 1Symbol 117 MovieClip
"scrollBar"Symbol 128 MovieClip {VScroll} Frame 1Symbol 119 MovieClip
"menuBtn"Symbol 132 MovieClip {InstructionsMc} Frame 1Symbol 21 Button

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.

Labels

"mute"Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8} Frame 1
"unmute"Symbol 71 MovieClip {cub_fla.MuteUnmuteBtn_8} Frame 2




http://swfchan.com/27/131532/info.shtml
Created: 21/2 -2019 06:41:22 Last modified: 21/2 -2019 06:41:22 Server time: 05/05 -2024 07:41:48