Section 1
//MochiBot (ascb.mochi.MochiBot)
package ascb.mochi {
import flash.display.*;
import flash.net.*;
import flash.system.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
var _local3:MochiBot;
var _local4:String;
var _local5:URLVariables;
var _local6:String;
var _local7:URLRequest;
var _local8:Loader;
if (Security.sandboxType == "localWithFile"){
return (null);
};
_local3 = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
_local4 = "http://core.mochibot.com/my/core.swf";
_local5 = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
_local6 = _local3.root.loaderInfo.loaderURL;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
_local7 = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
_local8 = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package ascb.mochi
Section 2
//MochiDigits (ascb.mochi.MochiDigits)
package ascb.mochi {
public final class MochiDigits {
private var Sibling:MochiDigits;
private var Fragment:Number;
private var Encoder:Number;
public function MochiDigits(_arg1:Number=0, _arg2:uint=0):void{
Encoder = 0;
setValue(_arg1, _arg2);
}
public function set value(_arg1:Number):void{
setValue(_arg1);
}
public function reencode():void{
var _local1:uint;
_local1 = int((2147483647 * Math.random()));
Fragment = (Fragment ^ (_local1 ^ Encoder));
Encoder = _local1;
}
public function toString():String{
var _local1:String;
_local1 = String.fromCharCode((Fragment ^ Encoder));
if (Sibling != null){
_local1 = (_local1 + Sibling.toString());
};
return (_local1);
}
public function get value():Number{
return (Number(this.toString()));
}
public function setValue(_arg1:Number=0, _arg2:uint=0):void{
var _local3:String;
_local3 = _arg1.toString();
var _temp1 = _arg2;
_arg2 = (_arg2 + 1);
Fragment = (_local3.charCodeAt(_temp1) ^ Encoder);
if (_arg2 < _local3.length){
Sibling = new MochiDigits(_arg1, _arg2);
} else {
Sibling = null;
};
reencode();
}
public function addValue(_arg1:Number):void{
value = (value + _arg1);
}
}
}//package ascb.mochi
Section 3
//MochiScores (ascb.mochi.MochiScores)
package ascb.mochi {
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 n:Number;
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;
};
} else {
if ((options.score is MochiDigits)){
options.score = options.score.value;
};
};
n = Number(options.score);
if (isNaN(n)){
trace((("ERROR: Submitted score '" + options.score) + "' will be rejected, score is 'Not a Number'"));
} else {
if ((((n == Number.NEGATIVE_INFINITY)) || ((n == Number.POSITIVE_INFINITY)))){
trace((("ERROR: Submitted score '" + options.score) + "' will be rejected, score is an infinite"));
} else {
if (Math.floor(n) != n){
trace((("WARNING: Submitted score '" + options.score) + "' will be truncated"));
};
options.score = n;
};
};
};
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 (MochiScores.boardID != null){
options.boardID = MochiScores.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 _local2:Object;
var _local3:Number;
var _local4:Number;
var _local5:Object;
var _local6:Object;
var _local7:String;
var _local8:String;
_local2 = {};
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{
_arg1 = Number(_arg1);
if (isNaN(_arg1)){
trace((("ERROR: Submitted score '" + String(_arg1)) + "' will be rejected, score is 'Not a Number'"));
} else {
if ((((_arg1 == Number.NEGATIVE_INFINITY)) || ((_arg1 == Number.POSITIVE_INFINITY)))){
trace((("ERROR: Submitted score '" + String(_arg1)) + "' will be rejected, score is an infinite"));
} else {
if (Math.floor(_arg1) != _arg1){
trace((("WARNING: Submitted score '" + String(_arg1)) + "' will be truncated"));
};
_arg1 = Number(_arg1);
};
};
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{
MochiScores.boardID = _arg1;
MochiServices.send("scores_setBoardID", {boardID:_arg1});
}
}
}//package ascb.mochi
Section 4
//MochiServices (ascb.mochi.MochiServices)
package ascb.mochi {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
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;
public static var netupAttempted:Boolean = false;
private static var _sendChannel:LocalConnection;
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 = "__ms_";
private static var _servicesURL:String = "http://www.mochiads.com/static/lib/services/services.swf";
public static var netup:Boolean = true;
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 _local3:Array;
var _local4:int;
var _local5:Array;
var _local6:Array;
var _local7:MovieClip;
var _local8:LocalConnection;
var _local9:String;
var _local10:ByteArray;
var _local11:ByteArray;
var _local12:uint;
var _local13:uint;
var _local14:Loader;
_local3 = [150, 21, 0, 7, 1, 0, 0, 0, 0, 98, 116, 110, 0, 7, 2, 0, 0, 0, 0, 116, 104, 105, 115, 0, 28, 150, 22, 0, 0, 99, 114, 101, 97, 116, 101, 69, 109, 112, 116, 121, 77, 111, 118, 105, 101, 67, 108, 105, 112, 0, 82, 135, 1, 0, 0, 23, 150, 13, 0, 4, 0, 0, 111, 110, 82, 101, 108, 101, 97, 115, 101, 0, 142, 8, 0, 0, 0, 0, 2, 42, 0, 114, 0, 150, 17, 0, 0, 32, 0, 7, 1, 0, 0, 0, 8, 0, 0, 115, 112, 108, 105, 116, 0, 82, 135, 1, 0, 1, 23, 150, 7, 0, 4, 1, 7, 0, 0, 0, 0, 78, 150, 8, 0, 0, 95, 98, 108, 97, 110, 107, 0, 154, 1, 0, 0, 150, 7, 0, 0, 99, 108, 105, 99, 107, 0, 150, 7, 0, 4, 1, 7, 1, 0, 0, 0, 78, 150, 27, 0, 7, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 76, 111, 99, 97, 108, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 0, 64, 150, 6, 0, 0, 115, 101, 110, 100, 0, 82, 79, 150, 15, 0, 4, 0, 0, 95, 97, 108, 112, 104, 97, 0, 7, 0, 0, 0, 0, 79, 150, 23, 0, 7, 0xFF, 0, 0xFF, 0, 7, 1, 0, 0, 0, 4, 0, 0, 98, 101, 103, 105, 110, 70, 105, 108, 108, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 109, 111, 118, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 16, 0, 7, 0, 0, 0, 0, 4, 0, 0, 101, 110, 100, 70, 105, 108, 108, 0, 82, 23];
_local5 = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3];
_local6 = [0, 64, 0, 0, 0];
_local7 = new MovieClip();
_local8 = new LocalConnection();
_local9 = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().getTime()));
_local8 = new LocalConnection();
_local7.lc = _local8;
_local7.click = _arg2;
_local8.client = _local7;
_local8.connect(_local9);
_local10 = new ByteArray();
_local11 = new ByteArray();
_local11.endian = Endian.LITTLE_ENDIAN;
_local11.writeShort(1);
_local11.writeUTFBytes(((_arg1 + " ") + _local9));
_local11.writeByte(0);
_local12 = ((_local3.length + _local11.length) + 4);
_local13 = (_local12 + 35);
_local10.endian = Endian.LITTLE_ENDIAN;
_local10.writeUTFBytes("FWS");
_local10.writeByte(8);
_local10.writeUnsignedInt(_local13);
for each (_local4 in _local5) {
_local10.writeByte(_local4);
};
_local10.writeUnsignedInt(_local12);
_local10.writeByte(136);
_local10.writeShort(_local11.length);
_local10.writeBytes(_local11);
for each (_local4 in _local3) {
_local10.writeByte(_local4);
};
for each (_local4 in _local6) {
_local10.writeByte(_local4);
};
_local14 = new Loader();
_local14.loadBytes(_local10);
_local7.addChild(_local14);
return (_local7);
}
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 stayOnTop():void{
_container.addEventListener(Event.ENTER_FRAME, MochiServices.bringToTop, false, 0, true);
if (_clip != null){
_clip.visible = true;
};
}
public static function addLinkEvent(_arg1:String, _arg2:String, _arg3:DisplayObjectContainer, _arg4:Function=null):void{
var vars:Object;
var avm1Click:DisplayObject;
var s:String;
var i:Number;
var x:String;
var req:URLRequest;
var loader:Loader;
var setURL:Function;
var err:Function;
var complete:Function;
var url = _arg1;
var burl = _arg2;
var btn = _arg3;
var onClick = _arg4;
vars = new Object();
vars["mav"] = getVersion();
vars["swfv"] = "9";
vars["swfurl"] = btn.loaderInfo.loaderURL;
vars["fv"] = Capabilities.version;
vars["os"] = Capabilities.os;
vars["lang"] = Capabilities.language;
vars["scres"] = ((Capabilities.screenResolutionX + "x") + Capabilities.screenResolutionY);
s = "?";
i = 0;
for (x in vars) {
if (i != 0){
s = (s + "&");
};
i = (i + 1);
s = (((s + x) + "=") + escape(vars[x]));
};
req = new URLRequest("http://x.mochiads.com/linkping.swf");
loader = new Loader();
setURL = function (_arg1:String):void{
var _local2:Rectangle;
if (avm1Click){
btn.removeChild(avm1Click);
};
avm1Click = clickMovie(_arg1, onClick);
_local2 = btn.getBounds(btn);
btn.addChild(avm1Click);
avm1Click.x = _local2.x;
avm1Click.y = _local2.y;
avm1Click.scaleX = (0.01 * _local2.width);
avm1Click.scaleY = (0.01 * _local2.height);
};
err = function (_arg1:Object):void{
netup = false;
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
setURL(burl);
};
complete = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
if (netup){
setURL((url + s));
} else {
setURL(burl);
};
if (!((netupAttempted) || (_connected))){
netupAttempted = true;
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, err);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
loader.load(req);
};
}
public static function 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();
} catch(error:Error) {
};
};
if (_timer != null){
try {
_timer.stop();
} catch(error:Error) {
};
};
}
public static function allowDomains(_arg1:String):String{
var _local2:String;
if (Security.sandboxType != "application"){
Security.allowDomain("*");
Security.allowInsecureDomain("*");
};
if (_arg1.indexOf("http://") != -1){
_local2 = _arg1.split("/")[2].split(":")[0];
if (Security.sandboxType != "application"){
Security.allowDomain("*");
Security.allowInsecureDomain("*");
};
};
return (_local2);
}
public static function getVersion():String{
return ("1.43");
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
if (_clip.parent != null){
Sprite(_clip.parent).removeChild(_clip);
};
}
private static function onStatus(_arg1:StatusEvent):void{
switch (_arg1.level){
case "error":
_connected = false;
_listenChannel.connect(_listenChannelName);
break;
};
}
public static function get id():String{
return (_id);
}
private static function urlOptions(_arg1:Object):Object{
var _local2:Object;
var _local3:String;
var _local4:Array;
var _local5:Number;
var _local6:Array;
_local2 = {};
_local3 = _arg1.loaderInfo.parameters.mochiad_options;
if (_local3){
_local4 = _local3.split("&");
_local5 = 0;
while (_local5 < _local4.length) {
_local6 = _local4[_local5].split("=");
_local2[unescape(_local6[0])] = unescape(_local6[1]);
_local5++;
};
};
return (_local2);
}
public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{
if (_arg1 != null){
if ((_arg1 is Sprite)){
_container = _arg1;
};
};
if (_arg2){
if ((_container is Sprite)){
Sprite(_container).addChild(_clip);
};
};
}
private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{
var args = _arg1;
var callbackObject = _arg2;
var callbackMethod = _arg3;
if (args != null){
if (args.onError != null){
args.onError.apply(null, ["NotConnected"]);
};
if (((!((args.options == null))) && (!((args.options.onError == null))))){
args.options.onError.apply(null, ["NotConnected"]);
};
};
if (callbackMethod != null){
args = {};
args.error = true;
args.errorCode = "NotConnected";
if (((!((callbackObject == null))) && ((callbackMethod is String)))){
try {
var _local5 = callbackObject;
_local5[callbackMethod](args);
} catch(error:Error) {
};
} else {
if (callbackMethod != null){
try {
callbackMethod.apply(args);
} catch(error:Error) {
};
};
};
};
}
private static function 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});
_listenChannel.addEventListener(StatusEvent.STATUS, MochiServices.onStatus);
_clip.onReceive = function (_arg1:Object):void{
var cb:String;
var cblst:Object;
var method:*;
var methodName:String;
var obj:Object;
var pkg = _arg1;
cb = pkg.callbackID;
cblst = this.client._callbacks[cb];
if (!cblst){
return;
};
method = cblst.callbackMethod;
methodName = "";
obj = cblst.callbackObject;
if (((obj) && ((typeof(method) == "string")))){
methodName = method;
if (obj[method] != null){
method = obj[method];
} else {
trace((("Error: Method " + method) + " does not exist."));
};
};
if (method != undefined){
try {
method.apply(obj, pkg.args);
} catch(error:Error) {
trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString()));
};
} else {
if (obj != null){
try {
obj(pkg.args);
} catch(error:Error) {
trace(("Error invoking method on object: " + error.toString()));
};
};
};
delete this.client._callbacks[cb];
};
_clip.onError = function ():void{
MochiServices.onError("IOError");
};
trace("connected!");
_connecting = false;
_connected = true;
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...");
}
public static function set comChannelName(_arg1:String):void{
if (_arg1 != null){
if (_arg1.length > 3){
_sendChannelName = (_arg1 + "_fromgame");
initComChannels();
};
};
}
private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{
var clipname:String;
var f:Function;
var req:URLRequest;
var vars:URLVariables;
var id = _arg1;
var clip = _arg2;
clipname = ("_mochiservices_com_" + id);
if (_clip != null){
return (_clip);
};
if (!MochiServices.isNetworkAvailable()){
return (null);
};
if (urlOptions(clip).servicesURL != undefined){
_servicesURL = urlOptions(clip).servicesURL;
};
MochiServices.allowDomains(_servicesURL);
_clip = createEmptyMovieClip(clip, clipname, 10336, false);
_loader = new Loader();
_timer = new Timer(1000, 0);
_startTime = getTimer();
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
f = function (_arg1:Object):void{
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
_listenChannelName = (_listenChannelName + ((Math.floor(new Date().getTime()) + "_") + Math.floor((Math.random() * 99999))));
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
req = new URLRequest(_servicesURL);
vars = new URLVariables();
vars.listenLC = _listenChannelName;
vars.mochiad_options = clip.loaderInfo.parameters.mochiad_options;
req.data = vars;
_loader.load(req);
_clip.addChild(_loader);
_clip._mochiservices_com = _loader;
_sendChannel = new LocalConnection();
_clip._queue = [];
_clip._nextcallbackID = 0;
_clip._callbacks = {};
listen();
return (_clip);
}
public static function get clip():Object{
return (_container);
}
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 mc:MovieClip;
var parent = _arg1;
var name = _arg2;
var depth = _arg3;
var doAdd = _arg4;
mc = new MovieClip();
if (doAdd){
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
};
try {
parent[name] = mc;
} catch(e:Error) {
throw (new Error("MochiServices requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
mc["_name"] = name;
return (mc);
}
public static function 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 ascb.mochi
Section 5
//Locale (ascb.util.Locale)
package ascb.util {
import flash.system.*;
public class Locale {
private var _sLanguage:String;
private var _sVariant:String;
public static const GERMAN:String = "de";
public static const CHINESE:String = "zh";
public static const ENGLISH:String = "en";
public static const SPANISH:String = "es";
public static const UK:String = "UK";
public static const US:String = "US";
public static const FRENCH:String = "fr";
public static const JAPANESE:String = "jp";
private static var __sLanguage:String;
private static var __sVariant:String;
public function Locale(_arg1:String=null, _arg2:String=null){
_sLanguage = _arg1;
_sVariant = _arg2;
}
public function get variant():String{
if (_sVariant == null){
if (Locale.svariant == null){
if (Capabilities.language.length > 2){
_sVariant = Capabilities.language.substr(3);
} else {
if (language == ENGLISH){
if (new Date().getTimezoneOffset() > 120){
_sVariant = US;
} else {
_sVariant = UK;
};
} else {
if (language == SPANISH){
if (new Date().getTimezoneOffset() > 120){
_sVariant = "MX";
} else {
_sVariant = "ES";
};
};
};
};
} else {
_sVariant = Locale.svariant;
};
};
return (_sVariant);
}
public function set variant(_arg1:String):void{
_sVariant = _arg1;
}
public function get languageVariant():String{
var _local1:String;
_local1 = language;
if (variant != null){
_local1 = (_local1 + ("-" + variant));
};
return (_local1);
}
public function set language(_arg1:String):void{
_sLanguage = _arg1;
}
public function reset():void{
_sLanguage = null;
_sVariant = null;
}
public function set languageVariant(_arg1:String):void{
var _local2:Array;
_local2 = _arg1.split("-");
_sLanguage = _local2[0];
_sVariant = _local2[1];
}
public function get language():String{
if (_sLanguage == null){
if (Locale.slanguage == null){
_sLanguage = Capabilities.language.substr(0, 2);
} else {
_sLanguage = Locale.slanguage;
};
};
return (_sLanguage);
}
public static function sreset():void{
__sLanguage = null;
__sVariant = null;
}
public static function get slanguage():String{
return (__sLanguage);
}
public static function set slanguage(_arg1:String):void{
__sLanguage = _arg1;
}
public static function set svariant(_arg1:String):void{
__sVariant = _arg1;
}
public static function get svariant():String{
return (__sVariant);
}
public static function get slanguageVariant():String{
var _local1:String;
_local1 = slanguage;
if (svariant != null){
_local1 = (_local1 + ("-" + svariant));
};
return (_local1);
}
public static function set slanguageVariant(_arg1:String):void{
var _local2:Array;
_local2 = _arg1.split("-");
__sLanguage = _local2[0];
__sVariant = _local2[1];
}
}
}//package ascb.util
Section 6
//NumberFormat (ascb.util.NumberFormat)
package ascb.util {
public class NumberFormat {
private var _sMask:String;
public function NumberFormat(_arg1:String=null){
_sMask = _arg1;
}
public function parse(_arg1:String, _arg2:Number, _arg3:Boolean, _arg4:Locale):Number{
var _local5:Object;
var _local6:Array;
var _local7:Number;
if (_arg4 == null){
_arg4 = new Locale();
};
_local5 = getSymbols(_arg3, _arg4);
_local6 = _arg1.split("");
if (isNaN(_arg2)){
if (_local6[0] == "O"){
if (_local6[1] == "x"){
_arg2 = 16;
} else {
_arg2 = 8;
};
} else {
if (_local6[0] == "#"){
_arg2 = 16;
} else {
_arg2 = (isNaN(_arg2)) ? 10 : _arg2;
};
};
};
_local7 = 0;
while (_local7 < _local6.length) {
switch (_local6[_local7]){
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
break;
case _local5.decimal:
_local6[_local7] = ".";
break;
default:
if (_arg2 > 10){
if ((((((_local6[_local7].charCodeAt(0) > 64)) && ((_local6[_local7].charCodeAt(0) < 91)))) || ((((_local6[_local7].charCodeAt(0) > 96)) && ((_local6[_local7].charCodeAt(0) < 123)))))){
break;
};
};
_local6.splice(_local7, 1);
_local7--;
};
_local7++;
};
if (_arg2 == 10){
return (Number(_local6.join("")));
};
return (parseInt(_local6.join(""), _arg2));
}
private function getSymbols(_arg1:Boolean, _arg2:Locale):Object{
var _local3:Object;
_local3 = new Object();
switch (_arg2.languageVariant){
case "en-US":
_local3.currency = "$";
_local3.group = ",";
_local3.decimal = ".";
_local3.before = true;
break;
case "en-UK":
_local3.currency = "£";
_local3.group = ",";
_local3.decimal = ".";
_local3.before = true;
break;
case "es-MX":
_local3.currency = "$";
_local3.group = ",";
_local3.decimal = ".";
_local3.before = true;
break;
case "es-ES":
_local3.currency = "€";
_local3.group = ".";
_local3.decimal = ",";
_local3.before = false;
break;
case "fr":
_local3.currency = "€";
_local3.group = ".";
_local3.decimal = ",";
_local3.before = false;
break;
case "sv":
_local3.currency = "kr";
_local3.group = (_arg1) ? "," : " ";
_local3.decimal = ".";
_local3.before = false;
break;
case "jp":
_local3.currency = " 5";
_local3.group = ",";
_local3.decimal = ".";
_local3.before = true;
break;
case "nl":
_local3.currency = "€";
_local3.group = ".";
_local3.decimal = ",";
_local3.before = true;
break;
default:
_local3.currency = "€";
_local3.group = ".";
_local3.decimal = ",";
_local3.before = true;
break;
};
return (_local3);
}
public function format(_arg1:Number, _arg2:Object=null, _arg3:Object=null):String{
var _local4:Number;
var _local5:Number;
var _local6:String;
var _local7:Object;
var _local8:String;
var _local9:String;
var _local10:Array;
var _local11:Array;
var _local12:Array;
var _local13:Number;
var _local14:String;
var _local15:Locale;
var _local16:Locale;
var _local17:Array;
var _local18:Array;
var _local19:Array;
var _local20:Number;
var _local21:Number;
var _local22:Array;
var _local23:Boolean;
var _local24:Number;
if (typeof(_arg2) == "number"){
_local13 = Number(_arg2);
_local6 = _arg1.toString(_local13);
_local14 = "";
if (_local13 == 16){
_local14 = "0x";
};
if (_local13 == 8){
_local14 = "0";
};
if (_arg3 != null){
_local14 = String(_arg3);
};
return ((_local14 + _local6.toUpperCase()));
};
_local8 = ",";
_local9 = ".";
if (((!((_arg2 == null))) && (_arg2.hasOwnProperty("group")))){
_local7 = _arg2;
} else {
_local15 = Locale(_arg2);
if (_local15 == null){
_local15 = new Locale();
};
_local16 = Locale(_local15);
_local7 = getSymbols(false, _local16);
};
_local8 = _local7.decimal;
_local9 = _local7.group;
_local10 = String(_arg1).split(".");
_local11 = _local10[0].split("");
_local12 = ((_local10.length)>1) ? _local10[1].split("") : new Array();
if (_sMask == null){
_local4 = 1;
_local11.reverse();
_local5 = 0;
while (_local5 < _local11.length) {
if (_local4 > 3){
_local4 = 0;
_local11.splice(_local5, 0, _local9);
};
_local4++;
_local5++;
};
_local11.reverse();
_local6 = _local11.join("");
if (_local10[1] != null){
_local6 = (_local6 + (_local8 + _local10[1]));
};
} else {
_local17 = _sMask.split("");
_local5 = 0;
while (_local5 < _local17.length) {
if (((((!((_local17[_local5] == "0"))) && (!((_local17[_local5] == "#"))))) && (!((_local17[_local5] == "."))))){
_local17.splice(_local5, 1);
_local5--;
};
_local5++;
};
_local17 = _local17.join("").split(".");
_local18 = _local17[0].split("");
_local19 = ((_local17.length)>1) ? _local17[1].split("") : new Array();
_local4 = _local18.length;
_local20 = 0;
_local21 = 0;
_local6 = "";
if (_local4 < _local11.length){
_local5 = 0;
while (_local5 < (_local11.length - _local4)) {
_local6 = (_local6 + _local11[_local5]);
_local20++;
_local5++;
};
} else {
if (_local4 > _local11.length){
_local5 = 0;
while (_local5 < (_local4 - _local11.length)) {
if (_local18[_local5] == "0"){
_local6 = (_local6 + "0");
} else {
if (_local18[_local5] == "#"){
_local6 = (_local6 + " ");
};
};
_local21++;
_local5++;
};
};
};
_local23 = false;
_local5 = _local21;
while (_local5 < _local18.length) {
if ((((_local18[_local5] == "0")) || ((_local18[_local5] == "#")))){
_local6 = (_local6 + ((_local11[_local20])==undefined) ? "" : _local11[_local20]);
_local20++;
};
_local5++;
};
_local17 = _sMask.split(".");
_local17 = _local17[0].split("");
_local22 = _local6.split("");
_local23 = false;
_local5 = 0;
while (_local5 < _local17.length) {
if (((((!((_local17[_local5] == "0"))) && (!((_local17[_local5] == "#"))))) && (!((_local17[_local5] == "."))))){
if (_local23){
_local22.splice(_local5, 0, _local9);
} else {
_local22.splice(_local5, 0, " ");
};
};
if (((!((_local22[_local5] == " "))) && (!((_local22[_local5] == "0"))))){
_local23 = true;
};
_local5++;
};
_local6 = _local22.join("");
if (_local19.length > 0){
_local6 = (_local6 + _local8);
};
_local5 = 0;
while (_local5 < _local19.length) {
if (_local12[_local5] == null){
if (_local19[_local5] == "0"){
_local6 = (_local6 + "0");
} else {
if (_local19[_local5] == "#"){
_local6 = (_local6 + " ");
};
};
} else {
_local24 = Number(((_local12[_local5] + "") + _local12[(_local5 + 1)]));
if ((((_local5 == (_local19.length - 1))) && (!(isNaN(_local24))))){
_local6 = (_local6 + String(Math.round((_local24 / 10))));
} else {
_local6 = (_local6 + _local12[_local5]);
};
};
_local5++;
};
};
return (_local6);
}
public function set mask(_arg1:String):void{
_sMask = _arg1;
}
public function currencyFormat(_arg1:Number, _arg2:Object=null):String{
var _local4:Locale;
var _local5:Object;
var _local6:String;
var _local7:String;
var _local8:String;
var _local9:String;
var _local10:Locale;
var _local11:String;
var _local12:Array;
var _local13:Array;
var _local14:Number;
var _local15:String;
var _local16:Number;
_local4 = ((arguments[1] is Locale)) ? arguments[1] : new Locale();
if (((!((_arg2 == null))) && (_arg2.hasOwnProperty("group")))){
_local5 = _arg2;
} else {
_local5 = getSymbols(true, _local4);
};
_local6 = _local5.currency;
_local7 = _local5.group;
_local8 = _local5.decimal;
_local9 = _sMask;
_sMask = null;
_local10 = new Locale();
_local10.language = "en";
_local10.variant = "US";
_local11 = format(_arg1, _local10);
_sMask = _local9;
_local12 = _local11.split(".");
if (_local12[1] == undefined){
_local12[1] = "00";
} else {
_local12[1] = Number(_local12[1]);
_local16 = String(_local12[1]).length;
if (_local16 > 2){
_local12[1] = (_local12[1] / Math.pow(10, (_local16 - 2)));
_local12[1] = Math.round(_local12[1]);
};
};
_local11 = _local12.join(".");
_local13 = _local11.split("");
_local14 = 0;
while (_local14 < _local13.length) {
if (_local13[_local14] == ","){
_local13[_local14] = _local7;
} else {
if (_local13[_local14] == "."){
_local13[_local14] = _local8;
};
};
_local14++;
};
_local15 = (((_local5.before) ? _local6 : "" + _local13.join("")) + (_local5.before) ? "" : _local6);
return (_local15);
}
public function get mask():String{
return (_sMask);
}
}
}//package ascb.util
Section 7
//NumberUtilities (ascb.util.NumberUtilities)
package ascb.util {
public class NumberUtilities {
private static var _aUniqueIDs:Array;
public static function random(_arg1:Number, _arg2:Number=0, _arg3:Number=1):Number{
var _local4:Number;
var _local5:Number;
var _local6:Number;
if (_arg1 > _arg2){
_local6 = _arg1;
_arg1 = _arg2;
_arg2 = _local6;
};
_local4 = ((_arg2 - _arg1) + (1 * _arg3));
_local5 = (Math.random() * _local4);
_local5 = (_local5 + _arg1);
return (floor(_local5, _arg3));
}
public static function ceil(_arg1:Number, _arg2:Number=1):Number{
return ((Math.ceil((_arg1 / _arg2)) * _arg2));
}
public static function getUnique():Number{
var _local1:Date;
var _local2:Number;
if (_aUniqueIDs == null){
_aUniqueIDs = new Array();
};
_local1 = new Date();
_local2 = _local1.getTime();
while (!(isUnique(_local2))) {
_local2 = (_local2 + NumberUtilities.random(_local1.getTime(), (2 * _local1.getTime())));
};
_aUniqueIDs.push(_local2);
return (_local2);
}
private static function isUnique(_arg1:Number):Boolean{
var _local2:Number;
_local2 = 0;
while (_local2 < _aUniqueIDs.length) {
if (_aUniqueIDs[_local2] == _arg1){
return (false);
};
_local2++;
};
return (true);
}
public static function floor(_arg1:Number, _arg2:Number=1):Number{
return ((Math.floor((_arg1 / _arg2)) * _arg2));
}
public static function round(_arg1:Number, _arg2:Number=1):Number{
return ((Math.round((_arg1 / _arg2)) * _arg2));
}
}
}//package ascb.util
Section 8
//URLUtils (ascb.util.URLUtils)
package ascb.util {
public class URLUtils {
public static function checkDomain(_arg1:String, _arg2:String):Boolean{
var _local3:Number;
var _local4:Number;
var _local5:String;
var _local6:Number;
var _local7:Number;
_local3 = (_arg1.indexOf("://") + 3);
_local4 = _arg1.indexOf("/", _local3);
_local5 = _arg1.substring(_local3, _local4);
_local6 = (_local5.lastIndexOf(".") - 1);
_local7 = (_local5.lastIndexOf(".", _local6) + 1);
_local5 = _local5.substring(_local7, _local5.length);
return ((_local5 == _arg2));
}
public static function checkBigFishGamesDomain(_arg1:String):Boolean{
var _local2:Array;
var _local3:Number;
var _local4:Number;
var _local5:String;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local2 = ["kornushin.com", "games.bigfishgames.com", "bigfishgames.com", "bigfishgames.de", "bigfishgames.fr", "bigfishgames.es", "bigfishgames.mx", "bigfishgames.jp"];
_local3 = (_arg1.indexOf("://") + 3);
_local4 = _arg1.indexOf("/", _local3);
_local5 = _arg1.substring(_local3, _local4);
_local6 = (_local5.lastIndexOf(".") - 1);
_local7 = (_local5.lastIndexOf(".", _local6) + 1);
_local5 = _local5.substring(_local7, _local5.length);
_local8 = 0;
while (_local8 < _local2.length) {
if (_local5 == _local2[_local8]){
return (true);
};
_local8++;
};
return (false);
}
}
}//package ascb.util
Section 9
//Back (fl.motion.easing.Back)
package fl.motion.easing {
public class Back {
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0):Number{
if (!_arg5){
_arg5 = 1.70158;
};
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * (((_arg1 * _arg1) * (((_arg5 + 1) * _arg1) + _arg5)) + 1)) + _arg2));
}
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0):Number{
if (!_arg5){
_arg5 = 1.70158;
};
_arg1 = (_arg1 / _arg4);
return (((((_arg3 * _arg1) * _arg1) * (((_arg5 + 1) * _arg1) - _arg5)) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0):Number{
if (!_arg5){
_arg5 = 1.70158;
};
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
_arg5 = (_arg5 * 1.525);
return ((((_arg3 / 2) * ((_arg1 * _arg1) * (((_arg5 + 1) * _arg1) - _arg5))) + _arg2));
};
_arg1 = (_arg1 - 2);
_arg5 = (_arg5 * 1.525);
return ((((_arg3 / 2) * (((_arg1 * _arg1) * (((_arg5 + 1) * _arg1) + _arg5)) + 2)) + _arg2));
}
}
}//package fl.motion.easing
Section 10
//TweenFilterLite (gs.TweenFilterLite)
package gs {
import flash.display.*;
import flash.filters.*;
import flash.utils.*;
public class TweenFilterLite extends TweenLite {
private var _mc:DisplayObject;
private var _clrsa:Array;
private var _fType:Class;
private var _clrMtxTw:TweenLite;
public var _matrix:Array;
private var _f:BitmapFilter;
private var _endMatrix:Array;
public static var version:Number = 5.87;
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];
public static var killTweensOf:Function = TweenLite.killTweensOf;
public static var delayedCall:Function = TweenLite.delayedCall;
private static var _lumB:Number = 0.072169;
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:DisplayObject, _arg2:Number, _arg3:Object){
_fType = TweenFilterLite;
super(_arg1, _arg2, _arg3);
if (_arg1 == null){
return;
};
_mc = _arg1;
_clrsa = [];
if (this.vars.runBackwards == true){
initTweenVals();
};
if ((((TweenLite.version < 5.87)) || (isNaN(TweenLite.version)))){
trace("ERROR! Please update your TweenLite class. TweenFilterLite requires a more recent version. Download updates at http://www.TweenLite.com.");
};
}
private function setFilter(_arg1:Class, _arg2:Array, _arg3:BitmapFilter):void{
var _local4:Array;
var _local5:int;
var _local6:Number;
var _local7:String;
var _local8:Object;
var _local9:Object;
var _local10:Object;
_fType = _arg1;
_local4 = _mc.filters;
_local5 = 0;
while (_local5 < _local4.length) {
if ((_local4[_local5] is _arg1)){
_f = _local4[_local5];
break;
};
_local5++;
};
if (_f == null){
_local4.push(_arg3);
_mc.filters = _local4;
_f = _arg3;
};
_local5 = 0;
while (_local5 < _arg2.length) {
_local7 = _arg2[_local5];
if (this.tweens[_local7] != undefined){
_local8 = this.tweens[_local7];
delete this.tweens[_local7];
} else {
if (this.extraTweens[_local7] != undefined){
_local8 = this.extraTweens[_local7];
} else {
_local8 = null;
};
};
if (_local8 != null){
if ((((((((((((((_local7 == "brightness")) || ((_local7 == "colorize")))) || ((_local7 == "amount")))) || ((_local7 == "saturation")))) || ((_local7 == "contrast")))) || ((_local7 == "hue")))) || ((_local7 == "threshold")))){
} else {
if ((((((_local7 == "color")) || ((_local7 == "highlightColor")))) || ((_local7 == "shadowColor")))){
_local9 = HEXtoRGB(_f[_local7]);
_local10 = HEXtoRGB(this.vars[_local7]);
_clrsa.push({p:_local7, e:this.vars.ease, sr:_local9.rb, cr:(_local10.rb - _local9.rb), sg:_local9.gb, cg:(_local10.gb - _local9.gb), sb:_local9.bb, cb:(_local10.bb - _local9.bb)});
} else {
if ((((((((_local7 == "quality")) || ((_local7 == "inner")))) || ((_local7 == "knockout")))) || ((_local7 == "hideObject")))){
_f[_local7] = this.vars[_local7];
} else {
if (typeof(this.vars[_local7]) == "number"){
_local6 = (this.vars[_local7] - _f[_local7]);
} else {
_local6 = Number(this.vars[_local7]);
};
this.tweens[_local7] = {o:_f, p:_local7, s:_f[_local7], c:_local6, e:this.vars.ease};
};
};
};
};
_local5++;
};
}
override public function render(_arg1:uint):void{
var _local2:Number;
var _local3:Number;
var _local4:Object;
var _local5:String;
var _local6:int;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Array;
_local2 = ((_arg1 - this.startTime) / 1000);
if (_local2 > this.duration){
_local2 = this.duration;
};
_local3 = this.vars.ease(_local2, 0, 1, this.duration);
for (_local5 in this.tweens) {
_local4 = this.tweens[_local5];
_local4.o[_local5] = (_local4.s + (_local3 * _local4.c));
};
if (_mc.parent != null){
_local6 = 0;
while (_local6 < _clrsa.length) {
_local4 = _clrsa[_local6];
_local7 = (_local4.sr + (_local3 * _local4.cr));
_local8 = (_local4.sg + (_local3 * _local4.cg));
_local9 = (_local4.sb + (_local3 * _local4.cb));
_f[_local4.p] = (((_local7 << 16) | (_local8 << 8)) | _local9);
_local6++;
};
if (_endMatrix != null){
ColorMatrixFilter(_f).matrix = _matrix;
};
_local10 = _mc.filters.slice();
_local6 = (_local10.length - 1);
while (_local6 > -1) {
if ((_local10[_local6] is _fType)){
_local10[_local6] = _f;
break;
};
_local6--;
};
_mc.filters = _local10;
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(null, 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)});
}
override public function initTweenVals():void{
var _local1:String;
var _local2:Number;
if (_mc != null){
super.initTweenVals();
if (this.vars.type != null){
_clrsa = [];
_matrix = _idMatrix.slice();
if ((((this.vars.quality == undefined)) || (isNaN(this.vars.quality)))){
this.vars.quality = 2;
};
if (this.vars.runBackwards == true){
for (_local1 in this.tweens) {
this.tweens[_local1].flipped = true;
};
};
switch (this.vars.type.toLowerCase()){
case "blur":
setFilter(BlurFilter, ["blurX", "blurY", "quality"], new BlurFilter(0, 0, this.vars.quality));
break;
case "glow":
setFilter(GlowFilter, ["alpha", "blurX", "blurY", "color", "quality", "strength", "inner", "knockout"], new GlowFilter(0xFFFFFF, 0, 0, 0, ((this.vars.strength) || (1)), this.vars.quality, this.vars.inner, this.vars.knockout));
break;
case "colormatrix":
case "color":
case "colormatrixfilter":
case "colorize":
setFilter(ColorMatrixFilter, [], new ColorMatrixFilter(_matrix));
_matrix = ColorMatrixFilter(_f).matrix;
if (this.vars.relative == true){
_endMatrix = _matrix.slice();
} else {
_endMatrix = _idMatrix.slice();
};
_endMatrix = setBrightness(_endMatrix, this.vars.brightness);
_endMatrix = setContrast(_endMatrix, this.vars.contrast);
_endMatrix = setHue(_endMatrix, this.vars.hue);
_endMatrix = setSaturation(_endMatrix, this.vars.saturation);
_endMatrix = setThreshold(_endMatrix, this.vars.threshold);
if (!isNaN(this.vars.colorize)){
_endMatrix = colorize(_endMatrix, this.vars.colorize, this.vars.amount);
} else {
if (!isNaN(this.vars.color)){
_endMatrix = colorize(_endMatrix, this.vars.color, this.vars.amount);
};
};
_local2 = (this.delay - ((getTimer() - this.initTime) / 1000));
_clrMtxTw = new TweenLite(_matrix, this.duration, {endArray:_endMatrix, ease:this.vars.ease, delay:_local2, overwrite:false, runBackwards:this.vars.runBackwards});
_clrMtxTw.endTarget = _mc;
break;
case "shadow":
case "dropshadow":
setFilter(DropShadowFilter, ["alpha", "angle", "blurX", "blurY", "color", "distance", "quality", "strength", "inner", "knockout", "hideObject"], new DropShadowFilter(0, 45, 0, 0, 0, 0, 1, this.vars.quality, this.vars.inner, this.vars.knockout, this.vars.hideObject));
break;
case "bevel":
setFilter(BevelFilter, ["angle", "blurX", "blurY", "distance", "highlightAlpha", "highlightColor", "quality", "shadowAlpha", "shadowColor", "strength"], new BevelFilter(0, 0, 0xFFFFFF, 0.5, 0, 0.5, 2, 2, 0, this.vars.quality));
break;
};
if (this.vars.runBackwards == true){
flipFilterVals();
};
};
};
}
private function flipFilterVals():void{
var _local1:Boolean;
var _local2:int;
var _local3:Object;
var _local4:String;
var _local5:Array;
_local1 = this.active;
for (_local4 in this.tweens) {
if (this.tweens[_local4].flipped != true){
_local3 = this.tweens[_local4];
_local3.s = (_local3.s + _local3.c);
_local3.c = (_local3.c * -1);
_local3.o[_local4] = _local3.s;
_local3.flipped = true;
};
};
_local2 = 0;
while (_local2 < _clrsa.length) {
_local3 = _clrsa[_local2];
_local3.sr = (_local3.sr + _local3.cr);
_local3.cr = (_local3.cr * -1);
_local3.sg = (_local3.sg + _local3.cg);
_local3.cg = (_local3.cg * -1);
_local3.sb = (_local3.sb + _local3.cb);
_local3.cb = (_local3.cb * -1);
if (!_local1){
_f[_local3.p] = (((_local3.sr << 16) | (_local3.sg << 8)) | _local3.sb);
};
_local2++;
};
if (((_local1) && (!((this.duration == 0.001))))){
render(getTimer());
} else {
if (((!((_mc.parent == null))) && (!((_fType == null))))){
if (_endMatrix != null){
ColorMatrixFilter(_f).matrix = _matrix;
};
_local5 = _mc.filters.slice();
_local2 = (_local5.length - 1);
while (_local2 > -1) {
if ((_local5[_local2] is _fType)){
_local5[_local2] = _f;
break;
};
_local2--;
};
_mc.filters = _local5;
};
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
}
public static function setContrast(_arg1:Array, _arg2:Number):Array{
var _local3:Array;
if (isNaN(_arg2)){
return (_arg1);
};
_arg2 = (_arg2 + 0.01);
_local3 = [_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 applyMatrix(_arg1:Array, _arg2:Array):Array{
var _local3:Array;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
if (((!((_arg1 is Array))) || (!((_arg2 is Array))))){
return (_arg2);
};
_local3 = [];
_local4 = 0;
_local5 = 0;
_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 colorize(_arg1:Array, _arg2:Number, _arg3:Number=100):Array{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Array;
if (isNaN(_arg2)){
return (_arg1);
};
if (isNaN(_arg3)){
_arg3 = 1;
};
_local4 = (((_arg2 >> 16) & 0xFF) / 0xFF);
_local5 = (((_arg2 >> 8) & 0xFF) / 0xFF);
_local6 = ((_arg2 & 0xFF) / 0xFF);
_local7 = (1 - _arg3);
_local8 = [(_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{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Array;
if (isNaN(_arg2)){
return (_arg1);
};
_local3 = (1 - _arg2);
_local4 = (_local3 * _lumR);
_local5 = (_local3 * _lumG);
_local6 = (_local3 * _lumB);
_local7 = [(_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 from(_arg1:DisplayObject, _arg2:Number, _arg3:Object):TweenFilterLite{
_arg3.runBackwards = true;
return (new TweenFilterLite(_arg1, _arg2, _arg3));
}
public static function setThreshold(_arg1:Array, _arg2:Number):Array{
var _local3:Array;
if (isNaN(_arg2)){
return (_arg1);
};
_local3 = [(_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{
var _local3:Number;
var _local4:Number;
var _local5:Array;
if (isNaN(_arg2)){
return (_arg1);
};
_arg2 = (_arg2 * (Math.PI / 180));
_local3 = Math.cos(_arg2);
_local4 = Math.sin(_arg2);
_local5 = [((_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:DisplayObject, _arg2:Number, _arg3:Object):TweenFilterLite{
return (new TweenFilterLite(_arg1, _arg2, _arg3));
}
}
}//package gs
Section 11
//TweenLite (gs.TweenLite)
package gs {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.media.*;
import flash.utils.*;
public class TweenLite {
public var delay:Number;
protected var _endTarget:Object;
private var _sound:SoundTransform;
public var target:Object;
public var duration:Number;
public var startTime:uint;
public var extraTweens:Object;
protected var _color:ColorTransform;
protected var _active:Boolean;
protected var _endColor:ColorTransform;
public var vars:Object;
public var tweens:Object;
public var initTime:uint;
private static var _sprite:Sprite = new Sprite();
private static var _timer:Timer = new Timer(2000);
protected static var _all:Dictionary = new Dictionary();
public static var killDelayedCallsTo:Function = killTweensOf;
public static var version:Number = 5.87;
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;
this.delay = ((_arg3.delay) || (0));
if (_arg2 == 0){
this.duration = 0.001;
if (this.delay == 0){
this.vars.runBackwards = true;
};
};
this.target = (_endTarget = _arg1);
if (!(this.vars.ease is Function)){
this.vars.ease = easeOut;
};
if (this.vars.easeParams != null){
this.vars.proxiedEase = this.vars.ease;
this.vars.ease = easeProxy;
};
if (this.vars.mcColor != null){
this.vars.tint = this.vars.mcColor;
};
if (!isNaN(Number(this.vars.autoAlpha))){
this.vars.alpha = Number(this.vars.autoAlpha);
};
this.tweens = {};
this.extraTweens = {};
this.initTime = getTimer();
if (this.vars.runBackwards == true){
initTweenVals();
};
_active = false;
if ((((_arg2 == 0)) && ((this.delay == 0)))){
complete(true);
} else {
if (!_listening){
_sprite.addEventListener(Event.ENTER_FRAME, executeAll);
_timer.addEventListener("timer", killGarbage);
_timer.start();
_listening = true;
};
};
}
public function set endTarget(_arg1:Object):void{
if ((((this.duration == 0.001)) && ((this.delay <= 0)))){
removeTween(this);
} else {
delete _all[_endTarget][this];
_endTarget = _arg1;
if (_all[_arg1] == undefined){
_all[_arg1] = new Dictionary();
};
_all[_arg1][this] = this;
};
}
public function get colorProxy():Number{
return (0);
}
public function get endTarget():Object{
return (_endTarget);
}
public function get active():Boolean{
if (_active){
return (true);
};
if (((getTimer() - this.initTime) / 1000) > this.delay){
_active = true;
this.startTime = (this.initTime + (this.delay * 1000));
if (this.vars.runBackwards != true){
initTweenVals();
} else {
if (typeof(this.vars.autoAlpha) == "number"){
this.target.visible = true;
};
};
if (this.vars.onStart != null){
this.vars.onStart.apply(null, this.vars.onStartParams);
};
if (this.duration == 0.001){
this.startTime = (this.startTime - 1);
};
return (true);
//unresolved jump
};
return (false);
}
public function initTweenVals():void{
var _local1:Number;
var _local2:String;
var _local3:Number;
var _local4:Array;
var _local5:int;
var _local6:TweenLite;
var _local7:TweenLite;
var _local8:Object;
_local1 = (this.delay - ((getTimer() - this.initTime) / 1000));
if ((this.target is Array)){
_local4 = ((this.vars.endArray) || ([]));
_local5 = 0;
while (_local5 < _local4.length) {
if (((!((this.target[_local5] == _local4[_local5]))) && (!((this.target[_local5] == undefined))))){
this.tweens[_local5.toString()] = {o:this.target, s:this.target[_local5], c:(_local4[_local5] - this.target[_local5])};
};
_local5++;
};
} else {
for (_local2 in this.vars) {
if ((((((((((((((((((((((((((((_local2 == "delay")) || ((_local2 == "ease")))) || ((_local2 == "overwrite")))) || ((_local2 == "onComplete")))) || ((_local2 == "onCompleteParams")))) || ((_local2 == "runBackwards")))) || ((_local2 == "onUpdate")))) || ((_local2 == "onUpdateParams")))) || ((_local2 == "autoAlpha")))) || ((_local2 == "onStart")))) || ((_local2 == "onStartParams")))) || ((_local2 == "easeParams")))) || ((_local2 == "mcColor")))) || ((_local2 == "type")))){
} else {
if ((((_local2 == "tint")) && ((this.target is DisplayObject)))){
_color = this.target.transform.colorTransform;
_endColor = new ColorTransform();
if (this.vars.alpha != undefined){
_endColor.alphaMultiplier = this.vars.alpha;
delete this.vars.alpha;
delete this.tweens.alpha;
} else {
_endColor.alphaMultiplier = this.target.alpha;
};
if (((!((this.vars[_local2] == null))) && (!((this.vars[_local2] == ""))))){
_endColor.color = this.vars[_local2];
};
_local6 = new TweenLite(this, this.duration, {colorProxy:1, delay:_local1, overwrite:false, ease:this.vars.ease, runBackwards:this.vars.runBackwards});
_local6.endTarget = this.target;
} else {
if ((((_local2 == "volume")) && ((this.target is MovieClip)))){
_sound = this.target.soundTransform;
_local7 = new TweenLite(this, this.duration, {volumeProxy:this.vars[_local2], ease:easeOut, delay:_local1, overwrite:false, runBackwards:this.vars.runBackwards});
_local7.endTarget = this.target;
} else {
if (this.target.hasOwnProperty(_local2)){
if (typeof(this.vars[_local2]) == "number"){
_local3 = (this.vars[_local2] - this.target[_local2]);
} else {
_local3 = Number(this.vars[_local2]);
};
this.tweens[_local2] = {o:this.target, s:this.target[_local2], c:_local3};
} else {
this.extraTweens[_local2] = {o:this.target, s:0, c:0, v:this.vars[_local2]};
};
};
};
};
};
};
if (this.vars.runBackwards == true){
for (_local2 in this.tweens) {
_local8 = this.tweens[_local2];
this.tweens[_local2].s = (_local8.s + _local8.c);
_local8.c = (_local8.c * -1);
_local8.o[_local2] = _local8.s;
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
};
if (typeof(this.vars.autoAlpha) == "number"){
this.target.visible = !((((this.vars.runBackwards == true)) && ((this.target.alpha == 0))));
};
}
public function render(_arg1:uint):void{
var _local2:Number;
var _local3:Number;
var _local4:Object;
var _local5:String;
_local2 = ((_arg1 - this.startTime) / 1000);
if (_local2 > this.duration){
_local2 = this.duration;
};
_local3 = this.vars.ease(_local2, 0, 1, this.duration);
for (_local5 in this.tweens) {
_local4 = this.tweens[_local5];
_local4.o[_local5] = (_local4.s + (_local3 * _local4.c));
};
if (this.vars.onUpdate != null){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
if (_local2 == this.duration){
complete(true);
};
}
public function set colorProxy(_arg1:Number):void{
var _local2:Number;
_local2 = (1 - _arg1);
this.target.transform.colorTransform = new ColorTransform(((_color.redMultiplier * _local2) + (_endColor.redMultiplier * _arg1)), ((_color.greenMultiplier * _local2) + (_endColor.greenMultiplier * _arg1)), ((_color.blueMultiplier * _local2) + (_endColor.blueMultiplier * _arg1)), ((_color.alphaMultiplier * _local2) + (_endColor.alphaMultiplier * _arg1)), ((_color.redOffset * _local2) + (_endColor.redOffset * _arg1)), ((_color.greenOffset * _local2) + (_endColor.greenOffset * _arg1)), ((_color.blueOffset * _local2) + (_endColor.blueOffset * _arg1)), ((_color.alphaOffset * _local2) + (_endColor.alphaOffset * _arg1)));
}
public function get volumeProxy():Number{
return (_sound.volume);
}
public function set volumeProxy(_arg1:Number):void{
_sound.volume = _arg1;
this.target.soundTransform = _sound;
}
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){
this.startTime = 0;
render((this.duration * 1000));
return;
};
if ((((typeof(this.vars.autoAlpha) == "number")) && ((this.target.alpha == 0)))){
this.target.visible = false;
};
if (this.vars.onComplete != null){
this.vars.onComplete.apply(null, this.vars.onCompleteParams);
};
removeTween(this);
}
public static function delayedCall(_arg1:Number, _arg2:Function, _arg3:Array=null):TweenLite{
return (new TweenLite(_arg2, 0, {delay:_arg1, onComplete:_arg2, onCompleteParams:_arg3, 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 removeTween(_arg1:TweenLite=null):void{
if (((!((_arg1 == null))) && (!((_all[_arg1.endTarget] == undefined))))){
delete _all[_arg1.endTarget][_arg1];
};
}
protected static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
return ((((-(_arg3) * _arg1) * (_arg1 - 2)) + _arg2));
}
public static function killGarbage(_arg1:TimerEvent):void{
var _local2:Object;
var _local3:uint;
var _local4:Boolean;
var _local5:Object;
var _local6:Object;
var _local7:Object;
_local2 = _all;
_local3 = 0;
for (_local5 in _local2) {
_local4 = false;
for (_local6 in _local2[_local5]) {
_local4 = true;
break;
};
if (!_local4){
delete _local2[_local5];
} else {
_local3++;
};
};
if (_local3 == 0){
_sprite.removeEventListener(Event.ENTER_FRAME, executeAll);
_timer.removeEventListener("timer", killGarbage);
_timer.stop();
_listening = false;
};
}
public static function executeAll(_arg1:Event):void{
var _local2:Object;
var _local3:uint;
var _local4:Object;
var _local5:Object;
_local2 = _all;
_local3 = getTimer();
for (_local4 in _local2) {
for (_local5 in _local2[_local4]) {
if (((!((_local2[_local4][_local5] == undefined))) && (_local2[_local4][_local5].active))){
_local2[_local4][_local5].render(_local3);
if (_local2[_local4] == undefined){
break;
};
};
};
};
}
public static function to(_arg1:Object, _arg2:Number, _arg3:Object):TweenLite{
return (new TweenLite(_arg1, _arg2, _arg3));
}
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];
};
}
}
}//package gs
Section 12
//BBox (sandy.bounds.BBox)
package sandy.bounds {
import sandy.core.data.*;
public class BBox {
public var maxEdge:Point3D;
public var uptodate:Boolean;// = false
public var minEdge:Point3D;
public function BBox(_arg1:Point3D=null, _arg2:Point3D=null){
uptodate = false;
super();
minEdge = ((_arg1)!=null) ? _arg1 : new Point3D(-0.5, -0.5, -0.5);
maxEdge = ((_arg2)!=null) ? _arg2 : new Point3D(0.5, 0.5, 0.5);
}
public function getEdges(_arg1:Array):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Point3D;
if (_arg1 == null){
return;
};
_local2 = ((this.maxEdge.x + this.minEdge.x) / 2);
_local3 = ((this.maxEdge.y + this.minEdge.y) / 2);
_local4 = ((this.maxEdge.z + this.minEdge.z) / 2);
_local5 = (_local2 - this.maxEdge.x);
_local6 = (_local3 - this.maxEdge.y);
_local7 = (_local4 - this.maxEdge.z);
_local8 = _arg1[0];
_local8.x = (_local2 + _local5);
_local8.y = (_local3 + _local6);
_local8.z = (_local4 + _local7);
_local8 = _arg1[1];
_local8.x = (_local2 + _local5);
_local8.y = (_local3 - _local6);
_local8.z = (_local4 + _local7);
_local8 = _arg1[2];
_local8.x = (_local2 + _local5);
_local8.y = (_local3 + _local6);
_local8.z = (_local4 - _local7);
_local8 = _arg1[3];
_local8.x = (_local2 + _local5);
_local8.y = (_local3 - _local6);
_local8.z = (_local4 - _local7);
_local8 = _arg1[4];
_local8.x = (_local2 - _local5);
_local8.y = (_local3 + _local6);
_local8.z = (_local4 + _local7);
_local8 = _arg1[5];
_local8.x = (_local2 - _local5);
_local8.y = (_local3 - _local6);
_local8.z = (_local4 + _local7);
_local8 = _arg1[6];
_local8.x = (_local2 - _local5);
_local8.y = (_local3 + _local6);
_local8.z = (_local4 - _local7);
_local8 = _arg1[7];
_local8.x = (_local2 - _local5);
_local8.y = (_local3 - _local6);
_local8.z = (_local4 - _local7);
}
public function isPointInsideXYZ(_arg1:Number, _arg2:Number, _arg3:Number):Boolean{
return ((((((((((((_arg1 >= this.minEdge.x)) && ((_arg1 <= this.maxEdge.x)))) && ((_arg2 >= this.minEdge.y)))) && ((_arg2 <= this.maxEdge.y)))) && ((_arg3 >= this.minEdge.z)))) && ((_arg3 <= this.maxEdge.z))));
}
public function getCenter():Point3D{
return (new Point3D(((this.maxEdge.x + this.minEdge.x) / 2), ((this.maxEdge.y + this.minEdge.y) / 2), ((this.maxEdge.z + this.minEdge.z) / 2)));
}
public function transform(_arg1:Matrix4):BBox{
var _local2:BBox;
var _local3:Array;
var _local4:Point3D;
_local2 = new BBox();
_local3 = [Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D, Pool.getInstance().nextPoint3D];
getEdges(_local3);
for each (_local4 in _local3) {
_arg1.Point3DMult(_local4);
_local2.addInternalPoint(_local4);
};
return (_local2);
}
public function addInternalPointXYZ(_arg1:Number, _arg2:Number, _arg3:Number):void{
if (_arg1 > this.maxEdge.x){
this.maxEdge.x = _arg1;
};
if (_arg2 > this.maxEdge.y){
this.maxEdge.y = _arg2;
};
if (_arg3 > this.maxEdge.z){
this.maxEdge.z = _arg3;
};
if (_arg1 < this.minEdge.x){
this.minEdge.x = _arg1;
};
if (_arg2 < this.minEdge.y){
this.minEdge.y = _arg2;
};
if (_arg3 < this.minEdge.z){
this.minEdge.z = _arg3;
};
}
public function getSize():Point3D{
return (new Point3D(Math.abs((maxEdge.x - minEdge.x)), Math.abs((maxEdge.y - minEdge.y)), Math.abs((maxEdge.z - minEdge.z))));
}
public function reset():void{
minEdge.reset();
maxEdge.reset();
uptodate = false;
}
public function addInternalPoint(_arg1:Point3D):void{
if (_arg1.x > this.maxEdge.x){
this.maxEdge.x = _arg1.x;
};
if (_arg1.y > this.maxEdge.y){
this.maxEdge.y = _arg1.y;
};
if (_arg1.z > this.maxEdge.z){
this.maxEdge.z = _arg1.z;
};
if (_arg1.x < this.minEdge.x){
this.minEdge.x = _arg1.x;
};
if (_arg1.y < this.minEdge.y){
this.minEdge.y = _arg1.y;
};
if (_arg1.z < this.minEdge.z){
this.minEdge.z = _arg1.z;
};
}
public function merge(_arg1:BBox):void{
this.addInternalPointXYZ(_arg1.maxEdge.x, _arg1.maxEdge.y, _arg1.maxEdge.z);
this.addInternalPointXYZ(_arg1.minEdge.x, _arg1.minEdge.y, _arg1.minEdge.z);
uptodate = false;
}
public function intersectsBox(_arg1:BBox):Boolean{
return ((((((((((((this.minEdge.x <= _arg1.maxEdge.x)) && ((this.minEdge.y <= _arg1.maxEdge.y)))) && ((this.minEdge.z <= _arg1.maxEdge.z)))) && ((this.maxEdge.x >= _arg1.minEdge.x)))) && ((this.maxEdge.y >= _arg1.minEdge.y)))) && ((this.maxEdge.z >= _arg1.minEdge.z))));
}
public function isPointTotalInside(_arg1:Point3D):Boolean{
return ((((((((((((_arg1.x > this.minEdge.x)) && ((_arg1.x < this.maxEdge.x)))) && ((_arg1.y > this.minEdge.y)))) && ((_arg1.y < this.maxEdge.y)))) && ((_arg1.z > this.minEdge.z)))) && ((_arg1.z < this.maxEdge.z))));
}
public function toString():String{
return (((("sandy.bounds.BBox " + minEdge) + " ") + maxEdge));
}
public function clone():BBox{
var _local1:BBox;
_local1 = new BBox();
_local1.maxEdge = maxEdge.clone();
_local1.minEdge = minEdge.clone();
return (_local1);
}
public static function create(_arg1:Array):BBox{
var _local2:BBox;
var _local3:Vertex;
if (_arg1.length == 0){
return (null);
};
_local2 = new (BBox);
for each (_local3 in _arg1) {
_local2.addInternalPointXYZ(_local3.x, _local3.y, _local3.z);
};
return (_local2);
}
}
}//package sandy.bounds
Section 13
//BSphere (sandy.bounds.BSphere)
package sandy.bounds {
import sandy.core.data.*;
public final class BSphere {
public var uptodate:Boolean;// = false
public var position:Point3D;
public var radius:Number;// = 1
public var center:Point3D;
public function BSphere(){
uptodate = false;
center = new Point3D();
radius = 1;
position = new Point3D();
super();
}
public function transform(_arg1:Matrix4):void{
position.copy(center);
_arg1.Point3DMult(position);
uptodate = true;
}
private function computeRadius(_arg1:Array):Number{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:int;
var _local8:int;
_local6 = 0;
_local8 = _arg1.length;
while (_local7 < _local8) {
_local2 = (_arg1[int(_local7)].x - center.x);
_local3 = (_arg1[int(_local7)].x - center.x);
_local4 = (_arg1[int(_local7)].x - center.x);
_local5 = (((_local2 * _local2) + (_local3 * _local3)) + (_local4 * _local4));
if (_local5 > _local6){
_local6 = _local5;
};
_local7++;
};
return (Math.sqrt(_local6));
}
public function resetFromBox(_arg1:BBox):void{
this.center.copy(_arg1.getCenter());
this.radius = Math.sqrt(((((_arg1.maxEdge.x - this.center.x) * (_arg1.maxEdge.x - this.center.x)) + ((_arg1.maxEdge.y - this.center.y) * (_arg1.maxEdge.y - this.center.y))) + ((_arg1.maxEdge.z - this.center.z) * (_arg1.maxEdge.z - this.center.z))));
}
public function reset():void{
center.reset();
radius = 0;
position.reset();
uptodate = false;
}
public function compute(_arg1:Array):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Vertex;
var _local10:Vertex;
var _local11:Number;
var _local12:Vertex;
var _local13:Vertex;
if (_arg1.length == 0){
return;
};
_local6 = 0;
_local7 = 0;
_local8 = _arg1.length;
_local9 = _arg1[0].clone();
_local10 = _arg1[0].clone();
_local11 = 0;
while (_local6 < _local8) {
_local7 = (_local6 + 1);
while (_local7 < _local8) {
_local12 = _arg1[int(_local6)];
_local13 = _arg1[int(_local7)];
_local2 = (_local13.x - _local12.x);
_local3 = (_local13.y - _local12.y);
_local4 = (_local13.z - _local12.z);
_local5 = (((_local2 * _local2) + (_local3 * _local3)) + (_local4 * _local4));
if (_local5 > _local11){
_local11 = _local5;
_local9.copy(_local12);
_local10.copy(_local13);
};
_local7 = (_local7 + 1);
};
_local6 = (_local6 + 1);
};
center = new Point3D(((_local9.x + _local10.x) / 2), ((_local9.y + _local10.y) / 2), ((_local9.z + _local10.z) / 2));
radius = (Math.sqrt(_local11) / 2);
}
public function toString():String{
return ((((("sandy.bounds.BSphere (center : " + center) + ", radius : ") + radius) + ")"));
}
public function distance(_arg1:Point3D):Number{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = (_arg1.x - center.x);
_local3 = (_arg1.y - center.y);
_local4 = (_arg1.z - center.z);
return ((Math.sqrt((((_local2 * _local2) + (_local3 * _local3)) + (_local4 * _local4))) - radius));
}
private function pointsOutofSphere(_arg1:Array):Array{
var _local2:Array;
var _local3:int;
var _local4:int;
_local2 = new Array();
_local4 = _arg1.length;
while (_local3 < _local4) {
if (distance(_arg1[int(_local3)]) > 0){
_local2.push(_arg1[int(_local3)]);
};
_local3++;
};
return (_local2);
}
public static function create(_arg1:Array):BSphere{
var _local2:BSphere;
_local2 = new (BSphere);
_local2.compute(_arg1);
return (_local2);
}
}
}//package sandy.bounds
Section 14
//Edge3D (sandy.core.data.Edge3D)
package sandy.core.data {
public final class Edge3D {
public var vertex1:Vertex;
public var vertex2:Vertex;
public var vertexId1:uint;
public var vertexId2:uint;
public function Edge3D(_arg1:uint, _arg2:uint){
vertexId1 = _arg1;
vertexId2 = _arg2;
}
public function clone():Edge3D{
var _local1:Edge3D;
_local1 = new Edge3D(vertexId1, vertexId2);
return (_local1);
}
}
}//package sandy.core.data
Section 15
//Matrix4 (sandy.core.data.Matrix4)
package sandy.core.data {
import sandy.util.*;
import sandy.math.*;
public final class Matrix4 {
private const _fastMathInitialized:Boolean;
public var n11:Number;
public var n12:Number;
public var n13:Number;
public var n14:Number;
public var n21:Number;
public var n22:Number;
public var n23:Number;
public var n24:Number;
public var n31:Number;
public var n32:Number;
public var n33:Number;
public var n34:Number;
public var n41:Number;
public var n42:Number;
public var n43:Number;
public var n44:Number;
public static const USE_FAST_MATH:Boolean = false;
public function Matrix4(_arg1:Number=1, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=1, _arg7:Number=0, _arg8:Number=0, _arg9:Number=0, _arg10:Number=0, _arg11:Number=1, _arg12:Number=0, _arg13:Number=0, _arg14:Number=0, _arg15:Number=0, _arg16:Number=1){
_fastMathInitialized = FastMath.initialized;
super();
n11 = _arg1;
n12 = _arg2;
n13 = _arg3;
n14 = _arg4;
n21 = _arg5;
n22 = _arg6;
n23 = _arg7;
n24 = _arg8;
n31 = _arg9;
n32 = _arg10;
n33 = _arg11;
n34 = _arg12;
n41 = _arg13;
n42 = _arg14;
n43 = _arg15;
n44 = _arg16;
}
final public function multiply3x3(_arg1:Matrix4):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
_local2 = n11;
_local3 = _arg1.n11;
_local4 = n21;
_local5 = _arg1.n21;
_local6 = n31;
_local7 = _arg1.n31;
_local8 = n12;
_local9 = _arg1.n12;
_local10 = n22;
_local11 = _arg1.n22;
_local12 = n32;
_local13 = _arg1.n32;
_local14 = n13;
_local15 = _arg1.n13;
_local16 = n23;
_local17 = _arg1.n23;
_local18 = n33;
_local19 = _arg1.n33;
n11 = (((_local2 * _local3) + (_local8 * _local5)) + (_local14 * _local7));
n12 = (((_local2 * _local9) + (_local8 * _local11)) + (_local14 * _local13));
n13 = (((_local2 * _local15) + (_local8 * _local17)) + (_local14 * _local19));
n21 = (((_local4 * _local3) + (_local10 * _local5)) + (_local16 * _local7));
n22 = (((_local4 * _local9) + (_local10 * _local11)) + (_local16 * _local13));
n23 = (((_local4 * _local15) + (_local10 * _local17)) + (_local16 * _local19));
n31 = (((_local6 * _local3) + (_local12 * _local5)) + (_local18 * _local7));
n32 = (((_local6 * _local9) + (_local12 * _local11)) + (_local18 * _local13));
n33 = (((_local6 * _local15) + (_local12 * _local17)) + (_local18 * _local19));
n14 = (n24 = (n34 = (n41 = (n42 = (n43 = 0)))));
n44 = 1;
}
final public function det():Number{
return (((((((((n11 * n22) - (n21 * n12)) * ((n33 * n44) - (n43 * n34))) - (((n11 * n32) - (n31 * n12)) * ((n23 * n44) - (n43 * n24)))) + (((n11 * n42) - (n41 * n12)) * ((n23 * n34) - (n33 * n24)))) + (((n21 * n32) - (n31 * n22)) * ((n13 * n44) - (n43 * n14)))) - (((n21 * n42) - (n41 * n22)) * ((n13 * n34) - (n33 * n14)))) + (((n31 * n42) - (n41 * n32)) * ((n13 * n24) - (n23 * n14)))));
}
final public function translationPoint3D(_arg1:Point3D):void{
identity();
n14 = _arg1.x;
n24 = _arg1.y;
n34 = _arg1.z;
}
final public function rotationY(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
identity();
_arg1 = NumberUtil.toRadian(_arg1);
_local2 = ((USE_FAST_MATH)==false) ? Math.cos(_arg1) : FastMath.cos(_arg1);
_local3 = ((USE_FAST_MATH)==false) ? Math.sin(_arg1) : FastMath.sin(_arg1);
n11 = _local2;
n13 = -(_local3);
n31 = _local3;
n33 = _local2;
}
final public function eulerRotation(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
identity();
_arg1 = -(NumberUtil.toRadian(_arg1));
_arg2 = NumberUtil.toRadian(_arg2);
_arg3 = -(NumberUtil.toRadian(_arg3));
_local4 = ((USE_FAST_MATH)==false) ? Math.cos(_arg1) : FastMath.cos(_arg1);
_local5 = ((USE_FAST_MATH)==false) ? Math.sin(_arg1) : FastMath.sin(_arg1);
_local6 = ((USE_FAST_MATH)==false) ? Math.cos(_arg2) : FastMath.cos(_arg2);
_local7 = ((USE_FAST_MATH)==false) ? Math.sin(_arg2) : FastMath.sin(_arg2);
_local8 = ((USE_FAST_MATH)==false) ? Math.cos(_arg3) : FastMath.cos(_arg3);
_local9 = ((USE_FAST_MATH)==false) ? Math.sin(_arg3) : FastMath.sin(_arg3);
_local10 = (_local4 * _local7);
_local11 = (_local5 * _local7);
n11 = (_local6 * _local8);
n12 = (_local6 * _local9);
n13 = -(_local7);
n21 = ((_local11 * _local8) - (_local4 * _local9));
n22 = ((_local11 * _local9) + (_local4 * _local8));
n23 = (_local5 * _local6);
n31 = ((_local10 * _local8) + (_local5 * _local9));
n32 = ((_local10 * _local9) - (_local5 * _local8));
n33 = (_local4 * _local6);
}
final public function rotationX(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
identity();
_arg1 = NumberUtil.toRadian(_arg1);
_local2 = ((USE_FAST_MATH)==false) ? Math.cos(_arg1) : FastMath.cos(_arg1);
_local3 = ((USE_FAST_MATH)==false) ? Math.sin(_arg1) : FastMath.sin(_arg1);
n22 = _local2;
n23 = -(_local3);
n32 = _local3;
n33 = _local2;
}
final public function multiply(_arg1:Matrix4):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
_local2 = n11;
_local3 = n21;
_local4 = n31;
_local5 = n41;
_local6 = n12;
_local7 = n22;
_local8 = n32;
_local9 = n42;
_local10 = n13;
_local11 = n23;
_local12 = n33;
_local13 = n43;
_local14 = n14;
_local15 = n24;
_local16 = n34;
_local17 = n44;
_local18 = _arg1.n11;
_local19 = _arg1.n21;
_local20 = _arg1.n31;
_local21 = _arg1.n41;
_local22 = _arg1.n12;
_local23 = _arg1.n22;
_local24 = _arg1.n32;
_local25 = _arg1.n42;
_local26 = _arg1.n13;
_local27 = _arg1.n23;
_local28 = _arg1.n33;
_local29 = _arg1.n43;
_local30 = _arg1.n14;
_local31 = _arg1.n24;
_local32 = _arg1.n34;
_local33 = _arg1.n44;
n11 = ((((_local2 * _local18) + (_local6 * _local19)) + (_local10 * _local20)) + (_local14 * _local21));
n12 = ((((_local2 * _local22) + (_local6 * _local23)) + (_local10 * _local24)) + (_local14 * _local25));
n13 = ((((_local2 * _local26) + (_local6 * _local27)) + (_local10 * _local28)) + (_local14 * _local29));
n14 = ((((_local2 * _local30) + (_local6 * _local31)) + (_local10 * _local32)) + (_local14 * _local33));
n21 = ((((_local3 * _local18) + (_local7 * _local19)) + (_local11 * _local20)) + (_local15 * _local21));
n22 = ((((_local3 * _local22) + (_local7 * _local23)) + (_local11 * _local24)) + (_local15 * _local25));
n23 = ((((_local3 * _local26) + (_local7 * _local27)) + (_local11 * _local28)) + (_local15 * _local29));
n24 = ((((_local3 * _local30) + (_local7 * _local31)) + (_local11 * _local32)) + (_local15 * _local33));
n31 = ((((_local4 * _local18) + (_local8 * _local19)) + (_local12 * _local20)) + (_local16 * _local21));
n32 = ((((_local4 * _local22) + (_local8 * _local23)) + (_local12 * _local24)) + (_local16 * _local25));
n33 = ((((_local4 * _local26) + (_local8 * _local27)) + (_local12 * _local28)) + (_local16 * _local29));
n34 = ((((_local4 * _local30) + (_local8 * _local31)) + (_local12 * _local32)) + (_local16 * _local33));
n41 = ((((_local5 * _local18) + (_local9 * _local19)) + (_local13 * _local20)) + (_local17 * _local21));
n42 = ((((_local5 * _local22) + (_local9 * _local23)) + (_local13 * _local24)) + (_local17 * _local25));
n43 = ((((_local5 * _local26) + (_local9 * _local27)) + (_local13 * _local28)) + (_local17 * _local29));
n44 = ((((_local5 * _local30) + (_local9 * _local31)) + (_local13 * _local32)) + (_local17 * _local33));
}
final public function axisRotationWithReference(_arg1:Point3D, _arg2:Point3D, _arg3:Number):void{
var _local4:Matrix4;
var _local5:Number;
_local4 = new Matrix4();
_local5 = ((_arg3 + 360) % 360);
translation(_arg2.x, _arg2.y, _arg2.z);
_local4.axisRotation(_arg1.x, _arg1.y, _arg1.z, _local5);
multiply(_local4);
_local4.translation(-(_arg2.x), -(_arg2.y), -(_arg2.z));
multiply(_local4);
_local4 = null;
}
final public function getTrace():Number{
return ((((n11 + n22) + n33) + n44));
}
final public function zero():void{
n11 = 0;
n12 = 0;
n13 = 0;
n14 = 0;
n21 = 0;
n22 = 0;
n23 = 0;
n24 = 0;
n31 = 0;
n32 = 0;
n33 = 0;
n34 = 0;
n41 = 0;
n42 = 0;
n43 = 0;
n44 = 0;
}
final public function rotationZ(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
identity();
_arg1 = NumberUtil.toRadian(_arg1);
_local2 = ((USE_FAST_MATH)==false) ? Math.cos(_arg1) : FastMath.cos(_arg1);
_local3 = ((USE_FAST_MATH)==false) ? Math.sin(_arg1) : FastMath.sin(_arg1);
n11 = _local2;
n12 = -(_local3);
n21 = _local3;
n22 = _local2;
}
final public function Point3DMult(_arg1:Point3D):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = _arg1.x;
_local3 = _arg1.y;
_local4 = _arg1.z;
_arg1.x = ((((_local2 * n11) + (_local3 * n12)) + (_local4 * n13)) + n14);
_arg1.y = ((((_local2 * n21) + (_local3 * n22)) + (_local4 * n23)) + n24);
_arg1.z = ((((_local2 * n31) + (_local3 * n32)) + (_local4 * n33)) + n34);
}
final public function getEulerAngles():Point3D{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local1 = 57.295779513;
_local2 = (Math.asin(-(this.n13)) * _local1);
if (!NumberUtil.isZero((Math.abs(this.n13) - 1))){
_local3 = (-(Math.atan2(this.n23, this.n33)) * _local1);
_local4 = (-(Math.atan2(this.n12, this.n11)) * _local1);
} else {
_local3 = 0;
_local4 = Math.atan2(-(this.n21), this.n22);
};
if (_local3 < 0){
_local3 = (_local3 + 360);
};
if (_local2 < 0){
_local2 = (_local2 + 360);
};
if (_local4 < 0){
_local4 = (_local4 + 360);
};
return (new Point3D(_local3, _local2, _local4));
}
final public function inverse():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local1 = det();
if (Math.abs(_local1) < 0.001){
throw (new Error("cannot invert a matrix with a null determinant"));
};
_local1 = (1 / _local1);
_local2 = n11;
_local3 = n21;
_local4 = n31;
_local5 = n41;
_local6 = n12;
_local7 = n22;
_local8 = n32;
_local9 = n42;
_local10 = n13;
_local11 = n23;
_local12 = n33;
_local13 = n43;
_local14 = n14;
_local15 = n24;
_local16 = n34;
_local17 = n44;
n11 = (_local1 * (((_local7 * ((_local12 * _local17) - (_local13 * _local16))) - (_local8 * ((_local11 * _local17) - (_local13 * _local15)))) + (_local9 * ((_local11 * _local16) - (_local12 * _local15)))));
n12 = (-(_local1) * (((_local6 * ((_local12 * _local17) - (_local13 * _local16))) - (_local8 * ((_local10 * _local17) - (_local13 * _local14)))) + (_local9 * ((_local10 * _local16) - (_local12 * _local14)))));
n13 = (_local1 * (((_local6 * ((_local11 * _local17) - (_local13 * _local15))) - (_local7 * ((_local10 * _local17) - (_local13 * _local14)))) + (_local9 * ((_local10 * _local15) - (_local11 * _local14)))));
n14 = (-(_local1) * (((_local6 * ((_local11 * _local16) - (_local12 * _local15))) - (_local7 * ((_local10 * _local16) - (_local12 * _local14)))) + (_local8 * ((_local10 * _local15) - (_local11 * _local14)))));
n21 = (-(_local1) * (((_local3 * ((_local12 * _local17) - (_local13 * _local16))) - (_local4 * ((_local11 * _local17) - (_local13 * _local15)))) + (_local5 * ((_local11 * _local16) - (_local12 * _local15)))));
n22 = (_local1 * (((_local2 * ((_local12 * _local17) - (_local13 * _local16))) - (_local4 * ((_local10 * _local17) - (_local13 * _local14)))) + (_local5 * ((_local10 * _local16) - (_local12 * _local14)))));
n23 = (-(_local1) * (((_local2 * ((_local11 * _local17) - (_local13 * _local15))) - (_local3 * ((_local10 * _local17) - (_local13 * _local14)))) + (_local5 * ((_local10 * _local15) - (_local11 * _local14)))));
n24 = (_local1 * (((_local2 * ((_local11 * _local16) - (_local12 * _local15))) - (_local3 * ((_local10 * _local16) - (_local12 * _local14)))) + (_local4 * ((_local10 * _local15) - (_local11 * _local14)))));
n31 = (_local1 * (((_local3 * ((_local8 * _local17) - (_local9 * _local16))) - (_local4 * ((_local7 * _local17) - (_local9 * _local15)))) + (_local5 * ((_local7 * _local16) - (_local8 * _local15)))));
n32 = (-(_local1) * (((_local2 * ((_local8 * _local17) - (_local9 * _local16))) - (_local4 * ((_local6 * _local17) - (_local9 * _local14)))) + (_local5 * ((_local6 * _local16) - (_local8 * _local14)))));
n33 = (_local1 * (((_local2 * ((_local7 * _local17) - (_local9 * _local15))) - (_local3 * ((_local6 * _local17) - (_local9 * _local14)))) + (_local5 * ((_local6 * _local15) - (_local7 * _local14)))));
n34 = (-(_local1) * (((_local2 * ((_local7 * _local16) - (_local8 * _local15))) - (_local3 * ((_local6 * _local16) - (_local8 * _local14)))) + (_local4 * ((_local6 * _local15) - (_local7 * _local14)))));
n41 = (-(_local1) * (((_local3 * ((_local8 * _local13) - (_local9 * _local12))) - (_local4 * ((_local7 * _local13) - (_local9 * _local11)))) + (_local5 * ((_local7 * _local12) - (_local8 * _local11)))));
n42 = (_local1 * (((_local2 * ((_local8 * _local13) - (_local9 * _local12))) - (_local4 * ((_local6 * _local13) - (_local9 * _local10)))) + (_local5 * ((_local6 * _local12) - (_local8 * _local10)))));
n43 = (-(_local1) * (((_local2 * ((_local7 * _local13) - (_local9 * _local11))) - (_local3 * ((_local6 * _local13) - (_local9 * _local10)))) + (_local5 * ((_local6 * _local11) - (_local7 * _local10)))));
n44 = (_local1 * (((_local2 * ((_local7 * _local12) - (_local8 * _local11))) - (_local3 * ((_local6 * _local12) - (_local8 * _local10)))) + (_local4 * ((_local6 * _local11) - (_local7 * _local10)))));
}
final public function translation(_arg1:Number, _arg2:Number, _arg3:Number):void{
identity();
n14 = _arg1;
n24 = _arg2;
n34 = _arg3;
}
final public function det3x3():Number{
return ((((n11 * ((n22 * n33) - (n23 * n32))) + (n21 * ((n32 * n13) - (n12 * n33)))) + (n31 * ((n12 * n23) - (n22 * n13)))));
}
final public function identity():void{
n11 = 1;
n12 = 0;
n13 = 0;
n14 = 0;
n21 = 0;
n22 = 1;
n23 = 0;
n24 = 0;
n31 = 0;
n32 = 0;
n33 = 1;
n34 = 0;
n41 = 0;
n42 = 0;
n43 = 0;
n44 = 1;
}
final public function axisRotation(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
identity();
_arg4 = NumberUtil.toRadian(_arg4);
_local5 = ((USE_FAST_MATH)==false) ? Math.cos(_arg4) : FastMath.cos(_arg4);
_local6 = ((USE_FAST_MATH)==false) ? Math.sin(_arg4) : FastMath.sin(_arg4);
_local7 = (1 - _local5);
_local8 = ((_arg1 * _arg2) * _local7);
_local9 = ((_arg2 * _arg3) * _local7);
_local10 = ((_arg1 * _arg3) * _local7);
_local11 = (_local6 * _arg3);
_local12 = (_local6 * _arg2);
_local13 = (_local6 * _arg1);
n11 = (_local5 + ((_arg1 * _arg1) * _local7));
n12 = (-(_local11) + _local8);
n13 = (_local12 + _local10);
n21 = (_local11 + _local8);
n22 = (_local5 + ((_arg2 * _arg2) * _local7));
n23 = (-(_local13) + _local9);
n31 = (-(_local12) + _local10);
n32 = (_local13 + _local9);
n33 = (_local5 + ((_arg3 * _arg3) * _local7));
}
final public function addMatrix(_arg1:Matrix4):void{
n11 = (n11 + _arg1.n11);
n12 = (n12 + _arg1.n12);
n13 = (n13 + _arg1.n13);
n14 = (n14 + _arg1.n14);
n21 = (n21 + _arg1.n21);
n22 = (n22 + _arg1.n22);
n23 = (n23 + _arg1.n23);
n24 = (n24 + _arg1.n24);
n31 = (n31 + _arg1.n31);
n32 = (n32 + _arg1.n32);
n33 = (n33 + _arg1.n33);
n34 = (n34 + _arg1.n34);
n41 = (n41 + _arg1.n41);
n42 = (n42 + _arg1.n42);
n43 = (n43 + _arg1.n43);
n44 = (n44 + _arg1.n44);
}
final public function axisRotationPoint3D(_arg1:Point3D, _arg2:Number):void{
axisRotation(_arg1.x, _arg1.y, _arg1.z, _arg2);
}
final public function scale(_arg1:Number, _arg2:Number, _arg3:Number):void{
identity();
n11 = _arg1;
n22 = _arg2;
n33 = _arg3;
}
final public function multiply4x3(_arg1:Matrix4):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
_local2 = n11;
_local3 = _arg1.n11;
_local4 = n21;
_local5 = _arg1.n21;
_local6 = n31;
_local7 = _arg1.n31;
_local8 = n12;
_local9 = _arg1.n12;
_local10 = n22;
_local11 = _arg1.n22;
_local12 = n32;
_local13 = _arg1.n32;
_local14 = n13;
_local15 = _arg1.n13;
_local16 = n23;
_local17 = _arg1.n23;
_local18 = n33;
_local19 = _arg1.n33;
_local20 = _arg1.n14;
_local21 = _arg1.n24;
_local22 = _arg1.n34;
n11 = (((_local2 * _local3) + (_local8 * _local5)) + (_local14 * _local7));
n12 = (((_local2 * _local9) + (_local8 * _local11)) + (_local14 * _local13));
n13 = (((_local2 * _local15) + (_local8 * _local17)) + (_local14 * _local19));
n14 = ((((_local20 * _local2) + (_local21 * _local8)) + (_local22 * _local14)) + n14);
n21 = (((_local4 * _local3) + (_local10 * _local5)) + (_local16 * _local7));
n22 = (((_local4 * _local9) + (_local10 * _local11)) + (_local16 * _local13));
n23 = (((_local4 * _local15) + (_local10 * _local17)) + (_local16 * _local19));
n24 = ((((_local20 * _local4) + (_local21 * _local10)) + (_local22 * _local16)) + n24);
n31 = (((_local6 * _local3) + (_local12 * _local5)) + (_local18 * _local7));
n32 = (((_local6 * _local9) + (_local12 * _local11)) + (_local18 * _local13));
n33 = (((_local6 * _local15) + (_local12 * _local17)) + (_local18 * _local19));
n34 = ((((_local20 * _local6) + (_local21 * _local12)) + (_local22 * _local18)) + n34);
n41 = (n42 = (n43 = 0));
n44 = 1;
}
final public function scalePoint3D(_arg1:Point3D):void{
identity();
n11 = _arg1.x;
n22 = _arg1.y;
n33 = _arg1.z;
}
final public function fromPoint3Ds(_arg1:Point3D, _arg2:Point3D, _arg3:Point3D, _arg4:Point3D):void{
zero();
n11 = _arg1.x;
n21 = _arg1.y;
n31 = _arg1.z;
n12 = _arg2.x;
n22 = _arg2.y;
n32 = _arg2.z;
n13 = _arg3.x;
n23 = _arg3.y;
n33 = _arg3.z;
n14 = _arg4.x;
n24 = _arg4.y;
n34 = _arg4.z;
}
final public function clone():Matrix4{
return (new Matrix4(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44));
}
final public function Point3DMult3x3(_arg1:Point3D):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = _arg1.x;
_local3 = _arg1.y;
_local4 = _arg1.z;
_arg1.x = (((_local2 * n11) + (_local3 * n12)) + (_local4 * n13));
_arg1.y = (((_local2 * n21) + (_local3 * n22)) + (_local4 * n23));
_arg1.z = (((_local2 * n31) + (_local3 * n32)) + (_local4 * n33));
}
public function serialize(_arg1:Number=1E-6):String{
var _local2:Function;
var _local3:String;
_local2 = NumberUtil.roundTo;
_local3 = new String("");
_local3 = (_local3 + (((((((_local2(n11, _arg1) + ",") + _local2(n12, _arg1)) + ",") + _local2(n13, _arg1)) + ",") + _local2(n14, _arg1)) + ","));
_local3 = (_local3 + (((((((_local2(n21, _arg1) + ",") + _local2(n22, _arg1)) + ",") + _local2(n23, _arg1)) + ",") + _local2(n24, _arg1)) + ","));
_local3 = (_local3 + (((((((_local2(n31, _arg1) + ",") + _local2(n32, _arg1)) + ",") + _local2(n33, _arg1)) + ",") + _local2(n34, _arg1)) + ","));
_local3 = (_local3 + ((((((_local2(n41, _arg1) + ",") + _local2(n42, _arg1)) + ",") + _local2(n43, _arg1)) + ",") + _local2(n44, _arg1)));
return (_local3);
}
final public function toString():String{
var _local1:String;
_local1 = ("sandy.core.data.Matrix4" + "\n (");
_local1 = (_local1 + (((((((n11 + "\t") + n12) + "\t") + n13) + "\t") + n14) + "\n"));
_local1 = (_local1 + (((((((n21 + "\t") + n22) + "\t") + n23) + "\t") + n24) + "\n"));
_local1 = (_local1 + (((((((n31 + "\t") + n32) + "\t") + n33) + "\t") + n34) + "\n"));
_local1 = (_local1 + (((((((n41 + "\t") + n42) + "\t") + n43) + "\t") + n44) + "\n)"));
return (_local1);
}
final public function copy(_arg1:Matrix4):void{
n11 = _arg1.n11;
n12 = _arg1.n12;
n13 = _arg1.n13;
n14 = _arg1.n14;
n21 = _arg1.n21;
n22 = _arg1.n22;
n23 = _arg1.n23;
n24 = _arg1.n24;
n31 = _arg1.n31;
n32 = _arg1.n32;
n33 = _arg1.n33;
n34 = _arg1.n34;
n41 = _arg1.n41;
n42 = _arg1.n42;
n43 = _arg1.n43;
n44 = _arg1.n44;
}
final public function getTranslation():Point3D{
return (new Point3D(n14, n24, n34));
}
public static function deserialize(_arg1:String):Matrix4{
var _local2:Array;
var _local3:Number;
var _local4:Matrix4;
_local2 = _arg1.split(",");
if (_local2.length != 16){
trace(("Unexpected length of string to deserialize into a matrix4 " + _arg1));
};
_local3 = 0;
while (_local3 < _local2.length) {
_local2[_local3] = Number(_local2[_local3]);
_local3++;
};
_local4 = new Matrix4(_local2[0], _local2[1], _local2[2], _local2[3], _local2[4], _local2[5], _local2[6], _local2[7], _local2[8], _local2[9], _local2[10], _local2[11], _local2[12], _local2[13], _local2[14], _local2[15]);
return (_local4);
}
}
}//package sandy.core.data
Section 16
//Plane (sandy.core.data.Plane)
package sandy.core.data {
public final class Plane {
public var a:Number;
public var c:Number;
public var b:Number;
public var d:Number;
public function Plane(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){
this.a = _arg1;
this.b = _arg2;
this.c = _arg3;
this.d = _arg4;
}
public function toString():String{
return (((((((((("sandy.core.data.Plane" + "(a:") + a) + ", b:") + b) + ", c:") + c) + ", d:") + d) + ")"));
}
}
}//package sandy.core.data
Section 17
//Point3D (sandy.core.data.Point3D)
package sandy.core.data {
import sandy.util.*;
public final class Point3D {
public var y:Number;
public var x:Number;
public var z:Number;
public function Point3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
x = _arg1;
y = _arg2;
z = _arg3;
}
final public function sub(_arg1:Point3D):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
z = (z - _arg1.z);
}
final public function negate():Point3D{
return (new Point3D(-(x), -(y), -(z)));
}
final public function dot(_arg1:Point3D):Number{
return ((((x * _arg1.x) + (y * _arg1.y)) + (z * _arg1.z)));
}
final public function scale(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
z = (z * _arg1);
}
public function resetToPositiveInfinity():void{
x = (y = (z = Number.POSITIVE_INFINITY));
}
final public function normalize():void{
var _local1:Number;
_local1 = getNorm();
if ((((_local1 == 0)) || ((_local1 == 1)))){
return;
};
x = (x / _local1);
y = (y / _local1);
z = (z / _local1);
}
public function resetToNegativeInfinity():void{
x = (y = (z = Number.NEGATIVE_INFINITY));
}
final public function cross(_arg1:Point3D):Point3D{
return (new Point3D(((y * _arg1.z) - (z * _arg1.y)), ((z * _arg1.x) - (x * _arg1.z)), ((x * _arg1.y) - (y * _arg1.x))));
}
final public function getMinComponent():Number{
return (Math.min(x, Math.min(y, z)));
}
public function reset(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):void{
x = _arg1;
y = _arg2;
z = _arg3;
}
final public function pow(_arg1:Number):void{
x = Math.pow(x, _arg1);
y = Math.pow(y, _arg1);
z = Math.pow(z, _arg1);
}
final public function clone():Point3D{
var _local1:Point3D;
_local1 = new Point3D(x, y, z);
return (_local1);
}
public function serialize(_arg1:Number=0.1):String{
return (((((NumberUtil.roundTo(x, _arg1) + ",") + NumberUtil.roundTo(y, _arg1)) + ",") + NumberUtil.roundTo(z, _arg1)));
}
final public function add(_arg1:Point3D):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
}
final public function getAngle(_arg1:Point3D):Number{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
_local2 = getNorm();
_local3 = _arg1.getNorm();
_local4 = (_local2 * _local3);
if (_local4 == 0){
return (0);
};
_local5 = (dot(_arg1) / _local4);
_local6 = (1 - (_local5 * _local5));
if (_local6 < 0){
trace((" wrong " + _local5));
_local6 = 0;
};
return (Math.atan2(Math.sqrt(_local6), _local5));
}
final public function crossWith(_arg1:Point3D):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = ((y * _arg1.z) - (z * _arg1.y));
_local3 = ((z * _arg1.x) - (x * _arg1.z));
_local4 = ((x * _arg1.y) - (y * _arg1.x));
x = _local2;
y = _local3;
z = _local4;
}
final public function toString(_arg1:Number=0):String{
return ((("{" + serialize(Math.pow(10, -(_arg1)))) + "}"));
}
final public function getMaxComponent():Number{
return (Math.max(x, Math.max(y, z)));
}
final public function getNorm():Number{
return (Math.sqrt((((x * x) + (y * y)) + (z * z))));
}
final public function copy(_arg1:Point3D):void{
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
final public function equals(_arg1:Point3D):Boolean{
return ((((((_arg1.x == x)) && ((_arg1.y == y)))) && ((_arg1.z == z))));
}
public static function deserialize(_arg1:String):Point3D{
var _local2:Array;
var _local3:Number;
_local2 = _arg1.split(",");
if (_local2.length != 3){
trace(("Unexpected length of string to deserialize into a Point3D " + _arg1));
};
_local3 = 0;
while (_local3 < _local2.length) {
_local2[_local3] = Number(_local2[_local3]);
_local3++;
};
return (new Point3D(_local2[0], _local2[1], _local2[2]));
}
}
}//package sandy.core.data
Section 18
//Polygon (sandy.core.data.Polygon)
package sandy.core.data {
import sandy.materials.*;
import sandy.core.*;
import flash.display.*;
import sandy.core.scenegraph.*;
import flash.events.*;
import sandy.events.*;
import sandy.view.*;
import flash.geom.*;
import sandy.core.interaction.*;
import flash.utils.*;
import sandy.math.*;
public final class Polygon implements IDisplayable {
public const id:uint;
protected var m_oContainer:Sprite;
private var m_nDepth:Number;
protected var m_oEB:BubbleEventBroadcaster;
private var m_nNormalId:uint;
public var shape:Shape3D;
private var mouseEvents:Boolean;// = false
public var vertexNormals:Array;
public var aNeighboors:Array;
public var isClipped:Boolean;// = false
public var caUVCoord:Array;
public var uvBounds:Rectangle;
private var m_oGeometry:Geometry3D;
public var minZ:Number;
public var aUVCoord:Array;
private var mouseInteractivity:Boolean;// = false
public var cvertices:Array;
public var a:Vertex;
public var c:Vertex;
private var m_oAppearance:Appearance;
public var b:Vertex;
public var d:Vertex;
private var m_oScene:Scene3D;// = null
public var visible:Boolean;
public var aEdges:Array;
public var vertices:Array;
private static var _ID_:uint = 0;
public static var POLYGON_MAP:Dictionary = new Dictionary(true);
public function Polygon(_arg1:Shape3D, _arg2:Geometry3D, _arg3:Array, _arg4:Array=null, _arg5:Number=0, _arg6:uint=0){
id = _ID_++;
isClipped = false;
aNeighboors = new Array();
m_oScene = null;
mouseEvents = false;
mouseInteractivity = false;
super();
shape = _arg1;
m_oGeometry = _arg2;
__update(_arg3, _arg4, _arg5, _arg6);
m_oContainer = new Sprite();
POLYGON_MAP[id] = this;
m_oEB = new BubbleEventBroadcaster(this);
}
private function _finishMaterial(_arg1:SandyEvent):void{
if (!m_oAppearance){
return;
};
if (!visible){
return;
};
m_oAppearance.frontMaterial.finish(scene);
if (m_oAppearance.backMaterial != m_oAppearance.frontMaterial){
m_oAppearance.backMaterial.finish(scene);
};
}
public function createNormal():Point3D{
var _local1:Point3D;
var _local2:Point3D;
var _local3:Vertex;
var _local4:Vertex;
var _local5:Vertex;
var _local6:Point3D;
if (vertices.length > 2){
_local3 = vertices[0];
_local4 = vertices[1];
_local5 = vertices[2];
_local1 = new Point3D((_local4.x - _local3.x), (_local4.y - _local3.y), (_local4.z - _local3.z));
_local2 = new Point3D((_local4.x - _local5.x), (_local4.y - _local5.y), (_local4.z - _local5.z));
_local6 = Point3DMath.cross(_local1, _local2);
Point3DMath.normalize(_local6);
return (_local6);
};
return (new Point3D());
}
public function toString():String{
return ((((("sandy.core.data.Polygon::id=" + id) + " [Points: ") + vertices.length) + "]"));
}
public function set depth(_arg1:Number):void{
m_nDepth = _arg1;
}
private function _beginMaterial(_arg1:SandyEvent):void{
if (!m_oAppearance){
return;
};
if (!visible){
return;
};
m_oAppearance.frontMaterial.begin(scene);
if (m_oAppearance.backMaterial != m_oAppearance.frontMaterial){
m_oAppearance.backMaterial.begin(scene);
};
}
public function get scene():Scene3D{
return (m_oScene);
}
public function get appearance():Appearance{
return (m_oAppearance);
}
protected function _onTextureInteraction(_arg1:Event=null):void{
var _local2:Point;
var _local3:UVCoord;
if ((((_arg1 == null)) || (!((_arg1 is MouseEvent))))){
_arg1 = new MouseEvent(MouseEvent.MOUSE_MOVE, true, false, 0, 0, null, false, false, false, false, 0);
};
_local2 = new Point(scene.container.mouseX, scene.container.mouseY);
_local3 = getUVFrom2D(_local2);
VirtualMouse.getInstance().interactWithTexture(this, _local3, (_arg1 as MouseEvent));
_onInteraction(_arg1);
}
public function updateNormal():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
_local1 = (((a.y - b.y) * (c.z - b.z)) - ((a.z - b.z) * (c.y - b.y)));
_local2 = (((a.z - b.z) * (c.x - b.x)) - ((a.x - b.x) * (c.z - b.z)));
_local3 = (((a.x - b.x) * (c.y - b.y)) - ((a.y - b.y) * (c.x - b.x)));
normal.reset(_local1, _local2, _local3);
}
public function set scene(_arg1:Scene3D):void{
if (_arg1 == null){
return;
};
if (scene != null){
scene.removeEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.removeEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
};
m_oScene = _arg1;
scene.addEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.addEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
}
public function get container():Sprite{
return (m_oContainer);
}
public function swapCulling():void{
normal.negate();
}
public function get3DFrom2D(_arg1:Point):Point3D{
var _local2:Matrix;
var _local3:Number;
var _local4:Number;
var _local5:Point3D;
_local2 = new Matrix((vertices[1].sx - vertices[0].sx), (vertices[2].sx - vertices[0].sx), (vertices[1].sy - vertices[0].sy), (vertices[2].sy - vertices[0].sy), 0, 0);
_local2.invert();
_local3 = ((_local2.a * (_arg1.x - vertices[0].sx)) + (_local2.b * (_arg1.y - vertices[0].sy)));
_local4 = ((_local2.c * (_arg1.x - vertices[0].sx)) + (_local2.d * (_arg1.y - vertices[0].sy)));
_local5 = new Point3D(((vertices[0].x + (_local3 * (vertices[1].x - vertices[0].x))) + (_local4 * (vertices[2].x - vertices[0].x))), ((vertices[0].y + (_local3 * (vertices[1].y - vertices[0].y))) + (_local4 * (vertices[2].y - vertices[0].y))), ((vertices[0].z + (_local3 * (vertices[1].z - vertices[0].z))) + (_local4 * (vertices[2].z - vertices[0].z))));
this.shape.matrix.Point3DMult(_local5);
return (_local5);
}
private function __update(_arg1:Array, _arg2:Array, _arg3:uint, _arg4:uint):void{
var _local5:int;
var _local6:*;
var _local7:uint;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:*;
var _local13:UVCoord;
var _local14:Point3D;
var _local15:Edge3D;
_local5 = 0;
vertexNormals = new Array();
vertices = new Array();
for each (_local6 in _arg1) {
vertices[_local5] = Vertex(m_oGeometry.aVertex[_arg1[_local5]]);
vertexNormals[_local5] = m_oGeometry.aVertexNormals[_arg1[_local5]];
_local5++;
};
a = vertices[0];
b = vertices[1];
c = vertices[2];
d = vertices[3];
if (_arg2){
_local8 = Number.POSITIVE_INFINITY;
_local9 = Number.POSITIVE_INFINITY;
_local10 = Number.NEGATIVE_INFINITY;
_local11 = Number.NEGATIVE_INFINITY;
aUVCoord = new Array();
_local5 = 0;
if (_arg2){
for each (_local12 in _arg2) {
_local13 = (m_oGeometry.aUVCoords[_arg2[_local5]] as UVCoord);
if (_local13 == null){
_local13 = new UVCoord(0, 0);
};
aUVCoord[_local5] = _local13;
if (_local13.u < _local8){
_local8 = _local13.u;
} else {
if (_local13.u > _local10){
_local10 = _local13.u;
};
};
if (_local13.v < _local9){
_local9 = _local13.v;
} else {
if (_local13.v > _local11){
_local11 = _local13.v;
};
};
_local5++;
};
uvBounds = new Rectangle(_local8, _local9, (_local10 - _local8), (_local11 - _local9));
} else {
aUVCoord = [new UVCoord(), new UVCoord(), new UVCoord()];
uvBounds = new Rectangle(0, 0, 0, 0);
};
};
m_nNormalId = _arg3;
normal = Vertex(m_oGeometry.aFacesNormals[_arg3]);
if (normal == null){
_local14 = createNormal();
m_nNormalId = m_oGeometry.setFaceNormal(m_oGeometry.getNextFaceNormalID(), _local14.x, _local14.y, _local14.z);
};
aEdges = new Array();
for each (_local7 in m_oGeometry.aFaceEdges[_arg4]) {
_local15 = m_oGeometry.aEdges[_local7];
_local15.vertex1 = m_oGeometry.aVertex[_local15.vertexId1];
_local15.vertex2 = m_oGeometry.aVertex[_local15.vertexId2];
aEdges.push(_local15);
};
}
public function clipFrontPlane(_arg1:Frustum):Array{
cvertices = vertices.slice();
if (vertices.length < 3){
isClipped = _arg1.clipLineFrontPlane(cvertices);
} else {
caUVCoord = aUVCoord.slice();
isClipped = _arg1.clipFrontPlane(cvertices, caUVCoord);
};
return (cvertices);
}
public function get broadcaster():BubbleEventBroadcaster{
return (m_oEB);
}
public function get enableInteractivity():Boolean{
return (mouseInteractivity);
}
protected function _startMouseInteraction(_arg1:MouseEvent=null):void{
container.addEventListener(MouseEvent.CLICK, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_UP, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_DOWN, _onTextureInteraction);
container.addEventListener(MouseEvent.DOUBLE_CLICK, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_MOVE, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_OVER, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_OUT, _onTextureInteraction);
container.addEventListener(MouseEvent.MOUSE_WHEEL, _onTextureInteraction);
container.addEventListener(KeyboardEvent.KEY_DOWN, _onTextureInteraction);
container.addEventListener(KeyboardEvent.KEY_UP, _onTextureInteraction);
m_oContainer.addEventListener(Event.ENTER_FRAME, _onTextureInteraction);
}
public function get changed():Boolean{
return (shape.changed);
}
public function get depth():Number{
return (m_nDepth);
}
public function precompute():void{
isClipped = false;
minZ = a.wz;
if (b.wz < minZ){
minZ = b.wz;
};
m_nDepth = (a.wz + b.wz);
if (c != null){
if (c.wz < minZ){
minZ = c.wz;
};
m_nDepth = (m_nDepth + c.wz);
};
if (d != null){
if (d.wz < minZ){
minZ = d.wz;
};
m_nDepth = (m_nDepth + d.wz);
};
m_nDepth = (m_nDepth / vertices.length);
}
public function addEventListener(_arg1:String, _arg2):void{
m_oEB.addEventListener.apply(m_oEB, arguments);
}
public function set normal(_arg1:Vertex):void{
if (_arg1 != null){
m_oGeometry.aFacesNormals[m_nNormalId].copy(_arg1);
};
}
public function removeEventListener(_arg1:String, _arg2):void{
m_oEB.removeEventListener(_arg1, _arg2);
}
public function clear():void{
if (m_oContainer != null){
m_oContainer.graphics.clear();
};
}
protected function _onInteraction(_arg1:Event):void{
var _local2:Point;
var _local3:UVCoord;
var _local4:Point3D;
_local2 = new Point(m_oContainer.mouseX, m_oContainer.mouseY);
_local3 = getUVFrom2D(_local2);
_local4 = get3DFrom2D(_local2);
m_oEB.dispatchEvent(new Shape3DEvent(_arg1.type, shape, this, _local3, _local4, _arg1));
}
public function clip(_arg1:Frustum):Array{
var _local2:CullingState;
cvertices = null;
caUVCoord = null;
_local2 = _arg1.polygonInFrustum(this);
if (_local2 == CullingState.INSIDE){
return (vertices);
};
if (_local2 == CullingState.OUTSIDE){
return (null);
};
if (vertices.length < 3){
clipFrontPlane(_arg1);
} else {
cvertices = vertices.slice();
caUVCoord = aUVCoord.slice();
isClipped = _arg1.clipFrustum(cvertices, caUVCoord);
};
return (cvertices);
}
public function createTransformedNormal():Point3D{
var _local1:Point3D;
var _local2:Point3D;
var _local3:Vertex;
var _local4:Vertex;
var _local5:Vertex;
var _local6:Point3D;
if (vertices.length > 2){
_local3 = vertices[0];
_local4 = vertices[1];
_local5 = vertices[2];
_local1 = new Point3D((_local4.wx - _local3.wx), (_local4.wy - _local3.wy), (_local4.wz - _local3.wz));
_local2 = new Point3D((_local4.wx - _local5.wx), (_local4.wy - _local5.wy), (_local4.wz - _local5.wz));
_local6 = Point3DMath.cross(_local1, _local2);
Point3DMath.normalize(_local6);
return (_local6);
};
return (new Point3D());
}
public function getUVFrom2D(_arg1:Point):UVCoord{
var _local2:Point;
var _local3:Point;
var _local4:Point;
var _local5:UVCoord;
var _local6:UVCoord;
var _local7:UVCoord;
var _local8:Point;
var _local9:Point;
var _local10:Point;
var _local11:Point;
var _local12:Point;
var _local13:Point;
var _local14:Point;
var _local15:Point;
var _local16:Number;
var _local17:Number;
_local2 = new Point(vertices[0].sx, vertices[0].sy);
_local3 = new Point(vertices[1].sx, vertices[1].sy);
_local4 = new Point(vertices[2].sx, vertices[2].sy);
_local5 = aUVCoord[0];
_local6 = aUVCoord[1];
_local7 = aUVCoord[2];
_local8 = new Point((_local3.x - _local2.x), (_local3.y - _local2.y));
_local9 = _local8.clone();
_local9.normalize(1);
_local10 = new Point((_local4.x - _local2.x), (_local4.y - _local2.y));
_local11 = _local10.clone();
_local11.normalize(1);
_local12 = new Point((_arg1.x - _local8.x), (_arg1.y - _local8.y));
_local13 = IntersectionMath.intersectionLine2D(_local2, _local4, _arg1, _local12);
_local14 = new Point((_local13.x - _local2.x), (_local13.y - _local2.y));
_local15 = new Point((_arg1.x - _local13.x), (_arg1.y - _local13.y));
_local16 = (_local15.length / _local8.length);
_local17 = (_local14.length / _local10.length);
return (new UVCoord(((_local5.u + (_local16 * (_local6.u - _local5.u))) + (_local17 * (_local7.u - _local5.u))), ((_local5.v + (_local16 * (_local6.v - _local5.v))) + (_local17 * (_local7.v - _local5.v)))));
}
protected function _stopMouseInteraction(_arg1:MouseEvent=null):void{
container.removeEventListener(MouseEvent.CLICK, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_UP, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_DOWN, _onTextureInteraction);
container.removeEventListener(MouseEvent.DOUBLE_CLICK, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_MOVE, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_OVER, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_OUT, _onTextureInteraction);
container.removeEventListener(MouseEvent.MOUSE_WHEEL, _onTextureInteraction);
m_oContainer.removeEventListener(Event.ENTER_FRAME, _onTextureInteraction);
container.removeEventListener(KeyboardEvent.KEY_DOWN, _onTextureInteraction);
container.removeEventListener(KeyboardEvent.KEY_UP, _onTextureInteraction);
}
public function set enableInteractivity(_arg1:Boolean):void{
if (_arg1 != mouseInteractivity){
if (_arg1){
container.addEventListener(MouseEvent.ROLL_OVER, _startMouseInteraction, false);
container.addEventListener(MouseEvent.ROLL_OUT, _stopMouseInteraction, false);
} else {
_stopMouseInteraction();
};
mouseInteractivity = _arg1;
};
}
public function set appearance(_arg1:Appearance):void{
if (_arg1 != null){
m_oAppearance = _arg1;
m_oAppearance.frontMaterial.init(this);
if (m_oAppearance.backMaterial != m_oAppearance.frontMaterial){
m_oAppearance.backMaterial.init(this);
};
};
}
public function get normal():Vertex{
return (m_oGeometry.aFacesNormals[m_nNormalId]);
}
public function set enableEvents(_arg1:Boolean):void{
if (((_arg1) && (!(mouseEvents)))){
container.addEventListener(MouseEvent.CLICK, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_UP, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
container.addEventListener(MouseEvent.ROLL_OVER, _onInteraction);
container.addEventListener(MouseEvent.ROLL_OUT, _onInteraction);
container.addEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_MOVE, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
container.addEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
} else {
if (((!(_arg1)) && (mouseEvents))){
container.removeEventListener(MouseEvent.CLICK, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_UP, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
container.removeEventListener(MouseEvent.ROLL_OVER, _onInteraction);
container.removeEventListener(MouseEvent.ROLL_OUT, _onInteraction);
container.removeEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_MOVE, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
container.removeEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
};
};
mouseEvents = _arg1;
}
public function destroy():void{
clear();
scene.removeEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.removeEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
enableEvents = false;
enableInteractivity = false;
if (appearance.backMaterial){
appearance.backMaterial.unlink(this);
};
if (appearance.frontMaterial){
appearance.frontMaterial.unlink(this);
};
appearance = null;
if (m_oContainer.parent){
m_oContainer.parent.removeChild(m_oContainer);
};
if (m_oContainer){
m_oContainer = null;
};
cvertices = null;
vertices = null;
m_oEB = null;
m_oGeometry = null;
shape = null;
scene = null;
delete POLYGON_MAP[id];
}
public function display(_arg1:Sprite=null):void{
var _local2:Sprite;
_local2 = (_arg1) ? _arg1 : m_oContainer;
if (visible){
m_oAppearance.frontMaterial.renderPolygon(scene, this, _local2);
} else {
m_oAppearance.backMaterial.renderPolygon(scene, this, _local2);
};
}
public function get enableEvents():Boolean{
return (mouseEvents);
}
}
}//package sandy.core.data
Section 19
//Pool (sandy.core.data.Pool)
package sandy.core.data {
public class Pool {
private const m_aVertices:Array;
private const m_aUV:Array;
private const m_aPoint3Ds:Array;
private var m_nIdVertice:int;// = 0
private var m_nIdPoint3D:int;// = 0
private var m_nIdUV:int;// = 0
private var m_nSize:int;// = 300
private static var INSTANCE:Pool;
public function Pool(){
var _local1:int;
m_nSize = 300;
m_aVertices = new Array();
m_nIdVertice = 0;
m_aUV = new Array();
m_nIdUV = 0;
m_aPoint3Ds = new Array();
m_nIdPoint3D = 0;
super();
_local1 = 0;
while (_local1 < m_nSize) {
m_aVertices[int(_local1)] = new Vertex();
m_aUV[int(_local1)] = new UVCoord();
m_aPoint3Ds[int(_local1)] = new Point3D();
_local1++;
};
}
public function get nextPoint3D():Point3D{
if (m_nIdPoint3D >= m_aPoint3Ds.length){
m_aPoint3Ds[m_aPoint3Ds.length] = new Point3D();
};
return (m_aPoint3Ds[int(m_nIdPoint3D++)]);
}
public function init():void{
m_nIdVertice = (m_nIdUV = (m_nIdPoint3D = 0));
}
public function get nextUV():UVCoord{
if (m_nIdUV >= m_aUV.length){
m_aUV[m_aUV.length] = new UVCoord();
};
return (m_aUV[int(m_nIdUV++)]);
}
public function get nextVertex():Vertex{
var _local1:Vertex;
if (m_nIdVertice >= m_aVertices.length){
m_aVertices[m_aVertices.length] = new Vertex();
};
_local1 = m_aVertices[int(m_nIdVertice++)];
_local1.projected = false;
_local1.transformed = false;
return (_local1);
}
public static function getInstance():Pool{
if (INSTANCE == null){
INSTANCE = new (Pool);
};
return (INSTANCE);
}
}
}//package sandy.core.data
Section 20
//PrimitiveFace (sandy.core.data.PrimitiveFace)
package sandy.core.data {
import sandy.materials.*;
import sandy.core.scenegraph.*;
public final class PrimitiveFace {
private var m_oAppearance:Appearance;
private var m_iPrimitive:Shape3D;
public var aPolygons:Array;
public function PrimitiveFace(_arg1:Shape3D){
aPolygons = new Array();
super();
m_iPrimitive = _arg1;
}
public function get appearance():Appearance{
return (m_oAppearance);
}
public function get primitive():Shape3D{
return (m_iPrimitive);
}
public function set appearance(_arg1:Appearance):void{
var _local2:Polygon;
m_oAppearance = _arg1;
if (m_iPrimitive.geometry){
for each (_local2 in aPolygons) {
_local2.appearance = m_oAppearance;
};
};
}
public function addPolygon(_arg1:uint):void{
aPolygons.push(m_iPrimitive.aPolygons[_arg1]);
}
}
}//package sandy.core.data
Section 21
//UVCoord (sandy.core.data.UVCoord)
package sandy.core.data {
public final class UVCoord {
public var u:Number;
public var v:Number;
public function UVCoord(_arg1:Number=0, _arg2:Number=0){
u = _arg1;
v = _arg2;
}
public function sub(_arg1:UVCoord):void{
u = (u - _arg1.u);
v = (v - _arg1.v);
}
public function length():Number{
return (Math.sqrt(((u * u) + (v * v))));
}
public function add(_arg1:UVCoord):void{
u = (u + _arg1.u);
v = (v + _arg1.v);
}
public function normalize():void{
var _local1:Number;
_local1 = length();
u = (u / _local1);
v = (v / _local1);
}
public function scale(_arg1:Number):void{
u = (u * _arg1);
v = (v * _arg1);
}
public function toString():String{
return (((((("sandy.core.data.UVCoord" + "(u:") + u) + ", v:") + v) + ")"));
}
public function copy(_arg1:UVCoord):void{
u = _arg1.u;
v = _arg1.v;
}
public function clone():UVCoord{
return (new UVCoord(u, v));
}
}
}//package sandy.core.data
Section 22
//Vertex (sandy.core.data.Vertex)
package sandy.core.data {
import sandy.util.*;
public final class Vertex {
private const m_oWorld:Point3D;
public const id:uint;
private const m_oLocal:Point3D;
public var transformed:Boolean;// = false
public var flags:int;// = 0
public var aFaces:Array;
public var wx:Number;
public var wy:Number;
public var wz:Number;
public var sx:Number;
public var sy:Number;
public var nbFaces:uint;// = 0
public var projected:Boolean;// = false
public var y:Number;
public var z:Number;
public var x:Number;
private static var ID:uint = 0;
public function Vertex(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, ... _args){
flags = 0;
projected = false;
transformed = false;
id = ID++;
nbFaces = 0;
aFaces = new Array();
m_oWorld = new Point3D();
m_oLocal = new Point3D();
super();
x = _arg1;
y = _arg2;
z = _arg3;
wx = (_args[0]) ? _args[0] : x;
wy = (_args[1]) ? _args[1] : y;
wz = (_args[2]) ? _args[2] : z;
sy = (sx = 0);
}
final public function negate():void{
x = -(x);
y = -(y);
z = -(z);
wx = -(wx);
wy = -(wy);
wz = -(wz);
}
final public function getWorldPoint3D():Point3D{
m_oWorld.x = wx;
m_oWorld.y = wy;
m_oWorld.z = wz;
return (m_oWorld);
}
final public function deserialize(_arg1:String):void{
var _local2:Array;
_local2 = _arg1.split(",");
if (_local2.length != 9){
trace(("Unexpected length of string to deserialize into a Point3D " + _arg1));
};
x = _local2[0];
y = _local2[1];
z = _local2[2];
wx = _local2[3];
wy = _local2[4];
wz = _local2[5];
sx = _local2[6];
sy = _local2[7];
}
final public function normalize():void{
var _local1:Number;
_local1 = getNorm();
if ((((_local1 == 0)) || ((_local1 == 1)))){
return;
};
x = (x / _local1);
y = (y / _local1);
z = (z / _local1);
wx = (wx / _local1);
wy = (wy / _local1);
wz = (wz / _local1);
}
final public function getAngle(_arg1:Vertex):Number{
var _local2:Number;
var _local3:Number;
_local2 = (dot(_arg1) / (getNorm() * _arg1.getNorm()));
_local3 = (1 - (_local2 * _local2));
if (_local3 < 0){
trace((" wrong " + _local2));
_local3 = 0;
};
return (Math.atan2(Math.sqrt(_local3), _local2));
}
final public function add(_arg1:Vertex):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
wx = (wx + _arg1.wx);
wy = (wy + _arg1.wy);
wz = (wz + _arg1.wz);
}
final public function getNorm():Number{
return (Math.sqrt((((x * x) + (y * y)) + (z * z))));
}
final public function equals(_arg1:Vertex):Boolean{
return (Boolean((((((((((((((((_arg1.x == x)) && ((_arg1.y == y)))) && ((_arg1.z == z)))) && ((_arg1.wx == wx)))) && ((_arg1.wy == wy)))) && ((_arg1.wz == wz)))) && ((_arg1.sx == wx)))) && ((_arg1.sy == sy)))));
}
public function sub(_arg1:Vertex):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
z = (z - _arg1.z);
wx = (wx - _arg1.wx);
wy = (wy - _arg1.wy);
wz = (wz - _arg1.wz);
}
final public function cross(_arg1:Vertex):Vertex{
return (new Vertex(((y * _arg1.z) - (z * _arg1.y)), ((z * _arg1.x) - (x * _arg1.z)), ((x * _arg1.y) - (y * _arg1.x))));
}
final public function dot(_arg1:Vertex):Number{
return ((((x * _arg1.x) + (y * _arg1.y)) + (z * _arg1.z)));
}
final public function getPoint3D():Point3D{
m_oLocal.x = x;
m_oLocal.y = y;
m_oLocal.z = z;
return (m_oLocal);
}
public function getScreenPoint():Point3D{
return (new Point3D(sx, sy, wz));
}
public function reset(_arg1:Number, _arg2:Number, _arg3:Number):void{
x = _arg1;
y = _arg2;
z = _arg3;
wx = x;
wy = y;
wz = z;
}
final public function scale(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
z = (z * _arg1);
wx = (wx * _arg1);
wy = (wy * _arg1);
wz = (wz * _arg1);
}
final public function pow(_arg1:Number):void{
x = Math.pow(x, _arg1);
y = Math.pow(y, _arg1);
z = Math.pow(z, _arg1);
wx = Math.pow(wx, _arg1);
wy = Math.pow(wy, _arg1);
wz = Math.pow(wz, _arg1);
}
final public function clone():Vertex{
var _local1:Vertex;
_local1 = new Vertex(x, y, z);
_local1.wx = wx;
_local1.sx = sx;
_local1.wy = wy;
_local1.sy = sy;
_local1.wz = wz;
_local1.nbFaces = nbFaces;
_local1.aFaces = aFaces.concat();
return (_local1);
}
final public function serialize(_arg1:Number=0):String{
if (_arg1 == 0){
_arg1 = 0.01;
};
return (((((((((((((((NumberUtil.roundTo(x, _arg1) + ",") + NumberUtil.roundTo(y, _arg1)) + ",") + NumberUtil.roundTo(z, _arg1)) + ",") + NumberUtil.roundTo(wx, _arg1)) + ",") + NumberUtil.roundTo(wy, _arg1)) + ",") + NumberUtil.roundTo(wz, _arg1)) + ",") + NumberUtil.roundTo(sx, _arg1)) + ",") + NumberUtil.roundTo(sy, _arg1)));
}
final public function toString(_arg1:Number=0):String{
if (_arg1 == 0){
_arg1 = 0.01;
};
return ((((((((((((((((("{" + NumberUtil.roundTo(x, _arg1)) + ", ") + NumberUtil.roundTo(y, _arg1)) + ", ") + NumberUtil.roundTo(z, _arg1)) + ", ") + NumberUtil.roundTo(wx, _arg1)) + ", ") + NumberUtil.roundTo(wy, _arg1)) + ", ") + NumberUtil.roundTo(wz, _arg1)) + ", ") + NumberUtil.roundTo(sx, _arg1)) + ", ") + NumberUtil.roundTo(sy, _arg1)) + "}"));
}
final public function clone2():Vertex{
return (new Vertex(wx, wy, wz));
}
final public function copy(_arg1:Vertex):void{
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
wx = _arg1.wx;
wy = _arg1.wy;
wz = _arg1.wz;
sx = _arg1.sx;
sy = _arg1.sy;
}
public static function createFromPoint3D(_arg1:Point3D):Vertex{
return (new Vertex(_arg1.x, _arg1.y, _arg1.z));
}
}
}//package sandy.core.data
Section 23
//TextLink (sandy.core.interaction.TextLink)
package sandy.core.interaction {
import flash.geom.*;
import flash.text.*;
import flash.utils.*;
public class TextLink {
private var __sTarget:String;
private var __sHRef:String;
public var width:Number;
private var __tfOwner:TextField;
private var __iOpenIndex:int;
private var __iCloseIndex:int;
private var __rBounds:Rectangle;
public var height:Number;
public var x:Number;
public var y:Number;
public static var textLinks:Dictionary;
public function TextLink(){
x = 0;
y = 0;
height = 0;
width = 0;
}
public function get href():String{
return (__sHRef);
}
public function get closeIndex():int{
return (__iCloseIndex);
}
public function get target():String{
return (__sTarget);
}
public function set href(_arg1:String):void{
__sHRef = _arg1;
}
public function set openIndex(_arg1:int):void{
__iOpenIndex = _arg1;
}
public function set target(_arg1:String):void{
__sTarget = _arg1;
}
public function set owner(_arg1:TextField):void{
__tfOwner = _arg1;
}
public function get openIndex():int{
return (__iOpenIndex);
}
public function getBounds():Rectangle{
return (__rBounds);
}
protected function _init():void{
var _local1:Number;
var _local2:Rectangle;
_local1 = 0;
while (_local1 < (__iCloseIndex - __iOpenIndex)) {
_local2 = __tfOwner.getCharBoundaries((openIndex + _local1));
if (_local1 == 0){
x = _local2.x;
y = _local2.y;
};
width = (width + _local2.width);
height = ((height < _local2.height)) ? _local2.height : height;
_local1++;
};
__rBounds = new Rectangle();
__rBounds.x = x;
__rBounds.y = y;
__rBounds.height = height;
__rBounds.width = width;
}
public function set closeIndex(_arg1:int):void{
__iCloseIndex = _arg1;
}
public function get owner():TextField{
return (__tfOwner);
}
public static function getTextLinks(_arg1:TextField, _arg2:Boolean=false):Array{
var _local3:String;
var _local4:RegExp;
var _local5:RegExp;
var _local6:RegExp;
var _local7:RegExp;
var _local8:RegExp;
var _local9:RegExp;
var _local10:Object;
var _local11:TextLink;
var _local12:String;
var _local13:String;
if (!_arg1.htmlText){
return (null);
};
if (!textLinks){
textLinks = new Dictionary();
};
if (((textLinks[_arg1]) && (!(_arg2)))){
return (textLinks[_arg1]);
};
textLinks[_arg1] = new Array();
_local3 = _arg1.htmlText;
_local4 = /href=['"].*?['"]/i;
_local5 = /target=['"].*?['"]/i;
_local6 = /<A.*?A>/i;
_local7 = /<A.*?\>/i;
_local8 = /<\/A>/i;
_local9 = /<[^A][^\/A].*?>/gi;
_local3 = _local3.replace(_local9, "");
_local10 = _local6.exec(_local3);
while (_local10 != null) {
_local11 = new (TextLink);
_local11.owner = _arg1;
textLinks[_arg1].push(_local11);
_local12 = _local10[0].match(_local4);
_local11.href = _local12.substring(6, (_local12.length - 1));
_local13 = _local10[0].match(_local5);
_local11.target = _local13.substring(8, (_local13.length - 1));
_local11.openIndex = _local3.search(_local7);
_local3 = _local3.replace(_local7, "");
_local11.closeIndex = _local3.search(_local8);
_local3 = _local3.replace(_local8, "");
_local11._init();
_local10 = _local6.exec(_local3);
};
return (textLinks[_arg1]);
}
}
}//package sandy.core.interaction
Section 24
//VirtualMouse (sandy.core.interaction.VirtualMouse)
package sandy.core.interaction {
import sandy.materials.*;
import sandy.core.data.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
public class VirtualMouse extends EventDispatcher {
private var lastDownTarget:InteractiveObject;
private var m_ioOldTarget:Sprite;
private var lastWithinStage:Boolean;// = true
private var _lastEvent:Event;
private var m_ioTarget:Sprite;
private var lastLocation:Point;
private var location:Point;
private static var _oI:VirtualMouse;
public function VirtualMouse(_arg1:PrivateConstructorAccess){
lastWithinStage = true;
super();
location = new Point(0, 0);
lastLocation = location.clone();
}
public function interactWithTexture(_arg1:Polygon, _arg2:UVCoord, _arg3:MouseEvent):void{
var _local4:MovieMaterial;
var _local5:Array;
var _local6:Sprite;
var _local7:DisplayObject;
var _local8:int;
var _local9:Point;
var _local10:Point;
var _local11:Boolean;
_local4 = ((_arg1.visible) ? _arg1.appearance.frontMaterial : _arg1.appearance.backMaterial as MovieMaterial);
if (_local4 == null){
return;
};
m_ioTarget = _local4.movie;
location = new Point((_arg2.u * _local4.texture.width), (_arg2.v * _local4.texture.height));
_local5 = m_ioTarget.getObjectsUnderPoint(m_ioTarget.localToGlobal(location));
_local8 = _local5.length;
while (--_local8 > -1) {
_local7 = _local5[_local8];
while (_local7) {
if (((_local6) && ((_local7 is SimpleButton)))){
_local6 = null;
} else {
if (((((_local6) && ((_local7 is DisplayObjectContainer)))) && (!(DisplayObjectContainer(_local7).mouseChildren)))){
_local6 = null;
};
};
if (((((!(_local6)) && ((_local7 is DisplayObjectContainer)))) && (DisplayObjectContainer(_local7).mouseEnabled))){
_local6 = (_local7 as Sprite);
};
_local7 = _local7.parent;
};
};
if (!_local6){
_local6 = m_ioTarget;
};
if (!m_ioOldTarget){
_local6.stage;
};
_local9 = _arg1.container.globalToLocal(location);
_local10 = _local6.globalToLocal(location);
if (((!((lastLocation.x == location.x))) || (!((lastLocation.y == location.y))))){
_local11 = Boolean((((((((location.x >= 0)) && ((location.y >= 0)))) && ((location.x <= _arg1.container.stage.stageWidth)))) && ((location.y <= _arg1.container.stage.stageHeight))));
if (((!(_local11)) && (lastWithinStage))){
_lastEvent = new MouseEvent(Event.MOUSE_LEAVE, false, false);
_arg1.container.stage.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (_local11){
_lastEvent = new MouseEvent(Event.MOUSE_LEAVE, false, false);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
lastWithinStage = _local11;
};
if (_local6 != m_ioOldTarget){
_lastEvent = new MouseEvent(MouseEvent.MOUSE_OUT, true, false, _local9.x, _local9.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
m_ioTarget.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
_lastEvent = new MouseEvent(MouseEvent.ROLL_OUT, false, false, _local9.x, _local9.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
m_ioTarget.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
_lastEvent = new MouseEvent(MouseEvent.MOUSE_OVER, true, false, _local10.x, _local10.y, m_ioOldTarget, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
_lastEvent = new MouseEvent(MouseEvent.ROLL_OVER, false, false, _local10.x, _local10.y, m_ioOldTarget, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (_arg3.type == MouseEvent.MOUSE_DOWN){
_lastEvent = new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, _local10.x, _local10.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
lastDownTarget = _local6;
} else {
if (_arg3.type == MouseEvent.MOUSE_UP){
_lastEvent = new MouseEvent(MouseEvent.MOUSE_UP, true, false, _local10.x, _local10.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
} else {
if (_arg3.type == MouseEvent.CLICK){
_lastEvent = new MouseEvent(MouseEvent.CLICK, true, false, _local10.x, _local10.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
lastDownTarget = null;
} else {
if ((((_arg3.type == MouseEvent.DOUBLE_CLICK)) && (_local6.doubleClickEnabled))){
_lastEvent = new MouseEvent(MouseEvent.DOUBLE_CLICK, true, false, _local10.x, _local10.y, _local6, _arg3.ctrlKey, _arg3.altKey, _arg3.shiftKey, _arg3.buttonDown, _arg3.delta);
_local6.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
};
};
};
lastLocation = location.clone();
m_ioOldTarget = _local6;
}
private function _checkLinks(_arg1:TextField):void{
var _local2:Point;
var _local3:Array;
var _local4:Number;
var _local5:Number;
_local2 = _arg1.globalToLocal(location);
_local3 = TextLink.getTextLinks(_arg1);
_local4 = _local3.length;
_local5 = 0;
while (_local5 < _local4) {
if (((_local3[_local5] as TextLink).getBounds() as Rectangle).containsPoint(_local2)){
};
_local5++;
};
}
public static function getInstance():VirtualMouse{
if (!_oI){
_oI = new VirtualMouse(new PrivateConstructorAccess());
};
return (_oI);
}
}
}//package sandy.core.interaction
class PrivateConstructorAccess {
private function PrivateConstructorAccess(){
}
}
Section 25
//Light3D (sandy.core.light.Light3D)
package sandy.core.light {
import sandy.core.data.*;
import flash.events.*;
import sandy.events.*;
import sandy.util.*;
public class Light3D extends EventDispatcher {
private var _dir:Point3D;
private var _color:uint;
private var _nPower:Number;
private var _power:Number;
public static const MAX_POWER:Number = 150;
public function Light3D(_arg1:Point3D, _arg2:Number){
_dir = _arg1;
_dir.normalize();
setPower(_arg2);
}
public function setPower(_arg1:Number):void{
_power = NumberUtil.constrain(_arg1, 0, Light3D.MAX_POWER);
_nPower = (_power / Light3D.MAX_POWER);
dispatchEvent(new SandyEvent(SandyEvent.LIGHT_UPDATED));
}
public function setDirectionPoint3D(_arg1:Point3D):void{
_dir = _arg1;
_dir.normalize();
dispatchEvent(new SandyEvent(SandyEvent.LIGHT_UPDATED));
}
public function getPower():Number{
return (_power);
}
public function getNormalizedPower():Number{
return (_nPower);
}
public function set color(_arg1:uint):void{
_color = _arg1;
dispatchEvent(new SandyEvent(SandyEvent.LIGHT_COLOR_CHANGED));
}
public function get color():uint{
return (_color);
}
public function calculate(_arg1:Point3D):Number{
var _local2:Number;
_local2 = _dir.dot(_arg1);
_local2 = -(_local2);
if (_local2 < 0){
_local2 = 0;
};
return ((_nPower * _local2));
}
public function getDirectionPoint3D():Point3D{
return (_dir);
}
public function destroy():void{
}
public function setDirection(_arg1:Number, _arg2:Number, _arg3:Number):void{
_dir.x = _arg1;
_dir.y = _arg2;
_dir.z = _arg3;
_dir.normalize();
dispatchEvent(new SandyEvent(SandyEvent.LIGHT_UPDATED));
}
}
}//package sandy.core.light
Section 26
//ATransformable (sandy.core.scenegraph.ATransformable)
package sandy.core.scenegraph {
import sandy.core.data.*;
public class ATransformable extends Node {
private var _nYaw:Number;
private var _vLookAt:Point3D;
private var _nRoll:Number;
private var _vLookatDown:Point3D;
private var m_oMatrix:Matrix4;
protected var _oScale:Point3D;
private var _nTilt:Number;
protected var m_oPreviousOffsetRotation:Point3D;
private var _vRotation:Point3D;
public var invModelMatrix:Matrix4;
protected var m_tmpMt:Matrix4;
protected var _vOut:Point3D;
public var disable:Boolean;// = false
protected var _vSide:Point3D;
protected var _p:Point3D;
protected var _vUp:Point3D;
public function ATransformable(_arg1:String=""){
disable = false;
invModelMatrix = new Matrix4();
m_oPreviousOffsetRotation = new Point3D();
super(_arg1);
resetCoords();
}
public function set roll(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _nRoll);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.axisRotation(_vOut.x, _vOut.y, _vOut.z, _local2);
m_tmpMt.Point3DMult3x3(_vSide);
m_tmpMt.Point3DMult3x3(_vUp);
_nRoll = _arg1;
}
public function getLookAt():Point3D{
return (_vLookAt);
}
public function moveSideways(_arg1:Number):void{
changed = true;
_p.x = (_p.x + (_vSide.x * _arg1));
_p.y = (_p.y + (_vSide.y * _arg1));
_p.z = (_p.z + (_vSide.z * _arg1));
}
public function moveHorizontally(_arg1:Number):void{
changed = true;
_p.x = (_p.x + (_vOut.x * _arg1));
_p.z = (_p.z + (_vOut.z * _arg1));
}
public function lookAt(_arg1:Number, _arg2:Number, _arg3:Number):void{
changed = true;
_vLookAt = new Point3D(_arg1, _arg2, _arg3);
_vOut.x = _arg1;
_vOut.y = _arg2;
_vOut.z = _arg3;
_vOut.sub(_p);
_vOut.normalize();
_vSide = null;
_vSide = _vOut.cross(_vLookatDown);
_vSide.normalize();
_vUp = null;
_vUp = _vOut.cross(_vSide);
_vUp.normalize();
}
public function moveVertically(_arg1:Number):void{
changed = true;
_p.y = (_p.y + _arg1);
}
public function set target(_arg1:Point3D):void{
lookAt(_arg1.x, _arg1.y, _arg1.z);
}
public function initFrame():void{
_vSide = new Point3D(1, 0, 0);
_vUp = new Point3D(0, 1, 0);
_vOut = new Point3D(0, 0, 1);
_vRotation = new Point3D(0, 0, 0);
}
public function set pan(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _nYaw);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.axisRotation(_vUp.x, _vUp.y, _vUp.z, _local2);
m_tmpMt.Point3DMult3x3(_vOut);
m_tmpMt.Point3DMult3x3(_vSide);
_nYaw = _arg1;
}
public function get out():Point3D{
return (_vOut);
}
public function get scaleY():Number{
return (_oScale.y);
}
public function get scaleX():Number{
return (_oScale.x);
}
public function get scaleZ():Number{
return (_oScale.z);
}
public function resetCoords():void{
initFrame();
_p = new Point3D();
_oScale = new Point3D(1, 1, 1);
_vRotation = new Point3D(0, 0, 0);
_vLookatDown = new Point3D(1E-11, -1, 0);
_nRoll = 0;
_nTilt = 0;
_nYaw = 0;
m_tmpMt = new Matrix4();
m_oMatrix = new Matrix4();
}
public function translate(_arg1:Number, _arg2:Number, _arg3:Number):void{
changed = true;
_p.x = (_p.x + _arg1);
_p.y = (_p.y + _arg2);
_p.z = (_p.z + _arg3);
}
public function get rotateY():Number{
return (_vRotation.y);
}
public function get rotateZ():Number{
return (_vRotation.z);
}
public function get rotateX():Number{
return (_vRotation.x);
}
public function get side():Point3D{
return (_vSide);
}
override public function toString():String{
return ("sandy.core.scenegraph.ATransformable");
}
public function get x():Number{
return (_p.x);
}
public function get y():Number{
return (_p.y);
}
public function get z():Number{
return (_p.z);
}
public function get roll():Number{
return (_nRoll);
}
public function set matrix(_arg1:Matrix4):void{
m_oMatrix = _arg1;
m_oMatrix.Point3DMult3x3(_vSide);
m_oMatrix.Point3DMult3x3(_vUp);
m_oMatrix.Point3DMult3x3(_vOut);
_vSide.normalize();
_vUp.normalize();
_vOut.normalize();
_p.x = _arg1.n14;
_p.y = _arg1.n24;
_p.z = _arg1.n34;
}
public function set tilt(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _nTilt);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.axisRotation(_vSide.x, _vSide.y, _vSide.z, _local2);
m_tmpMt.Point3DMult3x3(_vOut);
m_tmpMt.Point3DMult3x3(_vUp);
_nTilt = _arg1;
}
public function get up():Point3D{
return (_vUp);
}
public function set scaleX(_arg1:Number):void{
if (_oScale.x == _arg1){
return;
};
_oScale.x = _arg1;
changed = true;
}
public function get pan():Number{
return (_nYaw);
}
public function set scaleY(_arg1:Number):void{
if (_oScale.y == _arg1){
return;
};
_oScale.y = _arg1;
changed = true;
}
public function getPosition(_arg1:String="local"):Point3D{
var _local2:Point3D;
switch (_arg1){
case "local":
_local2 = new Point3D(_p.x, _p.y, _p.z);
break;
case "camera":
_local2 = new Point3D(viewMatrix.n14, viewMatrix.n24, viewMatrix.n34);
break;
case "absolute":
_local2 = new Point3D(modelMatrix.n14, modelMatrix.n24, modelMatrix.n34);
break;
default:
_local2 = new Point3D(_p.x, _p.y, _p.z);
break;
};
return (_local2);
}
public function set scaleZ(_arg1:Number):void{
if (_oScale.z == _arg1){
return;
};
_oScale.z = _arg1;
changed = true;
}
public function moveLateraly(_arg1:Number):void{
changed = true;
_p.x = (_p.x + _arg1);
}
public function rotateAxis(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Number;
changed = true;
_arg4 = ((_arg4 + 360) % 360);
_local5 = Math.sqrt((((_arg1 * _arg1) + (_arg2 * _arg2)) + (_arg3 * _arg3)));
m_tmpMt.axisRotation((_arg1 / _local5), (_arg2 / _local5), (_arg3 / _local5), _arg4);
m_tmpMt.Point3DMult3x3(_vSide);
m_tmpMt.Point3DMult3x3(_vUp);
m_tmpMt.Point3DMult3x3(_vOut);
}
public function moveUpwards(_arg1:Number):void{
changed = true;
_p.x = (_p.x + (_vUp.x * _arg1));
_p.y = (_p.y + (_vUp.y * _arg1));
_p.z = (_p.z + (_vUp.z * _arg1));
}
public function setPosition(_arg1:Number, _arg2:Number, _arg3:Number):void{
changed = true;
_p.x = _arg1;
_p.y = _arg2;
_p.z = _arg3;
}
public function set rotateX(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _vRotation.x);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.rotationX(_local2);
m_tmpMt.Point3DMult3x3(_vSide);
m_tmpMt.Point3DMult3x3(_vUp);
m_tmpMt.Point3DMult3x3(_vOut);
_vRotation.x = _arg1;
}
public function moveForward(_arg1:Number):void{
changed = true;
_p.x = (_p.x + (_vOut.x * _arg1));
_p.y = (_p.y + (_vOut.y * _arg1));
_p.z = (_p.z + (_vOut.z * _arg1));
}
public function set rotateY(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _vRotation.y);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.rotationY(_local2);
m_tmpMt.Point3DMult3x3(_vSide);
m_tmpMt.Point3DMult3x3(_vUp);
m_tmpMt.Point3DMult3x3(_vOut);
_vRotation.y = _arg1;
}
public function get tilt():Number{
return (_nTilt);
}
public function set rotateZ(_arg1:Number):void{
var _local2:Number;
_local2 = (_arg1 - _vRotation.z);
if (_local2 == 0){
return;
};
changed = true;
m_tmpMt.rotationZ(_local2);
m_tmpMt.Point3DMult3x3(_vSide);
m_tmpMt.Point3DMult3x3(_vUp);
m_tmpMt.Point3DMult3x3(_vOut);
_vRotation.z = _arg1;
}
public function get matrix():Matrix4{
return (m_oMatrix);
}
public function updateTransform():void{
if (changed){
m_oMatrix.n11 = (_vSide.x * _oScale.x);
m_oMatrix.n12 = (_vUp.x * _oScale.y);
m_oMatrix.n13 = (_vOut.x * _oScale.z);
m_oMatrix.n14 = _p.x;
m_oMatrix.n21 = (_vSide.y * _oScale.x);
m_oMatrix.n22 = (_vUp.y * _oScale.y);
m_oMatrix.n23 = (_vOut.y * _oScale.z);
m_oMatrix.n24 = _p.y;
m_oMatrix.n31 = (_vSide.z * _oScale.x);
m_oMatrix.n32 = (_vUp.z * _oScale.y);
m_oMatrix.n33 = (_vOut.z * _oScale.z);
m_oMatrix.n34 = _p.z;
_vOut.normalize();
_vSide.normalize();
_vUp.normalize();
};
}
override public function update(_arg1:Matrix4, _arg2:Boolean):void{
updateTransform();
if (((_arg2) || (changed))){
if (((_arg1) && (!(disable)))){
modelMatrix.copy(_arg1);
modelMatrix.multiply4x3(m_oMatrix);
} else {
modelMatrix.copy(m_oMatrix);
};
invModelMatrix.n11 = modelMatrix.n11;
invModelMatrix.n12 = modelMatrix.n21;
invModelMatrix.n13 = modelMatrix.n31;
invModelMatrix.n21 = modelMatrix.n12;
invModelMatrix.n22 = modelMatrix.n22;
invModelMatrix.n23 = modelMatrix.n32;
invModelMatrix.n31 = modelMatrix.n13;
invModelMatrix.n32 = modelMatrix.n23;
invModelMatrix.n33 = modelMatrix.n33;
invModelMatrix.n14 = -((((modelMatrix.n11 * modelMatrix.n14) + (modelMatrix.n21 * modelMatrix.n24)) + (modelMatrix.n31 * modelMatrix.n34)));
invModelMatrix.n24 = -((((modelMatrix.n12 * modelMatrix.n14) + (modelMatrix.n22 * modelMatrix.n24)) + (modelMatrix.n32 * modelMatrix.n34)));
invModelMatrix.n34 = -((((modelMatrix.n13 * modelMatrix.n14) + (modelMatrix.n23 * modelMatrix.n24)) + (modelMatrix.n33 * modelMatrix.n34)));
};
super.update(modelMatrix, _arg2);
}
public function set x(_arg1:Number):void{
if (_arg1 == _p.x){
return;
};
_p.x = _arg1;
changed = true;
}
public function set y(_arg1:Number):void{
if (_arg1 == _p.y){
return;
};
_p.y = _arg1;
changed = true;
}
public function set z(_arg1:Number):void{
if (_arg1 == _p.z){
return;
};
_p.z = _arg1;
changed = true;
}
}
}//package sandy.core.scenegraph
Section 27
//Camera3D (sandy.core.scenegraph.Camera3D)
package sandy.core.scenegraph {
import sandy.core.data.*;
import sandy.view.*;
import flash.geom.*;
import sandy.util.*;
public class Camera3D extends ATransformable {
public var frustrum:Frustum;
private var mp11:Number;
private var mp12:Number;
private var mp13:Number;
private var mp14:Number;
private var mp22:Number;
private var mp24:Number;
private var m_nOffy:int;
private var mp23:Number;
private var _mp:Matrix4;
private var mp33:Number;
private var m_nOffx:int;
private var mp31:Number;
private var mp32:Number;
private var mp34:Number;
private var mp41:Number;
private var mp43:Number;
private var mp44:Number;
private var _nFov:Number;
private var _mpInv:Matrix4;
private var mp42:Number;
private var mp21:Number;
private var _perspectiveChanged:Boolean;// = false
public var viewport:ViewPort;
private var _nFar:Number;
private var _nNear:Number;
public function Camera3D(_arg1:Number=550, _arg2:Number=400, _arg3:Number=45, _arg4:Number=50, _arg5:Number=10000){
viewport = new ViewPort(640, 480);
frustrum = new Frustum();
_perspectiveChanged = false;
_mp = new Matrix4();
_mpInv = new Matrix4();
super(null);
viewport.width = _arg1;
viewport.height = _arg2;
_nFov = _arg3;
_nFar = _arg5;
_nNear = _arg4;
setPerspectiveProjection(_nFov, viewport.ratio, _nNear, _nFar);
m_nOffx = viewport.width2;
m_nOffy = viewport.height2;
visible = false;
z = -300;
lookAt(0, 0, 0);
}
override public function destroy():void{
viewport = null;
frustrum = null;
_mp = null;
_mpInv = null;
super.destroy();
}
public function get invProjectionMatrix():Matrix4{
_mpInv.copy(_mp);
_mpInv.inverse();
return (_mpInv);
}
public function get far():Number{
return (_nFar);
}
public function get near():Number{
return (_nNear);
}
public function set far(_arg1:Number):void{
_nFar = _arg1;
_perspectiveChanged = true;
}
public function projectVertex(_arg1:Vertex):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = (viewport.offset.x + m_nOffx);
_local3 = (viewport.offset.y + m_nOffy);
_local4 = (1 / _arg1.wz);
_arg1.sx = ((((_local4 * _arg1.wx) * mp11) * m_nOffx) + _local2);
_arg1.sy = ((((-(_local4) * _arg1.wy) * mp22) * m_nOffy) + _local3);
}
public function set focalLength(_arg1:Number):void{
_nFov = (Math.atan2(viewport.height2, _arg1) * 114.591559);
_perspectiveChanged = true;
}
protected function setPerspectiveProjection(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Number;
var _local6:Number;
frustrum.computePlanes(_arg2, _arg3, _arg4, _arg1);
_arg1 = NumberUtil.toRadian(_arg1);
_local5 = (1 / Math.tan((_arg1 / 2)));
_local6 = (_arg4 / (_arg4 - _arg3));
_mp.zero();
_mp.n11 = (_local5 / _arg2);
_mp.n22 = _local5;
_mp.n33 = _local6;
_mp.n34 = (-(_local6) * _arg3);
_mp.n43 = 1;
mp11 = _mp.n11;
mp21 = _mp.n21;
mp31 = _mp.n31;
mp41 = _mp.n41;
mp12 = _mp.n12;
mp22 = _mp.n22;
mp32 = _mp.n32;
mp42 = _mp.n42;
mp13 = _mp.n13;
mp23 = _mp.n23;
mp33 = _mp.n33;
mp43 = _mp.n43;
mp14 = _mp.n14;
mp24 = _mp.n24;
mp34 = _mp.n34;
mp44 = _mp.n44;
changed = true;
}
override public function toString():String{
return ("sandy.core.scenegraph.Camera3D");
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
}
public function set near(_arg1:Number):void{
_nNear = _arg1;
_perspectiveChanged = true;
}
public function set fov(_arg1:Number):void{
_nFov = _arg1;
_perspectiveChanged = true;
}
protected function updatePerspective():void{
setPerspectiveProjection(_nFov, viewport.ratio, _nNear, _nFar);
_perspectiveChanged = false;
}
public function projectArray(_arg1:Array):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Vertex;
_local2 = (viewport.offset.x + m_nOffx);
_local3 = (viewport.offset.y + m_nOffy);
_local5 = (mp11 * m_nOffx);
_local6 = (mp22 * m_nOffy);
for each (_local7 in _arg1) {
if (_local7.projected == false){
_local4 = (1 / _local7.wz);
_local7.sx = (((_local4 * _local7.wx) * _local5) + _local2);
_local7.sy = (((-(_local4) * _local7.wy) * _local6) + _local3);
_local7.projected = true;
};
};
}
public function get focalLength():Number{
return ((viewport.height2 / Math.tan((_nFov * 0.00872664626))));
}
override public function update(_arg1:Matrix4, _arg2:Boolean):void{
if (viewport.hasChanged){
_perspectiveChanged = true;
m_nOffx = viewport.width2;
m_nOffy = viewport.height2;
if (scene.rectClipping){
scene.container.scrollRect = new Rectangle(0, 0, viewport.width, viewport.height);
} else {
scene.container.scrollRect = null;
};
viewport.hasChanged = false;
};
if (_perspectiveChanged){
updatePerspective();
};
super.update(_arg1, _arg2);
}
public function get fov():Number{
return (_nFov);
}
public function get projectionMatrix():Matrix4{
return (_mp);
}
}
}//package sandy.core.scenegraph
Section 28
//Geometry3D (sandy.core.scenegraph.Geometry3D)
package sandy.core.scenegraph {
import sandy.core.data.*;
import flash.utils.*;
public final class Geometry3D {
public var aUVCoords:Array;
public var aFacesUVCoordsID:Array;
public var aFaceEdges:Array;
private var EDGES_DICO:Dictionary;
private var m_nLastVertexNormalId:int;// = 0
public var aFacesVertexID:Array;
public var aVertexNormals:Array;
private var m_nLastVertexId:int;// = 0
private var m_nLastNormalId:int;// = 0
public var aFacesNormals:Array;
private var m_nLastFaceId:int;// = 0
private var m_aVertexFaces:Array;
public var aVertex:Array;
private var m_nLastFaceUVId:int;// = 0
private var m_nLastUVId:int;// = 0
public var aEdges:Array;
public function Geometry3D(_arg1:Array=null){
EDGES_DICO = new Dictionary(true);
aVertex = new Array();
aFacesVertexID = new Array();
aFacesUVCoordsID = new Array();
aFacesNormals = new Array();
aVertexNormals = new Array();
aEdges = new Array();
aFaceEdges = new Array();
aUVCoords = new Array();
m_nLastVertexId = 0;
m_nLastNormalId = 0;
m_nLastFaceId = 0;
m_nLastFaceUVId = 0;
m_nLastUVId = 0;
m_nLastVertexNormalId = 0;
m_aVertexFaces = new Array();
super();
init();
}
public function setUVCoords(_arg1:int, _arg2:Number, _arg3:Number):int{
if (aUVCoords[_arg1]){
return (-1);
};
aUVCoords[_arg1] = new UVCoord(_arg2, _arg3);
return ((++m_nLastUVId - 1));
}
public function init():void{
}
public function getNextFaceID():int{
return (m_nLastFaceId);
}
public function generateFaceNormals():void{
var _local1:Array;
var _local2:Vertex;
var _local3:Vertex;
var _local4:Vertex;
var _local5:Point3D;
var _local6:Point3D;
var _local7:Point3D;
if (aFacesNormals.length > 0){
return;
};
for each (_local1 in aFacesVertexID) {
if (_local1.length < 3){
} else {
_local2 = aVertex[_local1[0]];
_local3 = aVertex[_local1[1]];
_local4 = aVertex[_local1[2]];
_local5 = new Point3D((_local3.wx - _local2.wx), (_local3.wy - _local2.wy), (_local3.wz - _local2.wz));
_local6 = new Point3D((_local3.wx - _local4.wx), (_local3.wy - _local4.wy), (_local3.wz - _local4.wz));
_local7 = _local5.cross(_local6);
_local7.normalize();
setFaceNormal(getNextFaceNormalID(), _local7.x, _local7.y, _local7.z);
};
};
}
public function setVertex(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number):int{
if (aVertex[_arg1]){
return (-1);
};
aVertex[_arg1] = new Vertex(_arg2, _arg3, _arg4);
return ((++m_nLastVertexId - 1));
}
public function setFaceNormal(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number):int{
if (aFacesNormals[_arg1]){
return (-1);
};
aFacesNormals[_arg1] = new Vertex(_arg2, _arg3, _arg4);
return ((++m_nLastNormalId - 1));
}
public function getNextUVCoordID():int{
return (m_nLastUVId);
}
public function generateVertexNormals():void{
var _local1:uint;
var _local2:Array;
var _local3:Vertex;
var _local4:Vertex;
if (aVertexNormals.length > 0){
return;
};
_local1 = 0;
_local1 = 0;
while (_local1 < aFacesVertexID.length) {
_local2 = aFacesVertexID[_local1];
_local3 = aFacesNormals[_local1];
if (_local3 == null){
} else {
if (null == aVertexNormals[_local2[0]]){
m_nLastVertexNormalId++;
aVertexNormals[_local2[0]] = new Vertex();
};
Vertex(aVertexNormals[_local2[0]]).add(_local3);
if (null == aVertexNormals[_local2[1]]){
m_nLastVertexNormalId++;
aVertexNormals[_local2[1]] = new Vertex();
};
Vertex(aVertexNormals[_local2[1]]).add(_local3);
if (null == aVertexNormals[_local2[2]]){
m_nLastVertexNormalId++;
aVertexNormals[_local2[2]] = new Vertex();
};
Vertex(aVertexNormals[_local2[2]]).add(_local3);
if ((aVertex[_local2[0]] as Vertex).aFaces.indexOf(_local1) == 0){
(aVertex[_local2[0]] as Vertex).aFaces.push(_local1);
};
if ((aVertex[_local2[1]] as Vertex).aFaces.indexOf(_local1) == 0){
(aVertex[_local2[1]] as Vertex).aFaces.push(_local1);
};
if ((aVertex[_local2[2]] as Vertex).aFaces.indexOf(_local1) == 0){
(aVertex[_local2[2]] as Vertex).aFaces.push(_local1);
};
aVertex[_local2[0]].nbFaces++;
aVertex[_local2[1]].nbFaces++;
aVertex[_local2[2]].nbFaces++;
};
_local1++;
};
_local1 = 0;
while (_local1 < aVertexNormals.length) {
_local4 = aVertex[_local1];
if (_local4.nbFaces){
Vertex(aVertexNormals[_local1]).scale((1 / _local4.nbFaces));
};
_local1++;
};
}
public function setVertexNormal(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number):int{
if (aVertexNormals[_arg1]){
return (-1);
};
aVertexNormals[_arg1] = new Vertex(_arg2, _arg3, _arg4);
return ((++m_nLastVertexNormalId - 1));
}
private function isEdgeExist(_arg1:uint, _arg2:uint):Boolean{
var _local3:String;
if (_arg1 < _arg2){
_local3 = ((_arg1 + "_") + _arg2);
} else {
_local3 = ((_arg2 + "_") + _arg1);
};
if (EDGES_DICO[_local3] == null){
return (false);
};
return (true);
}
public function dispose():void{
var _local1:Array;
var _local2:Vertex;
var _local3:Array;
var _local4:UVCoord;
for each (_local2 in aVertex) {
_local2 = null;
};
aVertex = null;
for each (_local1 in aFacesVertexID) {
_local1 = null;
};
aFacesVertexID = null;
for each (_local2 in aFacesNormals) {
_local2 = null;
};
aFacesNormals = null;
for each (_local2 in aVertexNormals) {
_local2 = null;
};
aVertexNormals = null;
for each (_local3 in aFacesUVCoordsID) {
_local3 = null;
};
aFacesUVCoordsID = null;
for each (_local4 in aUVCoords) {
_local4 = null;
};
aUVCoords = null;
}
public function getNextVertexID():int{
return (m_nLastVertexId);
}
public function getNextFaceUVCoordID():int{
return (m_nLastFaceUVId);
}
public function getNextFaceNormalID():int{
return (m_nLastNormalId);
}
public function getVertexId(_arg1:Vertex):int{
return (aVertex.indexOf(_arg1));
}
public function setFaceUVCoordsIds(_arg1:int, ... _args):int{
var _local3:Array;
if (aFacesUVCoordsID[_arg1]){
return (-1);
};
_local3 = ((_args[0] is Array)) ? _args[0] : _args.splice(0);
aFacesUVCoordsID[_arg1] = _local3;
return ((++m_nLastFaceUVId - 1));
}
public function clone():Geometry3D{
var _local1:Geometry3D;
var _local2:uint;
var _local3:Vertex;
var _local4:Array;
var _local5:Array;
var _local6:UVCoord;
var _local7:Edge3D;
var _local8:Array;
_local1 = new Geometry3D();
_local2 = 0;
for each (_local3 in aVertex) {
_local1.aVertex[_local2] = _local3.clone();
_local2++;
};
_local2 = 0;
for each (_local4 in aFacesVertexID) {
_local1.aFacesVertexID[_local2] = _local4.concat();
_local2++;
};
_local2 = 0;
for each (_local3 in aFacesNormals) {
_local1.aFacesNormals[_local2] = _local3.clone();
_local2++;
};
_local2 = 0;
for each (_local3 in aVertexNormals) {
_local1.aVertexNormals[_local2] = _local3.clone();
_local2++;
};
_local2 = 0;
for each (_local5 in aFacesUVCoordsID) {
_local1.aFacesUVCoordsID[_local2] = _local5.concat();
_local2++;
};
_local2 = 0;
for each (_local6 in aUVCoords) {
_local1.aUVCoords[_local2] = _local6.clone();
_local2++;
};
_local2 = 0;
for each (_local7 in aEdges) {
_local1.aEdges[_local2] = _local7.clone();
_local2++;
};
_local2 = 0;
for each (_local8 in aFaceEdges) {
_local1.aFaceEdges[_local2] = _local8.concat();
_local2++;
};
return (_local1);
}
public function getNextVertexNormalID():int{
return (m_nLastVertexNormalId);
}
public function setFaceVertexIds(_arg1:int, ... _args):int{
var _local3:Array;
var _local4:uint;
var _local5:uint;
var _local6:uint;
var _local7:uint;
var _local8:String;
if (aFacesVertexID[_arg1]){
return (-1);
};
_local3 = ((_args[0] is Array)) ? _args[0] : _args.splice(0);
aFacesVertexID[_arg1] = _local3;
_local4 = 0;
while (_local4 < _local3.length) {
_local5 = _local3[_local4];
_local6 = _local3[((_local4 + 1) % _local3.length)];
if (isEdgeExist(_local5, _local6) == false){
_local7 = (aEdges.push(new Edge3D(_local5, _local6)) - 1);
if (_local5 < _local6){
_local8 = ((_local5 + "_") + _local6);
} else {
_local8 = ((_local6 + "_") + _local5);
};
EDGES_DICO[_local8] = _local7;
} else {
if (_local5 < _local6){
_local8 = ((_local5 + "_") + _local6);
} else {
_local8 = ((_local6 + "_") + _local5);
};
_local7 = EDGES_DICO[_local8];
};
if (null == aFaceEdges[_arg1]){
aFaceEdges[_arg1] = new Array();
};
(aFaceEdges[_arg1] as Array).push(_local7);
_local4++;
};
return ((++m_nLastFaceId - 1));
}
public function toString():String{
return ((((((((("[Geometry: " + aFacesVertexID.length) + " faces, ") + aVertex.length) + " points, ") + aFacesNormals.length) + " normals, ") + aUVCoords.length) + " uv coords]"));
}
}
}//package sandy.core.scenegraph
Section 29
//Group (sandy.core.scenegraph.Group)
package sandy.core.scenegraph {
import sandy.core.data.*;
import sandy.view.*;
public class Group extends Node {
public function Group(_arg1:String=""){
super(_arg1);
}
public function clone(_arg1:String):Group{
var _local2:Group;
var _local3:*;
_local2 = new Group(_arg1);
for each (_local3 in children) {
if ((((((_local3 is Shape3D)) || ((_local3 is Group)))) || ((_local3 is TransformGroup)))){
_local2.addChild(_local3.clone(((_arg1 + "_") + _local3.name)));
};
};
return (_local2);
}
override public function toString():String{
return ((("sandy.core.scenegraph.Group :[" + name) + "]"));
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
var _local4:Boolean;
var _local5:Node;
if (visible == false){
culled = CullingState.OUTSIDE;
} else {
_local4 = ((_arg3) || (changed));
for each (_local5 in children) {
_local5.cull(_arg1, _arg2, _local4);
};
};
}
}
}//package sandy.core.scenegraph
Section 30
//IDisplayable (sandy.core.scenegraph.IDisplayable)
package sandy.core.scenegraph {
import flash.display.*;
public interface IDisplayable {
function get container():Sprite;
function display(_arg1:Sprite=null):void;
function get depth():Number;
function get changed():Boolean;
function clear():void;
}
}//package sandy.core.scenegraph
Section 31
//INodeOperation (sandy.core.scenegraph.INodeOperation)
package sandy.core.scenegraph {
public interface INodeOperation {
function performOnEntry(_arg1:Node):void;
function performOnExit(_arg1:Node):void;
}
}//package sandy.core.scenegraph
Section 32
//Node (sandy.core.scenegraph.Node)
package sandy.core.scenegraph {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.events.*;
import sandy.events.*;
import sandy.view.*;
import sandy.bounds.*;
public class Node {
public const children:Array;
public const id:uint;
public const viewMatrix:Matrix4;
public const modelMatrix:Matrix4;
protected var m_oEB:BubbleEventBroadcaster;
public var name:String;
public var boundingBox:BBox;
public var culled:CullingState;
protected var m_bChanged:Boolean;
public var boundingSphere:BSphere;
private var _parent:Node;
protected var m_oScene:Scene3D;// = null
public var visible:Boolean;// = true
private static var _ID_:uint = 0;
public function Node(_arg1:String=""){
culled = CullingState.OUTSIDE;
children = new Array();
modelMatrix = new Matrix4();
viewMatrix = new Matrix4();
boundingBox = new BBox();
boundingSphere = new BSphere();
id = _ID_++;
visible = true;
m_oScene = null;
super();
parent = null;
if (((_arg1) && (!((_arg1 == ""))))){
name = _arg1;
} else {
name = id.toString();
};
changed = true;
m_oEB = new BubbleEventBroadcaster(this);
culled = CullingState.INSIDE;
scene = null;
boundingBox.reset();
boundingSphere.reset();
}
public function remove():void{
var _local1:Array;
var _local2:Node;
parent.removeChildByName(name);
_local1 = children.concat();
for each (_local2 in _local1) {
parent.addChild(_local2);
};
children.splice(0);
m_oEB = null;
changed = true;
}
public function getChildByName(_arg1:String, _arg2:Boolean=false):Node{
var _local3:Node;
var _local4:Node;
for each (_local3 in children) {
if (_local3.name == _arg1){
return (_local3);
};
};
if (_arg2){
_local4 = null;
for each (_local3 in children) {
_local4 = _local3.getChildByName(_arg1, _arg2);
if (_local4 != null){
return (_local4);
};
};
};
return (null);
}
public function removeChildByName(_arg1:String):Boolean{
var _local2:Boolean;
var _local3:int;
var _local4:int;
_local2 = false;
_local4 = children.length;
while ((((_local3 < _local4)) && (!(_local2)))) {
if (children[int(_local3)].name == _arg1){
broadcaster.removeChild(children[int(_local3)].broadcaster);
children.splice(_local3, 1);
changed = true;
_local2 = true;
};
_local3++;
};
return (_local2);
}
public function swapParent(_arg1:Node):void{
if (parent.removeChildByName(this.name)){
};
_arg1.addChild(this);
}
public function set scene(_arg1:Scene3D):void{
var _local2:Node;
if (_arg1 == null){
return;
};
if (m_oScene){
m_oScene.removeEventListener(SandyEvent.SCENE_RENDER_FINISH, _updateFlags);
};
m_oScene = _arg1;
m_oScene.addEventListener(SandyEvent.SCENE_RENDER_FINISH, _updateFlags);
for each (_local2 in children) {
_local2.scene = m_oScene;
};
}
public function set useSingleContainer(_arg1:Boolean):void{
var _local2:Node;
for each (_local2 in children) {
_local2.useSingleContainer = _arg1;
};
}
public function get parent():Node{
return (_parent);
}
public function get broadcaster():BubbleEventBroadcaster{
return (m_oEB);
}
public function get changed():Boolean{
return (m_bChanged);
}
public function get scene():Scene3D{
return (m_oScene);
}
public function set appearance(_arg1:Appearance):void{
var _local2:Node;
for each (_local2 in children) {
_local2.appearance = _arg1;
};
}
public function update(_arg1:Matrix4, _arg2:Boolean):void{
var _local3:Node;
culled = CullingState.INSIDE;
if (boundingBox){
boundingBox.uptodate = false;
};
if (boundingSphere){
boundingSphere.uptodate = false;
};
changed = ((changed) || (_arg2));
for each (_local3 in children) {
_local3.update(_arg1, changed);
};
}
public function updateBoundingVolumes():void{
}
public function addEventListener(_arg1:String, _arg2):Boolean{
return (m_oEB.addEventListener.apply(_arg1, arguments));
}
public function set enableInteractivity(_arg1:Boolean):void{
var _local2:Node;
for each (_local2 in children) {
_local2.enableInteractivity = _arg1;
};
}
public function removeEventListener(_arg1:String, _arg2):void{
m_oEB.removeEventListener(_arg1, _arg2);
}
public function set enableBackFaceCulling(_arg1:Boolean):void{
var _local2:Node;
for each (_local2 in children) {
_local2.enableBackFaceCulling = _arg1;
};
}
public function set parent(_arg1:Node):void{
if (_arg1){
_parent = _arg1;
changed = true;
};
}
public function perform(_arg1:INodeOperation):void{
var _local2:Node;
_arg1.performOnEntry(this);
for each (_local2 in children) {
_local2.perform(_arg1);
};
_arg1.performOnExit(this);
}
public function set changed(_arg1:Boolean):void{
m_bChanged = _arg1;
}
public function hasParent():Boolean{
return (!((_parent == null)));
}
public function toString():String{
return ("sandy.core.scenegraph.Node");
}
public function isParent(_arg1:Node):Boolean{
return ((((_parent == _arg1)) && (!((_arg1 == null)))));
}
public function set enableEvents(_arg1:Boolean):void{
var _local2:Node;
for each (_local2 in children) {
_local2.enableEvents = _arg1;
};
}
public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
if (visible == false){
culled = CullingState.OUTSIDE;
} else {
if (((_arg3) || (changed))){
viewMatrix.copy(_arg2);
viewMatrix.multiply4x3(modelMatrix);
};
};
}
public function destroy():void{
var _local1:Array;
var _local2:Node;
if (hasParent() == true){
parent.removeChildByName(name);
};
_local1 = children.concat();
for each (_local2 in _local1) {
_local2.destroy();
};
children.splice(0);
m_oEB = null;
scene = null;
}
public function addChild(_arg1:Node):void{
if (_arg1.hasParent()){
_arg1.parent.removeChildByName(_arg1.name);
};
_arg1.parent = this;
changed = true;
children.push(_arg1);
if (_arg1.broadcaster){
m_oEB.addChild(_arg1.broadcaster);
};
if (scene){
_arg1.scene = scene;
};
}
private function _updateFlags(_arg1:Event=null):void{
changed = false;
}
}
}//package sandy.core.scenegraph
Section 33
//Renderable (sandy.core.scenegraph.Renderable)
package sandy.core.scenegraph {
public interface Renderable {
function render(_arg1:Camera3D):void;
}
}//package sandy.core.scenegraph
Section 34
//Shape3D (sandy.core.scenegraph.Shape3D)
package sandy.core.scenegraph {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import flash.events.*;
import sandy.events.*;
import sandy.view.*;
import sandy.bounds.*;
import flash.geom.*;
import sandy.math.*;
public class Shape3D extends ATransformable implements IDisplayable {
public const aVisiblePolygons:Array;
protected var m_oContainer:Sprite;
public var aPolygons:Array;
private var m_oLastEvent:Shape3DEvent;
protected var m_bUseSingleContainer:Boolean;// = true
public var enableNearClipping:Boolean;// = false
private var m_bWasOver:Boolean;// = false
protected var m_nDepth:Number;// = 0
public var enableClipping:Boolean;// = false
public var forcedDepth:Number;// = 0
private var m_oAppearance:Appearance;
private var m_bMouseInteractivity:Boolean;// = false
private var m_bBackFaceCulling:Boolean;// = true
private var m_oGeometry:Geometry3D;
protected var m_oGeomCenter:Point3D;
private var m_bForcedSingleContainer:Boolean;// = false
private var m_bEv:Boolean;// = false
public var enableForcedDepth:Boolean;// = false
public var animated:Boolean;// = false
public static var DEFAULT_APPEARANCE:Appearance = new Appearance(DEFAULT_MATERIAL);
public static var DEFAULT_MATERIAL:Material = new WireFrameMaterial();
public function Shape3D(_arg1:String="", _arg2:Geometry3D=null, _arg3:Appearance=null, _arg4:Boolean=true){
aPolygons = new Array();
enableNearClipping = false;
enableClipping = false;
enableForcedDepth = false;
forcedDepth = 0;
animated = false;
aVisiblePolygons = new Array();
m_bEv = false;
m_oGeomCenter = new Point3D();
m_bBackFaceCulling = true;
m_bWasOver = false;
m_bUseSingleContainer = true;
m_nDepth = 0;
m_bMouseInteractivity = false;
m_bForcedSingleContainer = false;
super(_arg1);
m_oContainer = new Sprite();
m_oContainer.name = name;
geometry = _arg2;
m_bUseSingleContainer = !(_arg4);
useSingleContainer = _arg4;
appearance = (_arg3) ? _arg3 : Shape3D.DEFAULT_APPEARANCE;
updateBoundingVolumes();
}
override public function destroy():void{
m_oGeometry.dispose();
clear();
if (m_oContainer.parent){
m_oContainer.parent.removeChild(m_oContainer);
};
if (m_oContainer){
m_oContainer = null;
};
__destroyPolygons();
super.destroy();
}
override public function set scene(_arg1:Scene3D):void{
var _local2:Polygon;
super.scene = _arg1;
for each (_local2 in aPolygons) {
_local2.scene = null;
_local2.scene = _arg1;
};
}
override public function set useSingleContainer(_arg1:Boolean):void{
var _local2:Polygon;
if (_arg1 == m_bUseSingleContainer){
return;
};
if (_arg1){
for each (_local2 in aPolygons) {
if (_local2.container.parent){
_local2.container.graphics.clear();
_local2.container.parent.removeChild(_local2.container);
this.broadcaster.removeChild(_local2.broadcaster);
};
};
} else {
if (m_oContainer.parent){
m_oContainer.graphics.clear();
m_oContainer.parent.removeChild(m_oContainer);
};
for each (_local2 in aPolygons) {
this.broadcaster.addChild(_local2.broadcaster);
_local2.container.graphics.clear();
};
};
m_bUseSingleContainer = _arg1;
}
public function get enableInteractivity():Boolean{
return (m_bMouseInteractivity);
}
public function swapCulling():void{
var _local1:Polygon;
for each (_local1 in aPolygons) {
_local1.swapCulling();
};
changed = true;
}
override public function updateBoundingVolumes():void{
if (m_oGeometry){
boundingBox = BBox.create(m_oGeometry.aVertex);
boundingSphere.resetFromBox(boundingBox);
};
if (parent){
parent.updateBoundingVolumes();
};
}
override public function set enableInteractivity(_arg1:Boolean):void{
var _local2:Polygon;
if (_arg1 != m_bMouseInteractivity){
if (_arg1){
if (m_bUseSingleContainer == true){
m_bUseSingleContainer = false;
m_bForcedSingleContainer = true;
};
} else {
if (m_bForcedSingleContainer == true){
useSingleContainer = true;
m_bForcedSingleContainer = false;
};
};
for each (_local2 in aPolygons) {
_local2.enableInteractivity = _arg1;
};
m_bMouseInteractivity = _arg1;
};
}
override public function set enableBackFaceCulling(_arg1:Boolean):void{
if (_arg1 != m_bBackFaceCulling){
m_bBackFaceCulling = _arg1;
changed = true;
};
}
public function clear():void{
if (m_oContainer){
m_oContainer.graphics.clear();
};
}
public function get geometryCenter():Point3D{
return (m_oGeomCenter);
}
public function get appearance():Appearance{
return (m_oAppearance);
}
override public function toString():String{
return ((("sandy.core.scenegraph.Shape3D" + " ") + m_oGeometry.toString()));
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
super.cull(_arg1, _arg2, _arg3);
if (culled == Frustum.OUTSIDE){
return;
};
boundingSphere.transform(viewMatrix);
culled = _arg1.sphereInFrustum(boundingSphere);
if (culled == Frustum.INTERSECT){
culled = _arg1.boxInFrustum(boundingBox.transform(viewMatrix));
};
if (((!((culled == CullingState.OUTSIDE))) && (!((m_oAppearance == null))))){
scene.renderer.addToDisplayList(this);
};
if (m_bEv){
if ((((m_bWasOver == true)) && ((m_oContainer.hitTestPoint(m_oContainer.mouseX, m_oContainer.mouseY) == false)))){
m_oEB.dispatchEvent(new Shape3DEvent(MouseEvent.MOUSE_OUT, this, m_oLastEvent.polygon, m_oLastEvent.uv, m_oLastEvent.point, m_oLastEvent.event));
m_bWasOver = false;
};
};
}
public function clone(_arg1:String="", _arg2:Boolean=false):Shape3D{
var _local3:Shape3D;
_local3 = new Shape3D(_arg1, geometry.clone(), appearance, m_bUseSingleContainer);
if (_arg2 == true){
_local3.matrix = this.matrix;
};
return (_local3);
}
public function get geometry():Geometry3D{
return (m_oGeometry);
}
public function set depth(_arg1:Number):void{
m_nDepth = _arg1;
}
public function get container():Sprite{
return (m_oContainer);
}
public function get useSingleContainer():Boolean{
return (m_bUseSingleContainer);
}
public function get enableBackFaceCulling():Boolean{
return (m_bBackFaceCulling);
}
private function __destroyPolygons():void{
var _local1:int;
var _local2:int;
if (((!((aPolygons == null))) && ((aPolygons.length > 0)))){
_local2 = aPolygons.length;
while (_local1 < _local2) {
if (broadcaster != null){
broadcaster.removeChild(aPolygons[_local1].broadcaster);
};
if (aPolygons[_local1]){
Polygon(aPolygons[int(_local1)]).destroy();
};
aPolygons[int(_local1)] = null;
_local1++;
};
};
aPolygons.splice(0);
aPolygons = null;
}
public function display(_arg1:Sprite=null):void{
var _local2:Polygon;
aVisiblePolygons.sortOn("depth", (Array.NUMERIC | Array.DESCENDING));
for each (_local2 in aVisiblePolygons) {
_local2.display(m_oContainer);
};
}
override public function set appearance(_arg1:Appearance):void{
var _local2:Polygon;
m_oAppearance = _arg1;
if (m_oGeometry){
for each (_local2 in aPolygons) {
_local2.appearance = m_oAppearance;
};
};
}
public function get depth():Number{
return (m_nDepth);
}
public function set geometryCenter(_arg1:Point3D):void{
var _local2:Point3D;
var _local3:Vertex;
_local2 = _arg1.clone();
_local2.sub(m_oGeomCenter);
if (m_oGeometry){
for each (_local3 in m_oGeometry.aVertex) {
_local3.x = (_local3.x + _local2.x);
_local3.y = (_local3.y + _local2.y);
_local3.z = (_local3.z + _local2.z);
};
};
m_oGeomCenter.copy(_arg1);
updateBoundingVolumes();
}
protected function _onInteraction(_arg1:Event):void{
var _local2:Point;
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:Polygon;
var _local7:Array;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:UVCoord;
var _local14:Point3D;
_local2 = new Point(m_oContainer.mouseX, m_oContainer.mouseY);
_local3 = new Point();
_local4 = new Point();
_local5 = new Point();
_local7 = aPolygons.sortOn("depth", (Array.NUMERIC | Array.RETURNINDEXEDARRAY));
_local8 = aPolygons.length;
_local9 = 0;
while (_local9 < _local8) {
_local6 = aPolygons[_local7[int(_local9)]];
if (((!(_local6.visible)) && (m_bBackFaceCulling))){
} else {
_local10 = _local6.vertices.length;
_local11 = (_local10 - 2);
_local12 = 0;
while (_local12 < _local11) {
_local3.x = _local6.vertices[_local12].sx;
_local3.y = _local6.vertices[_local12].sy;
_local4.x = _local6.vertices[(_local12 + 1)].sx;
_local4.y = _local6.vertices[(_local12 + 1)].sy;
_local5.x = _local6.vertices[((_local12 + 2) % _local10)].sx;
_local5.y = _local6.vertices[((_local12 + 2) % _local10)].sy;
if (IntersectionMath.isPointInTriangle2D(_local2, _local3, _local4, _local5)){
_local13 = _local6.getUVFrom2D(_local2);
_local14 = _local6.get3DFrom2D(_local2);
m_oLastEvent = new Shape3DEvent(_arg1.type, this, _local6, _local13, _local14, _arg1);
m_oEB.dispatchEvent(m_oLastEvent);
if (_arg1.type == MouseEvent.MOUSE_OVER){
m_bWasOver = true;
};
return;
};
_local12++;
};
};
_local9 = (_local9 + 1);
};
}
private function __generatePolygons(_arg1:Geometry3D):void{
var _local2:int;
var _local3:int;
_local2 = 0;
_local3 = _arg1.aFacesVertexID.length;
aPolygons = new Array(_local3);
_local2 = 0;
while (_local2 < _local3) {
aPolygons[_local2] = new Polygon(this, _arg1, _arg1.aFacesVertexID[_local2], _arg1.aFacesUVCoordsID[_local2], _local2, _local2);
if (m_oAppearance){
aPolygons[int(_local2)].appearance = m_oAppearance;
};
this.broadcaster.addChild(aPolygons[int(_local2)].broadcaster);
_local2 = (_local2 + 1);
};
}
override public function set enableEvents(_arg1:Boolean):void{
var _local2:Polygon;
_local2 = null;
if (_arg1){
if (!m_bEv){
if (m_bUseSingleContainer == false){
for each (_local2 in aPolygons) {
_local2.enableEvents = true;
};
} else {
m_oContainer.addEventListener(MouseEvent.CLICK, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_UP, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
m_oContainer.addEventListener(MouseEvent.ROLL_OVER, _onInteraction);
m_oContainer.addEventListener(MouseEvent.ROLL_OUT, _onInteraction);
m_oContainer.addEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
};
};
} else {
if (((!(_arg1)) && (m_bEv))){
if (m_bUseSingleContainer == false){
for each (_local2 in aPolygons) {
_local2.enableEvents = false;
};
} else {
m_oContainer.removeEventListener(MouseEvent.CLICK, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_UP, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.ROLL_OVER, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.ROLL_OUT, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
};
};
};
m_bEv = _arg1;
}
public function set geometry(_arg1:Geometry3D):void{
if (_arg1 == null){
return;
};
m_oGeometry = _arg1;
updateBoundingVolumes();
m_oGeometry.generateFaceNormals();
m_oGeometry.generateVertexNormals();
__destroyPolygons();
__generatePolygons(m_oGeometry);
}
}
}//package sandy.core.scenegraph
Section 35
//Sprite2D (sandy.core.scenegraph.Sprite2D)
package sandy.core.scenegraph {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import flash.events.*;
import sandy.events.*;
import sandy.view.*;
public class Sprite2D extends ATransformable implements IDisplayable {
private var m_nH2:Number;// = 0
private var m_oContainer:Sprite;
protected var m_nDepth:Number;
protected var m_oContent:DisplayObject;
protected var m_nRotation:Number;// = 0
public var forcedDepth:Number;// = 0
protected var m_oMaterial:Material;
protected var m_nPerspScaleY:Number;// = 0
protected var m_nPerspScaleX:Number;// = 0
public var v:Vertex;
public var floorCenter:Boolean;// = false
protected var _nScale:Number;
public var fixedAngle:Boolean;// = false
public var vx:Vertex;
public var vy:Vertex;
private var m_bEv:Boolean;// = false
private var m_nW2:Number;// = 0
public var enableForcedDepth:Boolean;// = false
public var autoCenter:Boolean;// = true
public function Sprite2D(_arg1:String="", _arg2:DisplayObject=null, _arg3:Number=1){
fixedAngle = false;
autoCenter = true;
floorCenter = false;
enableForcedDepth = false;
forcedDepth = 0;
m_bEv = false;
m_nW2 = 0;
m_nH2 = 0;
m_nPerspScaleX = 0;
m_nPerspScaleY = 0;
m_nRotation = 0;
super(_arg1);
m_oContainer = new Sprite();
v = new Vertex();
vx = new Vertex();
vy = new Vertex();
_nScale = _arg3;
if (_arg2){
content = _arg2;
};
setBoundingSphereRadius(Math.max(30, (Math.abs(_nScale) * Math.max(content.width, content.height))));
}
private function _finishMaterial(_arg1:SandyEvent):void{
if (!m_oMaterial){
return;
};
if (!visible){
return;
};
m_oMaterial.finish(scene);
}
override public function destroy():void{
remove();
super.destroy();
}
public function setBoundingSphereRadius(_arg1:Number):void{
boundingSphere.radius = _arg1;
}
private function _beginMaterial(_arg1:SandyEvent):void{
if (!m_oMaterial){
return;
};
if (!visible){
return;
};
m_oMaterial.begin(scene);
}
public function set content(_arg1:DisplayObject):void{
_arg1.transform.matrix.identity();
if (m_oContent){
m_oContainer.removeChild(m_oContent);
};
m_oContent = _arg1;
m_oContainer.addChildAt(m_oContent, 0);
m_oContent.x = 0;
m_oContent.y = 0;
m_nW2 = (m_oContainer.width / 2);
m_nH2 = (m_oContainer.height / 2);
}
override public function set scene(_arg1:Scene3D):void{
if (_arg1 == null){
return;
};
if (scene){
scene.removeEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.removeEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
};
super.scene = _arg1;
scene.addEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.addEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
}
public function get material():Material{
return (m_oMaterial);
}
public function get scale():Number{
return (_nScale);
}
public function clear():void{
}
override public function toString():String{
return (("sandy.core.scenegraph.Sprite2D, container:" + m_oContainer));
}
public function set material(_arg1:Material):void{
m_oMaterial = _arg1;
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
super.cull(_arg1, _arg2, _arg3);
if (visible == false){
container.visible = visible;
return;
};
if (viewMatrix){
boundingSphere.transform(viewMatrix);
culled = _arg1.sphereInFrustum(boundingSphere);
};
if (culled == CullingState.OUTSIDE){
container.visible = false;
} else {
if (culled == CullingState.INTERSECT){
if (boundingSphere.position.z <= scene.camera.near){
container.visible = false;
} else {
container.visible = true;
scene.renderer.addToDisplayList(this);
};
} else {
container.visible = true;
scene.renderer.addToDisplayList(this);
};
};
}
public function get enableEvents():Boolean{
return (m_bEv);
}
override public function remove():void{
if (m_oContainer.parent){
m_oContainer.parent.removeChild(m_oContainer);
};
m_oContainer.graphics.clear();
enableEvents = false;
if (scene){
scene.removeEventListener(SandyEvent.SCENE_RENDER_FINISH, _finishMaterial);
scene.removeEventListener(SandyEvent.SCENE_RENDER_DISPLAYLIST, _beginMaterial);
};
super.remove();
}
public function set depth(_arg1:Number):void{
m_nDepth = _arg1;
}
public function set scale(_arg1:Number):void{
if (_arg1){
_nScale = _arg1;
};
}
public function get container():Sprite{
return (m_oContainer);
}
public function get content():DisplayObject{
return (m_oContent);
}
public function display(_arg1:Sprite=null):void{
m_nPerspScaleX = ((_nScale)==0) ? 1 : (_nScale * (vx.sx - v.sx));
m_nPerspScaleY = ((_nScale)==0) ? 1 : (_nScale * (v.sy - vy.sy));
m_nRotation = Math.atan2(viewMatrix.n12, viewMatrix.n22);
m_oContainer.scaleX = m_nPerspScaleX;
m_oContainer.scaleY = m_nPerspScaleY;
m_oContainer.x = (v.sx - (autoCenter) ? (m_oContainer.width / 2) : 0);
m_oContainer.y = (v.sy - (autoCenter) ? (m_oContainer.height / 2) : (floorCenter) ? m_oContainer.height : 0);
if (fixedAngle){
m_oContainer.rotation = ((m_nRotation * 180) / Math.PI);
};
if (m_oMaterial){
m_oMaterial.renderSprite(this, m_oMaterial, scene);
};
}
public function get depth():Number{
return (m_nDepth);
}
protected function _onInteraction(_arg1:Event):void{
m_oEB.dispatchEvent(new BubbleEvent(_arg1.type, this));
}
override public function set enableEvents(_arg1:Boolean):void{
if (((_arg1) && (!(m_bEv)))){
m_oContainer.addEventListener(MouseEvent.CLICK, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_UP, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
m_oContainer.addEventListener(MouseEvent.ROLL_OVER, _onInteraction);
m_oContainer.addEventListener(MouseEvent.ROLL_OUT, _onInteraction);
m_oContainer.addEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_MOVE, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
m_oContainer.addEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
} else {
if (((!(_arg1)) && (m_bEv))){
m_oContainer.removeEventListener(MouseEvent.CLICK, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_UP, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_DOWN, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.ROLL_OVER, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.ROLL_OUT, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.DOUBLE_CLICK, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_MOVE, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_OVER, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_OUT, _onInteraction);
m_oContainer.removeEventListener(MouseEvent.MOUSE_WHEEL, _onInteraction);
};
};
}
}
}//package sandy.core.scenegraph
Section 36
//StarField (sandy.core.scenegraph.StarField)
package sandy.core.scenegraph {
import sandy.core.data.*;
import flash.display.*;
import sandy.events.*;
import sandy.view.*;
import flash.geom.*;
public class StarField extends ATransformable implements IDisplayable, Renderable {
public var fadeTo:Number;// = 1000
private var m_nDepth:Number;// = 10000000000
private var m_oMatrix:Matrix;
public var fadeFrom:Number;// = 0
public var starColors:Array;
private var m_oEventBefore:StarFieldRenderEvent;
private var _vy:Vertex;
private var m_oEventAfter:StarFieldRenderEvent;
public var stars:Array;
private var m_sBlendMode:String;// = ""
private var m_oBitmapData:BitmapData;
private var _vx:Vertex;
private var m_oBitmap:Bitmap;
private var m_oColorTransform:ColorTransform;
public var depthIndex:int;// = -1
public var starSprites:Array;
private var m_oContainer:Sprite;
public function StarField(_arg1:String=""){
fadeFrom = 0;
fadeTo = 1000;
stars = [];
starColors = [];
starSprites = [];
depthIndex = -1;
m_nDepth = 10000000000;
m_oMatrix = new Matrix();
m_oColorTransform = new ColorTransform();
m_sBlendMode = "";
super(_arg1);
m_oContainer = new Sprite();
m_oBitmapData = new BitmapData(1, 1, true, 0);
makeEvents();
m_oBitmap = new Bitmap(m_oBitmapData);
m_oContainer.addChild(m_oBitmap);
_vx = new Vertex();
_vy = new Vertex();
}
override public function destroy():void{
remove();
super.destroy();
}
private function resetEvents():void{
m_oEventBefore.clear = true;
m_oEventAfter.clear = false;
}
public function clear():void{
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
super.cull(_arg1, _arg2, _arg3);
if (((!((m_oBitmapData.width == scene.camera.viewport.width))) || (!((m_oBitmapData.height == scene.camera.viewport.height))))){
m_oBitmap.bitmapData.dispose();
m_oBitmapData = new BitmapData(scene.camera.viewport.width, scene.camera.viewport.height, true, 0);
makeEvents();
m_oBitmap.bitmapData = m_oBitmapData;
};
scene.renderer.addToDisplayList(this);
}
override public function remove():void{
m_oBitmap.bitmapData.dispose();
if (m_oContainer.parent){
m_oContainer.parent.removeChild(m_oContainer);
};
super.remove();
}
public function set depth(_arg1:Number):void{
m_nDepth = _arg1;
}
public function get container():Sprite{
return (m_oContainer);
}
public function render(_arg1:Camera3D):void{
var _local2:int;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Vertex;
var _local12:IBitmapDrawable;
resetEvents();
m_oBitmapData.lock();
m_oEB.dispatchEvent(m_oEventBefore);
if (m_oEventBefore.clear){
m_oBitmapData.fillRect(m_oBitmapData.rect, 0);
};
_local2 = 0;
_local2 = 0;
while (_local2 < stars.length) {
_local11 = stars[_local2];
stars[_local2].wx = ((((_local11.x * viewMatrix.n11) + (_local11.y * viewMatrix.n12)) + (_local11.z * viewMatrix.n13)) + viewMatrix.n14);
_local11.wy = ((((_local11.x * viewMatrix.n21) + (_local11.y * viewMatrix.n22)) + (_local11.z * viewMatrix.n23)) + viewMatrix.n24);
_local11.wz = ((((_local11.x * viewMatrix.n31) + (_local11.y * viewMatrix.n32)) + (_local11.z * viewMatrix.n33)) + viewMatrix.n34);
if (_local11.wz >= _arg1.near){
_local6 = Math.min(1, Math.max(0, ((_local11.wz - fadeFrom) / fadeTo)));
if (_local6 < 1){
_local3 = ((_local2)<starColors.length) ? Number(starColors[_local2]) : 4294967295;
_local4 = ((_local3 / 16777216) * (1 - _local6));
_local5 = (_local3 & 0xFFFFFF);
_arg1.projectVertex(_local11);
if ((((_local2 < starSprites.length)) && ((starSprites[_local2] is IBitmapDrawable)))){
_vx.copy(_local11);
_vx.wx++;
_arg1.projectVertex(_vx);
_vy.copy(_local11);
_vy.wy++;
_arg1.projectVertex(_vy);
m_oMatrix.tx = _local11.sx;
m_oMatrix.a = (_vx.sx - _local11.sx);
m_oMatrix.ty = _local11.sy;
m_oMatrix.d = (_local11.sy - _vy.sy);
if (_local5 != 0xFFFFFF){
_local7 = ((0xFF0000 & _local5) >> 16);
_local8 = ((0xFF00 & _local5) >> 8);
_local9 = (0xFF & _local5);
_local10 = (1.7321 / Math.sqrt((((_local7 * _local7) + (_local8 * _local8)) + (_local9 * _local9))));
_local7 = (_local7 * _local10);
_local8 = (_local8 * _local10);
_local9 = (_local9 * _local10);
} else {
_local9 = 1;
_local8 = _local9;
_local7 = _local8;
};
m_oColorTransform.redMultiplier = _local7;
m_oColorTransform.greenMultiplier = _local8;
m_oColorTransform.blueMultiplier = _local9;
m_oColorTransform.alphaMultiplier = (_local4 / 0xFF);
_local12 = starSprites[_local2];
m_sBlendMode = (((_local12 as DisplayObject))==null) ? "normal" : DisplayObject(_local12).blendMode;
m_oBitmapData.draw(_local12, m_oMatrix, m_oColorTransform, m_sBlendMode);
} else {
m_oBitmapData.setPixel32(_local11.sx, _local11.sy, (_local5 + (int(_local4) * 16777216)));
};
};
};
_local2++;
};
m_oEB.dispatchEvent(m_oEventAfter);
if (m_oEventAfter.clear){
m_oBitmapData.fillRect(m_oBitmapData.rect, 0);
};
m_oBitmapData.unlock();
}
private function makeEvents():void{
m_oEventBefore = new StarFieldRenderEvent(StarFieldRenderEvent.BEFORE_RENDER, this, m_oBitmapData, true);
m_oEventAfter = new StarFieldRenderEvent(StarFieldRenderEvent.AFTER_RENDER, this, m_oBitmapData, false);
}
public function get depth():Number{
var _local1:Vertex;
_local1 = (stars[depthIndex] as Vertex);
if (_local1 != null){
return (_local1.wz);
};
return (m_nDepth);
}
public function display(_arg1:Sprite=null):void{
m_oContainer.x = 0;
m_oContainer.y = 0;
}
}
}//package sandy.core.scenegraph
Section 37
//TransformGroup (sandy.core.scenegraph.TransformGroup)
package sandy.core.scenegraph {
import sandy.core.data.*;
import sandy.view.*;
public class TransformGroup extends ATransformable {
public function TransformGroup(_arg1:String=""){
super(_arg1);
}
override public function toString():String{
return ((("sandy.core.scenegraph.TransformGroup :[" + name) + "]"));
}
override public function cull(_arg1:Frustum, _arg2:Matrix4, _arg3:Boolean):void{
var _local4:Boolean;
var _local5:Node;
if (visible == false){
culled = CullingState.OUTSIDE;
} else {
_local4 = ((_arg3) || (changed));
for each (_local5 in children) {
_local5.cull(_arg1, _arg2, _local4);
};
};
}
public function clone(_arg1:String):TransformGroup{
var _local2:TransformGroup;
var _local3:*;
_local2 = new TransformGroup(_arg1);
for each (_local3 in children) {
if ((((((_local3 is Shape3D)) || ((_local3 is Group)))) || ((_local3 is TransformGroup)))){
_local2.addChild(_local3.clone(((_arg1 + "_") + _local3.name)));
};
};
return (_local2);
}
}
}//package sandy.core.scenegraph
Section 38
//Renderer (sandy.core.Renderer)
package sandy.core {
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
import sandy.view.*;
public class Renderer {
protected const m_aDisplayList:Array;
protected const m_aRenderingList:Array;
private var m_bGlobalRedraw:Boolean;
protected var m_nDisplayListCount:int;
protected var m_nRenderingListCount:int;
protected var m_aCamera:Camera3D;
private var pool:Pool;
public function Renderer(){
m_aDisplayList = new Array();
m_aRenderingList = new Array();
pool = new Pool();
super();
m_nRenderingListCount = 0;
m_nDisplayListCount = 0;
}
public function addToDisplayList(_arg1:IDisplayable):void{
var _local2 = m_nDisplayListCount++;
m_aDisplayList[_local2] = _arg1;
m_bGlobalRedraw = ((m_bGlobalRedraw) || (_arg1.changed));
}
public function render(_arg1:Scene3D):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Camera3D;
var _local18:Number;
var _local19:Point3D;
var _local20:uint;
var _local21:Matrix4;
var _local22:Frustum;
var _local23:Vertex;
var _local24:Array;
var _local25:Polygon;
var _local26:Number;
var _local27:int;
var _local28:int;
var _local29:int;
var _local30:Boolean;
var _local31:IDisplayable;
var _local32:Shape3D;
var _local33:Boolean;
var _local34:Sprite2D;
_local17 = _arg1.camera;
_local18 = _local17.near;
_local19 = pool.nextPoint3D;
_local20 = 0;
_local22 = _local17.frustrum;
_local28 = 0;
_local30 = _arg1.camera.changed;
if ((((m_bGlobalRedraw == false)) && ((_local30 == false)))){
return (false);
};
for each (_local31 in m_aRenderingList) {
if (_local31){
if ((((_local30 == true)) || ((_local31.changed == true)))){
_local31.clear();
};
};
};
m_nRenderingListCount = 0;
m_aRenderingList.length = 0;
_local29 = 0;
for (;_local29 < m_nDisplayListCount;_local29++) {
if ((m_aDisplayList[int(_local29)] is Shape3D)){
_local32 = (m_aDisplayList[int(_local29)] as Shape3D);
if ((((_local32.changed == false)) && ((_local30 == false)))){
if (_local32.useSingleContainer){
m_aRenderingList[int(m_nRenderingListCount++)] = _local32;
} else {
for each (_local25 in _local32.aVisiblePolygons) {
m_aRenderingList[int(m_nRenderingListCount++)] = _local25;
};
};
continue;
};
_local27 = _local32.appearance.flags;
_local32.depth = 0;
_local32.aVisiblePolygons.length = 0;
_local19.reset(_local17.modelMatrix.n14, _local17.modelMatrix.n24, _local17.modelMatrix.n34);
_local32.invModelMatrix.Point3DMult(_local19);
_local21 = _local32.viewMatrix;
_local2 = _local21.n11;
_local3 = _local21.n21;
_local4 = _local21.n31;
_local5 = _local21.n12;
_local6 = _local21.n22;
_local7 = _local21.n32;
_local8 = _local21.n13;
_local9 = _local21.n23;
_local10 = _local21.n33;
_local11 = _local21.n14;
_local12 = _local21.n24;
_local13 = _local21.n34;
_local33 = (((_local32.culled == CullingState.INTERSECT)) && (((_local32.enableClipping) || (_local32.enableNearClipping))));
for each (_local23 in _local32.geometry.aVertex) {
_local23.projected = (_local23.transformed = false);
};
for each (_local25 in _local32.aPolygons) {
if (_local32.animated){
_local25.updateNormal();
};
_local23 = _local25.normal;
_local14 = _local25.a.x;
_local15 = _local25.a.y;
_local16 = _local25.a.z;
_local25.visible = ((((_local23.x * (_local19.x - _local14)) + (_local23.y * (_local19.y - _local15))) + (_local23.z * (_local19.z - _local16))) > 0);
if (_local32.enableBackFaceCulling){
//unresolved if
} else {
_local23 = _local25.a;
if (_local23.transformed == false){
_local23.wx = ((((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8)) + _local11);
_local23.wy = ((((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9)) + _local12);
_local23.wz = ((((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10)) + _local13);
_local23.transformed = true;
};
_local23 = _local25.b;
if (_local23.transformed == false){
_local14 = _local23.x;
_local15 = _local23.y;
_local16 = _local23.z;
_local23.wx = ((((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8)) + _local11);
_local23.wy = ((((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9)) + _local12);
_local23.wz = ((((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10)) + _local13);
_local23.transformed = true;
};
_local23 = _local25.c;
if (_local23){
if (_local23.transformed == false){
_local14 = _local23.x;
_local15 = _local23.y;
_local16 = _local23.z;
_local23.wx = ((((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8)) + _local11);
_local23.wy = ((((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9)) + _local12);
_local23.wz = ((((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10)) + _local13);
_local23.transformed = true;
};
};
_local23 = _local25.d;
if (_local23){
if (_local23.transformed == false){
_local14 = _local23.x;
_local15 = _local23.y;
_local16 = _local23.z;
_local23.wx = ((((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8)) + _local11);
_local23.wy = ((((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9)) + _local12);
_local23.wz = ((((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10)) + _local13);
_local23.transformed = true;
};
};
_local25.precompute();
_local26 = _local25.minZ;
if (_local33){
if (_local32.enableClipping){
_local25.clip(_local22);
} else {
if (((_local32.enableNearClipping) && ((_local26 < _local18)))){
_local25.clipFrontPlane(_local22);
} else {
if (_local26 < _local18){
continue;
};
};
};
} else {
if (_local26 < _local18){
continue;
};
};
_local24 = (_local25.isClipped) ? _local25.cvertices : _local25.vertices;
if (_local24.length > 1){
_local17.projectArray(_local24);
if (_local32.enableForcedDepth){
_local25.depth = _local32.forcedDepth;
} else {
_local32.depth = (_local32.depth + _local25.depth);
};
_local28++;
_local32.aVisiblePolygons[int(_local32.aVisiblePolygons.length)] = _local25;
_local20 = (_local20 | _local27);
if (_local32.useSingleContainer == false){
m_aRenderingList[int(m_nRenderingListCount++)] = _local25;
};
};
};
};
if (_local32.aVisiblePolygons.length > 0){
if (_local32.useSingleContainer == true){
if (_local32.enableForcedDepth){
_local32.depth = _local32.forcedDepth;
} else {
_local32.depth = (_local32.depth / _local32.aVisiblePolygons.length);
};
m_aRenderingList[int(m_nRenderingListCount++)] = _local32;
};
if (((!((_local27 == 0))) || (!((_local20 == 0))))){
if (((_local27 | _local20) & SandyFlags.POLYGON_NORMAL_WORLD)){
_local21 = _local32.modelMatrix;
_local2 = _local21.n11;
_local3 = _local21.n21;
_local4 = _local21.n31;
_local5 = _local21.n12;
_local6 = _local21.n22;
_local7 = _local21.n32;
_local8 = _local21.n13;
_local9 = _local21.n23;
_local10 = _local21.n33;
for each (_local25 in _local32.aVisiblePolygons) {
_local23 = _local25.normal;
_local14 = _local23.x;
_local15 = _local23.y;
_local16 = _local23.z;
_local25.normal.wx = (((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8));
_local23.wy = (((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9));
_local23.wz = (((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10));
};
};
if (((_local27 | _local20) & SandyFlags.VERTEX_NORMAL_WORLD)){
_local21 = _local32.modelMatrix;
_local2 = _local21.n11;
_local3 = _local21.n21;
_local4 = _local21.n31;
_local5 = _local21.n12;
_local6 = _local21.n22;
_local7 = _local21.n32;
_local8 = _local21.n13;
_local9 = _local21.n23;
_local10 = _local21.n33;
for each (_local23 in _local32.geometry.aVertexNormals) {
_local14 = _local23.x;
_local15 = _local23.y;
_local16 = _local23.z;
_local23.wx = (((_local14 * _local2) + (_local15 * _local5)) + (_local16 * _local8));
_local23.wy = (((_local14 * _local3) + (_local15 * _local6)) + (_local16 * _local9));
_local23.wz = (((_local14 * _local4) + (_local15 * _local7)) + (_local16 * _local10));
};
};
};
};
} else {
if ((m_aDisplayList[int(_local29)] is Sprite2D)){
_local34 = (m_aDisplayList[int(_local29)] as Sprite2D);
_local34.v.projected = false;
_local34.vx.projected = false;
_local34.vy.projected = false;
_local23 = _local34.v;
_local21 = _local34.viewMatrix;
_local23.wx = ((((_local23.x * _local21.n11) + (_local23.y * _local21.n12)) + (_local23.z * _local21.n13)) + _local21.n14);
_local23.wy = ((((_local23.x * _local21.n21) + (_local23.y * _local21.n22)) + (_local23.z * _local21.n23)) + _local21.n24);
_local23.wz = ((((_local23.x * _local21.n31) + (_local23.y * _local21.n32)) + (_local23.z * _local21.n33)) + _local21.n34);
_local34.depth = (_local34.enableForcedDepth) ? _local34.forcedDepth : _local23.wz;
_local17.projectVertex(_local23);
m_aRenderingList[int(m_nRenderingListCount++)] = _local34;
_local34.vx.copy(_local23);
_local34.vx.wx++;
_local17.projectVertex(_local34.vx);
_local34.vy.copy(_local23);
_local34.vy.wy++;
_local17.projectVertex(_local34.vy);
} else {
if ((m_aDisplayList[int(_local29)] is Renderable)){
(m_aDisplayList[int(_local29)] as Renderable).render(_local17);
m_aRenderingList[int(m_nRenderingListCount++)] = (m_aDisplayList[int(_local29)] as Renderable);
};
};
};
};
return (true);
}
public function init():void{
m_nDisplayListCount = 0;
m_bGlobalRedraw = false;
}
public function renderDisplayList(_arg1:Scene3D):void{
var _local2:Sprite;
var _local3:IDisplayable;
var _local4:int;
_local2 = _arg1.container;
m_aRenderingList.sortOn("depth", (Array.NUMERIC | Array.DESCENDING));
_local4 = 0;
while (_local4 < m_nRenderingListCount) {
_local3 = m_aRenderingList[int(_local4)];
if (((_local3.changed) || (_arg1.camera.changed))){
_local3.display();
};
if (_local4 < _local2.numChildren){
if (_local2.getChildAt(_local4) != _local3.container){
_local2.addChildAt(_local3.container, _local4);
};
} else {
_local2.addChildAt(_local3.container, _local4);
};
_local4++;
};
}
}
}//package sandy.core
Section 39
//SandyFlags (sandy.core.SandyFlags)
package sandy.core {
public final class SandyFlags {
public static const VERTEX_NORMAL_WORLD:uint = 2;
public static const POLYGON_NORMAL_WORLD:uint = 1;
}
}//package sandy.core
Section 40
//Scene3D (sandy.core.Scene3D)
package sandy.core {
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
import flash.events.*;
import sandy.events.*;
import sandy.core.light.*;
public class Scene3D extends EventDispatcher {
public var renderer:Renderer;
public var container:Sprite;
private var m_bRectClipped:Boolean;// = false
protected var m_sName:String;
private var _light:Light3D;
protected var m_oRoot:Group;
public var camera:Camera3D;
private static var _version:String = "3.1";
public function Scene3D(_arg1:String, _arg2:Sprite, _arg3:Camera3D=null, _arg4:Group=null){
renderer = new Renderer();
m_bRectClipped = false;
super();
if (_arg1 != null){
if (SceneLocator.getInstance().registerScene(_arg1, this)){
container = _arg2;
camera = _arg3;
root = _arg4;
if (((!((root == null))) && (!((camera == null))))){
if (!camera.hasParent()){
root.addChild(camera);
};
};
};
m_sName = _arg1;
};
_light = new Light3D(new Point3D(0, 0, 1), 100);
}
public function set root(_arg1:Group):void{
if (m_oRoot){
m_oRoot.scene = null;
m_oRoot = null;
};
if (_arg1){
m_oRoot = _arg1;
m_oRoot.scene = this;
if (!camera.hasParent()){
root.addChild(camera);
};
};
}
public function get name():String{
return (m_sName);
}
public function set rectClipping(_arg1:Boolean):void{
m_bRectClipped = _arg1;
if (camera){
camera.viewport.hasChanged = true;
};
}
public function render(_arg1:SandyEvent=null):void{
var _local2:Boolean;
if (((((root) && (camera))) && (container))){
Pool.getInstance().init();
renderer.init();
dispatchEvent(new SandyEvent(SandyEvent.SCENE_UPDATE));
root.update(null, false);
dispatchEvent(new SandyEvent(SandyEvent.SCENE_CULL));
root.cull(camera.frustrum, camera.invModelMatrix, camera.changed);
dispatchEvent(new SandyEvent(SandyEvent.SCENE_RENDER));
_local2 = renderer.render(this);
dispatchEvent(new SandyEvent(SandyEvent.SCENE_RENDER_DISPLAYLIST));
if (_local2){
renderer.renderDisplayList(this);
};
dispatchEvent(new SandyEvent(SandyEvent.SCENE_RENDER_FINISH));
};
}
public function get light():Light3D{
return (_light);
}
public function get root():Group{
return (m_oRoot);
}
public function dispose():Boolean{
SceneLocator.getInstance().unregisterScene(m_sName);
if (root){
root.destroy();
root = null;
};
if (camera){
camera = null;
};
if (_light){
_light = null;
};
return (true);
}
public function get rectClipping():Boolean{
return (m_bRectClipped);
}
public function set light(_arg1:Light3D):void{
if (_light){
_light.destroy();
};
_light = _arg1;
dispatchEvent(new SandyEvent(SandyEvent.LIGHT_ADDED));
}
public static function getVersion():String{
return (_version);
}
}
}//package sandy.core
Section 41
//SceneLocator (sandy.core.SceneLocator)
package sandy.core {
import flash.utils.*;
public class SceneLocator {
private var _m:Dictionary;
private static var _oI:SceneLocator;
public function SceneLocator(_arg1:PrivateConstructorAccess){
_m = new Dictionary(true);
}
public function unregisterScene(_arg1:String):void{
_m[_arg1] = null;
}
public function getScene(_arg1:String):Scene3D{
if (!isRegistered(_arg1)){
trace(((("Can't locate scene instance with '" + _arg1) + "' name in ") + this));
};
return ((_m[_arg1] as Scene3D));
}
public function registerScene(_arg1:String, _arg2:Scene3D):Boolean{
if (isRegistered(_arg1)){
trace(((("scene instance is already registered with '" + _arg1) + "' name in ") + this));
return (false);
};
_m[_arg1] = _arg2;
return (true);
}
public function isRegistered(_arg1:String):Boolean{
return (!((_m[_arg1] == null)));
}
public static function getInstance():SceneLocator{
if (!_oI){
_oI = new SceneLocator(new PrivateConstructorAccess());
};
return (_oI);
}
}
}//package sandy.core
final class PrivateConstructorAccess {
private function PrivateConstructorAccess(){
}
}
Section 42
//BubbleEvent (sandy.events.BubbleEvent)
package sandy.events {
import flash.events.*;
public class BubbleEvent extends Event {
private var m_oTarget:Object;
public function BubbleEvent(_arg1:String, _arg2:Object){
super(_arg1, true, true);
m_oTarget = _arg2;
}
override public function toString():String{
return ("BubbleEvent");
}
public function get object():Object{
return (m_oTarget);
}
}
}//package sandy.events
Section 43
//BubbleEventBroadcaster (sandy.events.BubbleEventBroadcaster)
package sandy.events {
import flash.events.*;
public final class BubbleEventBroadcaster extends EventBroadcaster {
private var m_oParent:BubbleEventBroadcaster;// = null
private var m_oTarget:Object;
public function BubbleEventBroadcaster(_arg1:Object){
m_oParent = null;
super();
m_oTarget = _arg1;
}
override public function dispatchEvent(_arg1:Event):Boolean{
if ((_arg1 is BubbleEvent)){
super.dispatchEvent(_arg1);
if (parent){
parent.dispatchEvent(_arg1);
};
} else {
super.dispatchEvent(_arg1);
};
return (true);
}
public function addChild(_arg1:BubbleEventBroadcaster):void{
_arg1.parent = this;
}
public function get target():Object{
return (m_oTarget);
}
public function get parent():BubbleEventBroadcaster{
return (m_oParent);
}
public function set parent(_arg1:BubbleEventBroadcaster):void{
m_oParent = _arg1;
}
public function removeChild(_arg1:BubbleEventBroadcaster):void{
}
}
}//package sandy.events
Section 44
//EventBroadcaster (sandy.events.EventBroadcaster)
package sandy.events {
import flash.events.*;
public class EventBroadcaster extends EventDispatcher {
override public function dispatchEvent(_arg1:Event):Boolean{
if (((hasEventListener(_arg1.type)) || (_arg1.bubbles))){
return (super.dispatchEvent(_arg1));
};
return (true);
}
}
}//package sandy.events
Section 45
//SandyEvent (sandy.events.SandyEvent)
package sandy.events {
import flash.events.*;
public class SandyEvent extends Event {
public static const QUEUE_LOADER_ERROR:String = "queueLoaderError";
public static const SCENE_CULL:String = "scene_cull";
public static const QUEUE_COMPLETE:String = "queueComplete";
public static const SCENE_RENDER:String = "scene_render";
public static const CONTAINER_CREATED:String = "containerCreated";
public static const LIGHT_COLOR_CHANGED:String = "lightColorChanged";
public static const SCENE_RENDER_FINISH:String = "scene_render_finish";
public static const SCENE_RENDER_DISPLAYLIST:String = "scene_render_display_list";
public static const LIGHT_ADDED:String = "lightAdded";
public static const LIGHT_UPDATED:String = "lightUpdated";
public static const SCENE_UPDATE:String = "scene_update";
public function SandyEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
override public function clone():Event{
return (new SandyEvent(type, bubbles, cancelable));
}
}
}//package sandy.events
Section 46
//Shape3DEvent (sandy.events.Shape3DEvent)
package sandy.events {
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import flash.events.*;
public class Shape3DEvent extends BubbleEvent {
public var point:Point3D;
public var shape:Shape3D;
public var uv:UVCoord;
public var event:Event;
public var polygon:Polygon;
public function Shape3DEvent(_arg1:String, _arg2:Shape3D, _arg3:Polygon, _arg4:UVCoord, _arg5:Point3D, _arg6:Event){
super(_arg1, _arg2);
shape = _arg2;
polygon = _arg3;
uv = _arg4;
point = _arg5;
event = _arg6;
}
}
}//package sandy.events
Section 47
//StarFieldRenderEvent (sandy.events.StarFieldRenderEvent)
package sandy.events {
import flash.display.*;
import sandy.core.scenegraph.*;
public class StarFieldRenderEvent extends BubbleEvent {
public var clear:Boolean;
public var bitmapData:BitmapData;// = null
public static const AFTER_RENDER:String = "afterRender";
public static const BEFORE_RENDER:String = "beforeRender";
public function StarFieldRenderEvent(_arg1:String, _arg2:StarField, _arg3:BitmapData, _arg4:Boolean){
bitmapData = null;
super(_arg1, _arg2);
bitmapData = _arg3;
clear = _arg4;
}
}
}//package sandy.events
Section 48
//AAttributes (sandy.materials.attributes.AAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
public class AAttributes implements IAttributes {
protected var m_nFlags:uint;// = 0
public function AAttributes(){
m_nFlags = 0;
super();
}
public function unlink(_arg1:Polygon):void{
}
public function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void{
}
public function get flags():uint{
return (m_nFlags);
}
public function drawOnSprite(_arg1:Sprite2D, _arg2:Material, _arg3:Scene3D):void{
}
public function init(_arg1:Polygon):void{
}
public function finish(_arg1:Scene3D):void{
}
public function begin(_arg1:Scene3D):void{
}
}
}//package sandy.materials.attributes
Section 49
//ALightAttributes (sandy.materials.attributes.ALightAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
import flash.geom.*;
import flash.utils.*;
public class ALightAttributes implements IAttributes {
protected const m_oH:Point3D;
private var _gloss:Number;// = 5
private var _scenes:Dictionary;
private var _specular:Number;// = 0
private var _diffuse:Number;// = 1
protected var m_oCurrentH:Point3D;
protected var m_nI:Number;
protected var m_oCurrentL:Point3D;
protected var m_oCurrentV:Point3D;
protected var m_oL:Point3D;
protected var m_nFlags:uint;// = 0
protected var m_oV:Point3D;
protected var m_oCurrentShape:Shape3D;
private var _ambient:Number;// = 0.3
public function ALightAttributes(){
m_oH = new Point3D();
m_oCurrentL = new Point3D();
m_oCurrentV = new Point3D();
m_oCurrentH = new Point3D();
m_nFlags = 0;
_ambient = 0.3;
_diffuse = 1;
_specular = 0;
_gloss = 5;
_scenes = new Dictionary(true);
super();
}
public function set specular(_arg1:Number):void{
_specular = _arg1;
onPropertyChange();
}
public function get gloss():Number{
return (_gloss);
}
public function init(_arg1:Polygon):void{
}
private function applyColorToDisplayObject(_arg1:DisplayObject, _arg2:uint, _arg3:Number):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:ColorTransform;
if ((((_arg2 < 1)) || ((_arg2 > 0xFFFFFF)))){
_arg2 = 0xFFFFFF;
};
_local4 = ((0xFF0000 & _arg2) >> 16);
_local5 = ((0xFF00 & _arg2) >> 8);
_local6 = (0xFF & _arg2);
_local7 = ((_arg3 * 1.7321) / Math.sqrt((((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6))));
_local4 = (_local4 * _local7);
_local5 = (_local5 * _local7);
_local6 = (_local6 * _local7);
_local8 = _arg1.transform.colorTransform;
if (((((!((_local8.redMultiplier == _local4))) || (!((_local8.greenMultiplier == _local5))))) || (!((_local8.blueMultiplier == _local6))))){
_local8.redMultiplier = _local4;
_local8.greenMultiplier = _local5;
_local8.blueMultiplier = _local6;
_arg1.transform.colorTransform = _local8;
};
}
public function unlink(_arg1:Polygon):void{
if (m_oCurrentShape == _arg1.shape){
m_oCurrentShape = null;
};
}
public function set gloss(_arg1:Number):void{
_gloss = _arg1;
onPropertyChange();
}
public function get flags():uint{
return (m_nFlags);
}
public function get ambient():Number{
return (_ambient);
}
protected function onPropertyChange():void{
}
public function begin(_arg1:Scene3D):void{
m_nI = _arg1.light.getNormalizedPower();
m_oL = _arg1.light.getDirectionPoint3D();
m_oV = _arg1.camera.getPosition("absolute");
m_oV.scale(-1);
m_oV.normalize();
m_oH.copy(m_oL);
m_oH.add(m_oV);
m_oH.normalize();
m_oCurrentShape = null;
m_oCurrentL.copy(m_oL);
m_oCurrentV.copy(m_oV);
m_oCurrentH.copy(m_oH);
}
public function finish(_arg1:Scene3D):void{
}
public function set ambient(_arg1:Number):void{
_ambient = _arg1;
onPropertyChange();
}
public function get specular():Number{
return (_specular);
}
public function set diffuse(_arg1:Number):void{
_diffuse = _arg1;
onPropertyChange();
}
public function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void{
var _local5:Matrix4;
if (_arg3.lightingEnable){
applyColorToDisplayObject((_arg2.shape.useSingleContainer) ? _arg2.shape.container : _arg2.container, _arg4.light.color, 1);
if (m_oCurrentShape != _arg2.shape){
m_oCurrentShape = _arg2.shape;
_local5 = m_oCurrentShape.invModelMatrix;
if (m_oL){
m_oCurrentL.copy(m_oL);
_local5.Point3DMult3x3(m_oCurrentL);
};
if (m_oV){
m_oCurrentV.copy(m_oV);
_local5.Point3DMult3x3(m_oCurrentV);
};
if (m_oH){
m_oCurrentH.copy(m_oH);
_local5.Point3DMult3x3(m_oCurrentH);
};
};
};
}
public function get diffuse():Number{
return (_diffuse);
}
protected function calculate(_arg1:Point3D, _arg2:Boolean, _arg3:Boolean=false):Number{
var _local4:Number;
var _local5:Number;
var _local6:Number;
_local4 = (_arg2) ? -1 : 1;
_local5 = (_local4 * m_oCurrentL.dot(_arg1));
if (_local5 < 0){
_local5 = 0;
};
_local5 = (_ambient + (_diffuse * _local5));
if (((!(_arg3)) && ((specular > 0)))){
_local6 = (_local4 * m_oCurrentH.dot(_arg1));
if (_local6 < 0){
_local6 = 0;
};
_local5 = (_local5 + (_specular * Math.pow(_local6, _gloss)));
};
return ((_local5 * m_nI));
}
public function drawOnSprite(_arg1:Sprite2D, _arg2:Material, _arg3:Scene3D):void{
if (_arg2.lightingEnable){
applyColorToDisplayObject(_arg1.container, _arg3.light.color, (ambient * _arg3.light.getNormalizedPower()));
};
}
}
}//package sandy.materials.attributes
Section 50
//IAttributes (sandy.materials.attributes.IAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
public interface IAttributes {
function init(_arg1:Polygon):void;
function unlink(_arg1:Polygon):void;
function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void;
function drawOnSprite(_arg1:Sprite2D, _arg2:Material, _arg3:Scene3D):void;
function begin(_arg1:Scene3D):void;
function finish(_arg1:Scene3D):void;
function get flags():uint;
}
}//package sandy.materials.attributes
Section 51
//LightAttributes (sandy.materials.attributes.LightAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
public final class LightAttributes extends ALightAttributes {
public var useBright:Boolean;// = false
public function LightAttributes(_arg1:Boolean=false, _arg2:Number=0.3){
useBright = false;
super();
useBright = _arg1;
ambient = Math.min(Math.max(_arg2, 0), 1);
}
override public function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void{
var _local5:Array;
var _local6:Point3D;
var _local7:Number;
var _local8:Vertex;
super.draw(_arg1, _arg2, _arg3, _arg4);
if (_arg3.lightingEnable){
_local5 = (_arg2.isClipped) ? _arg2.cvertices : _arg2.vertices;
_local6 = _arg2.normal.getPoint3D();
_local7 = calculate(_local6, _arg2.visible);
if (_local7 > 1){
_local7 = 1;
} else {
if (_local7 < ambient){
_local7 = ambient;
};
};
_arg1.lineStyle();
if (useBright){
_arg1.beginFill(((_local7)<0.5) ? 0 : 0xFFFFFF, ((_local7)<0.5) ? (1 - (2 * _local7)) : ((2 * _local7) - 1));
} else {
_arg1.beginFill(0, (1 - _local7));
};
_arg1.moveTo(Vertex(_local5[0]).sx, Vertex(_local5[0]).sy);
for each (_local8 in _local5) {
_arg1.lineTo(_local8.sx, _local8.sy);
};
_arg1.endFill();
_local6 = null;
_local8 = null;
};
}
}
}//package sandy.materials.attributes
Section 52
//LineAttributes (sandy.materials.attributes.LineAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
public class LineAttributes extends AAttributes {
public var modified:Boolean;
private var m_nAlpha:Number;
private var m_nColor:Number;
private var m_nThickness:Number;
public function LineAttributes(_arg1:uint=1, _arg2:uint=0, _arg3:Number=1){
m_nThickness = _arg1;
m_nAlpha = _arg3;
m_nColor = _arg2;
modified = true;
}
public function set color(_arg1:Number):void{
m_nColor = _arg1;
modified = true;
}
override public function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void{
var _local5:Array;
var _local6:Vertex;
var _local7:int;
_local5 = (_arg2.isClipped) ? _arg2.cvertices : _arg2.vertices;
_arg1.lineStyle(m_nThickness, m_nColor, m_nAlpha);
_arg1.moveTo(_local5[0].sx, _local5[0].sy);
_local7 = _local5.length;
while ((_local6 = _local5[--_local7])) {
_arg1.lineTo(_local6.sx, _local6.sy);
};
}
public function get alpha():Number{
return (m_nAlpha);
}
public function get color():Number{
return (m_nColor);
}
public function get thickness():Number{
return (m_nThickness);
}
public function set thickness(_arg1:Number):void{
m_nThickness = _arg1;
modified = true;
}
public function set alpha(_arg1:Number):void{
m_nAlpha = _arg1;
modified = true;
}
}
}//package sandy.materials.attributes
Section 53
//MaterialAttributes (sandy.materials.attributes.MaterialAttributes)
package sandy.materials.attributes {
import sandy.materials.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
public class MaterialAttributes {
public var attributes:Array;
public function MaterialAttributes(... _args){
var _local2:int;
attributes = new Array();
super();
_local2 = 0;
while (_local2 < _args.length) {
if ((_args[_local2] is IAttributes)){
attributes.push(_args[_local2]);
};
_local2++;
};
}
public function unlink(_arg1:Polygon):void{
var _local2:IAttributes;
for each (_local2 in attributes) {
_local2.unlink(_arg1);
};
}
public function draw(_arg1:Graphics, _arg2:Polygon, _arg3:Material, _arg4:Scene3D):void{
var _local5:IAttributes;
for each (_local5 in attributes) {
_local5.draw(_arg1, _arg2, _arg3, _arg4);
};
}
public function drawOnSprite(_arg1:Sprite2D, _arg2:Material, _arg3:Scene3D):void{
var _local4:IAttributes;
for each (_local4 in attributes) {
_local4.drawOnSprite(_arg1, _arg2, _arg3);
};
}
public function begin(_arg1:Scene3D):void{
var _local2:IAttributes;
for each (_local2 in attributes) {
_local2.begin(_arg1);
};
}
public function init(_arg1:Polygon):void{
var _local2:IAttributes;
for each (_local2 in attributes) {
_local2.init(_arg1);
};
}
public function finish(_arg1:Scene3D):void{
var _local2:IAttributes;
for each (_local2 in attributes) {
_local2.finish(_arg1);
};
}
public function get flags():uint{
var _local1:uint;
var _local2:IAttributes;
_local1 = 0;
for each (_local2 in attributes) {
_local1 = (_local1 | _local2.flags);
};
return (_local1);
}
}
}//package sandy.materials.attributes
Section 54
//Appearance (sandy.materials.Appearance)
package sandy.materials {
public class Appearance {
private var m_oBackMaterial:Material;
private var m_oFrontMaterial:Material;
public function Appearance(_arg1:Material=null, _arg2:Material=null){
m_oFrontMaterial = ((_arg1)!=null) ? _arg1 : new ColorMaterial();
m_oBackMaterial = ((_arg2)!=null) ? _arg2 : m_oFrontMaterial;
}
public function set frontMaterial(_arg1:Material):void{
m_oFrontMaterial = _arg1;
if (m_oBackMaterial == null){
m_oBackMaterial = _arg1;
};
}
public function get flags():uint{
var _local1:uint;
_local1 = m_oFrontMaterial.flags;
if (m_oFrontMaterial != m_oBackMaterial){
_local1 = (_local1 | m_oBackMaterial.flags);
};
return (_local1);
}
public function toString():String{
return ("sandy.materials.Appearance");
}
public function get frontMaterial():Material{
return (m_oFrontMaterial);
}
public function get useVertexNormal():Boolean{
return (Boolean(((m_oBackMaterial.useVertexNormal) && (m_oFrontMaterial.useVertexNormal))));
}
public function get backMaterial():Material{
return (m_oBackMaterial);
}
public function set backMaterial(_arg1:Material):void{
m_oBackMaterial = _arg1;
if (m_oFrontMaterial == null){
m_oFrontMaterial = _arg1;
};
}
}
}//package sandy.materials
Section 55
//BitmapMaterial (sandy.materials.BitmapMaterial)
package sandy.materials {
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import flash.geom.*;
import flash.utils.*;
import sandy.util.*;
public class BitmapMaterial extends Material implements IAlphaMaterial {
protected const m_oOffset:Point;
protected const m_oTiling:Point;
public var precision:uint;// = 0
private var m_nWidth:Number;
var graphics:Graphics;
protected var m_oPolygonMatrixMap:Dictionary;
private var m_nInvWidth:Number;
private var m_nRecLevel:int;// = 0
private var m_oDrawMatrix:Matrix;
public var forceUpdate:Boolean;// = false
public var smooth:Boolean;// = false
private var m_oTextureClone:BitmapData;
protected var m_oTexture:BitmapData;
private var m_oColorTransform:ColorTransform;
private var m_nAlpha:Number;// = 1
private var m_nInvHeight:Number;
protected var matrix:Matrix;
public var maxRecurssionDepth:uint;// = 5
var polygon:Polygon;
private var m_nHeight:Number;
var map:Matrix;
protected var m_oPoint:Point;
public function BitmapMaterial(_arg1:BitmapData=null, _arg2:MaterialAttributes=null, _arg3:uint=0){
smooth = false;
precision = 0;
maxRecurssionDepth = 5;
m_oDrawMatrix = new Matrix();
m_oColorTransform = new ColorTransform();
map = new Matrix();
m_nAlpha = 1;
m_nRecLevel = 0;
m_oPoint = new Point();
matrix = new Matrix();
m_oTiling = new Point(1, 1);
m_oOffset = new Point(0, 0);
forceUpdate = false;
super(_arg2);
m_oType = MaterialType.BITMAP;
texture = _arg1;
m_oPolygonMatrixMap = new Dictionary(true);
precision = _arg3;
}
override public function init(_arg1:Polygon):void{
var _local2:Matrix;
var _local3:Array;
if (_arg1.vertices.length >= 3){
_local2 = null;
if ((((m_nWidth > 0)) && ((m_nHeight > 0)))){
_local3 = _arg1.aUVCoord;
if (_local3){
_local2 = _createTextureMatrix(_local3[0].u, _local3[0].v, _local3[int(1)].u, _local3[int(1)].v, _local3[int(2)].u, _local3[int(2)].v);
};
};
m_oPolygonMatrixMap[_arg1.id] = _local2;
};
super.init(_arg1);
}
override public function unlink(_arg1:Polygon):void{
if (m_oPolygonMatrixMap[_arg1.id]){
delete m_oPolygonMatrixMap[_arg1.id];
};
super.unlink(_arg1);
}
protected function renderRec(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number, _arg13:Number, _arg14:Number, _arg15:Number):void{
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:Number;
var _local40:Number;
var _local41:Number;
var _local42:Number;
var _local43:Number;
var _local44:Number;
var _local45:Number;
var _local46:Number;
var _local47:Number;
var _local48:Number;
var _local49:Number;
m_nRecLevel++;
_local16 = (_arg1 + _arg1);
_local17 = (_arg2 + _arg2);
_local18 = (_arg3 + _arg3);
_local19 = (_arg4 + _arg4);
_local20 = (_arg5 + _arg5);
_local21 = (_arg6 + _arg6);
_local22 = (2 / (_arg9 + _arg12));
_local23 = (2 / (_arg12 + _arg15));
_local24 = (2 / (_arg15 + _arg9));
_local25 = (((_arg7 * _arg9) + (_arg10 * _arg12)) * _local22);
_local26 = (((_arg8 * _arg9) + (_arg11 * _arg12)) * _local22);
_local27 = (((_arg10 * _arg12) + (_arg13 * _arg15)) * _local23);
_local28 = (((_arg11 * _arg12) + (_arg14 * _arg15)) * _local23);
_local29 = (((_arg13 * _arg15) + (_arg7 * _arg9)) * _local24);
_local30 = (((_arg14 * _arg15) + (_arg8 * _arg9)) * _local24);
_local31 = ((_arg7 + _arg10) - _local25);
_local32 = ((_arg8 + _arg11) - _local26);
_local33 = ((_arg10 + _arg13) - _local27);
_local34 = ((_arg11 + _arg14) - _local28);
_local35 = ((_arg13 + _arg7) - _local29);
_local36 = ((_arg14 + _arg8) - _local30);
_local37 = ((_local31 * _local31) + (_local32 * _local32));
_local38 = ((_local33 * _local33) + (_local34 * _local34));
_local39 = ((_local35 * _local35) + (_local36 * _local36));
_local40 = (_local25 * 0.5);
_local41 = (_local26 * 0.5);
_local42 = ((_arg9 + _arg12) * 0.5);
_local43 = (_local29 * 0.5);
_local44 = (_local30 * 0.5);
_local45 = ((_arg15 + _arg9) * 0.5);
_local46 = (_local27 * 0.5);
_local47 = (_local28 * 0.5);
_local48 = ((_arg12 + _arg15) * 0.5);
if ((((m_nRecLevel > maxRecurssionDepth)) || ((((((_local37 <= precision)) && ((_local39 <= precision)))) && ((_local38 <= precision)))))){
renderTriangle(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg10, _arg11, _arg13, _arg14);
m_nRecLevel--;
return;
};
if ((((((_local37 > precision)) && ((_local39 > precision)))) && ((_local38 > precision)))){
renderRec(_local16, _local17, _local18, _local19, _local20, _local21, _arg7, _arg8, _arg9, _local40, _local41, _local42, _local43, _local44, _local45);
renderRec(_local16, _local17, _local18, _local19, (_local20 - 1), _local21, _local40, _local41, _local42, _arg10, _arg11, _arg12, _local46, _local47, _local48);
renderRec(_local16, _local17, _local18, _local19, _local20, (_local21 - 1), _local43, _local44, _local45, _local46, _local47, _local48, _arg13, _arg14, _arg15);
renderRec(-(_local16), -(_local17), -(_local18), -(_local19), (-(_local20) + 1), (-(_local21) + 1), _local46, _local47, _local48, _local43, _local44, _local45, _local40, _local41, _local42);
m_nRecLevel--;
return;
};
_local49 = Math.max(_local37, Math.max(_local39, _local38));
if (_local37 == _local49){
renderRec(_local16, _arg2, _local18, _arg4, _local20, _arg6, _arg7, _arg8, _arg9, _local40, _local41, _local42, _arg13, _arg14, _arg15);
renderRec((_local16 + _arg2), _arg2, (_local18 + _arg4), _arg4, ((_local20 + _arg6) - 1), _arg6, _local40, _local41, _local42, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15);
m_nRecLevel--;
return;
};
if (_local39 == _local49){
renderRec(_arg1, _local17, _arg3, _local19, _arg5, _local21, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _local43, _local44, _local45);
renderRec(_arg1, (_local17 + _arg1), _arg3, (_local19 + _arg3), _arg5, ((_local21 + _arg5) - 1), _local43, _local44, _local45, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15);
m_nRecLevel--;
return;
};
renderRec((_arg1 - _arg2), _local17, (_arg3 - _arg4), _local19, (_arg5 - _arg6), _local21, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _local46, _local47, _local48);
renderRec(_local16, (_arg2 - _arg1), _local18, (_arg4 - _arg3), _local20, (_arg6 - _arg5), _arg7, _arg8, _arg9, _local46, _local47, _local48, _arg13, _arg14, _arg15);
m_nRecLevel--;
}
public function get texture():BitmapData{
return (m_oTexture);
}
public function set texture(_arg1:BitmapData):void{
var _local2:Boolean;
var _local3:String;
var _local4:Polygon;
if (_arg1 == m_oTexture){
return;
};
if (m_oTexture){
m_oTexture.dispose();
};
_local2 = false;
if (m_nHeight != _arg1.height){
_local2 = true;
} else {
if (m_nWidth != _arg1.width){
_local2 = true;
};
};
m_oTexture = _arg1;
m_nHeight = m_oTexture.height;
m_nWidth = m_oTexture.width;
m_nInvHeight = (1 / m_nHeight);
m_nInvWidth = (1 / m_nWidth);
if (_local2){
for (_local3 in m_oPolygonMatrixMap) {
_local4 = Polygon.POLYGON_MAP[_local3];
init(_local4);
};
};
}
public function set alpha(_arg1:Number):void{
setTransparency(_arg1);
m_bModified = true;
}
protected function renderTriangle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number):void{
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local13 = (_arg9 - _arg7);
_local14 = (_arg10 - _arg8);
_local15 = (_arg11 - _arg7);
_local16 = (_arg12 - _arg8);
matrix.a = ((_arg1 * _local13) + (_arg2 * _local15));
matrix.b = ((_arg1 * _local14) + (_arg2 * _local16));
matrix.c = ((_arg3 * _local13) + (_arg4 * _local15));
matrix.d = ((_arg3 * _local14) + (_arg4 * _local16));
matrix.tx = (((_arg5 * _local13) + (_arg6 * _local15)) + _arg7);
matrix.ty = (((_arg5 * _local14) + (_arg6 * _local16)) + _arg8);
_local17 = (((_arg7 * (_local16 - _local14)) - (_arg9 * _local16)) + (_arg11 * _local14));
if (_local17 < 0){
_local17 = -(_local17);
};
graphics.lineStyle();
graphics.beginBitmapFill(((m_nAlpha)==1) ? m_oTexture : m_oTextureClone, matrix, repeat, ((smooth) && ((_local17 > 100))));
graphics.moveTo(_arg7, _arg8);
graphics.lineTo(_arg9, _arg10);
graphics.lineTo(_arg11, _arg12);
graphics.endFill();
}
override public function renderPolygon(_arg1:Scene3D, _arg2:Polygon, _arg3:Sprite):void{
var _local4:Array;
var _local5:Array;
var _local6:Vertex;
var _local7:Vertex;
var _local8:Vertex;
var _local9:int;
var _local10:int;
if (m_oTexture == null){
return;
};
polygon = _arg2;
graphics = _arg3.graphics;
m_nRecLevel = 0;
if (((polygon.isClipped) || ((polygon.vertices.length > 3)))){
_local4 = (polygon.isClipped) ? _arg2.cvertices : _arg2.vertices;
_local5 = (polygon.isClipped) ? _arg2.caUVCoord : _arg2.aUVCoord;
_local10 = (_local4.length - 1);
_local9 = 1;
while (_local9 < _local10) {
map = _createTextureMatrix(_local5[0].u, _local5[0].v, _local5[int(_local9)].u, _local5[int(_local9)].v, _local5[int((_local9 + 1))].u, _local5[int((_local9 + 1))].v);
_local6 = _local4[0];
_local7 = _local4[int(_local9)];
_local8 = _local4[int((_local9 + 1))];
if (precision == 0){
renderTriangle(map.a, map.b, map.c, map.d, map.tx, map.ty, _local6.sx, _local6.sy, _local7.sx, _local7.sy, _local8.sx, _local8.sy);
} else {
renderRec(map.a, map.b, map.c, map.d, map.tx, map.ty, _local6.sx, _local6.sy, _local6.wz, _local7.sx, _local7.sy, _local7.wz, _local8.sx, _local8.sy, _local8.wz);
};
_local9++;
};
} else {
_local4 = _arg2.vertices;
_local5 = _arg2.aUVCoord;
map = (m_oPolygonMatrixMap[polygon.id] as Matrix);
_local6 = _local4[0];
_local7 = _local4[1];
_local8 = _local4[2];
if (precision == 0){
renderTriangle(map.a, map.b, map.c, map.d, map.tx, map.ty, _local6.sx, _local6.sy, _local7.sx, _local7.sy, _local8.sx, _local8.sy);
} else {
renderRec(map.a, map.b, map.c, map.d, map.tx, map.ty, _local6.sx, _local6.sy, _local6.wz, _local7.sx, _local7.sy, _local7.wz, _local8.sx, _local8.sy, _local8.wz);
};
};
if (attributes){
attributes.draw(graphics, polygon, this, _arg1);
};
_local4 = null;
_local5 = null;
}
public function setTransparency(_arg1:Number):void{
if (m_oTexture == null){
throw (new Error("Setting transparency requires setting texture first."));
};
_arg1 = NumberUtil.constrain(_arg1, 0, 1);
m_nAlpha = _arg1;
if (_arg1 == 1){
return;
};
if (m_oTextureClone != null){
if (((!((m_oTextureClone.height == m_oTexture.height))) || (!((m_oTextureClone.width == m_oTexture.width))))){
m_oTextureClone.dispose();
m_oTextureClone = null;
};
};
if (m_oTextureClone == null){
m_oTextureClone = new BitmapData(m_oTexture.width, m_oTexture.height, true, 0);
};
m_oColorTransform.alphaMultiplier = _arg1;
m_oTextureClone.lock();
m_oTextureClone.fillRect(m_oTextureClone.rect, 0);
m_oTextureClone.draw(m_oTexture, m_oDrawMatrix, m_oColorTransform);
m_oTextureClone.unlock();
}
protected function _createTextureMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Matrix{
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Matrix;
_local7 = (((_arg1 * m_oTiling.x) + m_oOffset.x) * m_nWidth);
_local8 = (((_arg2 * m_oTiling.y) + m_oOffset.y) * m_nHeight);
_local9 = (((_arg3 * m_oTiling.x) + m_oOffset.x) * m_nWidth);
_local10 = (((_arg4 * m_oTiling.y) + m_oOffset.y) * m_nHeight);
_local11 = (((_arg5 * m_oTiling.x) + m_oOffset.x) * m_nWidth);
_local12 = (((_arg6 * m_oTiling.y) + m_oOffset.y) * m_nHeight);
if ((((((_local7 == _local9)) && ((_local8 == _local10)))) || ((((_local7 == _local11)) && ((_local8 == _local12)))))){
_local7 = (_local7 - ((_local7)>0.05) ? 0.05 : -0.05);
_local8 = (_local8 - ((_local8)>0.07) ? 0.07 : -0.07);
};
if ((((_local11 == _local9)) && ((_local12 == _local10)))){
_local11 = (_local11 - ((_local11)>0.05) ? 0.04 : -0.04);
_local12 = (_local12 - ((_local12)>0.06) ? 0.06 : -0.06);
};
_local13 = new Matrix((_local9 - _local7), (_local10 - _local8), (_local11 - _local7), (_local12 - _local8), _local7, _local8);
_local13.invert();
return (_local13);
}
public function get alpha():Number{
return (m_nAlpha);
}
public function toString():String{
return ("sandy.materials.BitmapMaterial");
}
public function setTiling(_arg1:Number, _arg2:Number, _arg3:Number=0, _arg4:Number=0):void{
var _local5:String;
var _local6:Polygon;
m_oTiling.x = _arg1;
m_oTiling.y = _arg2;
m_oOffset.x = (_arg3 - Math.floor(_arg3));
m_oOffset.y = (_arg4 - Math.floor(_arg4));
for (_local5 in m_oPolygonMatrixMap) {
_local6 = Polygon.POLYGON_MAP[_local5];
init(_local6);
};
}
}
}//package sandy.materials
Section 56
//ColorMaterial (sandy.materials.ColorMaterial)
package sandy.materials {
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
public final class ColorMaterial extends Material implements IAlphaMaterial {
private var m_nColor:Number;
private var m_nAlpha:Number;
public function ColorMaterial(_arg1:uint=0, _arg2:Number=1, _arg3:MaterialAttributes=null){
super(_arg3);
m_oType = MaterialType.COLOR;
m_nColor = _arg1;
m_nAlpha = _arg2;
}
override public function renderPolygon(_arg1:Scene3D, _arg2:Polygon, _arg3:Sprite):void{
var _local4:Array;
var _local5:Vertex;
var _local6:int;
var _local7:Graphics;
_local4 = (_arg2.isClipped) ? _arg2.cvertices : _arg2.vertices;
if (!_local4.length){
return;
};
_local6 = _local4.length;
_local7 = _arg3.graphics;
_local7.lineStyle();
_local7.beginFill(m_nColor, m_nAlpha);
_local7.moveTo(_local4[0].sx, _local4[0].sy);
while ((_local5 = _local4[--_local6])) {
_local7.lineTo(_local5.sx, _local5.sy);
};
_local7.endFill();
if (attributes){
attributes.draw(_local7, _arg2, this, _arg1);
};
}
public function set color(_arg1:Number):void{
m_nColor = _arg1;
m_bModified = true;
}
public function get color():Number{
return (m_nColor);
}
public function get alpha():Number{
return (m_nAlpha);
}
public function set alpha(_arg1:Number):void{
m_nAlpha = _arg1;
m_bModified = true;
}
}
}//package sandy.materials
Section 57
//IAlphaMaterial (sandy.materials.IAlphaMaterial)
package sandy.materials {
public interface IAlphaMaterial {
function set alpha(_arg1:Number):void;
function get alpha():Number;
}
}//package sandy.materials
Section 58
//Material (sandy.materials.Material)
package sandy.materials {
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
public class Material {
protected var m_nFlags:uint;// = 0
public var useVertexNormal:Boolean;// = false
public var attributes:MaterialAttributes;
public var repeat:Boolean;// = true
private var _id:Number;
public var lightingEnable:Boolean;// = false
protected var _useLight:Boolean;// = false
protected var m_oType:MaterialType;
protected var m_bModified:Boolean;
private var _filters:Array;
private static var create:Boolean;
private static var _ID_:Number = 0;
public function Material(_arg1:MaterialAttributes=null){
useVertexNormal = false;
lightingEnable = false;
repeat = true;
m_nFlags = 0;
_useLight = false;
super();
_filters = [];
_useLight = false;
_id = _ID_++;
attributes = ((_arg1)==null) ? new MaterialAttributes() : _arg1;
m_bModified = true;
m_oType = MaterialType.NONE;
}
public function get filters():Array{
return (_filters);
}
public function renderPolygon(_arg1:Scene3D, _arg2:Polygon, _arg3:Sprite):void{
if (attributes){
attributes.draw(_arg3.graphics, _arg2, this, _arg1);
};
}
public function get modified():Boolean{
return (m_bModified);
}
public function get flags():uint{
var _local1:uint;
_local1 = m_nFlags;
if (attributes){
_local1 = (_local1 | attributes.flags);
};
return (_local1);
}
public function init(_arg1:Polygon):void{
if (attributes){
attributes.init(_arg1);
};
}
public function unlink(_arg1:Polygon):void{
if (attributes){
attributes.unlink(_arg1);
};
}
public function finish(_arg1:Scene3D):void{
if (attributes){
attributes.finish(_arg1);
};
}
public function get id():Number{
return (_id);
}
public function begin(_arg1:Scene3D):void{
if (attributes){
attributes.begin(_arg1);
};
}
public function get type():MaterialType{
return (m_oType);
}
public function renderSprite(_arg1:Sprite2D, _arg2:Material, _arg3:Scene3D):void{
if (attributes){
attributes.drawOnSprite(_arg1, _arg2, _arg3);
};
}
public function set filters(_arg1:Array):void{
_filters = _arg1;
m_bModified = true;
}
}
}//package sandy.materials
Section 59
//MaterialType (sandy.materials.MaterialType)
package sandy.materials {
public class MaterialType {
private var m_sType:String;
public static const COLOR:MaterialType = new MaterialType("color");
;
public static const WIREFRAME:MaterialType = new MaterialType("wireframe");
;
public static const OUTLINE:MaterialType = new MaterialType("outline");
;
public static const BITMAP:MaterialType = new MaterialType("bitmap");
;
public static const NONE:MaterialType = new MaterialType("default");
;
public static const VIDEO:MaterialType = new MaterialType("video");
;
public static const MOVIE:MaterialType = new MaterialType("movie");
;
public function MaterialType(_arg1:String){
m_sType = _arg1;
}
public function typeString():String{
return (m_sType);
}
}
}//package sandy.materials
Section 60
//MovieMaterial (sandy.materials.MovieMaterial)
package sandy.materials {
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.utils.*;
import sandy.util.*;
import sandy.math.*;
public class MovieMaterial extends BitmapMaterial {
private var m_bUpdate:Boolean;
private var m_oMovie:Sprite;
private var m_oTimer:Timer;
private var m_oAlpha:ColorTransform;
public static const DEFAULT_FILL_COLOR:uint = 0;
public function MovieMaterial(_arg1:Sprite, _arg2:uint=40, _arg3:MaterialAttributes=null, _arg4:Boolean=false, _arg5:Number=0, _arg6:Number=0){
var _local7:Number;
var _local8:Number;
var _local9:BitmapData;
var _local10:Rectangle;
m_oAlpha = new ColorTransform();
if (_arg4){
_local9 = new BitmapData(_arg1.width, _arg1.height, true, 0);
_local9.draw(_arg1);
_local10 = _local9.getColorBoundsRect(4278190080, 0, false);
_local7 = _local10.width;
_local8 = _local10.height;
} else {
_local7 = (_arg6) ? _arg6 : _arg1.width;
_local8 = (_arg5) ? _arg5 : _arg1.height;
};
super(new BitmapData(_local7, _local8, true, DEFAULT_FILL_COLOR), _arg3);
m_oMovie = _arg1;
m_oType = MaterialType.MOVIE;
m_bUpdate = true;
m_oTimer = new Timer(_arg2);
m_oTimer.addEventListener(TimerEvent.TIMER, _update);
m_oTimer.start();
if (_local9){
_local9.dispose();
_local9 = null;
};
_local10 = null;
_local7 = undefined;
_local8 = undefined;
}
public function stop():void{
m_oTimer.stop();
}
public function get movie():Sprite{
return (m_oMovie);
}
override public function renderPolygon(_arg1:Scene3D, _arg2:Polygon, _arg3:Sprite):void{
m_bUpdate = true;
super.renderPolygon(_arg1, _arg2, _arg3);
}
override public function setTransparency(_arg1:Number):void{
m_oAlpha.alphaMultiplier = NumberUtil.constrain(_arg1, 0, 1);
}
public function start():void{
m_oTimer.start();
}
private function _update(_arg1:Event):void{
if (((m_bUpdate) || (forceUpdate))){
m_oTexture.fillRect(m_oTexture.rect, ColorMath.applyAlpha(DEFAULT_FILL_COLOR, m_oAlpha.alphaMultiplier));
m_oTexture.draw(m_oMovie, null, m_oAlpha, null, null, smooth);
};
m_bUpdate = false;
}
}
}//package sandy.materials
Section 61
//WireFrameMaterial (sandy.materials.WireFrameMaterial)
package sandy.materials {
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
public final class WireFrameMaterial extends Material {
public function WireFrameMaterial(_arg1:uint=1, _arg2:uint=0, _arg3:Number=1, _arg4:MaterialAttributes=null){
super(_arg4);
m_oType = MaterialType.WIREFRAME;
attributes.attributes.push(new LineAttributes(_arg1, _arg2, _arg3));
}
override public function renderPolygon(_arg1:Scene3D, _arg2:Polygon, _arg3:Sprite):void{
attributes.draw(_arg3.graphics, _arg2, this, _arg1);
}
}
}//package sandy.materials
Section 62
//ColorMath (sandy.math.ColorMath)
package sandy.math {
public class ColorMath {
public static function applyAlpha(_arg1:uint, _arg2:Number):uint{
var _local3:uint;
_local3 = (_arg1 / 16777216);
return (((_arg1 & 0xFFFFFF) + (Math.floor((_arg2 * _local3)) * 16777216)));
}
public static function calculateLitColour(_arg1:Number, _arg2:Number):Number{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Array;
var _local16:Number;
var _local17:Number;
var _local18:Number;
_local3 = ((_arg1 >> 16) & 0xFF);
_local4 = ((_arg1 >> 8) & 0xFF);
_local5 = (_arg1 & 0xFF);
_local3 = (_local3 * 0.00390625);
_local4 = (_local4 * 0.00390625);
_local5 = (_local5 * 0.00390625);
_local14 = 0;
_local15 = [_local3, _local4, _local5];
_local15.sort();
_local6 = _local15[0];
_local7 = _local15[1];
_local8 = _local15[2];
_local16 = (_local8 - _local6);
_local10 = ((_local6 + _local8) * 0.5);
if (_local10 == 0){
_local11 = 1;
} else {
_local9 = (_local16 * 0.5);
if (_local10 < 0.5){
_local11 = (_local9 / _local10);
} else {
_local11 = (_local9 / (1 - _local10));
};
if (_local16 != 0){
while (true) {
if (_local3 == _local8){
if (_local5 == _local6){
_local14 = 0;
} else {
_local14 = 5;
};
break;
};
if (_local4 == _local8){
if (_local5 == _local6){
_local14 = 1;
} else {
_local14 = 2;
};
break;
};
if (_local3 == _local6){
_local14 = 3;
} else {
_local14 = 4;
};
break;
};
if ((_local14 % 2) == 0){
_local13 = (_local7 - _local6);
} else {
_local13 = (_local8 - _local7);
};
_local13 = (_local13 / _local16);
_local12 = (60 * (_local14 + _local13));
};
};
if (_arg2 < 0.5){
_local9 = (_local11 * _arg2);
} else {
_local9 = (_local11 * (1 - _arg2));
};
_local6 = (_arg2 - _local9);
_local8 = (_arg2 + _local9);
_local14 = Math.floor((_local12 / 60));
_local13 = (((_local12 - (_local14 * 60)) * _local9) / 30);
_local14 = (_local14 % 6);
_local17 = (_local6 + _local13);
_local18 = (_local8 - _local13);
switch (_local14){
case 0:
_local3 = _local8;
_local4 = _local17;
_local5 = _local6;
break;
case 1:
_local3 = _local18;
_local4 = _local8;
_local5 = _local6;
break;
case 2:
_local3 = _local6;
_local4 = _local8;
_local5 = _local17;
break;
case 3:
_local3 = _local6;
_local4 = _local18;
_local5 = _local8;
break;
case 4:
_local3 = _local17;
_local4 = _local6;
_local5 = _local8;
break;
case 5:
_local3 = _local8;
_local4 = _local6;
_local5 = _local18;
break;
};
return (((((_local3 * 0x0100) << 16) | ((_local4 * 0x0100) << 8)) | (_local5 * 0x0100)));
}
public static function hex2rgb(_arg1:Number):Object{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = ((0xFF0000 & _arg1) >> 16);
_local3 = ((0xFF00 & _arg1) >> 8);
_local4 = (0xFF & _arg1);
return ({r:_local2, g:_local3, b:_local4});
}
public static function rgb2hex(_arg1:Number, _arg2:Number, _arg3:Number):Number{
return ((((_arg1 << 16) | (_arg2 << 8)) | _arg3));
}
public static function hex2rgbn(_arg1:Number):Object{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = ((0xFF0000 & _arg1) >> 16);
_local3 = ((0xFF00 & _arg1) >> 8);
_local4 = (0xFF & _arg1);
return ({r:(_local2 / 0xFF), g:(_local3 / 0xFF), b:(_local4 / 0xFF)});
}
}
}//package sandy.math
Section 63
//FastMath (sandy.math.FastMath)
package sandy.math {
public class FastMath {
public static const PRECISION_DIV_2PI:Number = 20860.7567009409;
public static const HALF_PI:Number = 1.5707963267949;
public static const TWO_PI:Number = 6.28318530717959;
public static const PRECISION_S:int = 131071;
public static const initialized:Boolean = initialize();
public static const PRECISION:int = 131072;
private static var RAD_SLICE:Number = 4.79368996214263E-5;
private static var tanTable:Array = new Array(PRECISION);
private static var sinTable:Array = new Array(PRECISION);
public static function tan(_arg1:Number):Number{
return (tanTable[int(radToIndex(_arg1))]);
}
public static function sin(_arg1:Number):Number{
return (sinTable[int(radToIndex(_arg1))]);
}
private static function radToIndex(_arg1:Number):int{
return (int(((_arg1 * PRECISION_DIV_2PI) & PRECISION_S)));
}
public static function cos(_arg1:Number):Number{
return (sinTable[int(radToIndex((HALF_PI - _arg1)))]);
}
private static function initialize():Boolean{
var _local1:Number;
var _local2:int;
_local1 = 0;
_local2 = 0;
while (_local2 < PRECISION) {
_local1 = Number((_local2 * RAD_SLICE));
sinTable[_local2] = Number(Math.sin(_local1));
tanTable[_local2] = Number(Math.tan(_local1));
_local2++;
};
return (true);
}
}
}//package sandy.math
Section 64
//IntersectionMath (sandy.math.IntersectionMath)
package sandy.math {
import sandy.core.data.*;
import sandy.bounds.*;
import flash.geom.*;
import sandy.util.*;
public final class IntersectionMath {
public static function isPointInTriangle2D(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Boolean{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local5 = (1 / (((_arg2.y - _arg4.y) * (_arg3.x - _arg4.x)) + ((_arg3.y - _arg4.y) * (_arg4.x - _arg2.x))));
_local6 = (_local5 * (((_arg1.y - _arg4.y) * (_arg3.x - _arg4.x)) + ((_arg3.y - _arg4.y) * (_arg4.x - _arg1.x))));
_local7 = (_local5 * (((_arg1.y - _arg2.y) * (_arg4.x - _arg2.x)) + ((_arg4.y - _arg2.y) * (_arg2.x - _arg1.x))));
_local8 = (_local5 * (((_arg1.y - _arg3.y) * (_arg2.x - _arg3.x)) + ((_arg2.y - _arg3.y) * (_arg3.x - _arg1.x))));
return ((((((_local6 > 0)) && ((_local7 > 0)))) && ((_local8 > 0))));
}
public static function intersectionLine3D(_arg1:Point3D, _arg2:Point3D, _arg3:Point3D, _arg4:Point3D):Array{
var _local5:Array;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
_local5 = [new Point3D((0.5 * (_arg1.x + _arg2.x)), (0.5 * (_arg1.y + _arg2.y)), (0.5 * (_arg1.z + _arg2.z))), new Point3D((0.5 * (_arg3.x + _arg4.x)), (0.5 * (_arg3.y + _arg4.y)), (0.5 * (_arg3.z + _arg4.z)))];
_local6 = (_arg1.x - _arg3.x);
_local7 = (_arg1.y - _arg3.y);
_local8 = (_arg1.z - _arg3.z);
_local9 = (_arg4.x - _arg3.x);
_local10 = (_arg4.y - _arg3.y);
_local11 = (_arg4.z - _arg3.z);
if (((((NumberUtil.isZero(_local9)) && (NumberUtil.isZero(_local10)))) && (NumberUtil.isZero(_local11)))){
return (_local5);
};
_local12 = (_arg2.x - _arg1.x);
_local13 = (_arg2.y - _arg1.y);
_local14 = (_arg2.z - _arg1.z);
if (((((NumberUtil.isZero(_local12)) && (NumberUtil.isZero(_local13)))) && (NumberUtil.isZero(_local14)))){
return (_local5);
};
_local15 = (((_local6 * _local9) + (_local7 * _local10)) + (_local8 * _local11));
_local16 = (((_local9 * _local12) + (_local10 * _local13)) + (_local11 * _local14));
_local17 = (((_local6 * _local12) + (_local7 * _local13)) + (_local8 * _local14));
_local18 = (((_local9 * _local9) + (_local10 * _local10)) + (_local11 * _local11));
_local19 = (((_local12 * _local12) + (_local13 * _local13)) + (_local14 * _local14));
_local20 = ((_local19 * _local18) - (_local16 * _local16));
if (NumberUtil.isZero(_local20)){
return (_local5);
};
_local21 = (((_local15 * _local16) - (_local17 * _local18)) / _local20);
_local22 = ((_local15 + (_local16 * _local21)) / _local18);
return ([new Point3D((_arg1.x + (_local21 * _local12)), (_arg1.y + (_local21 * _local13)), (_arg1.z + (_local21 * _local14))), new Point3D((_arg3.x + (_local22 * _local9)), (_arg3.y + (_local22 * _local10)), (_arg3.z + (_local22 * _local11)))]);
}
public static function intersectionBSphere(_arg1:BSphere, _arg2:BSphere):Boolean{
var _local3:Point3D;
var _local4:Number;
var _local5:Number;
_local3 = _arg1.position.clone();
_local3.sub(_arg2.position);
_local4 = (_arg1.radius + _arg2.radius);
_local5 = _local3.getNorm();
return ((_local5 <= _local4));
}
public static function intersectionLine2D(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Point{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local5 = _arg1.x;
_local6 = _arg1.y;
_local7 = _arg2.x;
_local8 = _arg2.y;
_local9 = _arg3.x;
_local10 = _arg3.y;
_local11 = _arg4.x;
_local12 = _arg4.y;
_local13 = (((_local12 - _local10) * (_local7 - _local5)) - ((_local11 - _local9) * (_local8 - _local6)));
if (_local13 == 0){
return (null);
};
_local14 = (((_local11 - _local9) * (_local6 - _local10)) - ((_local12 - _local10) * (_local5 - _local9)));
_local14 = (_local14 / _local13);
return (new Point((_local5 + (_local14 * (_local7 - _local5))), (_local6 + (_local14 * (_local8 - _local6)))));
}
}
}//package sandy.math
Section 65
//PlaneMath (sandy.math.PlaneMath)
package sandy.math {
import sandy.core.data.*;
public class PlaneMath {
public static const NEGATIVE:int = -1;
public static const POSITIVE:int = 1;
public static const ON_PLANE:int = 0;
public static function distanceToPoint(_arg1:Plane, _arg2:Point3D):Number{
return (((((_arg1.a * _arg2.x) + (_arg1.b * _arg2.y)) + (_arg1.c * _arg2.z)) + _arg1.d));
}
public static function classifyPoint(_arg1:Plane, _arg2:Point3D):Number{
var _local3:Number;
_local3 = PlaneMath.distanceToPoint(_arg1, _arg2);
if (_local3 < 0){
return (PlaneMath.NEGATIVE);
};
if (_local3 > 0){
return (PlaneMath.POSITIVE);
};
return (PlaneMath.ON_PLANE);
}
public static function computePlaneFromPoints(_arg1:Point3D, _arg2:Point3D, _arg3:Point3D):Plane{
var _local4:Point3D;
var _local5:Number;
_local4 = Point3DMath.cross(Point3DMath.sub(_arg1, _arg2), Point3DMath.sub(_arg1, _arg3));
Point3DMath.normalize(_local4);
_local5 = Point3DMath.dot(_arg1, _local4);
return (new Plane(_local4.x, _local4.y, _local4.z, _local5));
}
public static function createFromNormalAndPoint(_arg1:Point3D, _arg2:Number):Plane{
var _local3:Plane;
_local3 = new Plane();
Point3DMath.normalize(_arg1);
_local3.a = _arg1.x;
_local3.b = _arg1.y;
_local3.c = _arg1.z;
_local3.d = _arg2;
PlaneMath.normalizePlane(_local3);
return (_local3);
}
public static function normalizePlane(_arg1:Plane):void{
var _local2:Number;
_local2 = Math.sqrt((((_arg1.a * _arg1.a) + (_arg1.b * _arg1.b)) + (_arg1.c * _arg1.c)));
_arg1.a = (_arg1.a / _local2);
_arg1.b = (_arg1.b / _local2);
_arg1.c = (_arg1.c / _local2);
_arg1.d = (_arg1.d / _local2);
}
}
}//package sandy.math
Section 66
//Point3DMath (sandy.math.Point3DMath)
package sandy.math {
import sandy.core.data.*;
public class Point3DMath {
public static function addPoint3D(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z)));
}
public static function dot(_arg1:Point3D, _arg2:Point3D):Number{
return ((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg2.z * _arg1.z)));
}
public static function negate(_arg1:Point3D):Point3D{
return (new Point3D(-(_arg1.x), -(_arg1.y), -(_arg1.z)));
}
public static function clone(_arg1:Point3D):Point3D{
return (new Point3D(_arg1.x, _arg1.y, _arg1.z));
}
public static function sub(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z)));
}
public static function scale(_arg1:Point3D, _arg2:Number):Point3D{
return (new Point3D((_arg1.x * _arg2), (_arg1.y * _arg2), (_arg1.z * _arg2)));
}
public static function normalize(_arg1:Point3D):Boolean{
var _local2:Number;
_local2 = Point3DMath.getNorm(_arg1);
if ((((_local2 == 0)) || ((_local2 == 1)))){
return (false);
};
_arg1.x = (_arg1.x / _local2);
_arg1.y = (_arg1.y / _local2);
_arg1.z = (_arg1.z / _local2);
return (true);
}
public static function cross(_arg1:Point3D, _arg2:Point3D):Point3D{
return (new Point3D(((_arg1.y * _arg2.z) - (_arg1.z * _arg2.y)), ((_arg1.z * _arg2.x) - (_arg1.x * _arg2.z)), ((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x))));
}
public static function sphrand(_arg1:Number, _arg2:Number):Point3D{
var _local3:Point3D;
var _local4:Number;
_local3 = new Point3D((Math.random() - 0.5), (Math.random() - 0.5), (Math.random() - 0.5));
_local3.normalize();
_local4 = Math.random();
_local4 = (((_arg2 - _arg1) * _local4) + _arg1);
_local3.scale(_local4);
return (_local3);
}
public static function getNorm(_arg1:Point3D):Number{
return (Math.sqrt((((_arg1.x * _arg1.x) + (_arg1.y * _arg1.y)) + (_arg1.z * _arg1.z))));
}
public static function pow(_arg1:Point3D, _arg2:Number):Point3D{
return (new Point3D(Math.pow(_arg1.x, _arg2), Math.pow(_arg1.y, _arg2), Math.pow(_arg1.z, _arg2)));
}
public static function getAngle(_arg1:Point3D, _arg2:Point3D):Number{
var _local3:Number;
var _local4:Number;
_local3 = (Point3DMath.dot(_arg1, _arg2) / (Point3DMath.getNorm(_arg1) * Point3DMath.getNorm(_arg2)));
_local4 = (1 - (_local3 * _local3));
if (_local4 < 0){
trace((" wrong " + _local3));
_local4 = 0;
};
return (Math.atan2(Math.sqrt(_local4), _local3));
}
}
}//package sandy.math
Section 67
//Box (sandy.primitive.Box)
package sandy.primitive {
import sandy.core.data.*;
import sandy.core.scenegraph.*;
public class Box extends Shape3D implements Primitive3D {
private var _h:Number;
private var _q:Number;
private var _lg:Number;
private var _mode:String;
private var _radius:Number;
private var m_aFaces:Array;
public static const FACE_RIGHT:uint = 5;
public static const FACE_FRONT:uint = 1;
public static const FACE_LEFT:uint = 4;
public static const FACE_BOTTOM:uint = 2;
public static const FACE_BACK:uint = 0;
public static const FACE_TOP:uint = 3;
public function Box(_arg1:String=null, _arg2:Number=6, _arg3:Number=6, _arg4:Number=6, _arg5:String="tri", _arg6:Number=1){
super(_arg1);
_h = _arg3;
_lg = _arg4;
_radius = _arg2;
_q = ((((_arg6 <= 0)) || ((_arg6 > 10)))) ? 1 : _arg6;
_mode = (((!((_arg5 == "tri"))) && (!((_arg5 == "quad"))))) ? "tri" : _arg5;
geometry = generate();
_generateFaces();
}
private function __tesselate(_arg1:Geometry3D, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number):void{
var _local11:Geometry3D;
var _local12:Polygon;
var _local13:Vertex;
var _local14:Vertex;
var _local15:Vertex;
var _local16:Vertex;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:UVCoord;
var _local23:UVCoord;
var _local24:UVCoord;
var _local25:UVCoord;
_local11 = _arg1;
if (_arg10 == 0){
if (_mode == "tri"){
_local11.setFaceVertexIds(_local11.getNextFaceID(), _arg2, _arg3, _arg5);
_local11.setFaceUVCoordsIds(_local11.getNextFaceUVCoordID(), _arg6, _arg7, _arg9);
_local11.setFaceVertexIds(_local11.getNextFaceID(), _arg4, _arg5, _arg3);
_local11.setFaceUVCoordsIds(_local11.getNextFaceUVCoordID(), _arg8, _arg9, _arg7);
} else {
if (_mode == "quad"){
_local11.setFaceVertexIds(_local11.getNextFaceID(), _arg2, _arg3, _arg4, _arg5);
_local11.setFaceUVCoordsIds(_local11.getNextFaceUVCoordID(), _arg6, _arg7, _arg8, _arg9);
};
};
} else {
_local13 = _local11.aVertex[_arg2];
_local14 = _local11.aVertex[_arg3];
_local15 = _local11.aVertex[_arg4];
_local16 = _local11.aVertex[_arg5];
_local17 = _local11.getNextVertexID();
_local11.setVertex(_local17, ((_local13.x + _local14.x) / 2), ((_local13.y + _local14.y) / 2), ((_local13.z + _local14.z) / 2));
_local18 = _local11.getNextVertexID();
_local11.setVertex(_local18, ((_local14.x + _local15.x) / 2), ((_local14.y + _local15.y) / 2), ((_local14.z + _local15.z) / 2));
_local19 = _local11.getNextVertexID();
_local11.setVertex(_local19, ((_local15.x + _local16.x) / 2), ((_local15.y + _local16.y) / 2), ((_local15.z + _local16.z) / 2));
_local20 = _local11.getNextVertexID();
_local11.setVertex(_local20, ((_local16.x + _local13.x) / 2), ((_local16.y + _local13.y) / 2), ((_local16.z + _local13.z) / 2));
_local21 = _local11.getNextVertexID();
_local11.setVertex(_local21, ((((_local13.x + _local14.x) + _local15.x) + _local16.x) / 4), ((((_local13.y + _local14.y) + _local15.y) + _local16.y) / 4), ((((_local13.z + _local14.z) + _local15.z) + _local16.z) / 4));
_local22 = _local11.aUVCoords[_arg6];
_local23 = _local11.aUVCoords[_arg7];
_local24 = _local11.aUVCoords[_arg8];
_local25 = _local11.aUVCoords[_arg9];
_local11.setUVCoords(_local17, ((_local22.u + _local23.u) / 2), ((_local22.v + _local23.v) / 2));
_local11.setUVCoords(_local18, ((_local23.u + _local24.u) / 2), ((_local23.v + _local24.v) / 2));
_local11.setUVCoords(_local19, ((_local24.u + _local25.u) / 2), ((_local24.v + _local25.v) / 2));
_local11.setUVCoords(_local20, ((_local25.u + _local22.u) / 2), ((_local25.v + _local22.v) / 2));
_local11.setUVCoords(_local21, ((((_local22.u + _local23.u) + _local24.u) + _local25.u) / 4), ((((_local22.v + _local23.v) + _local24.v) + _local25.v) / 4));
__tesselate(_local11, _local21, _local20, _arg2, _local17, _local21, _local20, _arg6, _local17, (_arg10 - 1));
__tesselate(_local11, _local21, _local17, _arg3, _local18, _local21, _local17, _arg7, _local18, (_arg10 - 1));
__tesselate(_local11, _local21, _local18, _arg4, _local19, _local21, _local18, _arg8, _local19, (_arg10 - 1));
__tesselate(_local11, _local21, _local19, _arg5, _local20, _local21, _local19, _arg9, _local20, (_arg10 - 1));
};
}
private function _generateFaces():void{
var _local1:uint;
var _local2:uint;
var _local3:Number;
var _local4:Number;
var _local5:Number;
m_aFaces = new Array(6);
_local1 = ((_mode == PrimitiveMode.TRI)) ? 2 : 1;
_local2 = (_local1 * Math.pow(4, (_q - 1)));
_local3 = 0;
while (_local3 < 6) {
m_aFaces[_local3] = new PrimitiveFace(this);
_local4 = ((_local3 + 1) * _local2);
_local5 = (_local3 * _local2);
while (_local5 < _local4) {
(m_aFaces[_local3] as PrimitiveFace).addPolygon(_local5);
_local5++;
};
_local3++;
};
}
override public function toString():String{
return ("sandy.primitive.Box");
}
public function generate(... _args):Geometry3D{
var _local2:Geometry3D;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
_local2 = new Geometry3D();
_local3 = (-(_h) / 2);
_local4 = (_radius / 2);
_local5 = (_lg / 2);
_local6 = _local2.getNextVertexID();
_local2.setVertex(_local6, -(_local4), -(_local3), _local5);
_local7 = _local2.getNextVertexID();
_local2.setVertex(_local7, _local4, -(_local3), _local5);
_local8 = _local2.getNextVertexID();
_local2.setVertex(_local8, _local4, _local3, _local5);
_local9 = _local2.getNextVertexID();
_local2.setVertex(_local9, -(_local4), _local3, _local5);
_local10 = _local2.getNextVertexID();
_local2.setVertex(_local10, -(_local4), -(_local3), -(_local5));
_local11 = _local2.getNextVertexID();
_local2.setVertex(_local11, _local4, -(_local3), -(_local5));
_local12 = _local2.getNextVertexID();
_local2.setVertex(_local12, _local4, _local3, -(_local5));
_local13 = _local2.getNextVertexID();
_local2.setVertex(_local13, -(_local4), _local3, -(_local5));
_local2.setUVCoords(0, 0, 0);
_local2.setUVCoords(1, 1, 0);
_local2.setUVCoords(2, 0, 1);
_local2.setUVCoords(3, 1, 1);
__tesselate(_local2, _local6, _local7, _local8, _local9, 0, 2, 3, 1, (_q - 1));
__tesselate(_local2, _local10, _local13, _local12, _local11, 0, 2, 3, 1, (_q - 1));
__tesselate(_local2, _local8, _local12, _local13, _local9, 0, 2, 3, 1, (_q - 1));
__tesselate(_local2, _local6, _local10, _local11, _local7, 3, 1, 0, 2, (_q - 1));
__tesselate(_local2, _local6, _local9, _local13, _local10, 0, 2, 3, 1, (_q - 1));
__tesselate(_local2, _local7, _local11, _local12, _local8, 1, 0, 2, 3, (_q - 1));
return (_local2);
}
public function getFace(_arg1:uint):PrimitiveFace{
return (m_aFaces[_arg1]);
}
}
}//package sandy.primitive
Section 68
//Line3D (sandy.primitive.Line3D)
package sandy.primitive {
import sandy.core.scenegraph.*;
public class Line3D extends Shape3D implements Primitive3D {
public function Line3D(_arg1:String=null, ... _args){
super(_arg1);
if ((((_args.length == 1)) && ((_args[0] is Array)))){
var _local2:Array = _args[0];
};
if (_args.length < 2){
trace("Line3D::Too few arguments");
} else {
geometry = generate(_args);
enableBackFaceCulling = false;
};
}
override public function toString():String{
return ("sandy.primitive.Line3D");
}
public function generate(... _args):Geometry3D{
var _local2:Geometry3D;
var _local3:Array;
var _local4:int;
var _local5:int;
_local2 = new Geometry3D();
_local3 = _args[0];
_local5 = _local3.length;
while (_local4 < _local5) {
_local2.setVertex(_local4, _local3[int(_local4)].x, _local3[int(_local4)].y, _local3[int(_local4)].z);
_local4++;
};
_local4 = 0;
while (_local4 < (_local5 - 1)) {
_local2.setFaceVertexIds(_local4, _local4, (_local4 + 1));
_local4++;
};
return (_local2);
}
}
}//package sandy.primitive
Section 69
//Plane3D (sandy.primitive.Plane3D)
package sandy.primitive {
import sandy.core.scenegraph.*;
public class Plane3D extends Shape3D implements Primitive3D {
private var m_sType:String;
private var _h:Number;
private var _lg:Number;
private var _qH:uint;
private var _mode:String;
private var _qV:uint;
public static const ZX_ALIGNED:String = "zx_aligned";
public static const YZ_ALIGNED:String = "yz_aligned";
public static const XY_ALIGNED:String = "xy_aligned";
public function Plane3D(_arg1:String=null, _arg2:Number=100, _arg3:Number=100, _arg4:uint=1, _arg5:uint=1, _arg6:String="xy_aligned", _arg7:String=null){
super(_arg1);
_h = _arg2;
_lg = _arg3;
_qV = _arg5;
_qH = _arg4;
_mode = (((!((_arg7 == PrimitiveMode.TRI))) && (!((_arg7 == PrimitiveMode.QUAD))))) ? PrimitiveMode.TRI : _arg7;
m_sType = _arg6;
geometry = generate();
}
override public function toString():String{
return ("sandy.primitive.Plane3D");
}
public function generate(... _args):Geometry3D{
var _local2:Geometry3D;
var _local3:uint;
var _local4:uint;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
_local2 = new Geometry3D();
_local5 = (_h / 2);
_local6 = (_lg / 2);
_local7 = (_h / _qV);
_local8 = (_lg / _qH);
_local3 = 0;
_local9 = -(_local5);
_local11 = 0;
while (_local3 <= _qV) {
_local4 = 0;
_local10 = -(_local6);
_local12 = 0;
while (_local4 <= _qH) {
if (m_sType == Plane3D.ZX_ALIGNED){
_local2.setVertex(_local2.getNextVertexID(), _local10, 0, _local9);
} else {
if (m_sType == Plane3D.YZ_ALIGNED){
_local2.setVertex(_local2.getNextVertexID(), 0, _local10, _local9);
} else {
_local2.setVertex(_local2.getNextVertexID(), _local10, _local9, 0);
};
};
_local2.setUVCoords(_local2.getNextUVCoordID(), (_local12 / _lg), (1 - (_local11 / _h)));
_local10 = (_local10 + _local8);
_local12 = (_local12 + _local8);
_local4++;
};
_local9 = (_local9 + _local7);
_local11 = (_local11 + _local7);
_local3++;
};
_local3 = 0;
while (_local3 < _qV) {
_local4 = 0;
while (_local4 < _qH) {
if (_mode == PrimitiveMode.TRI){
_local2.setFaceVertexIds(_local2.getNextFaceID(), ((_local3 * (_qH + 1)) + _local4), (((_local3 * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
_local2.setFaceUVCoordsIds(_local2.getNextFaceUVCoordID(), ((_local3 * (_qH + 1)) + _local4), (((_local3 * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
_local2.setFaceVertexIds(_local2.getNextFaceID(), (((_local3 * (_qH + 1)) + _local4) + 1), ((((_local3 + 1) * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
_local2.setFaceUVCoordsIds(_local2.getNextFaceUVCoordID(), (((_local3 * (_qH + 1)) + _local4) + 1), ((((_local3 + 1) * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
} else {
if (_mode == PrimitiveMode.QUAD){
_local2.setFaceVertexIds(_local2.getNextFaceID(), ((_local3 * (_qH + 1)) + _local4), (((_local3 * (_qH + 1)) + _local4) + 1), ((((_local3 + 1) * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
_local2.setFaceUVCoordsIds(_local2.getNextFaceUVCoordID(), ((_local3 * (_qH + 1)) + _local4), (((_local3 * (_qH + 1)) + _local4) + 1), ((((_local3 + 1) * (_qH + 1)) + _local4) + 1), (((_local3 + 1) * (_qH + 1)) + _local4));
};
};
_local4++;
};
_local3++;
};
return (_local2);
}
}
}//package sandy.primitive
Section 70
//Primitive3D (sandy.primitive.Primitive3D)
package sandy.primitive {
import sandy.core.scenegraph.*;
public interface Primitive3D {
function generate(... _args):Geometry3D;
}
}//package sandy.primitive
Section 71
//PrimitiveMode (sandy.primitive.PrimitiveMode)
package sandy.primitive {
public final class PrimitiveMode {
public static const TRI:String = "tri";
public static const QUAD:String = "quad";
}
}//package sandy.primitive
Section 72
//NumberUtil (sandy.util.NumberUtil)
package sandy.util {
public class NumberUtil {
private static var __TO_RADIAN:Number = 0.0174532925199433;
private static var _fABS:Function = Math.abs;
private static var __TWO_PI:Number = 6.28318530717959;
private static var __PI:Number = 3.14159265358979;
private static var __TO_DREGREE:Number = 57.2957795130823;
private static var __HALF_PI:Number = 1.5707963267949;
public static var TOL:Number = 1E-5;
public static function areEqual(_arg1:Number, _arg2:Number):Boolean{
return ((_fABS((_arg1 - _arg2)) < TOL));
}
public static function get TO_DEGREE():Number{
return (__TO_DREGREE);
}
public static function get HALF_PI():Number{
return (__HALF_PI);
}
public static function toDegree(_arg1:Number):Number{
return ((_arg1 * TO_DEGREE));
}
public static function roundTo(_arg1:Number, _arg2:Number=0):Number{
if (_arg2 == 0){
_arg2 = 1;
};
return ((Math.round((_arg1 / _arg2)) * _arg2));
}
public static function get TWO_PI():Number{
return (__TWO_PI);
}
public static function isZero(_arg1:Number):Boolean{
return ((_fABS(_arg1) < TOL));
}
public static function get TO_RADIAN():Number{
return (__TO_RADIAN);
}
public static function constrain(_arg1:Number, _arg2:Number, _arg3:Number):Number{
return (Math.max(Math.min(_arg1, _arg3), _arg2));
}
public static function get PI():Number{
return (__PI);
}
public static function toRadian(_arg1:Number):Number{
return ((_arg1 * TO_RADIAN));
}
}
}//package sandy.util
Section 73
//CullingState (sandy.view.CullingState)
package sandy.view {
public class CullingState {
private var m_sState:String;
public static const OUTSIDE:CullingState = new CullingState("outside");
;
public static const INSIDE:CullingState = new CullingState("inside");
;
public static const INTERSECT:CullingState = new CullingState("intersect");
;
public function CullingState(_arg1:String){
m_sState = _arg1;
}
public function toString():String{
return (("[sandy.view.CullingState] :: state : " + m_sState));
}
}
}//package sandy.view
Section 74
//Frustum (sandy.view.Frustum)
package sandy.view {
import sandy.core.data.*;
import sandy.bounds.*;
import sandy.util.*;
import sandy.math.*;
public class Frustum {
private const aDist:Array;
private const m_aBoxEdges:Array;
public var aNormals:Array;
public var aPlanes:Array;
private var pool:Pool;
public var aPoints:Array;
public var aConstants:Array;
public static const INSIDE:CullingState = CullingState.INSIDE;
public static const OUTSIDE:CullingState = CullingState.OUTSIDE;
public static const INTERSECT:CullingState = CullingState.INTERSECT;
public static const LEFT:uint = 3;
public static const NEAR:uint = 1;
public static const BOTTOM:uint = 5;
public static const TOP:uint = 4;
public static const FAR:uint = 0;
public static const EPSILON:Number = 0.005;
public static const RIGHT:uint = 2;
public function Frustum(){
var _local1:int;
m_aBoxEdges = new Array(8);
pool = new Pool();
aDist = new Array();
super();
aPlanes = new Array(6);
aPoints = new Array(8);
aNormals = new Array(6);
aConstants = new Array(6);
_local1 = 0;
while (_local1 < 8) {
m_aBoxEdges[int(_local1)] = new Point3D();
_local1++;
};
}
public function clipPolygon(_arg1:Plane, _arg2:Array, _arg3:Array):Boolean{
var _local4:Boolean;
var _local5:Boolean;
var _local6:Vertex;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Array;
var _local11:Array;
var _local12:UVCoord;
var _local13:UVCoord;
var _local14:UVCoord;
var _local15:Vertex;
var _local16:Vertex;
var _local17:Vertex;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Boolean;
var _local22:Boolean;
_local4 = true;
_local5 = true;
_local8 = _arg2.length;
aDist.length = 0;
for each (_local6 in _arg2) {
_local9 = ((((_arg1.a * _local6.wx) + (_arg1.b * _local6.wy)) + (_arg1.c * _local6.wz)) + _arg1.d);
if (_local9 < 0){
_local4 = false;
};
if (_local9 >= 0){
_local5 = false;
};
aDist[int(aDist.length)] = _local9;
};
if (_local4){
return (false);
};
if (_local5){
_arg2.splice(0);
_arg3.splice(0);
return (true);
};
_local10 = _arg2.splice(0);
_local11 = _arg3.splice(0);
_local12 = _local11[0];
_local13 = null;
_local14 = null;
_local15 = _local10[0];
_local16 = null;
_local17 = null;
_local20 = aDist[0];
_local21 = false;
_local22 = (_local20 >= 0);
_local7 = 1;
while (_local7 <= _local8) {
_local16 = _local10[int((_local7 % _local8))];
_local13 = _local11[int((_local7 % _local8))];
_local19 = aDist[int((_local7 % _local8))];
if (((_local22) && ((_local19 >= 0)))){
_arg2[_arg2.length] = _local16;
_arg3[_arg3.length] = _local13;
} else {
if (((!(_local22)) && ((_local19 >= 0)))){
_local22 = true;
_local21 = _local22;
_local17 = pool.nextVertex;
_local18 = (_local20 / (_local20 - _local19));
_local17.wx = (_local15.wx + ((_local16.wx - _local15.wx) * _local18));
_local17.wy = (_local15.wy + ((_local16.wy - _local15.wy) * _local18));
_local17.wz = (_local15.wz + ((_local16.wz - _local15.wz) * _local18));
_arg2[_arg2.length] = _local17;
_arg2[_arg2.length] = _local16;
_local14 = pool.nextUV;
_local14.u = (_local12.u + ((_local13.u - _local12.u) * _local18));
_local14.v = (_local12.v + ((_local13.v - _local12.v) * _local18));
_arg3[int(_arg3.length)] = _local14;
_arg3[int(_arg3.length)] = _local13;
} else {
if (((_local22) && ((_local19 < 0)))){
_local21 = true;
_local22 = false;
_local17 = pool.nextVertex;
_local18 = (_local20 / (_local20 - _local19));
_local17.wx = (_local15.wx + ((_local16.wx - _local15.wx) * _local18));
_local17.wy = (_local15.wy + ((_local16.wy - _local15.wy) * _local18));
_local17.wz = (_local15.wz + ((_local16.wz - _local15.wz) * _local18));
_local14 = pool.nextUV;
_local14.u = (_local12.u + ((_local13.u - _local12.u) * _local18));
_local14.v = (_local12.v + ((_local13.v - _local12.v) * _local18));
_arg3[int(_arg3.length)] = _local14;
_arg2[int(_arg2.length)] = _local17;
} else {
_local21 = true;
};
};
};
_local15 = _local16;
_local20 = _local19;
_local12 = _local13;
_local7++;
};
return (true);
}
public function pointInFrustum(_arg1:Point3D):CullingState{
var _local2:Plane;
for each (_local2 in aPlanes) {
if (PlaneMath.classifyPoint(_local2, _arg1) == PlaneMath.NEGATIVE){
return (Frustum.OUTSIDE);
};
};
return (Frustum.INSIDE);
}
public function polygonInFrustum(_arg1:Polygon):CullingState{
var _local2:int;
var _local3:int;
var _local4:Number;
var _local5:Plane;
var _local6:Vertex;
_local2 = 0;
_local3 = 0;
for each (_local5 in aPlanes) {
for each (_local6 in _arg1.vertices) {
_local4 = ((((_local5.a * _local6.wx) + (_local5.b * _local6.wy)) + (_local5.c * _local6.wz)) + _local5.d);
if (_local4 < 0){
if (_local2 > 0){
return (Frustum.INTERSECT);
};
_local3++;
} else {
if (_local3 > 0){
return (Frustum.INTERSECT);
};
_local2++;
};
};
};
if (_local2 == 0){
return (Frustum.OUTSIDE);
};
return (Frustum.INSIDE);
}
public function clipFrontPlane(_arg1:Array, _arg2:Array):Boolean{
if (_arg1.length <= 2){
return (true);
};
return (clipPolygon(aPlanes[NEAR], _arg1, _arg2));
}
public function boxInFrustum(_arg1:BBox):CullingState{
var _local2:CullingState;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Plane;
var _local7:Point3D;
_local2 = Frustum.INSIDE;
_arg1.getEdges(m_aBoxEdges);
for each (_local6 in aPlanes) {
_local3 = 0;
_local4 = 0;
for each (_local7 in m_aBoxEdges) {
_local5 = ((((_local6.a * _local7.x) + (_local6.b * _local7.y)) + (_local6.c * _local7.z)) + _local6.d);
if (_local5 < 0){
_local3++;
} else {
_local4++;
};
if ((((_local4 > 0)) && ((_local3 > 0)))){
break;
};
};
if (_local4 == 0){
return (Frustum.OUTSIDE);
};
if (_local3 > 0){
return (Frustum.INTERSECT);
};
};
return (_local2);
}
public function computePlanes(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Array;
var _local12:int;
_local5 = NumberUtil.toRadian(_arg4);
_local6 = Math.tan((_local5 * 0.5));
_local7 = (-(_local6) * _arg2);
_local8 = (_local7 * _arg1);
_local9 = ((_local7 * _arg3) / _arg2);
_local10 = ((_local8 * _arg3) / _arg2);
_arg2 = -(_arg2);
_arg3 = -(_arg3);
_local11 = aPoints;
_local11[0] = new Point3D(_local8, _local7, _arg2);
_local11[1] = new Point3D(_local8, -(_local7), _arg2);
_local11[2] = new Point3D(-(_local8), -(_local7), _arg2);
_local11[3] = new Point3D(-(_local8), _local7, _arg2);
_local11[4] = new Point3D(_local10, _local9, _arg3);
_local11[5] = new Point3D(_local10, -(_local9), _arg3);
_local11[6] = new Point3D(-(_local10), -(_local9), _arg3);
_local11[7] = new Point3D(-(_local10), _local9, _arg3);
aPlanes[LEFT] = PlaneMath.computePlaneFromPoints(_local11[2], _local11[3], _local11[6]);
aPlanes[RIGHT] = PlaneMath.computePlaneFromPoints(_local11[0], _local11[1], _local11[4]);
aPlanes[TOP] = PlaneMath.computePlaneFromPoints(_local11[0], _local11[7], _local11[3]);
aPlanes[BOTTOM] = PlaneMath.computePlaneFromPoints(_local11[1], _local11[2], _local11[5]);
aPlanes[NEAR] = PlaneMath.computePlaneFromPoints(_local11[0], _local11[2], _local11[1]);
aPlanes[FAR] = PlaneMath.computePlaneFromPoints(_local11[4], _local11[5], _local11[6]);
_local12 = 0;
while (_local12 < 6) {
PlaneMath.normalizePlane(aPlanes[int(_local12)]);
_local12++;
};
}
public function sphereInFrustum(_arg1:BSphere):CullingState{
var _local2:Number;
var _local3:int;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Plane;
_local2 = 0;
_local3 = 0;
_local4 = _arg1.position.x;
_local5 = _arg1.position.y;
_local6 = _arg1.position.z;
_local7 = _arg1.radius;
for each (_local8 in aPlanes) {
_local2 = ((((_local8.a * _local4) + (_local8.b * _local5)) + (_local8.c * _local6)) + _local8.d);
if (_local2 <= -(_local7)){
return (Frustum.OUTSIDE);
};
if (_local2 > _local7){
_local3++;
};
};
return (((_local3)==6) ? Frustum.INSIDE : Frustum.INTERSECT);
}
public function clipFrustum(_arg1:Array, _arg2:Array):Boolean{
var _local3:Boolean;
var _local4:Boolean;
if (_arg1.length <= 2){
return (true);
};
_local3 = clipPolygon(aPlanes[NEAR], _arg1, _arg2);
_local4 = clipPolygon(aPlanes[LEFT], _arg1, _arg2);
_local3 = ((_local3) || (_local4));
_local4 = clipPolygon(aPlanes[RIGHT], _arg1, _arg2);
_local3 = ((_local3) || (_local4));
_local4 = clipPolygon(aPlanes[BOTTOM], _arg1, _arg2);
_local3 = ((_local3) || (_local4));
_local4 = clipPolygon(aPlanes[TOP], _arg1, _arg2);
_local3 = ((_local3) || (_local4));
return (_local3);
}
public function clipLineFrontPlane(_arg1:Array):Boolean{
var _local2:Plane;
var _local3:Array;
var _local4:Vertex;
var _local5:Vertex;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Vertex;
_local2 = aPlanes[NEAR];
_local3 = _arg1.splice(0);
_local4 = _local3[0];
_local5 = _local3[1];
_local6 = ((((_local2.a * _local4.wx) + (_local2.b * _local4.wy)) + (_local2.c * _local4.wz)) + _local2.d);
_local7 = ((((_local2.a * _local5.wx) + (_local2.b * _local5.wy)) + (_local2.c * _local5.wz)) + _local2.d);
_local8 = 0;
_local9 = pool.nextVertex;
if ((((_local6 < 0)) && ((_local7 >= 0)))){
_local8 = (_local6 / (_local6 - _local7));
_local9.wx = (_local4.wx + ((_local5.wx - _local4.wx) * _local8));
_local9.wy = (_local4.wy + ((_local5.wy - _local4.wy) * _local8));
_local9.wz = (_local4.wz + ((_local5.wz - _local4.wz) * _local8));
_arg1[_arg1.length] = _local9;
_arg1[_arg1.length] = _local5;
return (true);
};
if ((((_local7 < 0)) && ((_local6 >= 0)))){
_local8 = (_local6 / (_local6 - _local7));
_local9.wx = (_local4.wx + ((_local5.wx - _local4.wx) * _local8));
_local9.wy = (_local4.wy + ((_local5.wy - _local4.wy) * _local8));
_local9.wz = (_local4.wz + ((_local5.wz - _local4.wz) * _local8));
_arg1[_arg1.length] = _local4;
_arg1[_arg1.length] = _local9;
return (true);
};
if ((((_local7 < 0)) && ((_local6 < 0)))){
_arg1 = null;
return (true);
};
if ((((_local7 > 0)) && ((_local6 > 0)))){
_arg1[_arg1.length] = _local4;
_arg1[_arg1.length] = _local5;
return (false);
};
return (true);
}
}
}//package sandy.view
Section 75
//ViewPort (sandy.view.ViewPort)
package sandy.view {
import flash.geom.*;
public final class ViewPort {
public const offset:Point;
private var m_nH2:int;// = 0
private var m_nRatio:Number;// = 0
private var m_nW2:int;// = 0
private var m_nH:int;// = 0
public var hasChanged:Boolean;// = false
private var m_nW:int;// = 0
public function ViewPort(_arg1:Number, _arg2:Number){
offset = new Point();
hasChanged = false;
m_nW = 0;
m_nW2 = 0;
m_nH = 0;
m_nH2 = 0;
m_nRatio = 0;
super();
width = _arg1;
height = _arg2;
}
public function get width():int{
return (m_nW);
}
public function update():void{
m_nW2 = (m_nW >> 1);
m_nH2 = (m_nH >> 1);
m_nRatio = (m_nH) ? (m_nW / m_nH) : 0;
hasChanged = true;
}
public function get ratio():Number{
return (m_nRatio);
}
public function set height(_arg1:int):void{
m_nH = _arg1;
update();
}
public function set width(_arg1:int):void{
m_nW = _arg1;
update();
}
public function get height():int{
return (m_nH);
}
public function get height2():int{
return (m_nH2);
}
public function get width2():int{
return (m_nW2);
}
}
}//package sandy.view
Section 76
//agame_com_intro_animatie_79 (throwWalls_fla.agame_com_intro_animatie_79)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class agame_com_intro_animatie_79 extends MovieClip {
public function agame_com_intro_animatie_79(){
addFrameScript(88, frame89);
}
function frame89(){
stop();
}
}
}//package throwWalls_fla
Section 77
//branding_aligned_center_19 (throwWalls_fla.branding_aligned_center_19)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class branding_aligned_center_19 extends MovieClip {
public function branding_aligned_center_19(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndStop(language.branding_nr);
}
}
}//package throwWalls_fla
Section 78
//control_mc_5 (throwWalls_fla.control_mc_5)
package throwWalls_fla {
import flash.display.*;
import flash.text.*;
public dynamic class control_mc_5 extends MovieClip {
public var target_mc:MovieClip;
public var current_mc:MovieClip;
public var restart_btn:SimpleButton;
public var grid_mc:MovieClip;
public var target_txt:TextField;
}
}//package throwWalls_fla
Section 79
//credits_mc_16 (throwWalls_fla.credits_mc_16)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class credits_mc_16 extends MovieClip {
public function credits_mc_16(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package throwWalls_fla
Section 80
//game_com_cn_intro_animatie_85 (throwWalls_fla.game_com_cn_intro_animatie_85)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class game_com_cn_intro_animatie_85 extends MovieClip {
public function game_com_cn_intro_animatie_85(){
addFrameScript(88, frame89);
}
function frame89(){
stop();
}
}
}//package throwWalls_fla
Section 81
//GAME_OVER_MC_70 (throwWalls_fla.GAME_OVER_MC_70)
package throwWalls_fla {
import flash.display.*;
public dynamic class GAME_OVER_MC_70 extends MovieClip {
public var send_score_btn:SimpleButton;
public var main_menu_btn:SimpleButton;
public var button_gameover_moregames:SimpleButton;
public var logo_mainscreen:MovieClip;
}
}//package throwWalls_fla
Section 82
//gamesgames_intro_animatie_75 (throwWalls_fla.gamesgames_intro_animatie_75)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class gamesgames_intro_animatie_75 extends MovieClip {
public function gamesgames_intro_animatie_75(){
addFrameScript(89, frame90, 90, frame91);
}
function frame90(){
}
function frame91(){
stop();
}
}
}//package throwWalls_fla
Section 83
//girlsgogames_com_intro_animatie_82 (throwWalls_fla.girlsgogames_com_intro_animatie_82)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class girlsgogames_com_intro_animatie_82 extends MovieClip {
public function girlsgogames_com_intro_animatie_82(){
addFrameScript(88, frame89);
}
function frame89(){
stop();
}
}
}//package throwWalls_fla
Section 84
//intro_74 (throwWalls_fla.intro_74)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class intro_74 extends MovieClip {
public var hitarea:MovieClip;
public function intro_74(){
addFrameScript(0, frame1);
}
function frame1(){
if (language.portal == "family"){
gotoAndStop(1);
};
if (language.portal == "tweens"){
gotoAndStop(2);
};
if (language.portal == "girl"){
gotoAndStop(3);
};
if (language.portal == "game_com_cn"){
gotoAndStop(4);
};
}
}
}//package throwWalls_fla
Section 85
//intro_hitarea_78 (throwWalls_fla.intro_hitarea_78)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class intro_hitarea_78 extends MovieClip {
public var button_intro:SimpleButton;
public function intro_hitarea_78(){
addFrameScript(89, frame90);
}
function frame90(){
stop();
}
}
}//package throwWalls_fla
Section 86
//main_menu_mc_12 (throwWalls_fla.main_menu_mc_12)
package throwWalls_fla {
import flash.display.*;
public dynamic class main_menu_mc_12 extends MovieClip {
public var credit_btn:SimpleButton;
public var button_mainscreen_moregames:SimpleButton;
public var credits_mc:MovieClip;
public var logo_mainscreen:MovieClip;
public var highscore_btn:SimpleButton;
public var continue_btn:SimpleButton;
public var start_btn:SimpleButton;
}
}//package throwWalls_fla
Section 87
//MainTimeline (throwWalls_fla.MainTimeline)
package throwWalls_fla {
import flash.display.*;
import ascb.util.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import ascb.mochi.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class MainTimeline extends MovieClip {
public var preloader_txt:TextField;
public var intro:MovieClip;
public var request:URLRequest;
public var preloader_line_mc:MovieClip;
public function MainTimeline(){
addFrameScript(0, frame1, 2, frame3);
}
public function loading(_arg1:Event){
var _local2:*;
var _local3:*;
_local2 = stage.loaderInfo.bytesTotal;
_local3 = stage.loaderInfo.bytesLoaded;
preloader_txt.text = (Math.round(((_local3 / _local2) * 100)).toString() + "%");
preloader_line_mc.scaleX = (_local3 / _local2);
if (_local3 >= _local2){
removeEventListener(Event.ENTER_FRAME, loading);
gotoAndPlay(3);
};
}
public function onCLick1(_arg1:Event){
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=logo_intro"));
};
navigateToURL(request, "_blank");
}
public function onCLick2(_arg1:Event){
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_mainscreen_moregames"));
};
navigateToURL(request, "_blank");
}
public function onCLick4(_arg1:Event){
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_highscore_3000games"));
};
navigateToURL(request, "_blank");
}
function frame3(){
stop();
localConnection = new LocalConnection();
language.Language = 1;
intro.hitarea.button_intro.addEventListener(MouseEvent.CLICK, onCLick1);
stop();
}
function frame1(){
stop();
MochiBot.track(this, "cebe599f");
stage.showDefaultContextMenu = false;
if (!URLUtils.checkDomain(stage.loaderInfo.url, "agame.com")){
MochiAd.showPreGameAd({clip:root, id:"1692a2b151871b72", res:"640x480"});
} else {
addEventListener(Event.ENTER_FRAME, loading);
preloader_line_mc.scaleX = 0;
};
}
public function onCLick3(_arg1:Event){
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_gameover_moregames"));
};
navigateToURL(request, "_blank");
}
}
}//package throwWalls_fla
Section 88
//text1_18 (throwWalls_fla.text1_18)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class text1_18 extends MovieClip {
public function text1_18(){
addFrameScript(0, frame1);
}
function frame1(){
gotoAndStop(language.language_nr);
}
}
}//package throwWalls_fla
Section 89
//Timeline_2 (throwWalls_fla.Timeline_2)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class Timeline_2 extends MovieClip {
public function Timeline_2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package throwWalls_fla
Section 90
//topControl_mc_8 (throwWalls_fla.topControl_mc_8)
package throwWalls_fla {
import flash.display.*;
import flash.text.*;
public dynamic class topControl_mc_8 extends MovieClip {
public var sound_btn:SimpleButton;
public var lives_txt:TextField;
public var scores_txt:TextField;
public var sound_txt:TextField;
public var quit_btn:SimpleButton;
public var pause_btn:SimpleButton;
}
}//package throwWalls_fla
Section 91
//tutorial_mc_68 (throwWalls_fla.tutorial_mc_68)
package throwWalls_fla {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.ui.*;
import flash.accessibility.*;
import flash.errors.*;
public dynamic class tutorial_mc_68 extends MovieClip {
public var hidetutorial_btn:SimpleButton;
public function tutorial_mc_68(){
addFrameScript(0, frame1, 229, frame230);
}
function frame1(){
stop();
}
function frame230(){
stop();
}
}
}//package throwWalls_fla
Section 92
//Bg (Bg)
package {
import flash.display.*;
public class Bg extends MovieClip {
private static var _instanse:Bg;
public function Bg(){
_instanse = this;
}
public static function get instanse():Bg{
return (_instanse);
}
}
}//package
Section 93
//bgmusic (bgmusic)
package {
import flash.media.*;
public dynamic class bgmusic extends Sound {
}
}//package
Section 94
//CollisionBox (CollisionBox)
package {
import sandy.core.data.*;
import flash.geom.*;
import sandy.primitive.*;
public class CollisionBox extends Box {
public var speedX:Number;// = 0
public var speedZ:Number;// = 0
public var speedY:Number;// = 0
public var zWidth:Number;
public var xWidth:Number;
public var yWidth:Number;
public function CollisionBox(_arg1:String=null, _arg2:Number=6, _arg3:Number=6, _arg4:Number=6, _arg5:String="tri", _arg6:Number=1){
speedX = 0;
speedZ = 0;
speedY = 0;
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6);
xWidth = _arg2;
yWidth = _arg3;
zWidth = _arg4;
stop();
}
public function stop():void{
speedX = 0;
speedZ = 0;
speedY = 0;
}
public function getProjection(_arg1:Point3D):Rectangle{
var _local2:Rectangle;
var _local3:Number;
var _local4:Number;
_local2 = new Rectangle();
if ((((((_arg1.x == 0)) && ((_arg1.y == 0)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 0)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(-(y), -(x), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 0)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(-(x), y, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 0)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(y, x, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 90)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(-(z), -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 90)))) && ((_arg1.z == 2)))){
_local2 = new Rectangle(-(z), x, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 90)))) && ((((_arg1.z == 357)) || ((_arg1.z == 3)))))){
_local2 = new Rectangle(-(z), y, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 90)))) && ((_arg1.z == 358)))){
_local2 = new Rectangle(-(z), -(x), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 180)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 180)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 180)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 180)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 270)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(z, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 270)))) && ((_arg1.z == 2)))){
_local2 = new Rectangle(z, x, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 270)))) && ((((_arg1.z == 357)) || ((_arg1.z == 3)))))){
_local2 = new Rectangle(z, y, zWidth, yWidth);
};
if ((((((_arg1.x == 0)) && ((_arg1.y == 270)))) && ((_arg1.z == 358)))){
_local2 = new Rectangle(z, -(x), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 0)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, z, zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 0)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(-(y), z, zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 0)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(-(x), z, zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 0)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(y, z, zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 90)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 90)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 90)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 90)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 180)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 180)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 180)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 180)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 270)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 270)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 270)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 90)) && ((_arg1.y == 270)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 0)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, y, zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 0)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(-(y), x, zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 0)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(-(x), -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 0)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(y, -(x), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 90)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 90)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 90)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 90)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 180)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 180)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 180)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 180)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 270)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 270)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 270)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 180)) && ((_arg1.y == 270)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 0)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(z), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 0)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(-(y), -(z), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 0)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(-(x), -(z), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 0)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(y, -(z), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 90)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 90)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 90)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 90)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 180)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 180)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 180)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 180)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 270)))) && ((_arg1.z == 0)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 270)))) && ((_arg1.z == 90)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 270)))) && ((_arg1.z == 180)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
if ((((((_arg1.x == 270)) && ((_arg1.y == 270)))) && ((_arg1.z == 270)))){
_local2 = new Rectangle(x, -(y), zWidth, yWidth);
};
_local3 = x;
_local4 = -(y);
if (_arg1.x == 180){
_local3 = (_local3 * -1);
};
if ((((_arg1.x == 270)) || ((_arg1.x == 90)))){
_local4 = ((_arg1.y == 180)) ? y : -(y);
};
if ((((_arg1.y == 270)) || ((_arg1.y == 90)))){
_local3 = ((_arg1.y == 90)) ? -(z) : z;
};
return (_local2);
}
public function collisionVsBox(_arg1:CollisionBox):Boolean{
var _local2:Rectangle;
var _local3:Rectangle;
if (((!((speedZ == 0))) && ((y == _arg1.y)))){
_local2 = new Rectangle((x - (xWidth / 2)), ((z + speedZ) - (zWidth / 2)), xWidth, zWidth);
_local3 = new Rectangle((_arg1.x - (_arg1.xWidth / 2)), (_arg1.z - (_arg1.zWidth / 2)), _arg1.xWidth, _arg1.zWidth);
return (_local3.intersects(_local2));
};
if (((!((speedX == 0))) && ((y == _arg1.y)))){
_local2 = new Rectangle(((x + speedX) - (xWidth / 2)), (z - (zWidth / 2)), xWidth, zWidth);
_local3 = new Rectangle((_arg1.x - (_arg1.xWidth / 2)), (_arg1.z - (_arg1.zWidth / 2)), _arg1.xWidth, _arg1.zWidth);
return (_local2.intersects(_local3));
};
if (((!((speedY == 0))) && ((z == _arg1.z)))){
_local2 = new Rectangle((x - (xWidth / 2)), ((y + speedY) - (yWidth / 2)), xWidth, yWidth);
_local3 = new Rectangle((_arg1.x - (_arg1.xWidth / 2)), (_arg1.y - (_arg1.yWidth / 2)), _arg1.xWidth, _arg1.yWidth);
return (_local2.intersects(_local3));
};
return (false);
}
public function move():void{
y = (y + speedY);
z = (z + speedZ);
x = (x + speedX);
}
}
}//package
Section 95
//ContinueGame (ContinueGame)
package {
import flash.display.*;
public class ContinueGame extends SimpleButton {
private static var _instanse:ContinueGame;
public function ContinueGame(_arg1:DisplayObject=null, _arg2:DisplayObject=null, _arg3:DisplayObject=null, _arg4:DisplayObject=null){
super(_arg1, _arg2, _arg3, _arg4);
_instanse = this;
}
public static function get instanse():ContinueGame{
return (_instanse);
}
}
}//package
Section 96
//flip (flip)
package {
import flash.media.*;
public dynamic class flip extends Sound {
}
}//package
Section 97
//gameover (gameover)
package {
import flash.media.*;
public dynamic class gameover extends Sound {
}
}//package
Section 98
//hit (hit)
package {
import flash.media.*;
public dynamic class hit extends Sound {
}
}//package
Section 99
//language (language)
package {
import flash.net.*;
public class language {
public static var localConnection = new LocalConnection();
public static var _languageNum:uint = 0;
public static var _languageBox:Array = new Array();
public static var SpillGroupUrl:Array = new Array();
public static var gamename = "through_walls";
public static function get url2():String{
var _local1:int;
_local1 = 0;
while (_local1 < SpillGroupUrl.length) {
if (localConnection.domain == SpillGroupUrl[_local1]){
return (_languageBox[_languageNum].url2);
};
_local1++;
};
return (_languageBox[_languageNum].url2);
}
public static function get language_nr():String{
return (_languageBox[_languageNum].language_nr);
}
public static function get portal():String{
return (_languageBox[_languageNum].portal);
}
public static function set Language(_arg1:Object):void{
var returnDomain:*;
var hostingdomain:String;
var myList:String;
var myArray:Array;
var language1:*;
var language2:*;
var language3:*;
var language4:*;
var language5:*;
var language6:*;
var language7:*;
var language8:*;
var language9:*;
var language10:*;
var language11:*;
var language12:*;
var language13:*;
var language14:*;
var language15:*;
var language16:*;
var language17:*;
var language18:*;
var domainextention:int;
var domainname:int;
var languageVersion = _arg1;
returnDomain = function (_arg1:String):String{
var _local2:String;
var _local3:uint;
_local2 = new String();
_local3 = 7;
while (_local3 < _arg1.length) {
if (_arg1.charAt(_local3) == "/"){
break;
};
_local2 = (_local2 + _arg1.charAt(_local3));
_local3++;
};
return (_local2);
};
hostingdomain = "";
myList = localConnection.domain;
myArray = myList.split(".");
if (myArray.length <= 3){
domainextention = (myArray.length - 1);
domainname = (myArray.length - 2);
hostingdomain = ((myArray[domainname] + ".") + myArray[domainextention]);
} else {
hostingdomain = localConnection.domain;
};
language1 = new languageItem();
language1.url1 = ((("http://www.gamesgames.com/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language1.url2 = ("http://www.gamesgames.com/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language1.language_nr = 1;
language1.branding_nr = 17;
language1.portal = "family";
_languageBox.push(language1);
language2 = new languageItem();
language2.url1 = "http://www.game.com.cn/moregames/";
language2.url2 = "http://www.game.com.cn/moregames/";
language2.language_nr = 2;
language2.branding_nr = 2;
language2.portal = "game_com_cn";
_languageBox.push(language2);
language3 = new languageItem();
language3.url1 = ((("http://www.spelletjes.nl/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language3.url2 = ("http://www.spelletjes.nl/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language3.language_nr = 3;
language3.branding_nr = 18;
language3.portal = "family";
_languageBox.push(language3);
language4 = new languageItem();
language4.url1 = ((("http://www.jeux.fr/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language4.url2 = ("http://www.jeux.fr/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language4.language_nr = 4;
language4.branding_nr = 19;
language4.portal = "family";
_languageBox.push(language4);
language5 = new languageItem();
language5.url1 = ((("http://www.jetztspielen.de/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language5.url2 = ("http://www.jetztspielen.de/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language5.language_nr = 5;
language5.branding_nr = 20;
language5.portal = "family";
_languageBox.push(language5);
language6 = new languageItem();
language6.url1 = ((("http://www.gry.pl/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language6.url2 = ("http://www.gry.pl/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language6.language_nr = 6;
language6.branding_nr = 21;
language6.portal = "family";
_languageBox.push(language6);
language7 = new languageItem();
language7.url1 = ((("http://www.spela.se/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language7.url2 = ("http://www.spela.se/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language7.language_nr = 7;
language7.branding_nr = 22;
language7.portal = "family";
_languageBox.push(language7);
language8 = new languageItem();
language8.url1 = ((("http://www.gioco.it/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language8.url2 = ("http://www.gioco.it/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language8.language_nr = 8;
language8.branding_nr = 23;
language8.portal = "family";
_languageBox.push(language8);
language9 = new languageItem();
language9.url1 = ((("http://www.juegos.com/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language9.url2 = ("http://www.juegos.com/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language9.language_nr = 9;
language9.branding_nr = 24;
language9.portal = "family";
_languageBox.push(language9);
language10 = new languageItem();
language10.url1 = ((("http://www.ojogos.com.br/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language10.url2 = ("http://www.ojogos.com.br/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language10.language_nr = 11;
language10.branding_nr = 25;
language10.portal = "family";
_languageBox.push(language10);
language11 = new languageItem();
language11.url1 = ((("http://www.games.co.id/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language11.url2 = ("http://www.games.co.id/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language11.language_nr = 13;
language11.branding_nr = 13;
language11.portal = "tweens";
_languageBox.push(language11);
language12 = new languageItem();
language12.url1 = ((("http://www.ourgames.ru/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language12.url2 = ("http://www.ourgames.ru/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language12.language_nr = 12;
language12.branding_nr = 26;
language12.portal = "family";
_languageBox.push(language12);
language13 = new languageItem();
language13.url1 = ((("http://www.games.co.uk/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language13.url2 = ("http://www.games.co.uk/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language13.language_nr = 16;
language13.branding_nr = 27;
language13.portal = "family";
_languageBox.push(language13);
language14 = new languageItem();
language14.url1 = ((("http://www.game.co.in/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language14.url2 = ("http://www.game.co.in/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language14.language_nr = 16;
language14.branding_nr = 12;
language14.portal = "tweens";
_languageBox.push(language14);
language15 = new languageItem();
language15.url1 = ((("http://www.game.com.my/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language15.url2 = ("http://www.game.com.my/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language15.language_nr = 15;
language15.branding_nr = 16;
language15.portal = "tweens";
_languageBox.push(language15);
language16 = new languageItem();
language16.url1 = ((("http://www.ojogos.pt/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language16.url2 = ("http://www.ojogos.pt/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language16.language_nr = 10;
language16.branding_nr = 42;
language16.portal = "family";
_languageBox.push(language16);
language17 = new languageItem();
language17.url1 = ((("http://www.egames.jp/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language17.url2 = ("http://www.egames.jp/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language17.language_nr = 17;
language17.branding_nr = 44;
language17.portal = "tweens";
_languageBox.push(language17);
language18 = new languageItem();
language18.url1 = ((("http://www.asoyun.com/moregames/?utm_medium=brandedgames_external&utm_campaign=" + gamename) + "&utm_source=") + hostingdomain);
language18.url2 = ("http://www.asoyun.com/moregames/?utm_medium=brandedgames_internal&utm_campaign=" + gamename);
language18.language_nr = 14;
language18.branding_nr = 15;
language18.portal = "tweens";
_languageBox.push(language18);
SpillGroupUrl.push("localhost");
SpillGroupUrl.push("www8.agame.com");
if ((((((languageVersion is Number)) || ((languageVersion is uint)))) || ((languageVersion is int)))){
_languageNum = (Number(languageVersion) - 1);
};
}
public static function get url1():String{
var _local1:int;
_local1 = 0;
while (_local1 < SpillGroupUrl.length) {
if (localConnection.domain == SpillGroupUrl[_local1]){
return (_languageBox[_languageNum].url2);
};
_local1++;
};
return (_languageBox[_languageNum].url1);
}
public static function get branding_nr():String{
return (_languageBox[_languageNum].branding_nr);
}
}
}//package
class languageItem {
public var url1:String;
public var url2:String;
public var branding_nr:int;
public var language_nr:int;
public var portal:String;
private function languageItem(){
}
}
Section 100
//Levels (Levels)
package {
public class Levels {
public var timer:Number;// = 10000
public var wallsCount:Number;// = 1
public function Levels(){
wallsCount = 1;
timer = 10000;
super();
}
public function getLevel(_arg1:Number):Array{
timer = 10000;
switch (_arg1){
case 1:
timer = 50000;
wallsCount = 1;
return ([[0, 0, 0], [1, 0, 0], [-1, 0, 0]]);
case 2:
wallsCount = 1;
return ([[0, 0, 0], [-1, 0, 0], [0, 0, 1]]);
case 3:
wallsCount = 1;
return ([[0, 0, 0], [1, 1, 0], [-1, -1, 0], [-1, 1, 0], [1, -1, 0], [0, 1, -1]]);
case 4:
wallsCount = 2;
return ([[0, -1, 0], [-1, 1, 0], [-1, -1, 1], [0, -1, -1]]);
case 5:
wallsCount = 2;
return ([[0, 1, 0], [1, 0, 1], [1, 0, -1], [1, -1, 0]]);
case 6:
wallsCount = 2;
return ([[1, 0, 0], [-1, 0, -1], [0, -1, -1], [0, -1, 0]]);
case 7:
wallsCount = 2;
return ([[0, -1, 0], [1, 0, 1], [-1, 0, 1], [0, 1, -1], [0, 0, 1]]);
case 8:
wallsCount = 3;
return ([[-1, 1, 0], [1, 0, -1], [1, 1, 1], [-1, 0, 0], [0, -1, -1], [1, -1, 1]]);
case 9:
wallsCount = 3;
return ([[-1, -1, 1], [1, 1, 1], [-1, -1, -1], [1, 0, 0], [-1, 0, -1], [0, 1, 0]]);
case 10:
wallsCount = 3;
return ([[-1, -1, 0], [-1, 0, 0], [-1, 1, 0], [1, 1, 0], [1, -1, 0], [-1, 0, 1], [1, -1, -1]]);
case 11:
wallsCount = 3;
return ([[0, 0, -1], [1, 0, 0], [0, 0, 1], [0, 1, 1], [-1, 1, 0], [1, 1, 0], [1, -1, 1]]);
case 12:
wallsCount = 3;
return ([[0, -1, 2], [1, -1, 2], [0, 0, 0], [-1, 0, 1], [-1, -1, -1]]);
case 13:
wallsCount = 4;
return ([[0, 1, -1], [-1, -1, 0], [-1, 0, 0], [1, 0, -1], [2, 0, -1], [-1, 2, 1]]);
case 14:
wallsCount = 4;
return ([[1, 0, 1], [0, -1, 0], [-1, 2, 0], [-1, 2, -1], [2, 2, -1], [1, 2, 0]]);
case 15:
wallsCount = 4;
return ([[0, 0, 1], [2, 2, 1], [0, 2, 0], [-1, 1, 0], [-1, 2, 1], [-1, 1, 2]]);
case 16:
wallsCount = 4;
return ([[2, -1, 2], [2, 0, 0], [2, 2, 0], [-1, -1, 1], [1, 1, 0], [1, 1, -1], [2, 1, 0]]);
case 17:
wallsCount = 4;
return ([[1, 1, 0], [1, 1, -1], [1, 1, 2], [1, 2, 2], [0, -1, -1], [0, 0, -1], [-1, -1, -1]]);
case 18:
wallsCount = 5;
return ([[0, 0, 0], [2, 0, 2], [2, 0, 1], [1, 2, -1], [-1, 0, 0], [1, 1, 1], [0, -1, 1]]);
case 19:
wallsCount = 5;
return ([[1, -1, 2], [1, 1, 2], [0, -1, 0], [1, 2, -1], [0, 2, 0], [2, -1, 0], [2, 0, -1]]);
case 20:
wallsCount = 5;
return ([[1, 0, 1], [1, -1, -2], [2, -1, 2], [0, -1, -2], [-2, 1, 0]]);
case 21:
wallsCount = 5;
return ([[-1, -1, 1], [2, 1, 1], [0, -1, 0], [0, 2, 1], [1, -1, 1], [-1, 1, -1]]);
case 22:
wallsCount = 6;
return ([[-1, 1, 2], [-2, -1, 1], [-1, 2, 0], [-2, -2, -1], [1, 2, -1], [-2, 0, -1]]);
case 23:
wallsCount = 6;
return ([[0, 2, 2], [-2, -1, 1], [2, -2, -1], [-1, 0, -2], [1, 2, 0], [1, 0, -1]]);
case 24:
wallsCount = 6;
return ([[2, 2, 1], [-1, -2, -1], [1, 0, -1], [0, -2, -2], [0, 2, -1], [2, 2, 0]]);
case 25:
wallsCount = 6;
return ([[1, 0, -2], [1, -1, -2], [-1, 0, 1], [-2, 0, 1], [0, 0, -1], [0, 0, -2]]);
case 26:
wallsCount = 7;
return ([[2, 0, 1], [-2, -2, 0], [-2, 0, 2], [1, 1, 2], [-2, -1, -2], [-2, -1, 1], [-1, 2, -1]]);
case 27:
wallsCount = 7;
return ([[2, -1, -2], [-1, 1, -1], [2, 2, 2], [0, 1, -2], [2, -1, 1], [0, 0, -1], [-1, -1, -1]]);
case 28:
wallsCount = 7;
return ([[-2, 0, 0], [0, 1, 1], [-1, 0, 2], [1, 2, -2], [2, 0, 1], [2, 2, 1], [0, -2, 0]]);
case 29:
wallsCount = 7;
return ([[-2, 0, -1], [-1, -1, -1], [-1, -2, -1], [-2, -2, 2], [-2, -1, -2], [2, 1, 1], [-1, -2, 1]]);
case 30:
wallsCount = 8;
return ([[1, 0, 1], [-2, 0, 0], [1, 0, 0], [-2, 0, 1], [0, 2, 0], [-2, -1, -1], [1, 1, 1]]);
case 31:
wallsCount = 8;
return ([[-1, 0, 2], [-1, 1, 1], [-2, 0, 0], [0, -2, 0], [-1, -2, 0], [-1, -2, 2], [-1, 0, 1]]);
case 32:
wallsCount = 8;
return ([[0, -2, -1], [0, 0, 1], [1, -1, -2], [-1, 2, 2], [-1, 2, 0], [2, 1, -2], [-2, 2, -2]]);
case 33:
wallsCount = 8;
return ([[0, 2, 0], [-1, 2, 2], [1, 2, -2], [0, 2, -2], [-2, 2, 0], [2, 2, -1], [0, 0, -1]]);
case 34:
wallsCount = 8;
return ([[2, 1, -1], [1, 0, 0], [-1, 1, -1], [1, 0, 1], [2, 1, 0], [-1, 0, -2], [-2, 0, 1]]);
case 35:
wallsCount = 9;
return ([[-1, -2, -2], [-2, -1, -2], [0, -2, -1], [1, 2, -1], [2, 2, -2], [1, -1, -2], [0, -1, -2]]);
case 36:
wallsCount = 9;
return ([[1, 0, 1], [1, 2, 1], [0, 0, -1], [-2, 1, 1], [2, 2, -2], [-2, 2, 2], [-2, 0, 0], [0, -2, 2]]);
case 37:
wallsCount = 9;
return ([[1, 0, -2], [0, 0, 2], [0, -2, -1], [-1, -1, -2], [-2, 1, 0], [0, 0, -2], [-2, -1, -2], [0, -1, 0]]);
case 38:
wallsCount = 9;
return ([[1, 0, 1], [2, 1, -2], [1, 1, -1], [0, -2, -1], [0, -1, 1], [1, -1, -1], [-2, 1, -2], [-1, 1, -1]]);
case 39:
wallsCount = 10;
return ([[1, 1, -1], [0, -2, 1], [-2, -1, 2], [-1, 2, 2], [2, 1, -1], [-2, 1, 1], [-2, -2, -2], [1, -1, 0]]);
case 40:
wallsCount = 1;
return ([[0, -1, 0], [-2, 1, 2], [2, 2, -2], [0, 2, 1], [2, -2, -2], [-2, -2, 0], [0, 1, 0], [0, 0, 0]]);
};
return ([]);
}
}
}//package
Section 101
//lose (lose)
package {
import flash.media.*;
public dynamic class lose extends Sound {
}
}//package
Section 102
//MochiAd (MochiAd)
package {
import flash.display.*;
import flash.events.*;
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 DEFAULTS:Object;
var clip:Object;
var ad_timeout:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var sendHostProgress:Boolean;
var options = _arg1;
DEFAULTS = {ad_timeout:2000, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{
}, ad_finished:function ():void{
}, ad_loaded:function (_arg1:Number, _arg2:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.rpc = function (_arg1:Number, _arg2:Object):void{
MochiAd.rpc(clip, _arg1, _arg2);
};
sendHostProgress = false;
mc.regContLC = function (_arg1:String):void{
mc._containerLCName = _arg1;
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Number;
var _local3:Boolean;
var _local4:Number;
if (!this.parent){
delete this.onEnterFrame;
return;
};
_local1 = this.parent._mochiad_ctr;
_local2 = (getTimer() - this.started);
_local3 = false;
if (!chk.showing){
_local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (_local4 > 0){
chk.showing = true;
_local3 = true;
chk.started = getTimer();
} else {
if (_local2 > chk.ad_timeout){
options.ad_failed();
_local3 = true;
};
};
};
if (this.root == null){
_local3 = true;
};
if (_local3){
delete this.onEnterFrame;
};
};
doOnEnterFrame(chk);
}
public static function _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function _allowDomains(_arg1:String):String{
var _local2:String;
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain("*");
Security.allowDomain(_local2);
Security.allowInsecureDomain("*");
Security.allowInsecureDomain(_local2);
return (_local2);
}
public static function unload(_arg1:Object):Boolean{
if (((_arg1.clip) && (_arg1.clip._mochiad))){
_arg1 = _arg1.clip;
};
if (_arg1.origFrameRate != undefined){
_arg1.stage.frameRate = _arg1.origFrameRate;
};
if (!_arg1._mochiad){
return (false);
};
if (_arg1._mochiad._containerLCName != undefined){
_arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "notify", {id:"unload"});
};
if (_arg1._mochiad.onUnload){
_arg1._mochiad.onUnload();
};
delete _arg1._mochiad_loaded;
delete _arg1._mochiad;
return (true);
}
public static function showInterLevelAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (_arg1:Number, _arg2:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var _local1:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.adjustProgress = function (_arg1:Number):void{
var _local2:Object;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.showing = true;
_local2.started = getTimer();
_local2.ad_msec = (_arg1 - 250);
};
mc.rpc = function (_arg1:Number, _arg2:Object):void{
MochiAd.rpc(clip, _arg1, _arg2);
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Number;
var _local3:Boolean;
var _local4:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
_local1 = this.parent._mochiad_ctr;
_local2 = (getTimer() - this.started);
_local3 = false;
if (!chk.showing){
_local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (_local4 > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if (_local2 > chk.ad_timeout){
options.ad_failed();
_local3 = true;
};
};
};
if (_local2 > chk.ad_msec){
_local3 = true;
};
if (_local3){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function _parseOptions(_arg1:Object, _arg2:Object):Object{
var _local3:Object;
var _local4:String;
var _local5:Array;
var _local6:Number;
var _local7:Array;
_local3 = {};
for (_local4 in _arg2) {
_local3[_local4] = _arg2[_local4];
};
if (_arg1){
for (_local4 in _arg1) {
_local3[_local4] = _arg1[_local4];
};
};
if (_local3.clip == undefined){
throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite."));
};
_arg1 = _local3.clip.loaderInfo.parameters.mochiad_options;
if (_arg1){
_local5 = _arg1.split("&");
_local6 = 0;
while (_local6 < _local5.length) {
_local7 = _local5[_local6].split("=");
_local3[unescape(_local7[0])] = unescape(_local7[1]);
_local6++;
};
};
if (_local3.id == "test"){
trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!");
};
return (_local3);
}
public static function _cleanup(_arg1:Object):void{
var idx:Number;
var k:String;
var lc:LocalConnection;
var f:Function;
var mc = _arg1;
if (("lc" in mc)){
lc = mc.lc;
f = function ():void{
try {
lc.client = null;
lc.close();
} catch(e:Error) {
};
};
setTimeout(f, 0);
};
idx = DisplayObjectContainer(mc).numChildren;
while (idx > 0) {
idx = (idx - 1);
DisplayObjectContainer(mc).removeChildAt(idx);
};
for (k in mc) {
delete mc[k];
};
}
public static function load(_arg1:Object):MovieClip{
var DEFAULTS:Object;
var clip:Object;
var depth:Number;
var mc:MovieClip;
var wh:Array;
var lv:URLVariables;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var g:Function;
var req:URLRequest;
var v:Object;
var options = _arg1;
DEFAULTS = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
if (!MochiAd._isNetworkAvailable()){
return (null);
};
try {
if (clip._mochiad_loaded){
return (null);
};
} catch(e:Error) {
throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
depth = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, "_mochiad", depth);
wh = MochiAd._getRes(options, clip);
options.res = ((wh[0] + "x") + wh[1]);
options.server = (options.server + options.id);
delete options.id;
clip._mochiad_loaded = true;
if (clip.loaderInfo.loaderURL.indexOf("http") == 0){
options.as3_swf = clip.loaderInfo.loaderURL;
};
lv = new URLVariables();
for (k in options) {
v = options[k];
if (!(v is Function)){
lv[k] = v;
};
};
server = lv.server;
delete lv.server;
hostname = _allowDomains(server);
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.lc = lc;
mc.lcName = name;
lv.lc = name;
lv.st = getTimer();
loader = new Loader();
g = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
MochiAd.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime()));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.load(req);
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function runMethod(_arg1:Object, _arg2:String, _arg3:Array):Object{
var _local4:Array;
var _local5:Number;
_local4 = _arg2.split(".");
_local5 = 0;
while (_local5 < (_local4.length - 1)) {
if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){
return (undefined);
};
_arg1 = _arg1[_local4[_local5]];
_local5++;
};
if (typeof(_arg1[_local4[_local5]]) == "function"){
return (_arg1[_local4[_local5]].apply(_arg1, _arg3));
};
return (undefined);
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{
var _local4:MovieClip;
_local4 = new MovieClip();
if (((false) && (_arg3))){
_arg1.addChildAt(_local4, _arg3);
} else {
_arg1.addChild(_local4);
};
_arg1[_arg2] = _local4;
_local4["_name"] = _arg2;
return (_local4);
}
public static function _getRes(_arg1:Object, _arg2:Object):Array{
var _local3:Object;
var _local4:Number;
var _local5:Number;
var _local6:Array;
_local3 = _arg2.getBounds(_arg2.root);
_local4 = 0;
_local5 = 0;
if (typeof(_arg1.res) != "undefined"){
_local6 = _arg1.res.split("x");
_local4 = parseFloat(_local6[0]);
_local5 = parseFloat(_local6[1]);
} else {
_local4 = (_local3.xMax - _local3.xMin);
_local5 = (_local3.yMax - _local3.yMin);
};
if ((((_local4 == 0)) || ((_local5 == 0)))){
_local4 = _arg2.stage.stageWidth;
_local5 = _arg2.stage.stageHeight;
};
return ([_local4, _local5]);
}
public static function adShowing(_arg1:Object):void{
_arg1.origFrameRate = _arg1.stage.frameRate;
_arg1.stage.frameRate = 30;
}
public static function getValue(_arg1:Object, _arg2:String):Object{
var _local3:Array;
var _local4:Number;
_local3 = _arg2.split(".");
_local4 = 0;
while (_local4 < (_local3.length - 1)) {
if ((((_arg1[_local3[_local4]] == undefined)) || ((_arg1[_local3[_local4]] == null)))){
return (undefined);
};
_arg1 = _arg1[_local3[_local4]];
_local4++;
};
return (_arg1[_local3[_local4]]);
}
public static function rpc(_arg1:Object, _arg2:Number, _arg3:Object):void{
var _local4:Object;
var _local5:Object;
switch (_arg3.id){
case "setValue":
MochiAd.setValue(_arg1, _arg3.objectName, _arg3.value);
break;
case "getValue":
_local4 = MochiAd.getValue(_arg1, _arg3.objectName);
_arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local4);
break;
case "runMethod":
_local5 = MochiAd.runMethod(_arg1, _arg3.method, _arg3.args);
_arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local5);
break;
default:
trace(("[mochiads rpc] unknown rpc id: " + _arg3.id));
};
}
public static function setValue(_arg1:Object, _arg2:String, _arg3:Object):void{
var _local4:Array;
var _local5:Number;
_local4 = _arg2.split(".");
_local5 = 0;
while (_local5 < (_local4.length - 1)) {
if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){
return;
};
_arg1 = _arg1[_local4[_local5]];
_local5++;
};
_arg1[_local4[_local5]] = _arg3;
}
public static function showPreGameAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var bar:MovieClip;
var bar_color:Number;
var bar_background:Number;
var bar_outline:Number;
var backing_mc:MovieClip;
var backing:Object;
var inside_mc:MovieClip;
var inside:Object;
var outline_mc:MovieClip;
var outline:Object;
var complete:Boolean;
var unloaded:Boolean;
var f:Function;
var sendHostProgress:Boolean;
var fn:Function;
var r:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (_arg1:Number, _arg2:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}, ad_progress:function (_arg1:Number):void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){
options.ad_started();
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
return;
};
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
var fn:Function;
MochiAd._cleanup(mc);
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.x = (w * -0.5);
chk.y = (h * -0.5);
bar = createEmptyMovieClip(chk, "_mochiad_bar", 4);
if (options.no_progress_bar){
bar.visible = false;
delete options.no_progress_bar;
} else {
bar.x = 10;
bar.y = (h - 20);
};
bar_color = options.color;
delete options.color;
bar_background = options.background;
delete options.background;
bar_outline = options.outline;
delete options.outline;
backing_mc = createEmptyMovieClip(bar, "_outline", 1);
backing = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo((w - 20), 0);
backing.lineTo((w - 20), 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
inside_mc = createEmptyMovieClip(bar, "_inside", 2);
inside = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo((w - 20), 0);
inside.lineTo((w - 20), 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
outline_mc = createEmptyMovieClip(bar, "_outline", 3);
outline = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo((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;
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
complete = false;
unloaded = false;
f = 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;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.showing = true;
_local2.started = getTimer();
_local2.ad_msec = _arg1;
};
mc.rpc = function (_arg1:Number, _arg2:Object):void{
MochiAd.rpc(clip, _arg1, _arg2);
};
mc.rpcTestFn = function (_arg1:String):Object{
trace(("[MOCHIAD rpcTestFn] " + _arg1));
return (_arg1);
};
mc.regContLC = function (_arg1:String):void{
mc._containerLCName = _arg1;
};
sendHostProgress = false;
mc.sendHostLoadProgress = function (_arg1:String):void{
sendHostProgress = true;
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Object;
var _local3:Number;
var _local4:Boolean;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Object;
var _local10:Number;
var _local11:Number;
if (((!(this.parent)) || (!(this.parent.parent)))){
delete this["onEnterFrame"];
return;
};
_local1 = this.parent.parent.root;
_local2 = this.parent._mochiad_ctr;
_local3 = (getTimer() - this.started);
_local4 = false;
_local5 = _local1.loaderInfo.bytesTotal;
_local6 = _local1.loaderInfo.bytesLoaded;
if (complete){
_local6 = Math.max(1, _local6);
_local5 = _local6;
};
_local7 = ((100 * _local6) / _local5);
_local8 = ((100 * _local3) / chk.ad_msec);
_local9 = this._mochiad_bar._inside;
_local10 = 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 f:Function;
var mc = _arg1;
f = function (_arg1:Object):void{
if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){
mc.onEnterFrame();
} else {
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
};
mc.addEventListener(Event.ENTER_FRAME, f);
}
}
}//package
Section 103
//move (move)
package {
import flash.media.*;
public dynamic class move extends Sound {
}
}//package
Section 104
//SoundController (SoundController)
package {
import flash.media.*;
import flash.utils.*;
public class SoundController {
public var _musicVolume:Number;// = 50
private var channelBgMisic:SoundChannel;
private var _volume:Number;// = 100
public static var __instance:SoundController;
public function SoundController(_arg1:SingletonEnforcer){
_volume = 100;
_musicVolume = 50;
super();
}
public function playBackground(_arg1:String):void{
var v:Number;
var soundClass:Class;
var soundInstance:Sound;
var transform:SoundTransform;
var soundName = _arg1;
v = musicVolume;
try {
soundClass = (getDefinitionByName(soundName) as Class);
soundInstance = new (soundClass);
channelBgMisic = soundInstance.play(0, 9999);
transform = channelBgMisic.soundTransform;
transform.volume = (v / 100);
channelBgMisic.soundTransform = transform;
} catch(e:Error) {
};
}
public function stopBackground():void{
try {
channelBgMisic.stop();
} catch(e:Error) {
};
}
public function set volume(_arg1:Number):void{
_volume = _arg1;
}
public function get volume():Number{
return (_volume);
}
public function playSound(_arg1:String):void{
var v:Number;
var soundClass:Class;
var soundInstance:Sound;
var channel:SoundChannel;
var transform:SoundTransform;
var soundName = _arg1;
v = volume;
try {
soundClass = (getDefinitionByName(soundName) as Class);
soundInstance = new (soundClass);
channel = soundInstance.play();
transform = channel.soundTransform;
transform.volume = (v / 100);
channel.soundTransform = transform;
} catch(e:Error) {
};
}
public function set musicVolume(_arg1:Number):void{
var _local2:SoundTransform;
_musicVolume = _arg1;
if (channelBgMisic){
_local2 = channelBgMisic.soundTransform;
_local2.volume = (_arg1 / 100);
channelBgMisic.soundTransform = _local2;
};
}
public function get musicVolume():Number{
return (_musicVolume);
}
public static function getInstance():SoundController{
if (__instance == null){
__instance = new SoundController(new SingletonEnforcer());
};
return (__instance);
}
}
}//package
class SingletonEnforcer {
private function SingletonEnforcer(){
}
}
Section 105
//startlevel (startlevel)
package {
import flash.media.*;
public dynamic class startlevel extends Sound {
}
}//package
Section 106
//ThrowWall (ThrowWall)
package {
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.core.*;
import sandy.core.data.*;
import flash.display.*;
import sandy.core.scenegraph.*;
import ascb.util.*;
import gs.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import ascb.mochi.*;
import fl.motion.easing.*;
import sandy.primitive.*;
import flash.utils.*;
import flash.net.*;
import flash.ui.*;
public class ThrowWall extends MovieClip {
private var _lives:Number;
private var txtScore:TextField;
public var games3000_btn:SimpleButton;
private var isGenerateLevel:Boolean;// = true
private var btnRestart:SimpleButton;
public var tutorial_mc:MovieClip;
private var btnSound:SimpleButton;
private var figureGroup:TransformGroup;
private var levelTimer:Timer;
private var txtTarget:TextField;
private var cont_level:Number;
private var rotateX:Number;
private var rotateY:Number;
private var txtLives:TextField;
private var mcTopControl:MovieClip;
private var txtSound:TextField;
private var _level:Number;// = 10
private var request:URLRequest;
private var scene:Scene3D;
private var lCamera:Camera3D;
private var mainMenu:MovieClip;
private var mcTarget:MovieClip;
private var btnQuit:SimpleButton;
private var currentWall:Number;
private var mcControl:MovieClip;
public var topControl_mc:MovieClip;
private var speedZ:Number;// = 0
private var speedY:Number;// = 0
private var btnPause:SimpleButton;
public var txtLevel:TextField;
private var mcCurrent:MovieClip;
private var wallsGroups:TransformGroup;
public var level_txt:TextField;
private var sky:StarField;
private var sounds:SoundController;
private var lG:Group;
private var levels:Levels;
private var _score:Number;
public var game_over_mc:MovieClip;
private var mcGameOver:MovieClip;
private var decorationGroup:TransformGroup;
private var boxes:Array;
private var cont_lives:Number;
public var control_mc:MovieClip;
private var isRotateX:Boolean;
private var isRotateY:Boolean;
private var walls:Array;
private var gameSo:SharedObject;
public var main_menu_mc:MovieClip;
private var mcGrid:MovieClip;
private static var PAUSE:Boolean = false;
public function ThrowWall():void{
speedZ = 0;
speedY = 0;
_level = 10;
isGenerateLevel = true;
super();
MochiServices.connect("1692a2b151871b72", this.parent);
initGame();
}
private function showMenu(_arg1=null):void{
this["games3000_btn"].visible = false;
mainMenu.x = 320;
mainMenu.filters = [new BlurFilter(100, 0, 3)];
TweenFilterLite.to(mainMenu, 1, {type:"Blur", blurX:0, alpha:1});
}
private function addWall(_arg1:Number, _arg2:Number, _arg3:Number):Wall{
var _local4:Wall;
var _local5:MaterialAttributes;
var _local6:Appearance;
var _local7:BitmapData;
var _local8:BitmapMaterial;
_local4 = new Wall(("wall" + _arg3.toString()), 450, 500);
_local4.x = _arg1;
_local4.y = _arg2;
_local4.z = _arg3;
_local4.useSingleContainer = false;
_local4.enableBackFaceCulling = true;
_local4.enableNearClipping = true;
_local5 = new MaterialAttributes(new LineAttributes(1, 0xFFFFFF, 0), new LightAttributes(false, 0.5));
_local7 = new BitmapData(200, 200, false, 0);
_local8 = new BitmapMaterial(_local7, _local5);
_local8.lightingEnable = true;
_local6 = new Appearance(_local8);
_local4.appearance = _local6;
return (_local4);
}
public function set lives(_arg1:Number):void{
_lives = _arg1;
txtLives.text = lives.toString();
trace(lives);
if (lives == 0){
levelTimer.stop();
walls = [];
wallsGroups.destroy();
figureGroup.destroy();
gameOver();
};
}
private function winGame():void{
TweenLite.to(mcTopControl, 0.3, {y:-100, overwrite:false, ease:Back.easeIn});
TweenLite.to(mcControl, 0.5, {x:700, ease:Back.easeIn});
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
decorationGroup = createDecorationGroup();
lG.addChild(decorationGroup);
addEventListener(Event.ENTER_FRAME, winMovie);
mcGameOver.visible = true;
mcGameOver.alpha = 0;
mcGameOver.gotoAndStop(2);
mcGameOver.filters = [new BlurFilter(100, 0, 3)];
TweenFilterLite.to(mcGameOver, 1, {type:"Blur", blurX:0, alpha:10, delay:3});
}
private function enterFrameHandler(_arg1:Event):void{
var _local2:Number;
var _local3:Wall;
if (PAUSE){
return;
};
if (wallsGroups){
_local2 = (wallsGroups.children.length - 1);
while (_local2 >= 0) {
_local3 = Wall(wallsGroups.children[_local2]);
if (_local3.visible){
_local3.z = (_local3.z + speedZ);
if (_local3.z < 3000){
_local3.y = (_local3.y + speedY);
};
};
if (_local3.y <= -70){
_local3.y = -70;
};
if ((((_local3.z <= 0)) && ((speedZ < 0)))){
if (_local3.visible){
if (_local3.bitmapData.compare(createSnapshot()) == 0){
score = (score + 10);
sounds.playSound("hit");
speedZ = 0;
speedY = 0;
_local3.visible = false;
_local3.z = -1000;
_local3.target_mc.visible = false;
if (lives > 0){
nextFigure(_local3.num);
};
mcGrid.filters = [new GlowFilter(0xFF00)];
TweenFilterLite.to(mcGrid, 0.3, {type:"Glow", strength:4});
TweenFilterLite.to(mcGrid, 0.3, {delay:0.4, type:"Glow", strength:0, overwrite:false});
} else {
sounds.playSound("lose");
lives--;
mcGrid.filters = [new GlowFilter(0xFF0000)];
TweenFilterLite.to(mcGrid, 0.3, {type:"Glow", strength:4});
TweenFilterLite.to(mcGrid, 0.3, {delay:0.4, type:"Glow", strength:0, overwrite:false});
speedZ = 0;
speedY = 0;
if ((((_local3.num == walls.length)) && ((lives > 0)))){
_local3.z = 3000;
_local3.y = 500;
levels.timer = (levels.timer + 10000);
} else {
if (lives > 0){
_local3.visible = false;
_local3.z = -1000;
_local3.target_mc.visible = false;
nextFigure(_local3.num);
};
};
txtLives.filters = [new GlowFilter(0xFF0000)];
TweenFilterLite.to(txtLives, 0.3, {type:"Glow", strength:4});
TweenFilterLite.to(txtLives, 0.3, {delay:0.4, type:"Glow", strength:0, overwrite:false});
};
if (wallsGroups.children.length == 0){
break;
};
};
};
_local2--;
};
if (isRotateX){
figureGroup.rotateX = (figureGroup.rotateX - rotateX);
if ((Math.abs(figureGroup.rotateX) % 90) == 0){
isRotateX = false;
if (Math.abs(figureGroup.rotateX) >= 360){
figureGroup.rotateX = 0;
};
rotateX = 0;
scene.render();
createOutline(mcCurrent);
};
};
if (isRotateY){
figureGroup.rotateY = (figureGroup.rotateY - rotateY);
if ((Math.abs(figureGroup.rotateY) % 90) == 0){
if (Math.abs(figureGroup.rotateY) >= 360){
figureGroup.rotateY = 0;
};
isRotateY = false;
rotateY = 0;
scene.render();
createOutline(mcCurrent);
};
};
};
scene.render();
}
private function applyBitmap(_arg1:Wall):void{
var _local2:BitmapMaterial;
var _local3:BitmapData;
_local2 = (_arg1.appearance.frontMaterial as BitmapMaterial);
_local3 = _local2.texture;
_local3.draw(_arg1.bitmapData);
}
public function onCLick3(_arg1:Event):void{
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_gameover_moregames"));
};
navigateToURL(request, "_blank");
}
public function onCLick2(_arg1:Event):void{
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_mainscreen_moregames"));
};
navigateToURL(request, "_blank");
}
private function initLevel():void{
var _local1:NumberFormat;
var _local2:SimpleButton;
btnPause.enabled = true;
btnPause.alpha = 1;
mcControl.filters = [new BlurFilter(100, 0, 3)];
TweenFilterLite.to(mcControl, 0.3, {type:"Blur", blurX:0, alpha:1});
TweenLite.to(mcControl, 0.3, {x:496, overwrite:false, ease:Back.easeOut});
wallsGroups.visible = true;
wallsGroups.z = (wallsGroups.z + 1);
figureGroup.visible = true;
figureGroup.x = (figureGroup.x + 1);
levelTimer.start();
_local1 = new NumberFormat("###.00");
txtTarget.text = _local1.format((levels.timer / 1000), {group:"", decimal:"."});
isGenerateLevel = false;
if ((((level == 1)) && (!(gameSo.data.tutorial)))){
this["tutorial_mc"].gotoAndPlay(2);
_local2 = this["tutorial_mc"]["hidetutorial_btn"];
_local2.addEventListener(MouseEvent.CLICK, hideTutorial);
};
}
public function onCLick4(_arg1:Event):void{
if (language.language_nr == 2){
request = new URLRequest(language.url1);
} else {
request = new URLRequest((language.url1 + "&utm_content=button_highscore_3000games"));
};
navigateToURL(request, "_blank");
}
private function levelTime(_arg1:TimerEvent):void{
var _local2:NumberFormat;
levels.timer = (levels.timer - 100);
_local2 = new NumberFormat("###.00");
txtTarget.text = _local2.format((levels.timer / 1000), {group:"", decimal:"."});
if (levels.timer <= 0){
levels.timer = 0;
moveWall();
};
}
private function createSky():void{
var _local1:int;
var _local2:Number;
var _local3:int;
var _local4:Number;
var _local5:Number;
sky = new StarField();
_local1 = 10000;
_local2 = 500;
_local3 = 0;
while (_local3 < _local1) {
_local4 = Math.acos((-1 + (((2 * _local3) - 1) / _local1)));
_local5 = (Math.sqrt((_local1 * Math.PI)) * _local4);
_local4 = (_local4 + (0.1 * (Math.random() - 0.5)));
_local5 = (_local5 + (0.1 * (Math.random() - 0.5)));
sky.stars[_local3] = new Vertex(((_local2 * Math.cos(_local5)) * Math.sin(_local4)), ((_local2 * Math.sin(_local5)) * Math.sin(_local4)), (_local2 * Math.cos(_local4)));
_local3++;
};
sky.container.filters = [new GlowFilter(10092543, 1, 4, 4, 15)];
sky.container.alpha = 0;
scene.root.addChild(sky);
}
public function get score():Number{
return (_score);
}
private function startLevel():void{
btnPause.enabled = false;
btnPause.alpha = 0.7;
mainMenu.x = -1000;
mcCurrent.graphics.clear();
while (mcTarget.numChildren) {
mcTarget.removeChildAt(0);
};
isGenerateLevel = true;
createLevel();
sounds.playSound("startlevel");
introText(("LEVEL " + level.toString()), initLevel);
}
private function initMenu():void{
var _local1:SimpleButton;
var _local2:SimpleButton;
var _local3:SimpleButton;
var _local4:SimpleButton;
var _local5:SimpleButton;
var _local6:SimpleButton;
_local1 = mainMenu["start_btn"];
_local1.removeEventListener(MouseEvent.CLICK, startGame);
_local1.addEventListener(MouseEvent.CLICK, startGame);
_local2 = mainMenu["credit_btn"];
_local2.removeEventListener(MouseEvent.CLICK, showCredits);
_local2.addEventListener(MouseEvent.CLICK, showCredits);
_local3 = mainMenu["continue_btn"];
_local3.removeEventListener(MouseEvent.CLICK, continueGame);
_local4 = mainMenu["highscore_btn"];
_local4.removeEventListener(MouseEvent.CLICK, showHighScores);
_local4.addEventListener(MouseEvent.CLICK, showHighScores);
mainMenu["button_mainscreen_moregames"].addEventListener(MouseEvent.CLICK, onCLick2);
this["games3000_btn"].addEventListener(MouseEvent.CLICK, onCLick4);
_local5 = mcGameOver["send_score_btn"];
_local5.removeEventListener(MouseEvent.CLICK, sendScore);
_local5.addEventListener(MouseEvent.CLICK, sendScore);
_local6 = mcGameOver["main_menu_btn"];
_local6.removeEventListener(MouseEvent.CLICK, gotoMainMenu);
_local6.addEventListener(MouseEvent.CLICK, gotoMainMenu);
mainMenu["button_mainscreen_moregames"].addEventListener(MouseEvent.CLICK, onCLick3);
if (cont_level <= 1){
_local3.enabled = false;
_local3.alpha = 0.5;
} else {
_local3.enabled = true;
_local3.alpha = 1;
_local3.addEventListener(MouseEvent.CLICK, continueGame);
};
}
private function winMovie(_arg1:Event):void{
if (decorationGroup.z < -1500){
if (!sky){
createSky();
};
} else {
Bg.instanse.visible = false;
decorationGroup.z = (decorationGroup.z - 50);
decorationGroup.y = (decorationGroup.y - 10);
};
if (sky){
sky.rotateX = (sky.rotateX + 0.1);
if (sky.container.alpha < 1){
sky.container.alpha = (sky.container.alpha + 0.07);
};
};
scene.render();
}
private function hideTutorial(_arg1:MouseEvent):void{
this["tutorial_mc"].gotoAndStop(1);
gameSo.data.tutorial = true;
}
private function showCredits(_arg1:MouseEvent):void{
mainMenu["credits_mc"].gotoAndPlay(2);
}
private function createSnapshot():BitmapData{
var _local1:Point3D;
var _local2:Number;
var _local3:Shape;
var _local4:Graphics;
var _local5:String;
var _local6:Array;
var _local7:Array;
var _local8:Array;
var _local9:Matrix;
var _local10:Number;
var _local11:BitmapData;
var _local12:CollisionBox;
var _local13:Rectangle;
_local1 = figureGroup.matrix.getEulerAngles();
_local1.x = Math.round(_local1.x);
_local1.y = Math.round(_local1.y);
_local1.z = Math.round(_local1.z);
if (_local1.x >= 360){
_local1.x = (_local1.x - 360);
};
if (_local1.y >= 360){
_local1.y = (_local1.y - 360);
};
if (_local1.z >= 360){
_local1.z = (_local1.z - 360);
};
trace(_local1);
_local2 = 2.4;
_local3 = new Shape();
_local4 = _local3.graphics;
_local4.clear();
_local5 = GradientType.LINEAR;
_local6 = [0xFFFFFF, 0];
_local7 = [100, 100];
_local8 = [140, 240];
_local9 = new Matrix();
_local9.rotate(90);
_local4.beginGradientFill(_local5, _local6, _local7, _local8, _local9);
_local4.drawRect(-10, -10, 500, 500);
_local4.endFill();
_local10 = 0;
while (_local10 < boxes.length) {
_local12 = CollisionBox(boxes[_local10]);
_local4.beginFill(0);
_local4.lineStyle(0, 0);
_local13 = _local12.getProjection(_local1);
_local4.drawRect(((_local13.x / _local2) + 94), ((_local13.y / _local2) + 91), (_local13.width / _local2), (_local13.height / _local2));
_local4.endFill();
_local10++;
};
_local11 = new BitmapData(500, 500);
_local11.draw(_local3);
return (_local11);
}
private function quitGame(_arg1:MouseEvent):void{
sounds.stopBackground();
levelTimer.stop();
walls = [];
wallsGroups.destroy();
figureGroup.destroy();
TweenFilterLite.killTweensOf(txtLevel);
txtLevel.alpha = 0;
TweenLite.to(mcTopControl, 0.3, {y:-100, overwrite:false, ease:Back.easeIn});
TweenLite.to(mcControl, 0.5, {x:700, ease:Back.easeIn});
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
showMenu();
}
private function pauseGame(_arg1:MouseEvent):void{
if (!btnPause.enabled){
return;
};
PAUSE = true;
levelTimer.stop();
filters = [new BlurFilter(100, 0, 3)];
enabled = false;
mouseChildren = false;
mouseChildren = false;
ContinueGame.instanse.x = 320;
ContinueGame.instanse.y = 240;
ContinueGame.instanse.addEventListener(MouseEvent.CLICK, resumeGame);
}
private function keyPressedHandler(_arg1:KeyboardEvent):void{
var _local2:Number;
if (((isGenerateLevel) || (PAUSE))){
return;
};
_local2 = 5;
if (((!(isRotateX)) && (!(isRotateY)))){
switch (_arg1.keyCode){
case Keyboard.UP:
case 87:
rotateX = -(_local2);
isRotateX = true;
sounds.playSound("flip");
break;
case Keyboard.DOWN:
case 83:
rotateX = _local2;
isRotateX = true;
sounds.playSound("flip");
break;
case Keyboard.LEFT:
case 65:
rotateY = _local2;
isRotateY = true;
sounds.playSound("flip");
break;
case Keyboard.RIGHT:
case 68:
rotateY = -(_local2);
isRotateY = true;
sounds.playSound("flip");
break;
};
};
switch (_arg1.keyCode){
case Keyboard.SPACE:
moveWall();
break;
};
}
public function set level(_arg1:Number):void{
_level = _arg1;
cont_level = level;
cont_lives = lives;
gameSo.data.cont_lives = lives;
gameSo.data.cont_level = cont_level;
initMenu();
}
private function createDecorationGroup():TransformGroup{
var _local1:TransformGroup;
var _local2:MaterialAttributes;
var _local3:Material;
var _local4:Appearance;
var _local5:Number;
var _local6:Line3D;
_local1 = new TransformGroup();
_local2 = new MaterialAttributes(new LineAttributes(1, 0xFFFFFF, 0.2), new LightAttributes(true, 0.1));
_local3 = new ColorMaterial(0xFFFFFF, 1, _local2);
_local3.lightingEnable = false;
_local4 = new Appearance(_local3);
_local5 = 0;
while (_local5 < 20) {
_local6 = new Line3D(("aLine" + _local5), new Point3D((-500 + (_local5 * 50)), -100, -300), new Point3D((-500 + (_local5 * 50)), -100, 1900));
_local6.appearance = _local4;
_local1.addChild(_local6);
_local5++;
};
_local5 = 0;
while (_local5 < 40) {
_local6 = new Line3D(("aLine" + _local5), new Point3D(-800, 500, (-500 + (_local5 * 60))), new Point3D(-500, -100, (-500 + (_local5 * 60))), new Point3D(450, -100, (-500 + (_local5 * 60))), new Point3D(750, 500, (-500 + (_local5 * 60))));
_local6.appearance = _local4;
_local1.addChild(_local6);
_local5++;
};
return (_local1);
}
private function initGame():void{
var _local1:Number;
var _local2:Group;
gameSo = SharedObject.getLocal("throughtwall");
if (((gameSo.data.cont_lives) && (!(isNaN(gameSo.data.cont_lives))))){
cont_lives = gameSo.data.cont_lives;
cont_level = gameSo.data.cont_level;
} else {
cont_lives = 0;
cont_level = 0;
};
sounds = SoundController.getInstance();
this["games3000_btn"].visible = false;
mcGameOver = this["game_over_mc"];
mcGameOver.visible = false;
mainMenu = this["main_menu_mc"];
mcTopControl = this["topControl_mc"];
mcTopControl.y = -100;
btnPause = mcTopControl["pause_btn"];
btnPause.addEventListener(MouseEvent.CLICK, pauseGame);
btnPause.enabled = false;
btnPause.alpha = 0.7;
btnQuit = mcTopControl["quit_btn"];
btnQuit.addEventListener(MouseEvent.CLICK, quitGame);
btnSound = mcTopControl["sound_btn"];
btnSound.addEventListener(MouseEvent.CLICK, soundMute);
txtScore = mcTopControl["scores_txt"];
txtLives = mcTopControl["lives_txt"];
txtSound = mcTopControl["sound_txt"];
levels = new Levels();
txtLevel = this["level_txt"];
mcControl = this["control_mc"];
mcControl.x = 700;
btnRestart = mcControl["restart_btn"];
btnRestart.addEventListener(MouseEvent.CLICK, moveWall);
mcTarget = mcControl["target_mc"];
mcCurrent = mcControl["current_mc"];
txtTarget = mcControl["target_txt"];
mcGrid = this["control_mc"]["grid_mc"];
mcGrid.graphics.lineStyle(1, 0xCCCCCC, 0.5);
_local1 = 0;
while (_local1 < 9) {
mcGrid.graphics.moveTo(0, ((_local1 + 1) * 16.66));
mcGrid.graphics.lineTo(150, ((_local1 + 1) * 16.66));
mcGrid.graphics.moveTo(((_local1 + 1) * 16.66), 0);
mcGrid.graphics.lineTo(((_local1 + 1) * 16.66), 150);
_local1++;
};
lCamera = new Camera3D(650, 500);
lCamera.z = -450;
lCamera.y = 90;
lCamera.lookAt(0, 50, 0);
_local2 = createScene3D();
scene = new Scene3D("scene", this, lCamera, _local2);
levelTimer = new Timer(100, 0);
levelTimer.addEventListener(TimerEvent.TIMER, levelTime);
initMenu();
}
private function prepareWalls(_arg1:TimerEvent):void{
var _local2:Wall;
var _local3:Timer;
_local2 = Wall(walls[currentWall]);
_local2.bitmapData = createSnapshot();
applyBitmap(_local2);
_local2.target_mc = new MovieClip();
mcTarget.addChild(_local2.target_mc);
createOutline(_local2.target_mc);
_local2.target_mc.visible = false;
if (currentWall == (walls.length - 1)){
figureGroup.rotateX = 0;
figureGroup.rotateY = 0;
figureGroup.resetCoords();
nextPosition(0);
} else {
randomRotate();
_local3 = new Timer(100, 1);
_local3.addEventListener(TimerEvent.TIMER, prepareWalls);
_local3.start();
currentWall++;
};
}
public function set score(_arg1:Number):void{
_score = _arg1;
txtScore.text = score.toString();
}
private function gotoMainMenu(_arg1:MouseEvent):void{
removeWinItems();
mcGameOver.visible = false;
showMenu();
}
private function nextPosition(_arg1:Number):void{
mcCurrent.graphics.clear();
if (_arg1 < walls.length){
Wall(walls[_arg1]).target_mc.visible = true;
levels.timer = (levels.timer + 10000);
if (((levelTimer) && (!(isGenerateLevel)))){
levelTimer.start();
};
} else {
endLevel();
};
}
private function moveWall(_arg1:MouseEvent=null):void{
speedZ = -30;
speedY = -15;
levelTimer.stop();
sounds.playSound("move");
}
private function showHighScores(_arg1:MouseEvent):void{
removeEventListener(Event.ENTER_FRAME, winMovie);
hideMenu(null);
MochiScores.showLeaderboard({boardID:"3bc0c4390fbb0880", onClose:showMenu, onDisplay:show3000games});
}
private function continueGame(_arg1:MouseEvent):void{
score = 0;
lives = cont_lives;
level = cont_level;
sounds.playBackground("bgmusic");
isGenerateLevel = true;
Bg.instanse.visible = true;
TweenLite.to(mcTopControl, 0.3, {y:3, overwrite:false, ease:Back.easeOut});
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
hideMenu(startLevel);
}
public function get lives():Number{
return (_lives);
}
private function endLevel():void{
isGenerateLevel = true;
levelTimer.stop();
walls = [];
wallsGroups.destroy();
figureGroup.destroy();
level++;
if (level == 41){
winGame();
} else {
this["tutorial_mc"].gotoAndStop(1);
if (!gameSo.data.tutorial){
gameSo.data.tutorial = true;
};
introText("LEVEL COMPLETE", startLevel);
};
TweenLite.to(mcControl, 0.5, {x:700, ease:Back.easeIn});
score = (score + Math.floor((levels.timer / 1000)));
}
private function addBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=50):CollisionBox{
var _local5:CollisionBox;
var _local6:MaterialAttributes;
var _local7:Material;
var _local8:Appearance;
_local5 = new CollisionBox("theBox", _arg4, _arg4, _arg4);
_local5.x = (_arg1 + 0);
_local5.y = (_arg2 + 0);
_local5.z = _arg3;
_local5.useSingleContainer = false;
_local5.enableBackFaceCulling = true;
_local5.enableNearClipping = true;
_local6 = new MaterialAttributes(new LineAttributes(2, 0xFFFFFF, 1), new LightAttributes(false, 0));
_local7 = new ColorMaterial(0, 1, _local6);
_local7.lightingEnable = true;
_local8 = new Appearance(_local7);
_local5.appearance = _local8;
_local5.enableEvents = true;
return (_local5);
}
private function show3000games():void{
this["games3000_btn"].visible = true;
}
private function createScene3D():Group{
lG = new Group();
return (lG);
}
private function startGame(_arg1:MouseEvent):void{
sounds.playBackground("bgmusic");
score = 0;
lives = 3;
level = 1;
speedZ = 0;
speedY = 0;
isGenerateLevel = true;
Bg.instanse.visible = true;
TweenLite.to(mcTopControl, 0.3, {y:3, overwrite:false, ease:Back.easeOut});
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
hideMenu(startLevel);
}
public function get level():Number{
return (_level);
}
private function createOutline(_arg1:MovieClip):void{
var _local2:Point3D;
var _local3:Number;
var _local4:Graphics;
var _local5:Number;
var _local6:CollisionBox;
var _local7:Rectangle;
_local2 = figureGroup.matrix.getEulerAngles();
_local2.x = Math.round(_local2.x);
_local2.y = Math.round(_local2.y);
_local2.z = Math.round(_local2.z);
if (isNaN(_local2.y)){
_local2.y = 270;
};
if (_local2.x >= 360){
_local2.x = (_local2.x - 360);
};
if (_local2.y >= 360){
_local2.y = (_local2.y - 360);
};
if (_local2.z >= 360){
_local2.z = (_local2.z - 360);
};
_local3 = 2.4;
trace(_local2);
_local4 = _arg1.graphics;
_local4.clear();
_local5 = 0;
while (_local5 < boxes.length) {
_local6 = CollisionBox(boxes[_local5]);
if (_arg1 != mcCurrent){
_local4.beginFill(0, 0);
_local4.lineStyle(2, 0xFF0000);
} else {
_local4.beginFill(820515, 1);
_local4.lineStyle(0, 52445, 0);
};
_local7 = _local6.getProjection(_local2);
_local4.drawRect(((_local7.x / _local3) + 67), ((_local7.y / _local3) + 67), (_local7.width / _local3), (_local7.height / _local3));
_local4.endFill();
_local5++;
};
}
private function nextFigure(_arg1:Number):void{
if ((_arg1 + 2) < walls.length){
Wall(walls[(_arg1 + 2)]).y = 500;
Wall(walls[(_arg1 + 2)]).z = 9000;
Wall(walls[(_arg1 + 2)]).visible = true;
};
nextPosition(_arg1);
}
private function introText(_arg1:String, _arg2:Function):void{
var _local3:Number;
btnPause.enabled = false;
btnPause.alpha = 0.7;
_local3 = 1;
wallsGroups.visible = false;
txtLevel.text = _arg1;
txtLevel.y = 170;
txtLevel.x = 73;
txtLevel.alpha = 0;
txtLevel.filters = [new BlurFilter(100, 0, 3)];
TweenFilterLite.to(txtLevel, _local3, {type:"Blur", blurX:0, alpha:1});
TweenFilterLite.to(txtLevel, _local3, {type:"Blur", blurX:100, alpha:0, delay:(_local3 * 2), overwrite:false, onComplete:_arg2});
}
private function hideMenu(_arg1:Function):void{
mainMenu.filters = [new BlurFilter(0, 0, 3)];
TweenFilterLite.to(mainMenu, 1, {type:"Blur", blurX:100, alpha:0, onComplete:_arg1});
}
private function soundMute(_arg1:MouseEvent):void{
if (sounds.volume == 0){
sounds.volume = 100;
sounds.musicVolume = 50;
txtSound.text = "ON";
} else {
sounds.volume = 0;
sounds.musicVolume = 0;
txtSound.text = "OFF";
};
}
private function resumeGame(_arg1:MouseEvent):void{
PAUSE = false;
levelTimer.start();
filters = [];
enabled = true;
mouseChildren = true;
mouseChildren = true;
ContinueGame.instanse.x = -1000;
ContinueGame.instanse.removeEventListener(MouseEvent.CLICK, resumeGame);
}
private function gameOver():void{
sounds.stopBackground();
sounds.playSound("gameover");
TweenLite.to(mcTopControl, 0.3, {y:-100, overwrite:false, ease:Back.easeIn});
TweenLite.to(mcControl, 0.5, {x:700, ease:Back.easeIn});
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
mcGameOver.visible = true;
mcGameOver.gotoAndStop(1);
mcGameOver.filters = [new BlurFilter(100, 0, 3)];
TweenFilterLite.to(mcGameOver, 1, {type:"Blur", blurX:0, alpha:1});
}
private function removeWinItems():void{
levelTimer.stop();
walls = [];
wallsGroups.destroy();
figureGroup.destroy();
Bg.instanse.visible = true;
removeEventListener(Event.ENTER_FRAME, winMovie);
sounds.stopBackground();
if (sky){
sky.destroy();
};
sky = null;
if (decorationGroup){
decorationGroup.destroy();
};
}
private function sendScore(_arg1:MouseEvent):void{
removeWinItems();
mcGameOver.visible = false;
MochiScores.showLeaderboard({boardID:"3bc0c4390fbb0880", score:score, onClose:showMenu, onDisplay:show3000games});
}
private function createLevel():void{
var _local1:Number;
var _local2:Array;
var _local3:Number;
var _local4:Wall;
var _local5:Timer;
var _local6:Box;
if (wallsGroups){
wallsGroups.destroy();
};
if (figureGroup){
figureGroup.destroy();
};
figureGroup = new TransformGroup("rotation");
wallsGroups = new TransformGroup("walls");
lG.addChild(figureGroup);
lG.addChild(wallsGroups);
_local2 = levels.getLevel(level);
boxes = [];
_local3 = 40;
_local1 = 0;
while (_local1 < _local2.length) {
_local6 = addBox((_local2[_local1][0] * _local3), (_local2[_local1][1] * _local3), (_local2[_local1][2] * _local3), _local3);
boxes.push(_local6);
figureGroup.addChild(_local6);
_local1++;
};
walls = [];
_local1 = 1;
while (_local1 <= levels.wallsCount) {
_local4 = addWall(0, 500, (3000 * _local1));
_local4.num = _local1;
_local4.visible = (_local1 < 4);
walls.push(_local4);
wallsGroups.addChild(_local4);
_local1++;
};
randomRotate();
currentWall = 0;
_local5 = new Timer(100, 1);
_local5.addEventListener(TimerEvent.TIMER, prepareWalls);
_local5.start();
wallsGroups.y = 50;
figureGroup.x = 1;
figureGroup.visible = false;
}
private function randomRotate():void{
var _local1:Number;
_local1 = 0;
while (_local1 < 20) {
if (NumberUtilities.random(0, 10) > 5){
figureGroup.rotateX = (figureGroup.rotateX + 90);
} else {
figureGroup.rotateX = (figureGroup.rotateX - 90);
};
if (NumberUtilities.random(0, 10) > 5){
figureGroup.rotateY = (figureGroup.rotateY + 90);
} else {
figureGroup.rotateY = (figureGroup.rotateY - 90);
};
if (Math.abs(figureGroup.rotateY) >= 360){
figureGroup.rotateY = 0;
};
if (Math.abs(figureGroup.rotateX) >= 360){
figureGroup.rotateX = 0;
};
_local1++;
};
if ((((figureGroup.rotateY == 0)) && ((figureGroup.rotateX == 0)))){
randomRotate();
};
}
}
}//package
Section 107
//Wall (Wall)
package {
import flash.display.*;
import sandy.primitive.*;
public class Wall extends Plane3D {
public var target_mc:MovieClip;
public var num:Number;
public var bitmapData:BitmapData;
public function Wall(_arg1:String=null, _arg2:Number=100, _arg3:Number=100, _arg4:uint=1, _arg5:uint=1, _arg6:String="xy_aligned", _arg7:String=null){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7);
}
}
}//package