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 playlist:Array;
public var loop:Boolean;
public var fps:uint;
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 prefix:String;
public var loop:Boolean;
public var fps:Number;
public var smooth:Boolean;
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.*;
import away3d.core.math.*;
public class Bone extends ObjectContainer3D {
private var _jointTransform:Matrix3D;
public var joint:ObjectContainer3D;
private var _baseMatrix:Matrix3D;
public var id:String;
public function Bone(_arg1:Object=null, ... _args):void{
_baseMatrix = new Matrix3D();
_jointTransform = new Matrix3D();
super(_arg1);
addChild((joint = new ObjectContainer3D()));
}
public function set jointRotationX(_arg1:Number):void{
joint.rotationX = _arg1;
}
public function set jointScaleZ(_arg1:Number):void{
joint.scaleZ = _arg1;
}
public function set jointRotationZ(_arg1:Number):void{
joint.rotationZ = _arg1;
}
override public function cloneAll(_arg1:Object3D=null):Object3D{
var _local2:Bone = (((_arg1 as Bone)) || (new Bone()));
_local2.removeChild(joint);
super.cloneAll(_local2);
_local2.id = id;
_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 jointRotationZ():Number{
return (joint.rotationZ);
}
public function set jointScaleX(_arg1:Number):void{
joint.scaleX = _arg1;
}
public function get jointRotationY():Number{
return (joint.rotationY);
}
public function get jointScaleY():Number{
return (joint.scaleY);
}
public function set jointRotationY(_arg1:Number):void{
joint.rotationY = _arg1;
}
public function get jointScaleZ():Number{
return (joint.scaleZ);
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:Bone = (((_arg1 as Bone)) || (new Bone()));
super.clone(_local2);
_local2.joint = _local2.children[0];
return (_local2);
}
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.base.*;
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 weights:Array;
public var controllers:Array;
private var _position:Number3D;
private var _i:int;
public var baseVertex:Vertex;
private var _skinController:SkinController;
public var skinnedVertex:Vertex;
private var _sceneTransform:Matrix3D;
public function SkinVertex(_arg1:Vertex){
_position = new Number3D();
_sceneTransform = new Matrix3D();
weights = new Array();
controllers = new Array();
super();
skinnedVertex = _arg1;
baseVertex = _arg1.clone();
}
public function update():void{
var _local1:Boolean;
for each (_skinController in controllers) {
_local1 = ((_local1) || (_skinController.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 vertices:Array;
public var debug:Boolean;
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.draw.*;
import away3d.core.clip.*;
import away3d.cameras.*;
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 _sz:Number;
protected var _sx:Number;
protected var _near:Number;
protected var _screenVertex:ScreenVertex;
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 _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;
protected var _projected:ScreenVertex;
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;
}
}
}//package away3d.cameras.lenses
Section 10
//ILens (away3d.cameras.lenses.ILens)
package away3d.cameras.lenses {
import away3d.containers.*;
import away3d.core.draw.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.geom.*;
public interface ILens {
function getZoom():Number;
function getFOV():Number;
function project(_arg1:Matrix3D, _arg2:Vertex):ScreenVertex;
function getFrustum(_arg1:Object3D, _arg2:Matrix3D):Frustum;
function setView(_arg1:View3D):void;
}
}//package away3d.cameras.lenses
Section 11
//ZoomFocusLens (away3d.cameras.lenses.ZoomFocusLens)
package away3d.cameras.lenses {
import away3d.containers.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.geom.*;
public class ZoomFocusLens extends AbstractLens implements ILens {
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);
}
override public function setView(_arg1:View3D):void{
super.setView(_arg1);
if (_clipping.minZ == -(Infinity)){
_near = (_clipping.minZ = (-(_camera.focus) / 2));
} else {
_near = _clipping.minZ;
};
}
public function project(_arg1:Matrix3D, _arg2:Vertex):ScreenVertex{
_screenVertex = _drawPrimitiveStore.createScreenVertex(_arg2);
if (_screenVertex.viewTimer == _camera.view.viewTimer){
return (_screenVertex);
};
_screenVertex.viewTimer = _camera.view.viewTimer;
_vx = _arg2.x;
_vy = _arg2.y;
_vz = _arg2.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)))){
_screenVertex.visible = false;
return (_screenVertex);
};
_persp = (_camera.zoom / (1 + (_sz / _camera.focus)));
_screenVertex.x = ((_screenVertex.vx = ((((_vx * _arg1.sxx) + (_vy * _arg1.sxy)) + (_vz * _arg1.sxz)) + _arg1.tx)) * _persp);
_screenVertex.y = ((_screenVertex.vy = ((((_vx * _arg1.syx) + (_vy * _arg1.syy)) + (_vz * _arg1.syz)) + _arg1.ty)) * _persp);
_screenVertex.z = _sz;
_screenVertex.visible = true;
return (_screenVertex);
}
public function getZoom():Number{
return (((((_clipTop - _clipBottom) / Math.tan((_camera.fov * toRADIANS))) - (_clipTop * _clipBottom)) / _camera.focus));
}
public function getFOV():Number{
return ((Math.atan2((_clipTop - _clipBottom), ((_camera.focus * _camera.zoom) + (_clipTop * _clipBottom))) * toDEGREES));
}
}
}//package away3d.cameras.lenses
Section 12
//Camera3D (away3d.cameras.Camera3D)
package away3d.cameras {
import away3d.containers.*;
import away3d.events.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.cameras.lenses.*;
public class Camera3D extends Object3D {
protected const toDEGREES:Number = 57.2957795130823;
protected const toRADIANS:Number = 0.0174532925199433;
private var _y:Number;
private var _view:View3D;
private var _sz:Number;
private var _flipY:Matrix3D;
private var _fov:Number;// = 0
public var invViewMatrix:Matrix3D;
private var _clipping:Clipping;
private var _clipTop:Number;
private var _clipRight:Number;
private var _cameraVarsStore:CameraVarsStore;
private var _zoom:Number;// = 10
private var _clipBottom:Number;
private var _persp:Number;
private var _drawPrimitiveStore:DrawPrimitiveStore;
private var _zoomDirty:Boolean;
public var maxblur:Number;// = 150
private var _clipLeft:Number;
private var _focus:Number;
private var _lens:ILens;
private var _fovDirty:Boolean;
private var _viewMatrix:Matrix3D;
public var fixedZoom:Boolean;
public var doflevels:Number;// = 16
private var _vt:Matrix3D;
private var _aperture:Number;// = 22
private var _cameraupdated:CameraEvent;
private var _x:Number;
private var _z:Number;
private var _dof:Boolean;// = false
public function Camera3D(_arg1:Object=null){
_flipY = new Matrix3D();
_viewMatrix = new Matrix3D();
invViewMatrix = new Matrix3D();
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);
var _local2:Number3D = ini.getPosition("lookat");
_flipY.syy = -1;
if (_local2){
lookAt(_local2);
};
}
public function unproject(_arg1:Number, _arg2:Number):Number3D{
var _local3:Number = ((focus * zoom) / focus);
var _local4:Number3D = 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 set lens(_arg1:ILens):void{
if (_lens == _arg1){
return;
};
_lens = _arg1;
notifyCameraUpdate();
}
public function get aperture():Number{
return (_aperture);
}
public function get lens():ILens{
return (_lens);
}
public function get zoom():Number{
return (_zoom);
}
public function set aperture(_arg1:Number):void{
_aperture = _arg1;
DofCache.aperture = _aperture;
}
public function pan(_arg1:Number):void{
super.yaw(_arg1);
}
public function get view():View3D{
return (_view);
}
public function set fov(_arg1:Number):void{
if (_fov == _arg1){
return;
};
_fov = _arg1;
_fovDirty = false;
_zoomDirty = true;
notifyCameraUpdate();
}
public function set focus(_arg1:Number):void{
_focus = _arg1;
DofCache.focus = _focus;
notifyCameraUpdate();
}
public function set zoom(_arg1:Number):void{
if (_zoom == _arg1){
return;
};
_zoom = _arg1;
_zoomDirty = false;
_fovDirty = true;
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 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 get viewMatrix():Matrix3D{
invViewMatrix.multiply(sceneTransform, _flipY);
_viewMatrix.inverse(invViewMatrix);
return (_viewMatrix);
}
public function get fov():Number{
return (_fov);
}
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 set view(_arg1:View3D):void{
if (_view == _arg1){
return;
};
_view = _arg1;
_drawPrimitiveStore = _arg1.drawPrimitiveStore;
_cameraVarsStore = _arg1.cameraVarsStore;
}
public function get dof():Boolean{
return (_dof);
}
public function get focus():Number{
return (_focus);
}
public function disableDof():void{
DofCache.resetDof(false);
}
public function addOnCameraUpdate(_arg1:Function):void{
addEventListener(CameraEvent.CAMERA_UPDATED, _arg1, false, 0, false);
}
public function removeOnCameraUpdate(_arg1:Function):void{
removeEventListener(CameraEvent.CAMERA_UPDATED, _arg1, false);
}
public function screen(_arg1:Object3D, _arg2:Vertex=null):ScreenVertex{
if (_arg2 == null){
_arg2 = _arg1.center;
};
_cameraVarsStore.createViewTransform(_arg1).multiply(viewMatrix, _arg1.sceneTransform);
_drawPrimitiveStore.createVertexDictionary(_arg1);
return (lens.project(_cameraVarsStore.viewTransformDictionary[_arg1], _arg2));
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:Camera3D = (((_arg1 as Camera3D)) || (new Camera3D()));
super.clone(_local2);
_local2.zoom = zoom;
_local2.focus = focus;
_local2.lens = lens;
return (_local2);
}
}
}//package away3d.cameras
Section 13
//ILODObject (away3d.containers.ILODObject)
package away3d.containers {
import away3d.cameras.*;
public interface ILODObject {
function matchLOD(_arg1:Camera3D):Boolean;
}
}//package away3d.containers
Section 14
//IPhysicsScene (away3d.containers.IPhysicsScene)
package away3d.containers {
public interface IPhysicsScene {
function updateTime(_arg1:int):void;
}
}//package away3d.containers
Section 15
//ObjectContainer3D (away3d.containers.ObjectContainer3D)
package away3d.containers {
import away3d.events.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.traverse.*;
import away3d.animators.skin.*;
import away3d.loaders.data.*;
import away3d.loaders.utils.*;
import away3d.core.project.*;
public class ObjectContainer3D extends Object3D {
private var _radiusChild:Object3D;// = null
private var _children:Array;
public function ObjectContainer3D(... _args){
var _local2:Object;
var _local4:Object;
var _local5:Object3D;
_children = new Array();
var _local3:Array = [];
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 addChildren(... _args):void{
var _local2:Object3D;
for each (_local2 in _args) {
addChild(_local2);
};
}
public function addChild(_arg1:Object3D):void{
if (_arg1 == null){
throw (new Error("ObjectContainer3D.addChild(null)"));
};
_arg1.parent = this;
}
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.id){
if (_local2.id == _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 _local3:Object3D;
var _local2:ObjectContainer3D = (((_arg1 as ObjectContainer3D)) || (new ObjectContainer3D()));
super.clone(_local2);
for each (_local3 in children) {
if (!(_local3 is Bone)){
_local2.addChild(_local3.clone());
};
};
return (_local2);
}
public function cloneAll(_arg1:Object3D=null):Object3D{
var _local3:ObjectContainer3D;
var _local4:Object3D;
var _local6:AnimationData;
var _local7:MaterialData;
var _local2:ObjectContainer3D = (((_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);
};
};
var _local5:ObjectContainer3D = _local2;
while (_local5.parent) {
_local5 = _local5.parent;
};
if (_local2 == _local5){
cloneBones(_local2, _local5);
};
return (_local2);
}
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 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();
}
override public function applyRotations():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local17:Object3D;
var _local7:Number = (Math.PI / 180);
var _local8:Number = (rotationX * _local7);
var _local9:Number = (rotationY * _local7);
var _local10:Number = (rotationZ * _local7);
var _local11:Number = Math.sin(_local8);
var _local12:Number = Math.cos(_local8);
var _local13:Number = Math.sin(_local9);
var _local14:Number = Math.cos(_local9);
var _local15:Number = Math.sin(_local10);
var _local16:Number = Math.cos(_local10);
for each (_local17 in children) {
_local1 = _local17.x;
_local2 = _local17.y;
_local3 = _local17.z;
_local5 = _local2;
_local2 = ((_local5 * _local12) + (_local3 * -(_local11)));
_local3 = ((_local5 * _local11) + (_local3 * _local12));
_local4 = _local1;
_local1 = ((_local4 * _local14) + (_local3 * _local13));
_local3 = ((_local4 * -(_local13)) + (_local3 * _local14));
_local4 = _local1;
_local1 = ((_local4 * _local16) + (_local2 * -(_local15)));
_local2 = ((_local4 * _local15) + (_local2 * _local16));
_local17.moveTo(_local1, _local2, _local3);
};
rotationX = 0;
rotationY = 0;
rotationZ = 0;
}
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 _local2:Number;
var _local3:Number;
var _local4:Number3D;
var _local5:Object3D;
var _local1:Array = _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();
}
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);
}
function internalAddChild(_arg1:Object3D):void{
_children.push(_arg1);
_arg1.addOnTransformChange(onChildChange);
_arg1.addOnDimensionsChange(onChildChange);
notifyDimensionsChange();
if (((_session) && (!(_arg1.ownCanvas)))){
session.internalAddOwnSession(_arg1);
};
_sessionDirty = true;
}
private function cloneBones(_arg1:ObjectContainer3D, _arg2:ObjectContainer3D):void{
var _local3:Object3D;
var _local4:Geometry;
var _local5:Array;
var _local6:Bone;
var _local7:SkinController;
var _local8:Bone;
for each (_local3 in _arg1.children) {
if ((_local3 is ObjectContainer3D)){
(_local3 as ObjectContainer3D).cloneBones((_local3 as ObjectContainer3D), _arg2);
} else {
if ((_local3 is Mesh)){
_local4 = (_local3 as Mesh).geometry;
_local5 = _local4.skinControllers;
for each (_local7 in _local5) {
_local8 = _arg2.getBoneByName(_local7.name);
if (_local8){
_local7.joint = _local8.joint;
if (!(_local8.parent.parent is Bone)){
_local6 = _local8;
};
} else {
Debug.warning(("no joint found for " + _local7.name));
};
};
for each (_local7 in _local5) {
_local7.inverseTransform = _local3.parent.inverseSceneTransform;
};
};
};
};
}
public function removeChildByName(_arg1:String):void{
removeChild(getChildByName(_arg1));
}
function internalRemoveChild(_arg1:Object3D):void{
var _local2:int = 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 get children():Array{
return (_children);
}
}
}//package away3d.containers
Section 16
//Scene3D (away3d.containers.Scene3D)
package away3d.containers {
import flash.events.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.traverse.*;
public class Scene3D extends ObjectContainer3D {
private var _view:View3D;
public var physics:IPhysicsScene;
private var _lighttraverser:LightTraverser;
private var _projtraverser:ProjectionTraverser;
private var _mesh:Mesh;
private var _sessiontraverser:SessionTraverser;
private var _geometry:Geometry;
public var viewDictionary:Dictionary;
public var geometries:Dictionary;
private var _key:Object;
public var tickTraverser:TickTraverser;
public var updatedObjects:Dictionary;
public var meshes:Dictionary;
private var _viewArray:Array;
private var _autoUpdate:Boolean;
public var updatedSessions:Dictionary;
public var autoUpdate:Boolean;
private var _currentView:View3D;
public function Scene3D(... _args){
var _local2:Object;
var _local4:Object;
var _local6:Object3D;
_projtraverser = new ProjectionTraverser();
_sessiontraverser = new SessionTraverser();
_lighttraverser = new LightTraverser();
viewDictionary = new Dictionary(true);
tickTraverser = new TickTraverser();
var _local3:Array = [];
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);
var _local5:Object = 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);
};
}
public function updateTime(_arg1:int=-1):void{
if (_arg1 == -1){
_arg1 = getTimer();
};
tickTraverser.now = _arg1;
traverse(tickTraverser);
if (physics != null){
physics.updateTime(_arg1);
};
}
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();
};
}
public function update():void{
updatedObjects = new Dictionary(true);
updatedSessions = new Dictionary(true);
meshes = new Dictionary(true);
geometries = new Dictionary(true);
traverse(_lighttraverser);
for each (_view in viewDictionary) {
_view.camera.update();
_view.blockers = new Dictionary(true);
_view.drawPrimitiveStore.blockerDictionary = new Dictionary(true);
_view.cameraVarsStore.reset();
_view.blockerarray.clip = _view.screenClipping;
_projtraverser.view = _view;
traverse(_projtraverser);
};
for (_key in meshes) {
_mesh = (_key as Mesh);
_viewArray = meshes[_mesh];
for each (_view in _viewArray) {
_mesh.updateMaterials(_mesh, _view);
};
};
for each (_geometry in geometries) {
_geometry.updateElements();
};
traverse(_sessiontraverser);
}
function internalRemoveView(_arg1:View3D):void{
_arg1.removeEventListener(ViewEvent.UPDATE_SCENE, onUpdate);
}
function internalAddView(_arg1:View3D):void{
_arg1.addEventListener(ViewEvent.UPDATE_SCENE, onUpdate);
}
override public function get sceneTransform():Matrix3D{
if (_transformDirty){
_sceneTransformDirty = true;
};
if (_sceneTransformDirty){
notifySceneTransformChange();
};
return (transform);
}
}
}//package away3d.containers
Section 17
//View3D (away3d.containers.View3D)
package away3d.containers {
import flash.events.*;
import flash.display.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.cameras.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.traverse.*;
import away3d.materials.*;
import flash.geom.*;
import away3d.core.block.*;
import away3d.core.project.*;
import away3d.core.stats.*;
import away3d.blockers.*;
public class View3D extends Sprite {
private var _x:Number;
private var _internalsession:AbstractRenderSession;
private var _container:DisplayObject;
private var _stageHeight:Number;
private var _stageWidth:Number;
private var _renderComplete:ViewEvent;
var _movieClipSpriteProjector:MovieClipSpriteProjector;
private var _clipping:Clipping;
private var _renderer:IRenderer;
private var _ini:Init;
private var material:IUVMaterial;
private var _mouseIsOverView:Boolean;
public var background:Sprite;
private var _ddo:DrawDisplayObject;
private var _cameraVarsStore:CameraVarsStore;
var _spriteProjector:SpriteProjector;
var _objectContainerProjector:ObjectContainerProjector;
private var persp:Number;
private var _drawPrimitiveStore:DrawPrimitiveStore;
private var object:Object3D;
private var _camera:Camera3D;
private var _mousedown:Boolean;
private var _viewZero:Point;
private var sceneY:Number;
var _meshProjector:MeshProjector;
private var sceneX:Number;
public var sourceURL:String;
var _convexBlockProjector:ConvexBlockProjector;
private var _session:AbstractRenderSession;
private var _pritraverser:PrimitiveTraverser;
var _dofSpriteProjector:DofSpriteProjector;
private var _consumer:IPrimitiveConsumer;
private var sceneZ:Number;
public var mouseZeroMove:Boolean;
private var _screenClippingDirty:Boolean;
public var mouseObject:Object3D;
private var screenX:Number;
private var _cleared:Boolean;
private var screenZ:Number;// = INF
private var screenY:Number;
private var _updated:Boolean;
var _screenClipping:Clipping;
public var statsOpen:Boolean;
private var _scene:Scene3D;
public var forceUpdate:Boolean;
private var uv:UV;
private var _updatescene:ViewEvent;
public var statsPanel:Stats;
public var stats:Boolean;
public var viewTimer:int;
private var _loaderWidth:Number;
public var blockers:Dictionary;
private var _blocker:ConvexBlock;
private var _hitPointX:Number;
private var _hitPointY:Number;
private var _loaderDirty:Boolean;
public var blockerarray:BlockerArray;
var _dirSpriteProjector:DirSpriteProjector;
private var drawpri:DrawPrimitive;
private var primitive:DrawPrimitive;
private var _lastmove_mouseX:Number;
private var _lastmove_mouseY:Number;
var _interactiveLayer:Sprite;
private var _sc:ScreenVertex;
private var inv:Matrix3D;
public var mouseMaterial:IUVMaterial;
public var hud:Sprite;
private var _loaderHeight:Number;
private var _y:Number;
private var element:Object;
public function View3D(_arg1:Object=null){
_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();
_sc = new ScreenVertex();
inv = new Matrix3D();
background = new Sprite();
hud = new Sprite();
blockerarray = new BlockerArray();
super();
_ini = (Init.parse(_arg1) as Init);
var _local2:Boolean = _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);
_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 getMouseEvent(_arg1:String):MouseEvent3D{
var _local2:MouseEvent3D = 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 createStatsMenu(_arg1:Event):void{
statsPanel = new Stats(this, stage.frameRate);
statsOpen = false;
stage.addEventListener(Event.RESIZE, onStageResized);
}
public function addOnMouseOut(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false, 0, false);
}
function dispatchMouseEvent(_arg1:MouseEvent3D):void{
if (!hasEventListener(_arg1.type)){
return;
};
dispatchEvent(_arg1);
}
public function fireMouseEvent(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Boolean=false):void{
var _local9:int;
findHit(_internalsession, _arg2, _arg3);
var _local6:MouseEvent3D = getMouseEvent(_arg1);
var _local7:Array = [];
var _local8:Array = [];
_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);
buttonMode = false;
};
if (object != null){
_local6 = getMouseEvent(MouseEvent3D.MOUSE_OVER);
_local6.ctrlKey = _arg4;
_local6.shiftKey = _arg5;
dispatchMouseEvent(_local6);
_local8 = bubbleMouseEvent(_local6);
buttonMode = object.useHandCursor;
};
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));
};
if (object != null){
_local6 = getMouseEvent(MouseEvent3D.ROLL_OVER);
_local6.ctrlKey = _arg4;
_local6.shiftKey = _arg5;
traverseRollEvent(_local6, _local8.slice(_local9));
};
};
mouseObject = object;
mouseMaterial = material;
};
}
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 removeOnMouseUp(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_UP, _arg1, false);
}
public function getContainer():DisplayObject{
return (_session.getContainer(this));
}
public function removeOnMouseOut(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false);
}
public function addOnMouseOver(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false, 0, false);
}
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(hud);
}
public function get camera():Camera3D{
return (_camera);
}
private function onCameraUpdated(_arg1:CameraEvent):void{
_updated = true;
}
private function onMouseUp(_arg1:MouseEvent):void{
_mousedown = false;
fireMouseEvent(MouseEvent3D.MOUSE_UP, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey);
}
private function onSessionChange(_arg1:Object3DEvent):void{
_session.sessions = [_arg1.object.session];
}
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 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);
}
private function checkSession(_arg1:AbstractRenderSession):void{
if ((_arg1 is BitmapRenderSession)){
_container = _arg1.getContainer(this);
_hitPointX = (_hitPointX + _container.x);
_hitPointY = (_hitPointY + _container.y);
};
if (_arg1.getContainer(this).hitTestPoint(_hitPointX, _hitPointY)){
for each (primitive in _arg1.getConsumer(this).list()) {
checkPrimitive(primitive);
};
for each (_arg1 in _arg1.sessions) {
checkSession(_arg1);
};
};
if ((_arg1 is BitmapRenderSession)){
_container = _arg1.getContainer(this);
_hitPointX = (_hitPointX - _container.x);
_hitPointY = (_hitPointY - _container.y);
};
}
public function get cameraVarsStore():CameraVarsStore{
return (_cameraVarsStore);
}
public function addOnMouseDown(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false, 0, false);
}
public function set clipping(_arg1:Clipping):void{
if (_clipping == _arg1){
return;
};
if (_clipping){
_clipping.removeOnClippingUpdate(onClippingUpdated);
};
_clipping = _arg1;
_clipping.view = this;
if (_clipping){
_clipping.addOnClippingUpdate(onClippingUpdated);
} 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 get screenClipping():Clipping{
if (_screenClippingDirty){
_screenClippingDirty = false;
return ((_screenClipping = _clipping.screen(this, _loaderWidth, _loaderHeight)));
};
return (_screenClipping);
}
public function get scene():Scene3D{
return (_scene);
}
public function clear():void{
_updated = true;
if (_internalsession){
session.clear(this);
};
}
public function get session():AbstractRenderSession{
return (_session);
}
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 render():void{
viewTimer = getTimer();
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.screenvertex = _sc;
_ddo.calc();
_consumer = _session.getConsumer(this);
_consumer.primitive(_ddo);
};
for each (_blocker in blockers) {
_convexBlockProjector.blockers(_blocker, cameraVarsStore.viewTransformDictionary[_blocker], blockerarray);
};
_scene.traverse(_pritraverser);
_session.render(this);
_updated = false;
if (statsOpen){
statsPanel.updateStats(_session.getTotalFaces(this), camera);
};
Init.checkUnusedArguments();
fireMouseMoveEvent();
notifyRenderComplete();
}
public function get drawPrimitiveStore():DrawPrimitiveStore{
return (_drawPrimitiveStore);
}
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 notifyRenderComplete():void{
if (!_renderComplete){
_renderComplete = new ViewEvent(ViewEvent.RENDER_COMPLETE, this);
};
dispatchEvent(_renderComplete);
}
private function bubbleMouseEvent(_arg1:MouseEvent3D):Array{
var _local2:Object3D = _arg1.object;
var _local3:Array = [];
while (_local2 != null) {
_local3.unshift(_local2);
_local2.dispatchMouseEvent(_arg1);
_local2 = _local2.parent;
};
return (_local3);
}
public function removeOnMouseDown(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false);
}
private function onRollOut(_arg1:MouseEvent):void{
_mouseIsOverView = false;
fireMouseEvent(MouseEvent3D.MOUSE_OUT, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey);
}
public function addSourceURL(_arg1:String):void{
sourceURL = _arg1;
if (statsPanel){
statsPanel.addSourceURL(_arg1);
};
}
private function onCameraTransformChange(_arg1:Object3DEvent):void{
_updated = true;
}
private function onClippingUpdated(_arg1:ClippingEvent):void{
_updated = true;
}
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;
};
};
}
public function get updated():Boolean{
return (_updated);
}
private function onMouseDown(_arg1:MouseEvent):void{
_mousedown = true;
fireMouseEvent(MouseEvent3D.MOUSE_DOWN, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey);
}
private function traverseRollEvent(_arg1:MouseEvent3D, _arg2:Array):void{
var _local3:Object3D;
for each (_local3 in _arg2) {
_local3.dispatchMouseEvent(_arg1);
};
}
public function addOnMouseUp(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_UP, _arg1, false, 0, false);
}
public function addOnMouseMove(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false, 0, false);
}
private function onStageResized(_arg1:Event):void{
_screenClippingDirty = true;
}
public function get renderer():IRenderer{
return (_renderer);
}
public function removeOnMouseMove(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_MOVE, _arg1, false);
}
public function removeOnMouseOver(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_OVER, _arg1, false);
}
public function get clipping():Clipping{
return (_clipping);
}
private function onRollOver(_arg1:MouseEvent):void{
_mouseIsOverView = true;
fireMouseEvent(MouseEvent3D.MOUSE_OVER, mouseX, mouseY, _arg1.ctrlKey, _arg1.shiftKey);
}
}
}//package away3d.containers
Section 18
//Animation (away3d.core.base.Animation)
package away3d.core.base {
import flash.events.*;
import away3d.events.*;
import flash.utils.*;
public class Animation extends EventDispatcher implements IAnimation {
public var sequence:Array;
public var delay:Number;// = 0
public var cycleEvent:Boolean;// = false
public var sequenceEvent:Boolean;// = false
public var loop:Boolean;// = false
private var _latest:uint;// = 0
private var _cycle:AnimationEvent;
private var _sequenceupdate:AnimationEvent;
public var frame:Number;// = 0
public var smooth:Boolean;// = false
public var fps:Number;// = 24
private var _time:uint;
private var _transition:AnimationTransition;
private var _isRunning:Boolean;// = false
public var geometry:Geometry;
public var mesh:Mesh;
public function Animation(_arg1:Geometry){
sequence = [];
super();
geometry = _arg1;
_cycle = new AnimationEvent(AnimationEvent.CYCLE, this);
_sequenceupdate = new AnimationEvent(AnimationEvent.SEQUENCE_UPDATE, this);
}
public function get latest():uint{
return (_latest);
}
public function update():void{
var _local3:Number;
var _local4:Number;
if (((!(_isRunning)) && (!(sequenceEvent)))){
return;
};
var _local1:uint = getTimer();
frame = (frame + (((_local1 - _time) * fps) / 1000));
_time = _local1;
if (sequence.length == 1){
if (cycleEvent){
dispatchEvent(_cycle);
};
if (sequenceEvent){
dispatchEvent(_sequenceupdate);
};
if (!loop){
_isRunning = false;
};
_latest = 0;
frame = 0;
} else {
if (((loop) && (!(sequenceEvent)))){
while (frame > ((sequence.length - 1) + delay)) {
frame = (frame - ((sequence.length - 1) + delay));
};
} else {
if (frame > ((sequence.length - 1) + delay)){
frame = ((sequence.length - 1) + delay);
if (cycleEvent){
dispatchEvent(_cycle);
};
if (sequenceEvent){
dispatchEvent(_sequenceupdate);
};
if (!loop){
_isRunning = false;
};
};
};
};
var _local2:Number = frame;
if (!smooth){
_local2 = Math.round(_local2);
};
if (_local2 < 0){
_local2 = 0;
};
if (_local2 > (sequence.length - 1)){
_local2 = (sequence.length - 1);
};
if (_local2 == Math.round(_local2)){
geometry.frames[sequence[int(_local2)].frame].adjust(1);
} else {
_local3 = Math.floor(_local2);
_local4 = Math.ceil(_local2);
geometry.frames[sequence[int(_local3)].frame].adjust(1);
geometry.frames[sequence[int(_local4)].frame].adjust((_local2 - _local3));
if (((loop) || (sequenceEvent))){
if ((((((_latest == 0)) || (((_latest + 1) == sequence[int(_local3)].frame)))) || ((_latest == sequence[int(_local3)].frame)))){
_latest = sequence[int(_local3)].frame;
} else {
_latest = 0;
if (cycleEvent){
dispatchEvent(_cycle);
};
if (sequenceEvent){
dispatchEvent(_sequenceupdate);
};
};
} else {
if (((((cycleEvent) || (sequenceEvent))) || ((sequence.length == 2)))){
if (cycleEvent){
dispatchEvent(_cycle);
};
if (sequenceEvent){
dispatchEvent(_sequenceupdate);
};
};
};
};
if (_transition.interpolate < 1){
_transition.update();
};
}
public function interpolate():void{
var _local1 = (_transition == null);
if (_local1){
createTransition();
} else {
_transition.reset();
};
}
public function stop():void{
_isRunning = false;
_latest = 0;
}
public function start():void{
_time = getTimer();
_isRunning = true;
_latest = 0;
frame = 0;
}
public function get transitionValue():Number{
return (((_transition)==null) ? 10 : _transition.transitionValue);
}
public function createTransition():void{
if (_transition == null){
_transition = new AnimationTransition(geometry);
};
}
public function get isRunning():Boolean{
return (_isRunning);
}
public function set transitionValue(_arg1:Number):void{
createTransition();
_transition.transitionValue = _arg1;
}
}
}//package away3d.core.base
Section 19
//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){
_interpolate = 1;
_geom = _arg1;
setRef();
}
public function get interpolate():Number{
return (_interpolate);
}
public function update():void{
var _local1:Number;
var _local2:int;
if (_interpolate < 1){
_local1 = (1 - _interpolate);
_local2 = 0;
while (_local2 < _refFrame.length) {
_geom.vertices[_local2].x = ((_refFrame[_local2].x * _local1) + (_geom.vertices[_local2].x * _interpolate));
_geom.vertices[_local2].y = ((_refFrame[_local2].y * _local1) + (_geom.vertices[_local2].y * _interpolate));
_geom.vertices[_local2].z = ((_refFrame[_local2].z * _local1) + (_geom.vertices[_local2].z * _interpolate));
_local2++;
};
_interpolate = (_interpolate + _steps);
};
}
private function updateRef():void{
var _local1:int;
while (_local1 < _refFrame.length) {
_refFrame[_local1].x = _geom.vertices[_local1].x;
_refFrame[_local1].y = _geom.vertices[_local1].y;
_refFrame[_local1].z = _geom.vertices[_local1].z;
_local1++;
};
}
public function reset():void{
updateRef();
_interpolate = _steps;
}
private function setRef():void{
_refFrame = [];
var _local1:int;
while (_local1 < _geom.vertices.length) {
_refFrame.push(new Vertex(_geom.vertices[_local1].x, _geom.vertices[_local1].y, _geom.vertices[_local1].z));
_local1++;
};
}
public function set transitionValue(_arg1:Number):void{
_transitionvalue = ((_arg1)<1) ? 1 : _arg1;
_steps = (1 / _arg1);
}
public function get transitionValue():Number{
return (_transitionvalue);
}
}
}//package away3d.core.base
Section 20
//Billboard (away3d.core.base.Billboard)
package away3d.core.base {
import flash.events.*;
import away3d.events.*;
import away3d.core.utils.*;
import away3d.materials.*;
public class Billboard extends Element {
var _vertex:Vertex;
var _material:IBillboardMaterial;
private var _width:Number;
private var _scaling:Number;// = 1
private var _height:Number;
private var _rotation:Number;// = 0
private var _materialchanged:BillboardEvent;
public function Billboard(_arg1:Vertex, _arg2:IBillboardMaterial=null, _arg3:Number=10, _arg4:Number=10){
this.vertex = _arg1;
this.material = _arg2;
this.width = _arg3;
this.height = _arg4;
vertexDirty = true;
}
override public function get vertices():Array{
return ([_vertex]);
}
public function set vertex(_arg1:Vertex):void{
if (_arg1 == _vertex){
return;
};
if (_vertex != null){
_vertex.removeOnChange(onVertexValueChange);
};
_vertex = _arg1;
if (_vertex != null){
_vertex.addOnChange(onVertexValueChange);
};
notifyVertexChange();
}
public function set scaling(_arg1:Number):void{
if (_scaling == _arg1){
return;
};
_scaling = _arg1;
notifyMaterialChange();
}
public function get scaling():Number{
return (_scaling);
}
override public function get minZ():Number{
return (_vertex._z);
}
public function removeOnMaterialChange(_arg1:Function):void{
removeEventListener(SegmentEvent.MATERIAL_CHANGED, _arg1, false);
}
public function set width(_arg1:Number):void{
if (_width == _arg1){
return;
};
_width = _arg1;
notifyMaterialChange();
}
private function onVertexValueChange(_arg1:Event):void{
notifyVertexValueChange();
}
override public function get minY():Number{
return (_vertex._y);
}
function notifyMaterialChange():void{
if (!hasEventListener(BillboardEvent.MATERIAL_CHANGED)){
return;
};
if (_materialchanged == null){
_materialchanged = new BillboardEvent(BillboardEvent.MATERIAL_CHANGED, this);
};
dispatchEvent(_materialchanged);
}
override public function get maxX():Number{
return (_vertex._x);
}
public function get vertex():Vertex{
return (_vertex);
}
public function set material(_arg1:IBillboardMaterial):void{
if (_material == _arg1){
return;
};
_material = _arg1;
notifyMaterialChange();
}
public function get material():IBillboardMaterial{
return (_material);
}
public function get width():Number{
return (_width);
}
override public function get radius2():Number{
return (0);
}
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;
}
override public function get minX():Number{
return (_vertex._x);
}
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;
}
override public function get maxY():Number{
return (_vertex._y);
}
public function get height():Number{
return (_width);
}
public function addOnMaterialChange(_arg1:Function):void{
addEventListener(SegmentEvent.MATERIAL_CHANGED, _arg1, false, 0, true);
}
public function get x():Number{
return (_vertex.x);
}
public function get y():Number{
return (_vertex.y);
}
public function get z():Number{
return (_vertex.z);
}
public function set height(_arg1:Number):void{
if (_height == _arg1){
return;
};
_height = _arg1;
notifyMaterialChange();
}
public function set rotation(_arg1:Number):void{
if (_rotation == _arg1){
return;
};
_rotation = _arg1;
notifyMaterialChange();
}
override public function get maxZ():Number{
return (_vertex._z);
}
public function get rotation():Number{
return (_rotation);
}
}
}//package away3d.core.base
Section 21
//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;
private var _vertexvaluechanged:ElementEvent;
public var parent:Geometry;
var _visible:Boolean;// = true
function notifyVisibleChange():void{
if (!hasEventListener(ElementEvent.VISIBLE_CHANGED)){
return;
};
if (_visiblechanged == null){
_visiblechanged = new ElementEvent(ElementEvent.VISIBLE_CHANGED, this);
};
dispatchEvent(_visiblechanged);
}
public function addOnVertexChange(_arg1:Function):void{
addEventListener(ElementEvent.VERTEX_CHANGED, _arg1, false, 0, true);
}
public function get minX():Number{
return (-(Math.sqrt(radius2)));
}
public function get minY():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 removeOnVertexChange(_arg1:Function):void{
removeEventListener(ElementEvent.VERTEX_CHANGED, _arg1, false);
}
function notifyVertexChange():void{
if (!hasEventListener(ElementEvent.VERTEX_CHANGED)){
return;
};
if (_vertexchanged == null){
_vertexchanged = new ElementEvent(ElementEvent.VERTEX_CHANGED, this);
};
dispatchEvent(_vertexchanged);
}
public function set visible(_arg1:Boolean):void{
if (_arg1 == _visible){
return;
};
_visible = _arg1;
notifyVisibleChange();
}
public function get radius2():Number{
var _local2:Vertex;
var _local3:Number;
var _local1:Number = 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 get visible():Boolean{
return (_visible);
}
public function get maxX():Number{
return (Math.sqrt(radius2));
}
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);
}
function notifyVertexValueChange():void{
if (!hasEventListener(ElementEvent.VERTEXVALUE_CHANGED)){
return;
};
if (_vertexvaluechanged == null){
_vertexvaluechanged = new ElementEvent(ElementEvent.VERTEXVALUE_CHANGED, this);
};
dispatchEvent(_vertexvaluechanged);
}
public function addOnVertexValueChange(_arg1:Function):void{
addEventListener(ElementEvent.VERTEXVALUE_CHANGED, _arg1, false, 0, true);
}
public function removeOnVisibleChange(_arg1:Function):void{
removeEventListener(ElementEvent.VISIBLE_CHANGED, _arg1, false);
}
}
}//package away3d.core.base
Section 22
//Face (away3d.core.base.Face)
package away3d.core.base {
import flash.events.*;
import away3d.events.*;
import away3d.core.utils.*;
import away3d.core.math.*;
import away3d.materials.*;
public class Face extends Element {
var _uv2:UV;
private var _s:Number;
var _material:ITriangleMaterial;
private var _normal:Number3D;
var _v0:Vertex;
var _v1:Vertex;
var _v2:Vertex;
private var _mappingchanged:FaceEvent;
var _back:ITriangleMaterial;
private var _index:int;
public var faceVO:FaceVO;
private var _a:Number;
private var _b:Number;
private var _c:Number;
private var _materialchanged:FaceEvent;
var _uv0:UV;
var _uv1:UV;
public function Face(_arg1:Vertex, _arg2:Vertex, _arg3:Vertex, _arg4:ITriangleMaterial=null, _arg5:UV=null, _arg6:UV=null, _arg7:UV=null){
_normal = new Number3D();
faceVO = new FaceVO();
super();
this.v0 = _arg1;
this.v1 = _arg2;
this.v2 = _arg3;
this.material = _arg4;
this.uv0 = _arg5;
this.uv1 = _arg6;
this.uv2 = _arg7;
faceVO.face = this;
vertexDirty = true;
}
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();
}
private function onUVChange(_arg1:Event):void{
notifyMappingChange();
}
public function get area():Number{
_a = v0.position.distance(v1.position);
_b = v1.position.distance(v2.position);
_c = v2.position.distance(v0.position);
_s = (((_a + _b) + _c) / 2);
return (Math.sqrt((((_s * (_s - _a)) * (_s - _b)) * (_s - _c))));
}
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);
}
public function addOnMappingChange(_arg1:Function):void{
addEventListener(FaceEvent.MAPPING_CHANGED, _arg1, false, 0, true);
}
public function get material():ITriangleMaterial{
return (_material);
}
public function get uv0():UV{
return (_uv0);
}
public function get uv1():UV{
return (_uv1);
}
public function get uv2():UV{
return (_uv2);
}
override public function get radius2():Number{
var _local1:Number = (((_v0._x * _v0._x) + (_v0._y * _v0._y)) + (_v0._z * _v0._z));
var _local2:Number = (((_v1._x * _v1._x) + (_v1._y * _v1._y)) + (_v1._z * _v1._z));
var _local3:Number = (((_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);
}
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 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 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);
}
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();
}
public function removeOnMappingChange(_arg1:Function):void{
removeEventListener(FaceEvent.MAPPING_CHANGED, _arg1, false);
}
function notifyMappingChange():void{
if (!hasEventListener(FaceEvent.MAPPING_CHANGED)){
return;
};
if (_mappingchanged == null){
_mappingchanged = new FaceEvent(FaceEvent.MAPPING_CHANGED, this);
};
dispatchEvent(_mappingchanged);
}
public function set normalDirty(_arg1:Boolean):void{
vertexDirty = true;
}
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 invert():void{
var _local1:Vertex = this._v1;
var _local2:Vertex = this._v2;
var _local3:UV = this._uv1;
var _local4:UV = this._uv2;
this._v1 = _local2;
this._v2 = _local1;
this._uv1 = _local4;
this._uv2 = _local3;
notifyVertexChange();
notifyMappingChange();
}
public function get back():ITriangleMaterial{
return (_back);
}
private function updateVertexProperties():void{
var _local9:Number;
var _local10:Number;
vertexDirty = false;
var _local1:Number = (_v1.x - _v0.x);
var _local2:Number = (_v1.y - _v0.y);
var _local3:Number = (_v1.z - _v0.z);
var _local4:Number = (_v2.x - _v0.x);
var _local5:Number = (_v2.y - _v0.y);
var _local6:Number = (_v2.z - _v0.z);
var _local7:Number = ((_local2 * _local6) - (_local3 * _local5));
var _local8:Number = ((_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 get uvs():Array{
return ([_uv0, _uv1, _uv2]);
}
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);
}
public function set v0(_arg1:Vertex):void{
if (_v0 == _arg1){
return;
};
if (_v0){
_index = _v0.parents.indexOf(this);
if (_index != -1){
_v0.parents.splice(_index, 1);
};
};
_v0 = (faceVO.v0 = _arg1);
if (_v0){
_v0.parents.push(this);
};
vertexDirty = true;
}
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);
}
public function set v1(_arg1:Vertex):void{
if (_v1 == _arg1){
return;
};
if (_v1){
_index = _v1.parents.indexOf(this);
if (_index != -1){
_v1.parents.splice(_index, 1);
};
};
_v1 = (faceVO.v1 = _arg1);
if (_v1){
_v1.parents.push(this);
};
vertexDirty = true;
}
public function set v2(_arg1:Vertex):void{
if (_v2 == _arg1){
return;
};
if (_v2){
_index = _v2.parents.indexOf(this);
if (_index != -1){
_v2.parents.splice(_index, 1);
};
};
_v2 = (faceVO.v2 = _arg1);
if (_v2){
_v2.parents.push(this);
};
vertexDirty = true;
}
override public function get vertices():Array{
return ([_v0, _v1, _v2]);
}
public function get v0():Vertex{
return (_v0);
}
public function get v1():Vertex{
return (_v1);
}
public function get v2():Vertex{
return (_v2);
}
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 normal():Number3D{
if (vertexDirty){
updateVertexProperties();
};
return (_normal);
}
}
}//package away3d.core.base
Section 23
//Frame (away3d.core.base.Frame)
package away3d.core.base {
public class Frame implements IFrame {
public var vertexpositions:Array;
private var _vertexposition:VertexPosition;
public function Frame(){
vertexpositions = [];
super();
}
public function getIndexes(_arg1:Array):Array{
var _local2:Array = [];
for each (_vertexposition in vertexpositions) {
_local2.push(_vertexposition.getIndex(_arg1));
};
return (_local2);
}
public function adjust(_arg1:Number=1):void{
for each (_vertexposition in vertexpositions) {
_vertexposition.adjust(_arg1);
};
}
}
}//package away3d.core.base
Section 24
//Geometry (away3d.core.base.Geometry)
package away3d.core.base {
import flash.events.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.math.*;
import away3d.primitives.*;
import away3d.materials.*;
import away3d.animators.data.*;
import away3d.animators.skin.*;
import away3d.loaders.data.*;
public class Geometry extends EventDispatcher {
public var framenames:Dictionary;
private var _animation:Animation;
private var _skinController:SkinController;
public var materialDictionary:Dictionary;
private var _neighbour01:Dictionary;
private var _skinVertex:SkinVertex;
private var _fAngle:Number;
private var _n01:Face;
private var clonedskincontrollers:Dictionary;
private var _dispatchedDimensionsChange:Boolean;
private var _neighboursDirty:Boolean;// = true
private var _neighbour12:Dictionary;
private var _n12:Face;
private var _materialData:MaterialData;
private var _verticesDirty:Boolean;// = true
private var _neighbour20:Dictionary;
private var _vertices:Array;
private var _vertnormals:Dictionary;
private var _n20:Face;
private var _frame:int;
public var skinVertices:Array;
private var _animationgroup:AnimationGroup;
private var clonedskinvertices:Dictionary;
public var skinControllers:Array;
private var _sequencedone:AnimationEvent;
private var _vertfaces:Dictionary;
private var clonedvertices:Dictionary;
private var _fVectors:Array;
private var _fNormal:Number3D;
private var _billboards:Array;
public var frames:Dictionary;
private var _faces:Array;
private var _vertex:Vertex;
public var rootBone:Bone;
private var _vertfacesDirty:Boolean;// = true
private var _dimensionschanged:GeometryEvent;
private var _index:int;
public var cloneElementDictionary:Dictionary;
private var _vertnormalsDirty:Boolean;// = true
protected var ini:Init;
private var _cycle:AnimationEvent;
private var cloneduvs:Dictionary;
private var _activeprefix:String;
private var _segments:Array;
public function Geometry(){
_faces = [];
_segments = [];
_billboards = [];
materialDictionary = new Dictionary(true);
cloneElementDictionary = new Dictionary();
super();
}
public function removeFace(_arg1:Face):void{
var _local2:int = _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;
_arg1.notifyMappingChange();
_arg1.removeOnMappingChange(onFaceMappingChange);
_faces.splice(_local2, 1);
}
public function get elements():Array{
return (_billboards.concat(_faces, _segments));
}
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 _local19:Vertex;
var _local9:Number = (Math.PI / 180);
var _local10:Number = (_arg1 * _local9);
var _local11:Number = (_arg2 * _local9);
var _local12:Number = (_arg3 * _local9);
var _local13:Number = Math.sin(_local10);
var _local14:Number = Math.cos(_local10);
var _local15:Number = Math.sin(_local11);
var _local16:Number = Math.cos(_local11);
var _local17:Number = Math.sin(_local12);
var _local18:Number = 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 removeSegment(_arg1:Segment):void{
var _local2:int = _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 _local3:VertexPosition;
var _local2:Frame = new Frame();
for each (_local3 in _arg1.vertexpositions) {
_local2.vertexpositions.push(cloneVertexPosition(_local3));
};
return (_local2);
}
public function get billboards():Array{
return (_billboards);
}
public function removeOnSequenceDone(_arg1:Function):void{
removeEventListener(AnimationEvent.SEQUENCE_DONE, _arg1, false);
}
public function neighbour20(_arg1:Face):Face{
if (_neighboursDirty){
findNeighbours();
};
return (_neighbour20[_arg1]);
}
public function get transitionValue():Number{
return (_animation.transitionValue);
}
function getVertexNormal(_arg1:Vertex):Number3D{
if (_vertfacesDirty){
findVertFaces();
};
if (_vertnormalsDirty){
findVertNormals();
};
return (_vertnormals[_arg1]);
}
private function addElement(_arg1:Element):void{
_verticesDirty = true;
_arg1.addOnVertexChange(onElementVertexChange);
_arg1.addOnVertexValueChange(onElementVertexValueChange);
_arg1.parent = this;
notifyDimensionsChange();
}
public function removeOnCycle(_arg1:Function):void{
_animation.cycleEvent = false;
_animation.removeEventListener(AnimationEvent.CYCLE, _arg1, false);
}
public function quarterFace(_arg1:Face, _arg2:Dictionary=null):void{
if (_arg2 == null){
_arg2 = new Dictionary();
};
var _local3:Vertex = _arg1.v0;
var _local4:Vertex = _arg1.v1;
var _local5:Vertex = _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();
};
var _local6:Vertex = _arg2[_local3][_local4];
if (_local6 == null){
_local6 = Vertex.median(_local3, _local4);
_arg2[_local3][_local4] = _local6;
_arg2[_local4][_local3] = _local6;
};
var _local7:Vertex = _arg2[_local4][_local5];
if (_local7 == null){
_local7 = Vertex.median(_local4, _local5);
_arg2[_local4][_local5] = _local7;
_arg2[_local5][_local4] = _local7;
};
var _local8:Vertex = _arg2[_local5][_local3];
if (_local8 == null){
_local8 = Vertex.median(_local5, _local3);
_arg2[_local5][_local3] = _local8;
_arg2[_local3][_local5] = _local8;
};
var _local9:UV = _arg1.uv0;
var _local10:UV = _arg1.uv1;
var _local11:UV = _arg1.uv2;
var _local12:UV = UV.median(_local9, _local10);
var _local13:UV = UV.median(_local10, _local11);
var _local14:UV = UV.median(_local11, _local9);
var _local15:ITriangleMaterial = _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 = _billboards.indexOf(_arg1);
if (_local2 == -1){
return;
};
removeElement(_arg1);
if (_arg1.material){
removeMaterial(_arg1, _arg1.material);
};
_arg1.vertex.geometry = null;
_billboards.splice(_local2, 1);
}
private function onElementVertexChange(_arg1:ElementEvent):void{
_verticesDirty = true;
if ((_arg1.element is Face)){
(_arg1.element as Face).normalDirty = true;
_vertfacesDirty = true;
};
notifyDimensionsChange();
}
public function set transitionValue(_arg1:Number):void{
_animation.transitionValue = _arg1;
}
public function get isRunning():Boolean{
return (((_animation)!=null) ? _animation.isRunning : false);
}
public function removeOnMaterialUpdate(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, 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 play(_arg1:AnimationSequence):void{
var _local2:Boolean;
var _local3:String;
if (!_animation){
_animation = new Animation(this);
} else {
_animation.sequence = new Array();
};
_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 addSegment(_arg1:Segment):void{
addElement(_arg1);
if (_arg1.material){
addMaterial(_arg1, _arg1.material);
};
_arg1.v0.geometry = this;
_arg1.v1.geometry = this;
_segments.push(_arg1);
}
public function clone():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;
var _local1:Geometry = new Geometry();
clonedvertices = new Dictionary();
cloneduvs = new Dictionary();
if (skinVertices){
clonedskinvertices = new Dictionary(true);
clonedskincontrollers = new Dictionary(true);
_local1.skinVertices = new Array();
_local1.skinControllers = new Array();
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);
}
private function cloneVertex(_arg1:Vertex):Vertex{
var _local2:Vertex = 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 removeOnMappingChange(_arg1:Function):void{
removeEventListener(FaceEvent.MAPPING_CHANGED, _arg1, false);
}
public function addOnDimensionsChange(_arg1:Function):void{
addEventListener(GeometryEvent.DIMENSIONS_CHANGED, _arg1, false, 0, true);
}
public function get activePrefix():String{
return (_activeprefix);
}
public function addOnMaterialUpdate(_arg1:Function):void{
addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true);
}
public function quarterFaces():void{
var _local2:Face;
var _local1:Dictionary = new Dictionary();
for each (_local2 in _faces.concat([])) {
quarterFace(_local2, _local1);
};
}
public function updateMaterials(_arg1:Object3D, _arg2:View3D):void{
for each (_materialData in materialDictionary) {
_materialData.material.updateMaterial(_arg1, _arg2);
};
}
public function get frame():int{
return (_animation.frame);
}
public function addOnSequenceDone(_arg1:Function):void{
addEventListener(AnimationEvent.SEQUENCE_DONE, _arg1, false, 0, false);
}
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: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 = new Array();
for each (_local8 in _local6.vertices) {
if (_local8 != _local1){
_fVectors.push(new Number3D((_local8.x - _local1.x), (_local8.y - _local1.y), (_local8.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{
if (_animationgroup.playlist.length == 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 (_animationgroup.playlist.length == 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 addOnCycle(_arg1:Function):void{
_animation.cycleEvent = true;
_cycle = new AnimationEvent(AnimationEvent.CYCLE, _animation);
_animation.addEventListener(AnimationEvent.CYCLE, _arg1, false, 0, false);
}
public function set smooth(_arg1:Boolean):void{
_animation.smooth = _arg1;
}
public function get vertexDirty():Boolean{
for each (_vertex in vertices) {
if (_vertex.positionDirty){
return (true);
};
};
return (false);
}
private function onMaterialUpdate(_arg1:MaterialEvent):void{
dispatchEvent(_arg1);
}
public function get hasCycleEvent():Boolean{
return (_animation.hasEventListener(AnimationEvent.CYCLE));
}
public function splitFace(_arg1:Face, _arg2:int=0):void{
var _local9:Vertex;
var _local10:UV;
var _local3:Vertex = _arg1.v0;
var _local4:Vertex = _arg1.v1;
var _local5:Vertex = _arg1.v2;
var _local6:UV = _arg1.uv0;
var _local7:UV = _arg1.uv1;
var _local8:UV = _arg1.uv2;
var _local11:ITriangleMaterial = _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, _local8));
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 addFace(_arg1:Face):void{
addElement(_arg1);
if (_arg1.material){
addMaterial(_arg1, _arg1.material);
};
_vertfacesDirty = true;
_arg1.v0.geometry = this;
_arg1.v1.geometry = this;
_arg1.v2.geometry = this;
_arg1.addOnMappingChange(onFaceMappingChange);
_faces.push(_arg1);
}
public function addBillboard(_arg1:Billboard):void{
addElement(_arg1);
if (_arg1.material){
addMaterial(_arg1, _arg1.material);
};
_arg1.vertex.geometry = this;
_billboards.push(_arg1);
}
public function triFace(_arg1:Face):void{
var _local2:Vertex = _arg1.v0;
var _local3:Vertex = _arg1.v1;
var _local4:Vertex = _arg1.v2;
var _local5:Vertex = 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));
var _local6:UV = _arg1.uv0;
var _local7:UV = _arg1.uv1;
var _local8:UV = _arg1.uv2;
var _local9:UV = new UV((((_local6.u + _local7.u) + _local8.u) / 3), (((_local6.v + _local7.v) + _local8.v) / 3));
var _local10:ITriangleMaterial = _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));
}
private function cloneVertexPosition(_arg1:VertexPosition):VertexPosition{
var _local2:VertexPosition = new VertexPosition(cloneVertex(_arg1.vertex));
_local2.x = _arg1.x;
_local2.y = _arg1.y;
_local2.z = _arg1.z;
return (_local2);
}
private function onFaceMappingChange(_arg1:FaceEvent):void{
dispatchEvent(_arg1);
}
private function cloneSkinController(_arg1:SkinController):SkinController{
var _local2:SkinController = clonedskincontrollers[_arg1];
if (_local2 == null){
_local2 = new SkinController();
_local2.name = _arg1.name;
_local2.bindMatrix = _arg1.bindMatrix;
clonedskincontrollers[_arg1] = _local2;
};
return (_local2);
}
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);
};
}
public function get faces():Array{
return (_faces);
}
private function cloneSkinVertex(_arg1:SkinVertex):SkinVertex{
var _local2:SkinVertex = clonedskinvertices[_arg1];
if (_local2 == null){
_local2 = new SkinVertex(cloneVertex(_arg1.skinnedVertex));
_local2.weights = _arg1.weights.concat();
for each (_skinController in _arg1.controllers) {
_local2.controllers.push(cloneSkinController(_skinController));
};
clonedskinvertices[_arg1] = _local2;
};
return (_local2);
}
public function addOnMappingChange(_arg1:Function):void{
addEventListener(FaceEvent.MAPPING_CHANGED, _arg1, false, 0, true);
}
private function onElementVertexValueChange(_arg1:ElementEvent):void{
if ((_arg1.element is Face)){
(_arg1.element as Face).normalDirty = true;
};
notifyDimensionsChange();
}
private function cloneUV(_arg1:UV):UV{
if (_arg1 == null){
return (null);
};
var _local2:UV = 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 get segments():Array{
return (_segments);
}
public function set fps(_arg1:int):void{
_animation.fps = ((_arg1)>=1) ? _arg1 : 1;
}
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 gotoAndPlay(_arg1:int):void{
_frame = (_animation.frame = _arg1);
frames[_frame].adjust(1);
if (!_animation.isRunning){
_animation.start();
};
}
private function removeElement(_arg1:Element):void{
_verticesDirty = true;
_arg1.removeOnVertexChange(onElementVertexChange);
_arg1.removeOnVertexValueChange(onElementVertexValueChange);
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 neighbour01(_arg1:Face):Face{
if (_neighboursDirty){
findNeighbours();
};
return (_neighbour01[_arg1]);
}
public function get hasSequenceEvent():Boolean{
return (hasEventListener(AnimationEvent.SEQUENCE_DONE));
}
public function updateElements():void{
_dispatchedDimensionsChange = false;
for each (_skinController in skinControllers) {
_skinController.update();
};
for each (_skinVertex in skinVertices) {
_skinVertex.update();
};
if (((!((_animation == null))) && (!((frames == null))))){
_animation.update();
};
if (vertexDirty){
notifyDimensionsChange();
};
}
public function set frame(_arg1:int):void{
if (_animation.frame == _arg1){
return;
};
_frame = _arg1;
_animation.frame = _arg1;
frames[_arg1].adjust(1);
}
public function triFaces():void{
var _local1:Face;
for each (_local1 in _faces.concat([])) {
triFace(_local1);
};
}
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 setPlaySequences(_arg1:Array, _arg2:Boolean=false):void{
if (_arg1.length == 0){
return;
};
if (!_animation){
_animation = new Animation(this);
};
_animationgroup = new AnimationGroup();
_animationgroup.loopLast = _arg2;
_animationgroup.playlist = [];
var _local3:int;
while (_local3 < _arg1.length) {
_animationgroup.playlist[_local3] = new AnimationSequence(_arg1[_local3].prefix, _arg1[_local3].smooth, true, _arg1[_local3].fps);
_local3++;
};
if (!_animation.hasEventListener(AnimationEvent.SEQUENCE_UPDATE)){
_animation.addEventListener(AnimationEvent.SEQUENCE_UPDATE, updatePlaySequence);
};
_animation.sequenceEvent = true;
loop = true;
play(_animationgroup.playlist.shift());
}
public function gotoAndStop(_arg1:int):void{
_frame = (_animation.frame = _arg1);
frames[_frame].adjust(1);
if (_animation.isRunning){
_animation.stop();
};
}
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 get vertices():Array{
var _local1:Dictionary;
var _local2:Element;
var _local3:Vertex;
if (_verticesDirty){
_vertices = [];
_local1 = new Dictionary();
for each (_local2 in elements) {
for each (_local3 in _local2.vertices) {
if (!_local1[_local3]){
_vertices.push(_local3);
_local1[_local3] = true;
};
};
};
_verticesDirty = false;
};
return (_vertices);
}
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();
};
}
function getFacesByVertex(_arg1:Vertex):Array{
if (_vertfacesDirty){
findVertFaces();
};
return (_vertfaces[_arg1]);
}
public function neighbour12(_arg1:Face):Face{
if (_neighboursDirty){
findNeighbours();
};
return (_neighbour12[_arg1]);
}
}
}//package away3d.core.base
Section 25
//IAnimation (away3d.core.base.IAnimation)
package away3d.core.base {
public interface IAnimation {
function update():void;
}
}//package away3d.core.base
Section 26
//IFrame (away3d.core.base.IFrame)
package away3d.core.base {
public interface IFrame {
function adjust(_arg1:Number=1):void;
}
}//package away3d.core.base
Section 27
//Mesh (away3d.core.base.Mesh)
package away3d.core.base {
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.utils.*;
import away3d.core.math.*;
import away3d.materials.*;
import away3d.animators.data.*;
import away3d.core.project.*;
public class Mesh extends Object3D {
public var indexes:Array;
private var _faceMaterial:ITriangleMaterial;
private var _scenevertnormalsDirty:Boolean;// = true
private var _material:IMaterial;
private var _uvMaterial:IUVMaterial;
private var _billboardMaterial:IBillboardMaterial;
public var bothsides:Boolean;
public var type:String;// = "mesh"
private var _segmentMaterial:ISegmentMaterial;
private var _face:Face;
public var outline:ISegmentMaterial;
private var _back:ITriangleMaterial;
private var _geometry:Geometry;
private var _scenevertnormals:Dictionary;
public var url:String;
public function Mesh(_arg1:Object=null){
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 removeFace(_arg1:Face):void{
_geometry.removeFace(_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 gotoAndStop(_arg1:int):void{
geometry.gotoAndStop(_arg1);
}
private function onMaterialUpdate(_arg1:MaterialEvent):void{
_sessionDirty = true;
}
public function addOnSequenceDone(_arg1:Function):void{
geometry.addOnSequenceDone(_arg1);
}
public function triFaces():void{
_geometry.triFaces();
}
public function playFrames(_arg1:Array, _arg2:uint, _arg3:Boolean=true, _arg4:Boolean=false):void{
geometry.playFrames(_arg1, _arg2, _arg3, _arg4);
}
public function get billboards():Array{
return (_geometry.billboards);
}
public function splitFace(_arg1:Face, _arg2:int=0):void{
_geometry.splitFace(_arg1, _arg2);
}
public function get transitionValue():Number{
return (geometry.transitionValue);
}
public function get hasCycleEvent():Boolean{
return (geometry.hasCycleEvent);
}
public function get billboardMaterial():IBillboardMaterial{
return (_billboardMaterial);
}
public function get segments():Array{
return (_geometry.segments);
}
public function removeOnCycle(_arg1:Function):void{
geometry.removeOnCycle(_arg1);
}
public function get faceMaterial():ITriangleMaterial{
return (_faceMaterial);
}
public function addFace(_arg1:Face):void{
_geometry.addFace(_arg1);
}
public function cloneAll(_arg1:Object3D=null):Object3D{
var _local2:Mesh = (((_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 material():IMaterial{
return (_material);
}
public function triFace(_arg1:Face):void{
_geometry.triFace(_arg1);
}
private function onFaceMappingChange(_arg1:FaceEvent):void{
_sessionDirty = true;
if (_arg1.face.material){
_uvMaterial = (_arg1.face.material as IUVMaterial);
} else {
_uvMaterial = (_faceMaterial as IUVMaterial);
};
if (_uvMaterial){
_uvMaterial.getFaceMaterialVO(_arg1.face.faceVO, this).invalidated = true;
};
}
public function removeBillboard(_arg1:Billboard):void{
_geometry.removeBillboard(_arg1);
}
public function addBillboard(_arg1:Billboard):void{
_geometry.addBillboard(_arg1);
}
public function set billboardMaterial(_arg1:IBillboardMaterial):void{
if (_billboardMaterial == _arg1){
return;
};
removeMaterial(_billboardMaterial);
addMaterial((_billboardMaterial = _arg1));
}
public function quarterFace(_arg1:Face):void{
_geometry.quarterFace(_arg1);
}
public function removeSegment(_arg1:Segment):void{
_geometry.removeSegment(_arg1);
}
public function asXML():XML{
var refvertices:Dictionary;
var verticeslist:Array;
var refuvs:Dictionary;
var uvslist:Array;
var face:Face;
var vn:int;
var v:Vertex;
var uvn:int;
var uv:UV;
var f:Face;
var result:XML = <mesh></mesh>
;
refvertices = new Dictionary();
verticeslist = [];
var remembervertex:Function = function (_arg1:Vertex):void{
if (refvertices[_arg1] == null){
refvertices[_arg1] = verticeslist.length;
verticeslist.push(_arg1);
};
};
refuvs = new Dictionary();
uvslist = [];
var rememberuv:Function = 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);
}
public function play(_arg1:AnimationSequence):void{
geometry.play(_arg1);
}
public function get isRunning():Boolean{
return (geometry.isRunning);
}
override public function applyPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{
_geometry.applyPosition(_arg1, _arg2, _arg3);
var _local4:Number3D = 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 activePrefix():String{
return (geometry.activePrefix);
}
public function invertFaces():void{
_geometry.invertFaces();
}
public function get faces():Array{
return (_geometry.faces);
}
public function set transitionValue(_arg1:Number):void{
geometry.transitionValue = _arg1;
}
public function splitFaces(_arg1:int=0):void{
_geometry.splitFaces(_arg1);
}
public function set faceMaterial(_arg1:ITriangleMaterial):void{
if (_faceMaterial == _arg1){
return;
};
removeMaterial(_faceMaterial);
addMaterial((_faceMaterial = _arg1));
}
private function removeMaterial(_arg1:IMaterial):void{
if (!_arg1){
return;
};
_arg1.removeOnMaterialUpdate(onMaterialUpdate);
}
public function removeOnSequenceDone(_arg1:Function):void{
geometry.removeOnSequenceDone(_arg1);
}
public function updateVertex(_arg1:Vertex, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):void{
_geometry.updateVertex(_arg1, _arg2, _arg3, _arg4, _arg5);
}
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 set loop(_arg1:Boolean):void{
geometry.loop = _arg1;
}
public function set fps(_arg1:int):void{
geometry.fps = _arg1;
}
public function setPlaySequences(_arg1:Array, _arg2:Boolean=false):void{
geometry.setPlaySequences(_arg1, _arg2);
}
public function set back(_arg1:ITriangleMaterial):void{
if (_back == _arg1){
return;
};
removeMaterial(_back);
addMaterial((_back = _arg1));
}
public function gotoAndPlay(_arg1:int):void{
geometry.gotoAndPlay(_arg1);
}
public function addSegment(_arg1:Segment):void{
_geometry.addSegment(_arg1);
}
public function set frame(_arg1:int):void{
geometry.frame = _arg1;
}
private function onDimensionsChange(_arg1:GeometryEvent):void{
_sessionDirty = true;
notifyDimensionsChange();
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:Mesh = (((_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 get hasSequenceEvent():Boolean{
return (geometry.hasSequenceEvent);
}
public function set geometry(_arg1:Geometry):void{
if (_geometry == _arg1){
return;
};
if (_geometry != null){
_geometry.removeOnMaterialUpdate(onMaterialUpdate);
_geometry.removeOnMappingChange(onFaceMappingChange);
_geometry.removeOnDimensionsChange(onDimensionsChange);
};
_geometry = _arg1;
if (_geometry != null){
_geometry.addOnMaterialUpdate(onMaterialUpdate);
_geometry.addOnMappingChange(onFaceMappingChange);
_geometry.addOnDimensionsChange(onDimensionsChange);
};
}
public function addOnCycle(_arg1:Function):void{
geometry.addOnCycle(_arg1);
}
public function get back():ITriangleMaterial{
return (_back);
}
private function addMaterial(_arg1:IMaterial):void{
if (!_arg1){
return;
};
_arg1.addOnMaterialUpdate(onMaterialUpdate);
}
public function asAS3Class(_arg1:String=null, _arg2:String="", _arg3:Boolean=false, _arg4:Boolean=false):String{
var refvertices:Dictionary;
var verticeslist:Array;
var refuvs:Dictionary;
var uvslist:Array;
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"));
var importextra:String = (animated) ? "\timport flash.utils.Dictionary;\n" : "";
var 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 = [];
var remembervertex:Function = function (_arg1:Vertex):void{
if (refvertices[_arg1] == null){
refvertices[_arg1] = verticeslist.length;
verticeslist.push(_arg1);
};
};
refuvs = new Dictionary();
uvslist = [];
var rememberuv:Function = 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 = new Array();
tmpnames = new Array();
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 = new Object();\n");
myPattern = new RegExp(" ", "g");
for (framename in geometry.framenames) {
tmpnames.push(framename);
};
tmpnames.sort();
i = 0;
while (i < tmpnames.length) {
avp = new Array();
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 quarterFaces():void{
_geometry.quarterFaces();
}
public function set smooth(_arg1:Boolean):void{
geometry.smooth = _arg1;
}
public function get frame():int{
return (geometry.frame);
}
public function get geometry():Geometry{
return (_geometry);
}
public function set segmentMaterial(_arg1:ISegmentMaterial):void{
if (_segmentMaterial == _arg1){
return;
};
removeMaterial(_segmentMaterial);
addMaterial((_segmentMaterial = _arg1));
}
public function get elements():Array{
return (_geometry.elements);
}
public function get vertices():Array{
return (_geometry.vertices);
}
public function get segmentMaterial():ISegmentMaterial{
return (_segmentMaterial);
}
override protected function updateDimensions():void{
var _local1:Array;
var _local2:Number;
var _local3:Number;
var _local4:Number3D;
var _local5:Vertex;
_local1 = geometry.vertices.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.modulo2;
if (_local2 < _local3){
_local2 = _local3;
};
};
if (_local2){
_boundingRadius = Math.sqrt(_local2);
} else {
_boundingRadius = 0;
};
_local1.sortOn("x", (Array.DESCENDING | Array.NUMERIC));
_maxX = _local1[0].x;
_minX = _local1[(_local1.length - 1)].x;
_local1.sortOn("y", (Array.DESCENDING | Array.NUMERIC));
_maxY = _local1[0].y;
_minY = _local1[(_local1.length - 1)].y;
_local1.sortOn("z", (Array.DESCENDING | Array.NUMERIC));
_maxZ = _local1[0].z;
_minZ = _local1[(_local1.length - 1)].z;
};
super.updateDimensions();
}
override public function applyRotations():void{
_geometry.applyRotations(rotationX, rotationY, rotationZ);
rotationX = 0;
rotationY = 0;
rotationZ = 0;
}
}
}//package away3d.core.base
Section 28
//Object3D (away3d.core.base.Object3D)
package away3d.core.base {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.math.*;
import away3d.primitives.*;
import away3d.core.light.*;
import away3d.core.traverse.*;
import away3d.loaders.utils.*;
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 _maxY:Number;// = 0
var _maxZ:Number;// = 0
var _sceneTransform:Matrix3D;
private var _vector:Number3D;
public var center:Vertex;
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;
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;
var _scene:Scene3D;
private var _debugBoundingBox:WireCube;
public var materialLibrary:MaterialLibrary;
public var inverseSceneTransform:Matrix3D;
private var _parentradius:Number3D;
public var screenZOffset:Number;
public var useHandCursor:Boolean;// = false
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{
_transform = new Matrix3D();
_sceneTransform = new Matrix3D();
_lookingAtTarget = new Number3D();
_eulers = new Number3D();
_pivotPoint = new Number3D();
_scenePivotPoint = new Number3D();
_parentradius = 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();
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);
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");
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 == _parent.scene){
return;
};
_scene = _parent.scene;
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;
}
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);
}
private function updateLights():void{
if (!_ownLights){
_lightarray = parent.lightarray;
} else {
_lightarray = new LightArray();
};
_lightsDirty = false;
}
public function get minY():Number{
if (_dimensionsDirty){
updateDimensions();
};
return (_minY);
}
public function removeOnSceneTransformChange(_arg1:Function):void{
removeEventListener(Object3DEvent.SCENETRANSFORM_CHANGED, _arg1, false);
}
public function get minX():Number{
if (_dimensionsDirty){
updateDimensions();
};
return (_minX);
}
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 scaleY():Number{
return (_scaleY);
}
function notifySceneChange():void{
_sceneTransformDirty = true;
if (!hasEventListener(Object3DEvent.SCENE_CHANGED)){
return;
};
if (!_scenechanged){
_scenechanged = new Object3DEvent(Object3DEvent.SCENE_CHANGED, this);
};
dispatchEvent(_scenechanged);
}
public function set eulers(_arg1:Number3D):void{
_rotationX = (_arg1.x * toRADIANS);
_rotationY = (_arg1.y * toRADIANS);
_rotationZ = (_arg1.z * toRADIANS);
_transformDirty = true;
}
public function get scaleX():Number{
return (_scaleX);
}
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();
}
public function addOnMouseDown(_arg1:Function):void{
addEventListener(MouseEvent3D.MOUSE_DOWN, _arg1, false, 0, false);
}
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 visible():Boolean{
return (_visible);
}
public function addOnDimensionsChange(_arg1:Function):void{
addEventListener(Object3DEvent.DIMENSIONS_CHANGED, _arg1, false, 0, true);
}
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 moveUp(_arg1:Number):void{
translate(Number3D.UP, _arg1);
}
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);
}
public function get objectDepth():Number{
if (_dimensionsDirty){
updateDimensions();
};
return ((_maxZ - _minZ));
}
private function changeSession():void{
if (_ownSession){
_session = _ownSession;
} else {
if (_parent){
_session = _parent.session;
} else {
_session = null;
};
};
_sessionDirty = true;
}
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;
}
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;
}
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 get lightarray():ILightConsumer{
if (_lightsDirty){
updateLights();
};
return (_lightarray);
}
public function removeOnMouseOut(_arg1:Function):void{
removeEventListener(MouseEvent3D.MOUSE_OUT, _arg1, false);
}
function dispatchMouseEvent(_arg1:MouseEvent3D):Boolean{
if (!hasEventListener(_arg1.type)){
return (false);
};
dispatchEvent(_arg1);
return (true);
}
public function addOnRollOut(_arg1:Function):void{
addEventListener(MouseEvent3D.ROLL_OUT, _arg1, false, 0, false);
}
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 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 blendMode(_arg1:String):void{
if (_blendMode == _arg1){
return;
};
_blendMode = _arg1;
if (_ownSession){
_ownSession.blendMode = _blendMode;
};
}
public function set rotationZ(_arg1:Number):void{
if (rotationZ == _arg1){
return;
};
_rotationZ = (_arg1 * toRADIANS);
_transformDirty = true;
}
public function set rotationX(_arg1:Number):void{
if (rotationX == _arg1){
return;
};
_rotationX = (_arg1 * toRADIANS);
_transformDirty = true;
}
public function set rotationY(_arg1:Number):void{
if (rotationY == _arg1){
return;
};
_rotationY = (_arg1 * toRADIANS);
_transformDirty = true;
}
public function pitch(_arg1:Number):void{
rotate(Number3D.RIGHT, _arg1);
}
public function centerPivot():void{
var _local1:Number3D = new Number3D(((maxX + minX) / 2), ((maxY + minY) / 2), ((maxZ + minZ) / 2));
movePivot(_local1.x, _local1.y, _local1.z);
moveTo(_local1.x, _local1.y, _local1.z);
}
public function get ownLights():Boolean{
return (_ownLights);
}
public function rotateTo(_arg1:Number, _arg2:Number, _arg3:Number):void{
_rotationX = (-(_arg1) * toRADIANS);
_rotationY = (-(_arg2) * toRADIANS);
_rotationZ = (-(_arg3) * toRADIANS);
_rotationDirty = false;
_transformDirty = true;
}
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 scale(_arg1:Number):void{
_scaleX = (_scaleY = (_scaleZ = _arg1));
_transformDirty = true;
_dimensionsDirty = true;
}
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 = ((_scene == this)) ? transform : sceneTransform;
var _local3:Matrix3D = ((_arg1.scene == _arg1)) ? _arg1.transform : _arg1.sceneTransform;
var _local4:Number = (_local2.tx - _local3.tx);
var _local5:Number = (_local2.ty - _local3.ty);
var _local6:Number = (_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){
notifySceneChange();
};
if (((!(_ownSession)) && (((!(_parent)) || (!((_session == _parent.session))))))){
notifySessionChange();
};
_sceneTransformDirty = true;
_localTransformDirty = true;
}
public function get boundingRadius():Number{
if (_dimensionsDirty){
updateDimensions();
};
return (_boundingRadius);
}
public function removeOnParentUpdate(_arg1:Function):void{
removeEventListener(Object3DEvent.PARENT_UPDATED, _arg1, false);
}
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 = ((_arg1) || (new Object3D()));
_local2.transform = transform;
_local2.name = name;
_local2.ownCanvas = _ownCanvas;
_local2.renderer = _renderer;
_local2.filters = _filters.concat();
_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;
};
}
private function updateRotation():void{
_rot.matrix2euler(_transform, _scaleX, _scaleY, _scaleZ);
_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 get maxX():Number{
if (_dimensionsDirty){
updateDimensions();
};
return (_maxX);
}
public function updateObject():void{
if (_objectDirty){
_scene.updatedObjects[this] = this;
_objectDirty = false;
_sessionDirty = true;
};
}
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);
}
public function set renderer(_arg1:IPrimitiveConsumer):void{
if (_renderer == _arg1){
return;
};
_renderer = _arg1;
if (_ownSession){
_ownSession.renderer = _renderer;
};
_sessionDirty = true;
}
protected function updateDimensions():void{
_dimensionsDirty = false;
_dispatchedDimensionsChange = false;
if (debugbb){
if (!_debugBoundingBox){
_debugBoundingBox = new WireCube({material:"#333333"});
};
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});
};
if (_boundingRadius){
_debugBoundingSphere.visible = true;
_debugBoundingSphere.radius = _boundingRadius;
_debugBoundingSphere.updateObject();
_debugBoundingSphere.applyPosition(-(_pivotPoint.x), -(_pivotPoint.y), -(_pivotPoint.z));
} else {
debugBoundingSphere.visible = false;
};
};
}
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 blendMode():String{
return (_blendMode);
}
public function get lookingAtTarget():Number3D{
return (_lookingAtTarget);
}
public function removeOnRollOver(_arg1:Function):void{
removeEventListener(MouseEvent3D.ROLL_OVER, _arg1, false);
}
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 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 set filters(_arg1:Array):void{
if (_filters == _arg1){
return;
};
_filters = _arg1;
if (_ownSession){
_ownSession.filters = _filters;
};
}
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);
}
}
}//package away3d.core.base
Section 29
//Segment (away3d.core.base.Segment)
package away3d.core.base {
import flash.events.*;
import away3d.events.*;
import away3d.materials.*;
public class Segment extends Element {
var _material:ISegmentMaterial;
var _v0:Vertex;
var _v1:Vertex;
private var _materialchanged:SegmentEvent;
public function Segment(_arg1:Vertex, _arg2:Vertex, _arg3:ISegmentMaterial=null){
this.v0 = _arg1;
this.v1 = _arg2;
this.material = _arg3;
vertexDirty = true;
}
override public function get minY():Number{
if (_v0._y < _v1._y){
return (_v0._y);
};
return (_v1._y);
}
override public function get minZ():Number{
if (_v0._z < _v1._z){
return (_v0._z);
};
return (_v1._z);
}
override public function get minX():Number{
if (_v0._x < _v1._x){
return (_v0._x);
};
return (_v1._x);
}
public function set material(_arg1:ISegmentMaterial):void{
if (_arg1 == _material){
return;
};
_material = _arg1;
notifyMaterialChange();
}
public function set v0(_arg1:Vertex):void{
if (_arg1 == _v0){
return;
};
if (_v0 != null){
if (_v0 != _v1){
_v0.removeOnChange(onVertexValueChange);
};
};
_v0 = _arg1;
if (_v0 != null){
if (_v0 != _v1){
_v0.addOnChange(onVertexValueChange);
};
};
notifyVertexChange();
}
private function onVertexValueChange(_arg1:Event):void{
notifyVertexValueChange();
}
function notifyMaterialChange():void{
if (!hasEventListener(SegmentEvent.MATERIAL_CHANGED)){
return;
};
if (_materialchanged == null){
_materialchanged = new SegmentEvent(SegmentEvent.MATERIAL_CHANGED, this);
};
dispatchEvent(_materialchanged);
}
public function removeOnMaterialChange(_arg1:Function):void{
removeEventListener(SegmentEvent.MATERIAL_CHANGED, _arg1, false);
}
public function get material():ISegmentMaterial{
return (_material);
}
override public function get radius2():Number{
var _local1:Number = (((_v0._x * _v0._x) + (_v0._y * _v0._y)) + (_v0._z * _v0._z));
var _local2:Number = (((_v1._x * _v1._x) + (_v1._y * _v1._y)) + (_v1._z * _v1._z));
if (_local1 > _local2){
return (_local1);
};
return (_local2);
}
override public function get maxX():Number{
if (_v0._x > _v1._x){
return (_v0._x);
};
return (_v1._x);
}
override public function get maxY():Number{
if (_v0._y > _v1._y){
return (_v0._y);
};
return (_v1._y);
}
public function set v1(_arg1:Vertex):void{
if (_arg1 == _v1){
return;
};
if (_v1 != null){
if (_v1 != _v0){
_v1.removeOnChange(onVertexValueChange);
};
};
_v1 = _arg1;
if (_v1 != null){
if (_v1 != _v0){
_v1.addOnChange(onVertexValueChange);
};
};
notifyVertexChange();
}
public function addOnMaterialChange(_arg1:Function):void{
addEventListener(SegmentEvent.MATERIAL_CHANGED, _arg1, false, 0, true);
}
override public function get vertices():Array{
return ([_v0, _v1]);
}
public function get v0():Vertex{
return (_v0);
}
public function get v1():Vertex{
return (_v1);
}
override public function get maxZ():Number{
if (_v0._z > _v1._z){
return (_v0._z);
};
return (_v1._z);
}
}
}//package away3d.core.base
Section 30
//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;
}
override public function toString():String{
return ((((("new UV(" + _u) + ", ") + _v) + ")"));
}
public function get v():Number{
return (_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);
}
public function clone():UV{
return (new UV(_u, _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{
if (_arg1 == null){
return (null);
};
if (_arg2 == null){
return (null);
};
var _local5:Number = (_arg3 + _arg4);
var _local6:Number = (_arg3 / _local5);
var _local7:Number = (_arg4 / _local5);
return (new UV(((_arg1._u * _local6) + (_arg2._u * _local7)), ((_arg1._v * _local6) + (_arg2._v * _local7))));
}
}
}//package away3d.core.base
Section 31
//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;
private var _persp:Number;
private var _element:Element;
private var _position:Number3D;
public var parents:Array;
public var extra:Object;
public var positionDirty:Boolean;
public var geometry:Geometry;
var _y:Number;
var _z:Number;
public function Vertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
_position = new Number3D();
parents = new Array();
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 set y(_arg1:Number):void{
if (_y == _arg1){
return;
};
_y = _arg1;
positionDirty = true;
}
public function get position():Number3D{
if (positionDirty){
updatePosition();
};
return (_position);
}
override public function toString():String{
return ((((((("new Vertex(" + _x) + ", ") + _y) + ", ") + z) + ")"));
}
public function reset():void{
_x = 0;
_y = 0;
_z = 0;
positionDirty = true;
}
private function updatePosition():void{
positionDirty = false;
for each (_element in parents) {
_element.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 clone():Vertex{
return (new Vertex(_x, _y, _z));
}
public function get z():Number{
if (positionDirty){
updatePosition();
};
return (_z);
}
public function add(_arg1:Number3D):void{
_x = (_x + _arg1.x);
_y = (_y + _arg1.y);
_z = (_z + _arg1.z);
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 setValue(_arg1:Number, _arg2:Number, _arg3:Number):void{
_x = _arg1;
_y = _arg2;
_z = _arg3;
positionDirty = true;
}
public function set x(_arg1:Number):void{
if (_x == _arg1){
return;
};
_x = _arg1;
positionDirty = true;
}
public function get x():Number{
if (positionDirty){
updatePosition();
};
return (_x);
}
public function get y():Number{
if (positionDirty){
updatePosition();
};
return (_y);
}
public function perspective(_arg1:Number):ScreenVertex{
_persp = (1 / (1 + (_z / _arg1)));
return (new ScreenVertex((_x * _persp), (_y * _persp), _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 = (_arg3 + _arg4);
var _local6:Number = (_arg3 / _local5);
var _local7:Number = (_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 32
//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 = _arg1.distance(vertex.position);
if ((((_local2 < 0)) && (!(isNaN(_local2))))){
plane = _arg1;
distance = _local2;
};
return (_local2);
}
}
}//package away3d.core.base
Section 33
//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 reset():void{
vertex.reset();
}
public function getIndex(_arg1:Array):int{
var _local2:Number = vertex.x;
var _local3:Number = vertex.y;
var _local4:Number = vertex.z;
vertex.x = NaN;
vertex.y = NaN;
vertex.z = NaN;
var _local5:int;
var _local6:int;
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);
}
}
}//package away3d.core.base
Section 34
//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 35
//BlockerArray (away3d.core.block.BlockerArray)
package away3d.core.block {
import away3d.core.clip.*;
public class BlockerArray implements IBlockerConsumer {
private var _blockers:Array;
private var _clip:Clipping;
public function BlockerArray(){
_blockers = [];
super();
}
public function set clip(_arg1:Clipping):void{
_clip = _arg1;
_blockers = [];
}
public function list():Array{
_blockers.sortOn("screenZ", Array.NUMERIC);
return (_blockers);
}
public function get clip():Clipping{
return (_clip);
}
public function blocker(_arg1:Blocker):void{
if (_clip.checkPrimitive(_arg1)){
_blockers.push(_arg1);
};
}
}
}//package away3d.core.block
Section 36
//ConvexBlocker (away3d.core.block.ConvexBlocker)
package away3d.core.block {
import flash.display.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.geom.*;
public class ConvexBlocker extends Blocker {
private var _boundlines:Array;
public var vertices:Array;
override public function calc():void{
var _local2:ScreenVertex;
_boundlines = [];
screenZ = 0;
maxX = -(Infinity);
maxY = -(Infinity);
minX = Infinity;
minY = Infinity;
var _local1:int;
while (_local1 < vertices.length) {
_local2 = vertices[_local1];
_boundlines.push(Line2D.from2points(_local2, vertices[((_local1 + 1) % vertices.length)]));
if (screenZ < _local2.z){
screenZ = _local2.z;
};
if (minX > _local2.x){
minX = _local2.x;
};
if (maxX < _local2.x){
maxX = _local2.x;
};
if (minY > _local2.y){
minY = _local2.y;
};
if (maxY < _local2.y){
maxY = _local2.y;
};
_local1++;
};
maxZ = screenZ;
minZ = screenZ;
}
override public function render():void{
var _local5:Line2D;
var _local6:Line2D;
var _local7:Line2D;
var _local8:ScreenVertex;
var _local9:ScreenVertex;
var _local10:Number;
var _local11:Number;
var _local1:Graphics = source.session.graphics;
_local1.lineStyle(2, Color.fromHSV(0, 0, ((Math.sin((getTimer() / 1000)) + 1) / 2)));
var _local2:int;
while (_local2 < _boundlines.length) {
_local5 = _boundlines[_local2];
_local6 = _boundlines[(((_local2 - 1) + _boundlines.length) % _boundlines.length)];
_local7 = _boundlines[(((_local2 + 1) + _boundlines.length) % _boundlines.length)];
_local8 = Line2D.cross(_local6, _local5);
_local9 = Line2D.cross(_local5, _local7);
_local1.moveTo(_local8.x, _local8.y);
_local1.lineTo(_local9.x, _local9.y);
_local1.moveTo(_local8.x, _local8.y);
_local2++;
};
var _local3:int = (((maxX - minX) * (maxY - minY)) / 2000);
if (_local3 > 50){
_local3 = 50;
};
var _local4:int;
while (_local4 < _local3) {
_local10 = (minX + ((maxX - minX) * Math.random()));
_local11 = (minY + ((maxY - minY) * Math.random()));
if (contains(_local10, _local11)){
_local1.lineStyle(1, Color.fromHSV(0, 0, Math.random()));
_local1.drawCircle(_local10, _local11, 3);
};
_local4++;
};
}
override public function block(_arg1:DrawPrimitive):Boolean{
var _local2:DrawTriangle;
if ((_arg1 is DrawTriangle)){
_local2 = (_arg1 as DrawTriangle);
return (((((contains(_local2.v0.x, _local2.v0.y)) && (contains(_local2.v1.x, _local2.v1.y)))) && (contains(_local2.v2.x, _local2.v2.y))));
};
return (((((((contains(_arg1.minX, _arg1.minY)) && (contains(_arg1.minX, _arg1.maxY)))) && (contains(_arg1.maxX, _arg1.maxY)))) && (contains(_arg1.maxX, _arg1.minY))));
}
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);
}
}
}//package away3d.core.block
Section 37
//IBlockerConsumer (away3d.core.block.IBlockerConsumer)
package away3d.core.block {
public interface IBlockerConsumer {
function blocker(_arg1:Blocker):void;
}
}//package away3d.core.block
Section 38
//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 39
//Clipping (away3d.core.clip.Clipping)
package away3d.core.clip {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import flash.geom.*;
public class Clipping extends EventDispatcher {
private var _view:View3D;
private var _maX:Number;
private var _stageHeight:Number;
private var _stageWidth:Number;
private var _maY:Number;
private var _minY:Number;
private var _minZ:Number;
private var _minX:Number;
var _cameraVarsStore:CameraVarsStore;
private var _clippingClone:Clipping;
private var _zeroPoint:Point;
private var _maxX:Number;
private var _maxY:Number;
private var _maxZ:Number;
protected var ini:Init;
private var _globalPoint:Point;
var _objectCulling:Boolean;
private var _clippingupdated:ClippingEvent;
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 checkFace(_arg1:FaceVO, _arg2:Object3D, _arg3:Array):void{
_arg3.push(_arg1);
}
public function set minY(_arg1:Number):void{
if (_minY == _arg1){
return;
};
_minY = _arg1;
notifyClippingUpdate();
}
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);
};
};
};
};
};
switch (_stage.align){
case StageAlign.TOP_LEFT:
_zeroPoint.x = 0;
_zeroPoint.y = 0;
_globalPoint = _arg1.globalToLocal(_zeroPoint);
_maX = ((_miX = _globalPoint.x) + _stageWidth);
_maY = ((_miY = _globalPoint.y) + _stageHeight);
break;
case StageAlign.TOP_RIGHT:
_zeroPoint.x = _arg2;
_zeroPoint.y = 0;
_globalPoint = _arg1.globalToLocal(_zeroPoint);
_miX = ((_maX = _globalPoint.x) - _stageWidth);
_maY = ((_miY = _globalPoint.y) + _stageHeight);
break;
case StageAlign.BOTTOM_LEFT:
_zeroPoint.x = 0;
_zeroPoint.y = _arg3;
_globalPoint = _arg1.globalToLocal(_zeroPoint);
_maX = ((_miX = _globalPoint.x) + _stageWidth);
_miY = ((_maY = _globalPoint.y) - _stageHeight);
break;
case StageAlign.BOTTOM_RIGHT:
_zeroPoint.x = _arg2;
_zeroPoint.y = _arg3;
_globalPoint = _arg1.globalToLocal(_zeroPoint);
_miX = ((_maX = _globalPoint.x) - _stageWidth);
_miY = ((_maY = _globalPoint.y) - _stageHeight);
break;
case 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);
break;
case 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);
break;
case 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));
break;
case 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));
break;
default:
_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 == -(Infinity)){
_clippingClone.minX = _miX;
} else {
_clippingClone.minX = _minX;
};
if (maxX == Infinity){
_clippingClone.maxX = _maX;
} else {
_clippingClone.maxX = _maxX;
};
if (minY == -(Infinity)){
_clippingClone.minY = _miY;
} else {
_clippingClone.minY = _minY;
};
if (maxY == Infinity){
_clippingClone.maxY = _maY;
} else {
_clippingClone.maxY = _maxY;
};
_clippingClone.minZ = _minZ;
_clippingClone.maxZ = _maxZ;
_clippingClone.objectCulling = _objectCulling;
return (_clippingClone);
}
public function set minX(_arg1:Number):void{
if (_minX == _arg1){
return;
};
_minX = _arg1;
notifyClippingUpdate();
}
public function removeOnClippingUpdate(_arg1:Function):void{
removeEventListener(ClippingEvent.CLIPPING_UPDATED, _arg1, false);
}
public function get view():View3D{
return (_view);
}
public function addOnClippingUpdate(_arg1:Function):void{
addEventListener(ClippingEvent.CLIPPING_UPDATED, _arg1, false, 0, false);
}
override public function toString():String{
return ((((((((((((("{minX:" + minX) + " maxX:") + maxX) + " minY:") + minY) + " maxY:") + maxY) + " minZ:") + minZ) + " maxZ:") + maxZ) + "}"));
}
public function checkPrimitive(_arg1:DrawPrimitive):Boolean{
return (true);
}
public function get minX():Number{
return (_minX);
}
public function get minY():Number{
return (_minY);
}
public function get minZ():Number{
return (_minZ);
}
public function set view(_arg1:View3D):void{
_view = _arg1;
_cameraVarsStore = view.cameraVarsStore;
}
private function onScreenUpdate(_arg1:ClippingEvent):void{
dispatchEvent(_arg1);
}
public function clone(_arg1:Clipping=null):Clipping{
var _local2:Clipping = ((_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 notifyClippingUpdate():void{
if (!hasEventListener(ClippingEvent.CLIPPING_UPDATED)){
return;
};
if (_clippingupdated == null){
_clippingupdated = new ClippingEvent(ClippingEvent.CLIPPING_UPDATED, this);
};
dispatchEvent(_clippingupdated);
}
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();
}
public function set maxZ(_arg1:Number):void{
if (_maxZ == _arg1){
return;
};
_maxZ = _arg1;
notifyClippingUpdate();
}
public function get objectCulling():Boolean{
return (_objectCulling);
}
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 maxY():Number{
return (_maxY);
}
public function get maxZ():Number{
return (_maxZ);
}
public function get maxX():Number{
return (_maxX);
}
}
}//package away3d.core.clip
Section 40
//FrustumClipping (away3d.core.clip.FrustumClipping)
package away3d.core.clip {
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.geom.*;
public class FrustumClipping extends Clipping {
private var _uv1:UV;
private var _uv20:UV;
private var _v2C:VertexClassification;
private var _v1d:Number;
private var _v0:Vertex;
private var _v1:Vertex;
private var _v1w:Number;
private var _v1Classification:Plane3D;
private var _v2:Vertex;
private var _frustum:Frustum;
private var _v2d:Number;
private var _f1:FaceVO;
private var tri:DrawTriangle;
private var _v01:Vertex;
private var _v2w:Number;
private var _uv01:UV;
private var _f0:FaceVO;
private var _v0C:VertexClassification;
private var _session:AbstractRenderSession;
private var _v12:Vertex;
private var _plane:Plane3D;
private var _v0Classification:Plane3D;
private var _v2Classification:Plane3D;
private var _d:Number;
private var _uv12:UV;
private var _v1C:VertexClassification;
private var _v0d:Number;
private var _uv0:UV;
private var _p:Number;
private var _uv2:UV;
private var _v20:Vertex;
private var _v0w:Number;
private var _pass:Boolean;
public function FrustumClipping(_arg1:Object=null){
super(_arg1);
objectCulling = ini.getBoolean("objectCulling", true);
}
override public function set objectCulling(_arg1:Boolean):void{
if (!_arg1){
throw (new Error("objectCulling requires setting to true for FrustumClipping"));
};
_objectCulling = _arg1;
}
override public function checkFace(_arg1:FaceVO, _arg2:Object3D, _arg3:Array):void{
var _local4:FaceVO;
var _local5:FaceVO;
_session = _arg2.session;
_frustum = _cameraVarsStore.frustumDictionary[_arg2];
_pass = true;
_v0C = _cameraVarsStore.createVertexClassification(_arg1.v0);
_v1C = _cameraVarsStore.createVertexClassification(_arg1.v1);
_v2C = _cameraVarsStore.createVertexClassification(_arg1.v2);
if (((((_v0C.plane) || (_v1C.plane))) || (_v2C.plane))){
if ((_plane = _v0C.plane)){
_v0d = _v0C.distance;
_v1d = _v1C.getDistance(_plane);
_v2d = _v2C.getDistance(_plane);
} else {
if ((_plane = _v1C.plane)){
_v0d = _v0C.getDistance(_plane);
_v1d = _v1C.distance;
_v2d = _v2C.getDistance(_plane);
} else {
if ((_plane = _v2C.plane)){
_v0d = _v0C.getDistance(_plane);
_v1d = _v1C.getDistance(_plane);
_v2d = _v2C.distance;
};
};
};
if ((((((_v0d < 0)) && ((_v1d < 0)))) && ((_v2d < 0)))){
return;
};
if ((((((_v0d < 0)) || ((_v1d < 0)))) || ((_v2d < 0)))){
_pass = false;
};
} else {
for each (_plane in _frustum.planes) {
_v0d = _v0C.getDistance(_plane);
_v1d = _v1C.getDistance(_plane);
_v2d = _v2C.getDistance(_plane);
if ((((((_v0d < 0)) && ((_v1d < 0)))) && ((_v2d < 0)))){
return;
};
if ((((((_v0d < 0)) || ((_v1d < 0)))) || ((_v2d < 0)))){
_pass = false;
break;
};
};
};
if (_pass){
_arg3.push(_arg1);
return;
};
if ((((_v0d >= 0)) && ((_v1d < 0)))){
_v0w = _v0d;
_v1w = _v1d;
_v2w = _v2d;
_v0 = _arg1.v0;
_v1 = _arg1.v1;
_v2 = _arg1.v2;
_uv0 = _arg1.uv0;
_uv1 = _arg1.uv1;
_uv2 = _arg1.uv2;
} else {
if ((((_v1d >= 0)) && ((_v2d < 0)))){
_v0w = _v1d;
_v1w = _v2d;
_v2w = _v0d;
_v0 = _arg1.v1;
_v1 = _arg1.v2;
_v2 = _arg1.v0;
_uv0 = _arg1.uv1;
_uv1 = _arg1.uv2;
_uv2 = _arg1.uv0;
} else {
if ((((_v2d >= 0)) && ((_v0d < 0)))){
_v0w = _v2d;
_v1w = _v0d;
_v2w = _v1d;
_v0 = _arg1.v2;
_v1 = _arg1.v0;
_v2 = _arg1.v1;
_uv0 = _arg1.uv2;
_uv1 = _arg1.uv0;
_uv2 = _arg1.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;
checkFace(_cameraVarsStore.createFaceVO(_arg1.face, _v0, _v01, _v20, _arg1.material, _arg1.back, _uv0, _uv01, _uv20), _arg2, _arg3);
} 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;
_local4 = _cameraVarsStore.createFaceVO(_arg1.face, _v0, _v01, _v2, _arg1.material, _arg1.back, _uv0, _uv01, _uv2);
_local5 = _cameraVarsStore.createFaceVO(_arg1.face, _v01, _v12, _v2, _arg1.material, _arg1.back, _uv01, _uv12, _uv2);
checkFace(_local4, _arg2, _arg3);
checkFace(_local5, _arg2, _arg3);
};
}
override public function clone(_arg1:Clipping=null):Clipping{
var _local2:FrustumClipping = (((_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);
}
}
}//package away3d.core.clip
Section 41
//RectangleClipping (away3d.core.clip.RectangleClipping)
package away3d.core.clip {
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.geom.*;
public class RectangleClipping extends Clipping {
private var _uv1:UV;
private var _uv20:UV;
private var _v2C:VertexClassification;
private var _v1d:Number;
private var _v0:Vertex;
private var _v1:Vertex;
private var _v1w:Number;
private var _v1Classification:Plane3D;
private var _v2:Vertex;
private var _frustum:Frustum;
private var _v2d:Number;
private var _f1:FaceVO;
private var tri:DrawTriangle;
private var _v01:Vertex;
private var _v2w:Number;
private var _uv01:UV;
private var _f0:FaceVO;
private var _v0C:VertexClassification;
private var _session:AbstractRenderSession;
private var _v12:Vertex;
private var _plane:Plane3D;
private var _v0Classification:Plane3D;
private var _v2Classification:Plane3D;
private var _d:Number;
private var _uv12:UV;
private var _v1C:VertexClassification;
private var _v0d:Number;
private var _uv0:UV;
private var _p:Number;
private var _uv2:UV;
private var _v20:Vertex;
private var _v0w:Number;
private var _pass:Boolean;
public function RectangleClipping(_arg1:Object=null){
super(_arg1);
objectCulling = ini.getBoolean("objectCulling", false);
}
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);
}
override public function clone(_arg1:Clipping=null):Clipping{
var _local2:RectangleClipping = (((_arg1 as RectangleClipping)) || (new RectangleClipping()));
super.clone(_local2);
return (_local2);
}
}
}//package away3d.core.clip
Section 42
//DrawBillboard (away3d.core.draw.DrawBillboard)
package away3d.core.draw {
import away3d.materials.*;
import flash.geom.*;
public class DrawBillboard extends DrawPrimitive {
var left:ScreenVertex;
private var sinh:Number;
public var screenvertex:ScreenVertex;
private var pointMapping:Matrix;
private var cos:Number;
private var sinw:Number;
public var material:IBillboardMaterial;
var bottomleft:ScreenVertex;
private var bounds:ScreenVertex;
public var height:Number;
private var cosh:Number;
public var width:Number;
public var scale:Number;
var bottomright:ScreenVertex;
private var cosw:Number;
private var sin:Number;
var top:ScreenVertex;
var topleft:ScreenVertex;
public var mapping:Matrix;
var topright:ScreenVertex;
private var uvMaterial:IUVMaterial;
private var h:Number;
private var w:Number;
public var rotation:Number;
public function DrawBillboard(){
topleft = new ScreenVertex();
topright = new ScreenVertex();
bottomleft = new ScreenVertex();
bottomright = new ScreenVertex();
left = new ScreenVertex();
top = new ScreenVertex();
mapping = new Matrix();
super();
}
override public function render():void{
material.renderBillboard(this);
}
override public function contains(_arg1:Number, _arg2:Number):Boolean{
if (rotation != 0){
if ((((topleft.x * (_arg2 - topright.y)) + (topright.x * (topleft.y - _arg2))) + (_arg1 * (topright.y - topleft.y))) > 0.001){
return (false);
};
if ((((topright.x * (_arg2 - bottomright.y)) + (bottomright.x * (topright.y - _arg2))) + (_arg1 * (bottomright.y - topright.y))) > 0.001){
return (false);
};
if ((((bottomright.x * (_arg2 - bottomleft.y)) + (bottomleft.x * (bottomright.y - _arg2))) + (_arg1 * (bottomleft.y - bottomright.y))) > 0.001){
return (false);
};
if ((((bottomleft.x * (_arg2 - topleft.y)) + (topleft.x * (bottomleft.y - _arg2))) + (_arg1 * (topleft.y - bottomleft.y))) > 0.001){
return (false);
};
};
uvMaterial = (material as IUVMaterial);
if (((!(uvMaterial)) || (!(uvMaterial.bitmap.transparent)))){
return (true);
};
pointMapping = mapping.clone();
pointMapping.invert();
var _local3:Point = 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);
};
var _local4:uint = uvMaterial.bitmap.getPixel32(int(_local3.x), int(_local3.y));
return ((uint((_local4 >> 24)) > 128));
}
override public function clear():void{
screenvertex = null;
}
override public function calc():void{
var _local1:Array;
screenZ = screenvertex.z;
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);
topleft.x = ((screenvertex.x - cosw) - sinh);
topleft.y = ((screenvertex.y + sinw) - cosh);
topright.x = ((screenvertex.x + cosw) - sinh);
topright.y = ((screenvertex.y - sinw) - cosh);
bottomleft.x = ((screenvertex.x - cosw) + sinh);
bottomleft.y = ((screenvertex.y + sinw) + cosh);
bottomright.x = ((screenvertex.x + cosw) + sinh);
bottomright.y = ((screenvertex.y - sinw) + cosh);
_local1 = new Array();
_local1.push(topleft);
_local1.push(topright);
_local1.push(bottomleft);
_local1.push(bottomright);
minX = 100000;
minY = 100000;
maxX = -100000;
maxY = -100000;
for each (bounds in _local1) {
if (minX > bounds.x){
minX = bounds.x;
};
if (maxX < bounds.x){
maxX = bounds.x;
};
if (minY > bounds.y){
minY = bounds.y;
};
if (maxY < bounds.y){
maxY = bounds.y;
};
};
mapping.a = (scale * cos);
mapping.b = (-(scale) * sin);
mapping.c = (scale * sin);
mapping.d = (scale * cos);
mapping.tx = topleft.x;
mapping.ty = topleft.y;
} else {
bottomright.x = (topright.x = ((bottomleft.x = (topleft.x = (screenvertex.x - (w / 2)))) + w));
bottomright.y = (bottomleft.y = ((topright.y = (topleft.y = (screenvertex.y - (h / 2)))) + h));
minX = topleft.x;
minY = topleft.y;
maxX = bottomright.x;
maxY = bottomright.y;
mapping.a = (mapping.d = scale);
mapping.c = (mapping.b = 0);
mapping.tx = topleft.x;
mapping.ty = topleft.y;
};
}
}
}//package away3d.core.draw
Section 43
//DrawDisplayObject (away3d.core.draw.DrawDisplayObject)
package away3d.core.draw {
import flash.display.*;
import away3d.core.render.*;
import flash.geom.*;
public class DrawDisplayObject extends DrawPrimitive {
public var displayobject:DisplayObject;
private var displayRect:Rectangle;
public var screenvertex:ScreenVertex;
public var session:AbstractRenderSession;
override public function clear():void{
displayobject = null;
}
override public function calc():void{
displayRect = displayobject.getBounds(displayobject);
screenZ = screenvertex.z;
minZ = screenZ;
maxZ = screenZ;
minX = (screenvertex.x + displayRect.left);
minY = (screenvertex.y + displayRect.top);
maxX = (screenvertex.x + displayRect.right);
maxY = (screenvertex.y + displayRect.bottom);
}
override public function render():void{
displayobject.x = screenvertex.x;
displayobject.y = screenvertex.y;
session.addDisplayObject(displayobject);
}
override public function contains(_arg1:Number, _arg2:Number):Boolean{
return (true);
}
}
}//package away3d.core.draw
Section 44
//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 45
//DrawPrimitive (away3d.core.draw.DrawPrimitive)
package away3d.core.draw {
import away3d.containers.*;
import away3d.core.base.*;
public class DrawPrimitive {
public var create:Function;
public var minX:Number;
public var minY:Number;
public var minZ:Number;
public var generated:Boolean;
public var source:Object3D;
public var view:View3D;
public var screenZ:Number;
public var maxX:Number;
public var maxY:Number;
public var quadrant:PrimitiveQuadrantTreeNode;
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 46
//DrawScaledBitmap (away3d.core.draw.DrawScaledBitmap)
package away3d.core.draw {
import flash.display.*;
import flash.geom.*;
public class DrawScaledBitmap extends DrawPrimitive {
private var cosh:Number;
public var rotation:Number;
private var width:Number;
var left:ScreenVertex;
public var scale:Number;
private var cosw:Number;
var bottomright:ScreenVertex;
private var cos:Number;
private var sinh:Number;
private var sin:Number;
var top:ScreenVertex;
private var sinw:Number;
var topleft:ScreenVertex;
private var mapping:Matrix;
public var screenvertex:ScreenVertex;
var topright:ScreenVertex;
public var bitmap:BitmapData;
var bottomleft:ScreenVertex;
private var bounds:ScreenVertex;
private var height:Number;
public var smooth:Boolean;
public function DrawScaledBitmap(){
topleft = new ScreenVertex();
topright = new ScreenVertex();
bottomleft = new ScreenVertex();
bottomright = new ScreenVertex();
left = new ScreenVertex();
top = new ScreenVertex();
mapping = new Matrix();
super();
}
override public function render():void{
source.session.renderScaledBitmap(this, bitmap, mapping, smooth);
}
override public function clear():void{
bitmap = null;
}
override public function calc():void{
var _local1:Array;
screenZ = screenvertex.z;
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);
topleft.x = ((screenvertex.x - cosw) - sinh);
topleft.y = ((screenvertex.y + sinw) - cosh);
topright.x = ((screenvertex.x + cosw) - sinh);
topright.y = ((screenvertex.y - sinw) - cosh);
bottomleft.x = ((screenvertex.x - cosw) + sinh);
bottomleft.y = ((screenvertex.y + sinw) + cosh);
bottomright.x = ((screenvertex.x + cosw) + sinh);
bottomright.y = ((screenvertex.y - sinw) + cosh);
_local1 = new Array();
_local1.push(topleft);
_local1.push(topright);
_local1.push(bottomleft);
_local1.push(bottomright);
minX = 100000;
minY = 100000;
maxX = -100000;
maxY = -100000;
for each (bounds in _local1) {
if (minX > bounds.x){
minX = bounds.x;
};
if (maxX < bounds.x){
maxX = bounds.x;
};
if (minY > bounds.y){
minY = bounds.y;
};
if (maxY < bounds.y){
maxY = bounds.y;
};
};
mapping.a = (scale * cos);
mapping.b = (-(scale) * sin);
mapping.c = (scale * sin);
mapping.d = (scale * cos);
mapping.tx = topleft.x;
mapping.ty = topleft.y;
} else {
topleft.x = (screenvertex.x - (width / 2));
topleft.y = (screenvertex.y - (height / 2));
topright.x = (topleft.x + width);
topright.y = topleft.y;
bottomleft.x = topleft.x;
bottomleft.y = (topleft.y + height);
bottomright.x = topright.x;
bottomright.y = bottomleft.y;
minX = topleft.x;
minY = topleft.y;
maxX = bottomright.x;
maxY = bottomright.y;
mapping.a = (mapping.d = scale);
mapping.c = (mapping.b = 0);
mapping.tx = topleft.x;
mapping.ty = topleft.y;
};
}
override public function contains(_arg1:Number, _arg2:Number):Boolean{
if (rotation != 0){
if ((((topleft.x * (_arg2 - topright.y)) + (topright.x * (topleft.y - _arg2))) + (_arg1 * (topright.y - topleft.y))) > 0.001){
return (false);
};
if ((((topright.x * (_arg2 - bottomright.y)) + (bottomright.x * (topright.y - _arg2))) + (_arg1 * (bottomright.y - topright.y))) > 0.001){
return (false);
};
if ((((bottomright.x * (_arg2 - bottomleft.y)) + (bottomleft.x * (bottomright.y - _arg2))) + (_arg1 * (bottomleft.y - bottomright.y))) > 0.001){
return (false);
};
if ((((bottomleft.x * (_arg2 - topleft.y)) + (topleft.x * (bottomleft.y - _arg2))) + (_arg1 * (topleft.y - bottomleft.y))) > 0.001){
return (false);
};
};
if (!bitmap.transparent){
return (true);
};
if (rotation != 0){
mapping = new Matrix((scale * cos), (-(scale) * sin), (scale * sin), (scale * cos), topleft.x, topleft.y);
} else {
mapping = new Matrix(scale, 0, 0, scale, topleft.x, topleft.y);
};
mapping.invert();
var _local3:Point = mapping.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);
};
var _local4:uint = bitmap.getPixel32(int(_local3.x), int(_local3.y));
return ((uint((_local4 >> 24)) > 128));
}
}
}//package away3d.core.draw
Section 47
//DrawSegment (away3d.core.draw.DrawSegment)
package away3d.core.draw {
import away3d.materials.*;
public class DrawSegment extends DrawPrimitive {
public var v0:ScreenVertex;
private var bzf:Number;
private var axf:Number;
private var det:Number;
private var dx:Number;
private var dy:Number;
private var faz:Number;
public var material:ISegmentMaterial;
private var ayf:Number;
private var ax:Number;
private var ay:Number;
private var az:Number;
private var fbz:Number;
private var azf:Number;
private var bxf:Number;
private var bx:Number;
private var by:Number;
private var bz:Number;
private var focus:Number;
private var xfocus:Number;
public var length:Number;
private var byf:Number;
public var v1:ScreenVertex;
private var da:Number;
private var db:Number;
private var yfocus:Number;
override public function render():void{
material.renderSegment(this);
}
function onepointcut(_arg1:ScreenVertex):Array{
return ([create(source, material, v0, _arg1, true), create(source, material, _arg1, v1, true)]);
}
override public function quarter(_arg1:Number):Array{
if (length < 5){
return (null);
};
var _local2:ScreenVertex = ScreenVertex.median(v0, v1, _arg1);
return ([create(source, material, v0, _local2, true), create(source, material, _local2, v1, true)]);
}
override public function contains(_arg1:Number, _arg2:Number):Boolean{
if (Math.abs((((v0.x * (_arg2 - v1.y)) + (v1.x * (v0.y - _arg2))) + (_arg1 * (v1.y - v0.y)))) > ((0.001 * 1000) * 1000)){
return (false);
};
if ((distanceToCenter(_arg1, _arg2) * 2) > length){
return (false);
};
return (true);
}
override public function getZ(_arg1:Number, _arg2:Number):Number{
focus = view.camera.focus;
ax = v0.x;
ay = v0.y;
az = v0.z;
bx = v1.x;
by = v1.y;
bz = v1.z;
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 = ((v0.x + v1.x) / 2);
var _local4:Number = ((v0.y + v1.y) / 2);
return (Math.sqrt((((_local3 - _arg1) * (_local3 - _arg1)) + ((_local4 - _arg2) * (_local4 - _arg2)))));
}
override public function clear():void{
v0 = null;
v1 = null;
}
override public function calc():void{
if (v0.z < v1.z){
minZ = v0.z;
maxZ = (v1.z + 1);
} else {
minZ = v1.z;
maxZ = (v0.z + 1);
};
screenZ = ((v0.z + v1.z) / 2);
if (v0.x < v1.x){
minX = v0.x;
maxX = (v1.x + 1);
} else {
minX = v1.x;
maxX = (v0.x + 1);
};
if (v0.y < v1.y){
minY = v0.y;
maxY = (v1.y + 1);
} else {
minY = v1.y;
maxY = (v0.y + 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) + " }"));
}
}
}//package away3d.core.draw
Section 48
//DrawTriangle (away3d.core.draw.DrawTriangle)
package away3d.core.draw {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.materials.*;
import flash.geom.*;
public class DrawTriangle extends DrawPrimitive {
private var _u0:Number;
private var _u2:Number;
private var bzf:Number;
private var axf:Number;
private var det:Number;
private var v12:ScreenVertex;
private var _v0:Number;
private var _v1:Number;
private var _v2:Number;
private var faz:Number;
public var material:ITriangleMaterial;
private var materialHeight:Number;
private var av:Number;
private var ax:Number;
private var ay:Number;
private var az:Number;
private var ayf:Number;
private var au:Number;
private var fbz:Number;
private var _areaSign:Number;
private var v20:ScreenVertex;
private var azf:Number;
private var bu:Number;
private var bv:Number;
private var bx:Number;
private var by:Number;
private var bz:Number;
private var fcz:Number;
private var uv01:UV;
private var d01:Number;
private var cv:Number;
private var cx:Number;
private var cy:Number;
private var cz:Number;
private var cu:Number;
public var v0:ScreenVertex;
public var v1:ScreenVertex;
private var da:Number;
private var db:Number;
private var dc:Number;
private var _invtexmapping:Matrix;
private var dd01:Number;
private var uv12:UV;
private var d12:Number;
public var area:Number;
private var cxf:Number;
public var v2:ScreenVertex;
private var uv20:UV;
private var dd12:Number;
private var d20:Number;
public var uv0:UV;
public var uv2:UV;
private var dd20:Number;
private var cyf:Number;
public var backface:Boolean;// = false
private var czf:Number;
private var bxf:Number;
public var uv1:UV;
public var faceVO:FaceVO;
private var focus:Number;
private var materialWidth:Number;
private var byf:Number;
private var v01:ScreenVertex;
private var _u1:Number;
public function DrawTriangle(){
_invtexmapping = new Matrix();
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 function bisect(_arg1:Number):Array{
d01 = v0.distanceSqr(v1);
d12 = v1.distanceSqr(v2);
d20 = v2.distanceSqr(v0);
if ((((d12 >= d01)) && ((d12 >= d20)))){
return (bisect12(_arg1));
};
if (d01 >= d20){
return (bisect01(_arg1));
};
return (bisect20(_arg1));
}
final function minEdgeSqr():Number{
return (Math.min(Math.min(v0.distanceSqr(v1), v1.distanceSqr(v2)), v2.distanceSqr(v0)));
}
final function minDistortSqr(_arg1:Number):Number{
return (Math.min(Math.min(v0.distortSqr(v1, _arg1), v1.distortSqr(v2, _arg1)), v2.distortSqr(v0, _arg1)));
}
final override public function contains(_arg1:Number, _arg2:Number):Boolean{
if (((((v0.x * (_arg2 - v1.y)) + (v1.x * (v0.y - _arg2))) + (_arg1 * (v1.y - v0.y))) * _areaSign) < -0.001){
return (false);
};
if (((((v0.x * (v2.y - _arg2)) + (_arg1 * (v0.y - v2.y))) + (v2.x * (_arg2 - v0.y))) * _areaSign) < -0.001){
return (false);
};
if (((((_arg1 * (v2.y - v1.y)) + (v1.x * (_arg2 - v2.y))) + (v2.x * (v1.y - _arg2))) * _areaSign) < -0.001){
return (false);
};
return (true);
}
final function distortbisect(_arg1:Number):Array{
d01 = v0.distortSqr(v1, _arg1);
d12 = v1.distortSqr(v2, _arg1);
d20 = v2.distortSqr(v0, _arg1);
if ((((d12 >= d01)) && ((d12 >= d20)))){
return (bisect12(_arg1));
};
if (d01 >= d20){
return (bisect01(_arg1));
};
return (bisect20(_arg1));
}
function fivepointcut(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:ScreenVertex, _arg4:ScreenVertex, _arg5:ScreenVertex, _arg6:UV, _arg7:UV, _arg8:UV, _arg9:UV, _arg10:UV):Array{
if (_arg1.distanceSqr(_arg4) < _arg2.distanceSqr(_arg5)){
return ([create(source, faceVO, material, _arg1, _arg2, _arg4, _arg6, _arg7, _arg9, true), create(source, faceVO, material, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9, true), create(source, faceVO, material, _arg1, _arg4, _arg5, _arg6, _arg9, _arg10, true)]);
};
return ([create(source, faceVO, material, _arg1, _arg2, _arg5, _arg6, _arg7, _arg10, true), create(source, faceVO, material, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9, true), create(source, faceVO, material, _arg2, _arg4, _arg5, _arg7, _arg9, _arg10, true)]);
}
override public function toString():String{
var _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)) + " }"));
}
final function acuteAngled():Boolean{
d01 = v0.distanceSqr(v1);
d12 = v1.distanceSqr(v2);
d20 = v2.distanceSqr(v0);
dd01 = (d01 * d01);
dd12 = (d12 * d12);
dd20 = (d20 * d20);
return ((((((dd01 <= (dd12 + dd20))) && ((dd12 <= (dd20 + dd01))))) && ((dd20 <= (dd01 + dd12)))));
}
private function num(_arg1:Number):Number{
return ((int((_arg1 * 1000)) / 1000));
}
final private function bisect01(_arg1:Number):Array{
var _local2:ScreenVertex = ScreenVertex.median(v0, v1, _arg1);
var _local3:UV = UV.median(uv0, uv1);
return ([create(source, faceVO, material, v2, v0, _local2, uv2, uv0, _local3, true), create(source, faceVO, material, _local2, v1, v2, _local3, uv1, uv2, true)]);
}
override public function calc():void{
if (v0.x > v1.x){
if (v0.x > v2.x){
maxX = v0.x;
} else {
maxX = v2.x;
};
} else {
if (v1.x > v2.x){
maxX = v1.x;
} else {
maxX = v2.x;
};
};
if (v0.x < v1.x){
if (v0.x < v2.x){
minX = v0.x;
} else {
minX = v2.x;
};
} else {
if (v1.x < v2.x){
minX = v1.x;
} else {
minX = v2.x;
};
};
if (v0.y > v1.y){
if (v0.y > v2.y){
maxY = v0.y;
} else {
maxY = v2.y;
};
} else {
if (v1.y > v2.y){
maxY = v1.y;
} else {
maxY = v2.y;
};
};
if (v0.y < v1.y){
if (v0.y < v2.y){
minY = v0.y;
} else {
minY = v2.y;
};
} else {
if (v1.y < v2.y){
minY = v1.y;
} else {
minY = v2.y;
};
};
if (v0.z > v1.z){
if (v0.z > v2.z){
maxZ = v0.z;
} else {
maxZ = v2.z;
};
} else {
if (v1.z > v2.z){
maxZ = v1.z;
} else {
maxZ = v2.z;
};
};
if (v0.z < v1.z){
if (v0.z < v2.z){
minZ = v0.z;
} else {
minZ = v2.z;
};
} else {
if (v1.z < v2.z){
minZ = v1.z;
} else {
minZ = v2.z;
};
};
screenZ = (((v0.z + v1.z) + v2.z) / 3);
area = (0.5 * (((v0.x * (v2.y - v1.y)) + (v1.x * (v0.y - v2.y))) + (v2.x * (v1.y - v0.y))));
if (area > 0){
_areaSign = 1;
} else {
_areaSign = -1;
};
}
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 = v0.x;
ay = v0.y;
az = v0.z;
bx = v1.x;
by = v1.y;
bz = v1.z;
cx = v2.x;
cy = v2.y;
cz = v2.z;
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)));
}
override public function clear():void{
v0 = null;
v1 = null;
v2 = null;
uv0 = null;
uv1 = null;
uv2 = null;
}
override public function render():void{
material.renderTriangle(this);
}
final private function bisect12(_arg1:Number):Array{
var _local2:ScreenVertex = ScreenVertex.median(v1, v2, _arg1);
var _local3:UV = UV.median(uv1, uv2);
return ([create(source, faceVO, material, v0, v1, _local2, uv0, uv1, _local3, true), create(source, faceVO, material, _local2, v2, v0, _local3, uv2, uv0, true)]);
}
final override public function quarter(_arg1:Number):Array{
if ((((area > -20)) && ((area < 20)))){
return (null);
};
v01 = ScreenVertex.median(v0, v1, _arg1);
v12 = ScreenVertex.median(v1, v2, _arg1);
v20 = ScreenVertex.median(v2, v0, _arg1);
uv01 = UV.median(uv0, uv1);
uv12 = UV.median(uv1, uv2);
uv20 = UV.median(uv2, uv0);
return ([create(source, faceVO, material, v0, v01, v20, uv0, uv01, uv20, true), create(source, faceVO, material, v1, v12, v01, uv1, uv12, uv01, true), create(source, faceVO, material, v2, v20, v12, uv2, uv20, uv12, true), create(source, faceVO, material, v01, v12, v20, uv01, uv12, uv20, true)]);
}
final private function bisect20(_arg1:Number):Array{
var _local2:ScreenVertex = ScreenVertex.median(v2, v0, _arg1);
var _local3:UV = UV.median(uv2, uv0);
return ([create(source, faceVO, material, v1, v2, _local2, uv1, uv2, _local3, true), create(source, faceVO, material, _local2, v0, v1, _local3, uv0, uv1, true)]);
}
final public function distanceToCenter(_arg1:Number, _arg2:Number):Number{
var _local3:Number = (((v0.x + v1.x) + v2.x) / 3);
var _local4:Number = (((v0.y + v1.y) + v2.y) / 3);
return (Math.sqrt((((_local3 - _arg1) * (_local3 - _arg1)) + ((_local4 - _arg2) * (_local4 - _arg2)))));
}
final function maxDistortSqr(_arg1:Number):Number{
return (Math.max(Math.max(v0.distortSqr(v1, _arg1), v1.distortSqr(v2, _arg1)), v2.distortSqr(v0, _arg1)));
}
final function maxEdgeSqr():Number{
return (Math.max(Math.max(v0.distanceSqr(v1), v1.distanceSqr(v2)), v2.distanceSqr(v0)));
}
final override public function getZ(_arg1:Number, _arg2:Number):Number{
focus = view.camera.focus;
ax = v0.x;
ay = v0.y;
az = v0.z;
bx = v1.x;
by = v1.y;
bz = v1.z;
cx = v2.x;
cy = v2.y;
cz = v2.z;
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));
}
}
}//package away3d.core.draw
Section 49
//IPrimitiveConsumer (away3d.core.draw.IPrimitiveConsumer)
package away3d.core.draw {
import away3d.containers.*;
public interface IPrimitiveConsumer {
function clone():IPrimitiveConsumer;
function clear(_arg1:View3D):void;
function list():Array;
function primitive(_arg1:DrawPrimitive):Boolean;
}
}//package away3d.core.draw
Section 50
//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 51
//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 righttop:PrimitiveQuadrantTreeNode;
public var rightbottomFlag:Boolean;
public var onlysource:Object3D;
public var xdiv:Number;
private var halfheight:Number;
public var center:Array;
private var maxlevel:int;// = 4
private var render_center_length:int;// = -1
public var onlysourceFlag:Boolean;// = true
private var render_center_index:int;// = -1
private var halfwidth:Number;
public var lefttop:PrimitiveQuadrantTreeNode;
public var ydiv:Number;
public var leftbottom: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){
center = new Array();
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 = new Array();
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 52
//ScreenVertex (away3d.core.draw.ScreenVertex)
package away3d.core.draw {
import away3d.core.base.*;
public final class ScreenVertex {
private var persp:Number;
public var vx:Number;
public var vy:Number;
private var my2:Number;
public var clipX:Number;
public var clipY:Number;
public var clipZ:Number;
private var dx:Number;
private var dy:Number;
public var num:Number;
private var faz:Number;
public var viewTimer:int;
private var mx2:Number;
private var ifmz2:Number;
public var visible:Boolean;
public var x:Number;
public var y:Number;
public var z:Number;
private var fbz:Number;
public function ScreenVertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
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 deperspective(_arg1:Number):Vertex{
persp = (1 + (z / _arg1));
return (new Vertex((x * persp), (y * persp), z));
}
public function distanceSqr(_arg1:ScreenVertex):Number{
return ((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y))));
}
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:ScreenVertex, _arg2:ScreenVertex, _arg3:Number):ScreenVertex{
var _local4:Number = ((_arg1.z + _arg2.z) / 2);
var _local5:Number = (_arg3 + _arg1.z);
var _local6:Number = (_arg3 + _arg2.z);
var _local7:Number = ((1 / (_arg3 + _local4)) / 2);
return (new ScreenVertex((((_arg1.x * _local5) + (_arg2.x * _local6)) * _local7), (((_arg1.y * _local5) + (_arg2.y * _local6)) * _local7), _local4));
}
public static function weighted(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:Number, _arg4:Number, _arg5:Number):ScreenVertex{
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));
};
var _local6:Number = (_arg3 + _arg4);
var _local7:Number = (_arg3 / _local6);
var _local8:Number = (_arg4 / _local6);
var _local9:Number = ((_arg1.x * _local7) + (_arg2.x * _local8));
var _local10:Number = ((_arg1.y * _local7) + (_arg2.y * _local8));
var _local11:Number = (_arg1.z / _arg5);
var _local12:Number = (_arg2.z / _arg5);
var _local13:Number = (1 + _local11);
var _local14:Number = (1 + _local12);
var _local15:Number = ((_arg1.x * _local13) - (_local9 * _local11));
var _local16:Number = ((_arg2.x * _local14) - (_local9 * _local12));
var _local17:Number = ((_arg1.y * _local13) - (_local10 * _local11));
var _local18:Number = ((_arg2.y * _local14) - (_local10 * _local12));
var _local19:Number = ((_local15 * _local18) - (_local16 * _local17));
var _local20:Number = ((_local9 * _local18) - (_local16 * _local10));
var _local21:Number = ((_local15 * _local10) - (_local9 * _local17));
return (new ScreenVertex(_local9, _local10, (((_local20 * _arg1.z) + (_local21 * _arg2.z)) / _local19)));
}
}
}//package away3d.core.draw
Section 53
//IPrimitiveFilter (away3d.core.filter.IPrimitiveFilter)
package away3d.core.filter {
import away3d.containers.*;
import away3d.core.clip.*;
import away3d.cameras.*;
public interface IPrimitiveFilter {
function filter(_arg1:Array, _arg2:Scene3D, _arg3:Camera3D, _arg4:Clipping):Array;
}
}//package away3d.core.filter
Section 54
//ZSortFilter (away3d.core.filter.ZSortFilter)
package away3d.core.filter {
import away3d.containers.*;
import away3d.core.clip.*;
import away3d.cameras.*;
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 55
//Frustum (away3d.core.geom.Frustum)
package away3d.core.geom {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
public class Frustum {
private var _matrix:Matrix3D;
private var _distance:Number;
public var planes:Array;
private var _plane:Plane3D;
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 _local4:Plane3D;
var _local5:int;
var _local6:int;
var _local2:int;
var _local3:int;
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 _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local18:Plane3D;
_matrix = _arg1;
var _local2:Number = _arg1.sxx;
var _local3:Number = _arg1.sxy;
var _local4:Number = _arg1.sxz;
var _local5:Number = _arg1.tx;
var _local6:Number = _arg1.syx;
var _local7:Number = _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;
var _local16:Number = _arg1.swz;
var _local17:Number = _arg1.tw;
_local18 = Plane3D(planes[NEAR]);
_local18.a = (_local14 + _local10);
_local18.b = (_local15 + _local11);
_local18.c = (_local16 + _local12);
_local18.d = (_local17 + _local13);
_local18.normalize();
var _local19:Plane3D = Plane3D(planes[FAR]);
_local19.a = (-(_local10) + _local14);
_local19.b = (-(_local11) + _local15);
_local19.c = (-(_local12) + _local16);
_local19.d = (-(_local13) + _local17);
_local19.normalize();
var _local20:Plane3D = Plane3D(planes[LEFT]);
_local20.a = (_local14 + _local2);
_local20.b = (_local15 + _local3);
_local20.c = (_local16 + _local4);
_local20.d = (_local17 + _local5);
_local20.normalize();
var _local21:Plane3D = Plane3D(planes[RIGHT]);
_local21.a = (-(_local2) + _local14);
_local21.b = (-(_local3) + _local15);
_local21.c = (-(_local4) + _local16);
_local21.d = (-(_local5) + _local17);
_local21.normalize();
var _local22:Plane3D = Plane3D(planes[TOP]);
_local22.a = (_local14 + _local6);
_local22.b = (_local15 + _local7);
_local22.c = (_local16 + _local8);
_local22.d = (_local17 + _local9);
_local22.normalize();
var _local23:Plane3D = 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{
for each (_plane in planes) {
_distance = _plane.distance(_arg1);
if (_distance < -(_arg2)){
return (OUT);
};
if (Math.abs(_distance) < _arg2){
return (INTERSECT);
};
};
return (IN);
}
public function classifyRadius(_arg1:Number):int{
for each (_plane in planes) {
if (_plane.d < -(_arg1)){
return (OUT);
};
if (Math.abs(_plane.d) < _arg1){
return (INTERSECT);
};
};
return (IN);
}
public function classifyObject3D(_arg1:Object3D):int{
return (classifySphere(_arg1.sceneTransform.position, _arg1.boundingRadius));
}
}
}//package away3d.core.geom
Section 56
//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 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 toString():String{
return ((((((("line{ a: " + a) + " b: ") + b) + " c:") + 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 = ((_arg1.a * _arg2.b) - (_arg1.b * _arg2.a));
var _local4:Number = ((_arg1.b * _arg2.c) - (_arg1.c * _arg2.b));
var _local5:Number = ((_arg2.a * _arg1.c) - (_arg1.a * _arg2.c));
return (new ScreenVertex((_local4 / _local3), (_local5 / _local3), 0));
}
public static function from2points(_arg1:ScreenVertex, _arg2:ScreenVertex):Line2D{
var _local3:Number = (_arg2.y - _arg1.y);
var _local4:Number = (_arg1.x - _arg2.x);
var _local5:Number = -(((_local4 * _arg1.y) + (_local3 * _arg1.x)));
return (new Line2D(_local3, _local4, _local5));
}
}
}//package away3d.core.geom
Section 57
//Plane3D (away3d.core.geom.Plane3D)
package away3d.core.geom {
import away3d.core.base.*;
import away3d.core.math.*;
public class Plane3D {
public var a:Number;
public var c:Number;
public var b:Number;
public var d:Number;
private var _mt:Matrix3D;
private var _point:Number3D;
private var _len: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();
_mt = new Matrix3D();
super();
this.a = _arg1;
this.b = _arg2;
this.c = _arg3;
this.d = _arg4;
}
public function getIntersectionLine(_arg1:Vertex, _arg2:Vertex):Vertex{
var _local3:Number = ((((_point.x * _arg1.x) + (_point.y * _arg1.y)) + (_point.z * _arg1.z)) - d);
var _local4:Number = ((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d);
var _local5:Number = (((((_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 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 classifyPoint(_arg1:Number3D):int{
var _local2:Number = ((((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 from3vertices(_arg1:Vertex, _arg2:Vertex, _arg3:Vertex):void{
var _local4:Number = (_arg2.x - _arg1.x);
var _local5:Number = (_arg2.y - _arg1.y);
var _local6:Number = (_arg2.z - _arg1.z);
var _local7:Number = (_arg3.x - _arg1.x);
var _local8:Number = (_arg3.y - _arg1.y);
var _local9:Number = (_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 closestPointFrom(_arg1:Number3D):Number3D{
var _local2:Number3D;
_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);
var _local3:Number = (((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 normalize():Plane3D{
var _local1:Number = Math.sqrt((((a * a) + (b * b)) + (c * c)));
a = (a / _local1);
b = (b / _local1);
c = (c / _local1);
d = (d / _local1);
return (this);
}
public function getIntersectionLineNumbers(_arg1:Number3D, _arg2:Number3D):Number3D{
var _local3:Number = ((((_point.x * _arg1.x) + (_point.y * _arg1.y)) + (_point.z * _arg1.z)) - d);
var _local4:Number = ((((_point.x * _arg2.x) + (_point.y * _arg2.y)) + (_point.z * _arg2.z)) - d);
var _local5:Number = (((((_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 transform(_arg1:Matrix3D):void{
var _local2:Number = a;
var _local3:Number = b;
var _local4:Number = c;
var _local5:Number = 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 from3points(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D):void{
var _local4:Number = (_arg2.x - _arg1.x);
var _local5:Number = (_arg2.y - _arg1.y);
var _local6:Number = (_arg2.z - _arg1.z);
var _local7:Number = (_arg3.x - _arg1.x);
var _local8:Number = (_arg3.y - _arg1.y);
var _local9:Number = (_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 distance(_arg1:Number3D):Number{
_len = ((((a * _arg1.x) + (b * _arg1.y)) + (c * _arg1.z)) + d);
if ((((_len > -(EPSILON))) && ((_len < EPSILON)))){
_len = 0;
};
return (_len);
}
}
}//package away3d.core.geom
Section 58
//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 59
//DirectionalLight (away3d.core.light.DirectionalLight)
package away3d.core.light {
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import flash.filters.*;
import away3d.core.base.*;
import away3d.core.math.*;
import flash.geom.*;
import away3d.lights.*;
public class DirectionalLight extends LightPrimitive {
private var halfTransform:Matrix3D;
public var ambientColorTransform:ColorTransform;
private var mod:Number;
private var _green:Number;
private var _light:DirectionalLight3D;
private var quaternion:Quaternion;
private var _shape:Shape;
public var diffuseTransform:Dictionary;
private var halfQuaternion:Quaternion;
private var _szx:Number;
private var _szy:Number;
private var _szz:Number;
private var _blue:Number;
public var normalMatrixSpecularTransform:Dictionary;
private var cameraTransform:Matrix3D;
private var nx:Number;
private var ny:Number;
private var _red:Number;
private var halfVector:Number3D;
private var cameraDirection:Number3D;
private var _matrix:Matrix;
public var normalMatrixDiffuseTransform:Dictionary;
public var diffuseColorTransform:ColorTransform;
private var _normalMatrix:ColorMatrixFilter;
public var specularTransform:Dictionary;
private var transform:Matrix3D;
private var invTransform:Matrix3D;
private var direction:Number3D;
public function DirectionalLight(){
_normalMatrix = new ColorMatrixFilter();
_matrix = new Matrix();
_shape = new Shape();
quaternion = new Quaternion();
invTransform = new Matrix3D();
transform = new Matrix3D();
cameraDirection = new Number3D();
halfVector = new Number3D();
halfQuaternion = new Quaternion();
halfTransform = new Matrix3D();
direction = new Number3D();
normalMatrixDiffuseTransform = new Dictionary(true);
normalMatrixSpecularTransform = new Dictionary(true);
super();
}
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 updateSpecularBitmap():void{
specularBitmap = new BitmapData(0x0200, 0x0200, false, 0);
specularBitmap.lock();
_matrix.createGradientBox(0x0200, 0x0200, 0, 0, 0);
var _local1:Array = new Array();
var _local2:Array = new Array();
var _local3:Array = new Array();
var _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);
}
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 clearTransform():void{
diffuseTransform = new Dictionary(true);
specularTransform = new Dictionary(true);
normalMatrixDiffuseTransform = new Dictionary(true);
normalMatrixSpecularTransform = new Dictionary(true);
}
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 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 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 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 updateDiffuseBitmap():void{
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);
var _local1:Array = new Array();
var _local2:Array = new Array();
var _local3:Array = new Array();
var _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 updateAmbientDiffuseBitmap():void{
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);
var _local1:Array = new Array();
var _local2:Array = new Array();
var _local3:Array = new Array();
var _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);
}
}
}//package away3d.core.light
Section 60
//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 get ambients():Array;
function directionalLight(_arg1:DirectionalLight):void;
function clear():void;
function ambientLight(_arg1:AmbientLight):void;
}
}//package away3d.core.light
Section 61
//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 62
//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 directionalLight(_arg1:DirectionalLight):void{
_directionals.push(_arg1);
_numLights++;
}
public function clear():void{
_ambients = [];
_directionals = [];
_points = [];
_numLights = 0;
}
public function get directionals():Array{
return (_directionals);
}
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 63
//LightPrimitive (away3d.core.light.LightPrimitive)
package away3d.core.light {
import flash.display.*;
public class LightPrimitive {
public var diffuseBitmap:BitmapData;
public var specularBitmap:BitmapData;
public var green:Number;
public var ambientBitmap:BitmapData;
public var diffuse:Number;
public var specular:Number;
public var red:Number;
public var ambient:Number;
public var ambientDiffuseBitmap:BitmapData;
public var blue:Number;
}
}//package away3d.core.light
Section 64
//PointLight (away3d.core.light.PointLight)
package away3d.core.light {
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.math.*;
import away3d.lights.*;
public class PointLight extends LightPrimitive {
public var viewPositions:Dictionary;
private var _light:PointLight3D;
public function setViewPosition(_arg1:View3D):void{
if (!viewPositions[_arg1]){
viewPositions[_arg1] = new Number3D();
};
viewPositions[_arg1].clone(_arg1.cameraVarsStore.viewTransformDictionary[_light].position);
}
public function updatePosition(_arg1:Object3DEvent):void{
clearViewPositions();
}
public function get light():PointLight3D{
return (_light);
}
public function clearViewPositions():void{
viewPositions = new Dictionary(true);
}
public function set light(_arg1:PointLight3D):void{
_light = _arg1;
_arg1.addOnSceneTransformChange(updatePosition);
}
}
}//package away3d.core.light
Section 65
//Matrix3D (away3d.core.math.Matrix3D)
package away3d.core.math {
public final class Matrix3D {
private const toDEGREES:Number = 57.2957795130823;
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 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 zz: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();
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 multiplyVector3x3(_arg1:Number3D):void{
var _local2:Number = _arg1.x;
var _local3:Number = _arg1.y;
var _local4:Number = _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 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 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 = ((_arg1 / 2) * (Math.PI / 180));
var _local6:Number = Math.tan(_local5);
var _local7:Number = (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 = "";
_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{
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;
var _local7:Matrix3D = 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 66
//Number3D (away3d.core.math.Number3D)
package away3d.core.math {
public final class Number3D {
private const MathPI:Number = 3.14159265358979;
private const toDEGREES:Number = 57.2957795130823;
private var mod:Number;
private var num:Number3D;
private var dist:Number;
private var vy:Number;
private var vz:Number;
private var nx:Number;
private var ny:Number;
private var vx:Number;
private var nz:Number;
private var m1:Matrix3D;
private var m2:Matrix3D;
public var y:Number;
public var z:Number;
public var x: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 interpolate(_arg1:Number3D, _arg2:Number):void{
var _local3:Number3D = new Number3D();
_local3.sub(_arg1, this);
_local3.scale(_local3, _arg2);
add(this, _local3);
}
public function quaternion2euler(_arg1:Quaternion):void{
var _local2:Number = ((_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;
};
var _local3:Number = (_arg1.x * _arg1.x);
var _local4:Number = (_arg1.y * _arg1.y);
var _local5:Number = (_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 normalize(_arg1:Number=1):void{
mod = (modulo / _arg1);
if (((!((mod == 0))) && (!((mod == 1))))){
x = (x / mod);
y = (y / mod);
z = (z / mod);
};
}
public function getAngle(_arg1:Number3D=null):Number{
if (_arg1 == null){
_arg1 = new Number3D();
};
return (Math.acos((dot(_arg1) / (modulo * _arg1.modulo))));
}
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 add(_arg1:Number3D, _arg2:Number3D):void{
x = (_arg1.x + _arg2.x);
y = (_arg1.y + _arg2.y);
z = (_arg1.z + _arg2.z);
}
public function equals(_arg1:Number3D):Boolean{
return ((((((_arg1.x == x)) && ((_arg1.y == y)))) && ((_arg1.z == z))));
}
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 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 dot(_arg1:Number3D):Number{
return ((((x * _arg1.x) + (y * _arg1.y)) + (z * _arg1.z)));
}
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 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 scale(_arg1:Number3D, _arg2:Number):void{
x = (_arg1.x * _arg2);
y = (_arg1.y * _arg2);
z = (_arg1.z * _arg2);
}
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 toString():String{
return (((((("x:" + x) + " y:") + y) + " z:") + z));
}
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 matrix2euler(_arg1:Matrix3D, _arg2:Number=1, _arg3:Number=1, _arg4:Number=1):void{
if (!m1){
m1 = new Matrix3D();
};
x = -(Math.atan2(_arg1.szy, _arg1.szz));
m1.rotationMatrix(1, 0, 0, x);
m1.multiply(_arg1, m1);
var _local5:Number = Math.sqrt(((m1.sxx * m1.sxx) + (m1.syx * m1.syx)));
y = Math.atan2(-(m1.szx), _local5);
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 get modulo2():Number{
return ((((x * x) + (y * y)) + (z * z)));
}
public static function getInterpolated(_arg1:Number3D, _arg2:Number3D, _arg3:Number):Number3D{
var _local4:Number3D = new (Number3D);
_local4.sub(_arg1, _arg2);
_local4.scale(_local4, _arg3);
_local4.add(_local4, _arg2);
return (_local4);
}
}
}//package away3d.core.math
Section 67
//Quaternion (away3d.core.math.Quaternion)
package away3d.core.math {
public final class Quaternion {
private var fSinYaw:Number;
private var fCosYaw:Number;
private var z2:Number;
public var z:Number;
private var fCosPitch:Number;
private var w1:Number;
private var w2:Number;
private var cos_a:Number;
private var fSinRoll:Number;
private var x1:Number;
private var x2:Number;
private var sin_a:Number;
private var fCosPitchCosYaw:Number;
private var fSinPitch:Number;
private var y1:Number;
private var y2:Number;
private var fCosRoll:Number;
public var w:Number;
public var x:Number;
public var y:Number;
private var fSinPitchSinYaw:Number;
private var z1:Number;
public function normalize(_arg1:Number=1):void{
var _local2:Number = (magnitude * _arg1);
x = (x / _local2);
y = (y / _local2);
z = (z / _local2);
w = (w / _local2);
}
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 get magnitude():Number{
return (Math.sqrt(((((w * w) + (x * x)) + (y * y)) + (z * z))));
}
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 68
//ConvexBlockProjector (away3d.core.project.ConvexBlockProjector)
package away3d.core.project {
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.cameras.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.materials.*;
import away3d.core.block.*;
import away3d.cameras.lenses.*;
import away3d.blockers.*;
public class ConvexBlockProjector implements IBlockerProvider, IPrimitiveProvider {
private var _points:Array;
private var _vertex:Vertex;
private var _view:View3D;
private var _camera:Camera3D;
private var _screenVertex:ScreenVertex;
private var _vertices:Array;
private var _lens:ILens;
private var _displayObject:DisplayObject;
private var _convexBlock:ConvexBlock;
private var _p:String;
private var _s:String;
private var _base:ScreenVertex;
private var _vertexDictionary:Dictionary;
private var _segmentMaterial:ISegmentMaterial;
private var _drawPrimitiveStore:DrawPrimitiveStore;
private function cross(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:ScreenVertex):Number{
return ((((_arg2.x - _arg1.x) * (_arg3.y - _arg1.y)) - ((_arg3.x - _arg1.x) * (_arg2.y - _arg1.y))));
}
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;
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_convexBlock = (_arg1 as ConvexBlock);
_camera = _view.camera;
_lens = _camera.lens;
_vertices = _convexBlock.vertices;
if (_vertices.length < 3){
return;
};
_points = [];
_base = null;
_s = "";
_p = "";
for each (_vertex in _vertices) {
_s = (_s + (_vertex.toString() + "\n"));
_screenVertex = _lens.project(_arg2, _vertex);
if (_base == null){
_base = _screenVertex;
} else {
if (_base.y > _screenVertex.y){
_base = _screenVertex;
} else {
if (_base.y == _screenVertex.y){
if (_base.x > _screenVertex.x){
_base = _screenVertex;
};
};
};
};
_points.push(_screenVertex);
_p = (_p + (_screenVertex.toString() + "\n"));
};
for each (_screenVertex in _points) {
_screenVertex.num = ((_screenVertex.x - _base.x) / (_screenVertex.y - _base.y));
};
_base.num = -(Infinity);
_points.sortOn("num", Array.NUMERIC);
_local4 = [_points[0], _points[1]];
_local6 = 2;
while (_local6 < _points.length) {
_local5 = cross(_local4[(_local4.length - 2)], _local4[(_local4.length - 1)], _points[_local6]);
while (_local5 > 0) {
_local4.pop();
if (_local4.length == 2){
break;
};
_local5 = cross(_local4[(_local4.length - 2)], _local4[(_local4.length - 1)], _points[_local6]);
};
_local4.push(_points[_local6]);
_local6++;
};
_local5 = cross(_local4[(_local4.length - 2)], _local4[(_local4.length - 1)], _local4[0]);
if (_local5 > 0){
_local4.pop();
};
_arg3.blocker(_drawPrimitiveStore.createConvexBlocker(_arg1, _local4));
}
public function get view():View3D{
return (_view);
}
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 69
//DirSpriteProjector (away3d.core.project.DirSpriteProjector)
package away3d.core.project {
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.cameras.lenses.*;
import away3d.sprites.*;
public class DirSpriteProjector implements IPrimitiveProvider {
private var _persp:Number;
private var _vertex:Vertex;
private var _view:View3D;
private var _screenVertex:ScreenVertex;
private var _dirsprite:DirSprite2D;
private var _vertices:Array;
private var _lens:ILens;
private var _bitmaps:Dictionary;
private var _vertexDictionary:Dictionary;
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{
var _local6:Number;
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_dirsprite = (_arg1 as DirSprite2D);
_vertices = _dirsprite.vertices;
_bitmaps = _dirsprite.bitmaps;
_lens = _view.camera.lens;
if (_vertices.length == 0){
return;
};
var _local4:Number = Infinity;
var _local5:BitmapData;
for each (_vertex in _vertices) {
_screenVertex = _lens.project(_arg2, _vertex);
_local6 = _screenVertex.z;
if (_local6 < _local4){
_local4 = _local6;
_local5 = _bitmaps[_vertex];
};
};
if (_local5 == null){
return;
};
_screenVertex = _lens.project(_arg2, _dirsprite.center);
if (!_screenVertex.visible){
return;
};
_persp = (view.camera.zoom / (1 + (_screenVertex.z / view.camera.focus)));
_screenVertex.z = (_screenVertex.z + _dirsprite.deltaZ);
_arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _screenVertex, _dirsprite.smooth, _local5, (_persp * _dirsprite.scaling), _dirsprite.rotation));
}
}
}//package away3d.core.project
Section 70
//DofSpriteProjector (away3d.core.project.DofSpriteProjector)
package away3d.core.project {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.cameras.lenses.*;
import away3d.sprites.*;
public class DofSpriteProjector implements IPrimitiveProvider {
private var _dofsprite:DofSprite2D;
private var _view:View3D;
private var _dofcache:DofCache;
private var _screenVertex:ScreenVertex;
private var _drawPrimitiveStore:DrawPrimitiveStore;
private var _vertexDictionary:Dictionary;
private var _persp:Number;
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{
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_dofsprite = (_arg1 as DofSprite2D);
_lens = _view.camera.lens;
_screenVertex = _lens.project(_arg2, _dofsprite.center);
if (!_screenVertex.visible){
return;
};
_persp = (view.camera.zoom / (1 + (_screenVertex.z / view.camera.focus)));
_screenVertex.z = (_screenVertex.z + _dofsprite.deltaZ);
_dofcache = DofCache.getDofCache(_dofsprite.bitmap);
_arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _screenVertex, _dofsprite.smooth, _dofcache.getBitmap(_screenVertex.z), (_persp * _dofsprite.scaling), _dofsprite.rotation));
}
}
}//package away3d.core.project
Section 71
//MeshProjector (away3d.core.project.MeshProjector)
package away3d.core.project {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.cameras.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.materials.*;
import away3d.cameras.lenses.*;
import away3d.core.geom.*;
public class MeshProjector implements IPrimitiveProvider {
private var _faceMaterial:ITriangleMaterial;
private var _view:View3D;
private var _frustumClipping:Boolean;
private var _billboardMaterial:IBillboardMaterial;
private var _uvmaterial:Boolean;
private var _bmaterial:IBillboardMaterial;
private var _drawSegment:DrawSegment;
private var _layerMaterial:ILayerMaterial;
private var _smaterial:ISegmentMaterial;
private var _sv1:ScreenVertex;
private var _clipping:Clipping;
private var _frustum:Frustum;
private var _backface:Boolean;
private var _clipFaceVOs:Boolean;
private var _cameraVarsStore:CameraVarsStore;
private var _billboards:Array;
private var _uvt:UV;
private var _faces:Array;
private var _zoom:Number;
private var _segmentMaterial:ISegmentMaterial;
private var _face:Face;
private var _drawPrimitiveStore:DrawPrimitiveStore;
private var _n01:Face;
private var _billboard:Billboard;
private var _vertex:Vertex;
private var _camera:Camera3D;
private var _drawTriangle:DrawTriangle;
private var _mesh:Mesh;
private var _vt:ScreenVertex;
private var _drawBillBoard:DrawBillboard;
private var _clippedFaceVOs:Array;
private var _n12:Face;
private var _focus:Number;
private var _backmat:ITriangleMaterial;
private var _lens:ILens;
private var _vertices:Array;
private var _tri:DrawTriangle;
private var _n20:Face;
private var _sv2:ScreenVertex;
private var _triangles:Array;
private var _segment:Segment;
private var _faceVO:FaceVO;
private var _faceMaterialVO:FaceMaterialVO;
private var _sv0:ScreenVertex;
private var _segments:Array;
public function get view():View3D{
return (_view);
}
private function front(_arg1:Face, _arg2:Matrix3D):Number{
_sv0 = _lens.project(_arg2, _arg1.v0);
_sv1 = _lens.project(_arg2, _arg1.v1);
_sv2 = _lens.project(_arg2, _arg1.v2);
return ((((_sv0.x * (_sv2.y - _sv1.y)) + (_sv1.x * (_sv0.y - _sv2.y))) + (_sv2.x * (_sv1.y - _sv0.y))));
}
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{
_drawPrimitiveStore.createVertexDictionary(_arg1);
_cameraVarsStore.createVertexClassificationDictionary(_arg1);
_mesh = (_arg1 as Mesh);
_vertices = _mesh.vertices;
_faces = _mesh.faces;
_segments = _mesh.segments;
_billboards = _mesh.billboards;
_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));
_clippedFaceVOs = new Array();
if (_cameraVarsStore.nodeClassificationDictionary[_arg1] == Frustum.INTERSECT){
_clipFaceVOs = true;
} else {
_clipFaceVOs = false;
};
for each (_face in _faces) {
if (!_face.visible){
} else {
if (_clipFaceVOs){
_clipping.checkFace(_face.faceVO, _arg1, _clippedFaceVOs);
} else {
_clippedFaceVOs.push(_face.faceVO);
};
};
};
for each (_faceVO in _clippedFaceVOs) {
_sv0 = _lens.project(_arg2, _faceVO.v0);
_sv1 = _lens.project(_arg2, _faceVO.v1);
_sv2 = _lens.project(_arg2, _faceVO.v2);
if (((((!(_sv0.visible)) || (!(_sv1.visible)))) || (!(_sv2.visible)))){
} else {
_face = _faceVO.face;
_tri = _drawPrimitiveStore.createDrawTriangle(_arg1, _faceVO, null, _sv0, _sv1, _sv2, _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(_n01, _arg2) <= 0)))){
_arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _mesh.outline, _tri.v0, _tri.v1));
};
_n12 = _mesh.geometry.neighbour12(_face);
if ((((_n12 == null)) || ((front(_n12, _arg2) <= 0)))){
_arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _mesh.outline, _tri.v1, _tri.v2));
};
_n20 = _mesh.geometry.neighbour20(_face);
if ((((_n20 == null)) || ((front(_n20, _arg2) <= 0)))){
_arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _mesh.outline, _tri.v2, _tri.v0));
};
};
};
};
};
};
for each (_segment in _segments) {
_sv0 = _lens.project(_arg2, _segment.v0);
_sv1 = _lens.project(_arg2, _segment.v1);
if (((!(_sv0.visible)) || (!(_sv1.visible)))){
} else {
_smaterial = ((_segment.material) || (_segmentMaterial));
if (!_smaterial.visible){
} else {
_arg3.primitive(_drawPrimitiveStore.createDrawSegment(_arg1, _smaterial, _sv0, _sv1));
};
};
};
for each (_billboard in _billboards) {
if (!_billboard.visible){
} else {
_sv0 = _lens.project(_arg2, _billboard.vertex);
if (!_sv0.visible){
} else {
_bmaterial = ((_billboard.material) || (_billboardMaterial));
if (!_bmaterial.visible){
} else {
_arg3.primitive(_drawPrimitiveStore.createDrawBillboard(_arg1, _bmaterial, _sv0, _billboard.width, _billboard.height, ((_billboard.scaling * _zoom) / (1 + (_sv0.z / _focus))), _billboard.rotation));
};
};
};
};
}
}
}//package away3d.core.project
Section 72
//MovieClipSpriteProjector (away3d.core.project.MovieClipSpriteProjector)
package away3d.core.project {
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.sprites.*;
public class MovieClipSpriteProjector implements IPrimitiveProvider {
private var _movieclip:DisplayObject;
private var _view:View3D;
private var _movieClipSprite:MovieClipSprite;
private var _screenVertex:ScreenVertex;
private var _vertexDictionary:Dictionary;
private var _persp:Number;
private var _drawPrimitiveStore:DrawPrimitiveStore;
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{
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_movieClipSprite = (_arg1 as MovieClipSprite);
_movieclip = _movieClipSprite.movieclip;
_screenVertex = _view.camera.lens.project(_arg2, _movieClipSprite.center);
_persp = (view.camera.zoom / (1 + (_screenVertex.z / view.camera.focus)));
_screenVertex.z = (_screenVertex.z + _movieClipSprite.deltaZ);
if (_movieClipSprite.align != "none"){
switch (_movieClipSprite.align){
case "center":
_screenVertex.x = (_screenVertex.x - (_movieclip.width / 2));
_screenVertex.y = (_screenVertex.y - (_movieclip.height / 2));
break;
case "topcenter":
_screenVertex.x = (_screenVertex.x - (_movieclip.width / 2));
break;
case "bottomcenter":
_screenVertex.x = (_screenVertex.x - (_movieclip.width / 2));
_screenVertex.y = (_screenVertex.y - _movieclip.height);
break;
case "right":
_screenVertex.x = (_screenVertex.x - _movieclip.width);
_screenVertex.y = (_screenVertex.y - (_movieclip.height / 2));
break;
case "topright":
_screenVertex.x = (_screenVertex.x - _movieclip.width);
break;
case "bottomright":
_screenVertex.x = (_screenVertex.x - _movieclip.width);
_screenVertex.y = (_screenVertex.y - _movieclip.height);
break;
case "left":
_screenVertex.y = (_screenVertex.y - (_movieclip.height / 2));
break;
case "topleft":
break;
case "bottomleft":
_screenVertex.y = (_screenVertex.y - _movieclip.height);
break;
};
};
if (_movieClipSprite.rescale){
_movieclip.scaleX = (_movieclip.scaleY = (_persp * _movieClipSprite.scaling));
};
_arg3.primitive(_drawPrimitiveStore.createDrawDisplayObject(_arg1, _screenVertex, _movieClipSprite.session, _movieclip));
}
}
}//package away3d.core.project
Section 73
//ObjectContainerProjector (away3d.core.project.ObjectContainerProjector)
package away3d.core.project {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.cameras.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
public class ObjectContainerProjector implements IPrimitiveProvider {
private var _container:ObjectContainer3D;
private var _view:View3D;
private var _camera:Camera3D;
private var _screenVertex:ScreenVertex;
private var _child:Object3D;
private var _cameraViewMatrix:Matrix3D;
private var _vertexDictionary:Dictionary;
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{
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_container = (_arg1 as ObjectContainer3D);
_cameraViewMatrix = _view.camera.viewMatrix;
_viewTransformDictionary = _view.cameraVarsStore.viewTransformDictionary;
for each (_child in _container.children) {
if (((_child.ownCanvas) && (_child.visible))){
if ((_child.ownSession is SpriteRenderSession)){
(_child.ownSession as SpriteRenderSession).cacheAsBitmap = true;
};
_screenVertex = _drawPrimitiveStore.createScreenVertex(_child.center);
_screenVertex.x = 0;
_screenVertex.y = 0;
if (!isNaN(_child.ownSession.screenZ)){
_screenVertex.z = _child.ownSession.screenZ;
} else {
if (_child.scenePivotPoint.modulo){
_depthPoint.clone(_child.scenePivotPoint);
_depthPoint.rotate(_depthPoint, _cameraViewMatrix);
_depthPoint.add(_viewTransformDictionary[_child].position, _depthPoint);
_screenVertex.z = _depthPoint.modulo;
} else {
_screenVertex.z = _viewTransformDictionary[_child].position.modulo;
};
if (_child.pushback){
_screenVertex.z = (_screenVertex.z + _child.parentBoundingRadius);
};
if (_child.pushfront){
_screenVertex.z = (_screenVertex.z - _child.parentBoundingRadius);
};
_screenVertex.z = (_screenVertex.z + _child.screenZOffset);
};
_arg3.primitive(_drawPrimitiveStore.createDrawDisplayObject(_child, _screenVertex, _container.session, _child.session.getContainer(view)));
};
};
}
}
}//package away3d.core.project
Section 74
//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 75
//SpriteProjector (away3d.core.project.SpriteProjector)
package away3d.core.project {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.sprites.*;
public class SpriteProjector implements IPrimitiveProvider {
private var _view:View3D;
private var _sprite:Sprite2D;
private var _drawScaledBitmap:DrawScaledBitmap;
private var _screenVertex:ScreenVertex;
private var _vertexDictionary:Dictionary;
private var _drawPrimitiveStore:DrawPrimitiveStore;
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{
_vertexDictionary = _drawPrimitiveStore.createVertexDictionary(_arg1);
_sprite = (_arg1 as Sprite2D);
_screenVertex = _view.camera.lens.project(_arg2, _sprite.center);
if (!_screenVertex.visible){
return;
};
_screenVertex.z = (_screenVertex.z + _sprite.deltaZ);
_arg3.primitive(_drawPrimitiveStore.createDrawScaledBitmap(_arg1, _screenVertex, _sprite.smooth, _sprite.bitmap, ((_sprite.scaling * _view.camera.zoom) / (1 + (_screenVertex.z / _view.camera.focus))), _sprite.rotation));
}
}
}//package away3d.core.project
Section 76
//AbstractRenderSession (away3d.core.render.AbstractRenderSession)
package away3d.core.render {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.core.base.*;
import away3d.core.light.*;
import away3d.materials.*;
import flash.geom.*;
public class AbstractRenderSession extends EventDispatcher {
public var filters:Array;
private var b2:Number;
var _spriteActive:Array;
private var _renderer:IPrimitiveConsumer;
private var triangle:DrawTriangle;
private var _shapeActives:Dictionary;
private var materials:Dictionary;
private var c2:Number;
var _renderSource:Object3D;
private var _dictionary:Dictionary;
private var v0x:Number;
private var v0y:Number;
private var _spriteLayers:Dictionary;
var _shapeActive:Array;
public var layer:DisplayObject;
private var _consumer:IPrimitiveConsumer;
private var _session:AbstractRenderSession;
private var _array:Array;
var _spriteStore:Array;
var _shapeStore:Array;
private var a:Number;
private var c:Number;
private var d:Number;
private var v1y:Number;
private var d2:Number;
private var b:Number;
private var m:Matrix;
protected var i:int;
public var primitives:Array;
private var v1x:Number;
private var v2y:Number;
public var alpha:Number;// = 1
private var v2x:Number;
private var _shapeLayers:Dictionary;
var _level:int;// = -1
var _material:IMaterial;
private var _sessionupdated:SessionEvent;
private var area:Number;
public var priconsumers:Dictionary;
private var ds:DisplayObject;
private var _renderers:Dictionary;
public var graphics:Graphics;
private var tx:Number;
private var ty:Number;
public var screenZ:Number;
public var sessions:Array;
var _layerDirty:Boolean;
var _shape:Shape;
public var blendMode:String;
private var _lightShapeLayer:Dictionary;
private var _spriteActives:Dictionary;
private var _lightShapeLayers:Dictionary;
var _containers:Dictionary;
private var _spriteStores:Dictionary;
public var parent:AbstractRenderSession;
public var updated:Boolean;
private var _spriteLayer:Dictionary;
private var _shapeLayer:Dictionary;
private var time:int;
var _sprite:Sprite;
private var primitive:DrawPrimitive;
private var _defaultColorTransform:ColorTransform;
private var a2:Number;
private var _shapeStores:Dictionary;
public var consumer:IPrimitiveConsumer;
public function AbstractRenderSession(){
_containers = new Dictionary(true);
_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();
priconsumers = new Dictionary(true);
super();
}
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 addChildSession(_arg1:AbstractRenderSession):void{
if (sessions.indexOf(_arg1) != -1){
return;
};
sessions.push(_arg1);
_arg1.addOnSessionUpdate(onSessionUpdate);
_arg1.parent = this;
}
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] = new Array());
};
if ((((_level >= _arg2)) && (_array.length))){
_shape = _array[0];
} else {
_level = _arg2;
_array.unshift((_shape = createShape(_arg3)));
};
return (_shape);
}
public function getShapeLayer(_arg1:View3D):Dictionary{
if (!_shapeLayers[_arg1]){
return ((_shapeLayers[_arg1] = new Dictionary(true)));
};
return (_shapeLayers[_arg1]);
}
function internalAddSceneSession(_arg1:AbstractRenderSession):void{
sessions = [_arg1];
_arg1.addOnSessionUpdate(onSessionUpdate);
}
public function renderTriangleBitmapMask(_arg1:BitmapData, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:ScreenVertex, _arg6:ScreenVertex, _arg7:ScreenVertex, _arg8:Boolean, _arg9:Boolean, _arg10:Graphics=null):void{
if (_layerDirty){
createLayer();
};
a2 = ((v1x = _arg6.x) - (v0x = _arg5.x));
b2 = ((v1y = _arg6.y) - (v0y = _arg5.y));
c2 = ((v2x = _arg7.x) - v0x);
d2 = ((v2y = _arg7.y) - v0y);
m.identity();
m.scale(_arg4, _arg4);
m.translate(_arg2, _arg3);
if (_arg10){
_arg10.lineStyle();
_arg10.moveTo(v0x, v0y);
_arg10.beginBitmapFill(_arg1, m, _arg9, ((_arg8) && (((((v0x * (d2 - b2)) - (v1x * d2)) + (v2x * b2)) > 400))));
_arg10.lineTo(v1x, v1y);
_arg10.lineTo(v2x, v2y);
_arg10.endFill();
} else {
graphics.lineStyle();
graphics.moveTo(v0x, v0y);
graphics.beginBitmapFill(_arg1, m, _arg9, ((_arg8) && (((((v0x * (d2 - b2)) - (v1x * d2)) + (v2x * b2)) > 400))));
graphics.lineTo(v1x, v1y);
graphics.lineTo(v2x, v2y);
graphics.endFill();
};
}
function notifySessionUpdate():void{
if (!hasEventListener(SessionEvent.SESSION_UPDATED)){
return;
};
if (!_sessionupdated){
_sessionupdated = new SessionEvent(SessionEvent.SESSION_UPDATED, this);
};
dispatchEvent(_sessionupdated);
}
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:ScreenVertex, _arg4:ScreenVertex, _arg5:ScreenVertex, _arg6:Graphics=null):void{
if (((!(_arg6)) && (_layerDirty))){
createLayer();
};
if (_arg6){
_arg6.lineStyle();
_arg6.moveTo(_arg3.x, _arg3.y);
_arg6.beginFill(_arg1, _arg2);
_arg6.lineTo(_arg4.x, _arg4.y);
_arg6.lineTo(_arg5.x, _arg5.y);
_arg6.endFill();
} else {
graphics.lineStyle();
graphics.moveTo(_arg3.x, _arg3.y);
graphics.beginFill(_arg1, _arg2);
graphics.lineTo(_arg4.x, _arg4.y);
graphics.lineTo(_arg5.x, _arg5.y);
graphics.endFill();
};
}
public function clear(_arg1:View3D):void{
updated = ((((_arg1.updated) || (_arg1.forceUpdate))) || (_arg1.scene.updatedSessions[this]));
for each (_session in sessions) {
_session.clear(_arg1);
};
if (updated){
_consumer = getConsumer(_arg1);
_spriteLayer = getSpriteLayer(_arg1);
for each (_array in _spriteLayer) {
_array.length = 0;
};
_shapeLayer = getShapeLayer(_arg1);
for each (_array in _shapeLayer) {
_array.length = 0;
};
_lightShapeLayer = getLightShapeLayer(_arg1);
for each (_dictionary in _lightShapeLayer) {
for each (_array in _dictionary) {
_array.length = 0;
};
};
_level = -1;
_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);
};
}
public function getSpriteLayer(_arg1:View3D):Dictionary{
if (!_spriteLayers[_arg1]){
return ((_spriteLayers[_arg1] = new Dictionary(true)));
};
return (_spriteLayers[_arg1]);
}
protected function onSessionUpdate(_arg1:SessionEvent):void{
dispatchEvent(_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 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()));
}
public function clone():AbstractRenderSession{
throw (new Error("Not implemented"));
}
public function addDisplayObject(_arg1:DisplayObject):void{
throw (new Error("Not implemented"));
}
public function set renderer(_arg1:IPrimitiveConsumer):void{
if (_renderer == _arg1){
return;
};
_renderer = _arg1;
clearRenderers();
for each (_session in sessions) {
_session.clearRenderers();
};
}
public function removeChildSession(_arg1:AbstractRenderSession):void{
_arg1.removeOnSessionUpdate(onSessionUpdate);
var _local2:int = sessions.indexOf(_arg1);
if (_local2 == -1){
return;
};
sessions.splice(_local2, 1);
}
public function renderTriangleLineFill(_arg1:Number, _arg2:int, _arg3:Number, _arg4:int, _arg5:Number, _arg6:ScreenVertex, _arg7:ScreenVertex, _arg8:ScreenVertex):void{
if (_layerDirty){
createLayer();
};
if (_arg5 > 0){
graphics.lineStyle(_arg1, _arg4, _arg5);
} else {
graphics.lineStyle();
};
graphics.moveTo(_arg6.x, _arg6.y);
if (_arg3 > 0){
graphics.beginFill(_arg2, _arg3);
};
graphics.lineTo(_arg7.x, _arg7.y);
graphics.lineTo(_arg8.x, _arg8.y);
if (_arg5 > 0){
graphics.lineTo(_arg6.x, _arg6.y);
};
if (_arg3 > 0){
graphics.endFill();
};
}
public function clearChildSessions():void{
for each (_session in sessions) {
_session.removeOnSessionUpdate(onSessionUpdate);
};
sessions = new Array();
}
public function render(_arg1:View3D):void{
for each (_session in sessions) {
_session.render(_arg1);
};
if (updated){
(getConsumer(_arg1) as IRenderer).render(_arg1);
};
}
private function onObjectSessionUpdate(_arg1:Object3DEvent):void{
notifySessionUpdate();
}
function internalRemoveSceneSession(_arg1:AbstractRenderSession):void{
sessions = [];
_arg1.removeOnSessionUpdate(onSessionUpdate);
}
public function renderTriangleBitmap(_arg1:BitmapData, _arg2:Matrix, _arg3:ScreenVertex, _arg4:ScreenVertex, _arg5:ScreenVertex, _arg6:Boolean, _arg7:Boolean, _arg8:Graphics=null):void{
if (((!(_arg8)) && (_layerDirty))){
createLayer();
};
a2 = ((v1x = _arg4.x) - (v0x = _arg3.x));
b2 = ((v1y = _arg4.y) - (v0y = _arg3.y));
c2 = ((v2x = _arg5.x) - v0x);
d2 = ((v2y = _arg5.y) - 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 (_arg8){
_arg8.lineStyle();
_arg8.moveTo(v0x, v0y);
_arg8.beginBitmapFill(_arg1, m, _arg7, ((_arg6) && ((area > 400))));
_arg8.lineTo(v1x, v1y);
_arg8.lineTo(v2x, v2y);
_arg8.endFill();
} else {
graphics.lineStyle();
graphics.moveTo(v0x, v0y);
graphics.beginBitmapFill(_arg1, m, _arg7, ((_arg6) && ((area > 400))));
graphics.lineTo(v1x, v1y);
graphics.lineTo(v2x, v2y);
graphics.endFill();
};
}
private function getSpriteActive(_arg1:View3D):Array{
if (!_spriteActives[_arg1]){
return ((_spriteActives[_arg1] = new Array()));
};
return (_spriteActives[_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.topleft.x, _arg3.topleft.y);
graphics.lineTo(_arg3.topright.x, _arg3.topright.y);
graphics.lineTo(_arg3.bottomright.x, _arg3.bottomright.y);
graphics.lineTo(_arg3.bottomleft.x, _arg3.bottomleft.y);
graphics.lineTo(_arg3.topleft.x, _arg3.topleft.y);
graphics.endFill();
} else {
graphics.beginFill(_arg1, _arg2);
graphics.drawRect(_arg3.minX, _arg3.minY, (_arg3.maxX - _arg3.minX), (_arg3.maxY - _arg3.minY));
graphics.endFill();
};
}
protected function createLayer():void{
throw (new Error("Not implemented"));
}
public function getLightShapeLayer(_arg1:View3D):Dictionary{
if (!_lightShapeLayers[_arg1]){
return ((_lightShapeLayers[_arg1] = new Dictionary(true)));
};
return (_lightShapeLayers[_arg1]);
}
function internalRemoveOwnSession(_arg1:Object3D):void{
_arg1.removeEventListener(Object3DEvent.SESSION_UPDATED, onObjectSessionUpdate);
}
private function getShapeStore(_arg1:View3D):Array{
if (!_shapeStores[_arg1]){
return ((_shapeStores[_arg1] = new Array()));
};
return (_shapeStores[_arg1]);
}
public function addOnSessionUpdate(_arg1:Function):void{
addEventListener(SessionEvent.SESSION_UPDATED, _arg1, false, 0, false);
}
public function get renderer():IPrimitiveConsumer{
return (_renderer);
}
public function getContainer(_arg1:View3D):DisplayObject{
throw (new Error("Not implemented"));
}
public function renderLine(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:Number, _arg4:uint, _arg5:Number):void{
if (_layerDirty){
createLayer();
};
graphics.lineStyle(_arg3, _arg4, _arg5);
graphics.moveTo(_arg1.x, _arg1.y);
graphics.lineTo(_arg2.x, _arg2.y);
}
private function getShapeActive(_arg1:View3D):Array{
if (!_shapeActives[_arg1]){
return ((_shapeActives[_arg1] = new Array()));
};
return (_shapeActives[_arg1]);
}
public function getSprite(_arg1:ILayerMaterial, _arg2:int, _arg3:Sprite=null):Sprite{
if (!(_array = _spriteLayer[_arg1])){
_array = (_spriteLayer[_arg1] = new Array());
};
if (((!(_arg2)) && (!((_arg1 == _material))))){
_level = -1;
_material = _arg1;
};
if ((((_level >= _arg2)) && (_array.length))){
_sprite = _array[0];
} else {
_level = _arg2;
_array.unshift((_sprite = createSprite(_arg3)));
};
return (_sprite);
}
public function renderTriangleLine(_arg1:Number, _arg2:int, _arg3:Number, _arg4:ScreenVertex, _arg5:ScreenVertex, _arg6:ScreenVertex):void{
if (_layerDirty){
createLayer();
};
graphics.lineStyle(_arg1, _arg2, _arg3);
graphics.moveTo((v0x = _arg4.x), (v0y = _arg4.y));
graphics.lineTo(_arg5.x, _arg5.y);
graphics.lineTo(_arg6.x, _arg6.y);
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.topleft.x, _arg1.topleft.y);
graphics.lineTo(_arg1.topright.x, _arg1.topright.y);
graphics.lineTo(_arg1.bottomright.x, _arg1.bottomright.y);
graphics.lineTo(_arg1.bottomleft.x, _arg1.bottomleft.y);
graphics.lineTo(_arg1.topleft.x, _arg1.topleft.y);
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 = getConsumer(_arg1).list().length;
for each (_session in sessions) {
_local2 = (_local2 + _session.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] = new Array()));
};
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.topleft.x, _arg2.topleft.y);
graphics.lineTo(_arg2.topright.x, _arg2.topright.y);
graphics.lineTo(_arg2.bottomright.x, _arg2.bottomright.y);
graphics.lineTo(_arg2.bottomleft.x, _arg2.bottomleft.y);
graphics.lineTo(_arg2.topleft.x, _arg2.topleft.y);
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] = new Array());
};
if ((((_level >= _arg2)) && (_array.length))){
_shape = _array[0];
} else {
_level = _arg2;
_array.unshift((_shape = createShape(_arg3)));
};
return (_shape);
}
function internalAddOwnSession(_arg1:Object3D):void{
_arg1.addEventListener(Object3DEvent.SESSION_UPDATED, onObjectSessionUpdate);
}
}
}//package away3d.core.render
Section 77
//BasicRenderer (away3d.core.render.BasicRenderer)
package away3d.core.render {
import away3d.containers.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.cameras.*;
import away3d.core.block.*;
import away3d.core.filter.*;
public class BasicRenderer implements IRenderer, IPrimitiveConsumer {
private var _blocker:Blocker;
private var _camera:Camera3D;
private var _view:View3D;
private var _scene:Scene3D;
private var _primitives:Array;
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 = [];
_blockers = [];
super();
_filters = _args;
_filters.push(new ZSortFilter());
}
public function clear(_arg1:View3D):void{
_primitives = [];
_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 = new BasicRenderer();
_local1.filters = filters;
return (_local1);
}
public function primitive(_arg1:DrawPrimitive):Boolean{
if (!_screenClipping.checkPrimitive(_arg1)){
return (false);
};
for each (_blocker in _blockers) {
if (_blocker.screenZ > _arg1.minZ){
} else {
if (_blocker.block(_arg1)){
return (false);
};
};
};
_primitives.push(_arg1);
return (true);
}
public function toString():String{
return ((("Basic [" + _filters.join("+")) + "]"));
}
public function set filters(_arg1:Array):void{
_filters = _arg1;
_filters.push(new ZSortFilter());
}
public function get filters():Array{
return (_filters.slice(0, (_filters.length - 1)));
}
}
}//package away3d.core.render
Section 78
//BitmapRenderSession (away3d.core.render.BitmapRenderSession)
package away3d.core.render {
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import flash.geom.*;
public class BitmapRenderSession extends AbstractRenderSession {
private var _bitmapContainers:Dictionary;
private var _container:Sprite;
private var _height:int;
private var _cm:Matrix;
private var _scale:Number;
private var layers:Array;
private var _bitmapContainer:Bitmap;
private var _cx:Number;
private var _cy:Number;
private var _width:int;
private var _layer:DisplayObject;
private var mActive:Array;
private var mStore:Array;
private var _bitmapheight:int;
private var _base:BitmapData;
private var _bitmapwidth:int;
public function BitmapRenderSession(_arg1:Number=2){
_bitmapContainers = new Dictionary(true);
mStore = new Array();
mActive = new Array();
layers = [];
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 = [];
_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 addDisplayObject(_arg1:DisplayObject):void{
layers.push(_arg1);
_arg1.visible = true;
_layerDirty = true;
}
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);
}
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 public function render(_arg1:View3D):void{
super.render(_arg1);
if (updated){
for each (_layer in layers) {
_base.draw(_layer, _cm, _layer.transform.colorTransform, _layer.blendMode, _base.rect);
};
_base.unlock();
};
}
public function getBitmapContainer(_arg1:View3D):Bitmap{
if (!_bitmapContainers[_arg1]){
return ((_bitmapContainers[_arg1] = new Bitmap()));
};
return (_bitmapContainers[_arg1]);
}
override public function clone():AbstractRenderSession{
return (new BitmapRenderSession(_scale));
}
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 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;
}
}
}//package away3d.core.render
Section 79
//IRenderer (away3d.core.render.IRenderer)
package away3d.core.render {
import away3d.containers.*;
public interface IRenderer {
function toString():String;
function render(_arg1:View3D):void;
}
}//package away3d.core.render
Section 80
//SpriteRenderSession (away3d.core.render.SpriteRenderSession)
package away3d.core.render {
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.clip.*;
import flash.geom.*;
public class SpriteRenderSession extends AbstractRenderSession {
private var _container:Sprite;
public var cacheAsBitmap:Boolean;
private var _clip:Clipping;
public function SpriteRenderSession():void{
}
override protected function onSessionUpdate(_arg1:SessionEvent):void{
super.onSessionUpdate(_arg1);
cacheAsBitmap = false;
}
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);
};
_layerDirty = true;
return (_sprite);
}
override public function addDisplayObject(_arg1:DisplayObject):void{
_container.addChild(_arg1);
_arg1.visible = true;
layer = null;
_level = -1;
_layerDirty = true;
}
override public function getContainer(_arg1:View3D):DisplayObject{
if (!_containers[_arg1]){
return ((_containers[_arg1] = new Sprite()));
};
return (_containers[_arg1]);
}
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 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 clone():AbstractRenderSession{
return (new SpriteRenderSession());
}
}
}//package away3d.core.render
Section 81
//Logo (away3d.core.stats.Logo)
package away3d.core.stats {
import flash.display.*;
public class Logo extends Shape {
private var arr:Array;
public function Logo(){
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);
var _local1:int = arr.length;
var _local2:int;
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 82
//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 83
//Stats (away3d.core.stats.Stats)
package away3d.core.stats {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.cameras.*;
import away3d.core.base.*;
import flash.geom.*;
import flash.text.*;
import flash.net.*;
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 = "3.3";
private var meshLabel:StaticTextField;
private var bar:Sprite;
private var barscale:int;// = 0
private var swfframerateLabel:StaticTextField;
private var cambtn:Sprite;
private var geomDetailsLabel:TextField;
public var displayMenu:Sprite;// = null
var type:String;
private var defautTF:TextFormat;
private var geomLastAdded:String;
public var sourceURL:String;
private var peakLabel:StaticTextField;
private var totalElements:int;// = 0
private var faceRenderLabel:StaticTextField;
private var meshes:int;// = 0
private var camLabel:TextField;
private var closebtn:Sprite;
var url:String;
private var rectcam:Rectangle;
private var defautTFBold:TextFormat;
private var ramLabel:StaticTextField;
private var bestfps:int;// = 0
private var titleField:StaticTextField;
private var fpsLabel:StaticTextField;
private var stageframerate:Number;
private var perfLabel:StaticTextField;
private var barwidth:int;// = 0
private var rectclose:Rectangle;
private var faceLabel:StaticTextField;
public var stats:String;// = ""
private var geombtn:Sprite;
var elementcount:int;
private var lastrender:int;
private var menu0:ContextMenuItem;
private var menu1:ContextMenuItem;
private var menu2:ContextMenuItem;
public var geomMenu:Sprite;// = null
private var avfpsLabel:StaticTextField;
private var refreshes:int;// = 0
private var camMenu:Sprite;
private var camProp:Array;
public var scopeMenu:View3D;// = null
private var rectclear:Rectangle;
private var rectdetails:Rectangle;
private var clearbtn:Sprite;
private var lowestfps:int;// = 999
private var fpstotal:int;// = 0
private var displayState:int;
public function Stats(_arg1:View3D, _arg2:Number=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);
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);
var _local3:ContextMenu = 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;
}
private function mouseReleased(_arg1:MouseEvent):void{
displayMenu.stopDrag();
scopeMenu.removeEventListener(MouseEvent.MOUSE_UP, mouseReleased);
}
private function createGeometryMenu():void{
geomMenu = new Sprite();
var _local1:Matrix = 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);
}
public function clearObjects():void{
stats = "";
totalElements = 0;
meshes = 0;
geomLastAdded = "";
}
public function viewSource(_arg1:ContextMenuEvent):void{
var e = _arg1;
var request:URLRequest = new URLRequest(sourceURL);
try {
navigateToURL(request, "_blank");
} catch(error:Error) {
};
}
private function showGeomInfo():void{
if (geomMenu == null){
createGeometryMenu();
} else {
displayMenu.addChild(geomMenu);
geomMenu.y = 26;
};
}
private function createCamMenu():void{
camMenu = new Sprite();
var _local1:Matrix = 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;
var _local2:TextFormat = 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"];
var _local3:TextField = 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;
var _local4:int;
while (_local4 < camProp.length) {
_local3.appendText((camProp[_local4] + ":\n"));
_local4++;
};
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 fps:int;
var average:int;
var w:int;
var caminfo:String;
var i:int;
var info:String;
var renderedfaces = _arg1;
var camera = _arg2;
var now:int = getTimer();
var perf:int = (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;
};
var procent:int = ((bar.width / barwidth) * 100);
var colorTransform: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 = "";
i = 0;
while (i < camProp.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 clearStats():void{
fpstotal = 0;
refreshes = 0;
bestfps = 0;
lowestfps = 999;
}
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 closeOtherScreen(_arg1:int):void{
switch (_arg1){
case 1:
hideCamInfo();
break;
case 2:
hideGeomInfo();
};
}
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) {
};
};
}
private function generateSprite():void{
displayMenu = new Sprite();
var _local1:Matrix = 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);
var _local2:Sprite = 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();
var _local3:Graphics = 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();
var _local4:Graphics = 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();
var _local5:Graphics = 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);
var _local6:StaticTextField = 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);
var _local7:StaticTextField = 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);
var _local8:StaticTextField = 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);
var _local9:StaticTextField = 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);
var _local10:StaticTextField = 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);
var _local11:StaticTextField = 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);
var _local12:StaticTextField = 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);
var _local13:StaticTextField = 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);
var _local14:StaticTextField = 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 addSourceURL(_arg1:String):void{
sourceURL = _arg1;
var _local2:ContextMenu = new ContextMenu();
_local2.customItems = (sourceURL) ? [menu0, menu1, menu2] : [menu0, menu2];
scopeMenu.contextMenu = _local2;
}
private function onCheckMouse(_arg1:MouseEvent):void{
var _local2:Number = displayMenu.mouseX;
var _local3:Number = displayMenu.mouseY;
var _local4:Point = 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 addEventMouse():void{
scopeMenu.addEventListener(MouseEvent.MOUSE_DOWN, onCheckMouse);
scopeMenu.addEventListener(MouseEvent.MOUSE_MOVE, updateTips);
}
public function visitWebsite(_arg1:ContextMenuEvent):void{
var e = _arg1;
var url = "http://www.away3d.com";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request);
} catch(error:Error) {
};
}
private function displayPicto():void{
var _local1:Shape = new Logo();
displayMenu.addChild(_local1);
_local1.x = (_local1.y = 4);
}
public function displayStats(_arg1:ContextMenuEvent=null):void{
if (!displayMenu){
scopeMenu.statsOpen = true;
generateSprite();
addEventMouse();
};
}
}
}//package away3d.core.stats
Section 84
//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{
if (!_arg1.visible){
return (false);
};
return (true);
}
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 85
//PrimitiveTraverser (away3d.core.traverse.PrimitiveTraverser)
package away3d.core.traverse {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.light.*;
import away3d.materials.*;
import away3d.core.geom.*;
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(){
_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 = [];
_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 86
//ProjectionTraverser (away3d.core.traverse.ProjectionTraverser)
package away3d.core.traverse {
import away3d.containers.*;
import away3d.core.clip.*;
import away3d.cameras.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.cameras.lenses.*;
import away3d.core.geom.*;
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 87
//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{
if (!_arg1.visible){
return (false);
};
return (true);
}
override public function apply(_arg1:Object3D):void{
_arg1.updateSession();
}
}
}//package away3d.core.traverse
Section 88
//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 89
//Traverser (away3d.core.traverse.Traverser)
package away3d.core.traverse {
import away3d.core.base.*;
public class Traverser {
public function enter(_arg1:Object3D):void{
}
public function match(_arg1:Object3D):Boolean{
return (true);
}
public function apply(_arg1:Object3D):void{
}
public function leave(_arg1:Object3D):void{
}
}
}//package away3d.core.traverse
Section 90
//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 91
//CameraVarsStore (away3d.core.utils.CameraVarsStore)
package away3d.core.utils {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.materials.*;
import away3d.core.geom.*;
public class CameraVarsStore {
private var _uvStore:Array;
private var _vtStore:Array;
public var frustumDictionary:Dictionary;
private var _frustum:Frustum;
public var view:View3D;
private var _vStore:Array;
private var _frStore:Array;
public var viewTransformDictionary:Dictionary;
public var nodeClassificationDictionary:Dictionary;
private var _uv:UV;
private var _vertex:Vertex;
private var _fStore:Array;
private var _vtActive:Array;
private var _vc:VertexClassification;
private var _fActive:Array;
private var _frActive:Array;
private var _source:Object3D;
private var _session:AbstractRenderSession;
private var _vt:Matrix3D;
private var _object:Object;
private var _vActive:Array;
private var _vcArray: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 = new Array();
_vtStore = new Array();
_frActive = new Array();
_frStore = new Array();
_vActive = new Array();
_vStore = new Array();
_vcStore = new Array();
_uvDictionary = new Dictionary(true);
_uvStore = new Array();
_fActive = new Array();
_fStore = new Array();
viewTransformDictionary = new Dictionary(true);
frustumDictionary = new Dictionary(true);
super();
}
public function createFaceVO(_arg1:Face, _arg2:Vertex, _arg3:Vertex, _arg4:Vertex, _arg5:ITriangleMaterial, _arg6:ITriangleMaterial, _arg7:UV, _arg8:UV, _arg9:UV):FaceVO{
if (_fStore.length){
_fActive.push((_faceVO = _fStore.pop()));
} else {
_fActive.push((_faceVO = new FaceVO()));
};
_faceVO.face = _arg1;
_faceVO.v0 = _arg2;
_faceVO.v1 = _arg3;
_faceVO.v2 = _arg4;
_faceVO.uv0 = _arg7;
_faceVO.uv1 = _arg8;
_faceVO.uv2 = _arg9;
_faceVO.material = _arg5;
_faceVO.back = _arg6;
_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 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 = new Array();
_frStore = _frStore.concat(_frActive);
_frActive = new Array();
_vStore = _vStore.concat(_vActive);
_vActive = new Array();
for (_object in _uvDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_uvStore = _uvStore.concat((_uvDictionary[_session] as Array));
_uvDictionary[_session] = [];
};
};
_fStore = _fStore.concat(_fActive);
_fActive = new Array();
}
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 92
//Cast (away3d.core.utils.Cast)
package away3d.core.utils {
import flash.display.*;
import flash.utils.*;
import away3d.materials.*;
import flash.geom.*;
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 = 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;
while (_local2 < _arg1.length) {
if (hexchars.indexOf(_arg1.charAt(_local2)) == -1){
return (false);
};
_local2++;
};
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 name = _arg1;
if (notclasses[name]){
return (name);
};
var result:Class = 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 93
//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 94
//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 = ((0xFF - _arg1) & (0xFF0000 >> 16));
var _local4 = ((0xFF - _arg1) & (0xFF00 >> 8));
var _local5 = ((0xFF - _arg1) & 0xFF);
var _local6 = ((0xFF - _arg2) & (0xFF0000 >> 16));
var _local7 = ((0xFF - _arg2) & (0xFF00 >> 8));
var _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 = (_arg1 & (0xFF0000 >> 16));
var _local4 = (_arg1 & (0xFF00 >> 8));
var _local5 = (_arg1 & 0xFF);
var _local6 = (_arg2 & (0xFF0000 >> 16));
var _local7 = (_arg2 & (0xFF00 >> 8));
var _local8 = (_arg2 & 0xFF);
return (fromIntsCheck((_local3 + _local6), (_local4 + _local7), (_local5 + _local8)));
}
public static function multiply(_arg1:int, _arg2:Number):int{
var _local3 = (_arg1 & (0xFF0000 >> 16));
var _local4 = (_arg1 & (0xFF00 >> 8));
var _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 = (((_arg1 % 360) + 360) % 360);
var _local5:Number = _arg2;
var _local6:Number = _arg3;
var _local7:int = (int((_local4 / 60)) % 6);
var _local8:Number = ((_local4 / 60) - _local7);
var _local9:Number = (_local6 * (1 - _local5));
var _local10:Number = (_local6 * (1 - (_local8 * _local5)));
var _local11:Number = (_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 95
//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));
}
}
this.dotrace = function (_arg1:Object):void{
trace(_arg1);
};
}//package away3d.core.utils
private const dotrace:Function;
Section 96
//DofCache (away3d.core.utils.DofCache)
package away3d.core.utils {
import flash.display.*;
import flash.utils.*;
import flash.filters.*;
import flash.geom.*;
public class DofCache {
private var minBitmap:BitmapData;
private var maxBitmap:BitmapData;
private var bitmaps:Array;
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 _local6:BlurFilter;
var _local7:int;
var _local8:BitmapData;
super();
this.levels = _arg1;
var _local3:Matrix = new Matrix();
var _local4:Point = new Point(0, 0);
bitmaps = new Array(_arg1);
var _local5:Number = 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 = (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 97
//DrawPrimitiveStore (away3d.core.utils.DrawPrimitiveStore)
package away3d.core.utils {
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.base.*;
import away3d.materials.*;
import away3d.core.block.*;
public class DrawPrimitiveStore {
private var _sv:ScreenVertex;
private var _cbStore:Array;
private var _sbArray:Array;
private var _dbDictionary:Dictionary;
private var _seg:DrawSegment;
private var _sbStore:Array;
private var _cblocker:ConvexBlocker;
private var _sbitmap:DrawScaledBitmap;
private var _sbDictionary:Dictionary;
private var _dtDictionary:Dictionary;
public var blockerDictionary:Dictionary;
private var _cbDictionary:Dictionary;
private var _vertexDictionary:Dictionary;
private var _source:Object3D;
private var _dbArray:Array;
private var _vertex:Object;
private var _dbStore:Array;
public var view:View3D;
private var _dsArray:Array;
private var _dsStore:Array;
private var _doArray:Array;
private var _session:AbstractRenderSession;
private var _object:Object;
private var _dsDictionary:Dictionary;
private var _bill:DrawBillboard;
private var _doDictionary:Dictionary;
private var _dtArray:Array;
private var _dobject:DrawDisplayObject;
private var _tri:DrawTriangle;
private var _doStore:Array;
private var _sourceDictionary:Dictionary;
private var _dtStore:Array;
private var _cbArray:Array;
private var _svStore:Array;
public function DrawPrimitiveStore(){
_sourceDictionary = new Dictionary(true);
_svStore = new Array();
_dtDictionary = new Dictionary(true);
_dtStore = new Array();
_dsDictionary = new Dictionary(true);
_dsStore = new Array();
_dbDictionary = new Dictionary(true);
_dbStore = new Array();
_cbDictionary = new Dictionary(true);
_cbStore = new Array();
_sbDictionary = new Dictionary(true);
_sbStore = new Array();
_doDictionary = new Dictionary(true);
_doStore = new Array();
super();
}
public function createDrawTriangle(_arg1:Object3D, _arg2:FaceVO, _arg3:ITriangleMaterial, _arg4:ScreenVertex, _arg5:ScreenVertex, _arg6:ScreenVertex, _arg7:UV, _arg8:UV, _arg9:UV, _arg10:Boolean=false):DrawTriangle{
if (!(_dtArray = _dtDictionary[_arg1.session])){
_dtArray = (_dtDictionary[_arg1.session] = []);
};
if (_dtStore.length){
_dtArray.push((_tri = _dtStore.pop()));
} else {
_dtArray.push((_tri = new DrawTriangle()));
_tri.view = view;
_tri.create = createDrawTriangle;
};
_tri.generated = _arg10;
_tri.source = _arg1;
_tri.faceVO = _arg2;
_tri.material = _arg3;
_tri.v0 = _arg4;
_tri.v1 = _arg5;
_tri.v2 = _arg6;
_tri.uv0 = _arg7;
_tri.uv1 = _arg8;
_tri.uv2 = _arg9;
_tri.calc();
return (_tri);
}
public function createDrawDisplayObject(_arg1:Object3D, _arg2:ScreenVertex, _arg3:AbstractRenderSession, _arg4:DisplayObject, _arg5:Boolean=false):DrawDisplayObject{
if (!(_doArray = _doDictionary[_arg1.session])){
_doArray = (_doDictionary[_arg1.session] = []);
};
if (_doStore.length){
_doArray.push((_dobject = _doStore.pop()));
} else {
_doArray.push((_dobject = new DrawDisplayObject()));
_dobject.view = view;
_dobject.create = createDrawSegment;
};
_dobject.generated = _arg5;
_dobject.source = _arg1;
_dobject.screenvertex = _arg2;
_dobject.session = _arg3;
_dobject.displayobject = _arg4;
_dobject.calc();
return (_dobject);
}
public function createDrawScaledBitmap(_arg1:Object3D, _arg2:ScreenVertex, _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.push((_sbitmap = _sbStore.pop()));
} else {
_sbArray.push((_sbitmap = new DrawScaledBitmap()));
_sbitmap.view = view;
_sbitmap.create = createDrawSegment;
};
_sbitmap.generated = _arg7;
_sbitmap.source = _arg1;
_sbitmap.screenvertex = _arg2;
_sbitmap.smooth = _arg3;
_sbitmap.bitmap = _arg4;
_sbitmap.scale = _arg5;
_sbitmap.rotation = _arg6;
_sbitmap.calc();
return (_sbitmap);
}
public function createDrawBillboard(_arg1:Object3D, _arg2:IBillboardMaterial, _arg3:ScreenVertex, _arg4:Number, _arg5:Number, _arg6:Number, _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 = _arg2;
_bill.screenvertex = _arg3;
_bill.width = _arg4;
_bill.height = _arg5;
_bill.scale = _arg6;
_bill.rotation = _arg7;
_bill.calc();
return (_bill);
}
public function createDrawSegment(_arg1:Object3D, _arg2:ISegmentMaterial, _arg3:ScreenVertex, _arg4:ScreenVertex, _arg5:Boolean=false):DrawSegment{
if (!(_dsArray = _dsDictionary[_arg1.session])){
_dsArray = (_dsDictionary[_arg1.session] = []);
};
if (_dsStore.length){
_dsArray.push((_seg = _dsStore.pop()));
} else {
_dsArray.push((_seg = new DrawSegment()));
_seg.view = view;
_seg.create = createDrawSegment;
};
_seg.generated = _arg5;
_seg.source = _arg1;
_seg.material = _arg2;
_seg.v0 = _arg3;
_seg.v1 = _arg4;
_seg.calc();
return (_seg);
}
public function createScreenVertex(_arg1:Vertex):ScreenVertex{
if ((_sv = _vertexDictionary[_arg1])){
return (_sv);
};
if (_svStore.length){
_sv = (_vertexDictionary[_arg1] = _svStore.pop());
} else {
_sv = (_vertexDictionary[_arg1] = new ScreenVertex());
};
return (_sv);
}
public function reset():void{
for (_object in _sourceDictionary) {
_source = (_object as Object3D);
if (((_source.session) && (_source.session.updated))){
for (_vertex in _sourceDictionary[_source]) {
_sv = _sourceDictionary[_source][_vertex];
_svStore.push(_sv);
delete _sourceDictionary[_source][_vertex];
};
};
};
for (_object in _dtDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_dtStore = _dtStore.concat((_dtDictionary[_session] as Array));
delete _dtDictionary[_session];
};
};
for (_object in _dsDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_dsStore = _dsStore.concat((_dsDictionary[_session] as Array));
delete _dsDictionary[_session];
};
};
for (_object in _dbDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_dbStore = _dbStore.concat((_dbDictionary[_session] as Array));
delete _dbDictionary[_session];
};
};
for (_object in _cbDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_cbStore = _cbStore.concat((_cbDictionary[_session] as Array));
delete _cbDictionary[_session];
};
};
for (_object in _sbDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_sbStore = _sbStore.concat((_sbDictionary[_session] as Array));
delete _sbDictionary[_session];
};
};
for (_object in _doDictionary) {
_session = (_object as AbstractRenderSession);
if (_session.updated){
_doStore = _doStore.concat((_doDictionary[_session] as Array));
delete _doDictionary[_session];
};
};
}
public function createConvexBlocker(_arg1:Object3D, _arg2:Array):ConvexBlocker{
if (!(_cbArray = _cbDictionary[_arg1.session])){
_cbArray = (_cbDictionary[_arg1.session] = []);
};
if (_cbStore.length){
_cbArray.push((_cblocker = (blockerDictionary[_arg1] = _cbStore.pop())));
} else {
_cbArray.push((_cblocker = (blockerDictionary[_arg1] = new ConvexBlocker())));
_cblocker.view = view;
_cblocker.create = createConvexBlocker;
};
_cblocker.source = _arg1;
_cblocker.vertices = _arg2;
_cblocker.calc();
return (_cblocker);
}
public function createVertexDictionary(_arg1:Object3D):Dictionary{
if (!(_vertexDictionary = _sourceDictionary[_arg1])){
_vertexDictionary = (_sourceDictionary[_arg1] = new Dictionary(true));
};
return (_vertexDictionary);
}
}
}//package away3d.core.utils
Section 98
//FaceMaterialVO (away3d.core.utils.FaceMaterialVO)
package away3d.core.utils {
import flash.display.*;
import away3d.containers.*;
import away3d.core.base.*;
import flash.geom.*;
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){
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 99
//FaceVO (away3d.core.utils.FaceVO)
package away3d.core.utils {
import away3d.core.base.*;
import away3d.materials.*;
import flash.geom.*;
public class FaceVO {
public var v0:Vertex;
public var generated:Boolean;
public var face:Face;
public var material:ITriangleMaterial;
public var back:ITriangleMaterial;
public var uv0:UV;
public var uv1:UV;
public var bitmapRect:Rectangle;
public var uv2:UV;
public var v1:Vertex;
public var v2:Vertex;
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 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 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 100
//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 101
//Init (away3d.core.utils.Init)
package away3d.core.utils {
import flash.display.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.materials.*;
import away3d.primitives.data.*;
public class Init {
var init:Object;
private static var inits:Array = [];
public function Init(_arg1:Object){
this.init = _arg1;
}
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 getArray(_arg1:String):Array{
if (init == null){
return ([]);
};
if (!init.hasOwnProperty(_arg1)){
return ([]);
};
var _local2:Array = init[_arg1];
delete init[_arg1];
return (_local2);
}
public function getSegmentMaterial(_arg1:String):ISegmentMaterial{
if (init == null){
return (null);
};
if (!init.hasOwnProperty(_arg1)){
return (null);
};
var _local2:ISegmentMaterial = Cast.wirematerial(init[_arg1]);
delete init[_arg1];
return (_local2);
}
public function getBitmap(_arg1:String):BitmapData{
if (init == null){
return (null);
};
if (!init.hasOwnProperty(_arg1)){
return (null);
};
var _local2:BitmapData = 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{
if (init == null){
return (_arg2);
};
if (!init.hasOwnProperty(_arg1)){
return (_arg2);
};
var _local3:String = init[_arg1];
delete init[_arg1];
return (_local3);
}
public function getObjectOrInit(_arg1:String, _arg2:Class=null):Object{
if (init == null){
return (null);
};
if (!init.hasOwnProperty(_arg1)){
return (null);
};
var _local3:Object = init[_arg1];
delete init[_arg1];
if (_local3 == null){
return (null);
};
if (_arg2 != null){
if (!(_local3 is _arg2)){
return (new _arg2(_local3));
};
};
return (_local3);
}
public function getInit(_arg1:String):Init{
if (init == null){
return (new Init(null));
};
if (!init.hasOwnProperty(_arg1)){
return (new Init(null));
};
var _local2:Init = Init.parse(init[_arg1]);
delete init[_arg1];
return (_local2);
}
public function getNumber(_arg1:String, _arg2:Number, _arg3:Object=null):Number{
var _local5:Number;
var _local6:Number;
if (init == null){
return (_arg2);
};
if (!init.hasOwnProperty(_arg1)){
return (_arg2);
};
var _local4:Number = 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);
}
function addForCheck():void{
if (init == null){
return;
};
init["dontCheckUnused"] = false;
inits.push(init);
}
public function getBoolean(_arg1:String, _arg2:Boolean):Boolean{
if (init == null){
return (_arg2);
};
if (!init.hasOwnProperty(_arg1)){
return (_arg2);
};
var _local3:Boolean = init[_arg1];
delete init[_arg1];
return (_local3);
}
public function getColor(_arg1:String, _arg2:uint):uint{
if (init == null){
return (_arg2);
};
if (!init.hasOwnProperty(_arg1)){
return (_arg2);
};
var _local3:uint = Cast.color(init[_arg1]);
delete init[_arg1];
return (_local3);
}
public function getObject(_arg1:String, _arg2:Class=null):Object{
if (init == null){
return (null);
};
if (!init.hasOwnProperty(_arg1)){
return (null);
};
var _local3:Object = 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));
}
public function getInt(_arg1:String, _arg2:int, _arg3:Object=null):int{
var _local5:int;
var _local6:int;
if (init == null){
return (_arg2);
};
if (!init.hasOwnProperty(_arg1)){
return (_arg2);
};
var _local4:int = 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);
}
function removeFromCheck():void{
if (init == null){
return;
};
init["dontCheckUnused"] = true;
}
public function getMaterial(_arg1:String):IMaterial{
if (init == null){
return (null);
};
if (!init.hasOwnProperty(_arg1)){
return (null);
};
var _local2:IMaterial = Cast.material(init[_arg1]);
delete init[_arg1];
return (_local2);
}
public function getPosition(_arg1:String):Number3D{
var _local3:Object3D;
var _local2:Object = 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)));
}
static function checkUnusedArguments():void{
var _local2:Object;
var _local3:String;
var _local4:String;
if (inits.length == 0){
return;
};
var _local1:Array = 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 102
//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);
}
protected function notifyChange():void{
if (!hasEventListener("changed")){
return;
};
if (changed == null){
changed = new Event("changed");
};
dispatchEvent(changed);
}
public function removeOnChange(_arg1:Function):void{
removeEventListener("changed", _arg1, false);
}
}
}//package away3d.core.utils
Section 103
//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 104
//BillboardEvent (away3d.events.BillboardEvent)
package away3d.events {
import flash.events.*;
import away3d.core.base.*;
public class BillboardEvent extends Event {
public var billboard:Billboard;
public static const MATERIAL_CHANGED:String = "materialChanged";
public function BillboardEvent(_arg1:String, _arg2:Billboard){
super(_arg1);
this.billboard = _arg2;
}
override public function clone():Event{
return (new BillboardEvent(type, billboard));
}
}
}//package away3d.events
Section 105
//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 106
//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 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 107
//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 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 108
//FaceEvent (away3d.events.FaceEvent)
package away3d.events {
import flash.events.*;
import away3d.core.base.*;
public class FaceEvent extends Event {
public var face:Face;
public static const MAPPING_CHANGED:String = "mappingChanged";
public function FaceEvent(_arg1:String, _arg2:Face){
super(_arg1);
this.face = _arg2;
}
override public function clone():Event{
return (new FaceEvent(type, face));
}
}
}//package away3d.events
Section 109
//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 110
//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 111
//MouseEvent3D (away3d.events.MouseEvent3D)
package away3d.events {
import flash.events.*;
import away3d.containers.*;
import away3d.core.draw.*;
import away3d.core.base.*;
import away3d.materials.*;
public class MouseEvent3D extends Event {
public var sceneX:Number;
public var sceneY:Number;
public var sceneZ:Number;
public var uv:UV;
public var drawpri:DrawPrimitive;
public var view:View3D;
public var material:IUVMaterial;
public var screenX:Number;
public var screenY:Number;
public var screenZ:Number;
public var ctrlKey:Boolean;
public var element:Object;
public var shiftKey:Boolean;
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);
}
override public function clone():Event{
var _local1:MouseEvent3D = new MouseEvent3D(type);
_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 112
//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 113
//SegmentEvent (away3d.events.SegmentEvent)
package away3d.events {
import flash.events.*;
import away3d.core.base.*;
public class SegmentEvent extends Event {
public var segment:Segment;
public static const MATERIAL_CHANGED:String = "materialChanged";
public function SegmentEvent(_arg1:String, _arg2:Segment){
super(_arg1);
this.segment = _arg2;
}
override public function clone():Event{
return (new SegmentEvent(type, segment));
}
}
}//package away3d.events
Section 114
//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 115
//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 116
//AmbientLight3D (away3d.lights.AmbientLight3D)
package away3d.lights {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.primitives.*;
import away3d.core.light.*;
import away3d.materials.*;
public class AmbientLight3D extends Object3D implements ILightProvider, IClonable {
private var _ambientDirty:Boolean;
private var _green:int;
private var _colorDirty:Boolean;
private var _red:int;
private var _debug:Boolean;
private var _ambient:Number;
private var _debugMaterial:ColorMaterial;
private var _ls:AmbientLight;
private var _color:int;
private var _debugPrimitive:Sphere;
private var _blue:int;
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 set color(_arg1:int):void{
_color = _arg1;
_red = ((_color & 0xFF0000) >> 16);
_green = ((_color & 0xFF00) >> 8);
_blue = (_color & 0xFF);
_colorDirty = true;
}
public function get debug():Boolean{
return (_debug);
}
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);
}
public function get ambient():Number{
return (_ambient);
}
public function get color():int{
return (_color);
}
public function get debugPrimitive():Object3D{
if (!_debugPrimitive){
_debugPrimitive = new Sphere();
};
if (!_debugMaterial){
_debugMaterial = new ColorMaterial();
_debugPrimitive.material = _debugMaterial;
};
_debugMaterial.color = color;
return (_debugPrimitive);
}
public function set ambient(_arg1:Number):void{
_ambient = _arg1;
_ambientDirty = true;
}
public function set debug(_arg1:Boolean):void{
_debug = _arg1;
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:AmbientLight3D = (((_arg1 as AmbientLight3D)) || (new AmbientLight3D()));
super.clone(_local2);
_local2.color = color;
_local2.ambient = ambient;
_local2.debug = debug;
return (_local2);
}
}
}//package away3d.lights
Section 117
//DirectionalLight3D (away3d.lights.DirectionalLight3D)
package away3d.lights {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.primitives.*;
import away3d.core.light.*;
import away3d.materials.*;
public class DirectionalLight3D extends Object3D implements ILightProvider, IClonable {
private var _green:Number;
private var _debugMaterial:ColorMaterial;
private var _specular:Number;
private var _diffuse:Number;
private var _ls:DirectionalLight;
private var _blue:Number;
private var _colorDirty:Boolean;
private var _specularDirty:Boolean;
private var _red:Number;
private var _ambient:Number;
private var _debug:Boolean;
private var _color:int;
private var _diffuseDirty:Boolean;
private var _brightness:Number;
private var _debugPrimitive:Sphere;
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 set specular(_arg1:Number):void{
if (_arg1 < 0){
_arg1 = 0;
};
_specular = _arg1;
_specularDirty = 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;
}
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 ambient(_arg1:Number):void{
if (_arg1 < 0){
_arg1 = 0;
};
_ambient = _arg1;
_ambientDirty = true;
}
public function get specular():Number{
return (_specular);
}
public function set diffuse(_arg1:Number):void{
if (_arg1 < 0){
_arg1 = 0;
};
_diffuse = _arg1;
_diffuseDirty = true;
}
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 get brightness():Number{
return (_brightness);
}
public function get debug():Boolean{
return (_debug);
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:DirectionalLight3D = (((_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 color():int{
return (_color);
}
public function get debugPrimitive():Object3D{
if (!_debugPrimitive){
_debugPrimitive = new Sphere({radius:10});
};
if (!_debugMaterial){
_debugMaterial = new ColorMaterial();
_debugPrimitive.material = _debugMaterial;
};
_debugMaterial.color = color;
return (_debugPrimitive);
}
}
}//package away3d.lights
Section 118
//PointLight3D (away3d.lights.PointLight3D)
package away3d.lights {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.primitives.*;
import away3d.core.light.*;
import away3d.materials.*;
public class PointLight3D extends Object3D implements ILightProvider, IClonable {
public var specular:Number;
public var brightness:Number;
public var ambient:Number;
private var _debug:Boolean;
public var diffuse:Number;
public var color:int;
private var _ls:PointLight;
private var _debugMaterial:ColorMaterial;
private var _debugPrimitive:Sphere;
public function PointLight3D(_arg1:Object=null){
_ls = new PointLight();
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);
_ls.light = this;
}
public function get debugPrimitive():Object3D{
if (!_debugPrimitive){
_debugPrimitive = new Sphere({radius:10});
};
if (!_debugMaterial){
_debugMaterial = new ColorMaterial();
_debugPrimitive.material = _debugMaterial;
};
_debugMaterial.color = color;
return (_debugPrimitive);
}
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);
_arg1.pointLight(_ls);
}
public function get debug():Boolean{
return (_debug);
}
override public function clone(_arg1:Object3D=null):Object3D{
var _local2:PointLight3D = (((_arg1 as PointLight3D)) || (new PointLight3D()));
super.clone(_local2);
_local2.color = color;
_local2.ambient = ambient;
_local2.diffuse = diffuse;
_local2.specular = specular;
_local2.debug = debug;
return (_local2);
}
public function set debug(_arg1:Boolean):void{
_debug = _arg1;
}
}
}//package away3d.lights
Section 119
//AnimationData (away3d.loaders.data.AnimationData)
package away3d.loaders.data {
import away3d.containers.*;
import flash.utils.*;
import away3d.core.base.*;
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(){
channels = new Dictionary(true);
super();
}
public function clone(_arg1:Object3D):AnimationData{
var _local2:AnimationData = _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 120
//GeometryData (away3d.loaders.data.GeometryData)
package away3d.loaders.data {
import away3d.core.base.*;
public class GeometryData {
public var uvs:Array;
public var maxZ:Number;
public var geoXML:XML;
public var minY:Number;
public var minZ:Number;
public var name:String;
public var minX:Number;
public var skinVertices:Array;
public var skinControllers:Array;
public var bothsides:Boolean;
public var materials:Array;
public var geometry:Geometry;
public var maxX:Number;
public var maxY:Number;
public var faces:Array;
public var vertices:Array;
public var ctrlXML:XML;
public function GeometryData(){
vertices = [];
uvs = [];
faces = [];
materials = [];
skinVertices = new Array();
skinControllers = new Array();
super();
}
}
}//package away3d.loaders.data
Section 121
//MaterialData (away3d.loaders.data.MaterialData)
package away3d.loaders.data {
import flash.display.*;
import away3d.core.base.*;
import away3d.materials.*;
public class MaterialData {
public var materialType:String;// = "wireframeMaterial"
private var _material:IMaterial;
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;
private var _element:Element;
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(){
elements = [];
super();
}
public function set material(_arg1:IMaterial):void{
if (_material == _arg1){
return;
};
_material = _arg1;
if ((_material is IUVMaterial)){
textureBitmap = (_material as IUVMaterial).bitmap;
};
if ((_material is ITriangleMaterial)){
for each (_element in elements) {
(_element as Face).material = (_material as ITriangleMaterial);
};
} else {
if ((_material is ISegmentMaterial)){
for each (_element in elements) {
(_element as Segment).material = (_material as ISegmentMaterial);
};
};
};
}
public function clone(_arg1:Object3D):MaterialData{
var _local3:Element;
var _local4:Geometry;
var _local5:Element;
var _local2:MaterialData = _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 122
//AnimationLibrary (away3d.loaders.utils.AnimationLibrary)
package away3d.loaders.utils {
import flash.utils.*;
import away3d.core.utils.*;
import away3d.loaders.data.*;
public dynamic class AnimationLibrary extends Dictionary {
public function addAnimation(_arg1:String):AnimationData{
if (this[_arg1]){
return (this[_arg1]);
};
var _local2:AnimationData = 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 123
//GeometryLibrary (away3d.loaders.utils.GeometryLibrary)
package away3d.loaders.utils {
import flash.utils.*;
import away3d.core.utils.*;
import away3d.loaders.data.*;
public dynamic class GeometryLibrary extends Dictionary {
private var _geometryArray:Array;
private var _geometryArrayDirty:Boolean;
public var name:String;
private var _geometry:GeometryData;
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{
if (this[_arg1]){
return (this[_arg1]);
};
_geometryArrayDirty = true;
var _local4:GeometryData = 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{
_geometryArray = [];
for each (_geometry in this) {
_geometryArray.push(_geometry);
};
}
}
}//package away3d.loaders.utils
Section 124
//MaterialLibrary (away3d.loaders.utils.MaterialLibrary)
package away3d.loaders.utils {
import flash.display.*;
import flash.utils.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.materials.*;
import away3d.loaders.data.*;
public dynamic class MaterialLibrary extends Dictionary {
public var texturePath:String;
private var _face:Face;
public var loadRequired:Boolean;
private var length:int;// = 0
public var autoLoadTextures:Boolean;
private var _materialData:MaterialData;
private var _image:TextureLoader;
public function texturesLoaded(_arg1:TextureLoadQueue):void{
loadRequired = false;
var _local2:Array = _arg1.images;
for each (_materialData in this) {
for each (_image in _local2) {
if ((texturePath + _materialData.textureFileName) == _image.filename){
_materialData.textureBitmap = new BitmapData(_image.width, _image.height, true, 0xFFFFFF);
_materialData.textureBitmap.draw(_image);
_materialData.material = new BitmapMaterial(_materialData.textureBitmap);
};
};
};
}
public function addMaterial(_arg1:String):MaterialData{
if (this[_arg1]){
return (this[_arg1]);
};
length++;
var _local2:MaterialData = new MaterialData();
var _local3 = (_local2.name = _arg1);
this[_local3] = _local2;
return (_local2);
}
public function getMaterial(_arg1:String):MaterialData{
if (this[_arg1]){
return (this[_arg1]);
};
Debug.warning((("Material '" + _arg1) + "' does not exist"));
return (null);
}
}
}//package away3d.loaders.utils
Section 125
//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;
override public function load(_arg1:URLRequest, _arg2:LoaderContext=null):void{
_filename = _arg1.url;
super.load(_arg1, _arg2);
}
public function get filename():String{
return (_filename);
}
}
}//package away3d.loaders.utils
Section 126
//TextureLoadQueue (away3d.loaders.utils.TextureLoadQueue)
package away3d.loaders.utils {
import flash.events.*;
import flash.net.*;
public class TextureLoadQueue extends EventDispatcher {
private var _currentItemIndex:int;
private var _queue:Array;
public function TextureLoadQueue(){
_queue = new Array();
}
public function get currentURLRequest():URLRequest{
return ((_queue[currentItemIndex] as LoaderAndRequest).request);
}
private function calcProgress():Number{
var _local1:Number = (currentItemIndex / numItems);
var _local2:Number = (calcCurrentLoaderAmountLoaded() / numItems);
_local1 = _local2;
return (_local1);
}
public function get currentItemIndex():int{
return (_currentItemIndex);
}
public function start():void{
_currentItemIndex = 0;
loadNext();
}
private function onItemComplete(_arg1:Event):void{
cleanUpOldItem(currentLoader);
_currentItemIndex++;
loadNext();
}
public function get currentLoader():TextureLoader{
return ((_queue[currentItemIndex] as LoaderAndRequest).loader);
}
private function redispatchEvent(_arg1:Event):void{
dispatchEvent(_arg1);
}
public function get percentLoaded():Number{
return ((progress * 100));
}
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 _local2:LoaderAndRequest;
var _local1:Array = [];
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 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 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 127
//BitmapMaterial (away3d.materials.BitmapMaterial)
package away3d.materials {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.clip.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import flash.geom.*;
import away3d.cameras.lenses.*;
public class BitmapMaterial extends EventDispatcher implements ITriangleMaterial, IUVMaterial, ILayerMaterial, IBillboardMaterial {
var _green:Number;// = 1
private var _near:Number;
private var dsab:Number;
var _blendMode:String;
private var triangle:DrawTriangle;
private var _showNormals:Boolean;
private var faz:Number;
var _bitmapDirty:Boolean;
private var dsca:Number;
private var dsbc:Number;
private var ax:Number;
private var ay:Number;
var _blue:Number;// = 1
private var az:Number;
var _renderBitmap:BitmapData;
private var fbz:Number;
var _zeroPoint:Point;
var _colorTransformDirty:Boolean;
private var mcax:Number;
var _bitmap:BitmapData;
private var mcaz:Number;
var _bitmapRect:Rectangle;
private var _debug:Boolean;
private var mcay:Number;
private var bx:Number;
var _session:AbstractRenderSession;
private var bz:Number;
private var map:Matrix;
private var fcz:Number;
private var by:Number;
var _alpha:Number;// = 1
var _color:uint;// = 0xFFFFFF
private var _nn:Number3D;
var _colorTransform:ColorTransform;
private var _sv1:ScreenVertex;
var _texturemapping:Matrix;
var _sourceVO:FaceMaterialVO;
private var _materialupdated:MaterialEvent;
private var cy:Number;
private var cz:Number;
private var x:Number;
private var y:Number;
private var dbcy:Number;
private var _sv0:ScreenVertex;
private var dbcx:Number;
var _faceMaterialVO:FaceMaterialVO;
private var _view:View3D;
private var dmax:Number;
private var cx:Number;
var _mapping:Matrix;
private var dabx:Number;
private var _shape:Shape;
private var daby:Number;
private var svArray:Array;
private var _repeat:Boolean;
var _blendModeDirty:Boolean;
private var mbcx:Number;
private var mbcy:Number;
private var mbcz:Number;
private var _smooth:Boolean;
var _red:Number;// = 1
private var focus:Number;
private var mabx:Number;
private var maby:Number;
private var mabz:Number;
var _graphics:Graphics;
var _faceDictionary:Dictionary;
var _s:Shape;
private var dcax:Number;
private var dcay:Number;
var _materialDirty:Boolean;
protected var ini:Init;
private var _precision:Number;
public function BitmapMaterial(_arg1:BitmapData, _arg2:Object=null){
_faceDictionary = new Dictionary(true);
_zeroPoint = new Point(0, 0);
_s = new Shape();
map = new Matrix();
triangle = new DrawTriangle();
svArray = new Array();
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;
createVertexArray();
}
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 precision(_arg1:Number):void{
_precision = ((_arg1 * _arg1) * 1.4);
_materialDirty = true;
}
private function renderRec(_arg1:ScreenVertex, _arg2:ScreenVertex, _arg3:ScreenVertex, _arg4:Number):void{
var _local11:ScreenVertex;
var _local12:ScreenVertex;
ax = _arg1.x;
ay = _arg1.y;
az = _arg1.z;
bx = _arg2.x;
by = _arg2.y;
bz = _arg2.z;
cx = _arg3.x;
cy = _arg3.y;
cz = _arg3.z;
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 ((((((((_arg4 >= 100)) || ((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, _arg1, _arg2, _arg3, smooth, repeat, _graphics);
if (debug){
_session.renderTriangleLine(1, 0xFF00, 1, _arg1, _arg2, _arg3);
};
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, _arg1, _arg2, _arg3, smooth, repeat, _graphics);
if (debug){
_session.renderTriangleLine(1, 0xFF00, 1, _arg1, _arg2, _arg3);
};
return;
};
var _local5:Number = map.a;
var _local6:Number = map.b;
var _local7:Number = map.c;
var _local8:Number = map.d;
var _local9:Number = map.tx;
var _local10:Number = map.ty;
var _temp1 = _arg4;
_arg4 = (_arg4 + 1);
var _local13:ScreenVertex = svArray[_temp1];
_local13.x = (mbcx / 2);
_local13.y = (mbcy / 2);
_local13.z = ((bz + cz) / 2);
if ((((((dsab > precision)) && ((dsca > precision)))) && ((dsbc > precision)))){
var _temp2 = _arg4;
_arg4 = (_arg4 + 1);
_local11 = svArray[_temp2];
_local11.x = (mabx / 2);
_local11.y = (maby / 2);
_local11.z = ((az + bz) / 2);
var _temp3 = _arg4;
_arg4 = (_arg4 + 1);
_local12 = svArray[_temp3];
_local12.x = (mcax / 2);
_local12.y = (mcay / 2);
_local12.z = ((cz + az) / 2);
_local5 = (_local5 * 2);
map.a = _local5;
_local6 = (_local6 * 2);
map.b = _local6;
_local7 = (_local7 * 2);
map.c = _local7;
_local8 = (_local8 * 2);
map.d = _local8;
_local9 = (_local9 * 2);
map.tx = _local9;
_local10 = (_local10 * 2);
map.ty = _local10;
renderRec(_arg1, _local11, _local12, _arg4);
map.a = _local5;
map.b = _local6;
map.c = _local7;
map.d = _local8;
map.tx = (_local9 - 1);
map.ty = _local10;
renderRec(_local11, _arg2, _local13, _arg4);
map.a = _local5;
map.b = _local6;
map.c = _local7;
map.d = _local8;
map.tx = _local9;
map.ty = (_local10 - 1);
renderRec(_local12, _local13, _arg3, _arg4);
map.a = -(_local5);
map.b = -(_local6);
map.c = -(_local7);
map.d = -(_local8);
map.tx = (1 - _local9);
map.ty = (1 - _local10);
renderRec(_local13, _local12, _local11, _arg4);
return;
};
dmax = Math.max(dsab, Math.max(dsca, dsbc));
if (dsab == dmax){
var _temp4 = _arg4;
_arg4 = (_arg4 + 1);
_local11 = svArray[_temp4];
_local11.x = (mabx / 2);
_local11.y = (maby / 2);
_local11.z = ((az + bz) / 2);
_local5 = (_local5 * 2);
map.a = _local5;
_local7 = (_local7 * 2);
map.c = _local7;
_local9 = (_local9 * 2);
map.tx = _local9;
renderRec(_arg1, _local11, _arg3, _arg4);
map.a = (_local5 + _local6);
map.b = _local6;
map.c = (_local7 + _local8);
map.d = _local8;
map.tx = ((_local9 + _local10) - 1);
map.ty = _local10;
renderRec(_local11, _arg2, _arg3, _arg4);
return;
};
if (dsca == dmax){
var _temp5 = _arg4;
_arg4 = (_arg4 + 1);
_local12 = svArray[_temp5];
_local12.x = (mcax / 2);
_local12.y = (mcay / 2);
_local12.z = ((cz + az) / 2);
_local6 = (_local6 * 2);
map.b = _local6;
_local8 = (_local8 * 2);
map.d = _local8;
_local10 = (_local10 * 2);
map.ty = _local10;
renderRec(_arg1, _arg2, _local12, _arg4);
map.a = _local5;
map.b = (_local6 + _local5);
map.c = _local7;
map.d = (_local8 + _local7);
map.tx = _local9;
map.ty = ((_local10 + _local9) - 1);
renderRec(_local12, _arg2, _arg3, _arg4);
return;
};
map.a = (_local5 - _local6);
map.b = (_local6 * 2);
map.c = (_local7 - _local8);
map.d = (_local8 * 2);
map.tx = (_local9 - _local10);
map.ty = (_local10 * 2);
renderRec(_arg1, _arg2, _local13, _arg4);
map.a = (_local5 * 2);
map.b = (_local6 - _local5);
map.c = (_local7 * 2);
map.d = (_local8 - _local7);
map.tx = (_local9 * 2);
map.ty = (_local10 - _local9);
renderRec(_arg1, _local13, _arg3, _arg4);
}
public function renderTriangle(_arg1:DrawTriangle):void{
var _local2:Matrix3D;
_mapping = getMapping(_arg1);
_session = _arg1.source.session;
_view = _arg1.view;
_near = _view.screenClipping.minZ;
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;
renderRec(_arg1.v0, _arg1.v1, _arg1.v2, 0);
} else {
_session.renderTriangleBitmap(_renderBitmap, _mapping, _arg1.v0, _arg1.v1, _arg1.v2, smooth, repeat, _graphics);
};
if (debug){
_session.renderTriangleLine(0, 0xFF, 1, _arg1.v0, _arg1.v1, _arg1.v2);
};
if (showNormals){
if (_nn == null){
_nn = new Number3D();
_sv0 = new ScreenVertex();
_sv1 = new ScreenVertex();
};
_local2 = _arg1.view.cameraVarsStore.viewTransformDictionary[_arg1.source];
_nn.rotate(_arg1.faceVO.face.normal, _local2);
_sv0.x = (((_arg1.v0.x + _arg1.v1.x) + _arg1.v2.x) / 3);
_sv0.y = (((_arg1.v0.y + _arg1.v1.y) + _arg1.v2.y) / 3);
_sv0.z = (((_arg1.v0.z + _arg1.v1.z) + _arg1.v2.z) / 3);
_sv1.x = (_sv0.x - (30 * _nn.x));
_sv1.y = (_sv0.y - (30 * _nn.y));
_sv1.z = (_sv0.z - (30 * _nn.z));
_session.renderLine(_sv0, _sv1, 0, 0xFF00FF, 1);
};
}
public function get height():Number{
return (_bitmap.height);
}
public function get bitmap():BitmapData{
return (_bitmap);
}
public function set repeat(_arg1:Boolean):void{
if (_repeat == _arg1){
return;
};
_repeat = _arg1;
_materialDirty = true;
}
public function removeOnMaterialUpdate(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false);
}
public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{
_graphics = null;
if (_colorTransformDirty){
updateColorTransform();
};
if (_bitmapDirty){
updateRenderBitmap();
};
if (((_materialDirty) || (_blendModeDirty))){
clearFaces(_arg1, _arg2);
};
_blendModeDirty = false;
}
public function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void{
_materialDirty = true;
for each (_faceMaterialVO in _faceDictionary) {
_faceMaterialVO.invalidated = true;
};
}
public function get colorTransform():ColorTransform{
return (_colorTransform);
}
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 get debug():Boolean{
return (_debug);
}
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 set blendMode(_arg1:String):void{
if (_blendMode == _arg1){
return;
};
_blendMode = _arg1;
_blendModeDirty = true;
}
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 set smooth(_arg1:Boolean):void{
if (_smooth == _arg1){
return;
};
_smooth = _arg1;
_materialDirty = true;
}
public function set bitmap(_arg1:BitmapData):void{
_bitmap = _arg1;
_bitmapDirty = true;
}
public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{
notifyMaterialUpdate();
for each (_faceMaterialVO in _faceDictionary) {
if (!_faceMaterialVO.cleared){
_faceMaterialVO.clear();
};
};
}
public function get color():uint{
return (_color);
}
public function get alpha():Number{
return (_alpha);
}
public function get precision():Number{
return (_precision);
}
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 addOnMaterialUpdate(_arg1:Function):void{
addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true);
}
public function set showNormals(_arg1:Boolean):void{
if (_showNormals == _arg1){
return;
};
_showNormals = _arg1;
_materialDirty = true;
}
private function createVertexArray():void{
var _local1:Number = 100;
while (_local1--) {
svArray.push(new ScreenVertex());
};
}
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);
}
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;
}
public function renderBillboard(_arg1:DrawBillboard):void{
_arg1.source.session.renderBillboardBitmap(_renderBitmap, _arg1, smooth);
}
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;
}
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 get repeat():Boolean{
return (_repeat);
}
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 get smooth():Boolean{
return (_smooth);
}
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 get width():Number{
return (_bitmap.width);
}
public function get blendMode():String{
return (_blendMode);
}
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));
}
}
}//package away3d.materials
Section 128
//BitmapMaterialContainer (away3d.materials.BitmapMaterialContainer)
package away3d.materials {
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import flash.geom.*;
public class BitmapMaterialContainer extends BitmapMaterial implements ITriangleMaterial, ILayerMaterial {
private var _faceHeight:int;
private var _height:Number;
private var _width:Number;
public var transparent:Boolean;
private var _material:ILayerMaterial;
private var _forceRender:Boolean;
private var _fMaterialVO:FaceMaterialVO;
private var _faceWidth:int;
protected var materials:Array;
private var _faceVO:FaceVO;
private var _containerDictionary:Dictionary;
private var _cacheDictionary:Dictionary;
private var _viewDictionary:Dictionary;
private var _containerVO:FaceMaterialVO;
public function BitmapMaterialContainer(_arg1:int, _arg2:int, _arg3:Object=null){
_containerDictionary = new Dictionary(true);
_cacheDictionary = new Dictionary(true);
_viewDictionary = 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 (_material in materials) {
_material.addOnMaterialUpdate(onMaterialUpdate);
};
transparent = ini.getBoolean("transparent", true);
}
public function removeMaterial(_arg1:ILayerMaterial):void{
var _local2:int = materials.indexOf(_arg1);
if (_local2 == -1){
return;
};
_arg1.removeOnMaterialUpdate(onMaterialUpdate);
materials.splice(_local2, 1);
_materialDirty = true;
}
private function onMaterialUpdate(_arg1:MaterialEvent):void{
_materialDirty = true;
}
override public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{
for each (_material in materials) {
_material.updateMaterial(_arg1, _arg2);
};
if (_colorTransformDirty){
updateColorTransform();
};
if (_bitmapDirty){
updateRenderBitmap();
};
if (((_materialDirty) || (_blendModeDirty))){
clearFaces();
};
_blendModeDirty = false;
}
override public function renderBitmapLayer(_arg1:DrawTriangle, _arg2:Rectangle, _arg3:FaceMaterialVO):FaceMaterialVO{
_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 (_material in materials) {
_containerVO = _material.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 renderLayer(_arg1:DrawTriangle, _arg2:Sprite, _arg3:int):int{
throw (new Error("Not implemented"));
}
override protected function updateRenderBitmap():void{
_bitmapDirty = false;
invalidateFaces();
_materialDirty = true;
}
override protected function getMapping(_arg1:DrawTriangle):Matrix{
_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 (_material in materials) {
_fMaterialVO = _material.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 clearMaterials():void{
var _local1:int = materials.length;
while (_local1--) {
removeMaterial(materials[_local1]);
};
}
public function addMaterial(_arg1:ILayerMaterial):void{
_arg1.addOnMaterialUpdate(onMaterialUpdate);
materials.push(_arg1);
_materialDirty = true;
}
}
}//package away3d.materials
Section 129
//CenterLightingMaterial (away3d.materials.CenterLightingMaterial)
package away3d.materials {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.core.light.*;
public class CenterLightingMaterial extends EventDispatcher implements ITriangleMaterial {
private var fy:Number;
private var pb:Number;
private var pc:Number;
private var green:Number;
private var diff:Number;
private var ksr:Number;
private var fx:Number;
private var _specularTransform:Matrix3D;
private var _materialDirty:Boolean;
private var draw_fall_k:Number;// = 1
protected var ini:Init;
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 _source:Mesh;
private var v0x:Number;
private var v0y:Number;
private var v0z:Number;
private var draw_normal:Boolean;// = false
private var ry:Number;
private var rz:Number;
private var sum:Number;
private var rx:Number;
public var diffuse_brightness:Number;// = 1
public var shininess:Number;// = 20
public var ambient_brightness:Number;// = 1
private var blue:Number;
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 cx:Number;
var v0:ScreenVertex;
var v1:ScreenVertex;
private var v2x:Number;
private var v2y:Number;
private var df:Number;
private var v2z:Number;
private var cz:Number;
private var _diffuseTransform:Matrix3D;
private var fade:Number;
private var _materialupdated:MaterialEvent;
private var cy:Number;
private var point:PointLight;
private var red:Number;
private var graphics:Graphics;
var session:AbstractRenderSession;
var v2:ScreenVertex;
private var global:AmbientLight;
private var _view:View3D;
private var amb:Number;
private var ffy:Number;
private var spec:Number;
private var nf:Number;
private var ffz:Number;
private var draw_reflect:Boolean;// = false
private var draw_fall:Boolean;// = false
private var rfx:Number;
private var rfy:Number;
private var rfz:Number;
private var ffx:Number;
private var nx:Number;
private var d1x:Number;
private var nz:Number;
private var d1z:Number;
private var kag:Number;
private var ny:Number;
private var d1y:Number;
private var zoom:Number;
private var kar:Number;
private var focus:Number;
private var fz:Number;
private var _viewPosition:Number3D;
private var directional:DirectionalLight;
private var c0x:Number;
private var c0y:Number;
private var c0z:Number;
private var kab:Number;
public var specular_brightness:Number;// = 1
private var pdd:Number;
private var pa:Number;
private var d2y:Number;
private var d2z:Number;
private var d2x:Number;
private var ksb:Number;
private var ksg:Number;
public function CenterLightingMaterial(_arg1:Object=null){
ini = Init.parse(_arg1);
shininess = ini.getColor("shininess", 20);
}
public function get visible():Boolean{
throw (new Error("Not implemented"));
}
public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{
for each (directional in _arg1.lightarray.directionals) {
if (((!(directional.diffuseTransform[_arg1])) || (_arg2.scene.updatedObjects[_arg1]))){
directional.setDiffuseTransform(_arg1);
_materialDirty = true;
};
if (!directional.specularTransform[_arg1]){
directional.specularTransform[_arg1] = new Dictionary(true);
};
if (((((!(directional.specularTransform[_arg1][_arg2])) || (_arg2.scene.updatedObjects[_arg1]))) || (_arg2.updated))){
directional.setSpecularTransform(_arg1, _arg2);
_materialDirty = true;
};
};
for each (point in _arg1.lightarray.points) {
if (((((!(point.viewPositions[_arg2])) || (_arg2.scene.updatedObjects[_arg1]))) || (_arg2.updated))){
point.setViewPosition(_arg2);
_materialDirty = true;
};
};
if (_materialDirty){
clearFaces(_arg1, _arg2);
};
}
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 addOnMaterialUpdate(_arg1:Function):void{
addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true);
}
public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{
notifyMaterialUpdate();
}
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 removeOnMaterialUpdate(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false);
}
public function renderTriangle(_arg1:DrawTriangle):void{
session = _arg1.source.session;
v0 = _arg1.v0;
v1 = _arg1.v1;
v2 = _arg1.v2;
focus = _arg1.view.camera.focus;
zoom = _arg1.view.camera.zoom;
v0x = v0.vx;
v0y = v0.vy;
v0z = v0.z;
v1x = v1.vx;
v1y = v1.vy;
v1z = v1.z;
v2x = v2.vx;
v2y = v2.vy;
v2z = v2.z;
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;
for each (directional in _arg1.source.lightarray.directionals) {
_diffuseTransform = directional.diffuseTransform[_source];
red = directional.red;
green = directional.green;
blue = directional.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 = (directional.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 = ((directional.diffuse * nf) * diffuse_brightness);
kdr = (kdr + (red * diff));
kdg = (kdg + (green * diff));
kdb = (kdb + (blue * diff));
_specularTransform = directional.specularTransform[_source][_view];
rfx = _specularTransform.szx;
rfy = _specularTransform.szy;
rfz = _specularTransform.szz;
rf = (((rfx * nx) + (rfy * ny)) + (rfz * nz));
spec = ((directional.specular * Math.pow(rf, shininess)) * specular_brightness);
ksr = (ksr + (red * spec));
ksg = (ksg + (green * spec));
ksb = (ksb + (blue * spec));
};
};
for each (point in _arg1.source.lightarray.points) {
red = point.red;
green = point.green;
blue = point.blue;
_viewPosition = point.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 = ((point.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 = (((point.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 = (((point.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))){
for each (point in _arg1.source.lightarray.points) {
red = point.red;
green = point.green;
blue = point.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 130
//ColorMaterial (away3d.materials.ColorMaterial)
package away3d.materials {
import flash.events.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
public class ColorMaterial extends EventDispatcher implements ITriangleMaterial, IFogMaterial, IBillboardMaterial {
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 set alpha(_arg1:Number):void{
if (_alpha == _arg1){
return;
};
_alpha = _arg1;
_materialDirty = true;
}
public function renderTriangle(_arg1:DrawTriangle):void{
_arg1.source.session.renderTriangleColor(_color, _alpha, _arg1.v0, _arg1.v1, _arg1.v2);
}
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 updateMaterial(_arg1:Object3D, _arg2:View3D):void{
if (_materialDirty){
_materialDirty = false;
notifyMaterialUpdate();
};
}
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 addOnMaterialUpdate(_arg1:Function):void{
addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true);
}
public function get visible():Boolean{
return ((alpha > 0));
}
public function removeOnMaterialUpdate(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false);
}
}
}//package away3d.materials
Section 131
//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 132
//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 133
//ILayerMaterial (away3d.materials.ILayerMaterial)
package away3d.materials {
import flash.display.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import flash.geom.*;
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 134
//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;
}
}//package away3d.materials
Section 135
//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 136
//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 137
//IUVMaterial (away3d.materials.IUVMaterial)
package away3d.materials {
import flash.display.*;
import away3d.containers.*;
import away3d.core.utils.*;
import away3d.core.base.*;
public interface IUVMaterial extends IMaterial {
function getFaceMaterialVO(_arg1:FaceVO, _arg2:Object3D=null, _arg3:View3D=null):FaceMaterialVO;
function getPixel32(_arg1:Number, _arg2:Number):uint;
function get height():Number;
function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void;
function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void;
function get width():Number;
function get bitmap():BitmapData;
}
}//package away3d.materials
Section 138
//MovieMaterial (away3d.materials.MovieMaterial)
package away3d.materials {
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import flash.geom.*;
public class MovieMaterial extends TransformBitmapMaterial implements ITriangleMaterial, IUVMaterial {
private var _lastsession:int;
private var _lockH:Number;
private var _clipRect:Rectangle;
public var transparent:Boolean;
private var _lockW:Number;
public var autoUpdate:Boolean;
private var _bMode:String;
public var interactive:Boolean;
private var _colTransform:ColorTransform;
private var _movie:Sprite;
private var t:Matrix;
private var rendered:Boolean;
private var x:Number;
private var y:Number;
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 clipRect(_arg1:Rectangle):void{
_clipRect = _arg1;
}
override public function get width():Number{
return (_renderBitmap.width);
}
public function get movie():Sprite{
return (_movie);
}
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 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 get lockW():Number{
return (_lockW);
}
public function get clipRect():Rectangle{
return (_clipRect);
}
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();
};
}
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();
};
}
public function set movie(_arg1:Sprite):void{
if (_movie == _arg1){
return;
};
if (((_movie) && (_movie.parent))){
_movie.parent.removeChild(_movie);
};
_movie = _arg1;
if (!autoUpdate){
update();
};
}
override public function get height():Number{
return (_renderBitmap.height);
}
private function onMouseOut(_arg1:MouseEvent3D):void{
if (_arg1.material == this){
_arg1.object.removeOnMouseMove(onMouseMove);
resetInteractiveLayer();
};
}
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);
};
}
private function onMouseOver(_arg1:MouseEvent3D):void{
if (_arg1.material == this){
_arg1.object.addOnMouseMove(onMouseMove);
onMouseMove(_arg1);
};
}
public function get lockH():Number{
return (_lockH);
}
private function resetInteractiveLayer():void{
movie.x = -10000;
movie.y = -10000;
}
}
}//package away3d.materials
Section 139
//ShadingColorMaterial (away3d.materials.ShadingColorMaterial)
package away3d.materials {
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
public class ShadingColorMaterial extends CenterLightingMaterial {
private var fg:int;
public var specular:uint;
public var cache:Boolean;
private var fr:int;
private var fb:int;
public var ambient:uint;
public var alpha:Number;
public var diffuse:uint;
private var sfb:int;
private var sfg:int;
private var sfr:int;
public function ShadingColorMaterial(_arg1=null, _arg2:Object=null){
if (_arg1 == null){
_arg1 = "random";
};
_arg1 = Cast.trycolor(_arg1);
super(_arg2);
ambient = ini.getColor("ambient", _arg1);
diffuse = ini.getColor("diffuse", _arg1);
specular = ini.getColor("specular", _arg1);
alpha = ini.getNumber("alpha", 1);
cache = ini.getBoolean("cache", false);
}
override public function get visible():Boolean{
return (true);
}
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.v0, _arg1.v1, _arg1.v2);
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));
};
};
}
}
}//package away3d.materials
Section 140
//TransformBitmapMaterial (away3d.materials.TransformBitmapMaterial)
package away3d.materials {
import flash.display.*;
import away3d.containers.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import flash.geom.*;
public class TransformBitmapMaterial extends BitmapMaterial implements ITriangleMaterial, IUVMaterial {
private var _u0:Number;
private var _u1:Number;
private var _invtexturemapping:Matrix;
private var py:Number;
private var _u2:Number;
private var px:Number;
private var line:Point;
private var _v0:Number;
private var _v1:Number;
private var _v2:Number;
private var v0x:Number;
private var v0y:Number;
private var v0z:Number;
private var overlap:Boolean;
private var dot:Number;
private var normalR:Number3D;
private var v1x:Number;
private var v1y:Number;
private var v1z:Number;
private var h:Number;
private var i:String;
private var flag:Boolean;
private var _scaleX:Number;// = 1
private var _scaleY:Number;// = 1
private var mPoint2:Point;
private var mPoint3:Point;
private var mPoint4:Point;
private var t:Matrix;
private var _throughProjection:Boolean;
private var w:Number;
private var x:Number;
private var y:Number;
private var v0:Number3D;
private var v1:Number3D;
private var v2y:Number;
private var v2z:Number;
private var v2x:Number;
private var _projectionDirty:Boolean;
private var mapa:Number;
private var mapb:Number;
private var mapc:Number;
private var mapd:Number;
private var v2:Number3D;
private var mPoint1:Point;
private var point:Point;
private var point1:Point;
private var point3:Point;
private var fPoint1:Point;
private var fPoint2:Point;
private var DOWN:Number3D;
private var fPoint4:Point;
private var zero:Number;
private var fPoint3:Point;
private var _globalProjection:Boolean;
private var sign:Number;
private var point2:Point;
private var _N:Number3D;
private var _projectionVector:Number3D;
private var _M:Number3D;
private var faceVO:FaceVO;
private var _rotation:Number;// = 0
private var maptx:Number;
private var _transformDirty:Boolean;
private var _offsetX:Number;// = 0
private var _offsetY:Number;// = 0
var _transform:Matrix;
private var mapty:Number;
private var RIGHT:Number3D;
public function TransformBitmapMaterial(_arg1:BitmapData, _arg2:Object=null){
_transform = new Matrix();
_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();
fPoint4 = 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 set throughProjection(_arg1:Boolean):void{
_throughProjection = _arg1;
_projectionDirty = true;
}
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;
}
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 get throughProjection():Boolean{
return (_throughProjection);
}
public function get offsetY():Number{
return (_offsetY);
}
public function get offsetX():Number{
return (_offsetX);
}
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 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 scaleX():Number{
return (_scaleX);
}
public function get globalProjection():Boolean{
return (_globalProjection);
}
public function get projectionVector():Number3D{
return (_projectionVector);
}
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 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));
}
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]);
}
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);
}
public function set globalProjection(_arg1:Boolean):void{
_globalProjection = _arg1;
_projectionDirty = true;
}
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;
}
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;
}
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;
}
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);
}
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));
};
}
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 checkEdge(_arg1:Array, _arg2:Array):Boolean{
for (i in _arg1) {
point2 = _arg1[i];
if (int(i) == 0){
point1 = _arg1[(_arg1.length - 1)];
point3 = _arg1[(_arg1.length - 2)];
} else {
point1 = _arg1[(int(i) - 1)];
if (int(i) == 1){
point3 = _arg1[(_arg1.length - 1)];
} else {
point3 = _arg1[(int(i) - 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 (point in _arg2) {
dot = ((point.x * line.x) + (point.y * line.y));
if ((zero * sign) > (dot * sign)){
flag = false;
break;
};
};
if (flag){
return (true);
};
};
return (false);
}
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);
}
}
}//package away3d.materials
Section 141
//WhiteShadingBitmapMaterial (away3d.materials.WhiteShadingBitmapMaterial)
package away3d.materials {
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import flash.filters.*;
import away3d.core.render.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import flash.geom.*;
public class WhiteShadingBitmapMaterial extends CenterLightingMaterial implements IUVMaterial {
private var colorTransform:ColorMatrixFilter;
private var step:int;// = 1
private var _bitmap:BitmapData;
private var br:Number;
private var cache:Dictionary;
private var blackrender:Boolean;
public var repeat:Boolean;
private var mapping:Matrix;
private var bitmapPoint:Point;
private var whitek:Number;// = 0.2
public var smooth:Boolean;
private var _faceDictionary:Dictionary;
private var _texturemapping:Matrix;
private var _faceMaterialVO:FaceMaterialVO;
private var whiterender:Boolean;
public function WhiteShadingBitmapMaterial(_arg1:BitmapData, _arg2:Object=null){
_faceDictionary = new Dictionary(true);
bitmapPoint = new Point(0, 0);
colorTransform = new ColorMatrixFilter();
_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 get width():Number{
return (_bitmap.width);
}
public function getFaceMaterialVO(_arg1:FaceVO, _arg2:Object3D=null, _arg3:View3D=null):FaceMaterialVO{
if ((_faceMaterialVO = _faceDictionary[_arg1])){
return (_faceMaterialVO);
};
return ((_faceDictionary[_arg1] = new FaceMaterialVO()));
}
override public function clearFaces(_arg1:Object3D=null, _arg2:View3D=null):void{
notifyMaterialUpdate();
for each (_faceMaterialVO in _faceDictionary) {
if (!_faceMaterialVO.cleared){
_faceMaterialVO.clear();
};
};
}
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);
}
public function getPixel32(_arg1:Number, _arg2:Number):uint{
return (_bitmap.getPixel32((_arg1 * _bitmap.width), ((1 - _arg2) * _bitmap.height)));
}
public function get bitmap():BitmapData{
return (_bitmap);
}
public function doubleStepTo(_arg1:int):void{
if (step < _arg1){
step = (step * 2);
};
}
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)));
}
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);
v0 = _arg1.v0;
v1 = _arg1.v1;
v2 = _arg1.v2;
if ((((br < 1)) && (((blackrender) || ((((step < 16)) && (!(_bitmap.transparent)))))))){
_arg2.renderTriangleBitmap(_bitmap, mapping, v0, v1, v2, smooth, repeat);
_arg2.renderTriangleColor(0, (1 - br), v0, v1, v2);
} else {
if ((((br > 1)) && (whiterender))){
_arg2.renderTriangleBitmap(_bitmap, mapping, v0, v1, v2, smooth, repeat);
_arg2.renderTriangleColor(0xFFFFFF, ((br - 1) * whitek), v0, v1, v2);
} 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, v0, v1, v2, smooth, repeat);
};
};
}
public function invalidateFaces(_arg1:Object3D=null, _arg2:View3D=null):void{
for each (_faceMaterialVO in _faceDictionary) {
_faceMaterialVO.invalidated = true;
};
}
}
}//package away3d.materials
Section 142
//WireColorMaterial (away3d.materials.WireColorMaterial)
package away3d.materials {
import flash.events.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
public class WireColorMaterial extends EventDispatcher implements ITriangleMaterial {
public var color:int;
protected var ini:Init;
public var alpha:Number;
public var width:Number;
public var wirealpha:Number;
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 get visible():Boolean{
return ((((alpha > 0)) || ((wirealpha > 0))));
}
public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{
}
public function renderTriangle(_arg1:DrawTriangle):void{
_arg1.source.session.renderTriangleLineFill(width, color, alpha, wirecolor, wirealpha, _arg1.v0, _arg1.v1, _arg1.v2);
}
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);
}
}
}//package away3d.materials
Section 143
//WireframeMaterial (away3d.materials.WireframeMaterial)
package away3d.materials {
import flash.events.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.draw.*;
import away3d.core.utils.*;
import away3d.core.base.*;
public class WireframeMaterial extends EventDispatcher implements ITriangleMaterial, ISegmentMaterial {
public var color:int;
protected var ini:Init;
public var width:Number;
public var alpha:Number;
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 renderTriangle(_arg1:DrawTriangle):void{
if (alpha <= 0){
return;
};
_arg1.source.session.renderTriangleLine(width, color, alpha, _arg1.v0, _arg1.v1, _arg1.v2);
}
public function updateMaterial(_arg1:Object3D, _arg2:View3D):void{
}
public function get visible():Boolean{
return ((alpha > 0));
}
public function removeOnMaterialUpdate(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false);
}
public function renderSegment(_arg1:DrawSegment):void{
if (alpha <= 0){
return;
};
_arg1.source.session.renderLine(_arg1.v0, _arg1.v1, width, color, alpha);
}
public function addOnMaterialUpdate(_arg1:Function):void{
addEventListener(MaterialEvent.MATERIAL_UPDATED, _arg1, false, 0, true);
}
}
}//package away3d.materials
Section 144
//CubeMaterialsData (away3d.primitives.data.CubeMaterialsData)
package away3d.primitives.data {
import flash.events.*;
import away3d.events.*;
import away3d.core.utils.*;
import away3d.materials.*;
public class CubeMaterialsData extends EventDispatcher {
private var _back:ITriangleMaterial;
private var _bottom:ITriangleMaterial;
private var _top:ITriangleMaterial;
protected var ini:Init;
private var _left:ITriangleMaterial;
private var _front:ITriangleMaterial;
private var _materialchanged:MaterialEvent;
private var _right:ITriangleMaterial;
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 get left():ITriangleMaterial{
return (_left);
}
public function set left(_arg1:ITriangleMaterial):void{
if (_left == _arg1){
return;
};
_left = _arg1;
notifyMaterialChange(_left, "left");
}
public function set front(_arg1:ITriangleMaterial):void{
if (_front == _arg1){
return;
};
_front = _arg1;
notifyMaterialChange(_front, "front");
}
public function get top():ITriangleMaterial{
return (_top);
}
public function set bottom(_arg1:ITriangleMaterial):void{
if (_bottom == _arg1){
return;
};
_bottom = _arg1;
notifyMaterialChange(_bottom, "bottom");
}
public function removeOnMaterialChange(_arg1:Function):void{
removeEventListener(MaterialEvent.MATERIAL_CHANGED, _arg1, false);
}
public function get right():ITriangleMaterial{
return (_right);
}
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 get back():ITriangleMaterial{
return (_back);
}
public function get front():ITriangleMaterial{
return (_front);
}
public function get bottom():ITriangleMaterial{
return (_bottom);
}
public function set back(_arg1:ITriangleMaterial):void{
if (_back == _arg1){
return;
};
_back = _arg1;
notifyMaterialChange(_back, "back");
}
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 145
//AbstractPrimitive (away3d.primitives.AbstractPrimitive)
package away3d.primitives {
import away3d.core.base.*;
import away3d.materials.*;
import away3d.*;
public class AbstractPrimitive extends Mesh {
var _uv:UV;
var _uvStore:Array;
var _faceStore:Array;
var _primitiveDirty:Boolean;
private var _index:int;
var _faceActive:Array;
var _vActive:Array;
var _uvActive:Array;
var _vStore:Array;
var _v:Vertex;
var _face:Face;
public function AbstractPrimitive(_arg1:Object=null){
_vStore = new Array();
_vActive = new Array();
_uvStore = new Array();
_uvActive = new Array();
_faceStore = new Array();
_faceActive = new Array();
super(_arg1);
}
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);
}
public function buildPrimitive():void{
_primitiveDirty = false;
_objectDirty = true;
_index = faces.length;
while (_index--) {
removeFace(faces[_index]);
};
_vStore = _vStore.concat(_vActive);
_vActive = [];
_uvStore = _uvStore.concat(_uvActive);
_uvActive = [];
_faceStore = _faceStore.concat(_faceActive);
_faceActive = [];
}
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 updateObject():void{
if (_primitiveDirty){
buildPrimitive();
};
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);
}
}
}//package away3d.primitives
Section 146
//AbstractWirePrimitive (away3d.primitives.AbstractWirePrimitive)
package away3d.primitives {
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.materials.*;
public class AbstractWirePrimitive extends Mesh {
var _segment:Segment;
var _vStore:Array;
var _segmentStore:Array;
var _primitiveDirty:Boolean;
private var _index:int;
var _v:Vertex;
var _segmentActive:Array;
var _vActive:Array;
public function AbstractWirePrimitive(_arg1:Object=null){
_vStore = new Array();
_vActive = new Array();
_segmentStore = new Array();
_segmentActive = new Array();
super(_arg1);
}
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 updateObject():void{
if (_primitiveDirty){
buildPrimitive();
};
super.updateObject();
}
public function buildPrimitive():void{
_primitiveDirty = false;
_index = segments.length;
while (_index--) {
removeSegment(segments[_index]);
};
_vStore = _vStore.concat(_vActive);
_vActive = new Array();
_segmentStore = _segmentStore.concat(_segmentActive);
_segmentActive = new Array();
}
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);
}
}
}//package away3d.primitives
Section 147
//Sphere (away3d.primitives.Sphere)
package away3d.primitives {
import away3d.core.utils.*;
import away3d.core.base.*;
public class Sphere extends AbstractPrimitive {
private var grid:Array;
private var _segmentsH:int;
private var _radius:Number;
private var _yUp:Boolean;
private var _segmentsW:int;
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);
buildSphere(_radius, _segmentsW, _segmentsH, _yUp);
type = "Sphere";
url = "primitive";
}
override public function buildPrimitive():void{
super.buildPrimitive();
buildSphere(_radius, _segmentsW, _segmentsH, _yUp);
}
public function set radius(_arg1:Number):void{
if (_radius == _arg1){
return;
};
_radius = _arg1;
_primitiveDirty = true;
}
public function get segmentsH():Number{
return (_segmentsH);
}
public function vertex(_arg1:int, _arg2:int):Vertex{
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;
}
public function get radius():Number{
return (_radius);
}
public function get yUp():Boolean{
return (_yUp);
}
public function get segmentsW():Number{
return (_segmentsW);
}
private function buildSphere(_arg1:Number, _arg2:int, _arg3:int, _arg4:Boolean):void{
var _local5:int;
var _local6:int;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Vertex;
var _local16:Vertex;
var _local17:Vertex;
var _local18:Vertex;
var _local19:int;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:UV;
var _local25:UV;
var _local26:UV;
var _local27:UV;
grid = new Array((_arg3 + 1));
var _local7:Vertex = (_arg4) ? createVertex(0, -(_arg1), 0) : createVertex(0, 0, -(_arg1));
grid[0] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
grid[0][_local5] = _local7;
_local5++;
};
_local6 = 1;
while (_local6 < _arg3) {
_local9 = ((_local6 / _arg3) * Math.PI);
_local10 = (-(_arg1) * Math.cos(_local9));
_local11 = (_arg1 * Math.sin(_local9));
grid[_local6] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
_local12 = (((2 * _local5) / _arg2) * Math.PI);
_local13 = (_local11 * Math.sin(_local12));
_local14 = (_local11 * Math.cos(_local12));
if (_arg4){
grid[_local6][_local5] = createVertex(_local14, _local10, _local13);
} else {
grid[_local6][_local5] = createVertex(_local14, -(_local13), _local10);
};
_local5++;
};
_local6++;
};
var _local8:Vertex = (_arg4) ? createVertex(0, _arg1, 0) : createVertex(0, 0, _arg1);
grid[_arg3] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
grid[_arg3][_local5] = _local8;
_local5++;
};
_local6 = 1;
while (_local6 <= _arg3) {
_local5 = 0;
while (_local5 < _arg2) {
_local15 = grid[_local6][_local5];
_local16 = grid[_local6][(((_local5 - 1) + _arg2) % _arg2)];
_local17 = grid[(_local6 - 1)][(((_local5 - 1) + _arg2) % _arg2)];
_local18 = grid[(_local6 - 1)][_local5];
_local19 = _local5;
if (_local5 == 0){
_local19 = _arg2;
};
_local20 = (_local6 / _arg3);
_local21 = ((_local6 - 1) / _arg3);
_local22 = (_local19 / _arg2);
_local23 = ((_local19 - 1) / _arg2);
_local24 = createUV(_local22, _local20);
_local25 = createUV(_local23, _local20);
_local26 = createUV(_local23, _local21);
_local27 = createUV(_local22, _local21);
if (_local6 < _arg3){
addFace(createFace(_local15, _local16, _local17, null, _local24, _local25, _local26));
};
if (_local6 > 1){
addFace(createFace(_local15, _local17, _local18, null, _local24, _local26, _local27));
};
_local5++;
};
_local6++;
};
}
public function set segmentsH(_arg1:Number):void{
if (_segmentsH == _arg1){
return;
};
_segmentsH = _arg1;
_primitiveDirty = true;
}
}
}//package away3d.primitives
Section 148
//WireCube (away3d.primitives.WireCube)
package away3d.primitives {
import away3d.core.base.*;
public class WireCube extends AbstractWirePrimitive {
public var v001:Vertex;
private var _depth:Number;
private var _height:Number;
private var _width:Number;
public var v010:Vertex;
public var v011:Vertex;
public var v111:Vertex;
public var v110:Vertex;
public var v000:Vertex;
public var v100:Vertex;
public var v101: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});
buildWireCube(_width, _height, _depth);
type = "WireCube";
url = "primitive";
}
public function get depth():Number{
return (_depth);
}
public function get width():Number{
return (_width);
}
public function set width(_arg1:Number):void{
if (_width == _arg1){
return;
};
_width = _arg1;
_primitiveDirty = true;
}
public function set height(_arg1:Number):void{
if (_height == _arg1){
return;
};
_height = _arg1;
_primitiveDirty = true;
}
public function set depth(_arg1:Number):void{
if (_depth == _arg1){
return;
};
_depth = _arg1;
_primitiveDirty = true;
}
override public function buildPrimitive():void{
super.buildPrimitive();
buildWireCube(_width, _height, _depth);
}
public function get height():Number{
return (_height);
}
private function buildWireCube(_arg1:Number, _arg2:Number, _arg3:Number):void{
v000 = createVertex((-(_arg1) / 2), (-(_arg2) / 2), (-(_arg3) / 2));
v001 = createVertex((-(_arg1) / 2), (-(_arg2) / 2), (_arg3 / 2));
v010 = createVertex((-(_arg1) / 2), (_arg2 / 2), (-(_arg3) / 2));
v011 = createVertex((-(_arg1) / 2), (_arg2 / 2), (_arg3 / 2));
v100 = createVertex((_arg1 / 2), (-(_arg2) / 2), (-(_arg3) / 2));
v101 = createVertex((_arg1 / 2), (-(_arg2) / 2), (_arg3 / 2));
v110 = createVertex((_arg1 / 2), (_arg2 / 2), (-(_arg3) / 2));
v111 = createVertex((_arg1 / 2), (_arg2 / 2), (_arg3 / 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));
}
}
}//package away3d.primitives
Section 149
//WireSphere (away3d.primitives.WireSphere)
package away3d.primitives {
import away3d.core.base.*;
public class WireSphere extends AbstractWirePrimitive {
private var grid:Array;
private var _segmentsH:int;
private var _radius:Number;
private var _yUp:Boolean;
private var _segmentsW:int;
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);
buildWireSphere(_radius, _segmentsW, _segmentsH, _yUp);
type = "WireSphere";
url = "primitive";
}
private function buildWireSphere(_arg1:Number, _arg2:int, _arg3:int, _arg4:Boolean):void{
var _local5:int;
var _local6:int;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Vertex;
var _local16:Vertex;
var _local17:Vertex;
var _local18:Vertex;
grid = new Array((_arg3 + 1));
var _local7:Vertex = (_arg4) ? createVertex(0, -(_arg1), 0) : createVertex(0, 0, -(_arg1));
grid[0] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
grid[0][_local5] = _local7;
_local5++;
};
_local6 = 1;
while (_local6 < _arg3) {
_local9 = ((_local6 / _arg3) * Math.PI);
_local10 = (-(_arg1) * Math.cos(_local9));
_local11 = (_arg1 * Math.sin(_local9));
grid[_local6] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
_local12 = (((2 * _local5) / _arg2) * Math.PI);
_local13 = (_local11 * Math.sin(_local12));
_local14 = (_local11 * Math.cos(_local12));
if (_arg4){
grid[_local6][_local5] = createVertex(_local14, _local10, _local13);
} else {
grid[_local6][_local5] = createVertex(_local14, -(_local13), _local10);
};
_local5++;
};
_local6++;
};
var _local8:Vertex = (_arg4) ? createVertex(0, _arg1, 0) : createVertex(0, 0, _arg1);
grid[_arg3] = new Array(_arg2);
_local5 = 0;
while (_local5 < _arg2) {
grid[_arg3][_local5] = _local8;
_local5++;
};
_local6 = 1;
while (_local6 <= _arg3) {
_local5 = 0;
while (_local5 < _arg2) {
_local15 = grid[_local6][_local5];
_local16 = grid[_local6][(((_local5 - 1) + _arg2) % _arg2)];
_local17 = grid[(_local6 - 1)][(((_local5 - 1) + _arg2) % _arg2)];
_local18 = grid[(_local6 - 1)][_local5];
addSegment(createSegment(_local15, _local18));
addSegment(createSegment(_local16, _local17));
if (_local6 < _arg3){
addSegment(createSegment(_local15, _local16));
};
_local5++;
};
_local6++;
};
}
public function set radius(_arg1:Number):void{
if (_radius == _arg1){
return;
};
_radius = _arg1;
_primitiveDirty = true;
}
public function get segmentsH():Number{
return (_segmentsH);
}
public function vertex(_arg1:int, _arg2:int):Vertex{
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;
}
public function get radius():Number{
return (_radius);
}
public function get yUp():Boolean{
return (_yUp);
}
public function get segmentsW():Number{
return (_segmentsW);
}
override public function buildPrimitive():void{
super.buildPrimitive();
buildWireSphere(_radius, _segmentsW, _segmentsH, _yUp);
}
public function set segmentsH(_arg1:Number):void{
if (_segmentsH == _arg1){
return;
};
_segmentsH = _arg1;
_primitiveDirty = true;
}
}
}//package away3d.primitives
Section 150
//DirSprite2D (away3d.sprites.DirSprite2D)
package away3d.sprites {
import flash.display.*;
import flash.utils.*;
import away3d.core.utils.*;
import away3d.core.base.*;
import away3d.core.project.*;
public class DirSprite2D extends Object3D {
public var deltaZ:Number;
private var _bitmaps:Dictionary;
public var scaling:Number;
public var smooth:Boolean;
private var _vertices:Array;
public var rotation:Number;
public function DirSprite2D(_arg1:Object=null){
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);
var _local2:Array = 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 _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;
};
};
};
var _local5:Vertex = 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 151
//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 deltaZ:Number;
public var smooth:Boolean;
public var scaling:Number;
public var rotation:Number;
public var bitmap:BitmapData;
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 152
//MovieClipSprite (away3d.sprites.MovieClipSprite)
package away3d.sprites {
import flash.display.*;
import away3d.core.draw.*;
import away3d.core.base.*;
import away3d.core.project.*;
public class MovieClipSprite extends Object3D {
public var movieclip:DisplayObject;
public var deltaZ:Number;
public var align:String;
private var _ddo:DrawDisplayObject;
private var _sc:ScreenVertex;
private var _center:Vertex;
public var rescale:Boolean;
private var _persp:Number;
public var scaling:Number;
public function MovieClipSprite(_arg1:DisplayObject, _arg2:Object=null){
_center = new Vertex();
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 153
//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 deltaZ:Number;
public var smooth:Boolean;
public var scaling:Number;
public var rotation:Number;
public var bitmap:BitmapData;
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 154
//arcane (away3d.arcane)
package away3d {
public namespace arcane;
}//package away3d
Section 155
//AnimatedBillBoardSprite (com.core.models.AnimatedBillBoardSprite)
package com.core.models {
import flash.events.*;
import flash.display.*;
import gs.*;
import away3d.containers.*;
import away3d.events.*;
import flash.utils.*;
import away3d.core.traverse.*;
import com.core.*;
import away3d.sprites.*;
public class AnimatedBillBoardSprite extends DirSprite2D {
public var _traverser:TickTraverser;
private var _speed:Number;// = 4
private var _hitter:ObjectContainer3D;
private var _clickLockTimer:Timer;
private var _snInt:Number;
private var _tm:Number;// = 0
public var nextthink:int;
private var _bitmapAr:Array;
public var lastmove:int;
public var role:String;
private var _sn:Number;// = 0
public static const BILLBOARDHIT_EVENT:String = " billboard hit";
public static const BILLBOARDREADY_EVENT:String = " billboard ready";
public function AnimatedBillBoardSprite(_arg1:MovieClip, _arg2:Object=null){
var _local6:BitmapData;
_bitmapAr = new Array();
_snInt = (Math.random() * 1.1);
_clickLockTimer = new Timer(200, 1);
_hitter = new ObjectContainer3D();
super(_arg2);
var _local3:Timer = new Timer(20);
_local3.addEventListener(TimerEvent.TIMER, run);
_local3.start();
this.useHandCursor = true;
this.addOnMouseOver(ovr);
this.addOnMouseOut(ot);
this.addOnMouseDown(hit);
var _local4:Number = 0;
while (_local4 < 8) {
_local6 = new BitmapData(_arg1.width, _arg1.height, true, 0);
_arg1.gotoAndStop((_local4 + 1));
_local6.draw(_arg1);
switch (_local4){
case 0:
add(0, 0, -1, _local6);
break;
case 1:
add(-0.7, 0, -0.7, _local6);
break;
case 2:
add(-1, 0, 0, _local6);
break;
case 3:
add(-0.7, 0, 0.7, _local6);
break;
case 4:
add(0, 0, 1, _local6);
break;
case 5:
add(0.7, 0, 0.7, _local6);
break;
case 6:
add(1, 0, 0, _local6);
break;
case 7:
add(0.7, 0, -0.7, _local6);
break;
};
_local4++;
};
var _local5:Timer = new Timer(300, 1);
_local5.addEventListener(TimerEvent.TIMER_COMPLETE, dis);
_local5.start();
}
private function run(_arg1:Event):void{
_tm = (_tm + 1);
tickz();
}
private function hit(_arg1:MouseEvent3D):void{
if (((GameManager.gameActive) && (SandWich.readyHack))){
remColor();
trace(("HIT" + this.name));
Main.hitCycle.inner.gotoAndPlay(2);
this.visible = false;
dispatchEvent(new Event(BILLBOARDHIT_EVENT, true));
};
_arg1.target._clickLockTimer.start();
}
public function get myName():String{
return (this.name);
}
private function dis(_arg1:Event):void{
dispatchEvent(new Event(BILLBOARDREADY_EVENT, true));
}
private function ot(_arg1:MouseEvent3D):void{
remColor();
}
private function remColor():void{
TweenFilterLite.to(Main.cursor, 0.01, {colorMatrixFilter:{colorize:8639219, amount:0}});
}
private function ovr(_arg1:MouseEvent3D):void{
if (GameManager.gameActive){
TweenFilterLite.to(Main.cursor, 0.1, {colorMatrixFilter:{colorize:8639219, amount:1}});
};
}
public function get cont():ObjectContainer3D{
return (_hitter);
}
public function tickz():void{
_sn = (_sn + _snInt);
y = (y + ((_snInt * 2) * Math.sin((_sn / 6))));
if ((((role == null)) || ((nextthink < _tm)))){
role = ["stop", "right", "left", "forward", "backward", "front_right", "front_left", "back_left", "back_right"][int((Math.random() * 8))];
if ((((Math.abs(x) > 300)) || ((Math.abs(z) > 300)))){
role = ["stop", "right", "left", "forward", "backward", "front_right", "front_left", "back_left", "back_right"][int((Math.random() * 8))];
};
nextthink = (_tm + (Math.random() * 200));
};
var _local1:Number = ((lastmove - _tm) / 100);
switch (role){
case "stop":
break;
case "right":
rotationY = -90;
moveForward(_speed);
break;
case "left":
rotationY = 90;
moveForward(_speed);
break;
case "front_right":
rotationY = -120;
moveRight(_speed);
break;
case "front_left":
rotationY = 120;
moveLeft(_speed);
break;
case "back_left":
rotationY = 60;
moveRight(_speed);
break;
case "back_right":
rotationY = -60;
moveLeft(_speed);
break;
case "forward":
rotationY = 180;
moveBackward(_speed);
break;
case "backward":
rotationY = 0;
moveBackward(_speed);
break;
};
lastmove = _tm;
if (x > 300){
x = 300;
};
if (x < -300){
x = -300;
};
if (z > 300){
z = 300;
};
if (z < -300){
z = -300;
};
}
}
}//package com.core.models
Section 156
//BaconStrip (com.core.models.BaconStrip)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class BaconStrip extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function BaconStrip(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(611.7107, -228.548, -114.4355);
v(611.7107, -225.807, 44.6959);
v(611.7107, -219.4114, -114.4355);
v(611.7107, -216.6703, 44.6959);
v(545.6537, -120.735, -136.086);
v(545.6537, -117.0803, 63.0989);
v(540.9353, -128.958, 84.7494);
v(540.9353, -133.5264, -157.7365);
v(73.8177, -9.2673, 100.9873);
v(73.8177, -14.7493, -175.0569);
v(73.8177, -0.1306, -152.3239);
v(78.5361, 4.4378, 76.0892);
v(-586.7526, -38.5047, -103.6102);
v(-586.7526, -44.9004, 36.0357);
v(-591.471, -47.6414, -103.6102);
v(-586.7526, -35.7637, 36.0357);
uv(0.9814, 0);
uv(0.9804, 0.132);
uv(1, 0.001);
uv(1, 0.001);
uv(0.9804, 0.132);
uv(0.999, 0.132);
uv(0.0645, 0.9238);
uv(0.3832, 1);
uv(0.4194, 0.9238);
uv(0.0645, 0.9238);
uv(0.1007, 1);
uv(0.3832, 1);
uv(0.4194, 0.9238);
uv(0.3832, 1);
uv(0.4575, 0.9247);
uv(0.4575, 0.9247);
uv(0.3832, 1);
uv(0.3832, 1);
uv(0.0274, 0.9238);
uv(0.1007, 1);
uv(0.0645, 0.9238);
uv(0.0274, 0.9238);
uv(0.1007, 1);
uv(0.1007, 1);
uv(0.9472, 0.0762);
uv(0.5914, 0.001);
uv(0.5181, 0.0772);
uv(0.9472, 0.0762);
uv(0.8729, 0);
uv(0.5914, 0.001);
uv(0.9804, 0.4809);
uv(0.5181, 0.0772);
uv(0.4897, 0.4819);
uv(0.9804, 0.4809);
uv(0.9472, 0.0762);
uv(0.5181, 0.0772);
uv(0, 0.5191);
uv(0.0274, 0.9238);
uv(0.042, 0.5191);
uv(0.042, 0.5191);
uv(0.0274, 0.9238);
uv(0.0645, 0.9238);
uv(0.4477, 0.5191);
uv(0.4575, 0.9247);
uv(0.4897, 0.52);
uv(0.4477, 0.5191);
uv(0.4194, 0.9238);
uv(0.4575, 0.9247);
uv(0.042, 0.5191);
uv(0.0645, 0.9238);
uv(0.4477, 0.5191);
uv(0.4477, 0.5191);
uv(0.0645, 0.9238);
uv(0.4194, 0.9238);
uv(0.9961, 0.2483);
uv(0.9814, 0.132);
uv(0.9804, 0.2483);
uv(0.9961, 0.2483);
uv(0.9971, 0.132);
uv(0.9814, 0.132);
uv(0.4897, 0.52);
uv(0.3724, 0.001);
uv(0.4477, 0.5191);
uv(0.4897, 0.52);
uv(0.3724, 0.001);
uv(0.3724, 0.001);
uv(0.1232, 0.001);
uv(0, 0.5191);
uv(0.1232, 0);
uv(0.1232, 0);
uv(0, 0.5191);
uv(0.042, 0.5191);
uv(0.1232, 0);
uv(0.4477, 0.5191);
uv(0.3724, 0.001);
uv(0.1232, 0);
uv(0.042, 0.5191);
uv(0.4477, 0.5191);
uv(0.6139, 1);
uv(0.9804, 0.4809);
uv(0.4897, 0.4819);
uv(0.6139, 1);
uv(0.8631, 1);
uv(0.9804, 0.4809);
f(0, 1, 2, 0, 1, 2);
f(2, 1, 3, 3, 4, 5);
f(4, 3, 5, 6, 7, 8);
f(4, 2, 3, 9, 10, 11);
f(5, 3, 6, 12, 13, 14);
f(6, 3, 1, 15, 16, 17);
f(7, 2, 4, 18, 19, 20);
f(7, 0, 2, 21, 22, 23);
f(6, 0, 7, 24, 25, 26);
f(6, 1, 0, 27, 28, 29);
f(8, 7, 9, 30, 31, 32);
f(8, 6, 7, 33, 34, 35);
f(9, 7, 10, 36, 37, 38);
f(10, 7, 4, 39, 40, 41);
f(11, 6, 8, 42, 43, 44);
f(11, 5, 6, 45, 46, 47);
f(10, 4, 11, 48, 49, 50);
f(11, 4, 5, 51, 52, 53);
f(12, 13, 14, 54, 55, 56);
f(12, 15, 13, 57, 58, 59);
f(8, 15, 11, 60, 61, 62);
f(8, 13, 15, 63, 64, 65);
f(14, 9, 12, 66, 67, 68);
f(12, 9, 10, 69, 70, 71);
f(12, 11, 15, 72, 73, 74);
f(12, 10, 11, 75, 76, 77);
f(14, 8, 9, 78, 79, 80);
f(14, 13, 8, 81, 82, 83);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 157
//BreadSlice (com.core.models.BreadSlice)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class BreadSlice extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function BreadSlice(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(-481.7653, -14.9817, -132.0451);
v(-481.7653, -14.9817, 387.8955);
v(-273.2151, -21.3165, 479.1617);
v(-442.8359, -16.4436, 440.4427);
v(-442.8359, 80.0404, -184.5923);
v(-273.2151, 80.0404, 479.1617);
v(-442.8359, 80.0404, 440.4427);
v(-273.2151, 80.0404, -223.3113);
v(-484.5459, 80.0404, 387.8955);
v(-442.8359, -16.4436, -184.5923);
v(-481.7653, 80.0404, -132.0451);
v(-273.2151, -21.3165, -223.3113);
v(224.5246, 84.9133, 481.9273);
v(224.5246, 84.9133, -223.3113);
v(224.5246, -39.3464, 479.1617);
v(224.5246, -39.3464, -223.3113);
uv(0, 0.6481);
uv(0, 0.9443);
uv(0.1193, 0.9971);
uv(0.1193, 0.9971);
uv(0, 0.9443);
uv(0.0225, 0.9736);
uv(0.9765, 0.3783);
uv(0.6012, 0.2825);
uv(0.6237, 0.3783);
uv(0.9765, 0.3783);
uv(0.999, 0.2825);
uv(0.6012, 0.2825);
uv(0, 0.3314);
uv(0.0792, 0.2639);
uv(0, 0.2522);
uv(0, 0.3314);
uv(0.087, 0.3167);
uv(0.0792, 0.2639);
uv(0.391, 0.5846);
uv(0.3695, 0.4936);
uv(0.305, 0.5953);
uv(0.305, 0.5953);
uv(0.3695, 0.4936);
uv(0.3079, 0.4966);
uv(0.3079, 0.4966);
uv(0.087, 0.3167);
uv(0.305, 0.5953);
uv(0.305, 0.5953);
uv(0.087, 0.3167);
uv(0, 0.3314);
uv(0.1193, 0.9971);
uv(0.1193, 0.5953);
uv(0, 0.6481);
uv(0, 0.6481);
uv(0.1193, 0.5953);
uv(0.0225, 0.6188);
uv(0.0792, 0.2639);
uv(0.1437, 0.1711);
uv(0, 0.2522);
uv(0, 0.2522);
uv(0.1437, 0.1711);
uv(0.0948, 0.13);
uv(0.391, 0.5846);
uv(0.4506, 0.434);
uv(0.3695, 0.4936);
uv(0.391, 0.5846);
uv(0.5161, 0.4809);
uv(0.4506, 0.434);
uv(0.6237, 0.3783);
uv(0.9453, 0.4203);
uv(0.9765, 0.3783);
uv(0.6237, 0.3783);
uv(0.6745, 0.4233);
uv(0.9453, 0.4203);
uv(0.2952, 0.0704);
uv(0.5327, 0.1965);
uv(0.3021, 0);
uv(0.3021, 0);
uv(0.5327, 0.1965);
uv(0.6012, 0.173);
uv(0.5161, 0.4809);
uv(0.5327, 0.1965);
uv(0.4506, 0.434);
uv(0.5161, 0.4809);
uv(0.6012, 0.173);
uv(0.5327, 0.1965);
uv(0.3021, 0);
uv(0.0948, 0.13);
uv(0.2952, 0.0704);
uv(0.2952, 0.0704);
uv(0.0948, 0.13);
uv(0.1437, 0.1711);
uv(0.6012, 0);
uv(0.6012, 0.2825);
uv(1, 0.001);
uv(1, 0.001);
uv(0.6012, 0.2825);
uv(0.999, 0.2825);
uv(0.4027, 0.9971);
uv(0.1193, 0.5953);
uv(0.1193, 0.9971);
uv(0.4027, 0.9971);
uv(0.4027, 0.5953);
uv(0.1193, 0.5953);
f(0, 1, 2, 0, 1, 2);
f(2, 1, 3, 3, 4, 5);
f(4, 5, 6, 6, 7, 8);
f(4, 7, 5, 9, 10, 11);
f(1, 6, 3, 12, 13, 14);
f(1, 8, 6, 15, 16, 17);
f(9, 4, 0, 18, 19, 20);
f(0, 4, 10, 21, 22, 23);
f(10, 8, 0, 24, 25, 26);
f(0, 8, 1, 27, 28, 29);
f(2, 11, 0, 30, 31, 32);
f(0, 11, 9, 33, 34, 35);
f(6, 5, 3, 36, 37, 38);
f(3, 5, 2, 39, 40, 41);
f(9, 7, 4, 42, 43, 44);
f(9, 11, 7, 45, 46, 47);
f(6, 10, 4, 48, 49, 50);
f(6, 8, 10, 51, 52, 53);
f(12, 13, 14, 54, 55, 56);
f(14, 13, 15, 57, 58, 59);
f(11, 13, 7, 60, 61, 62);
f(11, 15, 13, 63, 64, 65);
f(14, 2, 12, 66, 67, 68);
f(12, 2, 5, 69, 70, 71);
f(12, 5, 13, 72, 73, 74);
f(13, 5, 7, 75, 76, 77);
f(14, 11, 2, 78, 79, 80);
f(14, 15, 11, 81, 82, 83);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 158
//Burger (com.core.models.Burger)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class Burger extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function Burger(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(510.2167, -3.6595, 45.3062);
v(240.254, 39.9661, -378.5418);
v(323.6248, -9.6356, -457.194);
v(383.1754, 52.5159, 45.3062);
v(240.254, -24.5759, -378.5418);
v(387.1455, -27.5639, 45.3062);
v(287.8945, -25.7711, 324.9584);
v(387.1455, -7.8428, 425.4584);
v(283.9244, 44.1494, 324.9584);
v(6.0217, -19.795, -562.0636);
v(6.0217, -36.5281, -457.194);
v(6.0217, 36.978, -457.194);
v(-228.2106, 25.6234, -378.5418);
v(-311.5814, -29.9544, -457.194);
v(-228.2106, -39.5162, -378.5418);
v(-502.1433, -35.9305, 45.3062);
v(-371.132, -51.4684, 45.3062);
v(-375.102, 28.6115, 45.3062);
v(-275.851, 26.221, 324.9584);
v(-375.102, -31.7472, 425.4584);
v(-275.851, -43.6994, 324.9584);
v(6.0217, -19.795, 552.1758);
v(6.0217, -39.5162, 425.4584);
v(6.0217, 40.5637, 425.4584);
v(2.0517, 100.9224, 45.3062);
v(6.0217, -46.6875, 45.3062);
uv(0.0137, 0.4301);
uv(0.2121, 0.2366);
uv(0.1848, 0.1711);
uv(0.0137, 0.4301);
uv(0.0743, 0.4555);
uv(0.2121, 0.2366);
uv(0.9863, 0.4301);
uv(0.7879, 0.2356);
uv(0.9247, 0.4555);
uv(0.9863, 0.4301);
uv(0.8143, 0.1711);
uv(0.7879, 0.2356);
uv(0.9863, 0.4301);
uv(0.9228, 0.6413);
uv(0.9863, 0.6804);
uv(0.9863, 0.4301);
uv(0.9247, 0.4555);
uv(0.9228, 0.6413);
uv(0.0137, 0.4301);
uv(0.0762, 0.6413);
uv(0.0743, 0.4555);
uv(0.0137, 0.4301);
uv(0.0127, 0.6794);
uv(0.0762, 0.6413);
uv(0.6452, 0.1711);
uv(0.7879, 0.2356);
uv(0.8143, 0.1711);
uv(0.6452, 0.1711);
uv(0.6618, 0.2336);
uv(0.7879, 0.2356);
uv(0.3539, 0.1711);
uv(0.2121, 0.2366);
uv(0.3372, 0.2346);
uv(0.3539, 0.1711);
uv(0.1848, 0.1711);
uv(0.2121, 0.2366);
uv(0.3539, 0.1711);
uv(0.437, 0.3294);
uv(0.4888, 0.2962);
uv(0.3539, 0.1711);
uv(0.3372, 0.2346);
uv(0.437, 0.3294);
uv(0.6452, 0.1711);
uv(0.563, 0.3284);
uv(0.6618, 0.2336);
uv(0.6452, 0.1711);
uv(0.5103, 0.2962);
uv(0.563, 0.3284);
uv(0.4995, 0.6305);
uv(0.563, 0.3284);
uv(0.5103, 0.2962);
uv(0.4995, 0.6305);
uv(0.5601, 0.6051);
uv(0.563, 0.3284);
uv(0.4995, 0.6305);
uv(0.437, 0.3294);
uv(0.4389, 0.6061);
uv(0.4995, 0.6305);
uv(0.4888, 0.2962);
uv(0.437, 0.3294);
uv(0.4995, 0.6305);
uv(0.347, 0.7527);
uv(0.3773, 0.8299);
uv(0.4995, 0.6305);
uv(0.4389, 0.6061);
uv(0.347, 0.7527);
uv(0.4995, 0.6305);
uv(0.653, 0.7527);
uv(0.5601, 0.6051);
uv(0.4995, 0.6305);
uv(0.6207, 0.8299);
uv(0.653, 0.7527);
uv(0.824, 0.8299);
uv(0.653, 0.7527);
uv(0.6207, 0.8299);
uv(0.824, 0.8299);
uv(0.8035, 0.7546);
uv(0.653, 0.7527);
uv(0.175, 0.8299);
uv(0.347, 0.7527);
uv(0.1955, 0.7556);
uv(0.175, 0.8299);
uv(0.3773, 0.8299);
uv(0.347, 0.7527);
uv(0.175, 0.8299);
uv(0.0762, 0.6413);
uv(0.0127, 0.6794);
uv(0.175, 0.8299);
uv(0.1955, 0.7556);
uv(0.0762, 0.6413);
uv(0.824, 0.8299);
uv(0.9228, 0.6413);
uv(0.8035, 0.7546);
uv(0.824, 0.8299);
uv(0.9863, 0.6804);
uv(0.9228, 0.6413);
uv(0.2581, 0.5318);
uv(0.347, 0.7527);
uv(0.4389, 0.6061);
uv(0.2581, 0.5318);
uv(0.1955, 0.7556);
uv(0.347, 0.7527);
uv(0.2581, 0.5318);
uv(0.437, 0.3294);
uv(0.3372, 0.2346);
uv(0.2581, 0.5318);
uv(0.4389, 0.6061);
uv(0.437, 0.3294);
uv(0.2581, 0.5318);
uv(0.2121, 0.2366);
uv(0.0743, 0.4555);
uv(0.2581, 0.5318);
uv(0.3372, 0.2346);
uv(0.2121, 0.2366);
uv(0.2581, 0.5318);
uv(0.0762, 0.6413);
uv(0.1955, 0.7556);
uv(0.2581, 0.5318);
uv(0.0743, 0.4555);
uv(0.0762, 0.6413);
uv(0.7429, 0.5308);
uv(0.7879, 0.2356);
uv(0.6618, 0.2336);
uv(0.7429, 0.5308);
uv(0.9247, 0.4555);
uv(0.7879, 0.2356);
uv(0.7429, 0.5308);
uv(0.563, 0.3284);
uv(0.5601, 0.6051);
uv(0.7429, 0.5308);
uv(0.6618, 0.2336);
uv(0.563, 0.3284);
uv(0.7429, 0.5308);
uv(0.653, 0.7527);
uv(0.8035, 0.7546);
uv(0.7429, 0.5308);
uv(0.5601, 0.6051);
uv(0.653, 0.7527);
uv(0.7429, 0.5308);
uv(0.9228, 0.6413);
uv(0.9247, 0.4555);
uv(0.7429, 0.5308);
uv(0.8035, 0.7546);
uv(0.9228, 0.6413);
f(0, 1, 2, 0, 1, 2);
f(0, 3, 1, 3, 4, 5);
f(0, 4, 5, 6, 7, 8);
f(0, 2, 4, 9, 10, 11);
f(0, 6, 7, 12, 13, 14);
f(0, 5, 6, 15, 16, 17);
f(0, 8, 3, 18, 19, 20);
f(0, 7, 8, 21, 22, 23);
f(9, 4, 2, 24, 25, 26);
f(9, 10, 4, 27, 28, 29);
f(9, 1, 11, 30, 31, 32);
f(9, 2, 1, 33, 34, 35);
f(9, 12, 13, 36, 37, 38);
f(9, 11, 12, 39, 40, 41);
f(9, 14, 10, 42, 43, 44);
f(9, 13, 14, 45, 46, 47);
f(15, 14, 13, 48, 49, 50);
f(15, 16, 14, 51, 52, 53);
f(15, 12, 17, 54, 55, 56);
f(15, 13, 12, 57, 58, 59);
f(15, 18, 19, 60, 61, 62);
f(15, 17, 18, 63, 64, 65);
f(15, 20, 16, 66, 67, 68);
f(15, 19, 20, 69, 70, 71);
f(21, 20, 19, 72, 73, 74);
f(21, 22, 20, 75, 76, 77);
f(21, 18, 23, 78, 79, 80);
f(21, 19, 18, 81, 82, 83);
f(21, 8, 7, 84, 85, 86);
f(21, 23, 8, 87, 88, 89);
f(21, 6, 22, 90, 91, 92);
f(21, 7, 6, 93, 94, 95);
f(24, 18, 17, 96, 97, 98);
f(24, 23, 18, 99, 100, 101);
f(24, 12, 11, 102, 103, 104);
f(24, 17, 12, 105, 106, 107);
f(24, 1, 3, 108, 109, 110);
f(24, 11, 1, 111, 112, 113);
f(24, 8, 23, 114, 115, 116);
f(24, 3, 8, 117, 118, 119);
f(25, 4, 10, 120, 121, 122);
f(25, 5, 4, 123, 124, 125);
f(25, 14, 16, 126, 127, 128);
f(25, 10, 14, 129, 130, 131);
f(25, 20, 22, 132, 133, 134);
f(25, 16, 20, 135, 136, 137);
f(25, 6, 5, 138, 139, 140);
f(25, 22, 6, 141, 142, 143);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 159
//CheeseSlice (com.core.models.CheeseSlice)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class CheeseSlice extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function CheeseSlice(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(-1.3548, 6.7219, 98.8222);
v(115.1622, 6.6103, 119.4297);
v(-95.2911, 6.6103, 118.493);
v(105.2267, 6.7219, 98.8222);
v(-108.8396, 6.7219, 98.8222);
v(105.2267, -0.0279, 98.8222);
v(115.1622, -6.6661, 118.493);
v(105.2267, -6.7776, 98.8222);
v(-1.3548, -6.7776, 98.8222);
v(-95.2911, -6.6661, 118.493);
v(-108.8396, -6.7776, 98.8222);
v(-1.3548, 7.1124, -101.6323);
v(-105.2267, 6.4987, -119.4297);
v(102.517, 6.4987, -119.4297);
v(-115.1622, 7.1124, -101.6323);
v(111.5493, 7.1124, -101.6323);
v(111.5493, -0.0279, -101.6323);
v(102.517, -6.5545, -119.4297);
v(111.5493, -7.1123, -101.6323);
v(-1.3548, -7.1123, -101.6323);
v(-105.2267, -6.5545, -119.4297);
v(-115.1622, -7.1123, -101.6323);
v(108.8396, 6.8892, -1.4051);
v(108.8396, -0.0279, -1.4051);
v(108.8396, -6.945, -1.4051);
v(-111.5493, 6.8892, -1.4051);
v(-111.5493, -6.945, -1.4051);
v(-1.3548, 6.8892, -1.4051);
v(-1.3548, -6.945, -1.4051);
uv(0.2493, 0.4614);
uv(0, 0.5083);
uv(0.4516, 0.5005);
uv(0.0205, 0.4663);
uv(0, 0.5083);
uv(0.2493, 0.4614);
uv(0.2493, 0.4614);
uv(0.4516, 0.5005);
uv(0.479, 0.4575);
uv(0.9834, 0.4575);
uv(0.9687, 0.5005);
uv(0.9971, 0.5015);
uv(0.9687, 0.4575);
uv(0.9687, 0.5005);
uv(0.9834, 0.4575);
uv(0.9834, 0.4575);
uv(0.9971, 0.5015);
uv(0.9971, 0.4575);
uv(0.7185, 0.4614);
uv(0.5161, 0.5005);
uv(0.9687, 0.5083);
uv(0.4897, 0.4575);
uv(0.5161, 0.5005);
uv(0.7185, 0.4614);
uv(0.7185, 0.4614);
uv(0.9687, 0.5083);
uv(0.9472, 0.4663);
uv(0.2414, 0.044);
uv(0.4633, 0);
uv(0.0186, 0.0088);
uv(0.4839, 0.0391);
uv(0.4633, 0);
uv(0.2414, 0.044);
uv(0.2414, 0.044);
uv(0.0186, 0.0088);
uv(0, 0.0479);
uv(0.9844, 0.0401);
uv(0.998, 0.001);
uv(0.9707, 0);
uv(0.999, 0.0411);
uv(0.998, 0.001);
uv(0.9844, 0.0401);
uv(0.9844, 0.0401);
uv(0.9707, 0);
uv(0.9687, 0.0401);
uv(0.7263, 0.044);
uv(0.9492, 0.0088);
uv(0.5044, 0);
uv(0.9687, 0.0479);
uv(0.9492, 0.0088);
uv(0.7263, 0.044);
uv(0.7263, 0.044);
uv(0.5044, 0);
uv(0.4839, 0.0391);
uv(0.998, 0.2493);
uv(0.9844, 0.0401);
uv(0.9834, 0.2493);
uv(0.998, 0.2493);
uv(0.999, 0.0411);
uv(0.9844, 0.0401);
uv(0.9834, 0.2493);
uv(0.9844, 0.0401);
uv(0.9687, 0.2493);
uv(0.9687, 0.2493);
uv(0.9844, 0.0401);
uv(0.9687, 0.0401);
uv(0.9971, 0.4575);
uv(0.9834, 0.2493);
uv(0.9834, 0.4575);
uv(0.9971, 0.4575);
uv(0.998, 0.2493);
uv(0.9834, 0.2493);
uv(0.9834, 0.4575);
uv(0.9834, 0.2493);
uv(0.9687, 0.4575);
uv(0.9687, 0.4575);
uv(0.9834, 0.2493);
uv(0.9687, 0.2493);
uv(0.998, 0.7517);
uv(0.9687, 0.9609);
uv(1, 0.9609);
uv(0.998, 0.7517);
uv(0.9687, 0.7517);
uv(0.9687, 0.9609);
uv(0.9971, 0.5425);
uv(0.9687, 0.7517);
uv(0.998, 0.7517);
uv(0.9971, 0.5425);
uv(0.9687, 0.5425);
uv(0.9687, 0.7517);
uv(0.2493, 0.4614);
uv(0.479, 0.4575);
uv(0.2454, 0.2522);
uv(0.2454, 0.2522);
uv(0.479, 0.4575);
uv(0.4809, 0.2483);
uv(0.2454, 0.2522);
uv(0.4809, 0.2483);
uv(0.2414, 0.044);
uv(0.2414, 0.044);
uv(0.4809, 0.2483);
uv(0.4839, 0.0391);
uv(0.0205, 0.4663);
uv(0.2454, 0.2522);
uv(0.0098, 0.2571);
uv(0.0205, 0.4663);
uv(0.2493, 0.4614);
uv(0.2454, 0.2522);
uv(0.0098, 0.2571);
uv(0.2414, 0.044);
uv(0, 0.0479);
uv(0.0098, 0.2571);
uv(0.2454, 0.2522);
uv(0.2414, 0.044);
uv(0.958, 0.2571);
uv(0.7263, 0.044);
uv(0.7224, 0.2522);
uv(0.958, 0.2571);
uv(0.9687, 0.0479);
uv(0.7263, 0.044);
uv(0.7224, 0.2522);
uv(0.7263, 0.044);
uv(0.4868, 0.2483);
uv(0.4868, 0.2483);
uv(0.7263, 0.044);
uv(0.4839, 0.0391);
uv(0.9472, 0.4663);
uv(0.7224, 0.2522);
uv(0.7185, 0.4614);
uv(0.9472, 0.4663);
uv(0.958, 0.2571);
uv(0.7224, 0.2522);
uv(0.7185, 0.4614);
uv(0.7224, 0.2522);
uv(0.4897, 0.4575);
uv(0.4897, 0.4575);
uv(0.7224, 0.2522);
uv(0.4868, 0.2483);
uv(0.5152, 0.5083);
uv(0.5415, 0.9433);
uv(0.5435, 0.5083);
uv(0.5152, 0.5083);
uv(0.5142, 0.9433);
uv(0.5415, 0.9433);
uv(0.9687, 0.9609);
uv(0.998, 1);
uv(1, 0.9609);
uv(0.9687, 0.9609);
uv(0.9707, 1);
uv(0.998, 1);
uv(0.4858, 0.5083);
uv(0.4839, 0.9501);
uv(0.5142, 0.5083);
uv(0.5142, 0.5083);
uv(0.4839, 0.9501);
uv(0.5122, 0.9501);
uv(0.9971, 0.5425);
uv(0.9971, 0.5015);
uv(0.9687, 0.5425);
uv(0.9687, 0.5425);
uv(0.9971, 0.5015);
uv(0.9687, 0.5015);
f(0, 1, 2, 0, 1, 2);
f(3, 1, 0, 3, 4, 5);
f(0, 2, 4, 6, 7, 8);
f(5, 6, 1, 9, 10, 11);
f(7, 6, 5, 12, 13, 14);
f(5, 1, 3, 15, 16, 17);
f(8, 9, 6, 18, 19, 20);
f(10, 9, 8, 21, 22, 23);
f(8, 6, 7, 24, 25, 26);
f(11, 12, 13, 27, 28, 29);
f(14, 12, 11, 30, 31, 32);
f(11, 13, 15, 33, 34, 35);
f(16, 13, 17, 36, 37, 38);
f(15, 13, 16, 39, 40, 41);
f(16, 17, 18, 42, 43, 44);
f(19, 17, 20, 45, 46, 47);
f(18, 17, 19, 48, 49, 50);
f(19, 20, 21, 51, 52, 53);
f(22, 16, 23, 54, 55, 56);
f(22, 15, 16, 57, 58, 59);
f(23, 16, 24, 60, 61, 62);
f(24, 16, 18, 63, 64, 65);
f(3, 23, 5, 66, 67, 68);
f(3, 22, 23, 69, 70, 71);
f(5, 23, 7, 72, 73, 74);
f(7, 23, 24, 75, 76, 77);
f(25, 21, 14, 78, 79, 80);
f(25, 26, 21, 81, 82, 83);
f(4, 26, 25, 84, 85, 86);
f(4, 10, 26, 87, 88, 89);
f(0, 4, 27, 90, 91, 92);
f(27, 4, 25, 93, 94, 95);
f(27, 25, 11, 96, 97, 98);
f(11, 25, 14, 99, 100, 101);
f(3, 27, 22, 102, 103, 104);
f(3, 0, 27, 105, 106, 107);
f(22, 11, 15, 108, 109, 110);
f(22, 27, 11, 111, 112, 113);
f(24, 19, 28, 114, 115, 116);
f(24, 18, 19, 117, 118, 119);
f(28, 19, 26, 120, 121, 122);
f(26, 19, 21, 123, 124, 125);
f(7, 28, 8, 126, 127, 128);
f(7, 24, 28, 129, 130, 131);
f(8, 28, 10, 132, 133, 134);
f(10, 28, 26, 135, 136, 137);
f(20, 13, 12, 138, 139, 140);
f(20, 17, 13, 141, 142, 143);
f(21, 12, 14, 144, 145, 146);
f(21, 20, 12, 147, 148, 149);
f(6, 9, 1, 150, 151, 152);
f(1, 9, 2, 153, 154, 155);
f(4, 2, 10, 156, 157, 158);
f(10, 2, 9, 159, 160, 161);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 160
//HamSlice (com.core.models.HamSlice)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class HamSlice extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function HamSlice(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(510.2167, -3.6595, 45.3062);
v(240.254, 39.9661, -378.5418);
v(323.6248, -9.6356, -457.194);
v(383.1754, 52.5159, 45.3062);
v(240.254, -24.5759, -378.5418);
v(387.1455, -27.5639, 45.3062);
v(287.8945, -25.7711, 324.9584);
v(387.1455, -7.8428, 425.4584);
v(283.9244, 44.1494, 324.9584);
v(6.0217, -19.795, -562.0636);
v(6.0217, -36.5281, -457.194);
v(6.0217, 36.978, -457.194);
v(-228.2106, 25.6234, -378.5418);
v(-311.5814, -29.9544, -457.194);
v(-228.2106, -39.5162, -378.5418);
v(-502.1433, -35.9305, 45.3062);
v(-371.132, -51.4684, 45.3062);
v(-375.102, 28.6115, 45.3062);
v(-275.851, 26.221, 324.9584);
v(-375.102, -31.7472, 425.4584);
v(-275.851, -43.6994, 324.9584);
v(6.0217, -19.795, 552.1758);
v(6.0217, -39.5162, 425.4584);
v(6.0217, 40.5637, 425.4584);
v(2.0517, 100.9224, 45.3062);
v(6.0217, -46.6875, 45.3062);
uv(0.0137, 0.4301);
uv(0.2121, 0.2366);
uv(0.1848, 0.1711);
uv(0.0137, 0.4301);
uv(0.0743, 0.4555);
uv(0.2121, 0.2366);
uv(0.9863, 0.4301);
uv(0.7879, 0.2356);
uv(0.9247, 0.4555);
uv(0.9863, 0.4301);
uv(0.8143, 0.1711);
uv(0.7879, 0.2356);
uv(0.9863, 0.4301);
uv(0.9228, 0.6413);
uv(0.9863, 0.6804);
uv(0.9863, 0.4301);
uv(0.9247, 0.4555);
uv(0.9228, 0.6413);
uv(0.0137, 0.4301);
uv(0.0762, 0.6413);
uv(0.0743, 0.4555);
uv(0.0137, 0.4301);
uv(0.0127, 0.6794);
uv(0.0762, 0.6413);
uv(0.6452, 0.1711);
uv(0.7879, 0.2356);
uv(0.8143, 0.1711);
uv(0.6452, 0.1711);
uv(0.6618, 0.2336);
uv(0.7879, 0.2356);
uv(0.3539, 0.1711);
uv(0.2121, 0.2366);
uv(0.3372, 0.2346);
uv(0.3539, 0.1711);
uv(0.1848, 0.1711);
uv(0.2121, 0.2366);
uv(0.3539, 0.1711);
uv(0.437, 0.3294);
uv(0.4888, 0.2962);
uv(0.3539, 0.1711);
uv(0.3372, 0.2346);
uv(0.437, 0.3294);
uv(0.6452, 0.1711);
uv(0.563, 0.3284);
uv(0.6618, 0.2336);
uv(0.6452, 0.1711);
uv(0.5103, 0.2962);
uv(0.563, 0.3284);
uv(0.4995, 0.6305);
uv(0.563, 0.3284);
uv(0.5103, 0.2962);
uv(0.4995, 0.6305);
uv(0.5601, 0.6051);
uv(0.563, 0.3284);
uv(0.4995, 0.6305);
uv(0.437, 0.3294);
uv(0.4389, 0.6061);
uv(0.4995, 0.6305);
uv(0.4888, 0.2962);
uv(0.437, 0.3294);
uv(0.4995, 0.6305);
uv(0.347, 0.7527);
uv(0.3773, 0.8299);
uv(0.4995, 0.6305);
uv(0.4389, 0.6061);
uv(0.347, 0.7527);
uv(0.4995, 0.6305);
uv(0.653, 0.7527);
uv(0.5601, 0.6051);
uv(0.4995, 0.6305);
uv(0.6207, 0.8299);
uv(0.653, 0.7527);
uv(0.824, 0.8299);
uv(0.653, 0.7527);
uv(0.6207, 0.8299);
uv(0.824, 0.8299);
uv(0.8035, 0.7546);
uv(0.653, 0.7527);
uv(0.175, 0.8299);
uv(0.347, 0.7527);
uv(0.1955, 0.7556);
uv(0.175, 0.8299);
uv(0.3773, 0.8299);
uv(0.347, 0.7527);
uv(0.175, 0.8299);
uv(0.0762, 0.6413);
uv(0.0127, 0.6794);
uv(0.175, 0.8299);
uv(0.1955, 0.7556);
uv(0.0762, 0.6413);
uv(0.824, 0.8299);
uv(0.9228, 0.6413);
uv(0.8035, 0.7546);
uv(0.824, 0.8299);
uv(0.9863, 0.6804);
uv(0.9228, 0.6413);
uv(0.2581, 0.5318);
uv(0.347, 0.7527);
uv(0.4389, 0.6061);
uv(0.2581, 0.5318);
uv(0.1955, 0.7556);
uv(0.347, 0.7527);
uv(0.2581, 0.5318);
uv(0.437, 0.3294);
uv(0.3372, 0.2346);
uv(0.2581, 0.5318);
uv(0.4389, 0.6061);
uv(0.437, 0.3294);
uv(0.2581, 0.5318);
uv(0.2121, 0.2366);
uv(0.0743, 0.4555);
uv(0.2581, 0.5318);
uv(0.3372, 0.2346);
uv(0.2121, 0.2366);
uv(0.2581, 0.5318);
uv(0.0762, 0.6413);
uv(0.1955, 0.7556);
uv(0.2581, 0.5318);
uv(0.0743, 0.4555);
uv(0.0762, 0.6413);
uv(0.7429, 0.5308);
uv(0.7879, 0.2356);
uv(0.6618, 0.2336);
uv(0.7429, 0.5308);
uv(0.9247, 0.4555);
uv(0.7879, 0.2356);
uv(0.7429, 0.5308);
uv(0.563, 0.3284);
uv(0.5601, 0.6051);
uv(0.7429, 0.5308);
uv(0.6618, 0.2336);
uv(0.563, 0.3284);
uv(0.7429, 0.5308);
uv(0.653, 0.7527);
uv(0.8035, 0.7546);
uv(0.7429, 0.5308);
uv(0.5601, 0.6051);
uv(0.653, 0.7527);
uv(0.7429, 0.5308);
uv(0.9228, 0.6413);
uv(0.9247, 0.4555);
uv(0.7429, 0.5308);
uv(0.8035, 0.7546);
uv(0.9228, 0.6413);
f(0, 1, 2, 0, 1, 2);
f(0, 3, 1, 3, 4, 5);
f(0, 4, 5, 6, 7, 8);
f(0, 2, 4, 9, 10, 11);
f(0, 6, 7, 12, 13, 14);
f(0, 5, 6, 15, 16, 17);
f(0, 8, 3, 18, 19, 20);
f(0, 7, 8, 21, 22, 23);
f(9, 4, 2, 24, 25, 26);
f(9, 10, 4, 27, 28, 29);
f(9, 1, 11, 30, 31, 32);
f(9, 2, 1, 33, 34, 35);
f(9, 12, 13, 36, 37, 38);
f(9, 11, 12, 39, 40, 41);
f(9, 14, 10, 42, 43, 44);
f(9, 13, 14, 45, 46, 47);
f(15, 14, 13, 48, 49, 50);
f(15, 16, 14, 51, 52, 53);
f(15, 12, 17, 54, 55, 56);
f(15, 13, 12, 57, 58, 59);
f(15, 18, 19, 60, 61, 62);
f(15, 17, 18, 63, 64, 65);
f(15, 20, 16, 66, 67, 68);
f(15, 19, 20, 69, 70, 71);
f(21, 20, 19, 72, 73, 74);
f(21, 22, 20, 75, 76, 77);
f(21, 18, 23, 78, 79, 80);
f(21, 19, 18, 81, 82, 83);
f(21, 8, 7, 84, 85, 86);
f(21, 23, 8, 87, 88, 89);
f(21, 6, 22, 90, 91, 92);
f(21, 7, 6, 93, 94, 95);
f(24, 18, 17, 96, 97, 98);
f(24, 23, 18, 99, 100, 101);
f(24, 12, 11, 102, 103, 104);
f(24, 17, 12, 105, 106, 107);
f(24, 1, 3, 108, 109, 110);
f(24, 11, 1, 111, 112, 113);
f(24, 8, 23, 114, 115, 116);
f(24, 3, 8, 117, 118, 119);
f(25, 4, 10, 120, 121, 122);
f(25, 5, 4, 123, 124, 125);
f(25, 14, 16, 126, 127, 128);
f(25, 10, 14, 129, 130, 131);
f(25, 20, 22, 132, 133, 134);
f(25, 16, 20, 135, 136, 137);
f(25, 6, 5, 138, 139, 140);
f(25, 22, 6, 141, 142, 143);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 161
//Pickle (com.core.models.Pickle)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class Pickle extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function Pickle(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(325.9643, -29.6895, 44.8153);
v(377.8967, -53.4338, -55.9124);
v(377.8967, -53.4338, 55.0587);
v(325.9643, -29.6895, -45.6689);
v(349.3339, -52.2224, 99.4472);
v(349.3339, -52.2224, -100.3008);
v(302.5947, -21.9362, 80.6675);
v(302.5947, -21.9362, -81.5211);
v(-284.2416, -51.4955, 55.9124);
v(-284.2416, -51.4955, -56.766);
v(-216.7294, -13.6983, 44.8153);
v(-216.7294, -13.6983, -45.6689);
v(-167.3936, 8.1077, 80.6675);
v(-167.3936, 8.35, -81.5211);
v(-219.3261, -32.3546, -100.3008);
v(-219.3261, -32.3546, 99.4472);
v(196.1332, -24.1168, -108.8371);
v(196.1332, -24.1168, 108.8371);
v(177.9569, 2.2928, 88.3501);
v(177.9569, 2.2928, -89.2037);
uv(0.8524, 0.9179);
uv(0.6207, 0.999);
uv(0.8759, 1);
uv(0.8524, 0.9179);
uv(0.6452, 0.9169);
uv(0.6207, 0.999);
uv(0.478, 0.045);
uv(0.1202, 0.001);
uv(0.0186, 0.0459);
uv(0.478, 0.045);
uv(0.3763, 0);
uv(0.1202, 0.001);
uv(0.9355, 0.8827);
uv(0.8524, 0.9179);
uv(0.9785, 0.955);
uv(0.9785, 0.955);
uv(0.8524, 0.9179);
uv(0.8759, 1);
uv(0.5191, 0.9541);
uv(0.6452, 0.9169);
uv(0.5621, 0.8817);
uv(0.5191, 0.9541);
uv(0.6207, 0.999);
uv(0.6452, 0.9169);
uv(0.5621, 0.8817);
uv(0.8524, 0.9179);
uv(0.9355, 0.8827);
uv(0.5621, 0.8817);
uv(0.6452, 0.9169);
uv(0.8524, 0.9179);
uv(0.8817, 0.001);
uv(0.6237, 0);
uv(0.8573, 0.0978);
uv(0.8573, 0.0978);
uv(0.6237, 0);
uv(0.6471, 0.0978);
uv(0.9384, 0.1701);
uv(0.6471, 0.0978);
uv(0.565, 0.1701);
uv(0.9384, 0.1701);
uv(0.8573, 0.0978);
uv(0.6471, 0.0978);
uv(0.565, 0.1701);
uv(0.6471, 0.0978);
uv(0.522, 0.0938);
uv(0.522, 0.0938);
uv(0.6471, 0.0978);
uv(0.6237, 0);
uv(0.9814, 0.0948);
uv(0.8573, 0.0978);
uv(0.9384, 0.1701);
uv(0.9814, 0.0948);
uv(0.8817, 0.001);
uv(0.8573, 0.0978);
uv(0.0225, 0.9062);
uv(0.3812, 1);
uv(0.4819, 0.9052);
uv(0.0225, 0.9062);
uv(0.1241, 1);
uv(0.3812, 1);
uv(0, 0.2776);
uv(0.4819, 0.9052);
uv(0.4995, 0.2766);
uv(0, 0.2776);
uv(0.0225, 0.9062);
uv(0.4819, 0.9052);
uv(1, 0.7224);
uv(0.9384, 0.1701);
uv(0.9531, 0.694);
uv(1, 0.7224);
uv(0.9814, 0.0948);
uv(0.9384, 0.1701);
uv(0.5464, 0.6931);
uv(0.565, 0.1701);
uv(0.4995, 0.7214);
uv(0.4995, 0.7214);
uv(0.565, 0.1701);
uv(0.522, 0.0938);
uv(0.9531, 0.694);
uv(0.565, 0.1701);
uv(0.5464, 0.6931);
uv(0.9531, 0.694);
uv(0.9384, 0.1701);
uv(0.565, 0.1701);
uv(0.4995, 0.7214);
uv(0.5621, 0.8817);
uv(0.5464, 0.6931);
uv(0.4995, 0.7214);
uv(0.5191, 0.9541);
uv(0.5621, 0.8817);
uv(0.9785, 0.955);
uv(1, 0.7224);
uv(0.9355, 0.8827);
uv(0.9355, 0.8827);
uv(1, 0.7224);
uv(0.9531, 0.694);
uv(0.9355, 0.8827);
uv(0.9531, 0.694);
uv(0.5621, 0.8817);
uv(0.5621, 0.8817);
uv(0.9531, 0.694);
uv(0.5464, 0.6931);
uv(0.478, 0.045);
uv(0, 0.2776);
uv(0.4995, 0.2766);
uv(0.478, 0.045);
uv(0.0186, 0.0459);
uv(0, 0.2776);
f(0, 1, 2, 0, 1, 2);
f(0, 3, 1, 3, 4, 5);
f(4, 1, 5, 6, 7, 8);
f(4, 2, 1, 9, 10, 11);
f(6, 0, 4, 12, 13, 14);
f(4, 0, 2, 15, 16, 17);
f(5, 3, 7, 18, 19, 20);
f(5, 1, 3, 21, 22, 23);
f(7, 0, 6, 24, 25, 26);
f(7, 3, 0, 27, 28, 29);
f(8, 9, 10, 30, 31, 32);
f(10, 9, 11, 33, 34, 35);
f(12, 11, 13, 36, 37, 38);
f(12, 10, 11, 39, 40, 41);
f(13, 11, 14, 42, 43, 44);
f(14, 11, 9, 45, 46, 47);
f(15, 10, 12, 48, 49, 50);
f(15, 8, 10, 51, 52, 53);
f(14, 8, 15, 54, 55, 56);
f(14, 9, 8, 57, 58, 59);
f(16, 15, 17, 60, 61, 62);
f(16, 14, 15, 63, 64, 65);
f(17, 12, 18, 66, 67, 68);
f(17, 15, 12, 69, 70, 71);
f(19, 13, 16, 72, 73, 74);
f(16, 13, 14, 75, 76, 77);
f(18, 13, 19, 78, 79, 80);
f(18, 12, 13, 81, 82, 83);
f(16, 7, 19, 84, 85, 86);
f(16, 5, 7, 87, 88, 89);
f(4, 17, 6, 90, 91, 92);
f(6, 17, 18, 93, 94, 95);
f(6, 18, 7, 96, 97, 98);
f(7, 18, 19, 99, 100, 101);
f(4, 16, 17, 102, 103, 104);
f(4, 5, 16, 105, 106, 107);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 162
//SandWich (com.core.models.SandWich)
package com.core.models {
import flash.events.*;
import flash.display.*;
import gs.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.materials.*;
import com.core.*;
import gs.easing.*;
public class SandWich extends Sprite {
private var _sn:Number;// = 0
private var _tomatoMat:BitmapMaterial;
private var _sandwichContainer:ObjectContainer3D;
private var _cheeseMat:BitmapMaterial;
private var _sandInit:Boolean;// = false
private var _requestCheck:Array;
private var _autoBuildTm:Timer;
private var _topSlice:Mesh;
private var _baconStrip1:Mesh;
private var _baconStrip2:Mesh;
private var _pickleMat:BitmapMaterial;
private var _fixinsAr:Array;
private var _breadMat:BitmapMaterial;
private var _tomato:Mesh;
private var _currentTopModel:Object3D;
private var _activeFixins:Array;
private var _hamMat:BitmapMaterial;
private var _buildStage:Number;// = 0
private var _autoBuildAr:Array;
private var _lettuceStrip:Mesh;
private var _ModelAr:Array;
private var _baconMat:BitmapMaterial;
private var _lettuceMat:BitmapMaterial;
private var _fixinsInc:Number;// = 0
private var _bottomSlice:Mesh;
private var _sandInitUsed:Boolean;// = false
private var _currentRequest:String;
private var _autoInc:Number;// = 0
private var _requestCheckFixins:Array;
private var _currentActiveFixin:Object3D;
private var _sardineMat:BitmapMaterial;
public static const SANDWICHREADY_EVENT:String = " sandwich ready";
public static const REQUESTSCORE_EVENT:String = " request score";
public static const SANDWICHCLEARED_EVENT:String = " sandwich cleared";
public static const SANDWICHSCORE_EVENT:String = " sandwich score";
public static const REQUESTMESSAGE_EVENT:String = " request message";
public static const ITEMWRONG_EVENT:String = " item wrong";
public static const SANDWICHINITBUILD_EVENT:String = " sandwich init ready";
public static var readyHack:Boolean = false;
public function SandWich(){
_sandwichContainer = new ObjectContainer3D();
_ModelAr = new Array();
_fixinsAr = new Array();
_activeFixins = new Array();
_autoBuildAr = new Array("bottomBun", "lettuce", "tomato", "bacon1", "bacon2", "topbun");
_requestCheck = new Array("bread", "lettuce", "tomato", "bacon", "hash", "bread");
_requestCheckFixins = new Array("ham", "sardine", "cheese", "pickle");
super();
_fixinsAr = [{name:"ham", score:1}, {name:"sardine", score:2}, {name:"cheese", score:3}, {name:"pickle", score:4}];
var _local1:Sprite = new Main.breadSkin();
var _local2:BitmapData = new BitmapData(_local1.width, _local1.height, false, 0);
_local2.draw(_local1);
_breadMat = new BitmapMaterial(_local2);
var _local3:Sprite = new Main.tomatoSkin();
var _local4:BitmapData = new BitmapData(_local3.width, _local3.height, false, 0);
_local4.draw(_local3);
_tomatoMat = new BitmapMaterial(_local4);
var _local5:Sprite = new Main.baconSkin();
var _local6:BitmapData = new BitmapData(_local5.width, _local5.height, false, 0);
_local6.draw(_local5);
_baconMat = new BitmapMaterial(_local6);
var _local7:Sprite = new Main.lettuceSkin();
var _local8:BitmapData = new BitmapData(_local7.width, _local7.height, true, 0);
_local8.draw(_local7);
_lettuceMat = new BitmapMaterial(_local8, {alpha:3});
_sandwichContainer.rotationX = (_sandwichContainer.rotationX - 5);
addTopBun();
addTomato();
addBacon1();
addBacon2();
addLettuce();
addBottomBun();
_sandwichContainer.y = -120;
var _local9:Timer = new Timer(400, 1);
_local9.addEventListener(TimerEvent.TIMER_COMPLETE, dis);
_local9.start();
}
private function clearSand():void{
readyHack = false;
if (_sandInit){
dispatchEvent(new Event(SANDWICHSCORE_EVENT, true));
resetSandwich();
_autoInc = 0;
} else {
dispatchEvent(new Event(SANDWICHINITBUILD_EVENT, true));
};
_sandInit = true;
}
public function itemRequest(_arg1:String):void{
trace(("sandwich hit " + _autoInc));
if (_arg1 == _requestCheck[_autoInc]){
addItem(_autoBuildAr[_autoInc]);
_autoInc++;
} else {
dispatchEvent(new Event(ITEMWRONG_EVENT, true));
Main.soundDictionary["bubble"].play();
};
}
public function control_topBun():void{
if (_sandInit){
_currentRequest = "bread";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_topSlice.visible = true;
TweenLite.to(_topSlice, 0.5, {y:(_currentTopModel.y + 50), ease:Elastic.easeOut, easeParams:[0.07, 1.5], onComplete:clearSand});
_currentTopModel = _topSlice;
}
public function addTomato():void{
_tomato = new Tomato({material:_tomatoMat, name:"tomato", x:0, y:0, z:0, precision:12});
_tomato.scale(0.6);
_tomato.extra = {itemUsed:false};
_tomato.rotationX = (_tomato.rotationX + 180);
_tomato.screenZOffset = 2000;
_tomato;
scaleY = 1.5;
_tomato.visible = false;
_sandwichContainer.addChild(_tomato);
_ModelAr.push(_tomato);
}
public function get container():ObjectContainer3D{
return (_sandwichContainer);
}
public function addFixin(_arg1:String):void{
var _local2:Sprite;
var _local3:BitmapData;
var _local4:Mesh;
var _local5:Sprite;
var _local6:BitmapData;
var _local7:Mesh;
var _local8:Sprite;
var _local9:BitmapData;
var _local10:Mesh;
var _local11:Sprite;
var _local12:BitmapData;
var _local13:Mesh;
switch (_arg1){
case "ham":
_local2 = new Main.hamSkin();
_local3 = new BitmapData(_local2.width, _local2.height, false, 0);
_local3.draw(_local2);
_hamMat = new BitmapMaterial(_local3);
_local4 = new HamSlice({material:_hamMat, name:"hame", precision:18, x:-60, bothsides:false, alpha:true, y:800, z:0, pushback:true});
_local4.screenZOffset = 2800;
_currentActiveFixin = _local4;
_activeFixins.push(_local4);
_local4.scale(0.38);
_sandwichContainer.addChild(_local4);
_ModelAr.push(_local4);
TweenLite.to(_local4, 0.5, {y:(_currentTopModel.y + 30), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _local4;
if (_sandInit){
_currentRequest = "ham";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
break;
case "sardine":
_local5 = new Main.sardineSkin();
_local6 = new BitmapData(_local5.width, _local5.height, false, 0);
_local6.draw(_local5);
_sardineMat = new BitmapMaterial(_local6);
_local7 = new Sardine({material:_sardineMat, name:"sardine", precision:18, x:-60, bothsides:false, alpha:true, y:800, z:0, pushback:true});
_local7.screenZOffset = 2800;
_currentActiveFixin = _local7;
_activeFixins.push(_local7);
_local7.scale(0.4);
_sandwichContainer.addChild(_local7);
_ModelAr.push(_local7);
TweenLite.to(_local7, 0.5, {y:(_currentTopModel.y + 30), z:_currentTopModel.z, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _local7;
if (_sandInit){
_currentRequest = "sardine";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
break;
case "cheese":
_local8 = new Main.cheeseSkin();
_local9 = new BitmapData(_local8.width, _local8.height, false, 0);
_local9.draw(_local8);
_cheeseMat = new BitmapMaterial(_local9);
_local10 = new CheeseSlice({material:_cheeseMat, name:"cheese", precision:5, x:0, bothsides:false, alpha:false, y:800, z:10, pushback:true});
_local10.screenZOffset = 2800;
_currentActiveFixin = _local10;
_activeFixins.push(_local10);
_local10.scale(0.9);
_sandwichContainer.addChild(_local10);
_ModelAr.push(_local10);
TweenLite.to(_local10, 0.5, {y:(_currentTopModel.y + 30), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _local10;
if (_sandInit){
_currentRequest = "cheese";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
break;
case "pickle":
_local11 = new Main.pickleSkin();
_local12 = new BitmapData(_local11.width, _local11.height, false, 0);
_local12.draw(_local11);
_pickleMat = new BitmapMaterial(_local12);
_local13 = new Pickle({material:_pickleMat, name:"pickle", precision:18, x:-60, bothsides:false, alpha:true, y:800, z:0, pushback:true});
_local13.screenZOffset = 2800;
_currentActiveFixin = _local13;
_activeFixins.push(_local13);
_local13.scale(0.8);
_sandwichContainer.addChild(_local13);
_ModelAr.push(_local13);
TweenLite.to(_local13, 0.5, {y:(_currentTopModel.y + 40), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _local13;
if (_sandInit){
_currentRequest = "pickle";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
break;
};
}
private function dis(_arg1:Event):void{
_arg1.target.addEventListener(TimerEvent.TIMER_COMPLETE, dis);
dispatchEvent(new Event(SANDWICHREADY_EVENT, true));
addEventListener(Event.ENTER_FRAME, drv);
}
public function autoBuild():void{
_autoBuildTm = new Timer(600, 7);
_autoBuildTm.addEventListener(TimerEvent.TIMER, autoCreate);
_autoBuildTm.start();
}
private function setupSandWich():void{
_bottomSlice.visible = false;
_topSlice.visible = false;
_baconStrip1.visible = false;
_baconStrip2.visible = false;
_tomato.visible = false;
_lettuceStrip.visible = false;
TweenLite.to(_sandwichContainer, 0.2, {y:-200, onComplete:initReady});
TweenLite.to(_topSlice, 1, {y:800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
TweenLite.to(_tomato, 1, {y:800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
TweenLite.to(_lettuceStrip, 1, {y:800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
TweenLite.to(_baconStrip1, 1, {y:800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
TweenLite.to(_baconStrip2, 1, {y:800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
TweenLite.to(_bottomSlice, 1, {y:-800, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_sn = 0;
if (_currentActiveFixin){
_sandwichContainer.removeChild(_currentActiveFixin);
};
_currentRequest = "build";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
}
public function get message():String{
return (_currentRequest);
}
private function autoCreate(_arg1:Event):void{
addItem(_autoBuildAr[_autoInc]);
_autoInc++;
}
private function drv(_arg1:Event):void{
_sn = (_sn + 0.2);
_sandwichContainer.y = (_sandwichContainer.y + (2 * Math.sin((_sn / 5))));
_sandwichContainer.rotationY = (_sandwichContainer.rotationY + 1.5);
}
public function resetSandwich():void{
if (_sandInitUsed){
Main.soundDictionary["goodsandwich"].play();
};
_sandInitUsed = true;
_buildStage = 0;
_autoInc = 0;
_fixinsInc = 0;
TweenLite.to(_sandwichContainer, 0.2, {y:300, onComplete:setupSandWich});
}
public function control_tomato():void{
if (_sandInit){
_currentRequest = "tomato";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_tomato.visible = true;
TweenLite.to(_tomato, 0.5, {y:(_currentTopModel.y + 70), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _tomato;
}
public function addBottomBun():void{
_bottomSlice = new BreadSlice({material:_breadMat, name:"bottomslice", x:0, y:0, z:0, pushback:true});
_bottomSlice.scale(0.4);
_bottomSlice.centerPivot();
_bottomSlice.position = new Number3D(0, 0, 0);
_bottomSlice.extra = {itemUsed:false};
_bottomSlice.visible = false;
_bottomSlice.screenZOffset = 3000;
_sandwichContainer.addChild(_bottomSlice);
_ModelAr.push(_bottomSlice);
}
public function get fixins():Array{
return (_fixinsAr);
}
public function fixinRequest(_arg1:Number):void{
var _local2:Number = 0;
while (_local2 < _fixinsAr.length) {
if (_fixinsAr[_local2].score == _arg1){
trace(("FIXIN" + _fixinsAr[_local2].name));
Main.soundDictionary["fixin"].play();
GameManager.PointsMultiplier = (GameManager.PointsMultiplier + 1);
addFixin(_fixinsAr[_local2].name);
};
_local2++;
};
}
public function addBacon1():void{
_baconStrip1 = new BaconStrip({material:_baconMat, name:"bacon1", precision:18, x:-50, y:800, z:0});
_baconStrip1.scale(0.3);
_tomato.extra = {itemUsed:false};
_baconStrip1.rotationY = (_baconStrip1.rotationY + 90);
_baconStrip1.screenZOffset = 1900;
_baconStrip1.visible = false;
_sandwichContainer.addChild(_baconStrip1);
_ModelAr.push(_baconStrip1);
}
public function addBacon2():void{
var _local1:BitmapMaterial = new BitmapMaterial(new Main._waffleTexture(null, null));
_baconStrip2 = new Burger({material:_local1, name:"hash", precision:18, x:0, y:0, z:0});
_baconStrip2.scale(0.3);
_baconStrip2.screenZOffset = 1600;
_baconStrip2.visible = false;
_baconStrip2.extra = {itemUsed:false};
_sandwichContainer.addChild(_baconStrip2);
_ModelAr.push(_baconStrip2);
}
private function addItem(_arg1:String):void{
Main.soundDictionary["correct"].play();
switch (_arg1){
case "bottomBun":
control_bottomBun();
break;
case "lettuce":
control_lettuce();
break;
case "tomato":
control_tomato();
break;
case "bacon1":
control_bacon1();
break;
case "bacon2":
control_bacon2();
break;
case "topbun":
trace("ad top bun");
control_topBun();
break;
};
}
public function control_bacon1():void{
if (_sandInit){
_currentRequest = "bacon";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_baconStrip1.visible = true;
TweenLite.to(_baconStrip1, 0.5, {y:_currentTopModel.y, ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _baconStrip1;
}
public function control_bacon2():void{
if (_sandInit){
_currentRequest = "bacon";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_baconStrip2.visible = true;
TweenLite.to(_baconStrip2, 0.5, {y:(_currentTopModel.y + 20), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _baconStrip2;
}
public function addLettuce():void{
_lettuceStrip = new Burger({material:_lettuceMat, name:"lettuce", precision:18, x:50, bothsides:false, y:0, z:0});
_lettuceStrip.screenZOffset = 2500;
_lettuceStrip.scale(0.4);
_lettuceStrip.visible = false;
_lettuceStrip.extra = {itemUsed:false};
_sandwichContainer.addChild(_lettuceStrip);
_ModelAr.push(_lettuceStrip);
}
public function kill():void{
removeEventListener(Event.ENTER_FRAME, drv);
while (_sandwichContainer.children.length > 0) {
_sandwichContainer.removeChild(_sandwichContainer.children[0]);
};
}
public function control_lettuce():void{
if (_sandInit){
_currentRequest = "lettuce";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_lettuceStrip.visible = true;
TweenLite.to(_lettuceStrip, 0.5, {y:(_currentTopModel.y + 38), ease:Elastic.easeOut, easeParams:[0.07, 1.5]});
_currentTopModel = _lettuceStrip;
}
private function initReady():void{
if (!_sandInit){
};
readyHack = true;
}
public function addTopBun():void{
_topSlice = new BreadSlice({material:_breadMat, name:"topslice", x:0, y:0, z:0, precision:18});
_topSlice.extra = {itemUsed:false};
_topSlice.scale(0.4);
_topSlice.centerPivot();
_topSlice.visible = false;
_topSlice.position = new Number3D(0, 0, 0);
_sandwichContainer.addChild(_topSlice);
_ModelAr.push(_topSlice);
}
private function checkFixins():void{
dispatchEvent(new Event(REQUESTSCORE_EVENT, true));
}
public function control_bottomBun():void{
if (_sandInit){
_currentRequest = "bread";
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
};
_bottomSlice.visible = true;
TweenLite.to(_bottomSlice, 0.5, {y:-20, z:0, ease:Elastic.easeOut, easeParams:[0.07, 1.5], onComplete:checkFixins});
_currentTopModel = _bottomSlice;
}
}
}//package com.core.models
Section 163
//Sardine (com.core.models.Sardine)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class Sardine extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function Sardine(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(-320.5973, -38.3007, -25.0986);
v(-320.5973, -39.0605, 24.3774);
v(-345.4791, -45.8985, -27.0777);
v(-345.4791, -46.6583, 25.3669);
v(-206.8522, -23.105, -100.3023);
v(-206.8522, -26.1441, 99.581);
v(-192.634, -2.5908, 93.6439);
v(-192.634, 0.0685, -94.3651);
v(560.9279, -86.1672, -60.7214);
v(560.9279, -87.6868, 58.0211);
v(539.6006, -68.3122, -56.7633);
v(539.6006, -70.2117, 55.0526);
v(326.3284, -44.7589, 32.2936);
v(326.3284, -43.6192, -34.0043);
v(315.6648, -35.6414, 30.3145);
v(315.6648, -34.8816, -32.0253);
v(169.9288, 6.5267, -94.3651);
v(169.9288, 3.4875, 94.6334);
v(169.9288, -16.2669, -100.3023);
v(169.9288, -19.6859, 99.581);
v(9.9746, 5.387, 119.3714);
v(9.9746, 9.1859, -119.1032);
v(6.4201, -20.8256, -126.0298);
v(6.4201, -24.6245, 126.2981);
uv(0.9277, 0.2258);
uv(0.9218, 0.2805);
uv(0.9365, 0.2268);
uv(0.9365, 0.2268);
uv(0.9218, 0.2805);
uv(0.9306, 0.2815);
uv(0.653, 0.2053);
uv(0.48, 0.0596);
uv(0.39, 0.2033);
uv(0.653, 0.2053);
uv(0.5494, 0.0606);
uv(0.48, 0.0596);
uv(0.8866, 0.2385);
uv(0.9326, 0.1017);
uv(0.8563, 0.2278);
uv(0.8866, 0.2385);
uv(0.9404, 0.1036);
uv(0.9326, 0.1017);
uv(0.6872, 0.825);
uv(0.7351, 0.9648);
uv(0.7195, 0.8221);
uv(0.7195, 0.8221);
uv(0.7351, 0.9648);
uv(0.7439, 0.9638);
uv(0.3255, 0.1662);
uv(0.1535, 0.0244);
uv(0.0626, 0.1632);
uv(0.3255, 0.1662);
uv(0.2229, 0.0254);
uv(0.1535, 0.0244);
uv(0.9482, 0.2278);
uv(0.9609, 0.1046);
uv(0.9286, 0.2258);
uv(0.9286, 0.2258);
uv(0.9609, 0.1046);
uv(0.9413, 0.1026);
uv(0.5044, 0.7566);
uv(0.6344, 0.9413);
uv(0.5914, 0.7576);
uv(0.5044, 0.7566);
uv(0.478, 0.9404);
uv(0.6344, 0.9413);
uv(0.8113, 0.7889);
uv(0.828, 0.9756);
uv(0.8221, 0.7889);
uv(0.8221, 0.7889);
uv(0.828, 0.9756);
uv(0.8475, 0.9746);
uv(0.7732, 0.2698);
uv(0.8182, 0.089);
uv(0.7634, 0.2678);
uv(0.7732, 0.2698);
uv(0.8377, 0.0938);
uv(0.8182, 0.089);
uv(0.175, 0.7253);
uv(0.305, 0.911);
uv(0.262, 0.7263);
uv(0.175, 0.7253);
uv(0.1486, 0.9091);
uv(0.305, 0.911);
uv(0.0802, 0.566);
uv(0.262, 0.7263);
uv(0.3431, 0.5689);
uv(0.0802, 0.566);
uv(0.175, 0.7253);
uv(0.262, 0.7263);
uv(0.7302, 0.4321);
uv(0.7634, 0.2678);
uv(0.6979, 0.4233);
uv(0.7302, 0.4321);
uv(0.7732, 0.2698);
uv(0.7634, 0.2678);
uv(0.781, 0.6227);
uv(0.8113, 0.7889);
uv(0.8143, 0.6217);
uv(0.8143, 0.6217);
uv(0.8113, 0.7889);
uv(0.8221, 0.7889);
uv(0.4086, 0.5943);
uv(0.5914, 0.7576);
uv(0.6716, 0.5963);
uv(0.4086, 0.5943);
uv(0.5044, 0.7566);
uv(0.5914, 0.7576);
uv(0.3695, 0.3939);
uv(0.0626, 0.1632);
uv(0.0381, 0.39);
uv(0.3695, 0.3939);
uv(0.3255, 0.1662);
uv(0.0626, 0.1632);
uv(0.6852, 0.6002);
uv(0.6872, 0.825);
uv(0.7273, 0.6031);
uv(0.7273, 0.6031);
uv(0.6872, 0.825);
uv(0.7195, 0.8221);
uv(0.8475, 0.4536);
uv(0.8563, 0.2278);
uv(0.8065, 0.4477);
uv(0.8475, 0.4536);
uv(0.8866, 0.2385);
uv(0.8563, 0.2278);
uv(0.697, 0.4272);
uv(0.39, 0.2033);
uv(0.3666, 0.4242);
uv(0.697, 0.4272);
uv(0.653, 0.2053);
uv(0.39, 0.2033);
uv(0.8065, 0.4477);
uv(0.8143, 0.6217);
uv(0.8475, 0.4536);
uv(0.8065, 0.4477);
uv(0.781, 0.6227);
uv(0.8143, 0.6217);
uv(0.6979, 0.4233);
uv(0.6852, 0.6002);
uv(0.7302, 0.4321);
uv(0.7302, 0.4321);
uv(0.6852, 0.6002);
uv(0.7273, 0.6031);
uv(0.6716, 0.5963);
uv(0.697, 0.4272);
uv(0.4086, 0.5943);
uv(0.4086, 0.5943);
uv(0.697, 0.4272);
uv(0.3666, 0.4242);
uv(0.0802, 0.566);
uv(0.3695, 0.3939);
uv(0.0381, 0.39);
uv(0.0802, 0.566);
uv(0.3431, 0.5689);
uv(0.3695, 0.3939);
f(0, 1, 2, 0, 1, 2);
f(2, 1, 3, 3, 4, 5);
f(4, 3, 5, 6, 7, 8);
f(4, 2, 3, 9, 10, 11);
f(5, 1, 6, 12, 13, 14);
f(5, 3, 1, 15, 16, 17);
f(7, 0, 4, 18, 19, 20);
f(4, 0, 2, 21, 22, 23);
f(6, 0, 7, 24, 25, 26);
f(6, 1, 0, 27, 28, 29);
f(8, 9, 10, 30, 31, 32);
f(10, 9, 11, 33, 34, 35);
f(12, 8, 13, 36, 37, 38);
f(12, 9, 8, 39, 40, 41);
f(14, 11, 12, 42, 43, 44);
f(12, 11, 9, 45, 46, 47);
f(13, 10, 15, 48, 49, 50);
f(13, 8, 10, 51, 52, 53);
f(15, 11, 14, 54, 55, 56);
f(15, 10, 11, 57, 58, 59);
f(16, 14, 17, 60, 61, 62);
f(16, 15, 14, 63, 64, 65);
f(18, 15, 16, 66, 67, 68);
f(18, 13, 15, 69, 70, 71);
f(17, 14, 19, 72, 73, 74);
f(19, 14, 12, 75, 76, 77);
f(19, 13, 18, 78, 79, 80);
f(19, 12, 13, 81, 82, 83);
f(20, 7, 21, 84, 85, 86);
f(20, 6, 7, 87, 88, 89);
f(21, 7, 22, 90, 91, 92);
f(22, 7, 4, 93, 94, 95);
f(23, 6, 20, 96, 97, 98);
f(23, 5, 6, 99, 100, 101);
f(22, 5, 23, 102, 103, 104);
f(22, 4, 5, 105, 106, 107);
f(20, 19, 23, 108, 109, 110);
f(20, 17, 19, 111, 112, 113);
f(16, 21, 18, 114, 115, 116);
f(18, 21, 22, 117, 118, 119);
f(18, 22, 19, 120, 121, 122);
f(19, 22, 23, 123, 124, 125);
f(16, 20, 21, 126, 127, 128);
f(16, 17, 20, 129, 130, 131);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 164
//Tomato (com.core.models.Tomato)
package com.core.models {
import away3d.core.utils.*;
import away3d.core.base.*;
public class Tomato extends Mesh {
private var uvarr:Array;
private var scaling:Number;
private var varr:Array;
public function Tomato(_arg1:Object=null){
varr = [];
uvarr = [];
super(_arg1);
_arg1 = Init.parse(_arg1);
scaling = _arg1.getNumber("scaling", 1);
build();
type = ".as";
}
private function uv(_arg1:Number, _arg2:Number):void{
uvarr.push(new UV(_arg1, _arg2));
}
private function build():void{
v(227.2136, 28.4402, -0.891);
v(143.4564, 48.8712, -143.4564);
v(171.9695, 28.4402, -171.9695);
v(191.5722, 53.9789, -0.891);
v(127.4178, 15.5365, -127.4178);
v(171.9695, 11.2352, -0.891);
v(127.4178, 15.5365, 125.6358);
v(171.9695, 28.4402, 170.1874);
v(143.4564, 48.8712, 141.6744);
v(0.891, 28.4402, -227.2136);
v(0.891, 11.2352, -171.9695);
v(0.891, 53.9789, -191.5722);
v(-141.6744, 48.8712, -143.4564);
v(-170.1874, 28.4402, -171.9695);
v(-125.6358, 15.5365, -127.4178);
v(-227.2136, 28.4402, -0.891);
v(-170.1874, 11.2352, -0.891);
v(-189.7902, 53.9789, -0.891);
v(-141.6744, 48.8712, 141.6744);
v(-170.1874, 28.4402, 170.1874);
v(-125.6358, 15.5365, 125.6358);
v(0.891, 28.4402, 227.2136);
v(0.891, 11.2352, 170.1874);
v(0.891, 53.9789, 189.7902);
v(0.891, 60.4308, -0.891);
v(0.891, -8.1204, -0.891);
uv(0.6667, 0.001);
uv(0.87, 0.1584);
uv(1, 0.1251);
uv(0.6667, 0.001);
uv(0.6246, 0.0626);
uv(0.87, 0.1584);
uv(0.999, 0.6667);
uv(0.6843, 0.565);
uv(0.8749, 0.6882);
uv(0.999, 0.6667);
uv(0.7498, 0.5005);
uv(0.6843, 0.565);
uv(0.999, 0.6667);
uv(0.87, 0.8426);
uv(1, 0.8759);
uv(0.999, 0.6667);
uv(0.8749, 0.6882);
uv(0.87, 0.8426);
uv(0.6667, 0.001);
uv(0.3148, 0.0655);
uv(0.6246, 0.0626);
uv(0.6667, 0.001);
uv(0.2493, 0);
uv(0.3148, 0.0655);
uv(0.3324, 0.5005);
uv(0.6843, 0.565);
uv(0.7498, 0.5005);
uv(0.3324, 0.5005);
uv(0.3744, 0.563);
uv(0.6843, 0.565);
uv(0.999, 0.3343);
uv(0.87, 0.1584);
uv(0.8749, 0.3128);
uv(0.999, 0.3343);
uv(1, 0.1251);
uv(0.87, 0.1584);
uv(0.999, 0.3343);
uv(0.6843, 0.436);
uv(0.7498, 0.5005);
uv(0.999, 0.3343);
uv(0.8749, 0.3128);
uv(0.6843, 0.436);
uv(0.3324, 0.5005);
uv(0.129, 0.6579);
uv(0.3744, 0.563);
uv(0.3324, 0.5005);
uv(0, 0.6256);
uv(0.129, 0.6579);
uv(0, 0.8338);
uv(0.129, 0.6579);
uv(0, 0.6256);
uv(0, 0.8338);
uv(0.1241, 0.8133);
uv(0.129, 0.6579);
uv(0.3324, 0.5005);
uv(0.6843, 0.436);
uv(0.3744, 0.4379);
uv(0.3324, 0.5005);
uv(0.7498, 0.5005);
uv(0.6843, 0.436);
uv(0.3324, 0.5005);
uv(0.129, 0.3431);
uv(0, 0.3754);
uv(0.3324, 0.5005);
uv(0.3744, 0.4379);
uv(0.129, 0.3431);
uv(0, 0.8338);
uv(0.3148, 0.9355);
uv(0.1241, 0.8133);
uv(0, 0.8338);
uv(0.2493, 1);
uv(0.3148, 0.9355);
uv(0.6667, 1);
uv(0.3148, 0.9355);
uv(0.2493, 1);
uv(0.6667, 1);
uv(0.6246, 0.9384);
uv(0.3148, 0.9355);
uv(0, 0.1672);
uv(0.129, 0.3431);
uv(0.1241, 0.1877);
uv(0, 0.1672);
uv(0, 0.3754);
uv(0.129, 0.3431);
uv(0, 0.1672);
uv(0.3148, 0.0655);
uv(0.2493, 0);
uv(0, 0.1672);
uv(0.1241, 0.1877);
uv(0.3148, 0.0655);
uv(0.6667, 1);
uv(0.87, 0.8426);
uv(0.6246, 0.9384);
uv(0.6667, 1);
uv(1, 0.8759);
uv(0.87, 0.8426);
uv(0.4995, 0.2502);
uv(0.129, 0.3431);
uv(0.3744, 0.4379);
uv(0.4995, 0.2502);
uv(0.1241, 0.1877);
uv(0.129, 0.3431);
uv(0.4995, 0.2502);
uv(0.6843, 0.436);
uv(0.8749, 0.3128);
uv(0.4995, 0.2502);
uv(0.3744, 0.4379);
uv(0.6843, 0.436);
uv(0.4995, 0.2502);
uv(0.87, 0.1584);
uv(0.6246, 0.0626);
uv(0.4995, 0.2502);
uv(0.8749, 0.3128);
uv(0.87, 0.1584);
uv(0.4995, 0.2502);
uv(0.3148, 0.0655);
uv(0.1241, 0.1877);
uv(0.4995, 0.2502);
uv(0.6246, 0.0626);
uv(0.3148, 0.0655);
uv(0.4995, 0.7507);
uv(0.6843, 0.565);
uv(0.3744, 0.563);
uv(0.4995, 0.7507);
uv(0.8749, 0.6882);
uv(0.6843, 0.565);
uv(0.4995, 0.7507);
uv(0.129, 0.6579);
uv(0.1241, 0.8133);
uv(0.4995, 0.7507);
uv(0.3744, 0.563);
uv(0.129, 0.6579);
uv(0.4995, 0.7507);
uv(0.3148, 0.9355);
uv(0.6246, 0.9384);
uv(0.4995, 0.7507);
uv(0.1241, 0.8133);
uv(0.3148, 0.9355);
uv(0.4995, 0.7507);
uv(0.87, 0.8426);
uv(0.8749, 0.6882);
uv(0.4995, 0.7507);
uv(0.6246, 0.9384);
uv(0.87, 0.8426);
f(0, 1, 2, 0, 1, 2);
f(0, 3, 1, 3, 4, 5);
f(0, 4, 5, 6, 7, 8);
f(0, 2, 4, 9, 10, 11);
f(0, 6, 7, 12, 13, 14);
f(0, 5, 6, 15, 16, 17);
f(0, 8, 3, 18, 19, 20);
f(0, 7, 8, 21, 22, 23);
f(9, 4, 2, 24, 25, 26);
f(9, 10, 4, 27, 28, 29);
f(9, 1, 11, 30, 31, 32);
f(9, 2, 1, 33, 34, 35);
f(9, 12, 13, 36, 37, 38);
f(9, 11, 12, 39, 40, 41);
f(9, 14, 10, 42, 43, 44);
f(9, 13, 14, 45, 46, 47);
f(15, 14, 13, 48, 49, 50);
f(15, 16, 14, 51, 52, 53);
f(15, 12, 17, 54, 55, 56);
f(15, 13, 12, 57, 58, 59);
f(15, 18, 19, 60, 61, 62);
f(15, 17, 18, 63, 64, 65);
f(15, 20, 16, 66, 67, 68);
f(15, 19, 20, 69, 70, 71);
f(21, 20, 19, 72, 73, 74);
f(21, 22, 20, 75, 76, 77);
f(21, 18, 23, 78, 79, 80);
f(21, 19, 18, 81, 82, 83);
f(21, 8, 7, 84, 85, 86);
f(21, 23, 8, 87, 88, 89);
f(21, 6, 22, 90, 91, 92);
f(21, 7, 6, 93, 94, 95);
f(24, 18, 17, 96, 97, 98);
f(24, 23, 18, 99, 100, 101);
f(24, 12, 11, 102, 103, 104);
f(24, 17, 12, 105, 106, 107);
f(24, 1, 3, 108, 109, 110);
f(24, 11, 1, 111, 112, 113);
f(24, 8, 23, 114, 115, 116);
f(24, 3, 8, 117, 118, 119);
f(25, 4, 10, 120, 121, 122);
f(25, 5, 4, 123, 124, 125);
f(25, 14, 16, 126, 127, 128);
f(25, 10, 14, 129, 130, 131);
f(25, 20, 22, 132, 133, 134);
f(25, 16, 20, 135, 136, 137);
f(25, 6, 5, 138, 139, 140);
f(25, 22, 6, 141, 142, 143);
}
private function f(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
addFace(new Face(varr[_arg1], varr[_arg2], varr[_arg3], null, uvarr[_arg4], uvarr[_arg5], uvarr[_arg6]));
}
private function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
varr.push(new Vertex((_arg1 * scaling), (_arg2 * scaling), (_arg3 * scaling)));
}
}
}//package com.core.models
Section 165
//CuttingBoardView (com.core.CuttingBoardView)
package com.core {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.events.*;
import away3d.core.base.*;
import away3d.materials.*;
import com.utilities.*;
import com.core.models.*;
public class CuttingBoardView extends Sprite {
private var _billBoardContainer:ObjectContainer3D;
private var _container:ObjectContainer3D;
private var _hudTimeSlot:MovieClip;
private var _view:View3D;
private var _awayEnviro:AwayEnvironment;
private var _backgroundSprite:Sprite;
private var _location:Object;
private var _initialized:Boolean;// = false
private var _scroller:ScrollinBackground;
private var _itemName:String;
private var _liveBillBoardsAr:Array;
private var _cuttingBoard:Object3D;
private var _testColor:Number;// = 0
private var _CamSn:Number;// = 0
public static const SCENEREADY_EVENT:String = " scene ready";
public static const HUDREADY_EVENT:String = " hud ready";
public static const ITEMHIT_EVENT:String = " itemhit";
public function CuttingBoardView(_arg1:Object){
_location = new Object();
_backgroundSprite = new Sprite();
_container = new ObjectContainer3D();
_billBoardContainer = new ObjectContainer3D();
_liveBillBoardsAr = new Array();
super();
_hudTimeSlot = Main.hud1;
_hudTimeSlot.x = 20;
_hudTimeSlot.y = 19;
_location = _arg1;
_testColor = _arg1.color;
_awayEnviro = new AwayEnvironment(_arg1);
_awayEnviro.addEventListener(AwayEnvironment.SCENEREADY_EVENT, addEnviro);
}
private function itemHit(_arg1:Event):void{
_itemName = _arg1.target.myName;
dispatchEvent(new Event(ITEMHIT_EVENT, true));
}
private function check(_arg1:MouseEvent3D):void{
trace("check");
}
public function init():void{
testSphere();
addEventListener(Event.ENTER_FRAME, enviroDrive);
dispatchEvent(new Event(HUDREADY_EVENT, true));
}
private function addEnviro(_arg1:Event):void{
trace(("ad enviro" + _arg1.target.AwayView));
_view = _arg1.target.AwayView;
_container.x = (-(_view.width) / 2);
_container.y = (-(_view.height) / 2);
_view.x = _location.x;
_view.y = _location.y;
_view.scene.addChild(_container);
dispatchEvent(new Event(SCENEREADY_EVENT, true));
}
public function resetBillboardVisibility():void{
var _local1:Number = 0;
while (_local1 < _liveBillBoardsAr.length) {
_liveBillBoardsAr[_local1].visible = true;
_local1++;
};
}
public function get view():Object{
return (_view);
}
public function addSandwichSets(_arg1:Number):void{
var _local2:Number = 0;
while (_local2 < _arg1) {
trace("sand");
_liveBillBoardsAr.push(new AnimatedBillBoardSprite(new Main.minibacon(), {x:0, name:"bacon", z:int((Math.random() * 200)), y:(-100 + int((Math.random() * 250))), rotationY:int((Math.random() * 200))}));
_container.addChild(_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)]);
_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)].addEventListener(AnimatedBillBoardSprite.BILLBOARDHIT_EVENT, itemHit);
_liveBillBoardsAr.push(new AnimatedBillBoardSprite(new Main.minihash(), {x:0, name:"hash", z:int((Math.random() * 200)), y:(-100 + int((Math.random() * 250))), rotationY:int((Math.random() * 200))}));
_container.addChild(_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)]);
_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)].addEventListener(AnimatedBillBoardSprite.BILLBOARDHIT_EVENT, itemHit);
_liveBillBoardsAr.push(new AnimatedBillBoardSprite(new Main.minilettuce(), {x:0, name:"lettuce", z:int((Math.random() * 200)), y:(-100 + int((Math.random() * 250))), rotationY:int((Math.random() * 200))}));
_container.addChild(_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)]);
_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)].addEventListener(AnimatedBillBoardSprite.BILLBOARDHIT_EVENT, itemHit);
_liveBillBoardsAr.push(new AnimatedBillBoardSprite(new Main.minitomato(), {x:0, name:"tomato", z:int((Math.random() * 200)), y:(-100 + int((Math.random() * 250))), rotationY:int((Math.random() * 200))}));
_container.addChild(_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)]);
_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)].addEventListener(AnimatedBillBoardSprite.BILLBOARDHIT_EVENT, itemHit);
_liveBillBoardsAr.push(new AnimatedBillBoardSprite(new Main.minibead(), {x:0, name:"bread", z:int((Math.random() * 200)), y:(-100 + int((Math.random() * 250))), rotationY:int((Math.random() * 200))}));
_container.addChild(_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)]);
_liveBillBoardsAr[(_liveBillBoardsAr.length - 1)].addEventListener(AnimatedBillBoardSprite.BILLBOARDHIT_EVENT, itemHit);
_local2++;
};
_container.ownCanvas = false;
}
public function get hud():MovieClip{
return (_hudTimeSlot);
}
private function enviroDrive(_arg1:Event):void{
_CamSn = (_CamSn + 0.1);
_container.rotationY = (_container.rotationY + 0.3);
_awayEnviro.AwayView.render();
_awayEnviro.AwayView.camera.z = (_awayEnviro.AwayView.camera.z - (3 * Math.sin((_CamSn / 5))));
}
public function get itemName():String{
return (_itemName);
}
private function testSphere():void{
var _local1:BitmapData;
var _local2:BitmapMaterial;
var _local3:MovieClip;
if (!_initialized){
_local1 = new BitmapData(Main.cuttingSkin.width, Main.cuttingSkin.height, false, 0);
_local1.draw(Main.cuttingSkin);
_local2 = new BitmapMaterial(_local1);
_local2.precision = 5;
_scroller = new ScrollinBackground();
_local3 = new Main.whiteTiles();
_scroller.setupScroll(_awayEnviro.background, _local3, "down", 12);
_awayEnviro.hud.addChild(_hudTimeSlot);
_initialized = true;
};
_container.x = 0;
_container.y = 0;
_container.z = 0;
_billBoardContainer.x = 0;
_billBoardContainer.y = 0;
_billBoardContainer.z = 0;
addSandwichSets(15);
}
}
}//package com.core
Section 166
//GameManager (com.core.GameManager)
package com.core {
import flash.events.*;
import flash.display.*;
import com.utilities.*;
public class GameManager extends Sprite {
private var _pointScore:Number;// = 0
private var _messaging:Object;
private var _pointHoldScore:Number;// = 0
private var _clock:Clock;
private var _scoring:Scoring_counter;
private var _timeSprite:Sprite;
private var _holdScore:Number;// = 0
private var _pointScoreSprite:Sprite;
private var _upgradeSprite_1:Sprite;
private var _upgradeSprite_2:Sprite;
private var _upgradeSprite_3:Sprite;
private var _upgradeSprite_4:Sprite;
private var _scoreSprite:Sprite;
private var _locksAr:Array;
private var _holderClip:MovieClip;
private var _sandwichManager:SandwichManager;
private var _upgrade_1:Scoring_counter;
private var _upgrade_2:Scoring_counter;
private var _upgrade_3:Scoring_counter;
private var _upgrade_4:Scoring_counter;
private var _windowType:String;
private var _pointScorObj:Scoring_counter;
private var _cuttingBoardManager:CuttingBoardView;
private var _hud2:MovieClip;
public static const GAMEEND_EVENT:String = "game end";
public static const GAMELEVELEND_EVENT:String = "game level end";
public static const SANDWICHINITBUILD_EVENT:String = " sandwich init ready";
public static var PointsMultiplier:Number = 1;
public static var MaxPoints:Number = 5;
public static var gameActive:Boolean = false;
public function GameManager(_arg1:MovieClip){
_scoreSprite = new Sprite();
_pointScoreSprite = new Sprite();
_upgradeSprite_1 = new Sprite();
_upgradeSprite_2 = new Sprite();
_upgradeSprite_3 = new Sprite();
_upgradeSprite_4 = new Sprite();
_timeSprite = new Sprite();
_locksAr = new Array();
super();
_holderClip = _arg1;
_cuttingBoardManager = new CuttingBoardView({x:0, y:0, width:(640 / 2), height:480, color:0});
_cuttingBoardManager.addEventListener(CuttingBoardView.SCENEREADY_EVENT, addCuttingBoardView);
_cuttingBoardManager.addEventListener(CuttingBoardView.HUDREADY_EVENT, setupTime);
_cuttingBoardManager.addEventListener(CuttingBoardView.ITEMHIT_EVENT, itemHit);
_sandwichManager = new SandwichManager({x:(640 / 2), y:0, width:(640 / 2), height:480, color:0});
_sandwichManager.addEventListener(SandwichManager.SCENEREADY_EVENT, addSandwichView);
_sandwichManager.addEventListener(SandwichManager.HUDREADY_EVENT, setupScore);
_sandwichManager.addEventListener(SandwichManager.SANDWICHINITBUILD_EVENT, sandInitBuildReady);
_sandwichManager.addEventListener(SandwichManager.SANDWICHSCORE_EVENT, sandwichScore);
_sandwichManager.addEventListener(SandwichManager.REQUESTSCORE_EVENT, requestScore);
_sandwichManager.addEventListener(SandwichManager.REQUESTMESSAGE_EVENT, setSign);
_sandwichManager.addEventListener(SandwichManager.ITEMWRONG_EVENT, wrongchoice);
Main.soundDictionary["soundtrack"].play(0, 8000);
}
private function itemHit(_arg1:Event):void{
manageHud2Locks(_scoring.currentScore);
_sandwichManager.itemHitRequest(_arg1.target.itemName);
}
private function endLevel(_arg1:Event=null):void{
if (_scoring.currentScore == MaxPoints){
_windowType = "win";
} else {
_windowType = "level";
};
gameActive = false;
_holdScore = _scoring.currentScore;
_pointHoldScore = _pointScorObj.currentScore;
_scoring.rst();
_sandwichManager.resetSandWich();
_cuttingBoardManager.resetBillboardVisibility();
dispatchEvent(new Event(GAMELEVELEND_EVENT, true));
}
private function wrongchoice(_arg1:Event):void{
var _local2:Effect_Floater = new Effect_Floater(_messaging, (_hud2.parent as Sprite), {x:120, y:_hud2.parent.mouseY}, "9", 0.1);
}
public function get holdScore():Number{
return (_holdScore);
}
private function setupScore(_arg1:Event):void{
_arg1.target.hud.mouseEnabled = false;
_arg1.target.hud.mouseChildren = false;
Main.miniInstruct.x = 135;
Main.miniInstruct.y = 370;
_arg1.target.hud.parent.addChild(Main.miniInstruct);
var _local2:BitMapper = new BitMapper();
var _local3:Array = _local2.buildDataObject("upgrades", 1, 14, new Main.numbas());
_arg1.target.removeEventListener(SandwichManager.HUDREADY_EVENT, setupScore);
_upgrade_1 = new Scoring_counter("00", _local3, _upgradeSprite_1);
_upgradeSprite_1.x = 39;
_upgradeSprite_1.y = 18;
_locksAr.push(_arg1.target.hud.lock1);
_arg1.target.hud.addChild(_upgradeSprite_1);
_upgrade_1.addPoints(_sandwichManager.fixins[0].score);
_upgrade_2 = new Scoring_counter("00", _local3, _upgradeSprite_2);
_upgradeSprite_2.x = 175;
_upgradeSprite_2.y = 18;
_locksAr.push(_arg1.target.hud.lock2);
_arg1.target.hud.addChild(_upgradeSprite_2);
_upgrade_2.addPoints(_sandwichManager.fixins[1].score);
_upgrade_3 = new Scoring_counter("00", _local3, _upgradeSprite_3);
_upgradeSprite_3.x = 39;
_upgradeSprite_3.y = 51;
_locksAr.push(_arg1.target.hud.lock3);
_arg1.target.hud.addChild(_upgradeSprite_3);
_upgrade_3.addPoints(_sandwichManager.fixins[2].score);
_upgrade_4 = new Scoring_counter("00", _local3, _upgradeSprite_4);
_upgradeSprite_4.x = 175;
_upgradeSprite_4.y = 51;
_locksAr.push(_arg1.target.hud.lock4);
_arg1.target.hud.addChild(_upgradeSprite_4);
_upgrade_4.addPoints(_sandwichManager.fixins[3].score);
setupSignage();
resetLocks();
}
private function sandwichScore(_arg1:Event):void{
Main.soundDictionary["sndwichComplete"].play();
_scoring.addPoints(1);
checkForFinal();
}
private function resetLocks():void{
var _local1:Number = 0;
while (_local1 < _locksAr.length) {
_locksAr[_local1].gotoAndStop(1);
_local1++;
};
}
public function addCuttingBoardView(_arg1:Event):void{
_holderClip.addChild(_arg1.target.view);
}
private function sandInitBuildReady(_arg1:Event):void{
Main.soundDictionary["go"].play();
dispatchEvent(new Event(SANDWICHINITBUILD_EVENT, true));
}
public function setSign(_arg1:Event):void{
var _local2:Effect_Floater;
switch (_arg1.target.message){
case "bread":
_pointScorObj.addPoints((123 * PointsMultiplier));
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "0", 0.1);
break;
case "lettuce":
_pointScorObj.addPoints((166 * PointsMultiplier));
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "1", 0.1);
break;
case "tomato":
_pointScorObj.addPoints((211 * PointsMultiplier));
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "2", 0.1);
break;
case "bacon":
_pointScorObj.addPoints((315 * PointsMultiplier));
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "3", 0.1);
break;
case "build":
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "8", 0.1);
break;
case "cheese":
_pointScorObj.addPoints(54);
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "4", 0.1);
break;
case "pickle":
_pointScorObj.addPoints(110);
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "7", 0.1);
break;
case "ham":
_pointScorObj.addPoints(600);
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "5", 0.1);
break;
case "sardine":
_pointScorObj.addPoints(110);
trace("message floater called");
_local2 = new Effect_Floater(_messaging, _arg1.target.hud.parent, {x:100, y:350}, "6", 0.1);
break;
};
}
public function addSandwichView(_arg1:Event):void{
_holderClip.addChild(_arg1.target.view);
}
private function requestScore(_arg1:Event):void{
_sandwichManager.sendScore(_scoring.currentScore);
}
public function get timeScore():Number{
var _local1:Number = (_clock.minutes * 1000);
var _local2:Number = (_clock.seconds * 500);
trace(("**********TIME" + Number((_local1 + _local2))));
return (Number((_local1 + _local2)));
}
public function startLevel():void{
resetLocks();
PointsMultiplier = 1;
_holdScore = 0;
_pointScorObj.rst();
_pointHoldScore = 0;
_clock.startClock("00:50:00");
gameActive = true;
_sandwichManager.resetSandWich();
}
public function get windowType():String{
return (_windowType);
}
private function checkForFinal():void{
trace(("CHECKING FOR FINAL" + _scoring.currentScore));
if (_scoring.currentScore == MaxPoints){
_clock.pause(true);
endLevel();
};
}
public function initViewsContent():void{
_cuttingBoardManager.init();
_sandwichManager.init();
}
public function get pointScore():Number{
return (_pointHoldScore);
}
public function get pointHoldScore():Number{
return (_pointHoldScore);
}
private function setupSignage():void{
var _local1:BitMapper = new BitMapper();
_messaging = _local1.buildDataObject("messaging", 1, 10, new Main.messages());
}
private function trck(_arg1:Event):void{
Main.soundDictionary["soundtrack"].play(0, 6);
}
private function manageHud2Locks(_arg1:Number):void{
var _local2:Number = 0;
while (_local2 < _sandwichManager.fixins.length) {
if (_arg1 == _sandwichManager.fixins[_local2].score){
_locksAr[_local2].gotoAndStop(2);
};
_local2++;
};
}
private function setupTime(_arg1:Event):void{
_hud2 = _arg1.target.hud;
var _local2:BitMapper = new BitMapper();
var _local3:Array = _local2.buildDataObject("scoring", 1, 14, new Main.numbas());
_arg1.target.hud.addChild(_timeSprite);
_clock = new Clock("00:00:00", _local3, _timeSprite, {x:0, y:27});
_clock.addEventListener(Clock.LEVELEND_EVENT, endLevel);
trace("setup score");
var _local4:BitMapper = new BitMapper();
var _local5:Array = _local4.buildDataObject("scoring", 1, 14, new Main.numbas());
_arg1.target.hud.addChild(_scoreSprite);
_arg1.target.hud.addChild(_pointScoreSprite);
_scoreSprite.x = 230;
_scoreSprite.y = (_scoreSprite.y + 30);
_pointScoreSprite.x = 150;
_scoring = new Scoring_counter("00", _local5, _scoreSprite);
_pointScorObj = new Scoring_counter("00000000", _local5, _pointScoreSprite);
}
}
}//package com.core
Section 167
//SandwichManager (com.core.SandwichManager)
package com.core {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import away3d.primitives.*;
import com.utilities.*;
import com.core.models.*;
public class SandwichManager extends Sprite {
private var _container:ObjectContainer3D;
private var _awayEnviro:AwayEnvironment;
private var _view:View3D;
private var _location:Object;
private var _initialized:Boolean;// = false
private var _hudScoreSlot:MovieClip;
private var _scroller:ScrollinBackground;
private var _testSphere:Sphere;
private var _CamSn:Number;// = 0
private var _currentMessage:String;
private var _testColor:Number;// = 0
private var _mainSandwich:SandWich;
private var _backgroundSprite:Sprite;
private var _sandwichAr:Array;
public static const SANDWICHINITBUILD_EVENT:String = " sandwich init ready";
public static const HUDREADY_EVENT:String = " hud ready";
public static const SANDWICHSCORE_EVENT:String = " sandwich score";
public static const REQUESTMESSAGE_EVENT:String = " request message";
public static const ITEMWRONG_EVENT:String = " item wrong";
public static const SCENEREADY_EVENT:String = " scene ready";
public static const REQUESTSCORE_EVENT:String = " request score";
public function SandwichManager(_arg1:Object){
_location = new Object();
_backgroundSprite = new Sprite();
_container = new ObjectContainer3D();
_sandwichAr = new Array();
super();
_hudScoreSlot = Main.hud2;
_hudScoreSlot.x = 3;
_hudScoreSlot.y = 19;
_location = _arg1;
_testColor = _arg1.color;
_awayEnviro = new AwayEnvironment(_arg1);
_awayEnviro.addEventListener(AwayEnvironment.SCENEREADY_EVENT, addEnviro);
}
public function get fixins():Array{
return (_mainSandwich.fixins);
}
public function get message():String{
return (_currentMessage);
}
private function requestScore(_arg1:Event):void{
dispatchEvent(new Event(REQUESTSCORE_EVENT, true));
}
private function initSandReady(_arg1:Event):void{
dispatchEvent(new Event(SANDWICHINITBUILD_EVENT, true));
}
public function init():void{
testSphere();
addEventListener(Event.ENTER_FRAME, enviroDrive);
dispatchEvent(new Event(HUDREADY_EVENT, true));
dispatchEvent(new Event(SCENEREADY_EVENT, true));
}
public function resetSandWich():void{
_mainSandwich.resetSandwich();
}
public function sendScore(_arg1:Number):void{
_mainSandwich.fixinRequest(_arg1);
}
private function addSandWich(_arg1:Event):void{
_container.addChild(_arg1.target.container);
}
private function addEnviro(_arg1:Event):void{
trace(("ad enviro" + _arg1.target.AwayView));
_view = _arg1.target.AwayView;
_container.x = 0;
_container.y = 0;
_view.x = _location.x;
_view.y = _location.y;
_view.scene.addChild(_container);
}
public function get view():View3D{
return (_view);
}
private function buildSandWich():void{
_mainSandwich = new SandWich();
_mainSandwich.addEventListener(SandWich.SANDWICHREADY_EVENT, addSandWich);
_mainSandwich.addEventListener(SandWich.SANDWICHINITBUILD_EVENT, initSandReady);
_mainSandwich.addEventListener(SandWich.SANDWICHSCORE_EVENT, sandwichScore);
_mainSandwich.addEventListener(SandWich.REQUESTSCORE_EVENT, requestScore);
_mainSandwich.addEventListener(SandWich.REQUESTMESSAGE_EVENT, requestMessage);
_mainSandwich.addEventListener(SandWich.ITEMWRONG_EVENT, wrongChoice);
}
private function wrongChoice(_arg1:Event):void{
dispatchEvent(new Event(ITEMWRONG_EVENT, true));
}
private function sandwichScore(_arg1:Event):void{
dispatchEvent(new Event(SANDWICHSCORE_EVENT, true));
}
private function enviroDrive(_arg1:Event):void{
_CamSn = (_CamSn + 0.1);
_awayEnviro.AwayView.render();
_awayEnviro.AwayView.camera.z = (_awayEnviro.AwayView.camera.z + (6.5 * Math.sin((_CamSn / 1.5))));
}
public function spawnSandWich():void{
_mainSandwich.autoBuild();
}
public function get hud():Sprite{
return (_hudScoreSlot);
}
private function requestMessage(_arg1:Event):void{
_currentMessage = _arg1.target.message;
dispatchEvent(new Event(REQUESTMESSAGE_EVENT, true));
}
public function pause():void{
}
public function itemHitRequest(_arg1:String):void{
_mainSandwich.itemRequest(_arg1);
}
private function testSphere():void{
_scroller = new ScrollinBackground();
var _local1:MovieClip = new Main.woodTiles();
_scroller.setupScroll(_awayEnviro.background, _local1, "left", 40);
_awayEnviro.hud.addChild(_hudScoreSlot);
buildSandWich();
spawnSandWich();
}
}
}//package com.core
Section 168
//MindJoltAPI (com.mindjolt.api.as3.MindJoltAPI)
package com.mindjolt.api.as3 {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public class MindJoltAPI extends MovieClip {
private var dispatcher:CustomDispatcher;
public static var service:Object;
public function MindJoltAPI(){
dispatcher = new CustomDispatcher();
dispatcher.doAction(1, 100);
dispatcher.addEventListener(_slot2.ACTION, createRoot);
}
private function createRoot(_arg1:Event):void{
if (root != null){
_arg1.currentTarget.removeEventListener(_slot2.ACTION, createRoot);
init();
};
}
private function init():void{
var _local1:Object;
var _local2:String;
var _local3:Loader;
_local1 = Object(parent.root).loaderInfo.parameters;
_local2 = "";
if (((!((_local1.mjPath == null))) && (isDomainAllowed()))){
_local2 = _local1.mjPath;
} else {
_local2 = "http://static.mindjolt.com/api/as3/scoreapi_as3_local.swf";
};
_local3 = new Loader();
_local3.contentLoaderInfo.addEventListener(Event.COMPLETE, loadFinished);
_local3.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadFailed);
_local3.load(new URLRequest(_local2));
addChild(_local3);
}
private function loadFinished(_arg1:Event):void{
service = _arg1.currentTarget.content.service;
service.connect();
trace("[MindJoltAPI] service loaded");
}
private function isDomainAllowed():Boolean{
var _local1:String;
var _local2:LocalConnection;
var _local3:String;
_local1 = ".mindjolt.com";
_local2 = new LocalConnection();
_local3 = _local2.domain;
if (_local3.indexOf(_local1) == (_local3.length - _local1.length)){
return (true);
};
return (false);
}
private function loadFailed(_arg1:IOErrorEvent):void{
trace("[MindJoltAPI] unable to load service");
}
}
}//package com.mindjolt.api.as3
import flash.events.*;
import flash.utils.*;
class CustomDispatcher extends EventDispatcher {
public static var ACTION:String = "action";
private function CustomDispatcher(){
}
public function doAction(_arg1:Number, _arg2:Number):void{
var myTimer:Timer;
var propAction:Function;
var delay = _arg1;
var repeat = _arg2;
propAction = function (_arg1:TimerEvent):void{
dispatchEvent(new Event(_slot2.ACTION));
};
myTimer = new Timer(delay, repeat);
myTimer.addEventListener(TimerEvent.TIMER, propAction);
myTimer.start();
}
}
Section 169
//ArtLoader (com.utilities.ArtLoader)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public class ArtLoader extends Sprite {
private var _art:Bitmap;
private var _used:Boolean;// = false
public var _myLoader:Loader;
public static const ART_EVENT:String = " art ready";
public function ArtLoader():void{
_myLoader = new Loader();
super();
trace("art loader added");
}
public function get loaders():Loader{
return (_myLoader);
}
public function feedPreloader(_arg1:ProgressEvent):void{
}
public function get grabArt():Bitmap{
return (_art);
}
private function artLoaded(_arg1:Event):void{
if (!_used){
trace(("art loaded correctly" + _arg1.target));
_art = _arg1.target.content;
_myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, artLoaded);
_myLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, feedPreloader);
dispatchEvent(new Event(ART_EVENT, true));
_used = true;
};
}
public function loadArt(_arg1:String):void{
trace(("stager" + _arg1));
var _local2:URLRequest = new URLRequest(_arg1);
var _local3:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
_local2.requestHeaders.push(_local3);
_myLoader.load(_local2);
_myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, artLoaded);
_myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, feedPreloader);
}
}
}//package com.utilities
Section 170
//AwayEnvironment (com.utilities.AwayEnvironment)
package com.utilities {
import flash.events.*;
import flash.display.*;
import away3d.containers.*;
import flash.utils.*;
import away3d.core.clip.*;
public class AwayEnvironment extends MovieClip {
private var _backgroundSprite:Sprite;
public var view:View3D;
public var scene:Scene3D;
public static const SCENEREADY_EVENT:String = " SCENE";
public function AwayEnvironment(_arg1:Object){
_backgroundSprite = new Sprite();
super();
view = new View3D({background:_backgroundSprite});
view.background.graphics.beginFill(0, 0);
view.background.graphics.drawRect(0, 0, _arg1.width, _arg1.height);
view.background.graphics.endFill();
view.height = _arg1.height;
view.clipping = new RectangleClipping({minX:0, minY:-480, maxX:320, maxY:480});
view.cacheAsBitmap = true;
view.camera.moveLeft(150);
view.camera.moveUp(240);
view.scene.ownCanvas = true;
var _local2:Timer = new Timer(300, 1);
_local2.addEventListener(TimerEvent.TIMER_COMPLETE, dispatcher);
_local2.start();
}
private function dispatcher(_arg1:Event):void{
dispatchEvent(new Event(SCENEREADY_EVENT, true));
}
public function get hud():Sprite{
return (view.hud);
}
public function get AwayView():Object{
return (view);
}
public function get background():Sprite{
return (view.background);
}
}
}//package com.utilities
Section 171
//BitMapper (com.utilities.BitMapper)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class BitMapper {
public var curFrame:uint;// = 1
public var currentAction:Array;
public var hotZone:Sprite;
public var bitDisposalList:Array;
public var externalArt:MovieClip;
public var drvFrame:Number;// = 0
public var maxFrame:uint;// = 0
public var charArRef:Object;
public var Bitz:Bitmap;
public var actionTimer:Timer;
public var seqAr:Array;
public var capsule:Sprite;
public function BitMapper():void{
seqAr = new Array();
Bitz = new Bitmap();
hotZone = new Sprite();
capsule = new Sprite();
charArRef = new Object();
bitDisposalList = new Array();
super();
}
public function sequencePlayer(_arg1:Array, _arg2:Number, _arg3:Boolean):void{
curFrame = _arg1[0];
accessor((curFrame - 1));
currentAction = _arg1;
if (actionTimer){
actionTimer.removeEventListener(TimerEvent.TIMER, actionPack);
actionTimer.reset();
};
if (_arg3){
actionTimer = new Timer(_arg2);
actionTimer.addEventListener(TimerEvent.TIMER, actionPack);
actionTimer.start();
} else {
actionTimer = new Timer(_arg2, _arg1[(_arg1.length - 1)]);
actionTimer.addEventListener(TimerEvent.TIMER, singleShot);
actionTimer.start();
};
}
public function singleShotDone():void{
}
public function accessor(_arg1:Number):void{
Bitz.bitmapData = seqAr[_arg1];
}
public function frameChecker():void{
}
public function prepareFrames(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
maxFrame++;
seqAr.push(_arg1[("bit" + maxFrame)]);
};
Bitz.x = -((_arg1[("bit" + 1)].width / 2));
Bitz.y = -((_arg1[("bit" + 1)].height / 2));
capsule.addChild(Bitz);
Bitz.pixelSnapping = PixelSnapping.NEVER;
Bitz.smoothing = false;
}
public function get DisposalList():Array{
return (bitDisposalList);
}
public function buildDataObject(_arg1:String, _arg2:Number, _arg3:Number, _arg4:MovieClip):Array{
var _local7:BitmapData;
var _local5:Array = new Array();
var _local6:Number = _arg2;
while (_local6 < (_arg3 + 1)) {
_local7 = new BitmapData(_arg4.width, _arg4.height, true, 0xFFFFFF);
_arg4.inner.gotoAndStop(_local6);
_local7.draw(_arg4);
_local5.push(_local7);
_local6++;
};
return (_local5);
}
public function singleShot(_arg1:Event):void{
if (curFrame <= currentAction[(currentAction.length - 1)]){
curFrame++;
} else {
actionTimer.stop();
singleShotDone();
};
accessor((curFrame - 1));
}
public function framLoc():void{
curFrame = currentAction[0];
}
public function drawHotty(_arg1:Number, _arg2:Number):void{
hotZone.name = "hotZone";
hotZone.graphics.beginFill(0xFF);
hotZone.graphics.drawRect(0, 0, _arg1, _arg2);
hotZone.graphics.endFill();
capsule.addChild(hotZone);
}
public function actionPack(_arg1:Event):void{
frameChecker();
if (curFrame < currentAction[(currentAction.length - 1)]){
curFrame++;
accessor((curFrame - 1));
} else {
curFrame = currentAction[0];
accessor((curFrame - 1));
};
}
}
}//package com.utilities
Section 172
//BlenderButton (com.utilities.BlenderButton)
package com.utilities {
import flash.display.*;
import gs.*;
import flash.geom.*;
import gs.easing.*;
public class BlenderButton {
private var _blender:Sprite;
private static var _lumG:Number = 0.71516;
private static var _lumB:Number = 0.072169;
private static var _lumR:Number = 0.212671;
public static function formBitmap(_arg1:MovieClip):Bitmap{
var _local2:BitmapData = new BitmapData(_arg1.width, _arg1.height, true, 0xFFFFFF);
var _local3:Matrix = new Matrix();
_local3.tx = (_local3.tx + (_arg1.width / 2));
_local3.ty = (_local3.ty + (_arg1.height / 2));
_local2.draw(_arg1, _local3);
var _local4:Bitmap = new Bitmap(_local2);
new Bitmap(_local2).x = (_local4.x - (_arg1.width / 2));
_local4.y = (_local4.y - (_arg1.height / 2));
_arg1.addChild(_local4);
return (_local4);
}
public static function addBlender(_arg1:Bitmap):void{
var _local2:MovieClip = new MovieClip();
_local2.name = "masker";
_local2.mouseEnabled = false;
var _local3:BitmapData = new BitmapData(_arg1.width, _arg1.height, true, 0);
_local3.copyPixels(_arg1.bitmapData, _arg1.bitmapData.rect, new Point(0, 0));
var _local4:Bitmap = new Bitmap(_local3);
_local2.graphics.beginFill(0xFFFFFF, 1);
_local2.graphics.drawRect(0, 0, (_arg1.width / 10), _arg1.height);
_local2.y = (_local2.y - (_arg1.height / 2));
_local2.x = (Number((-(_arg1.width) / 2)) - 10);
_local2.rotation = (_local2.rotation + 10);
var _local5:Number = (((0xFFFFFF >> 16) & 0xFF) / 0xFF);
var _local6:Number = (((0xFFFFFF >> 8) & 0xFF) / 0xFF);
var _local7:Number = ((0xFFFFFF & 0xFF) / 0xFF);
var _local8:ColorTransform = new ColorTransform((_local5 * 1.8), (_local6 * 1.8), (_local7 * 1.8), 1, 1, 1);
_local4.transform.colorTransform = _local8;
_local4.x = (_local4.x - (_arg1.width / 2));
_local4.y = (_local4.y - (_arg1.height / 2));
_arg1.parent.addChild(_local4);
_arg1.parent.addChild(_local2);
_local4.mask = _local2;
}
public static function animate(_arg1:MovieClip):void{
if (_arg1){
TweenLite.to(_arg1, 0.5, {x:(_arg1.width + 90), ease:Linear.easeOut, onComplete:reset(_arg1)});
};
}
public static function reset(_arg1:MovieClip):void{
_arg1.x = (-(_arg1.parent.width) / 2);
}
}
}//package com.utilities
Section 173
//Card (com.utilities.Card)
package com.utilities {
import flash.events.*;
import flash.display.*;
import gs.*;
public class Card extends MovieClip {
private var _over:Boolean;// = false
private var _level:Number;
private var _yOrigin:Number;// = 0
private var _snDrv:Number;// = 0
private var _myXml:XML;
private var _myArt:MovieClip;
private var _myBitmap:Bitmap;
private var _yLoc:Number;// = 220
private var _xOrigin:Number;// = 0
public static const PAUSESELECTOR_EVENT:String = "pause Selector";
public static const FLOATSCORE_EVENT:String = "float score";
public static const CARDREADY_EVENT:String = "card ready";
public function Card(_arg1:MovieClip, _arg2:Number, _arg3:XML, _arg4:Number){
_level = _arg4;
_myXml = _arg3;
_myArt = _arg1;
_xOrigin = _arg2;
_yOrigin = 600;
_myArt.y = _yOrigin;
_myArt.x = _xOrigin;
var _local5:ArtLoader = new ArtLoader();
_local5.loadArt(_arg3.graphic_url);
_local5.addEventListener(ArtLoader.ART_EVENT, dispatch);
}
private function artInt(_arg1:Event):void{
dispatch();
}
private function clk(_arg1:Event):void{
Main.soundDictionary["go"].play();
LinkButtons.getUrl(String(_myXml.link));
dispatchEvent(new Event(PAUSESELECTOR_EVENT, true));
}
public function get art():MovieClip{
return (_myArt);
}
private function ot(_arg1:Event):void{
_over = false;
_myArt.scaleX = 1;
_myArt.scaleY = 1;
TweenFilterLite.to(_arg1.target, 0.5, {colorMatrixFilter:{brightness:1}});
}
private function drv(_arg1:Event):void{
if (_over){
_snDrv = (_snDrv + 1.1);
_myArt.scaleX = (1 + ((5 * Math.sin((_snDrv / 2))) / 100));
_myArt.scaleY = (1 + ((5 * Math.sin((_snDrv / 4))) / 100));
};
}
private function ovr(_arg1:Event):void{
_over = true;
Main.soundDictionary["play"].play();
BlenderButton.animate((_myArt.getChildByName("masker") as MovieClip));
TweenFilterLite.to(_arg1.target, 0.5, {colorMatrixFilter:{brightness:1.4}});
dispatchEvent(new Event(FLOATSCORE_EVENT, true));
}
private function addMouseEvent():void{
_myArt.mouseChildren = false;
_myArt.buttonMode = true;
_myArt.addEventListener(MouseEvent.MOUSE_DOWN, clk);
_myArt.addEventListener(MouseEvent.MOUSE_OVER, ovr);
_myArt.addEventListener(MouseEvent.MOUSE_OUT, ot);
addEventListener(Event.ENTER_FRAME, drv);
BlenderButton.addBlender(_myBitmap);
}
private function dispatch(_arg1:Event=null):void{
_arg1.target.grabArt.x = (_arg1.target.grabArt.x - (_arg1.target.grabArt.width / 2));
_arg1.target.grabArt.y = (_arg1.target.grabArt.y - (_arg1.target.grabArt.height / 2));
_myArt.addChildAt(_arg1.target.grabArt, 1);
_arg1.target.removeEventListener(ArtLoader.ART_EVENT, dispatch);
dispatchEvent(new Event(CARDREADY_EVENT, true));
if (_level == 1){
TweenLite.to(_myArt, 0.6, {y:220, onComplete:addMouseEvent});
} else {
TweenLite.to(_myArt, 0.6, {y:Number((_yLoc + Number((_myArt.height * (_level - 1))))), onComplete:addMouseEvent});
};
_myBitmap = _arg1.target.grabArt;
}
public function resume():void{
addEventListener(Event.ENTER_FRAME, drv);
}
public function pause():void{
removeEventListener(Event.ENTER_FRAME, drv);
}
}
}//package com.utilities
Section 174
//Cartoon (com.utilities.Cartoon)
package com.utilities {
import flash.events.*;
import flash.display.*;
public class Cartoon extends Sprite {
private var _myArt:MovieClip;
public static const CARTOONDONE_EVENT:String = "cartoon done";
public function Cartoon(_arg1:MovieClip){
_myArt = _arg1;
_myArt.addEventListener("cartooncomplete", fadeCartoon);
_myArt.addEventListener("cartoonsound", cartoonSound);
}
private function cartoonSound(_arg1:Event):void{
Main.soundDictionary["coin"].play();
}
private function fadeCartoon(_arg1:Event):void{
_arg1.target.removeEventListener("cartooncomplete", fadeCartoon);
_arg1.target.removeEventListener("cartoonsound", cartoonSound);
_arg1.target.removeEventListener("cartooncomplete", fadeCartoon);
_myArt.addEventListener(Event.ENTER_FRAME, drv);
}
private function drv(_arg1:Event):void{
if (_myArt.alpha > 0){
_myArt.alpha = (_myArt.alpha - 0.07);
} else {
_arg1.target.removeEventListener(Event.ENTER_FRAME, drv);
_myArt.parent.removeChild(_myArt);
trace("cartoon done");
dispatchEvent(new Event(CARTOONDONE_EVENT, true));
};
}
}
}//package com.utilities
Section 175
//Clock (com.utilities.Clock)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Clock extends Sprite {
private var _targetScore:Number;// = 0
private var _numzArray:Array;
private var _seconds:Number;// = 0
private var _flashCounter:Boolean;// = false
private var _tm:Timer;
private var _externalArt:Object;
private var _ten:Number;// = 0
private var _myTm:Timer;
private var _minutes:Number;// = 0
private var maxFrame:Number;// = 0
public var Bitz:Bitmap;
private var _accel:Number;// = 0
private var _milliseconds:Number;// = 0
public var capsule:Sprite;
private var seqAr:Array;
private var storedLength:Number;// = 0
private var secondsKill:Boolean;// = false
public static const LEVELEND_EVENT:String = "level end";
public function Clock(_arg1:String, _arg2:Object, _arg3:Sprite, _arg4:Object):void{
var _local6:Bitmap;
Bitz = new Bitmap();
capsule = new Sprite();
seqAr = new Array();
_numzArray = new Array();
super();
_ten = 0;
_externalArt = _arg2;
prepareFrames(_arg2);
_arg3.addChild(capsule);
var _local5:Number = 0;
while (_local5 < _arg1.length) {
if (String(_arg1.substr(_local5, 1)) == ":"){
_local6 = new Bitmap(_externalArt[11]);
} else {
_local6 = new Bitmap(_externalArt[10]);
};
_local6.x = (_local6.x + (_local5 * (_local6.width / 2)));
_numzArray.push(_local6);
capsule.addChild(_local6);
capsule.x = _arg4.x;
capsule.y = _arg4.y;
storedLength = _local5;
_local5++;
};
_tm = new Timer(10);
_tm.addEventListener(TimerEvent.TIMER, counter);
trace("clock setup");
}
public function prepareFrames(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
maxFrame++;
seqAr.push(_arg1[("bit" + maxFrame)]);
};
Bitz.smoothing = false;
}
public function resetClock(_arg1:String):void{
_tm.stop();
_tm.start();
}
public function startClock(_arg1:String):void{
_milliseconds = Number(_arg1.substr((_arg1.length - 2), 2));
_seconds = Number(_arg1.substr((_arg1.length - 5), 2));
_minutes = Number(_arg1.substr(0, 2));
if (_minutes < 1){
secondsKill = true;
} else {
secondsKill = false;
};
_tm.start();
}
public function counter(_arg1:Event):void{
var _local2:String;
var _local3:String;
var _local4:String;
_milliseconds = (_milliseconds - 1);
if (_milliseconds > 0){
} else {
_seconds = (_seconds - 1);
_ten = (_ten + 1);
if (_ten > 9){
flashIt();
_ten = 0;
};
_milliseconds = 59;
};
if (_milliseconds < 10){
_local2 = ("0" + _milliseconds);
} else {
_local2 = String(_milliseconds);
};
if (_seconds > 0){
} else {
_minutes = (_minutes - 1);
if (!secondsKill){
_seconds = 59;
};
};
if (_seconds < 10){
_local3 = ("0" + _seconds);
} else {
_local3 = String(_seconds);
};
if (_minutes > 0){
} else {
secondsKill = true;
_minutes = 0;
};
if (_minutes < 10){
_local4 = ("0" + _minutes);
} else {
_local4 = String(_minutes);
};
if ((((_minutes < 1)) && ((_seconds < 1)))){
stopClock();
_minutes = 0;
_local4 = String(_minutes);
_seconds = 0;
_local3 = String(_seconds);
_milliseconds = 0;
_local2 = String(_milliseconds);
};
_numzArray[0].bitmapData = _externalArt[Number(_local4.substr(0, 1))];
_numzArray[1].bitmapData = _externalArt[Number(_local4.substr(1, 1))];
_numzArray[3].bitmapData = _externalArt[Number(_local3.substr(0, 1))];
_numzArray[4].bitmapData = _externalArt[Number(_local3.substr(1, 1))];
_numzArray[6].bitmapData = _externalArt[Number(_local2.substr(0, 1))];
_numzArray[7].bitmapData = _externalArt[Number(_local2.substr(1, 1))];
}
public function reset(_arg1:Event):void{
_tm.stop();
_milliseconds = 0;
_seconds = 0;
_minutes = 0;
counter(_arg1);
}
public function get seconds():Number{
return (_seconds);
}
private function flasher(_arg1:Event):void{
if (!_flashCounter){
_flashCounter = true;
} else {
_flashCounter = false;
};
}
public function get minutes():Number{
return (_minutes);
}
public function kill():void{
if (_myTm){
_myTm.stop();
};
capsule.parent.removeChild(capsule);
}
private function test():void{
}
public function stopClock():void{
dispatchEvent(new Event(LEVELEND_EVENT, true));
_tm.stop();
}
public function pause(_arg1:Boolean):void{
if (_arg1){
_tm.stop();
} else {
_tm.start();
};
}
public function get tm():Timer{
return (_tm);
}
private function flashIt():void{
var _local1:Timer = new Timer(20, 6);
_local1.addEventListener(TimerEvent.TIMER, flasher);
_local1.start();
}
public function condimentBoost():void{
_seconds = (_seconds + ((Math.random() * 4) + 1));
}
}
}//package com.utilities
Section 176
//Effect_Floater (com.utilities.Effect_Floater)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Effect_Floater {
private var _speed:Number;// = 0
private var _externalArt:Object;
private var _frm:Number;// = 0
private var _myTm:Timer;
private var _Animation:Boolean;// = false
private var maxFrame:Number;// = 0
public var Bitz:Bitmap;
private var _accel:Number;// = 0
public var capsule:Sprite;
private var seqAr:Array;
private var storedLength:Number;// = 0
public function Effect_Floater(_arg1:Object, _arg2:Sprite, _arg3:Object, _arg4:String="undefined", _arg5:Number=0.3):void{
Bitz = new Bitmap();
capsule = new Sprite();
seqAr = new Array();
super();
_frm = Number(_arg4);
_speed = _arg5;
if (_arg4 == "undefined"){
_frm = 0;
} else {
_Animation = true;
};
_externalArt = _arg1;
prepareFrames(_externalArt);
_arg2.addChild(capsule);
Bitz.y = _arg3.y;
Bitz.x = _arg3.x;
Bitz.bitmapData = seqAr[_frm];
capsule.addChild(Bitz);
capsule.mouseEnabled = false;
capsule.mouseChildren = false;
_myTm = new Timer(20);
_myTm.addEventListener(TimerEvent.TIMER, float);
_myTm.start();
}
public function prepareFrames(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
maxFrame++;
seqAr.push(_arg1[("bit" + maxFrame)]);
};
Bitz.smoothing = false;
}
private function float(_arg1:Event):void{
if (!_Animation){
_frm++;
if (_frm > seqAr.length){
_frm = 0;
};
};
Bitz.bitmapData = _externalArt[_frm];
_accel = (_accel + _speed);
capsule.y = (capsule.y - _accel);
capsule.x = (5 * Math.sin(((_accel * 6) / 5)));
if (capsule.alpha > 0){
capsule.alpha = (capsule.alpha - (_accel / 200));
};
if (capsule.y < -400){
trace("kill");
kill();
};
}
public function kill():void{
if (_myTm){
_myTm.stop();
};
if (capsule.parent){
capsule.parent.removeChild(capsule);
};
}
}
}//package com.utilities
Section 177
//EmbedSecure (com.utilities.EmbedSecure)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class EmbedSecure extends MovieClip {
public var loader:Loader;
public static const ARTREADY_EVENT:String = " artready";
public function EmbedSecure(_arg1:Class){
trace("embed secure started");
loader = new Loader();
loader.loadBytes(new (_arg1));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, artR);
}
public function grabClassDict(_arg1:Array):Dictionary{
var _local2:Dictionary = new Dictionary();
var _local3:Number = 0;
while (_local3 < _arg1.length) {
_local2[_arg1[_local3]] = (loader.contentLoaderInfo.applicationDomain.getDefinition(_arg1[_local3]) as Class);
_local3++;
};
return (_local2);
}
public function grabClass(_arg1:String):Class{
return ((loader.contentLoaderInfo.applicationDomain.getDefinition(_arg1) as Class));
}
private function artR(_arg1:Event):void{
dispatchEvent(new Event(ARTREADY_EVENT, true));
}
}
}//package com.utilities
Section 178
//GameStartScreen (com.utilities.GameStartScreen)
package com.utilities {
import flash.events.*;
import flash.display.*;
import gs.*;
import flash.utils.*;
import com.mindjolt.api.as3.*;
import flash.ui.*;
public class GameStartScreen extends Sprite {
private var _fryScoring:Scoring_counter;
private var _mode:String;
private var _timeScoring:Scoring_counter;
private var _levelScoring:Scoring_counter;
private var _timeSprite:Sprite;
private var _score:Number;// = 0
private var _tallyNumber:Number;// = 0
private var _finalscoreSprite:Sprite;
private var _art:MovieClip;
private var _artOriginX:Number;// = 0
private var _artOriginY:Number;// = 0
private var _scoreSprite:Sprite;
private var _fryscoreSprite:Sprite;
private var _totalScoring:Scoring_counter;
private var _finalScoring:Scoring_counter;
private var myJolt:MindJoltAPI;
private var _pointsSprite:Sprite;
private var _windowType:String;
private var _pointsScoring:Scoring_counter;
private var _scoringObject:Object;
private var _gameStarted:Boolean;// = false
private var _sn:Number;// = 0
public static const GAMEPLAYSTART:String = "gameplay start";
public static const GAMESTARTREADY_EVENT:String = "gamestart ready";
public function GameStartScreen(_arg1:MovieClip){
_scoreSprite = new Sprite();
_fryscoreSprite = new Sprite();
_pointsSprite = new Sprite();
_timeSprite = new Sprite();
_finalscoreSprite = new Sprite();
super();
_art = _arg1;
_art.x = (Math.round((Number((640 / 2)) - (_art.width / 2))) + 20);
_art.y = (Math.round((Number((480 / 2)) - (_art.height / 2))) - 20);
_artOriginY = _art.y;
_artOriginX = _art.x;
_art.startstuff.visible = false;
addScoringSystem();
addPointsScoring();
addFryPoints();
addTimeScoring();
addFinalTotalScoring();
}
private function itunesJump(_arg1:Event):void{
LinkButtons.getUrl("http://www.tunecore.com/music/munchiegamesrecords");
}
private function setupGirlGames():void{
_art.girlgames.buttonMode = true;
_art.girlgames.addEventListener(MouseEvent.MOUSE_DOWN, girlgames);
}
private function del():void{
var _local1:Timer = new Timer(500, 1);
_local1.addEventListener(TimerEvent.TIMER_COMPLETE, diss);
_local1.start();
}
private function moregames(_arg1:Event):void{
LinkButtons.getUrl("http://www.cookingdressup.com");
}
private function setupItunes():void{
_art.level.itunes.buttonMode = true;
var _local1:Bitmap = BlenderButton.formBitmap(_art.level.itunes);
BlenderButton.addBlender(_local1);
_art.level.itunes.addEventListener(MouseEvent.MOUSE_DOWN, itunesJump);
_art.level.itunes.addEventListener(MouseEvent.MOUSE_OVER, ovr);
}
private function showFinalScore(_arg1:Event):void{
_finalScoring.addPoints(_tallyNumber, "tally");
}
private function showFryScore(_arg1:Event):void{
_fryScoring.addPoints((_scoringObject.mainScore * 1000), "tally");
}
private function showButtonsAfterScore(_arg1:Event):void{
showPlay = true;
scores();
}
private function scores(_arg1:Event=null):void{
Preloader.remoteStage.quality = "high";
if (_scoringObject){
MochiScores.showLeaderboard({boardID:"d536eb15ff545561", score:_tallyNumber, onClose:leaderboardClose});
} else {
MochiScores.showLeaderboard({boardID:"d536eb15ff545561", onClose:leaderboardClose});
};
Mouse.show();
}
private function doWindowProcess():void{
if ((((_windowType == "level")) || ((_windowType == "win")))){
trace(("****should fire up score" + _scoringObject.mainScore));
_tallyNumber = Number(((_scoringObject.pointScore + _scoringObject.timeScore) + Number((_scoringObject.mainScore * 1000))));
_levelScoring.addPoints(_scoringObject.mainScore);
};
}
private function girlgames(_arg1:Event):void{
LinkButtons.getUrl("http://www.gamesgames.com");
}
public function set showPlay(_arg1:Boolean):void{
_art.playgamebutton.visible = _arg1;
if (_art.scores){
};
_art.more.visible = _arg1;
}
private function drvSn():void{
_sn = (_sn + 0.34);
_art.x = (_art.x + (0.9 * Math.sin((_sn / 1.2))));
}
private function setupShareButton():void{
_art.share.buttonMode = true;
var _local1:Bitmap = BlenderButton.formBitmap(_art.share);
BlenderButton.addBlender(_local1);
_art.share.addEventListener(MouseEvent.MOUSE_DOWN, share);
_art.share.addEventListener(MouseEvent.MOUSE_OVER, ovr);
}
private function closedClearSpring(_arg1:Event):void{
Main.cursor.visible = true;
Preloader.remoteStage.quality = "low";
_art.widget.visible = false;
}
public function addArt(_arg1:String, _arg2:Object=undefined):MovieClip{
if (_arg2){
_scoringObject = _arg2;
};
_art.visible = true;
_art.alpha = 0;
_art.mouseEnabled = true;
_art.x = _artOriginX;
_mode = _arg1;
if (!_gameStarted){
setupPlayButton();
setupMoreGames();
_gameStarted = true;
};
_art.startstuff.visible = false;
_art.level.visible = false;
Mouse.show();
switch (_arg1){
case "start":
showPlay = true;
_windowType = "start";
_art.startstuff.visible = true;
break;
case "level":
showPlay = false;
_art.level.gotoAndStop(1);
_windowType = "level";
_art.level.visible = true;
break;
case "end":
_windowType = "end";
_art.end.visible = true;
break;
case "win":
showPlay = false;
trace("winner");
_art.level.gotoAndStop(2);
_windowType = "win";
_art.level.visible = true;
break;
};
_art.y = (_artOriginY + 100);
TweenLite.to(_art, 1, {alpha:1, onUpdate:drvSn, y:_artOriginY, onComplete:doWindowProcess});
return (_art);
}
public function onConnectError(_arg1:String):void{
trace(_arg1);
}
public function removeArt():void{
_art.parent.removeChild(_art);
_art.playgamebutton.removeEventListener(MouseEvent.MOUSE_DOWN, playGame);
}
private function addScoringSystem():void{
var _local1:BitMapper = new BitMapper();
var _local2:Array = _local1.buildDataObject("scoring", 1, 14, new Main.numbas());
_art.level.addChild(_scoreSprite);
_scoreSprite.x = 80;
_scoreSprite.y = (_scoreSprite.y - 38);
_levelScoring = new Scoring_counter("00", _local2, _scoreSprite);
_levelScoring.addEventListener(Scoring_counter.SCORECOUNTFINISHED_EVENT, showFryScore);
}
private function playGame(_arg1:Event):void{
_art.mouseEnabled = false;
Main.soundDictionary["maxpoints"].play();
TweenLite.to(_art, 1, {alpha:0, y:(_artOriginY - 100), onUpdate:drvSn, onComplete:diss});
}
private function diss(_arg1:Event=null):void{
_tallyNumber = 0;
_art.visible = false;
_levelScoring.rst();
_pointsScoring.rst();
_timeScoring.rst();
_fryScoring.rst();
_finalScoring.rst();
dispatchEvent(new Event(GAMEPLAYSTART, true));
}
private function addPointsScoring():void{
var _local1:BitMapper = new BitMapper();
var _local2:Array = _local1.buildDataObject("pointz", 1, 14, new Main.numbas());
_art.level.addChild(_pointsSprite);
_pointsSprite.x = 160;
_pointsSprite.y = (_pointsSprite.y + 6);
_pointsScoring = new Scoring_counter("00000000", _local2, _pointsSprite);
_pointsScoring.addEventListener(Scoring_counter.SCORECOUNTFINISHED_EVENT, showTimeScore);
}
private function showTimeScore(_arg1:Event):void{
_timeScoring.addPoints(_scoringObject.timeScore, "tally");
}
private function setupScoresButton():void{
_art.playgamebutton.buttonMode = true;
var _local1:Bitmap = BlenderButton.formBitmap(_art.scores);
BlenderButton.addBlender(_local1);
_art.scores.addEventListener(MouseEvent.MOUSE_DOWN, scores);
_art.scores.addEventListener(MouseEvent.MOUSE_OVER, ovr);
}
private function addFryPoints():void{
var _local1:BitMapper = new BitMapper();
var _local2:Array = _local1.buildDataObject("scoring", 1, 14, new Main.numbas());
_art.level.addChild(_fryscoreSprite);
_fryscoreSprite.x = 160;
_fryscoreSprite.y = (_fryscoreSprite.y - 38);
_fryScoring = new Scoring_counter("00000000", _local2, _fryscoreSprite);
_fryScoring.addEventListener(Scoring_counter.SCORECOUNTFINISHED_EVENT, showMainPoints);
}
private function share(_arg1:Event):void{
Main.cursor.visible = false;
Mouse.show();
_art.widget.visible = true;
Preloader.remoteStage.quality = "high";
}
private function addTimeScoring():void{
var _local1:BitMapper = new BitMapper();
var _local2:Array = _local1.buildDataObject("pointz", 1, 14, new Main.numbas());
_art.level.addChild(_timeSprite);
_timeSprite.x = 160;
_timeSprite.y = (_timeSprite.y + 49);
_timeScoring = new Scoring_counter("00000000", _local2, _timeSprite);
_timeScoring.addEventListener(Scoring_counter.SCORECOUNTFINISHED_EVENT, showFinalScore);
}
private function setupPlayButton():void{
_art.playgamebutton.buttonMode = true;
var _local1:Bitmap = BlenderButton.formBitmap(_art.playgamebutton);
BlenderButton.addBlender(_local1);
_art.playgamebutton.addEventListener(MouseEvent.MOUSE_DOWN, playGame);
_art.playgamebutton.addEventListener(MouseEvent.MOUSE_OVER, ovr);
}
private function showMainPoints(_arg1:Event):void{
trace(("incoming points score" + _scoringObject.pointScore));
_pointsScoring.addPoints(_scoringObject.pointScore, "tally");
}
private function ovr(_arg1:Event):void{
trace("over");
Main.soundDictionary["coin"].play();
BlenderButton.animate((_arg1.currentTarget.getChildByName("masker") as MovieClip));
}
public function inPoz():void{
}
private function addFinalTotalScoring():void{
var _local1:BitMapper = new BitMapper();
var _local2:Array = _local1.buildDataObject("pointz", 1, 14, new Main.numbas());
_art.level.addChild(_finalscoreSprite);
_finalscoreSprite.x = 160;
_finalscoreSprite.y = (_finalscoreSprite.y + 91);
_finalScoring = new Scoring_counter("00000000", _local2, _finalscoreSprite);
_finalScoring.addEventListener(Scoring_counter.SCORECOUNTFINISHED_EVENT, showButtonsAfterScore);
}
private function leaderboardClose():void{
trace("closing leaderboard");
Preloader.remoteStage.quality = "low";
}
private function setupMoreGames():void{
_art.more.buttonMode = true;
var _local1:Bitmap = BlenderButton.formBitmap(_art.more);
BlenderButton.addBlender(_local1);
_art.more.addEventListener(MouseEvent.MOUSE_DOWN, moregames);
_art.more.addEventListener(MouseEvent.MOUSE_OVER, ovr);
}
}
}//package com.utilities
Section 179
//Lid (com.utilities.Lid)
package com.utilities {
import flash.events.*;
import flash.display.*;
import gs.*;
public class Lid extends Sprite {
private var _lidArt:MovieClip;
private var _resumeButton:MovieClip;
public static const RESUME_EVENT:String = "resume operations";
public function Lid(_arg1:MovieClip):void{
_lidArt = _arg1;
_lidArt.visible = false;
_resumeButton = _lidArt.but;
_resumeButton.buttonMode = true;
_resumeButton.addEventListener(MouseEvent.MOUSE_DOWN, fdOut);
_resumeButton.addEventListener(MouseEvent.MOUSE_OVER, ovr);
BlenderButton.addBlender(BlenderButton.formBitmap(_resumeButton));
}
private function fdOut(_arg1:Event):void{
Main.soundDictionary["back"].play();
TweenLite.to(_lidArt, 0.5, {alpha:0, onComplete:remove});
}
private function ovr(_arg1:Event):void{
BlenderButton.animate((_resumeButton.getChildByName("masker") as MovieClip));
}
public function activate():void{
_lidArt.visible = true;
}
public function remove():void{
_lidArt.visible = false;
_lidArt.alpha = 1;
dispatchEvent(new Event(RESUME_EVENT, true));
}
}
}//package com.utilities
Section 180
//LinkButtons (com.utilities.LinkButtons)
package com.utilities {
import flash.net.*;
public class LinkButtons {
public static function getUrl(_arg1:String):void{
var _local2:URLRequest = new URLRequest(_arg1);
navigateToURL(_local2, "_blank");
}
public static function getZip(_arg1:String):void{
trace(_arg1);
var _local2:URLRequest = new URLRequest(_arg1);
navigateToURL(_local2);
}
public static function getUrlSelf(_arg1:String):void{
var _local2:URLRequest = new URLRequest(_arg1);
navigateToURL(_local2, "_self");
}
}
}//package com.utilities
Section 181
//MochiAd (com.utilities.MochiAd)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiAd {
public static function getVersion():String{
return ("2.7");
}
public static function showClickAwayAd(_arg1:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = _arg1;
var DEFAULTS:Object = {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;
var ad_timeout:Number = 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();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = 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);
};
var sendHostProgress:Boolean;
mc.regContLC = function (_arg1:String):void{
mc._containerLCName = _arg1;
};
chk["onEnterFrame"] = function ():void{
var _local4:Number;
if (!this.parent){
delete this.onEnterFrame;
return;
};
var _local1:Object = this.parent._mochiad_ctr;
var _local2:Number = (getTimer() - this.started);
var _local3:Boolean;
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 = _arg1.split("/")[2].split(":")[0];
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 clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = _arg1;
var DEFAULTS:Object = {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;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time:Number = 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();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = 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{
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var _local1:Number = (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 = 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 _local4:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var _local1:Object = this.parent._mochiad_ctr;
var _local2:Number = (getTimer() - this.started);
var _local3:Boolean;
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 _local4:String;
var _local5:Array;
var _local6:Number;
var _local7:Array;
var _local3:Object = {};
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 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);
};
var idx:Number = 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 clip:Object;
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;
var DEFAULTS:Object = {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 (!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."));
};
var depth:Number = options.depth;
delete options.depth;
var mc:MovieClip = createEmptyMovieClip(clip, "_mochiad", depth);
var wh:Array = 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;
};
var lv:URLVariables = 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.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 = _arg2.split(".");
var _local5:Number = 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 = 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 _local6:Array;
var _local3:Object = _arg2.getBounds(_arg2.root);
var _local4:Number = 0;
var _local5:Number = 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 = _arg2.split(".");
var _local4:Number = 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 = _arg2.split(".");
var _local5:Number = 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 clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var complete:Boolean;
var unloaded:Boolean;
var sendHostProgress:Boolean;
var fn:Function;
var r:MovieClip;
var options = _arg1;
var DEFAULTS:Object = {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{
}};
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;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time:Number = 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);
var fn:Function = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = 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);
var bar:MovieClip = createEmptyMovieClip(chk, "_mochiad_bar", 4);
if (options.no_progress_bar){
bar.visible = false;
delete options.no_progress_bar;
} else {
bar.x = 10;
bar.y = (h - 20);
};
var bar_color:Number = options.color;
delete options.color;
var bar_background:Number = options.background;
delete options.background;
var bar_outline:Number = options.outline;
delete options.outline;
var backing_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 1);
var backing:Object = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo((w - 20), 0);
backing.lineTo((w - 20), 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
var inside_mc:MovieClip = createEmptyMovieClip(bar, "_inside", 2);
var inside:Object = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo((w - 20), 0);
inside.lineTo((w - 20), 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
var outline_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 3);
var outline:Object = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo((w - 20), 0);
outline.lineTo((w - 20), 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 = (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;
var f:Function = function (_arg1:Event):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
complete = true;
if (unloaded){
MochiAd.unload(clip);
};
};
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
if ((clip.root is MovieClip)){
r = (clip.root as MovieClip);
if (r.framesLoaded >= r.totalFrames){
complete = true;
};
};
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 = 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 _local11:Number;
if (((!(this.parent)) || (!(this.parent.parent)))){
delete this["onEnterFrame"];
return;
};
var _local1:Object = this.parent.parent.root;
var _local2:Object = this.parent._mochiad_ctr;
var _local3:Number = (getTimer() - this.started);
var _local4:Boolean;
var _local5:Number = _local1.loaderInfo.bytesTotal;
var _local6:Number = _local1.loaderInfo.bytesLoaded;
if (complete){
_local6 = Math.max(1, _local6);
_local5 = _local6;
};
var _local7:Number = ((100 * _local6) / _local5);
var _local8:Number = ((100 * _local3) / chk.ad_msec);
var _local9:Object = this._mochiad_bar._inside;
var _local10:Number = Math.min(100, Math.min(((_local7) || (0)), _local8));
_local10 = Math.max(this.last_pcnt, _local10);
this.last_pcnt = _local10;
_local9.scaleX = (_local10 * 0.01);
options.ad_progress(_local10);
if (sendHostProgress){
clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:_local7});
if (_local7 == 100){
sendHostProgress = false;
};
};
if (!chk.showing){
_local11 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (_local11 > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if ((((_local3 > chk.ad_timeout)) && ((_local7 == 100)))){
options.ad_failed();
_local4 = true;
};
};
};
if (_local3 > chk.ad_msec){
_local4 = true;
};
if (((complete) && (_local4))){
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 mc = _arg1;
var f:Function = 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 com.utilities
Section 182
//MochiBot (com.utilities.MochiBot)
package com.utilities {
import flash.display.*;
import flash.net.*;
import flash.system.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
if (Security.sandboxType == "localWithFile"){
return (null);
};
var _local3:MochiBot = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var _local4 = "http://core.mochibot.com/my/core.swf";
var _local5:URLVariables = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
var _local6:String = _local3.root.loaderInfo.loaderURL;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
var _local7:URLRequest = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
var _local8:Loader = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package com.utilities
Section 183
//MochiScores (com.utilities.MochiScores)
package com.utilities {
import flash.display.*;
import flash.text.*;
public class MochiScores {
private static var boardID:String;
public static var onErrorHandler:Object;
public static var onCloseHandler:Object;
public static function showLeaderboard(_arg1:Object=null):void{
var options = _arg1;
if (options != null){
if (options.clip != null){
if ((options.clip is Sprite)){
MochiServices.setContainer(options.clip);
};
delete options.clip;
} else {
MochiServices.setContainer();
};
MochiServices.stayOnTop();
if (options.name != null){
if ((options.name is TextField)){
if (options.name.text.length > 0){
options.name = options.name.text;
};
};
};
if (options.score != null){
if ((options.score is TextField)){
if (options.score.text.length > 0){
options.score = options.score.text;
};
};
};
if (options.onDisplay != null){
options.onDisplay();
} else {
if (MochiServices.clip != null){
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
};
} else {
options = {};
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
if (options.onClose != null){
onCloseHandler = options.onClose;
} else {
onCloseHandler = function ():void{
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.play();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onClose.");
};
};
};
if (options.onError != null){
onErrorHandler = options.onError;
} else {
onErrorHandler = null;
};
if (options.boardID == null){
if (_slot1.boardID != null){
options.boardID = _slot1.boardID;
};
};
MochiServices.send("scores_showLeaderboard", {options:options}, null, onClose);
}
public static function closeLeaderboard():void{
MochiServices.send("scores_closeLeaderboard");
}
public static function getPlayerInfo(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_getPlayerInfo", null, _arg1, _arg2);
}
public static function requestList(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_requestList", null, _arg1, _arg2);
}
public static function scoresArrayToObjects(_arg1:Object):Object{
var _local3:Number;
var _local4:Number;
var _local5:Object;
var _local6:Object;
var _local7:String;
var _local8:String;
var _local2:Object = {};
for (_local7 in _arg1) {
if (typeof(_arg1[_local7]) == "object"){
if (((!((_arg1[_local7].cols == null))) && (!((_arg1[_local7].rows == null))))){
_local2[_local7] = [];
_local5 = _arg1[_local7];
_local4 = 0;
while (_local4 < _local5.rows.length) {
_local6 = {};
_local3 = 0;
while (_local3 < _local5.cols.length) {
_local6[_local5.cols[_local3]] = _local5.rows[_local4][_local3];
_local3++;
};
_local2[_local7].push(_local6);
_local4++;
};
} else {
_local2[_local7] = {};
for (_local8 in _arg1[_local7]) {
_local2[_local7][_local8] = _arg1[_local7][_local8];
};
};
} else {
_local2[_local7] = _arg1[_local7];
};
};
return (_local2);
}
public static function submit(_arg1:Number, _arg2:String, _arg3:Object=null, _arg4:Object=null):void{
MochiServices.send("scores_submit", {score:_arg1, name:_arg2}, _arg3, _arg4);
}
public static function onClose(_arg1:Object=null):void{
if (_arg1 != null){
if (_arg1.error != null){
if (_arg1.error == true){
if (onErrorHandler != null){
if (_arg1.errorCode == null){
_arg1.errorCode = "IOError";
};
onErrorHandler(_arg1.errorCode);
MochiServices.doClose();
return;
};
};
};
};
onCloseHandler();
MochiServices.doClose();
}
public static function setBoardID(_arg1:String):void{
_slot1.boardID = _arg1;
MochiServices.send("scores_setBoardID", {boardID:_arg1});
}
}
}//package com.utilities
Section 184
//MochiServices (com.utilities.MochiServices)
package com.utilities {
import flash.events.*;
import flash.display.*;
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 _sendChannel:LocalConnection;
private static var _rcvChannelName:String;
private static var _gatewayURL:String = "http://www.mochiads.com/static/lib/services/services.swf";
private static var _clip:MovieClip;
private static var _loader:Loader;
private static var _id:String;
private static var _listenChannel:LocalConnection;
private static var _timer:Timer;
private static var _sendChannelName:String;
private static var _startTime:Number;
private static var _connecting:Boolean = false;
public static var onError:Object;
private static var _listenChannelName:String = "__mochiservices";
private static var _rcvChannel:LocalConnection;
public static function isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{
if (_connected){
_sendChannel.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
} else {
if ((((_clip == null)) || (!(_connecting)))){
onError("NotConnected");
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++;
};
};
}
public static function get connected():Boolean{
return (_connected);
}
private static function flush(_arg1:Boolean):void{
var _local2:Object;
var _local3:Object;
if (_clip != null){
if (_clip._queue != null){
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);
};
};
};
};
};
}
private static function clickMovie(_arg1:String, _arg2:Function):MovieClip{
var _local4:int;
var _local14:Loader;
var _local3:Array = [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];
var _local5:Array = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3];
var _local6:Array = [0, 64, 0, 0, 0];
var _local7:MovieClip = new MovieClip();
var _local8:LocalConnection = new LocalConnection();
var _local9:String = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().getTime()));
_local8 = new LocalConnection();
_local7.lc = _local8;
_local7.click = _arg2;
_local8.client = _local7;
_local8.connect(_local9);
var _local10:ByteArray = new ByteArray();
var _local11:ByteArray = new ByteArray();
_local11.endian = Endian.LITTLE_ENDIAN;
_local11.writeShort(1);
_local11.writeUTFBytes(((_arg1 + " ") + _local9));
_local11.writeByte(0);
var _local12:uint = ((_local3.length + _local11.length) + 4);
var _local13:uint = (_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);
}
private static function init(_arg1:String, _arg2:Object):void{
_id = _arg1;
if (_arg2 != null){
_container = _arg2;
loadCommunicator(_arg1, _container);
};
}
public static function get childClip():Object{
return (_clip);
}
public static function get id():String{
return (_id);
}
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 netup:Boolean;
var s:String;
var x:String;
var req:URLRequest;
var loader:Loader;
var err:Function;
var complete:Function;
var setURL:Function;
var url = _arg1;
var burl = _arg2;
var btn = _arg3;
var onClick = _arg4;
var vars:Object = 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 = "?";
var i:Number = 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();
err = function (_arg1:Object):void{
netup = false;
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
complete = function (_arg1:Object):void{
netup = true;
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, err);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
loader.load(req);
setURL = function ():void{
var _local1:String;
if (netup){
_local1 = (url + s);
} else {
_local1 = burl;
};
var _local2:DisplayObject = clickMovie(_local1, onClick);
btn.addChild(_local2);
_local2.scaleX = (0.01 * btn.width);
_local2.scaleY = (0.01 * btn.height);
};
setTimeout(setURL, 1500);
}
public static function getVersion():String{
return ("1.35");
}
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 {
_listenChannel.close();
_rcvChannel.close();
} catch(error:Error) {
};
};
if (_timer != null){
try {
_timer.stop();
} catch(error:Error) {
};
};
}
public static function allowDomains(_arg1:String):String{
var _local2:String;
Security.allowDomain("*");
Security.allowInsecureDomain("*");
if (_arg1.indexOf("http://") != -1){
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain(_local2);
Security.allowInsecureDomain(_local2);
};
return (_local2);
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
if (_clip.parent != null){
Sprite(_clip.parent).removeChild(_clip);
};
}
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 onStatus(_arg1:StatusEvent):void{
switch (_arg1.level){
case "error":
_connected = false;
_listenChannel.connect(_listenChannelName);
break;
};
}
private static function initComChannels():void{
if (!_connected){
_sendChannel.addEventListener(StatusEvent.STATUS, MochiServices.onStatus);
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"});
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"registerGame", id:_id, clip:_container, version:getVersion(), parentURL:_container.loaderInfo.loaderURL});
_rcvChannel.addEventListener(StatusEvent.STATUS, MochiServices.onStatus);
_clip.onReceive = function (_arg1:Object):void{
var methodName:String;
var pkg = _arg1;
var cb:String = pkg.callbackID;
var cblst:Object = this.client._callbacks[cb];
if (!cblst){
return;
};
var method:* = cblst.callbackMethod;
methodName = "";
var obj:Object = 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 this.client._callbacks[cb];
};
_clip.onError = function ():void{
MochiServices.onError("IOError");
};
_rcvChannel.connect(_rcvChannelName);
trace("connected!");
_connecting = false;
_connected = true;
_listenChannel.close();
while (_clip._queue.length > 0) {
_sendChannel.send(_sendChannelName, "onReceive", _clip._queue.shift());
};
};
}
private static function listen():void{
_listenChannel = new LocalConnection();
_listenChannel.client = _clip;
_clip.handshake = function (_arg1:Object):void{
MochiServices.comChannelName = _arg1.newChannel;
};
_listenChannel.allowDomain("*", "localhost");
_listenChannel.allowInsecureDomain("*", "localhost");
_listenChannel.connect(_listenChannelName);
trace("Waiting for MochiAds services to connect...");
}
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) {
};
};
};
};
}
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");
_rcvChannelName = _arg1;
initComChannels();
};
};
}
private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{
var id = _arg1;
var clip = _arg2;
var clipname:String = ("_mochiservices_com_" + id);
if (_clip != null){
return (_clip);
};
if (!MochiServices.isNetworkAvailable()){
return (null);
};
MochiServices.allowDomains(_gatewayURL);
_clip = createEmptyMovieClip(clip, clipname, 10336, false);
_loader = new Loader();
_timer = new Timer(1000, 0);
_startTime = getTimer();
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
var f:Function = function (_arg1:Object):void{
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
var req:URLRequest = new URLRequest(_gatewayURL);
_loader.load(req);
_clip.addChild(_loader);
_clip._mochiservices_com = _loader;
_sendChannel = new LocalConnection();
_clip._queue = [];
_rcvChannel = new LocalConnection();
_rcvChannel.allowDomain("*", "localhost");
_rcvChannel.allowInsecureDomain("*", "localhost");
_rcvChannel.client = _clip;
_clip._nextcallbackID = 0;
_clip._callbacks = {};
listen();
return (_clip);
}
public static function bringToTop(_arg1:Event):void{
var e = _arg1;
if (MochiServices.clip != null){
if (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 connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{
var id = _arg1;
var clip = _arg2;
var onError = _arg3;
if ((clip is DisplayObject)){
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 parent = _arg1;
var name = _arg2;
var depth = _arg3;
var doAdd = _arg4;
var mc:MovieClip = 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 connectWait(_arg1:TimerEvent):void{
if ((getTimer() - _startTime) > 10000){
if (!_connected){
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
_timer.stop();
};
}
}
}//package com.utilities
Section 185
//Scoring_counter (com.utilities.Scoring_counter)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.media.*;
public class Scoring_counter extends Sprite {
private var _sndDel:Timer;
private var _mode:String;
private var _sndUsed:String;
private var _numzArray:Array;
private var _goodsoundTimer:Timer;
private var storedLength:Number;// = 0
private var _maxPointsSoundC:SoundChannel;
private var _maxPointsSoundD:SoundChannel;
private var _beepSoundChannel:SoundChannel;
private var _myTm:Timer;
public var Bitz:Bitmap;
public var capsule:Sprite;
private var _maxPointsSoundE:SoundChannel;
private var _badsoundTimer:Timer;
private var _targetScore:Number;// = 0
private var _intervalHit2:Number;// = 2000
private var _intervalHit3:Number;// = 3000
private var _intervalHit:Number;// = 1000
private var _sndName:String;
private var _currentCnt:Number;// = 0
private var _externalArt:Array;
private var maxFrame:Number;// = 0
private var _accel:Number;// = 0
private var seqAr:Array;
private var _sndName2:String;
public static const SCORECOUNTFINISHED_EVENT:String = "score count finished";
public function Scoring_counter(_arg1:String, _arg2:Array, _arg3:Sprite):void{
var _local5:Bitmap;
Bitz = new Bitmap();
capsule = new Sprite();
seqAr = new Array();
_numzArray = new Array();
_goodsoundTimer = new Timer(100);
_badsoundTimer = new Timer(100);
_beepSoundChannel = new SoundChannel();
_maxPointsSoundC = new SoundChannel();
_maxPointsSoundD = new SoundChannel();
_maxPointsSoundE = new SoundChannel();
super();
_goodsoundTimer.addEventListener(TimerEvent.TIMER, snd);
_badsoundTimer.addEventListener(TimerEvent.TIMER, sndBad);
_externalArt = _arg2;
prepareFrames(_arg2);
_arg3.addChild(capsule);
var _local4:Number = 0;
while (_local4 < _arg1.length) {
_local5 = new Bitmap(_externalArt[10]);
new Bitmap(_externalArt[10]).x = (_local5.x + (_local4 * (_local5.width / 2)));
_numzArray.push(_local5);
capsule.addChild(_local5);
capsule.x = 0;
capsule.y = 0;
storedLength = _local4;
_local4++;
};
capsule.addChild(_local5);
}
public function prepareFrames(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
maxFrame++;
seqAr.push(_arg1[("bit" + maxFrame)]);
};
Bitz.smoothing = false;
}
public function removePointz(_arg1:Number):void{
_badsoundTimer.start();
var _local2:Timer = new Timer(20, _arg1);
_local2.addEventListener(TimerEvent.TIMER, counter);
_local2.start();
if (_targetScore >= 0){
_targetScore = (_targetScore - _arg1);
} else {
_local2.stop();
};
}
public function get currentScore():Number{
return (_targetScore);
}
public function removePoints(_arg1:Number):void{
removePointz(_arg1);
}
private function snd(_arg1:Event):void{
if (_currentCnt != _targetScore){
_beepSoundChannel.stop();
_beepSoundChannel = Main.soundDictionary["blip"].play();
};
}
public function addPointsAdj(_arg1:Number, _arg2:Number):void{
_goodsoundTimer.start();
if (_targetScore >= 0){
_targetScore = (_targetScore + _arg1);
};
}
public function rst():void{
var _local1:Number = 0;
while (_local1 < capsule.numChildren) {
Bitmap(capsule.getChildAt(_local1)).bitmapData = _externalArt[10];
_local1++;
};
_targetScore = 0;
_currentCnt = 0;
_intervalHit = 1000;
_intervalHit2 = 2000;
_intervalHit3 = 3000;
_goodsoundTimer.stop();
_badsoundTimer.stop();
}
private function sndBad(_arg1:Event):void{
if (_currentCnt != _targetScore){
_beepSoundChannel.stop();
_beepSoundChannel = Main.soundDictionary["badblip"].play();
};
}
private function reset(_arg1:Event):void{
trace("*******counter reset**********");
_myTm.stop();
var _local2:Number = 0;
while (_local2 < capsule.numChildren) {
Bitmap(capsule.getChildAt(_local2)).bitmapData = _externalArt[10];
_local2++;
};
_targetScore = 0;
_currentCnt = 0;
_myTm.start();
}
public function addPoints(_arg1:Number, _arg2:String="gameplay"):void{
_goodsoundTimer.start();
_mode = _arg2;
if (_arg1 > 10){
};
var _local3:Timer = new Timer(20, _arg1);
_local3.addEventListener(TimerEvent.TIMER, counter);
_local3.start();
if (_arg1 > 0){
if (_currentCnt >= 0){
_targetScore = (_targetScore + _arg1);
};
};
if (_arg1 < 0){
if (_currentCnt >= 0){
_targetScore = (_targetScore - _arg1);
};
};
}
public function kill():void{
if (_myTm){
_myTm.stop();
};
capsule.parent.removeChild(capsule);
}
public function counter(_arg1:Event):void{
if (_intervalHit < _currentCnt){
_maxPointsSoundD.stop();
_maxPointsSoundC.stop();
_maxPointsSoundE.stop();
if (_mode == "gameplay"){
_maxPointsSoundC = Main.soundDictionary["maxpoints"].play();
};
_intervalHit = (_intervalHit + 1000);
};
if (_intervalHit2 < _currentCnt){
_maxPointsSoundD.stop();
_maxPointsSoundC.stop();
_maxPointsSoundE.stop();
if (_mode == "gameplay"){
_maxPointsSoundD = Main.soundDictionary["midpoints"].play();
};
_intervalHit2 = (_intervalHit2 + 2000);
};
if (_intervalHit3 < _currentCnt){
_maxPointsSoundD.stop();
_maxPointsSoundC.stop();
_maxPointsSoundE.stop();
if (_mode == "gameplay"){
_maxPointsSoundD = Main.soundDictionary["bigpoints"].play();
};
_intervalHit3 = (_intervalHit3 + 3000);
};
if (_currentCnt > _targetScore){
_currentCnt = (_currentCnt - 1);
};
if (_currentCnt < _targetScore){
if ((_currentCnt + 5000) < _targetScore){
_currentCnt = (_currentCnt + 2000);
};
if ((_currentCnt + 1500) < _targetScore){
_currentCnt = (_currentCnt + 1000);
};
if ((_currentCnt + 100) < _targetScore){
_currentCnt = (_currentCnt + 50);
} else {
_currentCnt = (_currentCnt + 1);
};
};
if (_currentCnt == _targetScore){
_goodsoundTimer.stop();
_badsoundTimer.stop();
_arg1.target.removeEventListener(TimerEvent.TIMER, counter);
dispatchEvent(new Event(SCORECOUNTFINISHED_EVENT, true));
_arg1.target.stop();
};
var _local2:Number = String(_currentCnt).length;
var _local3:Number = 0;
while (_local3 < _numzArray.length) {
_numzArray[_local3].bitmapData = _externalArt[10];
_local3++;
};
var _local4:Number = 0;
while (_local4 < _local2) {
if (_targetScore){
_numzArray[_local4].bitmapData = _externalArt[String(_currentCnt).substr(_local4, 1)];
} else {
_numzArray[(_local4 + 1)].bitmapData = _externalArt[String(_currentCnt).substr(_local4, 1)];
};
_local4++;
};
if (_currentCnt < 1){
_arg1.target.stop();
rst();
};
}
}
}//package com.utilities
Section 186
//Scoring_Floater (com.utilities.Scoring_Floater)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Scoring_Floater {
private var _myTm:Timer;
private var _externalArt:Array;
private var maxFrame:Number;// = 0
private var _accel:Number;// = 0
public var Bitz:Bitmap;
private var seqAr:Array;
public var capsule:Sprite;
private var storedLength:Number;// = 0
public function Scoring_Floater(_arg1:String, _arg2:Array, _arg3:Sprite):void{
var _local5:Bitmap;
var _local6:Number;
Bitz = new Bitmap();
capsule = new Sprite();
seqAr = new Array();
super();
_externalArt = _arg2;
prepareFrames(_arg2);
_arg3.addChild(capsule);
if (_arg1.substr(0, 1) == "-"){
_local5 = new Bitmap(_externalArt[10]);
capsule.addChild(_local5);
_local6 = 1;
} else {
_local6 = 0;
};
var _local4:Number = _local6;
while (_local4 < _arg1.length) {
_local5 = new Bitmap(_externalArt[Number(_arg1.substr(_local4, 1))]);
new Bitmap(_externalArt[Number(_arg1.substr(_local4, 1))]).x = (_local5.x + (_local4 * 8));
capsule.addChild(_local5);
capsule.x = (capsule.x - (_local5.width / 3));
storedLength = _local4;
_local4++;
};
_local5 = new Bitmap(seqAr[13]);
new Bitmap(seqAr[13]).x = (_local5.x + (_arg1.length * 20));
capsule.addChild(_local5);
capsule.mouseEnabled = false;
capsule.mouseChildren = false;
_myTm = new Timer(20);
_myTm.addEventListener(TimerEvent.TIMER, float);
_myTm.start();
}
private function float(_arg1:Event):void{
_accel = (_accel + 0.2);
capsule.y = (capsule.y - _accel);
capsule.x = (5 * Math.sin(((_accel * 6) / 5)));
if (capsule.alpha > 0){
capsule.alpha = (capsule.alpha - (_accel / 200));
};
if (capsule.y < -400){
kill();
};
}
public function prepareFrames(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
maxFrame++;
seqAr.push(_arg1[("bit" + maxFrame)]);
};
Bitz.smoothing = false;
}
public function kill():void{
if (_myTm){
_myTm.stop();
};
if (capsule.parent){
capsule.parent.removeChild(capsule);
};
}
}
}//package com.utilities
Section 187
//ScrollinBackground (com.utilities.ScrollinBackground)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
public class ScrollinBackground {
private var _scrollArea:Sprite;
private var _tile1:BitmapData;
private var _dir:String;
private var _scrollInc:Number;// = 0
private var _art:MovieClip;
private var _pause:Boolean;// = false
private var _printArea:BitmapData;
public function drv(_arg1:Event):void{
if (!_pause){
switch (_dir){
case "left":
if (_scrollInc < (_tile1.width / 2)){
_scrollInc = (_scrollInc + 1);
} else {
_scrollInc = 0;
};
_printArea.copyPixels(_tile1, _tile1.rect, new Point(-(_scrollInc), 0));
break;
case "down":
if (_scrollInc < (_tile1.height / 4)){
_scrollInc = (_scrollInc + 1);
} else {
_scrollInc = -15;
};
_printArea.copyPixels(_tile1, _tile1.rect, new Point(0, -(_scrollInc)));
break;
};
};
}
public function setupScroll(_arg1:Sprite, _arg2:MovieClip, _arg3:String, _arg4:Number=0):void{
}
public function set pause(_arg1:Boolean):void{
_pause = _arg1;
}
}
}//package com.utilities
Section 188
//Selector (com.utilities.Selector)
package com.utilities {
import flash.events.*;
import flash.display.*;
import gs.*;
import flash.utils.*;
import flash.filters.*;
import flash.net.*;
import flash.media.*;
public class Selector extends Sprite {
private var _lev:Number;// = 1
private var _xIncrementPos:Number;// = 40
private var _voiceUsed:Number;// = 0
private var _xmlList:XMLList;
private var _cardNum:Number;// = 0
private var _scoring:Scoring_counter;
private var _barLen:Number;// = 0
private var _art:MovieClip;
private var _bit1280:Bitmap;
private var _mainArt:MovieClip;
private var _soundtrackTrans:SoundTransform;
private var wallpaporiginX_1:Number;// = 0
private var wallpaporiginX_2:Number;// = 0
private var _boxClone:Class;
private var _cardsAr:Array;
private var _myXload:XmlQuickLoad;
private var _headOrigins:Object;
private var _crazyHeadTimer:Timer;
private var _cardCount:Number;// = 0
private var _speechTm:Timer;
private var _starterPoz:Object;
private var _headDelTm:Timer;
private var _bit1024:Bitmap;
private var _itemWidth:Number;// = 0
private var _floatingScoreArt:Array;
private var _soundTrackChannel:SoundChannel;
private var _sidePadding:Number;// = 0
private var _cardInc:uint;// = 0
public static const PAUSE_EVENT:String = "pause operations";
public static const CARDSIN_EVENT:String = "cards in";
public function Selector(_arg1:MovieClip){
_starterPoz = new Object();
_cardsAr = new Array();
_soundTrackChannel = new SoundChannel();
_soundtrackTrans = new SoundTransform();
_headOrigins = new Object();
_crazyHeadTimer = new Timer(10, 40);
super();
_mainArt = _arg1;
_mainArt.cheffy.starclip.alpha = 0;
_mainArt.cheffy.facecover.alpha = 0;
}
private function addArt(_arg1:Event):void{
_mainArt.addChild(_arg1.target.art);
}
private function shake():void{
_crazyHeadTimer.reset();
_crazyHeadTimer.start();
}
private function ot(_arg1:Event):void{
TweenFilterLite.to(_arg1.currentTarget, 0.5, {colorMatrixFilter:{brightness:1}});
}
private function setupWallpaper():void{
var _local1:Loader = new Loader();
trace(_xmlList.wallpaper.wallpaperThumb);
var _local2:String = String(_xmlList.wallpaper.wallpaperthumb);
_local1.load(new URLRequest(_local2));
_mainArt.wallpapermini.addChild(_local1);
_mainArt.overlay.mouseEnabled = false;
_mainArt.overlay.mouseChildren = false;
_mainArt.wall1280.alpha = 0;
_mainArt.wall1024.alpha = 0;
_mainArt.wall1280.buttonMode = true;
_mainArt.wall1280.addEventListener(MouseEvent.MOUSE_DOWN, wall_1280);
_mainArt.wall1280.addEventListener(MouseEvent.MOUSE_OVER, ovr);
_mainArt.wall1280.addEventListener(MouseEvent.MOUSE_OUT, ot);
_mainArt.wall1024.buttonMode = true;
_mainArt.wall1024.addEventListener(MouseEvent.MOUSE_DOWN, wall_1024);
_mainArt.wall1024.addEventListener(MouseEvent.MOUSE_OVER, ovr);
_mainArt.wall1024.addEventListener(MouseEvent.MOUSE_OUT, ot);
_mainArt.wall1280.x = (_mainArt.wall1280.x + 200);
_mainArt.wall1024.x = (_mainArt.wall1024.x + 200);
var _local3:Bitmap = BlenderButton.formBitmap(_mainArt.wall1280);
BlenderButton.addBlender(_local3);
var _local4:Bitmap = BlenderButton.formBitmap(_mainArt.wall1024);
BlenderButton.addBlender(_local4);
TweenLite.to(_mainArt.wall1280, 1, {alpha:1, x:wallpaporiginX_1});
TweenLite.to(_mainArt.wall1024, 1, {alpha:1, x:wallpaporiginX_2});
}
private function wall_1024(_arg1:Event):void{
LinkButtons.getUrl("./images/wallpapers/wall1024.html");
}
public function crazyHead(_arg1:Event):void{
var _local2:Sprite;
var _local3:Number = (Number(Number(Number((Math.random() * 5)))) / 1000);
var _local4:BlurFilter = new BlurFilter(Number((Math.random() * 30)), Number((Math.random() * 30)));
var _local5:Array = new Array();
_local5.push(_local4);
_headOrigins.head.filters = _local5;
_headOrigins.head.scaleX = (1 + _local3);
_headOrigins.head.scaleY = (1 + _local3);
_headOrigins.head.x = (_headOrigins.x + Number((-5 + Number(Math.round((Math.random() * 10))))));
_headOrigins.head.y = (_headOrigins.y + Number((-5 + Number(Math.round((Math.random() * 10))))));
}
private function setupScore():void{
_scoring = new Scoring_counter("000000000", _floatingScoreArt, _mainArt.scoreslot);
}
private function pause(_arg1:Event):void{
_headDelTm.stop();
_speechTm.stop();
adjustsoundTrackVolume(0);
dispatchEvent(new Event(PAUSE_EVENT, true));
var _local2:Number = 0;
while (_local2 < _cardsAr.length) {
_cardsAr[_local2].pause();
_local2++;
};
}
public function floatScore(_arg1:Event=null):void{
var _local2:Scoring_Floater = new Scoring_Floater("100", _floatingScoreArt, _arg1.currentTarget.art);
_scoring.addPoints(100);
}
public function init():void{
_starterPoz.x = _mainArt.box;
_itemWidth = (_mainArt.box.width + 30);
_mainArt.removeChild(_mainArt.box);
wallpaporiginX_1 = _mainArt.wall1280.x;
wallpaporiginX_2 = _mainArt.wall1024.x;
_myXload = new XmlQuickLoad("./xml/gamecards.xml");
_myXload.addEventListener(XmlQuickLoad.XMLREADY_EVENT, xmlReady);
_boxClone = Object(_mainArt.box).constructor;
_headOrigins = {head:_mainArt.cheffy, x:_mainArt.cheffy.x, y:_mainArt.cheffy.y};
_crazyHeadTimer.addEventListener(TimerEvent.TIMER, crazyHead);
_crazyHeadTimer.addEventListener(TimerEvent.TIMER_COMPLETE, returnHead);
_headDelTm = new Timer(6000);
_headDelTm.addEventListener(TimerEvent.TIMER, startHead);
_headDelTm.start();
var _local1:BitMapper = new BitMapper();
_art = new Main.numbas();
_floatingScoreArt = _local1.buildDataObject("floatScore", 1, 14, _art);
}
public function returnHead(_arg1:Event):void{
_mainArt.cheffy.facecover.alpha = 0;
TweenLite.to(_mainArt.cheffy.starclip, 3, {alpha:0});
var _local2:Array = new Array();
_headOrigins.head.filters = _local2;
_headOrigins.head.x = _headOrigins.x;
_headOrigins.head.y = _headOrigins.y;
_headOrigins.head.scaleX = 1;
_headOrigins.head.scaleY = 1;
}
private function dropCards():void{
var _local1:Timer = new Timer(300, _cardCount);
_local1.addEventListener(TimerEvent.TIMER, addCard);
_local1.addEventListener(TimerEvent.TIMER_COMPLETE, cardsAdded);
_local1.start();
}
private function wall_1280(_arg1:Event):void{
LinkButtons.getUrl("./images/wallpapers/wall1280.html");
}
public function resume():void{
_headDelTm.start();
_speechTm.reset();
_speechTm.start();
_voiceUsed = 0;
adjustsoundTrackVolume(1);
var _local1:Number = 0;
while (_local1 < _cardsAr.length) {
_cardsAr[_local1].resume();
_local1++;
};
}
private function xmlReady(_arg1:Event):void{
_xmlList = _arg1.target.list;
_cardCount = Number(_xmlList.gamecard.length());
if (_xmlList.gamecard.length() <= 5){
_barLen = ((Number((_itemWidth * _xmlList.gamecard.length())) + Number((20 * Number((_xmlList.gamecard.length() - 1))))) + ((_itemWidth / _xmlList.gamecard.length()) - 1));
} else {
_barLen = ((Number((_itemWidth * 5)) + Number((20 * 4))) + Number((_itemWidth / 4)));
};
_sidePadding = Number((Number((728 - _barLen)) / 2));
dropCards();
Main.soundDictionary["soundtrack"].soundTransform = _soundtrackTrans;
_soundTrackChannel = Main.soundDictionary["soundtrack"].play(0, 2000);
}
private function addCard(_arg1:Event):void{
if (_cardNum > 4){
_lev++;
_cardNum = (_cardNum - 5);
};
var _local2:Number = (_sidePadding + (Number(_itemWidth) * (_cardNum + 1)));
var _local3:Card = new Card(new _boxClone(), _local2, _xmlList.gamecard[_cardInc], _lev);
_local3.addEventListener(Card.CARDREADY_EVENT, addArt);
_local3.addEventListener(Card.PAUSESELECTOR_EVENT, pause);
_local3.addEventListener(Card.FLOATSCORE_EVENT, floatScore);
_cardsAr.push(_local3);
_cardInc++;
_cardNum++;
}
private function speak(_arg1:Event):void{
trace(("v" + _voiceUsed));
switch (_voiceUsed){
case 0:
break;
case 1:
break;
case 9:
adjustsoundTrackVolume(0);
break;
};
_voiceUsed++;
}
public function adjustsoundTrackVolume(_arg1:Number):void{
TweenLite.to(_soundtrackTrans, 2, {volume:_arg1, onUpdate:updateChannel});
}
private function cardsAdded(_arg1:Event):void{
_arg1.target.removeEventListener(TimerEvent.TIMER, addCard);
_arg1.target.removeEventListener(TimerEvent.TIMER_COMPLETE, cardsAdded);
setupWallpaper();
_speechTm = new Timer(10000, 9);
_speechTm.addEventListener(TimerEvent.TIMER, speak);
_speechTm.start();
setupScore();
dispatchEvent(new Event(CARDSIN_EVENT, true));
}
public function startHead(_arg1:Event):void{
_mainArt.cheffy.facecover.alpha = 1;
_mainArt.cheffy.starclip.alpha = 1;
TweenFilterLite.to(_mainArt.cheffy, 0.6, {colorMatrixFilter:{colorize:0xFF0000, amount:0.4}, onComplete:shake});
}
private function ovr(_arg1:Event):void{
TweenFilterLite.to(_arg1.currentTarget, 0.5, {colorMatrixFilter:{brightness:1.2}});
BlenderButton.animate((_arg1.currentTarget.getChildByName("masker") as MovieClip));
}
public function updateChannel():void{
_soundTrackChannel.soundTransform = _soundtrackTrans;
}
}
}//package com.utilities
Section 189
//XmlQuickLoad (com.utilities.XmlQuickLoad)
package com.utilities {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
public class XmlQuickLoad extends Sprite {
private var _xmlList:XMLList;
private var _xml:XML;
public static const XMLREADY_EVENT:String = " xml ready";
public function XmlQuickLoad(_arg1:String){
var _local2:URLLoader = new URLLoader();
_local2.dataFormat = URLLoaderDataFormat.TEXT;
_local2.addEventListener(Event.COMPLETE, handleComplete);
_local2.load(new URLRequest(_arg1));
}
private function handleComplete(_arg1:Event):void{
var event = _arg1;
try {
_xml = new XML(event.target.data);
_xmlList = new XMLList(_xml);
dispatchEvent(new Event(XMLREADY_EVENT, true));
} catch(e:TypeError) {
trace(e.message);
};
}
public function get list():XMLList{
return (_xmlList);
}
}
}//package com.utilities
Section 190
//Elastic (gs.easing.Elastic)
package gs.easing {
public class Elastic {
private static const _2PI:Number = 6.28318530717959;
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * 0.3);
};
if (((!(_arg5)) || ((_arg5 < Math.abs(_arg3))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
--_arg1;
return ((-(((_arg5 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6)))) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 == 2){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * (0.3 * 1.5));
};
if (((!(_arg5)) || ((_arg5 < Math.abs(_arg3))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
if (_arg1 < 1){
--_arg1;
return (((-0.5 * ((_arg5 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6)))) + _arg2));
};
--_arg1;
return ((((((_arg5 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6))) * 0.5) + _arg3) + _arg2));
}
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0):Number{
var _local7:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
if (!_arg6){
_arg6 = (_arg4 * 0.3);
};
if (((!(_arg5)) || ((_arg5 < Math.abs(_arg3))))){
_arg5 = _arg3;
_local7 = (_arg6 / 4);
} else {
_local7 = ((_arg6 / _2PI) * Math.asin((_arg3 / _arg5)));
};
return (((((_arg5 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * _2PI) / _arg6))) + _arg3) + _arg2));
}
}
}//package gs.easing
Section 191
//Linear (gs.easing.Linear)
package gs.easing {
public class Linear {
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
public static function easeNone(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
}
}//package gs.easing
Section 192
//TweenFilterLite (gs.TweenFilterLite)
package gs {
import flash.display.*;
import flash.filters.*;
public class TweenFilterLite extends TweenLite {
private var _matrix:Array;
private var _hf:Boolean;// = false
private var _cmf:ColorMatrixFilter;
private var _filters:Array;
private var _endMatrix:Array;
private var _clrsa:Array;
public static var defaultEase:Function = TweenLite.defaultEase;
private static var _idMatrix:Array = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
private static var _lumB:Number = 0.072169;
public static var version:Number = 7.14;
public static var delayedCall:Function = TweenLite.delayedCall;
public static var killTweensOf:Function = TweenLite.killTweensOf;
private static var _lumG:Number = 0.71516;
public static var killDelayedCallsTo:Function = TweenLite.killTweensOf;
private static var _lumR:Number = 0.212671;
public function TweenFilterLite(_arg1:Object, _arg2:Number, _arg3:Object){
_filters = [];
super(_arg1, _arg2, _arg3);
if ((((TweenLite.version < 6.23)) || (isNaN(TweenLite.version)))){
trace("ERROR! Please update your TweenLite class or try deleting your ASO files. TweenFilterLite requires a more recent version. Download updates at http://www.TweenLite.com.");
};
if (_arg3.type != undefined){
trace((("TweenFilterLite error: " + _arg1) + " is using deprecated syntax. Please update to the new syntax. See http://www.TweenFilterLite.com for details."));
};
}
override public function initTweenVals(_arg1:Boolean=false, _arg2:String=""):void{
var _local3:int;
var _local4:Object;
var _local5:Object;
var _local6:Object;
_clrsa = [];
_filters = [];
_matrix = _idMatrix.slice();
_arg2 = (_arg2 + " blurFilter glowFilter colorMatrixFilter dropShadowFilter bevelFilter ");
if ((this.target is DisplayObject)){
if (this.vars.blurFilter != undefined){
_local4 = this.vars.blurFilter;
addFilter("blur", _local4, BlurFilter, ["blurX", "blurY", "quality"], new BlurFilter(0, 0, ((_local4.quality) || (2))));
};
if (this.vars.glowFilter != undefined){
_local4 = this.vars.glowFilter;
addFilter("glow", _local4, GlowFilter, ["alpha", "blurX", "blurY", "color", "quality", "strength", "inner", "knockout"], new GlowFilter(0xFFFFFF, 0, 0, 0, ((_local4.strength) || (1)), ((_local4.quality) || (2)), _local4.inner, _local4.knockout));
};
if (this.vars.colorMatrixFilter != undefined){
_local4 = this.vars.colorMatrixFilter;
_local5 = addFilter("colorMatrix", _local4, ColorMatrixFilter, [], new ColorMatrixFilter(_matrix));
_cmf = _local5.filter;
_matrix = ColorMatrixFilter(_cmf).matrix;
if (((!((_local4.matrix == undefined))) && ((_local4.matrix is Array)))){
_endMatrix = _local4.matrix;
} else {
if (_local4.relative == true){
_endMatrix = _matrix.slice();
} else {
_endMatrix = _idMatrix.slice();
};
_endMatrix = setBrightness(_endMatrix, _local4.brightness);
_endMatrix = setContrast(_endMatrix, _local4.contrast);
_endMatrix = setHue(_endMatrix, _local4.hue);
_endMatrix = setSaturation(_endMatrix, _local4.saturation);
_endMatrix = setThreshold(_endMatrix, _local4.threshold);
if (!isNaN(_local4.colorize)){
_endMatrix = colorize(_endMatrix, _local4.colorize, _local4.amount);
} else {
if (!isNaN(_local4.color)){
_endMatrix = colorize(_endMatrix, _local4.color, _local4.amount);
};
};
};
_local3 = 0;
while (_local3 < _endMatrix.length) {
if (((!((_matrix[_local3] == _endMatrix[_local3]))) && (!((_matrix[_local3] == undefined))))){
this.tweens.push({o:_matrix, p:_local3.toString(), s:_matrix[_local3], c:(_endMatrix[_local3] - _matrix[_local3])});
};
_local3++;
};
};
if (this.vars.dropShadowFilter != undefined){
_local4 = this.vars.dropShadowFilter;
addFilter("dropShadow", _local4, DropShadowFilter, ["alpha", "angle", "blurX", "blurY", "color", "distance", "quality", "strength", "inner", "knockout", "hideObject"], new DropShadowFilter(0, 45, 0, 0, 0, 0, 1, ((_local4.quality) || (2)), _local4.inner, _local4.knockout, _local4.hideObject));
};
if (this.vars.bevelFilter != undefined){
_local4 = this.vars.bevelFilter;
addFilter("bevel", _local4, BevelFilter, ["angle", "blurX", "blurY", "distance", "highlightAlpha", "highlightColor", "quality", "shadowAlpha", "shadowColor", "strength"], new BevelFilter(0, 0, 0xFFFFFF, 0.5, 0, 0.5, 2, 2, 0, ((_local4.quality) || (2))));
};
if (this.vars.runBackwards == true){
_local3 = (_clrsa.length - 1);
while (_local3 > -1) {
_local6 = _clrsa[_local3];
_clrsa[_local3].sr = (_local6.sr + _local6.cr);
_local6.cr = (_local6.cr * -1);
_local6.sg = (_local6.sg + _local6.cg);
_local6.cg = (_local6.cg * -1);
_local6.sb = (_local6.sb + _local6.cb);
_local6.cb = (_local6.cb * -1);
_local6.f[_local6.p] = (((_local6.sr << 16) | (_local6.sg << 8)) | _local6.sb);
_local3--;
};
};
super.initTweenVals(true, _arg2);
} else {
super.initTweenVals(_arg1, _arg2);
};
}
override public function render(_arg1:uint):void{
var _local3:Number;
var _local4:Object;
var _local5:int;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:int;
var _local10:Array;
var _local2:Number = ((_arg1 - this.startTime) / 1000);
if (_local2 >= this.duration){
_local2 = this.duration;
_local3 = 1;
} else {
_local3 = this.vars.ease(_local2, 0, 1, this.duration);
};
_local5 = (this.tweens.length - 1);
while (_local5 > -1) {
_local4 = this.tweens[_local5];
_local4.o[_local4.p] = (_local4.s + (_local3 * _local4.c));
_local5--;
};
if (_hf){
_local5 = (_clrsa.length - 1);
while (_local5 > -1) {
_local4 = _clrsa[_local5];
_local6 = (_local4.sr + (_local3 * _local4.cr));
_local7 = (_local4.sg + (_local3 * _local4.cg));
_local8 = (_local4.sb + (_local3 * _local4.cb));
_local4.f[_local4.p] = (((_local6 << 16) | (_local7 << 8)) | _local8);
_local5--;
};
if (_cmf != null){
ColorMatrixFilter(_cmf).matrix = _matrix;
};
_local10 = this.target.filters;
_local5 = 0;
while (_local5 < _filters.length) {
_local9 = (_local10.length - 1);
while (_local9 > -1) {
if ((_local10[_local9] is _filters[_local5].type)){
_local10.splice(_local9, 1, _filters[_local5].filter);
break;
};
_local9--;
};
_local5++;
};
this.target.filters = _local10;
};
if (_hst){
_local5 = (_subTweens.length - 1);
while (_local5 > -1) {
_subTweens[_local5].proxy(_subTweens[_local5]);
_local5--;
};
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(this.vars.onUpdateScope, this.vars.onUpdateParams);
};
if (_local2 == this.duration){
super.complete(true);
};
}
public function HEXtoRGB(_arg1:Number):Object{
return ({rb:(_arg1 >> 16), gb:((_arg1 >> 8) & 0xFF), bb:(_arg1 & 0xFF)});
}
private function addFilter(_arg1:String, _arg2:Object, _arg3:Class, _arg4:Array, _arg5:BitmapFilter):Object{
var _local8:int;
var _local9:String;
var _local10:Number;
var _local11:Object;
var _local12:Object;
var _local6:Object = {type:_arg3};
var _local7:Array = this.target.filters;
_local8 = 0;
while (_local8 < _local7.length) {
if ((_local7[_local8] is _arg3)){
_local6.filter = _local7[_local8];
break;
};
_local8++;
};
if (_local6.filter == undefined){
_local6.filter = _arg5;
_local7.push(_local6.filter);
this.target.filters = _local7;
};
_local8 = 0;
while (_local8 < _arg4.length) {
_local9 = _arg4[_local8];
if (_arg2[_local9] != undefined){
if ((((((_local9 == "color")) || ((_local9 == "highlightColor")))) || ((_local9 == "shadowColor")))){
_local11 = HEXtoRGB(_local6.filter[_local9]);
_local12 = HEXtoRGB(_arg2[_local9]);
_clrsa.push({f:_local6.filter, p:_local9, sr:_local11.rb, cr:(_local12.rb - _local11.rb), sg:_local11.gb, cg:(_local12.gb - _local11.gb), sb:_local11.bb, cb:(_local12.bb - _local11.bb)});
} else {
if ((((((((_local9 == "quality")) || ((_local9 == "inner")))) || ((_local9 == "knockout")))) || ((_local9 == "hideObject")))){
_local6.filter[_local9] = _arg2[_local9];
} else {
if (typeof(_arg2[_local9]) == "number"){
_local10 = (_arg2[_local9] - _local6.filter[_local9]);
} else {
_local10 = Number(_arg2[_local9]);
};
this.tweens.push({o:_local6.filter, p:_local9, s:_local6.filter[_local9], c:_local10});
};
};
};
_local8++;
};
_filters.push(_local6);
_hf = true;
return (_local6);
}
public static function setContrast(_arg1:Array, _arg2:Number):Array{
if (isNaN(_arg2)){
return (_arg1);
};
_arg2 = (_arg2 + 0.01);
var _local3:Array = [_arg2, 0, 0, 0, (128 * (1 - _arg2)), 0, _arg2, 0, 0, (128 * (1 - _arg2)), 0, 0, _arg2, 0, (128 * (1 - _arg2)), 0, 0, 0, 1, 0];
return (applyMatrix(_local3, _arg1));
}
public static function colorize(_arg1:Array, _arg2:Number, _arg3:Number=100):Array{
if (isNaN(_arg2)){
return (_arg1);
};
if (isNaN(_arg3)){
_arg3 = 1;
};
var _local4:Number = (((_arg2 >> 16) & 0xFF) / 0xFF);
var _local5:Number = (((_arg2 >> 8) & 0xFF) / 0xFF);
var _local6:Number = ((_arg2 & 0xFF) / 0xFF);
var _local7:Number = (1 - _arg3);
var _local8:Array = [(_local7 + ((_arg3 * _local4) * _lumR)), ((_arg3 * _local4) * _lumG), ((_arg3 * _local4) * _lumB), 0, 0, ((_arg3 * _local5) * _lumR), (_local7 + ((_arg3 * _local5) * _lumG)), ((_arg3 * _local5) * _lumB), 0, 0, ((_arg3 * _local6) * _lumR), ((_arg3 * _local6) * _lumG), (_local7 + ((_arg3 * _local6) * _lumB)), 0, 0, 0, 0, 0, 1, 0];
return (applyMatrix(_local8, _arg1));
}
public static function setBrightness(_arg1:Array, _arg2:Number):Array{
if (isNaN(_arg2)){
return (_arg1);
};
_arg2 = ((_arg2 * 100) - 100);
return (applyMatrix([1, 0, 0, 0, _arg2, 0, 1, 0, 0, _arg2, 0, 0, 1, 0, _arg2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _arg1));
}
public static function setSaturation(_arg1:Array, _arg2:Number):Array{
if (isNaN(_arg2)){
return (_arg1);
};
var _local3:Number = (1 - _arg2);
var _local4:Number = (_local3 * _lumR);
var _local5:Number = (_local3 * _lumG);
var _local6:Number = (_local3 * _lumB);
var _local7:Array = [(_local4 + _arg2), _local5, _local6, 0, 0, _local4, (_local5 + _arg2), _local6, 0, 0, _local4, _local5, (_local6 + _arg2), 0, 0, 0, 0, 0, 1, 0];
return (applyMatrix(_local7, _arg1));
}
public static function applyMatrix(_arg1:Array, _arg2:Array):Array{
var _local6:int;
var _local7:int;
if (((!((_arg1 is Array))) || (!((_arg2 is Array))))){
return (_arg2);
};
var _local3:Array = [];
var _local4:int;
var _local5:int;
_local6 = 0;
while (_local6 < 4) {
_local7 = 0;
while (_local7 < 5) {
if (_local7 == 4){
_local5 = _arg1[(_local4 + 4)];
} else {
_local5 = 0;
};
_local3[(_local4 + _local7)] = (((((_arg1[_local4] * _arg2[_local7]) + (_arg1[(_local4 + 1)] * _arg2[(_local7 + 5)])) + (_arg1[(_local4 + 2)] * _arg2[(_local7 + 10)])) + (_arg1[(_local4 + 3)] * _arg2[(_local7 + 15)])) + _local5);
_local7++;
};
_local4 = (_local4 + 5);
_local6++;
};
return (_local3);
}
public static function from(_arg1:Object, _arg2:Number, _arg3:Object):TweenFilterLite{
_arg3.runBackwards = true;
return (new TweenFilterLite(_arg1, _arg2, _arg3));
}
public static function setThreshold(_arg1:Array, _arg2:Number):Array{
if (isNaN(_arg2)){
return (_arg1);
};
var _local3:Array = [(_lumR * 0x0100), (_lumG * 0x0100), (_lumB * 0x0100), 0, (-256 * _arg2), (_lumR * 0x0100), (_lumG * 0x0100), (_lumB * 0x0100), 0, (-256 * _arg2), (_lumR * 0x0100), (_lumG * 0x0100), (_lumB * 0x0100), 0, (-256 * _arg2), 0, 0, 0, 1, 0];
return (applyMatrix(_local3, _arg1));
}
public static function setHue(_arg1:Array, _arg2:Number):Array{
if (isNaN(_arg2)){
return (_arg1);
};
_arg2 = (_arg2 * (Math.PI / 180));
var _local3:Number = Math.cos(_arg2);
var _local4:Number = Math.sin(_arg2);
var _local5:Array = [((_lumR + (_local3 * (1 - _lumR))) + (_local4 * -(_lumR))), ((_lumG + (_local3 * -(_lumG))) + (_local4 * -(_lumG))), ((_lumB + (_local3 * -(_lumB))) + (_local4 * (1 - _lumB))), 0, 0, ((_lumR + (_local3 * -(_lumR))) + (_local4 * 0.143)), ((_lumG + (_local3 * (1 - _lumG))) + (_local4 * 0.14)), ((_lumB + (_local3 * -(_lumB))) + (_local4 * -0.283)), 0, 0, ((_lumR + (_local3 * -(_lumR))) + (_local4 * -((1 - _lumR)))), ((_lumG + (_local3 * -(_lumG))) + (_local4 * _lumG)), ((_lumB + (_local3 * (1 - _lumB))) + (_local4 * _lumB)), 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];
return (applyMatrix(_local5, _arg1));
}
public static function to(_arg1:Object, _arg2:Number, _arg3:Object):TweenFilterLite{
return (new TweenFilterLite(_arg1, _arg2, _arg3));
}
}
}//package gs
Section 193
//TweenLite (gs.TweenLite)
package gs {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.media.*;
public class TweenLite {
public var delay:Number;
protected var _initted:Boolean;
protected var _subTweens:Array;
public var startTime:int;
public var target:Object;
public var duration:Number;
protected var _hst:Boolean;
protected var _active:Boolean;
public var tweens:Array;
public var vars:Object;
public var initTime:int;
private static var _timer:Timer = new Timer(2000);
private static var _classInitted:Boolean;
public static var defaultEase:Function = TweenLite.easeOut;
public static var version:Number = 6.23;
private static var _sprite:Sprite = new Sprite();
protected static var _all:Dictionary = new Dictionary();
public static var killDelayedCallsTo:Function = killTweensOf;
protected static var _curTime:uint;
private static var _listening:Boolean;
public function TweenLite(_arg1:Object, _arg2:Number, _arg3:Object){
if (_arg1 == null){
return;
};
if (((((!((_arg3.overwrite == false))) && (!((_arg1 == null))))) || ((_all[_arg1] == undefined)))){
delete _all[_arg1];
_all[_arg1] = new Dictionary();
};
_all[_arg1][this] = this;
this.vars = _arg3;
this.duration = ((_arg2) || (0.001));
this.delay = ((_arg3.delay) || (0));
this.target = _arg1;
if (!(this.vars.ease is Function)){
this.vars.ease = defaultEase;
};
if (this.vars.easeParams != null){
this.vars.proxiedEase = this.vars.ease;
this.vars.ease = easeProxy;
};
if (!isNaN(Number(this.vars.autoAlpha))){
this.vars.alpha = Number(this.vars.autoAlpha);
};
this.tweens = [];
_subTweens = [];
_hst = (_initted = false);
_active = (((_arg2 == 0)) && ((this.delay == 0)));
if (!_classInitted){
_curTime = getTimer();
_sprite.addEventListener(Event.ENTER_FRAME, executeAll);
_classInitted = true;
};
this.initTime = _curTime;
if ((((((this.vars.runBackwards == true)) && (!((this.vars.renderOnStart == true))))) || (_active))){
initTweenVals();
this.startTime = _curTime;
if (_active){
render((this.startTime + 1));
} else {
render(this.startTime);
};
};
if (((!(_listening)) && (!(_active)))){
_timer.addEventListener("timer", killGarbage);
_timer.start();
_listening = true;
};
}
protected function addSubTween(_arg1:Function, _arg2:Object, _arg3:Object, _arg4:Object=null):void{
var _local6:String;
var _local5:Object = {proxy:_arg1, target:_arg2, info:_arg4};
_subTweens.push(_local5);
for (_local6 in _arg3) {
if (typeof(_arg3[_local6]) == "number"){
this.tweens.push({o:_arg2, p:_local6, s:_arg2[_local6], c:(_arg3[_local6] - _arg2[_local6]), sub:_local5});
} else {
this.tweens.push({o:_arg2, p:_local6, s:_arg2[_local6], c:Number(_arg3[_local6]), sub:_local5});
};
};
_hst = true;
}
public function initTweenVals(_arg1:Boolean=false, _arg2:String=""):void{
var _local4:String;
var _local5:int;
var _local6:Array;
var _local7:ColorTransform;
var _local8:ColorTransform;
var _local9:Object;
var _local3 = (this.target is DisplayObject);
if ((this.target is Array)){
_local6 = ((this.vars.endArray) || ([]));
_local5 = 0;
while (_local5 < _local6.length) {
if (((!((this.target[_local5] == _local6[_local5]))) && (!((this.target[_local5] == undefined))))){
this.tweens.push({o:this.target, p:_local5.toString(), s:this.target[_local5], c:(_local6[_local5] - this.target[_local5])});
};
_local5++;
};
} else {
for (_local4 in this.vars) {
if ((((((((((((((((((((((((((((((((((((_local4 == "ease")) || ((_local4 == "delay")))) || ((_local4 == "overwrite")))) || ((_local4 == "onComplete")))) || ((_local4 == "onCompleteParams")))) || ((_local4 == "onCompleteScope")))) || ((_local4 == "runBackwards")))) || ((_local4 == "onUpdate")))) || ((_local4 == "onUpdateParams")))) || ((_local4 == "onUpdateScope")))) || ((_local4 == "autoAlpha")))) || ((_local4 == "onStart")))) || ((_local4 == "onStartParams")))) || ((_local4 == "onStartScope")))) || ((_local4 == "renderOnStart")))) || ((_local4 == "proxiedEase")))) || ((_local4 == "easeParams")))) || (((_arg1) && (!((_arg2.indexOf(((" " + _local4) + " ")) == -1))))))){
} else {
if ((((_local4 == "tint")) && (_local3))){
_local7 = this.target.transform.colorTransform;
_local8 = new ColorTransform();
if (this.vars.alpha != undefined){
_local8.alphaMultiplier = this.vars.alpha;
delete this.vars.alpha;
_local5 = (this.tweens.length - 1);
while (_local5 > -1) {
if (this.tweens[_local5].p == "alpha"){
this.tweens.splice(_local5, 1);
break;
};
_local5--;
};
} else {
_local8.alphaMultiplier = this.target.alpha;
};
if (((((!((this.vars[_local4] == null))) && (!((this.vars[_local4] == ""))))) || ((this.vars[_local4] == 0)))){
_local8.color = this.vars[_local4];
};
addSubTween(tintProxy, {progress:0}, {progress:1}, {target:this.target, color:_local7, endColor:_local8});
} else {
if ((((_local4 == "frame")) && (_local3))){
addSubTween(frameProxy, {frame:this.target.currentFrame}, {frame:this.vars[_local4]}, {target:this.target});
} else {
if ((((_local4 == "volume")) && (((_local3) || ((this.target is SoundChannel)))))){
addSubTween(volumeProxy, this.target.soundTransform, {volume:this.vars[_local4]}, {target:this.target});
} else {
if (typeof(this.vars[_local4]) == "number"){
this.tweens.push({o:this.target, p:_local4, s:this.target[_local4], c:(this.vars[_local4] - this.target[_local4])});
} else {
this.tweens.push({o:this.target, p:_local4, s:this.target[_local4], c:Number(this.vars[_local4])});
};
};
};
};
};
};
};
if (this.vars.runBackwards == true){
_local5 = (this.tweens.length - 1);
while (_local5 > -1) {
_local9 = this.tweens[_local5];
this.tweens[_local5].s = (_local9.s + _local9.c);
_local9.c = (_local9.c * -1);
_local5--;
};
};
if (typeof(this.vars.autoAlpha) == "number"){
this.target.visible = !((((this.vars.runBackwards == true)) && ((this.target.alpha == 0))));
};
_initted = true;
}
public function get active():Boolean{
if (_active){
return (true);
};
if (((_curTime - this.initTime) / 1000) > this.delay){
_active = true;
this.startTime = (this.initTime + (this.delay * 1000));
if (!_initted){
initTweenVals();
} else {
if (typeof(this.vars.autoAlpha) == "number"){
this.target.visible = true;
};
};
if (this.vars.onStart != null){
this.vars.onStart.apply(this.vars.onStartScope, this.vars.onStartParams);
};
if (this.duration == 0.001){
this.startTime = (this.startTime - 1);
};
return (true);
//unresolved jump
};
return (false);
}
public function render(_arg1:uint):void{
var _local3:Number;
var _local4:Object;
var _local5:int;
var _local2:Number = ((_arg1 - this.startTime) / 1000);
if (_local2 >= this.duration){
_local2 = this.duration;
_local3 = 1;
} else {
_local3 = this.vars.ease(_local2, 0, 1, this.duration);
};
_local5 = (this.tweens.length - 1);
while (_local5 > -1) {
_local4 = this.tweens[_local5];
_local4.o[_local4.p] = (_local4.s + (_local3 * _local4.c));
_local5--;
};
if (_hst){
_local5 = (_subTweens.length - 1);
while (_local5 > -1) {
_subTweens[_local5].proxy(_subTweens[_local5]);
_local5--;
};
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(this.vars.onUpdateScope, this.vars.onUpdateParams);
};
if (_local2 == this.duration){
complete(true);
};
}
protected function easeProxy(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return (this.vars.proxiedEase.apply(null, arguments.concat(this.vars.easeParams)));
}
public function complete(_arg1:Boolean=false):void{
if (!_arg1){
if (!_initted){
initTweenVals();
};
this.startTime = (_curTime - (this.duration * 1000));
render(_curTime);
return;
};
if ((((typeof(this.vars.autoAlpha) == "number")) && ((this.target.alpha == 0)))){
this.target.visible = false;
};
if (this.vars.onComplete != null){
this.vars.onComplete.apply(this.vars.onCompleteScope, this.vars.onCompleteParams);
};
removeTween(this);
}
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
return ((((-(_arg3) * _arg1) * (_arg1 - 2)) + _arg2));
}
public static function frameProxy(_arg1:Object):void{
_arg1.info.target.gotoAndStop(Math.round(_arg1.target.frame));
}
public static function removeTween(_arg1:TweenLite=null):void{
if (((!((_arg1 == null))) && (!((_all[_arg1.target] == undefined))))){
delete _all[_arg1.target][_arg1];
};
}
public static function killTweensOf(_arg1:Object=null, _arg2:Boolean=false):void{
var _local3:Object;
var _local4:*;
if (((!((_arg1 == null))) && (!((_all[_arg1] == undefined))))){
if (_arg2){
_local3 = _all[_arg1];
for (_local4 in _local3) {
_local3[_local4].complete(false);
};
};
delete _all[_arg1];
};
}
public static function delayedCall(_arg1:Number, _arg2:Function, _arg3:Array=null, _arg4=null):TweenLite{
return (new TweenLite(_arg2, 0, {delay:_arg1, onComplete:_arg2, onCompleteParams:_arg3, onCompleteScope:_arg4, overwrite:false}));
}
public static function from(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
_arg3.runBackwards = true;
return (new TweenLite(_arg1, _arg2, _arg3));
}
public static function executeAll(_arg1:Event=null):void{
var _local3:Dictionary;
var _local4:Object;
var _local5:Object;
var _local2:uint = (_curTime = getTimer());
if (_listening){
_local3 = _all;
for each (_local4 in _local3) {
for (_local5 in _local4) {
if (((!((_local4[_local5] == undefined))) && (_local4[_local5].active))){
_local4[_local5].render(_local2);
};
};
};
};
}
public static function volumeProxy(_arg1:Object):void{
_arg1.info.target.soundTransform = _arg1.target;
}
public static function killGarbage(_arg1:TimerEvent):void{
var _local3:Boolean;
var _local4:Object;
var _local5:Object;
var _local6:Object;
var _local2:uint;
for (_local4 in _all) {
_local3 = false;
for (_local5 in _all[_local4]) {
_local3 = true;
break;
};
if (!_local3){
delete _all[_local4];
} else {
_local2++;
};
};
if (_local2 == 0){
_timer.removeEventListener("timer", killGarbage);
_timer.stop();
_listening = false;
};
}
public static function tintProxy(_arg1:Object):void{
var _local2:Number = _arg1.target.progress;
var _local3:Number = (1 - _local2);
var _local4:Object = _arg1.info.color;
var _local5:Object = _arg1.info.endColor;
_arg1.info.target.transform.colorTransform = new ColorTransform(((_local4.redMultiplier * _local3) + (_local5.redMultiplier * _local2)), ((_local4.greenMultiplier * _local3) + (_local5.greenMultiplier * _local2)), ((_local4.blueMultiplier * _local3) + (_local5.blueMultiplier * _local2)), ((_local4.alphaMultiplier * _local3) + (_local5.alphaMultiplier * _local2)), ((_local4.redOffset * _local3) + (_local5.redOffset * _local2)), ((_local4.greenOffset * _local3) + (_local5.greenOffset * _local2)), ((_local4.blueOffset * _local3) + (_local5.blueOffset * _local2)), ((_local4.alphaOffset * _local3) + (_local5.alphaOffset * _local2)));
}
public static function to(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
return (new TweenLite(_arg1, _arg2, _arg3));
}
}
}//package gs
Section 194
//ByteArrayAsset (mx.core.ByteArrayAsset)
package mx.core {
import flash.utils.*;
public class ByteArrayAsset extends ByteArray implements IFlexAsset {
mx_internal static const VERSION:String = "3.4.0.9271";
}
}//package mx.core
Section 195
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 196
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 197
//Main (Main)
package {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.text.*;
import com.utilities.*;
import com.core.*;
import flash.media.*;
public class Main extends Sprite {
private var _gameXml:XML;
private var _lid:Lid;
private var _forkaPedeYlocAr:Array;
private var _scrollInc:Number;// = 0
private var _forkY:Number;// = 80
private var _scrollArea:MovieClip;
private var _forkapedeYInc:Number;// = 0
private var _gameStartScreen:MovieClip;
private var _explodeArt:Class;
public var gameFrame:Class;
private var _gameManager:GameManager;
private var _Fdir:String;
private var _windowType:String;
private var _gamestarterScreen:GameStartScreen;
private var _mainArt:MovieClip;
private var _debug:Boolean;// = false
private var _forkSpeed:Number;
private var _selector:Selector;
public static var baconSkin:Class;
public static var minibead:Class;
public static var soundDictionary:Dictionary = new Dictionary();
public static var minilettuce:Class;
public static var hitCycle:MovieClip;
public static var breadSkin:Class;
public static var _waffleTexture:Class;
public static var hud1:MovieClip;
public static var hud2:MovieClip;
public static var minitomato:Class;
public static var tomatoSkin:Class;
public static var hamSkin:Class;
public static var miniInstruct:MovieClip;
public static var messages:Class;
public static var cuttingSkin:MovieClip;
public static var numbas:Class;
public static var topDogTextF:TextField;
public static var cursor:Sprite;
public static var lettuceSkin:Class;
public static var whiteTiles:Class;
public static var woodTiles:Class;
public static var minihash:Class;
public static var minibacon:Class;
public static var cheeseSkin:Class;
public static var pickleSkin:Class;
public static var mainMixerTransform:SoundTransform = new SoundTransform();
public static var sardineSkin:Class;
public function Main():void{
gameFrame = Main_gameFrame;
_forkaPedeYlocAr = new Array(20, 95, 130, 170);
_forkSpeed = (0.2 + (Math.random() * 2));
super();
if (stage){
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init);
};
}
private function gamelevelEnd(_arg1:Event):void{
_windowType = _arg1.target.windowType;
var _local2:Object = new Object();
_local2 = {mainScore:_arg1.target.holdScore, pointScore:_arg1.target.pointScore, timeScore:_arg1.target.timeScore};
trace(("WINDOWTYPE" + _windowType));
addChild(_gamestarterScreen.addArt(_windowType, _local2));
soundDictionary["levelup"].play();
}
private function startScreeninit(_arg1:Event=null):void{
var _local2:Timer;
if (!_debug){
addChild(_gamestarterScreen.addArt("start"));
_gamestarterScreen.showPlay = false;
_gameManager.initViewsContent();
cursor.addChildAt(hitCycle, 0);
hitCycle.mouseEnabled = false;
hitCycle.inner.gotoAndStop(1);
addChild(cursor);
} else {
_local2 = new Timer(500, 1);
_local2.addEventListener(TimerEvent.TIMER_COMPLETE, debugAdd);
_local2.start();
};
}
private function gameEnd(_arg1:Event):void{
}
public function mouseMoveHandler(_arg1:MouseEvent):void{
cursor.x = (_arg1.stageX - ((cursor.width / 4) + 2));
cursor.y = ((_arg1.stageY - (cursor.height / 4)) + 2);
}
private function resume(_arg1:Event):void{
}
private function debugAdd(_arg1:Event):void{
addChild(_gamestarterScreen.addArt("start"));
cursor.addChild(hitCycle);
_gameManager.initViewsContent();
}
private function init(_arg1:Event=null):void{
removeEventListener(Event.ADDED_TO_STAGE, init);
trace("startup selector");
var _local2:EmbedSecure = new EmbedSecure(gameFrame);
_local2.addEventListener(EmbedSecure.ARTREADY_EVENT, addSelector);
}
private function emailz(_arg1:Event):void{
LinkButtons.getUrlSelf("mailto:info@munchiegames.com ?subject=custom games/branding/skinning questions");
}
private function addSelector(_arg1:Event):void{
var _local46:Cartoon;
var _local2:Class = _arg1.target.grabClass("hud1");
hud1 = new (_local2);
var _local3:Class = _arg1.target.grabClass("hud2");
hud2 = new (_local3);
whiteTiles = _arg1.target.grabClass("tiles_white");
woodTiles = _arg1.target.grabClass("woodys");
_waffleTexture = _arg1.target.grabClass("waff");
var _local4:Class = _arg1.target.grabClass("cartoon");
var _local5:MovieClip = new (_local4);
var _local6:Class = _arg1.target.grabClass("mainModule");
var _local7:MovieClip = new (_local6);
_mainArt = _local7;
_local7.frm.muter.buttonMode = true;
_local7.frm.muter.addEventListener(MouseEvent.MOUSE_DOWN, muterz);
_local7.addChild(_local7.frm.muter);
var _local8:Class = _arg1.target.grabClass("gamestartscreen");
_gameStartScreen = new (_local8);
var _local9:Class = _arg1.target.grabClass("lid");
var _local10:MovieClip = new (_local9);
_lid = new Lid(_local10);
_local7.frm.topdog.text = Preloader.hotshot;
_lid.addEventListener(Lid.RESUME_EVENT, resume);
var _local11:Class = _arg1.target.grabClass("sndtrack");
var _local12:Sound = new (_local11);
soundDictionary["soundtrack"] = _local12;
var _local13:Class = _arg1.target.grabClass("coin1");
var _local14:Sound = new (_local13);
soundDictionary["coin"] = _local14;
var _local15:Class = _arg1.target.grabClass("play");
var _local16:Sound = new (_local15);
soundDictionary["play"] = _local16;
var _local17:Class = _arg1.target.grabClass("go");
var _local18:Sound = new (_local17);
soundDictionary["go"] = _local18;
var _local19:Class = _arg1.target.grabClass("back");
var _local20:Sound = new (_local19);
soundDictionary["back"] = _local20;
var _local21:Class = _arg1.target.grabClass("blip");
var _local22:Sound = new (_local21);
soundDictionary["blip"] = _local22;
var _local23:Class = _arg1.target.grabClass("bubblehit");
var _local24:Sound = new (_local23);
soundDictionary["bubble"] = _local24;
var _local25:Class = _arg1.target.grabClass("maxpoints");
var _local26:Sound = new (_local25);
soundDictionary["maxpoints"] = _local26;
var _local27:Class = _arg1.target.grabClass("correct");
var _local28:Sound = new (_local27);
soundDictionary["correct"] = _local28;
var _local29:Class = _arg1.target.grabClass("sandComplete");
var _local30:Sound = new (_local29);
soundDictionary["sndwichComplete"] = _local30;
var _local31:Class = _arg1.target.grabClass("goodsandwich");
var _local32:Sound = new (_local31);
soundDictionary["goodsandwich"] = _local32;
var _local33:Class = _arg1.target.grabClass("fixin");
var _local34:Sound = new (_local33);
soundDictionary["fixin"] = _local34;
var _local35:Class = _arg1.target.grabClass("levelup");
var _local36:Sound = new (_local35);
soundDictionary["levelup"] = _local36;
var _local37:Class = _arg1.target.grabClass("corktile");
numbas = _arg1.target.grabClass("numbas");
messages = _arg1.target.grabClass("messaging");
var _local38:Class = _arg1.target.grabClass("mainfinger");
var _local39:Class = _arg1.target.grabClass("hitCycle");
hitCycle = new (_local39);
var _local40:Class = _arg1.target.grabClass("miniInstruct");
miniInstruct = new (_local40);
var _local41:Class = _arg1.target.grabClass("bigpoints");
var _local42:Sound = new (_local41);
soundDictionary["bigpoints"] = _local42;
var _local43:Class = _arg1.target.grabClass("midpoints");
var _local44:Sound = new (_local43);
soundDictionary["midpoints"] = _local44;
cursor = new (_local38);
cursor.visible = false;
addChild(_local7);
var _local45:Class = _arg1.target.grabClass("cuttingskin");
tomatoSkin = _arg1.target.grabClass("tomatotexter");
baconSkin = _arg1.target.grabClass("bacontexture");
lettuceSkin = _arg1.target.grabClass("lettucetexture");
breadSkin = _arg1.target.grabClass("toasttexter");
cuttingSkin = new (_local45);
pickleSkin = _arg1.target.grabClass("pickletexture");
sardineSkin = _arg1.target.grabClass("sardinetexture");
hamSkin = _arg1.target.grabClass("hamtexture");
cheeseSkin = _arg1.target.grabClass("cheesetexture");
minibacon = _arg1.target.grabClass("minis_bacon");
minihash = _arg1.target.grabClass("minis_hashbrown");
minilettuce = _arg1.target.grabClass("minis_lettuce");
minitomato = _arg1.target.grabClass("minis_tomato");
minibead = _arg1.target.grabClass("minis_bread");
if (!_debug){
addChild(_local5);
_local46 = new Cartoon(_local5);
_local46.addEventListener(Cartoon.CARTOONDONE_EVENT, startScreeninit);
} else {
startScreeninit();
};
_gamestarterScreen = new GameStartScreen(_gameStartScreen);
_gamestarterScreen.addEventListener(GameStartScreen.GAMEPLAYSTART, gameInit);
addChild(_local10);
_local7.frm.mouseEnabled = false;
_local7.frm.mouseChildren = false;
hitCycle.mouseEnabled = false;
cursor.cacheAsBitmap = true;
trace(("window" + _local7.gamewindow));
_gameManager = new GameManager(_local7.gamewindow);
_gameManager.addEventListener(GameManager.GAMELEVELEND_EVENT, gamelevelEnd);
_gameManager.addEventListener(GameManager.SANDWICHINITBUILD_EVENT, showPlayButton);
}
private function pause(_arg1:Event):void{
_lid.activate();
}
private function gameInit(_arg1:Event):void{
_gameManager.startLevel();
_mainArt.frm.topdog.text = Preloader.hotshot;
}
private function muterz(_arg1:Event):void{
var _local2:SoundTransform;
trace("muterz");
if (Number(mainMixerTransform.volume) > 0){
_local2 = new SoundTransform();
_local2.volume = 0;
mainMixerTransform = _local2;
} else {
if (Number(mainMixerTransform.volume) == 0){
_local2 = new SoundTransform();
_local2.volume = 1;
mainMixerTransform = _local2;
};
};
SoundMixer.soundTransform = _local2;
}
private function showPlayButton(_arg1:Event):void{
_gamestarterScreen.showPlay = true;
}
private function moregames(_arg1:Event):void{
LinkButtons.getUrl("http://www.cookingdressup.com");
}
}
}//package
Section 198
//Main_gameFrame (Main_gameFrame)
package {
import mx.core.*;
public class Main_gameFrame extends ByteArrayAsset {
}
}//package
Section 199
//Preloader (Preloader)
package {
import flash.events.*;
import com.utilities.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.ui.*;
import flash.text.*;
public class Preloader extends MovieClip {
private var preloadArt:Class;
private var _preloader:MovieClip;
public static var stgObject:Object = new Object();
public static var hotshot:String = "";
public static var remoteStage:Stage;
public static var rootsz:DisplayObject;
public static var _mochiHolder:MovieClip = new MovieClip();
public function Preloader(){
preloadArt = Preloader_preloadArt;
super();
if (stage){
initStage(null);
} else {
addEventListener(Event.ADDED_TO_STAGE, initStage);
};
}
private function gameJacketSecurity(_arg1:Event=null):void{
}
public function onScoresReceived(_arg1:Object):void{
var _local2:Object;
var _local3:Object;
trace(("CHECK SCORES" + _arg1.scores));
if (_arg1.scores != null){
_local2 = MochiScores.scoresArrayToObjects(_arg1.scores);
for each (_local3 in _local2.monthly) {
hotshot = (((((_local3.name.toUpperCase() + " ") + "/COUNTRY:") + _local3.geo.toUpperCase()) + "/SCORE:") + _local3.score);
trace(hotshot);
break;
};
} else {
if (_arg1.error){
trace(("Error: " + _arg1.errorCode));
};
};
}
private function fadeOutPreloader(_arg1:TimerEvent):void{
_preloader.alpha = (_preloader.alpha - 0.1);
}
private function visit_flashmo(_arg1:Event):void{
var _local2:URLRequest = new URLRequest("http://www.munchiegames.com");
navigateToURL(_local2, "_blank");
}
private function checkFrame(_arg1:Event):void{
var _local3:Timer;
trace(currentFrame);
var _local2:uint = ((root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal) * 100);
_preloader.hold.percent.text = (String(_local2).substr(0, 3) + "%");
_preloader.hold.bar.scaleX = (root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal);
if (currentFrame == totalFrames){
removeEventListener(Event.ENTER_FRAME, checkFrame);
startup();
_local3 = new Timer(20, 10);
removeMainPreloader();
};
}
private function secOK(_arg1:Event):void{
trace("ok");
initStage(_arg1);
}
private function init(_arg1:Event):void{
trace("added loader");
var _local2:Class = _arg1.target.grabClass("loadersystem");
_preloader = new (_local2);
addChild(_mochiHolder);
var _local3 = "d58d1ca9bf8ecb5a";
MochiServices.connect("d58d1ca9bf8ecb5a", _mochiHolder);
MochiScores.setBoardID("d536eb15ff545561");
MochiBot.track(this, "0dbd4c56");
MochiAd.showPreGameAd({clip:_mochiHolder, id:_local3, res:"640x480"});
addEventListener(Event.ENTER_FRAME, checkFrame);
}
private function sitelock():void{
var _local1:Array = this.root.loaderInfo.url.split("://");
_local1 = _local1[1].split("/");
var _local2 = "gameserpent.com";
if (_local1[0] != _local2){
this.visible = false;
LinkButtons.getUrlSelf("http://www.munchiegames.com");
};
}
private function initStage(_arg1:Event=null):void{
trace("initstage");
remoteStage = this.stage;
rootsz = this.root;
this.stage.frameRate = 70;
this.stage.quality = "LOW";
this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.align = StageAlign.TOP_LEFT;
stgObject.width = stage.stageWidth;
stgObject.height = stage.stageHeight;
var _local2:ContextMenu = new ContextMenu();
var _local3:ContextMenuItem = new ContextMenuItem("Copyright © munchiegames.com");
var _local4:ContextMenuItem = new ContextMenuItem("More Munchie Games");
_local3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, visit_flashmo);
_local4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, visit_flashmo);
_local4.separatorBefore = false;
_local2.hideBuiltInItems();
_local2.customItems.push(_local3);
_local2.customItems.push(_local4);
this.contextMenu = _local2;
var _local5:Timer = new Timer(500, 1);
_local5.addEventListener(TimerEvent.TIMER_COMPLETE, delayedAction);
_local5.start();
}
private function secError(_arg1:Event):void{
trace("fail");
}
private function delayedAction(_arg1:TimerEvent):void{
var _local2:EmbedSecure = new EmbedSecure(preloadArt);
_local2.addEventListener(EmbedSecure.ARTREADY_EVENT, init);
}
private function removeMainPreloader(_arg1:TimerEvent=null):void{
getTopDog();
}
private function startup():void{
stop();
var _local1:Class = (getDefinitionByName("Main") as Class);
addChildAt((new (_local1) as DisplayObject), 0);
var _local2:TextField = new TextField();
_local2.autoSize = TextFieldAutoSize.CENTER;
_local2.mouseEnabled = false;
_local2.text = "sandwich game,sandwich games,sandwich cooking game,sandwich pastrami,sandwich cucumber,cucumber sandwich,filling sandwich,sandwich toasted,sandwich chicken,gardens mama,garden mama,how to make a sandwich,munchie games,munchie snack games,grilled sandwich games.grilled sandwich";
addChildAt(_local2, 0);
}
private function getTopDog():void{
MochiScores.requestList(this, "onScoresReceived");
}
}
}//package
Section 200
//Preloader_preloadArt (Preloader_preloadArt)
package {
import mx.core.*;
public class Preloader_preloadArt extends ByteArrayAsset {
}
}//package