Section 1
//ag_intro_mc_46 (Avalancher_ArmorGames_fla.ag_intro_mc_46)
package Avalancher_ArmorGames_fla {
import flash.display.*;
public dynamic class ag_intro_mc_46 extends MovieClip {
public var timeToMoveOn:Boolean;
public function ag_intro_mc_46(){
addFrameScript(0, frame1, 217, frame218);
}
function frame218(){
timeToMoveOn = true;
}
function frame1(){
timeToMoveOn = false;
}
}
}//package Avalancher_ArmorGames_fla
Section 2
//MainTimeline (Avalancher_ArmorGames_fla.MainTimeline)
package Avalancher_ArmorGames_fla {
import flash.events.*;
import flash.display.*;
import org.generalrelativity.foam.view.*;
import flash.utils.*;
import flash.media.*;
import flash.text.*;
import flash.net.*;
import mochi.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.geom.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.xml.*;
public dynamic class MainTimeline extends MovieClip {
public var hostButton:HostButton;
public var bytesloaded;
public var loadCounter:TextField;
public var sclbar;
public var agTeaserClip:MovieClip;
public var bytestotal;
public var domName;
public function MainTimeline(){
addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5);
}
public function stepFrame(_arg1:Event){
bytestotal = stage.loaderInfo.bytesTotal;
bytesloaded = stage.loaderInfo.bytesLoaded;
sclbar = Math.round(((bytesloaded * 100) / bytestotal));
loadCounter.text = (("Loading Avalancher\n" + String(sclbar)) + "%");
if (bytesloaded >= bytestotal){
removeEventListener(Event.ENTER_FRAME, stepFrame);
play();
};
}
public function checkToMove(_arg1:Event){
if (agTeaserClip.timeToMoveOn){
stage.removeEventListener(Event.ENTER_FRAME, checkToMove);
gotoAndPlay(4);
};
}
public function hostClicked(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.sinistersea.com/avalancher");
navigateToURL(_local2, "_blank");
}
function frame3(){
stop();
stage.addEventListener(Event.ENTER_FRAME, checkToMove);
agTeaserClip.addEventListener(MouseEvent.CLICK, sponsorClicked);
agTeaserClip.buttonMode = true;
agTeaserClip.useHandCursor = true;
}
function frame1(){
stop();
bytestotal = stage.loaderInfo.bytesTotal;
bytesloaded = stage.loaderInfo.bytesLoaded;
sclbar = Math.round(((bytesloaded * 100) / bytestotal));
addEventListener(Event.ENTER_FRAME, stepFrame);
}
function frame4(){
stop();
addChild(AvalancherManager.screenDisplay);
addChild(AvalancherManager.interfaceDisplay);
addChild(AvalancherManager.fadeDisplay);
AvalancherManager.initiate();
}
function frame2(){
stop();
domName = loaderInfo.loaderURL.toUpperCase();
if ((((domName.indexOf("ARMORGAMES.COM") == -1)) && ((domName.indexOf("SINISTERSEA.COM") == -1)))){
gotoAndStop(5);
} else {
play();
};
}
function frame5(){
stop();
hostButton.addEventListener(MouseEvent.CLICK, hostClicked);
}
public function sponsorClicked(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.armorgames.com/");
navigateToURL(_local2, "_blank");
}
}
}//package Avalancher_ArmorGames_fla
Section 3
//AuxFunctions (caurina.transitions.AuxFunctions)
package caurina.transitions {
public class AuxFunctions {
public static function getObjectLength(_arg1:Object):uint{
var _local2:uint;
var _local3:String;
_local2 = 0;
for (_local3 in _arg1) {
_local2++;
};
return (_local2);
}
public static function numberToG(_arg1:Number):Number{
return (((_arg1 & 0xFF00) >> 8));
}
public static function numberToB(_arg1:Number):Number{
return ((_arg1 & 0xFF));
}
public static function numberToR(_arg1:Number):Number{
return (((_arg1 & 0xFF0000) >> 16));
}
public static function concatObjects(... _args):Object{
var _local2:Object;
var _local3:Object;
var _local4:int;
var _local5:String;
_local2 = {};
_local4 = 0;
while (_local4 < _args.length) {
_local3 = _args[_local4];
for (_local5 in _local3) {
if (_local3[_local5] == null){
delete _local2[_local5];
} else {
_local2[_local5] = _local3[_local5];
};
};
_local4++;
};
return (_local2);
}
}
}//package caurina.transitions
Section 4
//Equations (caurina.transitions.Equations)
package caurina.transitions {
public class Equations {
public function Equations(){
trace("Equations is a static class and should not be instantiated.");
}
public static function easeOutBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
if (_arg1 < (1 / 2.75)){
return (((_arg3 * ((7.5625 * _arg1) * _arg1)) + _arg2));
};
if (_arg1 < (2 / 2.75)){
_arg1 = (_arg1 - (1.5 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.75)) + _arg2));
};
if (_arg1 < (2.5 / 2.75)){
_arg1 = (_arg1 - (2.25 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.9375)) + _arg2));
};
_arg1 = (_arg1 - (2.625 / 2.75));
return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.984375)) + _arg2));
}
public static function easeInOutElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
var _local7:Number;
var _local8:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 == 2){
return ((_arg2 + _arg3));
};
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * (0.3 * 1.5)) : _arg5.period;
_local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude;
if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){
_local8 = _arg3;
_local7 = (_local6 / 4);
} else {
_local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8)));
};
if (_arg1 < 1){
--_arg1;
return (((-0.5 * ((_local8 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6)))) + _arg2));
};
--_arg1;
return ((((((_local8 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6))) * 0.5) + _arg3) + _arg2));
}
public static function easeInOutQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return (((((_arg3 / 2) * _arg1) * _arg1) + _arg2));
};
--_arg1;
return ((((-(_arg3) / 2) * ((_arg1 * (_arg1 - 2)) - 1)) + _arg2));
}
public static function easeInOutBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (((easeInBounce((_arg1 * 2), 0, _arg3, _arg4) * 0.5) + _arg2));
};
return ((((easeOutBounce(((_arg1 * 2) - _arg4), 0, _arg3, _arg4) * 0.5) + (_arg3 * 0.5)) + _arg2));
}
public static function easeInOutBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot;
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
_local6 = (_local6 * 1.525);
return ((((_arg3 / 2) * ((_arg1 * _arg1) * (((_local6 + 1) * _arg1) - _local6))) + _arg2));
};
_arg1 = (_arg1 - 2);
_local6 = (_local6 * 1.525);
return ((((_arg3 / 2) * (((_arg1 * _arg1) * (((_local6 + 1) * _arg1) + _local6)) + 2)) + _arg2));
}
public static function easeOutInCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutCubic((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInCubic(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeNone(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
public static function easeOutBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot;
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * (((_arg1 * _arg1) * (((_local6 + 1) * _arg1) + _local6)) + 1)) + _arg2));
}
public static function easeInOutSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return ((((-(_arg3) / 2) * (Math.cos(((Math.PI * _arg1) / _arg4)) - 1)) + _arg2));
}
public static function easeInBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot;
_arg1 = (_arg1 / _arg4);
return (((((_arg3 * _arg1) * _arg1) * (((_local6 + 1) * _arg1) - _local6)) + _arg2));
}
public static function easeInQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return ((((((_arg3 * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
}
public static function easeOutInQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutQuint((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInQuint(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeOutInBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutBounce((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInBounce(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function init():void{
Tweener.registerTransition("easenone", easeNone);
Tweener.registerTransition("linear", easeNone);
Tweener.registerTransition("easeinquad", easeInQuad);
Tweener.registerTransition("easeoutquad", easeOutQuad);
Tweener.registerTransition("easeinoutquad", easeInOutQuad);
Tweener.registerTransition("easeoutinquad", easeOutInQuad);
Tweener.registerTransition("easeincubic", easeInCubic);
Tweener.registerTransition("easeoutcubic", easeOutCubic);
Tweener.registerTransition("easeinoutcubic", easeInOutCubic);
Tweener.registerTransition("easeoutincubic", easeOutInCubic);
Tweener.registerTransition("easeinquart", easeInQuart);
Tweener.registerTransition("easeoutquart", easeOutQuart);
Tweener.registerTransition("easeinoutquart", easeInOutQuart);
Tweener.registerTransition("easeoutinquart", easeOutInQuart);
Tweener.registerTransition("easeinquint", easeInQuint);
Tweener.registerTransition("easeoutquint", easeOutQuint);
Tweener.registerTransition("easeinoutquint", easeInOutQuint);
Tweener.registerTransition("easeoutinquint", easeOutInQuint);
Tweener.registerTransition("easeinsine", easeInSine);
Tweener.registerTransition("easeoutsine", easeOutSine);
Tweener.registerTransition("easeinoutsine", easeInOutSine);
Tweener.registerTransition("easeoutinsine", easeOutInSine);
Tweener.registerTransition("easeincirc", easeInCirc);
Tweener.registerTransition("easeoutcirc", easeOutCirc);
Tweener.registerTransition("easeinoutcirc", easeInOutCirc);
Tweener.registerTransition("easeoutincirc", easeOutInCirc);
Tweener.registerTransition("easeinexpo", easeInExpo);
Tweener.registerTransition("easeoutexpo", easeOutExpo);
Tweener.registerTransition("easeinoutexpo", easeInOutExpo);
Tweener.registerTransition("easeoutinexpo", easeOutInExpo);
Tweener.registerTransition("easeinelastic", easeInElastic);
Tweener.registerTransition("easeoutelastic", easeOutElastic);
Tweener.registerTransition("easeinoutelastic", easeInOutElastic);
Tweener.registerTransition("easeoutinelastic", easeOutInElastic);
Tweener.registerTransition("easeinback", easeInBack);
Tweener.registerTransition("easeoutback", easeOutBack);
Tweener.registerTransition("easeinoutback", easeInOutBack);
Tweener.registerTransition("easeoutinback", easeOutInBack);
Tweener.registerTransition("easeinbounce", easeInBounce);
Tweener.registerTransition("easeoutbounce", easeOutBounce);
Tweener.registerTransition("easeinoutbounce", easeInOutBounce);
Tweener.registerTransition("easeoutinbounce", easeOutInBounce);
}
public static function easeOutExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return (((_arg1)==_arg4) ? (_arg2 + _arg3) : (((_arg3 * 1.001) * (-(Math.pow(2, ((-10 * _arg1) / _arg4))) + 1)) + _arg2));
}
public static function easeOutInBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutBack((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInBack(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeInExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return (((_arg1)==0) ? _arg2 : (((_arg3 * Math.pow(2, (10 * ((_arg1 / _arg4) - 1)))) + _arg2) - (_arg3 * 0.001)));
}
public static function easeInCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return (((((_arg3 * _arg1) * _arg1) * _arg1) + _arg2));
}
public static function easeInQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return (((((((_arg3 * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
}
public static function easeInOutCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return ((((-(_arg3) / 2) * (Math.sqrt((1 - (_arg1 * _arg1))) - 1)) + _arg2));
};
_arg1 = (_arg1 - 2);
return ((((_arg3 / 2) * (Math.sqrt((1 - (_arg1 * _arg1))) + 1)) + _arg2));
}
public static function easeInQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return ((((_arg3 * _arg1) * _arg1) + _arg2));
}
public static function easeInBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return (((_arg3 - easeOutBounce((_arg4 - _arg1), 0, _arg3, _arg4)) + _arg2));
}
public static function easeOutInExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutExpo((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInExpo(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeOutQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = ((_arg1 / _arg4) - 1);
return (((-(_arg3) * ((((_arg1 * _arg1) * _arg1) * _arg1) - 1)) + _arg2));
}
public static function easeInSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return ((((-(_arg3) * Math.cos(((_arg1 / _arg4) * (Math.PI / 2)))) + _arg3) + _arg2));
}
public static function easeInOutQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return (((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
};
_arg1 = (_arg1 - 2);
return ((((-(_arg3) / 2) * ((((_arg1 * _arg1) * _arg1) * _arg1) - 2)) + _arg2));
}
public static function easeOutQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return ((((-(_arg3) * _arg1) * (_arg1 - 2)) + _arg2));
}
public static function easeOutInElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutElastic((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInElastic(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeInElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
var _local7:Number;
var _local8:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * 0.3) : _arg5.period;
_local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude;
if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){
_local8 = _arg3;
_local7 = (_local6 / 4);
} else {
_local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8)));
};
--_arg1;
return ((-(((_local8 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6)))) + _arg2));
}
public static function easeOutCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * (((_arg1 * _arg1) * _arg1) + 1)) + _arg2));
}
public static function easeOutQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 1)) + _arg2));
}
public static function easeOutInQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutQuad((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInQuad(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeOutSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
return (((_arg3 * Math.sin(((_arg1 / _arg4) * (Math.PI / 2)))) + _arg2));
}
public static function easeInOutCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return ((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) + _arg2));
};
_arg1 = (_arg1 - 2);
return ((((_arg3 / 2) * (((_arg1 * _arg1) * _arg1) + 2)) + _arg2));
}
public static function easeInOutQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return ((((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2));
};
_arg1 = (_arg1 - 2);
return ((((_arg3 / 2) * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 2)) + _arg2));
}
public static function easeInCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = (_arg1 / _arg4);
return (((-(_arg3) * (Math.sqrt((1 - (_arg1 * _arg1))) - 1)) + _arg2));
}
public static function easeOutInSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutSine((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInSine(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeInOutExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 == 0){
return (_arg2);
};
if (_arg1 == _arg4){
return ((_arg2 + _arg3));
};
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return (((((_arg3 / 2) * Math.pow(2, (10 * (_arg1 - 1)))) + _arg2) - (_arg3 * 0.0005)));
};
--_arg1;
return (((((_arg3 / 2) * 1.0005) * (-(Math.pow(2, (-10 * _arg1))) + 2)) + _arg2));
}
public static function easeOutElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
var _local6:Number;
var _local7:Number;
var _local8:Number;
if (_arg1 == 0){
return (_arg2);
};
_arg1 = (_arg1 / _arg4);
if (_arg1 == 1){
return ((_arg2 + _arg3));
};
_local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * 0.3) : _arg5.period;
_local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude;
if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){
_local8 = _arg3;
_local7 = (_local6 / 4);
} else {
_local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8)));
};
return (((((_local8 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6))) + _arg3) + _arg2));
}
public static function easeOutCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
_arg1 = ((_arg1 / _arg4) - 1);
return (((_arg3 * Math.sqrt((1 - (_arg1 * _arg1)))) + _arg2));
}
public static function easeOutInQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutQuart((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInQuart(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
public static function easeOutInCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{
if (_arg1 < (_arg4 / 2)){
return (easeOutCirc((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5));
};
return (easeInCirc(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5));
}
}
}//package caurina.transitions
Section 5
//PropertyInfoObj (caurina.transitions.PropertyInfoObj)
package caurina.transitions {
public class PropertyInfoObj {
public var originalValueComplete:Object;
public var modifierParameters:Array;
public var isSpecialProperty:Boolean;
public var hasModifier:Boolean;
public var valueComplete:Number;
public var extra:Object;
public var valueStart:Number;
public var modifierFunction:Function;
public var arrayIndex:Number;
public function PropertyInfoObj(_arg1:Number, _arg2:Number, _arg3:Object, _arg4:Number, _arg5:Object, _arg6:Boolean, _arg7:Function, _arg8:Array){
valueStart = _arg1;
valueComplete = _arg2;
originalValueComplete = _arg3;
arrayIndex = _arg4;
extra = _arg5;
isSpecialProperty = _arg6;
hasModifier = Boolean(_arg7);
modifierFunction = _arg7;
modifierParameters = _arg8;
}
public function toString():String{
var _local1:String;
_local1 = "\n[PropertyInfoObj ";
_local1 = (_local1 + ("valueStart:" + String(valueStart)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("valueComplete:" + String(valueComplete)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("originalValueComplete:" + String(originalValueComplete)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("arrayIndex:" + String(arrayIndex)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("extra:" + String(extra)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("isSpecialProperty:" + String(isSpecialProperty)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("hasModifier:" + String(hasModifier)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("modifierFunction:" + String(modifierFunction)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("modifierParameters:" + String(modifierParameters)));
_local1 = (_local1 + "]\n");
return (_local1);
}
public function clone():PropertyInfoObj{
var _local1:PropertyInfoObj;
_local1 = new PropertyInfoObj(valueStart, valueComplete, originalValueComplete, arrayIndex, extra, isSpecialProperty, modifierFunction, modifierParameters);
return (_local1);
}
}
}//package caurina.transitions
Section 6
//SpecialProperty (caurina.transitions.SpecialProperty)
package caurina.transitions {
public class SpecialProperty {
public var parameters:Array;
public var preProcess:Function;
public var setValue:Function;
public var getValue:Function;
public function SpecialProperty(_arg1:Function, _arg2:Function, _arg3:Array=null, _arg4:Function=null){
getValue = _arg1;
setValue = _arg2;
parameters = _arg3;
preProcess = _arg4;
}
public function toString():String{
var _local1:String;
_local1 = "";
_local1 = (_local1 + "[SpecialProperty ");
_local1 = (_local1 + ("getValue:" + String(getValue)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("setValue:" + String(setValue)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("parameters:" + String(parameters)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("preProcess:" + String(preProcess)));
_local1 = (_local1 + "]");
return (_local1);
}
}
}//package caurina.transitions
Section 7
//SpecialPropertyModifier (caurina.transitions.SpecialPropertyModifier)
package caurina.transitions {
public class SpecialPropertyModifier {
public var getValue:Function;
public var modifyValues:Function;
public function SpecialPropertyModifier(_arg1:Function, _arg2:Function){
modifyValues = _arg1;
getValue = _arg2;
}
public function toString():String{
var _local1:String;
_local1 = "";
_local1 = (_local1 + "[SpecialPropertyModifier ");
_local1 = (_local1 + ("modifyValues:" + String(modifyValues)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("getValue:" + String(getValue)));
_local1 = (_local1 + "]");
return (_local1);
}
}
}//package caurina.transitions
Section 8
//SpecialPropertySplitter (caurina.transitions.SpecialPropertySplitter)
package caurina.transitions {
public class SpecialPropertySplitter {
public var parameters:Array;
public var splitValues:Function;
public function SpecialPropertySplitter(_arg1:Function, _arg2:Array){
splitValues = _arg1;
parameters = _arg2;
}
public function toString():String{
var _local1:String;
_local1 = "";
_local1 = (_local1 + "[SpecialPropertySplitter ");
_local1 = (_local1 + ("splitValues:" + String(splitValues)));
_local1 = (_local1 + ", ");
_local1 = (_local1 + ("parameters:" + String(parameters)));
_local1 = (_local1 + "]");
return (_local1);
}
}
}//package caurina.transitions
Section 9
//Tweener (caurina.transitions.Tweener)
package caurina.transitions {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Tweener {
private static var _timeScale:Number = 1;
private static var _currentTimeFrame:Number;
private static var _specialPropertySplitterList:Object;
private static var _engineExists:Boolean = false;
private static var _specialPropertyModifierList:Object;
private static var _currentTime:Number;
private static var _tweenList:Array;
private static var _specialPropertyList:Object;
private static var _transitionList:Object;
private static var _inited:Boolean = false;
private static var __tweener_controller__:MovieClip;
public function Tweener(){
trace("Tweener is a static class and should not be instantiated.");
}
public static function registerSpecialPropertyModifier(_arg1:String, _arg2:Function, _arg3:Function):void{
var _local4:SpecialPropertyModifier;
if (!_inited){
init();
};
_local4 = new SpecialPropertyModifier(_arg2, _arg3);
_specialPropertyModifierList[_arg1] = _local4;
}
public static function registerSpecialProperty(_arg1:String, _arg2:Function, _arg3:Function, _arg4:Array=null, _arg5:Function=null):void{
var _local6:SpecialProperty;
if (!_inited){
init();
};
_local6 = new SpecialProperty(_arg2, _arg3, _arg4, _arg5);
_specialPropertyList[_arg1] = _local6;
}
public static function init(... _args):void{
_inited = true;
_transitionList = new Object();
Equations.init();
_specialPropertyList = new Object();
_specialPropertyModifierList = new Object();
_specialPropertySplitterList = new Object();
}
private static function updateTweens():Boolean{
var _local1:int;
if (_tweenList.length == 0){
return (false);
};
_local1 = 0;
while (_local1 < _tweenList.length) {
if ((((_tweenList[_local1] == undefined)) || (!(_tweenList[_local1].isPaused)))){
if (!updateTweenByIndex(_local1)){
removeTweenByIndex(_local1);
};
if (_tweenList[_local1] == null){
removeTweenByIndex(_local1, true);
_local1--;
};
};
_local1++;
};
return (true);
}
public static function addCaller(_arg1:Object=null, _arg2:Object=null):Boolean{
var _local3:Number;
var _local4:Array;
var _local5:Object;
var _local6:Number;
var _local7:Number;
var _local8:Function;
var _local9:TweenListObj;
var _local10:Number;
var _local11:String;
if (!Boolean(_arg1)){
return (false);
};
if ((_arg1 is Array)){
_local4 = _arg1.concat();
} else {
_local4 = [_arg1];
};
_local5 = _arg2;
if (!_inited){
init();
};
if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){
startEngine();
};
_local6 = (isNaN(_local5.time)) ? 0 : _local5.time;
_local7 = (isNaN(_local5.delay)) ? 0 : _local5.delay;
if (typeof(_local5.transition) == "string"){
_local11 = _local5.transition.toLowerCase();
_local8 = _transitionList[_local11];
} else {
_local8 = _local5.transition;
};
if (!Boolean(_local8)){
_local8 = _transitionList["easeoutexpo"];
};
_local3 = 0;
while (_local3 < _local4.length) {
if (_local5.useFrames == true){
_local9 = new TweenListObj(_local4[_local3], (_currentTimeFrame + (_local7 / _timeScale)), (_currentTimeFrame + ((_local7 + _local6) / _timeScale)), true, _local8, _local5.transitionParams);
} else {
_local9 = new TweenListObj(_local4[_local3], (_currentTime + ((_local7 * 1000) / _timeScale)), (_currentTime + (((_local7 * 1000) + (_local6 * 1000)) / _timeScale)), false, _local8, _local5.transitionParams);
};
_local9.properties = null;
_local9.onStart = _local5.onStart;
_local9.onUpdate = _local5.onUpdate;
_local9.onComplete = _local5.onComplete;
_local9.onOverwrite = _local5.onOverwrite;
_local9.onStartParams = _local5.onStartParams;
_local9.onUpdateParams = _local5.onUpdateParams;
_local9.onCompleteParams = _local5.onCompleteParams;
_local9.onOverwriteParams = _local5.onOverwriteParams;
_local9.onStartScope = _local5.onStartScope;
_local9.onUpdateScope = _local5.onUpdateScope;
_local9.onCompleteScope = _local5.onCompleteScope;
_local9.onOverwriteScope = _local5.onOverwriteScope;
_local9.onErrorScope = _local5.onErrorScope;
_local9.isCaller = true;
_local9.count = _local5.count;
_local9.waitFrames = _local5.waitFrames;
_tweenList.push(_local9);
if ((((_local6 == 0)) && ((_local7 == 0)))){
_local10 = (_tweenList.length - 1);
updateTweenByIndex(_local10);
removeTweenByIndex(_local10);
};
_local3++;
};
return (true);
}
public static function pauseAllTweens():Boolean{
var _local1:Boolean;
var _local2:uint;
if (!Boolean(_tweenList)){
return (false);
};
_local1 = false;
_local2 = 0;
while (_local2 < _tweenList.length) {
pauseTweenByIndex(_local2);
_local1 = true;
_local2++;
};
return (_local1);
}
public static function removeTweens(_arg1:Object, ... _args):Boolean{
var _local3:Array;
var _local4:uint;
var _local5:SpecialPropertySplitter;
var _local6:Array;
var _local7:uint;
_local3 = new Array();
_local4 = 0;
while (_local4 < _args.length) {
if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){
if (_specialPropertySplitterList[_args[_local4]]){
_local5 = _specialPropertySplitterList[_args[_local4]];
_local6 = _local5.splitValues(_arg1, null);
_local7 = 0;
while (_local7 < _local6.length) {
_local3.push(_local6[_local7].name);
_local7++;
};
} else {
_local3.push(_args[_local4]);
};
};
_local4++;
};
return (affectTweens(removeTweenByIndex, _arg1, _local3));
}
public static function splitTweens(_arg1:Number, _arg2:Array):uint{
var _local3:TweenListObj;
var _local4:TweenListObj;
var _local5:uint;
var _local6:String;
var _local7:Boolean;
_local3 = _tweenList[_arg1];
_local4 = _local3.clone(false);
_local5 = 0;
while (_local5 < _arg2.length) {
_local6 = _arg2[_local5];
if (Boolean(_local3.properties[_local6])){
_local3.properties[_local6] = undefined;
delete _local3.properties[_local6];
};
_local5++;
};
for (_local6 in _local4.properties) {
_local7 = false;
_local5 = 0;
while (_local5 < _arg2.length) {
if (_arg2[_local5] == _local6){
_local7 = true;
break;
};
_local5++;
};
if (!_local7){
_local4.properties[_local6] = undefined;
delete _local4.properties[_local6];
};
};
_tweenList.push(_local4);
return ((_tweenList.length - 1));
}
public static function updateFrame():void{
_currentTimeFrame++;
}
public static function resumeTweenByIndex(_arg1:Number):Boolean{
var _local2:TweenListObj;
var _local3:Number;
_local2 = _tweenList[_arg1];
if ((((_local2 == null)) || (!(_local2.isPaused)))){
return (false);
};
_local3 = getCurrentTweeningTime(_local2);
_local2.timeStart = (_local2.timeStart + (_local3 - _local2.timePaused));
_local2.timeComplete = (_local2.timeComplete + (_local3 - _local2.timePaused));
_local2.timePaused = undefined;
_local2.isPaused = false;
return (true);
}
public static function getVersion():String{
return ("AS3 1.31.74");
}
public static function onEnterFrame(_arg1:Event):void{
var _local2:Boolean;
updateTime();
updateFrame();
_local2 = false;
_local2 = updateTweens();
if (!_local2){
stopEngine();
};
}
public static function updateTime():void{
_currentTime = getTimer();
}
private static function updateTweenByIndex(_arg1:Number):Boolean{
var tTweening:TweenListObj;
var isOver:Boolean;
var mustUpdate:Boolean;
var nv:Number;
var t:Number;
var b:Number;
var c:Number;
var d:Number;
var pName:String;
var eventScope:Object;
var tScope:Object;
var cTime:Number;
var tProperty:Object;
var pv:Number;
var i = _arg1;
tTweening = _tweenList[i];
if ((((tTweening == null)) || (!(Boolean(tTweening.scope))))){
return (false);
};
isOver = false;
cTime = getCurrentTweeningTime(tTweening);
if (cTime >= tTweening.timeStart){
tScope = tTweening.scope;
if (tTweening.isCaller){
do {
t = (((tTweening.timeComplete - tTweening.timeStart) / tTweening.count) * (tTweening.timesCalled + 1));
b = tTweening.timeStart;
c = (tTweening.timeComplete - tTweening.timeStart);
d = (tTweening.timeComplete - tTweening.timeStart);
nv = tTweening.transition(t, b, c, d);
} while (!(cTime >= nv));
} else {
mustUpdate = (((((tTweening.skipUpdates < 1)) || (!(tTweening.skipUpdates)))) || ((tTweening.updatesSkipped >= tTweening.skipUpdates)));
if (cTime >= tTweening.timeComplete){
isOver = true;
mustUpdate = true;
};
if (!tTweening.hasStarted){
if (Boolean(tTweening.onStart)){
eventScope = (Boolean(tTweening.onStartScope)) ? tTweening.onStartScope : tScope;
try {
tTweening.onStart.apply(eventScope, tTweening.onStartParams);
} catch(e2:Error) {
handleError(tTweening, e2, "onStart");
};
};
for (pName in tTweening.properties) {
if (tTweening.properties[pName].isSpecialProperty){
if (Boolean(_specialPropertyList[pName].preProcess)){
tTweening.properties[pName].valueComplete = _specialPropertyList[pName].preProcess(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].originalValueComplete, tTweening.properties[pName].extra);
};
pv = _specialPropertyList[pName].getValue(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra);
} else {
pv = tScope[pName];
};
tTweening.properties[pName].valueStart = (isNaN(pv)) ? tTweening.properties[pName].valueComplete : pv;
};
mustUpdate = true;
tTweening.hasStarted = true;
};
if (mustUpdate){
for (pName in tTweening.properties) {
tProperty = tTweening.properties[pName];
if (isOver){
nv = tProperty.valueComplete;
} else {
if (tProperty.hasModifier){
t = (cTime - tTweening.timeStart);
d = (tTweening.timeComplete - tTweening.timeStart);
nv = tTweening.transition(t, 0, 1, d, tTweening.transitionParams);
nv = tProperty.modifierFunction(tProperty.valueStart, tProperty.valueComplete, nv, tProperty.modifierParameters);
} else {
t = (cTime - tTweening.timeStart);
b = tProperty.valueStart;
c = (tProperty.valueComplete - tProperty.valueStart);
d = (tTweening.timeComplete - tTweening.timeStart);
nv = tTweening.transition(t, b, c, d, tTweening.transitionParams);
};
};
if (tTweening.rounded){
nv = Math.round(nv);
};
if (tProperty.isSpecialProperty){
_specialPropertyList[pName].setValue(tScope, nv, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra);
} else {
tScope[pName] = nv;
};
};
tTweening.updatesSkipped = 0;
if (Boolean(tTweening.onUpdate)){
eventScope = (Boolean(tTweening.onUpdateScope)) ? tTweening.onUpdateScope : tScope;
try {
tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams);
} catch(e3:Error) {
handleError(tTweening, e3, "onUpdate");
};
};
} else {
tTweening.updatesSkipped++;
};
};
if (((isOver) && (Boolean(tTweening.onComplete)))){
eventScope = (Boolean(tTweening.onCompleteScope)) ? tTweening.onCompleteScope : tScope;
try {
tTweening.onComplete.apply(eventScope, tTweening.onCompleteParams);
} catch(e4:Error) {
handleError(tTweening, e4, "onComplete");
};
};
return (!(isOver));
};
return (true);
}
public static function setTimeScale(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
if (isNaN(_arg1)){
_arg1 = 1;
};
if (_arg1 < 1E-5){
_arg1 = 1E-5;
};
if (_arg1 != _timeScale){
if (_tweenList != null){
_local2 = 0;
while (_local2 < _tweenList.length) {
_local3 = getCurrentTweeningTime(_tweenList[_local2]);
_tweenList[_local2].timeStart = (_local3 - (((_local3 - _tweenList[_local2].timeStart) * _timeScale) / _arg1));
_tweenList[_local2].timeComplete = (_local3 - (((_local3 - _tweenList[_local2].timeComplete) * _timeScale) / _arg1));
if (_tweenList[_local2].timePaused != undefined){
_tweenList[_local2].timePaused = (_local3 - (((_local3 - _tweenList[_local2].timePaused) * _timeScale) / _arg1));
};
_local2++;
};
};
_timeScale = _arg1;
};
}
public static function resumeAllTweens():Boolean{
var _local1:Boolean;
var _local2:uint;
if (!Boolean(_tweenList)){
return (false);
};
_local1 = false;
_local2 = 0;
while (_local2 < _tweenList.length) {
resumeTweenByIndex(_local2);
_local1 = true;
_local2++;
};
return (_local1);
}
private static function handleError(_arg1:TweenListObj, _arg2:Error, _arg3:String):void{
var eventScope:Object;
var pTweening = _arg1;
var pError = _arg2;
var pCallBackName = _arg3;
if (((Boolean(pTweening.onError)) && ((pTweening.onError is Function)))){
eventScope = (Boolean(pTweening.onErrorScope)) ? pTweening.onErrorScope : pTweening.scope;
try {
pTweening.onError.apply(eventScope, [pTweening.scope, pError]);
} catch(metaError:Error) {
printError(((((String(pTweening.scope) + " raised an error while executing the 'onError' handler. Original error:\n ") + pError.getStackTrace()) + "\nonError error: ") + metaError.getStackTrace()));
};
} else {
if (!Boolean(pTweening.onError)){
printError(((((String(pTweening.scope) + " raised an error while executing the '") + pCallBackName) + "'handler. \n") + pError.getStackTrace()));
};
};
}
private static function startEngine():void{
_engineExists = true;
_tweenList = new Array();
__tweener_controller__ = new MovieClip();
__tweener_controller__.addEventListener(Event.ENTER_FRAME, Tweener.onEnterFrame);
_currentTimeFrame = 0;
updateTime();
}
public static function removeAllTweens():Boolean{
var _local1:Boolean;
var _local2:uint;
if (!Boolean(_tweenList)){
return (false);
};
_local1 = false;
_local2 = 0;
while (_local2 < _tweenList.length) {
removeTweenByIndex(_local2);
_local1 = true;
_local2++;
};
return (_local1);
}
public static function addTween(_arg1:Object=null, _arg2:Object=null):Boolean{
var _local3:Number;
var _local4:Number;
var _local5:String;
var _local6:Array;
var _local7:Object;
var _local8:Number;
var _local9:Number;
var _local10:Array;
var _local11:Object;
var _local12:Object;
var _local13:Function;
var _local14:Object;
var _local15:TweenListObj;
var _local16:Number;
var _local17:Array;
var _local18:Array;
var _local19:Array;
var _local20:String;
if (!Boolean(_arg1)){
return (false);
};
if ((_arg1 is Array)){
_local6 = _arg1.concat();
} else {
_local6 = [_arg1];
};
_local7 = TweenListObj.makePropertiesChain(_arg2);
if (!_inited){
init();
};
if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){
startEngine();
};
_local8 = (isNaN(_local7.time)) ? 0 : _local7.time;
_local9 = (isNaN(_local7.delay)) ? 0 : _local7.delay;
_local10 = new Array();
_local11 = {time:true, delay:true, useFrames:true, skipUpdates:true, transition:true, transitionParams:true, onStart:true, onUpdate:true, onComplete:true, onOverwrite:true, onError:true, rounded:true, onStartParams:true, onUpdateParams:true, onCompleteParams:true, onOverwriteParams:true, onStartScope:true, onUpdateScope:true, onCompleteScope:true, onOverwriteScope:true, onErrorScope:true};
_local12 = new Object();
for (_local5 in _local7) {
if (!_local11[_local5]){
if (_specialPropertySplitterList[_local5]){
_local17 = _specialPropertySplitterList[_local5].splitValues(_local7[_local5], _specialPropertySplitterList[_local5].parameters);
_local3 = 0;
while (_local3 < _local17.length) {
if (_specialPropertySplitterList[_local17[_local3].name]){
_local18 = _specialPropertySplitterList[_local17[_local3].name].splitValues(_local17[_local3].value, _specialPropertySplitterList[_local17[_local3].name].parameters);
_local4 = 0;
while (_local4 < _local18.length) {
_local10[_local18[_local4].name] = {valueStart:undefined, valueComplete:_local18[_local4].value, arrayIndex:_local18[_local4].arrayIndex, isSpecialProperty:false};
_local4++;
};
} else {
_local10[_local17[_local3].name] = {valueStart:undefined, valueComplete:_local17[_local3].value, arrayIndex:_local17[_local3].arrayIndex, isSpecialProperty:false};
};
_local3++;
};
} else {
if (_specialPropertyModifierList[_local5] != undefined){
_local19 = _specialPropertyModifierList[_local5].modifyValues(_local7[_local5]);
_local3 = 0;
while (_local3 < _local19.length) {
_local12[_local19[_local3].name] = {modifierParameters:_local19[_local3].parameters, modifierFunction:_specialPropertyModifierList[_local5].getValue};
_local3++;
};
} else {
_local10[_local5] = {valueStart:undefined, valueComplete:_local7[_local5]};
};
};
};
};
for (_local5 in _local10) {
if (_specialPropertyList[_local5] != undefined){
_local10[_local5].isSpecialProperty = true;
} else {
if (_local6[0][_local5] == undefined){
printError((((("The property '" + _local5) + "' doesn't seem to be a normal object property of ") + String(_local6[0])) + " or a registered special property."));
};
};
};
for (_local5 in _local12) {
if (_local10[_local5] != undefined){
_local10[_local5].modifierParameters = _local12[_local5].modifierParameters;
_local10[_local5].modifierFunction = _local12[_local5].modifierFunction;
};
};
if (typeof(_local7.transition) == "string"){
_local20 = _local7.transition.toLowerCase();
_local13 = _transitionList[_local20];
} else {
_local13 = _local7.transition;
};
if (!Boolean(_local13)){
_local13 = _transitionList["easeoutexpo"];
};
_local3 = 0;
while (_local3 < _local6.length) {
_local14 = new Object();
for (_local5 in _local10) {
_local14[_local5] = new PropertyInfoObj(_local10[_local5].valueStart, _local10[_local5].valueComplete, _local10[_local5].valueComplete, _local10[_local5].arrayIndex, {}, _local10[_local5].isSpecialProperty, _local10[_local5].modifierFunction, _local10[_local5].modifierParameters);
};
if (_local7.useFrames == true){
_local15 = new TweenListObj(_local6[_local3], (_currentTimeFrame + (_local9 / _timeScale)), (_currentTimeFrame + ((_local9 + _local8) / _timeScale)), true, _local13, _local7.transitionParams);
} else {
_local15 = new TweenListObj(_local6[_local3], (_currentTime + ((_local9 * 1000) / _timeScale)), (_currentTime + (((_local9 * 1000) + (_local8 * 1000)) / _timeScale)), false, _local13, _local7.transitionParams);
};
_local15.properties = _local14;
_local15.onStart = _local7.onStart;
_local15.onUpdate = _local7.onUpdate;
_local15.onComplete = _local7.onComplete;
_local15.onOverwrite = _local7.onOverwrite;
_local15.onError = _local7.onError;
_local15.onStartParams = _local7.onStartParams;
_local15.onUpdateParams = _local7.onUpdateParams;
_local15.onCompleteParams = _local7.onCompleteParams;
_local15.onOverwriteParams = _local7.onOverwriteParams;
_local15.onStartScope = _local7.onStartScope;
_local15.onUpdateScope = _local7.onUpdateScope;
_local15.onCompleteScope = _local7.onCompleteScope;
_local15.onOverwriteScope = _local7.onOverwriteScope;
_local15.onErrorScope = _local7.onErrorScope;
_local15.rounded = _local7.rounded;
_local15.skipUpdates = _local7.skipUpdates;
removeTweensByTime(_local15.scope, _local15.properties, _local15.timeStart, _local15.timeComplete);
_tweenList.push(_local15);
if ((((_local8 == 0)) && ((_local9 == 0)))){
_local16 = (_tweenList.length - 1);
updateTweenByIndex(_local16);
removeTweenByIndex(_local16);
};
_local3++;
};
return (true);
}
public static function registerTransition(_arg1:String, _arg2:Function):void{
if (!_inited){
init();
};
_transitionList[_arg1] = _arg2;
}
public static function printError(_arg1:String):void{
trace(("## [Tweener] Error: " + _arg1));
}
private static function affectTweens(_arg1:Function, _arg2:Object, _arg3:Array):Boolean{
var _local4:Boolean;
var _local5:uint;
var _local6:Array;
var _local7:uint;
var _local8:uint;
var _local9:uint;
_local4 = false;
if (!Boolean(_tweenList)){
return (false);
};
_local5 = 0;
while (_local5 < _tweenList.length) {
if (((_tweenList[_local5]) && ((_tweenList[_local5].scope == _arg2)))){
if (_arg3.length == 0){
_arg1(_local5);
_local4 = true;
} else {
_local6 = new Array();
_local7 = 0;
while (_local7 < _arg3.length) {
if (Boolean(_tweenList[_local5].properties[_arg3[_local7]])){
_local6.push(_arg3[_local7]);
};
_local7++;
};
if (_local6.length > 0){
_local8 = AuxFunctions.getObjectLength(_tweenList[_local5].properties);
if (_local8 == _local6.length){
_arg1(_local5);
_local4 = true;
} else {
_local9 = splitTweens(_local5, _local6);
_arg1(_local9);
_local4 = true;
};
};
};
};
_local5++;
};
return (_local4);
}
public static function getTweens(_arg1:Object):Array{
var _local2:uint;
var _local3:String;
var _local4:Array;
if (!Boolean(_tweenList)){
return ([]);
};
_local4 = new Array();
_local2 = 0;
while (_local2 < _tweenList.length) {
if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){
for (_local3 in _tweenList[_local2].properties) {
_local4.push(_local3);
};
};
_local2++;
};
return (_local4);
}
public static function isTweening(_arg1:Object):Boolean{
var _local2:uint;
if (!Boolean(_tweenList)){
return (false);
};
_local2 = 0;
while (_local2 < _tweenList.length) {
if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){
return (true);
};
_local2++;
};
return (false);
}
public static function pauseTweenByIndex(_arg1:Number):Boolean{
var _local2:TweenListObj;
_local2 = _tweenList[_arg1];
if ((((_local2 == null)) || (_local2.isPaused))){
return (false);
};
_local2.timePaused = getCurrentTweeningTime(_local2);
_local2.isPaused = true;
return (true);
}
public static function getCurrentTweeningTime(_arg1:Object):Number{
return ((_arg1.useFrames) ? _currentTimeFrame : _currentTime);
}
public static function getTweenCount(_arg1:Object):Number{
var _local2:uint;
var _local3:Number;
if (!Boolean(_tweenList)){
return (0);
};
_local3 = 0;
_local2 = 0;
while (_local2 < _tweenList.length) {
if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){
_local3 = (_local3 + AuxFunctions.getObjectLength(_tweenList[_local2].properties));
};
_local2++;
};
return (_local3);
}
private static function stopEngine():void{
_engineExists = false;
_tweenList = null;
_currentTime = 0;
_currentTimeFrame = 0;
__tweener_controller__.removeEventListener(Event.ENTER_FRAME, Tweener.onEnterFrame);
__tweener_controller__ = null;
}
public static function removeTweensByTime(_arg1:Object, _arg2:Object, _arg3:Number, _arg4:Number):Boolean{
var removed:Boolean;
var removedLocally:Boolean;
var i:uint;
var tl:uint;
var pName:String;
var eventScope:Object;
var p_scope = _arg1;
var p_properties = _arg2;
var p_timeStart = _arg3;
var p_timeComplete = _arg4;
removed = false;
tl = _tweenList.length;
i = 0;
while (i < tl) {
if (((Boolean(_tweenList[i])) && ((p_scope == _tweenList[i].scope)))){
if ((((p_timeComplete > _tweenList[i].timeStart)) && ((p_timeStart < _tweenList[i].timeComplete)))){
removedLocally = false;
for (pName in _tweenList[i].properties) {
if (Boolean(p_properties[pName])){
if (Boolean(_tweenList[i].onOverwrite)){
eventScope = (Boolean(_tweenList[i].onOverwriteScope)) ? _tweenList[i].onOverwriteScope : _tweenList[i].scope;
try {
_tweenList[i].onOverwrite.apply(eventScope, _tweenList[i].onOverwriteParams);
} catch(e:Error) {
handleError(_tweenList[i], e, "onOverwrite");
};
};
_tweenList[i].properties[pName] = undefined;
delete _tweenList[i].properties[pName];
removedLocally = true;
removed = true;
};
};
if (removedLocally){
if (AuxFunctions.getObjectLength(_tweenList[i].properties) == 0){
removeTweenByIndex(i);
};
};
};
};
i = (i + 1);
};
return (removed);
}
public static function registerSpecialPropertySplitter(_arg1:String, _arg2:Function, _arg3:Array=null):void{
var _local4:SpecialPropertySplitter;
if (!_inited){
init();
};
_local4 = new SpecialPropertySplitter(_arg2, _arg3);
_specialPropertySplitterList[_arg1] = _local4;
}
public static function removeTweenByIndex(_arg1:Number, _arg2:Boolean=false):Boolean{
_tweenList[_arg1] = null;
if (_arg2){
_tweenList.splice(_arg1, 1);
};
return (true);
}
public static function resumeTweens(_arg1:Object, ... _args):Boolean{
var _local3:Array;
var _local4:uint;
_local3 = new Array();
_local4 = 0;
while (_local4 < _args.length) {
if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){
_local3.push(_args[_local4]);
};
_local4++;
};
return (affectTweens(resumeTweenByIndex, _arg1, _local3));
}
public static function pauseTweens(_arg1:Object, ... _args):Boolean{
var _local3:Array;
var _local4:uint;
_local3 = new Array();
_local4 = 0;
while (_local4 < _args.length) {
if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){
_local3.push(_args[_local4]);
};
_local4++;
};
return (affectTweens(pauseTweenByIndex, _arg1, _local3));
}
}
}//package caurina.transitions
Section 10
//TweenListObj (caurina.transitions.TweenListObj)
package caurina.transitions {
public class TweenListObj {
public var onUpdate:Function;
public var useFrames:Boolean;
public var hasStarted:Boolean;
public var onOverwriteParams:Array;
public var timeStart:Number;
public var count:Number;
public var timeComplete:Number;
public var onStartParams:Array;
public var onUpdateScope:Object;
public var rounded:Boolean;
public var onUpdateParams:Array;
public var properties:Object;
public var onComplete:Function;
public var transitionParams:Object;
public var updatesSkipped:Number;
public var onStart:Function;
public var onOverwriteScope:Object;
public var skipUpdates:Number;
public var onStartScope:Object;
public var scope:Object;
public var transition:Function;
public var timePaused:Number;
public var onCompleteParams:Array;
public var timesCalled:Number;
public var isCaller:Boolean;
public var onError:Function;
public var onErrorScope:Object;
public var onOverwrite:Function;
public var isPaused:Boolean;
public var waitFrames:Boolean;
public var onCompleteScope:Object;
public function TweenListObj(_arg1:Object, _arg2:Number, _arg3:Number, _arg4:Boolean, _arg5:Function, _arg6:Object){
scope = _arg1;
timeStart = _arg2;
timeComplete = _arg3;
useFrames = _arg4;
transition = _arg5;
transitionParams = _arg6;
properties = new Object();
isPaused = false;
timePaused = undefined;
isCaller = false;
updatesSkipped = 0;
timesCalled = 0;
skipUpdates = 0;
hasStarted = false;
}
public function clone(_arg1:Boolean):TweenListObj{
var _local2:TweenListObj;
var _local3:String;
_local2 = new TweenListObj(scope, timeStart, timeComplete, useFrames, transition, transitionParams);
_local2.properties = new Array();
for (_local3 in properties) {
_local2.properties[_local3] = properties[_local3].clone();
};
_local2.skipUpdates = skipUpdates;
_local2.updatesSkipped = updatesSkipped;
if (!_arg1){
_local2.onStart = onStart;
_local2.onUpdate = onUpdate;
_local2.onComplete = onComplete;
_local2.onOverwrite = onOverwrite;
_local2.onError = onError;
_local2.onStartParams = onStartParams;
_local2.onUpdateParams = onUpdateParams;
_local2.onCompleteParams = onCompleteParams;
_local2.onOverwriteParams = onOverwriteParams;
_local2.onStartScope = onStartScope;
_local2.onUpdateScope = onUpdateScope;
_local2.onCompleteScope = onCompleteScope;
_local2.onOverwriteScope = onOverwriteScope;
_local2.onErrorScope = onErrorScope;
};
_local2.rounded = rounded;
_local2.isPaused = isPaused;
_local2.timePaused = timePaused;
_local2.isCaller = isCaller;
_local2.count = count;
_local2.timesCalled = timesCalled;
_local2.waitFrames = waitFrames;
_local2.hasStarted = hasStarted;
return (_local2);
}
public function toString():String{
var _local1:String;
var _local2:Boolean;
var _local3:String;
_local1 = "\n[TweenListObj ";
_local1 = (_local1 + ("scope:" + String(scope)));
_local1 = (_local1 + ", properties:");
_local2 = true;
for (_local3 in properties) {
if (!_local2){
_local1 = (_local1 + ",");
};
_local1 = (_local1 + ("[name:" + properties[_local3].name));
_local1 = (_local1 + (",valueStart:" + properties[_local3].valueStart));
_local1 = (_local1 + (",valueComplete:" + properties[_local3].valueComplete));
_local1 = (_local1 + "]");
_local2 = false;
};
_local1 = (_local1 + (", timeStart:" + String(timeStart)));
_local1 = (_local1 + (", timeComplete:" + String(timeComplete)));
_local1 = (_local1 + (", useFrames:" + String(useFrames)));
_local1 = (_local1 + (", transition:" + String(transition)));
_local1 = (_local1 + (", transitionParams:" + String(transitionParams)));
if (skipUpdates){
_local1 = (_local1 + (", skipUpdates:" + String(skipUpdates)));
};
if (updatesSkipped){
_local1 = (_local1 + (", updatesSkipped:" + String(updatesSkipped)));
};
if (Boolean(onStart)){
_local1 = (_local1 + (", onStart:" + String(onStart)));
};
if (Boolean(onUpdate)){
_local1 = (_local1 + (", onUpdate:" + String(onUpdate)));
};
if (Boolean(onComplete)){
_local1 = (_local1 + (", onComplete:" + String(onComplete)));
};
if (Boolean(onOverwrite)){
_local1 = (_local1 + (", onOverwrite:" + String(onOverwrite)));
};
if (Boolean(onError)){
_local1 = (_local1 + (", onError:" + String(onError)));
};
if (onStartParams){
_local1 = (_local1 + (", onStartParams:" + String(onStartParams)));
};
if (onUpdateParams){
_local1 = (_local1 + (", onUpdateParams:" + String(onUpdateParams)));
};
if (onCompleteParams){
_local1 = (_local1 + (", onCompleteParams:" + String(onCompleteParams)));
};
if (onOverwriteParams){
_local1 = (_local1 + (", onOverwriteParams:" + String(onOverwriteParams)));
};
if (onStartScope){
_local1 = (_local1 + (", onStartScope:" + String(onStartScope)));
};
if (onUpdateScope){
_local1 = (_local1 + (", onUpdateScope:" + String(onUpdateScope)));
};
if (onCompleteScope){
_local1 = (_local1 + (", onCompleteScope:" + String(onCompleteScope)));
};
if (onOverwriteScope){
_local1 = (_local1 + (", onOverwriteScope:" + String(onOverwriteScope)));
};
if (onErrorScope){
_local1 = (_local1 + (", onErrorScope:" + String(onErrorScope)));
};
if (rounded){
_local1 = (_local1 + (", rounded:" + String(rounded)));
};
if (isPaused){
_local1 = (_local1 + (", isPaused:" + String(isPaused)));
};
if (timePaused){
_local1 = (_local1 + (", timePaused:" + String(timePaused)));
};
if (isCaller){
_local1 = (_local1 + (", isCaller:" + String(isCaller)));
};
if (count){
_local1 = (_local1 + (", count:" + String(count)));
};
if (timesCalled){
_local1 = (_local1 + (", timesCalled:" + String(timesCalled)));
};
if (waitFrames){
_local1 = (_local1 + (", waitFrames:" + String(waitFrames)));
};
if (hasStarted){
_local1 = (_local1 + (", hasStarted:" + String(hasStarted)));
};
_local1 = (_local1 + "]\n");
return (_local1);
}
public static function makePropertiesChain(_arg1:Object):Object{
var _local2:Object;
var _local3:Object;
var _local4:Object;
var _local5:Object;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local2 = _arg1.base;
if (_local2){
_local3 = {};
if ((_local2 is Array)){
_local4 = [];
_local8 = 0;
while (_local8 < _local2.length) {
_local4.push(_local2[_local8]);
_local8++;
};
} else {
_local4 = [_local2];
};
_local4.push(_arg1);
_local6 = _local4.length;
_local7 = 0;
while (_local7 < _local6) {
if (_local4[_local7]["base"]){
_local5 = AuxFunctions.concatObjects(makePropertiesChain(_local4[_local7]["base"]), _local4[_local7]);
} else {
_local5 = _local4[_local7];
};
_local3 = AuxFunctions.concatObjects(_local3, _local5);
_local7++;
};
if (_local3["base"]){
delete _local3["base"];
};
return (_local3);
//unresolved jump
};
return (_arg1);
}
}
}//package caurina.transitions
Section 11
//AABRDetector (org.generalrelativity.foam.dynamics.collision.coarse.AABRDetector)
package org.generalrelativity.foam.dynamics.collision.coarse {
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.collision.geom.*;
import org.generalrelativity.foam.dynamics.collision.fine.sat.*;
import org.generalrelativity.foam.dynamics.enum.*;
import flash.utils.*;
public class AABRDetector implements ICoarseCollisionDetector {
private var _staticAABRCache:Dictionary;
private var _dynamicLength:int;
private var _factory:ICollisionFactory;
private var _dynamicCollidables:Array;
private var _staticCollidables:Array;
private var _dynamicAABRCache:Dictionary;
private var _collidablesLength:int;
public function AABRDetector(){
_staticAABRCache = new Dictionary(true);
_dynamicAABRCache = new Dictionary(true);
_staticCollidables = new Array();
_dynamicCollidables = new Array();
_factory = new SATCollisionFactory();
}
public function getCandidates():Array{
var _local1:Array;
var _local2:AABR;
var _local3:AABR;
var _local4:int;
var _local5:int;
var _local6:Array;
_dynamicAABRCache = new Dictionary(true);
_local1 = new Array();
_local4 = -1;
_local6 = _dynamicCollidables.concat(_staticCollidables);
while (++_local4 < _dynamicLength) {
_local2 = getBoundedAABR(_dynamicCollidables[_local4]);
_local5 = _local4;
while (++_local5 < _collidablesLength) {
_local3 = getBoundedAABR(_local6[_local5]);
if (_local2.hasCollision(_local3)){
_local1.push(_factory.getCollisionDetector(_local6[_local4], _local6[_local5]));
};
};
};
return (_local1);
}
private function getBoundedAABR(_arg1:IBody):AABR{
var _local2:AABR;
if (_dynamicAABRCache[_arg1]){
return (AABR(_dynamicAABRCache[_arg1]));
};
if (_staticAABRCache[_arg1]){
return (AABR(_staticAABRCache[_arg1]));
};
_local2 = new AABR();
_local2.bound(_arg1);
return (_local2);
}
public function set factory(_arg1:ICollisionFactory):void{
_factory = _arg1;
}
public function removeCollidable(_arg1:ISimulatable):void{
var _local2:int;
_local2 = _dynamicCollidables.indexOf(_arg1);
if (_local2 > -1){
_dynamicCollidables.splice(_dynamicCollidables.indexOf(_arg1), 1);
} else {
_local2 = _staticCollidables.indexOf(_arg1);
if (_local2 > -1){
_staticCollidables.splice(_staticCollidables.indexOf(_arg1), 1);
};
};
_dynamicLength = _dynamicCollidables.length;
_collidablesLength = (_dynamicLength + _staticCollidables.length);
}
public function addCollidable(_arg1:ISimulatable):void{
if (_arg1.mass == Simplification.INFINITE_MASS){
_staticCollidables.push(_arg1);
} else {
_dynamicCollidables.push(_arg1);
_dynamicLength++;
};
_collidablesLength++;
}
public function getDynamicCollidables():Array{
return (_dynamicCollidables);
}
}
}//package org.generalrelativity.foam.dynamics.collision.coarse
Section 12
//CollisionType (org.generalrelativity.foam.dynamics.collision.enum.CollisionType)
package org.generalrelativity.foam.dynamics.collision.enum {
public class CollisionType {
public static const CIRCLE:String = "circle";
public static const ABSTRACT_PARTICLE:String = "abstract_particle";
public static const CUBIC_BEZIER_CURVE:String = "cubic_bezier_curve";
public static const RIGID_BODY:String = "rigid_body";
}
}//package org.generalrelativity.foam.dynamics.collision.enum
Section 13
//AxisProjection (org.generalrelativity.foam.dynamics.collision.fine.sat.AxisProjection)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class AxisProjection {
public var min:Number;
public var max:Number;
public function AxisProjection(_arg1:IBody, _arg2:Vector){
project(_arg1, _arg2);
}
protected function project(_arg1:IBody, _arg2:Vector):void{
var _local3:RotationMatrix;
var _local4:Number;
var _local5:Number;
_local3 = _arg1.rotation;
_local4 = _arg2.dot(_local3.getVectorProduct(Vector(_arg1.vertices[0])).plus(_arg1.position));
min = _local4;
max = _local4;
_local5 = 0;
while (++_local5 < _arg1.vertices.length) {
_local4 = _arg2.dot(_local3.getVectorProduct(Vector(_arg1.vertices[_local5])).plus(_arg1.position));
if (_local4 < min){
min = _local4;
} else {
if (_local4 > max){
max = _local4;
};
};
};
}
public function getDistance(_arg1:AxisProjection):Number{
if (min < _arg1.min){
return ((_arg1.min - max));
};
return ((min - _arg1.max));
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 14
//BezierDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.BezierDetector)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class BezierDetector implements IFineCollisionDetector {
protected var detectors:Array;
protected var body2:IBody;
protected var curve:CubicBezierCurve;
public function BezierDetector(_arg1:CubicBezierCurve, _arg2:IBody){
this.curve = _arg1;
this.body2 = _arg2;
}
public function getContacts():Array{
var _local1:Array;
_local1 = new Array();
while (detectors.length) {
_local1 = _local1.concat(IFineCollisionDetector(detectors.pop()).getContacts());
};
return (_local1);
}
public function hasCollision():Boolean{
var _local1:IFineCollisionDetector;
var _local2:IBody;
detectors = new Array();
for each (_local2 in curve.lines) {
if ((body2 is Circle)){
_local1 = new CirclePolygonDetector(Circle(body2), _local2);
} else {
_local1 = new PolygonPolygonDetector(_local2, body2);
};
if (_local1.hasCollision()){
detectors.push(_local1);
};
};
return ((detectors.length > 0));
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 15
//CircleAxisProjection (org.generalrelativity.foam.dynamics.collision.fine.sat.CircleAxisProjection)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class CircleAxisProjection extends AxisProjection {
public function CircleAxisProjection(_arg1:Circle, _arg2:Vector){
super(_arg1, _arg2);
}
override protected function project(_arg1:IBody, _arg2:Vector):void{
var _local3:Circle;
var _local4:Number;
_local3 = Circle(_arg1);
_local4 = _arg2.dot(_local3.position);
min = (_local4 - _local3.radius);
max = (_local4 + _local3.radius);
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 16
//CircleCircleDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.CircleCircleDetector)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class CircleCircleDetector implements IFineCollisionDetector {
public var circle1:Circle;
public var dist:Number;
public var circle2:Circle;
public function CircleCircleDetector(_arg1:Circle, _arg2:Circle){
this.circle1 = _arg1;
this.circle2 = _arg2;
}
public function getContacts():Array{
var _local1:Vector;
var _local2:Number;
var _local3:Vector;
var _local4:Vector;
dist = Math.sqrt(dist);
_local1 = circle1.position.minus(circle2.position);
_local2 = ((circle1.radius + circle2.radius) - dist);
_local1.normalize();
_local3 = _local1.times(_local2);
_local3.dividedByEquals((circle1.inverseMass + circle2.inverseMass));
circle1.x = (circle1.x + (_local3.x * circle1.inverseMass));
circle1.y = (circle1.y + (_local3.y * circle1.inverseMass));
circle2.x = (circle2.x - (_local3.x * circle2.inverseMass));
circle2.y = (circle2.y - (_local3.y * circle2.inverseMass));
_local4 = circle1.position.minus(_local1.times(circle1.radius));
return ([new Contact(_local4, circle1, circle2, _local1)]);
}
public function hasCollision():Boolean{
var _local1:Vector;
_local1 = circle1.position.minus(circle2.position);
dist = _local1.dot(_local1);
return ((dist <= ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius))));
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 17
//CirclePolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.CirclePolygonDetector)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class CirclePolygonDetector implements IFineCollisionDetector {
public var body:IBody;
public var minDistance:Number;
public var penetrationAxis:Vector;
public var circle:Circle;
public function CirclePolygonDetector(_arg1:Circle, _arg2:IBody){
this.circle = _arg1;
this.body = _arg2;
}
public function getContacts():Array{
var _local1:Vector;
var _local2:Vector;
var _local3:Vector;
_local1 = circle.position.minus(body.position);
if (_local1.dot(penetrationAxis) < 0){
penetrationAxis.negate();
};
_local2 = penetrationAxis.times(minDistance);
_local2.dividedByEquals((circle.inverseMass + body.inverseMass));
circle.x = (circle.x + (_local2.x * circle.inverseMass));
circle.y = (circle.y + (_local2.y * circle.inverseMass));
body.x = (body.x - (_local2.x * body.inverseMass));
body.y = (body.y - (_local2.y * body.inverseMass));
_local3 = circle.position.minus(penetrationAxis.times(circle.radius));
return ([new Contact(_local3, circle, body, penetrationAxis)]);
}
public function hasCollision():Boolean{
var _local1:Vector;
var _local2:CircleAxisProjection;
var _local3:AxisProjection;
var _local4:RotationMatrix;
var _local5:Array;
var _local6:int;
var _local7:Number;
var _local8:Vector;
var _local9:Number;
var _local10:Vector;
var _local11:Vector;
var _local12:Number;
var _local13:Vector;
var _local14:Number;
if ((((circle.inverseMass == 0)) && ((body.inverseMass == 0)))){
return (false);
};
_local4 = body.rotation;
minDistance = Number.MAX_VALUE;
_local5 = body.edges;
_local6 = _local5.length;
_local7 = -1;
while (++_local7 < _local6) {
_local1 = _local4.getVectorProduct((_local5[_local7] as Vector));
_local11 = new Vector(-(_local1.y), _local1.x);
_local11.normalize();
_local2 = new CircleAxisProjection(circle, _local11);
_local3 = new AxisProjection(body, _local11);
_local12 = _local2.getDistance(_local3);
if (_local12 > 0){
return (false);
};
_local12 = Math.abs(_local12);
if (_local12 < minDistance){
minDistance = _local12;
penetrationAxis = _local11;
};
};
_local9 = Number.MAX_VALUE;
for each (_local10 in body.vertices) {
_local8 = body.rotation.getVectorProduct(_local10).plus(body.position);
_local13 = circle.position.minus(_local8);
_local14 = ((_local13.x * _local13.x) + (_local13.y * _local13.y));
if (_local14 < _local9){
_local9 = _local14;
_local11 = _local13;
};
};
_local11.normalize();
_local2 = new CircleAxisProjection(circle, _local11);
_local3 = new AxisProjection(body, _local11);
_local12 = _local3.getDistance(_local2);
if (_local12 > 0){
return (false);
};
_local12 = Math.abs(_local12);
if (_local12 < minDistance){
minDistance = _local12;
penetrationAxis = _local11;
};
return (true);
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 18
//PointPolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.PointPolygonDetector)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class PointPolygonDetector {
protected var point:Vector;
protected var body:IBody;
protected static const EPSILON:Number = 15;
public function PointPolygonDetector(_arg1:IBody, _arg2:Vector){
this.body = _arg1;
this.point = _arg2;
}
public function hasCollision():Boolean{
var _local1:Vector;
var _local2:RotationMatrix;
var _local3:int;
var _local4:Vector;
var _local5:AxisProjection;
var _local6:Number;
var _local7:Number;
var _local8:Number;
if ((body is Circle)){
_local8 = point.minus(body.position).magnitude;
if (_local8 <= Circle(body).radius){
return (true);
};
return (false);
};
_local2 = body.rotation;
_local3 = body.edges.length;
_local7 = -1;
while (++_local7 < _local3) {
_local1 = _local2.getVectorProduct((body.edges[_local7] as Vector));
_local4 = new Vector(-(_local1.y), _local1.x);
_local4.normalize();
_local5 = new AxisProjection(body, _local4);
_local6 = _local4.dot(point);
if (((((_local6 + PointPolygonDetector.EPSILON) < _local5.min)) || (((_local6 - PointPolygonDetector.EPSILON) > _local5.max)))){
return (false);
};
};
_local4 = point.minus(body.position);
_local4.normalize();
_local5 = new AxisProjection(body, _local4);
_local6 = _local4.dot(point);
if (((((_local6 + PointPolygonDetector.EPSILON) < _local5.min)) || (((_local6 - PointPolygonDetector.EPSILON) > _local5.max)))){
return (false);
};
return (true);
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 19
//PolygonPolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.PolygonPolygonDetector)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.collision.*;
import flash.utils.*;
public class PolygonPolygonDetector implements IFineCollisionDetector {
public var penetrationAxis:Vector;
public var body2:IBody;
public var body1:IBody;
private var swapBodies:Boolean;
public var minDistance:Number;
public static const EPSILON:Number = 0.1;
public function PolygonPolygonDetector(_arg1:IBody, _arg2:IBody){
this.body1 = _arg1;
this.body2 = _arg2;
swapBodies = true;
}
public function getContacts():Array{
var _local1:Vector;
var _local2:Vector;
var _local3:Number;
var _local4:Array;
var _local5:Vector;
var _local6:RotationMatrix;
var _local7:Vector;
var _local8:Array;
var _local9:Array;
var _local10:IBody;
var _local11:Vector;
var _local12:Number;
var _local13:Vector;
var _local14:Dictionary;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Array;
if (swapBodies){
_local10 = body1;
body1 = body2;
body2 = _local10;
};
_local1 = body1.position.minus(body2.position);
if (_local1.dot(penetrationAxis) < 0){
penetrationAxis.negate();
};
_local2 = penetrationAxis.times(minDistance);
_local2.dividedByEquals((body1.inverseMass + body2.inverseMass));
body1.x = (body1.x + (_local2.x * body1.inverseMass));
body1.y = (body1.y + (_local2.y * body1.inverseMass));
body2.x = (body2.x - (_local2.x * body2.inverseMass));
body2.y = (body2.y - (_local2.y * body2.inverseMass));
_local3 = Number.MAX_VALUE;
_local5 = penetrationAxis.clone();
_local6 = body1.rotation;
for each (_local7 in body1.vertices) {
_local11 = _local6.getVectorProduct(_local7).plus(body1.position);
_local12 = _local5.dot(_local11);
if (_local12 < (_local3 + PolygonPolygonDetector.EPSILON)){
if (Math.abs((_local3 - _local12)) < PolygonPolygonDetector.EPSILON){
_local4 = [_local4[0], _local11];
} else {
_local4 = [_local11];
_local3 = _local12;
};
};
};
if (_local4.length == 1){
return ([new Contact(_local4[0], body1, body2, penetrationAxis)]);
};
_local3 = Number.MAX_VALUE;
_local5.negate();
_local6 = body2.rotation;
for each (_local7 in body2.vertices) {
_local11 = _local6.getVectorProduct(_local7).plus(body2.position);
_local12 = _local5.dot(_local11);
if (_local12 < (_local3 + PolygonPolygonDetector.EPSILON)){
if (Math.abs((_local3 - _local12)) < PolygonPolygonDetector.EPSILON){
_local8 = [_local8[0], _local11];
} else {
_local8 = [_local11];
_local3 = _local12;
};
};
};
_local9 = new Array();
if (_local8.length == 2){
_local13 = penetrationAxis.getPerp().getUnit();
_local14 = new Dictionary(true);
_local15 = _local13.dot((_local4[0] as Vector));
_local16 = _local13.dot((_local4[1] as Vector));
_local17 = _local13.dot((_local8[0] as Vector));
_local18 = _local13.dot((_local8[1] as Vector));
_local14[_local15] = _local4[0];
_local14[_local16] = _local4[1];
_local14[_local17] = _local8[0];
_local14[_local18] = _local8[1];
_local19 = [_local15, _local16, _local17, _local18];
_local19.sort(Array.DESCENDING);
_local9.push(new Contact(_local14[_local19[1]], body1, body2, penetrationAxis), new Contact(_local14[_local19[2]], body1, body2, penetrationAxis));
} else {
_local9.push(new Contact(_local8[0], body1, body2, penetrationAxis));
};
return (_local9);
}
public function hasCollision():Boolean{
var _local1:Vector;
var _local2:AxisProjection;
var _local3:AxisProjection;
var _local4:RotationMatrix;
var _local5:Array;
var _local6:int;
var _local7:Number;
var _local8:Vector;
var _local9:Number;
if ((((body1.inverseMass == 0)) && ((body2.inverseMass == 0)))){
return (false);
};
_local4 = body1.rotation;
minDistance = Number.MAX_VALUE;
_local5 = body1.edges.concat(body2.edges);
_local6 = _local5.length;
_local7 = -1;
while (++_local7 < _local6) {
if (_local7 == body1.edges.length){
_local4 = body2.rotation;
};
_local1 = _local4.getVectorProduct((_local5[_local7] as Vector));
_local8 = new Vector(-(_local1.y), _local1.x);
_local8.normalize();
_local2 = new AxisProjection(body1, _local8);
_local3 = new AxisProjection(body2, _local8);
_local9 = _local2.getDistance(_local3);
if (_local9 > 0){
return (false);
};
_local9 = ((_local9 < 0)) ? -(_local9) : _local9;
if (_local9 < minDistance){
minDistance = _local9;
penetrationAxis = _local8;
if (((swapBodies) && ((_local7 > body1.edges.length)))){
swapBodies = false;
};
};
};
return (true);
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 20
//SATCollisionFactory (org.generalrelativity.foam.dynamics.collision.fine.sat.SATCollisionFactory)
package org.generalrelativity.foam.dynamics.collision.fine.sat {
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.element.body.*;
import org.generalrelativity.foam.dynamics.collision.enum.*;
import flash.utils.*;
public class SATCollisionFactory implements ICollisionFactory {
private var detectorMap:Dictionary;
public function SATCollisionFactory(){
buildDetectorMap();
}
public function getCollisionDetector(_arg1:ISimulatable, _arg2:ISimulatable):IFineCollisionDetector{
var _local3:Class;
_local3 = detectorMap[_arg1.collisionTypeID][_arg2.collisionTypeID];
if ((((_arg2 is Circle)) || ((_arg2 is CubicBezierCurve)))){
return (IFineCollisionDetector(new _local3(_arg2, _arg1)));
};
return (IFineCollisionDetector(new _local3(_arg1, _arg2)));
}
private function buildDetectorMap():void{
var _local1:Dictionary;
var _local2:Dictionary;
var _local3:Dictionary;
detectorMap = new Dictionary(true);
_local1 = new Dictionary(true);
_local1[CollisionType.CIRCLE] = CirclePolygonDetector;
_local1[CollisionType.CUBIC_BEZIER_CURVE] = BezierDetector;
_local1[CollisionType.RIGID_BODY] = PolygonPolygonDetector;
_local2 = new Dictionary(true);
_local2[CollisionType.RIGID_BODY] = CirclePolygonDetector;
_local2[CollisionType.CIRCLE] = CircleCircleDetector;
_local2[CollisionType.CUBIC_BEZIER_CURVE] = BezierDetector;
_local3 = new Dictionary(true);
_local3[CollisionType.RIGID_BODY] = BezierDetector;
_local3[CollisionType.CIRCLE] = BezierDetector;
detectorMap[CollisionType.RIGID_BODY] = _local1;
detectorMap[CollisionType.CIRCLE] = _local2;
detectorMap[CollisionType.CUBIC_BEZIER_CURVE] = _local3;
}
}
}//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 21
//AABR (org.generalrelativity.foam.dynamics.collision.geom.AABR)
package org.generalrelativity.foam.dynamics.collision.geom {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.element.body.*;
public class AABR {
public var minX:Number;
public var minY:Number;
public var maxX:Number;
public var maxY:Number;
private function updateBounds(_arg1:Vector):void{
if (_arg1.x < minX){
minX = _arg1.x;
} else {
if (_arg1.x > maxX){
maxX = _arg1.x;
};
};
if (_arg1.y < minY){
minY = _arg1.y;
} else {
if (_arg1.y > maxY){
maxY = _arg1.y;
};
};
}
public function hasCollision(_arg1:AABR):Boolean{
if (maxX < _arg1.minX){
return (false);
};
if (maxY < _arg1.minY){
return (false);
};
if (_arg1.maxX < minX){
return (false);
};
if (_arg1.maxY < minY){
return (false);
};
return (true);
}
public function bound(_arg1:IBody):void{
var _local2:Number;
var _local3:RotationMatrix;
var _local4:int;
var _local5:Vector;
if ((_arg1 is Circle)){
_local2 = Circle(_arg1).radius;
minX = (_arg1.x - _local2);
maxX = (_arg1.x + _local2);
minY = (_arg1.y - _local2);
maxY = (_arg1.y + _local2);
} else {
minX = (maxX = _arg1.x);
minY = (maxY = _arg1.y);
_local3 = _arg1.rotation;
_local4 = -1;
for each (_local5 in _arg1.vertices) {
updateBounds(_arg1.position.plus(_local3.getVectorProduct(_local5)));
};
};
}
}
}//package org.generalrelativity.foam.dynamics.collision.geom
Section 22
//CollisionResolver (org.generalrelativity.foam.dynamics.collision.CollisionResolver)
package org.generalrelativity.foam.dynamics.collision {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class CollisionResolver {
public static function resolve(_arg1:Array):void{
var _local2:IBody;
var _local3:IBody;
var _local4:Vector;
var _local5:Vector;
var _local6:Number;
var _local7:Boolean;
var _local8:Contact;
var _local9:Vector;
var _local10:Vector;
var _local11:Vector;
var _local12:Vector;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Vector;
var _local17:Vector;
var _local18:Vector;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Vector;
var _local23:Number;
var _local24:Vector;
var _local25:Number;
var _local26:Vector;
var _local27:Number;
var _local28:Number;
var _local29:Number;
_local6 = 0;
_local7 = false;
for each (_local8 in _arg1) {
_local2 = _local8.body1;
_local3 = _local8.body2;
if (_local2.foamLabel == 2){
if (_local3.foamLabel == 3){
_local4 = _local2.velocity;
if ((((_local4.x > 3)) || ((_local4.y > 3)))){
_local3.isAlive = false;
};
};
} else {
if (_local2.foamLabel == 3){
if (_local3.foamLabel == 2){
_local4 = _local3.velocity;
if ((((_local4.x > 3)) || ((_local4.y > 3)))){
_local2.isAlive = false;
};
};
};
};
_local9 = _local8.position.minus(_local8.body1.position);
_local10 = _local8.position.minus(_local8.body2.position);
_local11 = _local9.getPerp();
_local12 = _local10.getPerp();
_local13 = _local11.dot(_local8.normal);
_local14 = _local12.dot(_local8.normal);
_local15 = _local8.normal.dot(_local8.normal.times((_local2.inverseMass + _local3.inverseMass)));
_local15 = (_local15 + ((_local13 * _local13) * _local2.inverseI));
_local15 = (_local15 + ((_local14 * _local14) * _local3.inverseI));
_local16 = _local11.times(_local2.av).plus(_local2.velocity);
_local17 = _local12.times(_local3.av).plus(_local3.velocity);
_local18 = _local16.minus(_local17);
_local19 = _local18.dot(_local8.normal);
_local20 = ((_local2.elasticity + _local3.elasticity) * 0.5);
_local21 = ((-((1 + _local20)) * _local19) / _local15);
_local22 = _local8.normal.times((_local21 * _local2.inverseMass));
_local23 = (_local11.dot(_local8.normal.times(_local21)) * _local2.inverseI);
_local24 = _local8.normal.times((-(_local21) * _local3.inverseMass));
_local25 = (_local12.dot(_local8.normal.times(-(_local21))) * _local3.inverseI);
_local26 = _local8.normal.getPerp();
_local27 = _local11.dot(_local26);
_local28 = _local12.dot(_local26);
_local15 = _local26.dot(_local26.times((_local2.inverseMass + _local3.inverseMass)));
_local15 = (_local15 + ((_local27 * _local27) * _local2.inverseI));
_local15 = (_local15 + ((_local28 * _local28) * _local3.inverseI));
_local29 = _local18.dot(_local26);
_local21 = (((-(_local29) / _local15) * (_local2.friction + _local3.friction)) * 0.5);
_local22.plusEquals(_local26.times((_local21 * _local2.inverseMass)));
_local23 = (_local23 + (_local11.dot(_local26.times(_local21)) * _local2.inverseI));
_local24.plusEquals(_local26.times((-(_local21) * _local3.inverseMass)));
_local25 = (_local25 + (_local12.dot(_local26.times(-(_local21))) * _local3.inverseI));
_local2.vx = (_local2.vx + _local22.x);
_local2.vy = (_local2.vy + _local22.y);
_local2.av = (_local2.av + _local23);
_local3.vx = (_local3.vx + _local24.x);
_local3.vy = (_local3.vy + _local24.y);
_local3.av = (_local3.av + _local25);
if (_local2.foamLabel == 1){
_local4 = _local22;
_local4.x = Math.abs(_local4.x);
_local4.y = Math.abs(_local4.y);
if ((((_local4.x > 9)) || ((_local4.y > 9)))){
if (!_local7){
_local7 = true;
if (_local4.x > 9){
_local6 = _local4.x;
};
if (_local4.y > 9){
if (_local4.y > _local6){
_local6 = _local4.y;
};
};
_local6 = (_local6 / 2);
_local2.lifeLeft = (_local2.lifeLeft - _local6);
if (_local2.lifeLeft < 0){
_local2.lifeLeft = 0;
};
};
};
} else {
if (_local3.foamLabel == 1){
_local4 = _local24;
_local4.x = Math.abs(_local4.x);
_local4.y = Math.abs(_local4.y);
if ((((_local4.x > 9)) || ((_local4.y > 9)))){
if (!_local7){
_local7 = true;
if (_local4.x > 9){
_local6 = _local4.x;
};
if (_local4.y > 9){
if (_local4.y > _local6){
_local6 = _local4.y;
};
};
_local6 = (_local6 / 2);
_local3.lifeLeft = (_local3.lifeLeft - _local6);
if (_local3.lifeLeft < 0){
_local3.lifeLeft = 0;
};
};
};
};
};
};
}
}
}//package org.generalrelativity.foam.dynamics.collision
Section 23
//Contact (org.generalrelativity.foam.dynamics.collision.Contact)
package org.generalrelativity.foam.dynamics.collision {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class Contact {
public var normal:Vector;
public var position:Vector;
public var body2:IBody;
public var body1:IBody;
public function Contact(_arg1:Vector, _arg2:IBody, _arg3:IBody, _arg4:Vector){
this.position = _arg1;
this.body1 = _arg2;
this.body2 = _arg3;
this.normal = _arg4;
}
}
}//package org.generalrelativity.foam.dynamics.collision
Section 24
//ICoarseCollisionDetector (org.generalrelativity.foam.dynamics.collision.ICoarseCollisionDetector)
package org.generalrelativity.foam.dynamics.collision {
import org.generalrelativity.foam.dynamics.element.*;
public interface ICoarseCollisionDetector {
function addCollidable(_arg1:ISimulatable):void;
function set factory(_arg1:ICollisionFactory):void;
function removeCollidable(_arg1:ISimulatable):void;
function getCandidates():Array;
function getDynamicCollidables():Array;
}
}//package org.generalrelativity.foam.dynamics.collision
Section 25
//ICollisionFactory (org.generalrelativity.foam.dynamics.collision.ICollisionFactory)
package org.generalrelativity.foam.dynamics.collision {
import org.generalrelativity.foam.dynamics.element.*;
public interface ICollisionFactory {
function getCollisionDetector(_arg1:ISimulatable, _arg2:ISimulatable):IFineCollisionDetector;
}
}//package org.generalrelativity.foam.dynamics.collision
Section 26
//IFineCollisionDetector (org.generalrelativity.foam.dynamics.collision.IFineCollisionDetector)
package org.generalrelativity.foam.dynamics.collision {
public interface IFineCollisionDetector {
function hasCollision():Boolean;
function getContacts():Array;
}
}//package org.generalrelativity.foam.dynamics.collision
Section 27
//Circle (org.generalrelativity.foam.dynamics.element.body.Circle)
package org.generalrelativity.foam.dynamics.element.body {
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.dynamics.collision.enum.*;
public class Circle extends RigidBody {
public var radius:Number;
public function Circle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=100, _arg5:Number=0, _arg6:Number=0, _arg7:Number=0.5, _arg8:Number=0.15, _arg9:Number=0, _arg10:Number=0){
this.radius = _arg3;
super(_arg1, _arg2, _arg4, null, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10);
}
override public function get collisionTypeID():String{
return (CollisionType.CIRCLE);
}
override protected function calculateInertiaTensor():void{
if (mass == Simplification.INFINITE_MASS){
_I = Simplification.INFINITE_MASS;
_inverseI = 0;
return;
};
_I = ((radius * radius) * mass);
_inverseI = (1 / _I);
}
}
}//package org.generalrelativity.foam.dynamics.element.body
Section 28
//CubicBezierCurve (org.generalrelativity.foam.dynamics.element.body.CubicBezierCurve)
package org.generalrelativity.foam.dynamics.element.body {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.dynamics.collision.enum.*;
public class CubicBezierCurve extends RigidBody {
public var lines:Array;
protected var anchor1:Vector;
protected var height:Number;
protected var anchor2:Vector;
protected var control1:Vector;
protected var control2:Vector;
protected var resolution:int;
public function CubicBezierCurve(_arg1:Number, _arg2:Number, _arg3:Vector, _arg4:Vector, _arg5:Vector, _arg6:Vector, _arg7:int=7, _arg8:Number=INF, _arg9:Number=0, _arg10:Number=0, _arg11:Number=0, _arg12:Number=0, _arg13:Number=0.2, _arg14:Number=0.15, _arg15:Number=150){
super(_arg1, _arg2, _arg8, null, _arg9, _arg10, _arg13, _arg14, _arg11, _arg12);
this.height = _arg15;
this.resolution = _arg7;
this.control1 = _arg3;
this.control2 = _arg5;
this.anchor1 = _arg4;
this.anchor2 = _arg6;
createLines();
}
protected function createLines():void{
var _local1:int;
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:RigidBody;
_local8 = (1 / resolution);
_local11 = control1.x;
_local12 = control1.y;
lines = new Array();
while (++_local1 <= resolution) {
_local2 = (_local8 * _local1);
_local3 = (_local2 * _local2);
_local4 = (_local3 * _local2);
_local5 = (1 - _local2);
_local6 = ((1 - _local2) * _local5);
_local7 = (_local6 * _local5);
_local9 = ((((_local7 * control1.x) + (((3 * _local2) * _local6) * anchor1.x)) + (((3 * anchor2.x) * _local3) * _local5)) + (control2.x * _local4));
_local10 = ((((_local7 * control1.y) + (((3 * _local2) * _local6) * anchor1.y)) + (((3 * anchor2.y) * _local3) * _local5)) + (control2.y * _local4));
_local13 = (_local9 - _local11);
_local14 = (_local10 - _local12);
_local15 = new RigidBody(((x + _local11) + (_local13 / 2)), ((y + _local12) + (_local14 / 2)), Simplification.INFINITE_MASS, [new Vector((_local13 / 2), (_local14 / 2)), new Vector((-(_local13) / 2), (-(_local14) / 2))], 0, 0, 0, 0, friction);
_local11 = _local9;
_local12 = _local10;
lines.push(_local15);
};
}
override public function get collisionTypeID():String{
return (CollisionType.CUBIC_BEZIER_CURVE);
}
override protected function calculateInertiaTensor():void{
if (mass == Simplification.INFINITE_MASS){
_I = Simplification.INFINITE_MASS;
_inverseI = 0;
return;
};
_I = ((control1.magnitude * mass) / 3);
_I = (_I + ((control2.magnitude * mass) / 3));
_I = (_I + (((anchor1.magnitude * mass) / 3) * 0.5));
_I = (_I + (((anchor2.magnitude * mass) / 3) * 0.5));
_inverseI = (1 / _I);
}
}
}//package org.generalrelativity.foam.dynamics.element.body
Section 29
//RigidBody (org.generalrelativity.foam.dynamics.element.body.RigidBody)
package org.generalrelativity.foam.dynamics.element.body {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.ode.*;
import org.generalrelativity.foam.util.*;
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.dynamics.collision.enum.*;
import org.generalrelativity.foam.dynamics.element.particle.*;
public class RigidBody extends SimpleParticle implements IODE, ISimulatable, IBody {
protected var _torque:Number;
protected var _edges:Array;
protected var _vertices:Array;
protected var _inverseI:Number;
protected var _I:Number;
protected var _rotation:RotationMatrix;
public function RigidBody(_arg1:Number, _arg2:Number, _arg3:Number=100, _arg4:Array=null, _arg5:Number=0, _arg6:Number=0, _arg7:Number=0.2, _arg8:Number=0.25, _arg9:Number=0, _arg10:Number=0){
if (_arg4){
_vertices = _arg4;
_edges = ShapeUtil.getEdges(_arg4);
};
super(_arg1, _arg2, _arg5, _arg6, _arg3, _arg7, _arg8, 6);
this.q = _arg9;
this.av = _arg10;
_rotation = new RotationMatrix(_arg9);
clearTorque();
calculateInertiaTensor();
}
public function get vertices():Array{
return (_vertices);
}
public function addTorque(_arg1:Number):void{
_torque = (_torque + _arg1);
}
public function get torque():Number{
return (_torque);
}
public function get inverseI():Number{
return (_inverseI);
}
public function get av():Number{
return (_state[5]);
}
public function get I():Number{
return (_I);
}
public function getVelocityAtPoint(_arg1:Vector):Vector{
var _local2:Vector;
_local2 = _arg1.minus(position).getPerp();
_local2.normalize();
return (velocity.plus(_local2.times(av)));
}
public function get edges():Array{
return (_edges);
}
public function set av(_arg1:Number):void{
_state[5] = _arg1;
}
public function get q():Number{
return (_state[4]);
}
override public function getDerivative(_arg1:Array, _arg2:Array):void{
this._state = _arg1;
accumulateForces();
_arg2[0] = _arg1[2];
_arg2[1] = _arg1[3];
_arg2[2] = (_force.x * _inverseMass);
_arg2[3] = (_force.y * _inverseMass);
_arg2[4] = _arg1[5];
_arg2[5] = (_torque * _inverseI);
clearForces();
clearTorque();
}
public function get rotation():RotationMatrix{
if (_rotation.theta != q){
_rotation = new RotationMatrix(q);
};
return (_rotation);
}
override public function get collisionTypeID():String{
return (CollisionType.RIGID_BODY);
}
public function clearTorque():void{
_torque = 0;
}
public function set q(_arg1:Number):void{
_state[4] = _arg1;
}
protected function calculateInertiaTensor():void{
var _local1:Number;
var _local2:Vector;
if (mass == Simplification.INFINITE_MASS){
_I = Simplification.INFINITE_MASS;
_inverseI = 0;
return;
};
_I = 0;
_local1 = (mass / _vertices.length);
for each (_local2 in _vertices) {
_I = (_I + (_local2.dot(_local2) * _local1));
};
_inverseI = (1 / _I);
}
public function addForceAtPoint(_arg1:Vector, _arg2:Vector):void{
addForce(_arg2);
addTorque(_arg1.getPerp().dot(_arg2));
}
}
}//package org.generalrelativity.foam.dynamics.element.body
Section 30
//SimpleParticle (org.generalrelativity.foam.dynamics.element.particle.SimpleParticle)
package org.generalrelativity.foam.dynamics.element.particle {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.ode.*;
import org.generalrelativity.foam.util.*;
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.dynamics.collision.enum.*;
public class SimpleParticle implements IODE, ISimulatable {
protected var _lifeLeft:int;// = 100
protected var _isAlive:Boolean;// = true
protected var _inverseMass:Number;
protected var _state:Array;
protected var _alreadyDead:Boolean;// = false
protected var _generators:Array;
protected var _foamLabel:int;// = 0
protected var _mass:Number;
protected var _elasticity:Number;
protected var _friction:Number;
protected var _force:Vector;
public function SimpleParticle(_arg1:Number, _arg2:Number, _arg3:Number=0, _arg4:Number=0, _arg5:Number=100, _arg6:Number=0.2, _arg7:Number=0.25, _arg8:uint=4){
_foamLabel = 0;
_isAlive = true;
_alreadyDead = false;
_lifeLeft = 100;
super();
_state = new Array(_arg8);
_generators = new Array();
this.x = _arg1;
this.y = _arg2;
this.vx = _arg3;
this.vy = _arg4;
this.mass = _arg5;
this.friction = _arg6;
this.elasticity = _arg7;
clearForces();
}
public function set friction(_arg1:Number):void{
_friction = MathUtil.clamp(0, 1, _arg1);
}
public function set vy(_arg1:Number):void{
_state[3] = _arg1;
}
public function get friction():Number{
return (_friction);
}
public function getDerivative(_arg1:Array, _arg2:Array):void{
this._state = _arg1;
accumulateForces();
_arg2[0] = _arg1[2];
_arg2[1] = _arg1[3];
_arg2[2] = (_force.x * inverseMass);
_arg2[3] = (_force.y * inverseMass);
clearForces();
}
public function get state():Array{
return (_state);
}
public function set vx(_arg1:Number):void{
_state[2] = _arg1;
}
public function clearForces():void{
_force = new Vector();
}
public function set isAlive(_arg1:Boolean):void{
_isAlive = _arg1;
}
public function get lifeLeft():int{
return (_lifeLeft);
}
public function get collisionTypeID():String{
return (CollisionType.ABSTRACT_PARTICLE);
}
public function addForceGenerator(_arg1:IForceGenerator):void{
if (_generators.indexOf(_arg1) == -1){
_generators.push(_arg1);
};
}
public function set elasticity(_arg1:Number):void{
_elasticity = MathUtil.clamp(0, 1, _arg1);
}
public function get elasticity():Number{
return (_elasticity);
}
public function get foamLabel():int{
return (_foamLabel);
}
public function get position():Vector{
return (new Vector(x, y));
}
public function get vx():Number{
return (_state[2]);
}
public function get vy():Number{
return (_state[3]);
}
public function get inverseMass():Number{
return (_inverseMass);
}
public function set alreadyDead(_arg1:Boolean):void{
_alreadyDead = _arg1;
}
public function addForce(_arg1:Vector):void{
_force.plusEquals(_arg1);
}
public function removeForceGenerator(_arg1:IForceGenerator):void{
var _local2:int;
_local2 = _generators.indexOf(_arg1);
if (_local2 > -1){
_generators.splice(_generators.indexOf(_arg1), 1);
};
}
public function set lifeLeft(_arg1:int):void{
_lifeLeft = _arg1;
}
public function get alreadyDead():Boolean{
return (_alreadyDead);
}
public function get velocity():Vector{
return (new Vector(vx, vy));
}
public function get isAlive():Boolean{
return (_isAlive);
}
public function set mass(_arg1:Number):void{
_mass = _arg1;
if (_mass == Simplification.INFINITE_MASS){
_inverseMass = 0;
} else {
_inverseMass = (1 / _arg1);
};
}
public function accumulateForces():void{
var _local1:IForceGenerator;
for each (_local1 in _generators) {
_local1.generate(this);
};
}
public function set x(_arg1:Number):void{
_state[0] = _arg1;
}
public function set y(_arg1:Number):void{
_state[1] = _arg1;
}
public function get mass():Number{
return (_mass);
}
public function get y():Number{
return (_state[1]);
}
public function get force():Vector{
return (_force);
}
public function set foamLabel(_arg1:int):void{
_foamLabel = _arg1;
}
public function get x():Number{
return (_state[0]);
}
}
}//package org.generalrelativity.foam.dynamics.element.particle
Section 31
//IBody (org.generalrelativity.foam.dynamics.element.IBody)
package org.generalrelativity.foam.dynamics.element {
import org.generalrelativity.foam.math.*;
public interface IBody extends ISimulatable {
function get rotation():RotationMatrix;
function get vertices():Array;
function get I():Number;
function getVelocityAtPoint(_arg1:Vector):Vector;
function get edges():Array;
function set av(_arg1:Number):void;
function get inverseI():Number;
function addTorque(_arg1:Number):void;
function set q(_arg1:Number):void;
function clearTorque():void;
function get q():Number;
function addForceAtPoint(_arg1:Vector, _arg2:Vector):void;
function get av():Number;
}
}//package org.generalrelativity.foam.dynamics.element
Section 32
//ISimulatable (org.generalrelativity.foam.dynamics.element.ISimulatable)
package org.generalrelativity.foam.dynamics.element {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
public interface ISimulatable {
function get y():Number;
function get vx():Number;
function get isAlive():Boolean;
function set vx(_arg1:Number):void;
function set lifeLeft(_arg1:int):void;
function set y(_arg1:Number):void;
function get inverseMass():Number;
function removeForceGenerator(_arg1:IForceGenerator):void;
function set isAlive(_arg1:Boolean):void;
function set alreadyDead(_arg1:Boolean):void;
function addForce(_arg1:Vector):void;
function get vy():Number;
function set vy(_arg1:Number):void;
function addForceGenerator(_arg1:IForceGenerator):void;
function get alreadyDead():Boolean;
function get velocity():Vector;
function get lifeLeft():int;
function clearForces():void;
function get collisionTypeID():String;
function set mass(_arg1:Number):void;
function get position():Vector;
function accumulateForces():void;
function get force():Vector;
function set x(_arg1:Number):void;
function set elasticity(_arg1:Number):void;
function get mass():Number;
function get x():Number;
function get elasticity():Number;
function get friction():Number;
function set friction(_arg1:Number):void;
function set foamLabel(_arg1:int):void;
function get foamLabel():int;
}
}//package org.generalrelativity.foam.dynamics.element
Section 33
//Simplification (org.generalrelativity.foam.dynamics.enum.Simplification)
package org.generalrelativity.foam.dynamics.enum {
public class Simplification {
public static const INFINITE_MASS:Number = INF;
}
}//package org.generalrelativity.foam.dynamics.enum
Section 34
//Bungee (org.generalrelativity.foam.dynamics.force.spring.Bungee)
package org.generalrelativity.foam.dynamics.force.spring {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class Bungee extends Spring {
public function Bungee(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.4){
super(_arg1, _arg2, _arg3, _arg4);
}
override public function generate(_arg1:ISimulatable):void{
var _local2:Vector;
var _local3:Number;
_local2 = new Vector((element1.x - element2.x), (element1.y - element2.y));
_local3 = _local2.magnitude;
if (_local3 <= _restLength){
return;
};
_force = _local2.times((-(k) * (_local3 - _restLength)));
_force.minusEquals(new Vector(element1.vx, element1.vy).times(damp));
element1.addForce(_force);
}
}
}//package org.generalrelativity.foam.dynamics.force.spring
Section 35
//MouseSpring (org.generalrelativity.foam.dynamics.force.spring.MouseSpring)
package org.generalrelativity.foam.dynamics.force.spring {
import flash.display.*;
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
import org.generalrelativity.foam.dynamics.element.*;
public class MouseSpring extends SimpleForceGenerator implements IForceGenerator {
protected var body:IBody;
protected var displayObject:DisplayObject;
protected var k:Number;
protected var damp:Number;
protected var point:Vector;
protected var restLength:Number;
public function MouseSpring(_arg1:IBody, _arg2:Vector, _arg3:DisplayObject){
this.body = _arg1;
this.point = _arg1.rotation.getTransposeVectorProduct(_arg2);
this.displayObject = _arg3;
restLength = 40;
k = 0.001;
damp = 0.3;
_arg1.addForceGenerator(this);
}
public function getPointInWorldSpace():Vector{
var _local1:RotationMatrix;
var _local2:Vector;
_local1 = body.rotation;
_local2 = _local1.getVectorProduct(point);
return (_local2.plus(body.position));
}
public function destroy():void{
body.removeForceGenerator(this);
}
override public function generate(_arg1:ISimulatable):void{
var _local2:RotationMatrix;
var _local3:Vector;
var _local4:Vector;
var _local5:Vector;
_local2 = body.rotation;
_local3 = _local2.getVectorProduct(point);
_local4 = getPointInWorldSpace();
_local5 = new Vector((_local4.x - displayObject.mouseX), (_local4.y - displayObject.mouseY));
if (_local5.magnitude < restLength){
return;
};
_force = _local5.times((-(k) * (_local5.magnitude - restLength)));
_force.minusEquals(body.velocity.times(damp));
body.addForceAtPoint(_local3, _force);
}
}
}//package org.generalrelativity.foam.dynamics.force.spring
Section 36
//RigidBodyBungee (org.generalrelativity.foam.dynamics.force.spring.RigidBodyBungee)
package org.generalrelativity.foam.dynamics.force.spring {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class RigidBodyBungee extends RigidBodySpring {
public function RigidBodyBungee(_arg1:IBody, _arg2:Vector, _arg3:IBody, _arg4:Vector, _arg5:Number=0.01, _arg6:Number=0.01){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6);
}
override public function clone(_arg1:Boolean=true):Spring{
if (_arg1){
return (new RigidBodyBungee(IBody(element2), point2, IBody(element1), point1, k, damp));
};
return (new RigidBodyBungee(IBody(element1), point1, IBody(element2), point2, k, damp));
}
override public function generate(_arg1:ISimulatable):void{
var _local2:RotationMatrix;
var _local3:Vector;
var _local4:Vector;
var _local5:RotationMatrix;
var _local6:Vector;
var _local7:Vector;
var _local8:Vector;
var _local9:Number;
_local2 = IBody(element1).rotation;
_local3 = _local2.getVectorProduct(point1);
_local4 = _local3.plus(element1.position);
_local5 = IBody(element2).rotation;
_local6 = _local5.getVectorProduct(point2);
_local7 = _local6.plus(element2.position);
_local8 = new Vector((_local4.x - _local7.x), (_local4.y - _local7.y));
_local9 = _local8.magnitude;
if (_local9 <= _restLength){
return;
};
_force = _local8.times((-(k) * (_local8.magnitude - _restLength)));
_force.minusEquals(IBody(element1).getVelocityAtPoint(_local3).times(damp));
IBody(element1).addForceAtPoint(_local3, _force);
}
}
}//package org.generalrelativity.foam.dynamics.force.spring
Section 37
//RigidBodySpring (org.generalrelativity.foam.dynamics.force.spring.RigidBodySpring)
package org.generalrelativity.foam.dynamics.force.spring {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.util.*;
public class RigidBodySpring extends Spring {
protected var point1:Vector;
protected var point2:Vector;
public function RigidBodySpring(_arg1:IBody, _arg2:Vector, _arg3:IBody, _arg4:Vector, _arg5:Number=0.01, _arg6:Number=0.01){
var _local7:Vector;
var _local8:Vector;
super(_arg1, _arg3, _arg5, _arg6);
this.point1 = _arg2;
this.point2 = _arg4;
_local7 = _arg1.rotation.getVectorProduct(_arg2);
_local8 = _arg3.rotation.getVectorProduct(_arg4);
restLength = MathUtil.distance((_arg1.x + _local7.x), (_arg3.x + _local8.x), (_arg1.y + _local7.y), (_arg3.y + _local8.y));
}
override public function getPoint1InWorldSpace():Vector{
var _local1:RotationMatrix;
var _local2:Vector;
_local1 = IBody(element1).rotation;
_local2 = _local1.getVectorProduct(point1);
return (_local2.plus(element1.position));
}
override public function getPoint2InWorldSpace():Vector{
var _local1:RotationMatrix;
var _local2:Vector;
_local1 = IBody(element2).rotation;
_local2 = _local1.getVectorProduct(point2);
return (_local2.plus(element2.position));
}
override public function clone(_arg1:Boolean=true):Spring{
if (_arg1){
return (new RigidBodySpring(IBody(element2), point2, IBody(element1), point1, k, damp));
};
return (new RigidBodySpring(IBody(element1), point1, IBody(element2), point2, k, damp));
}
override public function generate(_arg1:ISimulatable):void{
var _local2:RotationMatrix;
var _local3:Vector;
var _local4:Vector;
var _local5:RotationMatrix;
var _local6:Vector;
var _local7:Vector;
var _local8:Vector;
_local2 = IBody(element1).rotation;
_local3 = _local2.getVectorProduct(point1);
_local4 = _local3.plus(new Vector(element1.x, element1.y));
_local5 = IBody(element2).rotation;
_local6 = _local5.getVectorProduct(point2);
_local7 = _local6.plus(new Vector(element2.x, element2.y));
_local8 = new Vector((_local4.x - _local7.x), (_local4.y - _local7.y));
_force = _local8.times((-(k) * (_local8.magnitude - _restLength)));
_force.minusEquals(IBody(element1).getVelocityAtPoint(_local3).times(damp));
IBody(element1).addForceAtPoint(_local3, _force);
}
}
}//package org.generalrelativity.foam.dynamics.force.spring
Section 38
//Spring (org.generalrelativity.foam.dynamics.force.spring.Spring)
package org.generalrelativity.foam.dynamics.force.spring {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.util.*;
public class Spring extends SimpleForceGenerator implements IForceGenerator {
protected var damp:Number;
protected var element1:ISimulatable;
protected var k:Number;
protected var element2:ISimulatable;
protected var _restLength:Number;
public function Spring(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.4){
this.element1 = _arg1;
this.element2 = _arg2;
this.k = _arg3;
this.damp = _arg4;
_arg1.addForceGenerator(this);
restLength = MathUtil.distance(_arg1.x, _arg2.x, _arg1.y, _arg2.y);
}
public function invert():void{
var _local1:ISimulatable;
element1.removeForceGenerator(this);
_local1 = ISimulatable(element2);
element2 = element1;
element1 = _local1;
element1.addForceGenerator(this);
}
public function getPoint1InWorldSpace():Vector{
return (element1.position);
}
public function getPoint2InWorldSpace():Vector{
return (element2.position);
}
public function set restLength(_arg1:Number):void{
_restLength = _arg1;
}
override public function generate(_arg1:ISimulatable):void{
var _local2:Vector;
_local2 = new Vector((element1.x - element2.x), (element1.y - element2.y));
_force = _local2.times((-(k) * (_local2.magnitude - _restLength)));
_force.minusEquals(new Vector(element1.vx, element1.vy).times(damp));
element1.addForce(_force);
}
public function clone(_arg1:Boolean=true):Spring{
if (_arg1){
return (new Spring(element2, element1, k, damp));
};
return (new Spring(element1, element2, k, damp));
}
public static function createDoubleSidedSpring(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.1):void{
var _local5:Spring;
_local5 = new Spring(_arg1, _arg2, _arg3, _arg4);
_local5 = new Spring(_arg2, _arg1, _arg3, _arg4);
}
}
}//package org.generalrelativity.foam.dynamics.force.spring
Section 39
//Friction (org.generalrelativity.foam.dynamics.force.Friction)
package org.generalrelativity.foam.dynamics.force {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class Friction extends SimpleForceGenerator implements IForceGenerator {
protected var coefficient:Number;
public function Friction(_arg1:Number=0.1){
this.coefficient = _arg1;
}
override public function generate(_arg1:ISimulatable):void{
var _local2:IBody;
_arg1.addForce(new Vector(((-(_arg1.vx) * coefficient) * _arg1.mass), ((-(_arg1.vy) * coefficient) * _arg1.mass)));
if ((_arg1 is IBody)){
_local2 = IBody(_arg1);
_local2.addTorque(((-(_local2.av) * coefficient) * _local2.I));
};
}
}
}//package org.generalrelativity.foam.dynamics.force
Section 40
//Gravity (org.generalrelativity.foam.dynamics.force.Gravity)
package org.generalrelativity.foam.dynamics.force {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class Gravity extends SimpleForceGenerator implements IForceGenerator {
public function Gravity(_arg1:Vector){
super(_arg1);
}
override public function generate(_arg1:ISimulatable):void{
_arg1.addForce(_force.times(_arg1.mass));
}
}
}//package org.generalrelativity.foam.dynamics.force
Section 41
//IForceGenerator (org.generalrelativity.foam.dynamics.force.IForceGenerator)
package org.generalrelativity.foam.dynamics.force {
import org.generalrelativity.foam.dynamics.element.*;
public interface IForceGenerator {
function generate(_arg1:ISimulatable):void;
}
}//package org.generalrelativity.foam.dynamics.force
Section 42
//SimpleForceGenerator (org.generalrelativity.foam.dynamics.force.SimpleForceGenerator)
package org.generalrelativity.foam.dynamics.force {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
public class SimpleForceGenerator implements IForceGenerator {
protected var _force:Vector;
public function SimpleForceGenerator(_arg1:Vector=null):void{
_force = _arg1;
}
public function generate(_arg1:ISimulatable):void{
_arg1.addForce(_force);
}
}
}//package org.generalrelativity.foam.dynamics.force
Section 43
//AbstractSolver (org.generalrelativity.foam.dynamics.ode.solver.AbstractSolver)
package org.generalrelativity.foam.dynamics.ode.solver {
import org.generalrelativity.foam.dynamics.ode.*;
public class AbstractSolver implements IODESolver {
protected var _ode:IODE;
public function AbstractSolver(_arg1:IODE):void{
_ode = _arg1;
}
public function get ode():IODE{
return (_ode);
}
public function step(_arg1:Number):void{
throw (new Error("AbstractSolver.step must be overridden"));
}
}
}//package org.generalrelativity.foam.dynamics.ode.solver
Section 44
//RK4 (org.generalrelativity.foam.dynamics.ode.solver.RK4)
package org.generalrelativity.foam.dynamics.ode.solver {
import org.generalrelativity.foam.dynamics.ode.*;
public class RK4 extends AbstractSolver implements IODESolver {
private var k1:Array;
private var k3:Array;
private var k4:Array;
private var k2:Array;
public function RK4(_arg1:IODE){
var ode = _arg1;
super(ode);
try {
k1 = new Array(ode.state.length);
k2 = new Array(ode.state.length);
k3 = new Array(ode.state.length);
k4 = new Array(ode.state.length);
} catch(error:Error) {
k1 = new Array();
k2 = new Array();
k3 = new Array();
k4 = new Array();
};
}
override public function step(_arg1:Number):void{
var _local2:Array;
var _local3:Array;
var _local4:int;
_local2 = new Array(_ode.state.length);
_local3 = _ode.state;
_local4 = -1;
_ode.getDerivative(_local3, k1);
while (++_local4 < _local3.length) {
_local2[_local4] = (_local3[_local4] + ((k1[_local4] * _arg1) * 0.5));
};
_local4 = -1;
_ode.getDerivative(_local2, k2);
while (++_local4 < _local3.length) {
_local2[_local4] = (_local3[_local4] + ((k2[_local4] * _arg1) * 0.5));
};
_local4 = -1;
_ode.getDerivative(_local2, k3);
while (++_local4 < _local3.length) {
_local2[_local4] = (_local3[_local4] + (k3[_local4] * _arg1));
};
_local4 = -1;
_ode.getDerivative(_local2, k4);
while (++_local4 < _local3.length) {
_local3[_local4] = (_local3[_local4] + ((_arg1 * (((k1[_local4] + (2 * k2[_local4])) + (2 * k3[_local4])) + k4[_local4])) / 6));
};
}
}
}//package org.generalrelativity.foam.dynamics.ode.solver
Section 45
//IODE (org.generalrelativity.foam.dynamics.ode.IODE)
package org.generalrelativity.foam.dynamics.ode {
public interface IODE {
function get state():Array;
function getDerivative(_arg1:Array, _arg2:Array):void;
}
}//package org.generalrelativity.foam.dynamics.ode
Section 46
//IODESolver (org.generalrelativity.foam.dynamics.ode.IODESolver)
package org.generalrelativity.foam.dynamics.ode {
public interface IODESolver {
function get ode():IODE;
function step(_arg1:Number):void;
}
}//package org.generalrelativity.foam.dynamics.ode
Section 47
//PhysicsEngine (org.generalrelativity.foam.dynamics.PhysicsEngine)
package org.generalrelativity.foam.dynamics {
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.dynamics.ode.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.collision.fine.sat.*;
import org.generalrelativity.foam.dynamics.collision.coarse.*;
public class PhysicsEngine {
private var _solverIterations:int;
private var _odeSolvers:Array;
private var _coarseDetector:ICoarseCollisionDetector;
private var _numODESolvers:int;
public static const SOLVER_ITERATIONS:int = 3;
public static const DEFAULT_COARSE_COLLISION_DETECTOR:Class = AABRDetector;
public function PhysicsEngine(){
_odeSolvers = new Array();
_solverIterations = PhysicsEngine.SOLVER_ITERATIONS;
}
public function setCoarseCollisionDetector(_arg1:ICoarseCollisionDetector):void{
_coarseDetector = _arg1;
}
public function addODESolver(_arg1:IODESolver):void{
_odeSolvers.push(_arg1);
_numODESolvers = _odeSolvers.length;
}
public function removeCollidable(_arg1:ISimulatable):void{
_coarseDetector.removeCollidable(_arg1);
}
public function addCollidable(_arg1:ISimulatable):void{
if (!_coarseDetector){
_coarseDetector = new PhysicsEngine.DEFAULT_COARSE_COLLISION_DETECTOR();
};
_coarseDetector.addCollidable(_arg1);
}
public function step(_arg1:Number=1):void{
var _local2:int;
var _local3:int;
var _local4:Number;
_local3 = 0;
_local4 = (_arg1 / _solverIterations);
while (++_local3 <= _solverIterations) {
_local2 = _numODESolvers;
while (--_local2 > -1) {
IODESolver(_odeSolvers[_local2]).step(_local4);
};
if (_coarseDetector){
resolveCollisions();
};
};
}
private function resolveCollisions():void{
var _local1:Array;
var _local2:IFineCollisionDetector;
_local1 = _coarseDetector.getCandidates();
for each (_local2 in _local1) {
if (_local2.hasCollision()){
CollisionResolver.resolve(_local2.getContacts());
};
};
}
public function set solverIterations(_arg1:int):void{
_solverIterations = Math.max(Math.abs(_arg1), 1);
}
public function setCollisionFactory(_arg1:ICollisionFactory):void{
_coarseDetector.factory = _arg1;
}
public function getBodyUnderPoint(_arg1:Vector):IBody{
var _local2:PointPolygonDetector;
var _local3:IODESolver;
for each (_local3 in _odeSolvers) {
if ((_local3.ode is IBody)){
_local2 = new PointPolygonDetector(IBody(_local3.ode), _arg1);
if (_local2.hasCollision()){
return (IBody(_local3.ode));
};
};
};
return (null);
}
public function removeODESolver(_arg1:IODESolver):void{
var _local2:int;
_local2 = _odeSolvers.indexOf(_arg1);
if (_local2 > -1){
_odeSolvers.splice(_odeSolvers.indexOf(_arg1), 1);
};
_numODESolvers = _odeSolvers.length;
}
}
}//package org.generalrelativity.foam.dynamics
Section 48
//RotationMatrix (org.generalrelativity.foam.math.RotationMatrix)
package org.generalrelativity.foam.math {
public class RotationMatrix {
protected var r21:Number;
protected var r11:Number;
protected var r12:Number;
protected var r22:Number;
protected var _theta:Number;
public function RotationMatrix(_arg1:Number=0){
this.theta = _arg1;
}
public function get theta():Number{
return (_theta);
}
public function getTransposeVectorProduct(_arg1:Vector):Vector{
return (new Vector(((r11 * _arg1.x) + (r21 * _arg1.y)), ((r12 * _arg1.x) + (r22 * _arg1.y))));
}
public function getVectorProduct(_arg1:Vector):Vector{
return (new Vector(((r11 * _arg1.x) + (r12 * _arg1.y)), ((r21 * _arg1.x) + (r22 * _arg1.y))));
}
public function set theta(_arg1:Number):void{
_theta = _arg1;
r11 = Math.cos(theta);
r21 = Math.sin(theta);
r12 = -(r21);
r22 = r11;
}
}
}//package org.generalrelativity.foam.math
Section 49
//Vector (org.generalrelativity.foam.math.Vector)
package org.generalrelativity.foam.math {
public class Vector {
public var y:Number;
public var x:Number;
public function Vector(_arg1:Number=0, _arg2:Number=0){
this.x = _arg1;
this.y = _arg2;
}
public function cross(_arg1:Vector):Number{
return (((x * _arg1.y) - (y * _arg1.x)));
}
public function dividedBy(_arg1:Number):Vector{
return (new Vector((x / _arg1), (y / _arg1)));
}
public function times(_arg1:Number):Vector{
return (new Vector((x * _arg1), (y * _arg1)));
}
public function dot(_arg1:Vector):Number{
return (((x * _arg1.x) + (y * _arg1.y)));
}
public function crossScalar(_arg1:Number):Vector{
return (new Vector((-(_arg1) * y), (_arg1 * x)));
}
public function normalize():void{
dividedByEquals(magnitude);
}
public function minusEquals(_arg1:Vector):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
}
public function get magnitude():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function negate():void{
x = (x * -1);
y = (y * -1);
}
public function plus(_arg1:Vector):Vector{
return (new Vector((x + _arg1.x), (y + _arg1.y)));
}
public function clone():Vector{
return (new Vector(x, y));
}
public function dividedByEquals(_arg1:Number):void{
x = (x / _arg1);
y = (y / _arg1);
}
public function getAngle(_arg1:Vector):Number{
return (Math.atan2((_arg1.y - y), (_arg1.x - x)));
}
public function timesEquals(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
}
public function getPerp():Vector{
return (new Vector(-(y), x));
}
public function minus(_arg1:Vector):Vector{
return (new Vector((x - _arg1.x), (y - _arg1.y)));
}
public function plusEquals(_arg1:Vector):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
}
public function getUnit():Vector{
return (dividedBy(magnitude));
}
public static function project(_arg1:Number, _arg2:Number):Vector{
return (new Vector((Math.cos(_arg1) * _arg2), (Math.sin(_arg1) * _arg2)));
}
}
}//package org.generalrelativity.foam.math
Section 50
//MathUtil (org.generalrelativity.foam.util.MathUtil)
package org.generalrelativity.foam.util {
public class MathUtil {
public static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
if (_arg3 < _arg1){
return (_arg1);
};
if (_arg3 > _arg2){
return (_arg2);
};
return (_arg3);
}
public static function distance(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
var _local5:Number;
var _local6:Number;
_local5 = (_arg1 - _arg2);
_local6 = (_arg3 - _arg4);
return (Math.sqrt(((_local5 * _local5) + (_local6 * _local6))));
}
}
}//package org.generalrelativity.foam.util
Section 51
//RenderingUtil (org.generalrelativity.foam.util.RenderingUtil)
package org.generalrelativity.foam.util {
import flash.display.*;
import org.generalrelativity.foam.math.*;
public class RenderingUtil {
public static function drawHash(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:RotationMatrix, _arg5:int=3, _arg6:int=8):void{
var _local7:Vector;
_arg1.lineStyle(1);
_local7 = _arg4.getVectorProduct(new Vector(-(_arg5), -(_arg5)));
_arg1.moveTo((_arg2 + _local7.x), (_arg3 + _local7.y));
_local7 = _arg4.getVectorProduct(new Vector(_arg5, _arg5));
_arg1.lineTo((_arg2 + _local7.x), (_arg3 + _local7.y));
_local7 = _arg4.getVectorProduct(new Vector(-(_arg5), _arg5));
_arg1.moveTo((_arg2 + _local7.x), (_arg3 + _local7.y));
_local7 = _arg4.getVectorProduct(new Vector(_arg5, -(_arg5)));
_arg1.lineTo((_arg2 + _local7.x), (_arg3 + _local7.y));
_arg1.drawCircle(_arg2, _arg3, _arg6);
}
public static function drawVector(_arg1:Graphics, _arg2:Vector, _arg3:Number=0, _arg4:Number=0, _arg5:Number=3):void{
var _local6:Vector;
var _local7:Vector;
_arg1.moveTo(_arg3, _arg4);
_local6 = _arg2.getUnit().times(_arg5);
_local7 = Vector.project((Math.atan2(_arg2.y, _arg2.x) - (Math.PI / 2)), _arg5);
_arg1.lineTo((_arg3 + _arg2.x), (_arg4 + _arg2.y));
_arg1.lineTo(((_arg3 + _arg2.x) + _local7.x), ((_arg4 + _arg2.y) + _local7.y));
_arg1.lineTo(((_arg3 + _arg2.x) + _local6.x), ((_arg4 + _arg2.y) + _local6.y));
_local7.negate();
_arg1.lineTo(((_arg3 + _arg2.x) + _local7.x), ((_arg4 + _arg2.y) + _local7.y));
_arg1.lineTo((_arg3 + _arg2.x), (_arg4 + _arg2.y));
_arg1.endFill();
}
}
}//package org.generalrelativity.foam.util
Section 52
//ShapeUtil (org.generalrelativity.foam.util.ShapeUtil)
package org.generalrelativity.foam.util {
import org.generalrelativity.foam.math.*;
public class ShapeUtil {
public static function getEdges(_arg1:Array):Array{
var _local2:Array;
var _local3:Vector;
var _local4:Vector;
var _local5:int;
_local2 = new Array();
_local5 = -1;
while (++_local5 < _arg1.length) {
_local3 = (_arg1[_local5] as Vector);
if ((_local5 + 1) == _arg1.length){
_local4 = (_arg1[0] as Vector);
} else {
_local4 = (_arg1[(_local5 + 1)] as Vector);
};
_local2.push(_local3.minus(_local4));
};
return (_local2);
}
public static function createRectangle(_arg1:Number, _arg2:Number):Array{
return ([new Vector((-(_arg1) / 2), (-(_arg2) / 2)), new Vector((_arg1 / 2), (-(_arg2) / 2)), new Vector((_arg1 / 2), (_arg2 / 2)), new Vector((-(_arg1) / 2), (_arg2 / 2))]);
}
public static function createSymmetricPolygon(_arg1:int=3, _arg2:Number=50, _arg3:Number=0):Array{
var _local4:Array;
var _local5:Number;
var _local6:int;
_local4 = new Array();
_local5 = (((360 / _arg1) * Math.PI) / 180);
_local6 = _arg1;
while (_local6--) {
_local4.push(new Vector((Math.cos(_arg3) * _arg2), (Math.sin(_arg3) * _arg2)));
_arg3 = (_arg3 + _local5);
};
return (_local4);
}
}
}//package org.generalrelativity.foam.util
Section 53
//SimpleMap (org.generalrelativity.foam.util.SimpleMap)
package org.generalrelativity.foam.util {
public class SimpleMap {
protected var _values:Array;
protected var _keys:Array;
public function SimpleMap(){
_keys = new Array();
_values = new Array();
}
public function remove(_arg1):void{
var _local2:int;
_local2 = getKeyIndex(_arg1);
if (_local2 > -1){
_keys.splice(_local2, 1);
_values.splice(_local2, 1);
};
}
public function getKey(_arg1){
var _local2:int;
_local2 = getValueIndex(_arg1);
if (_local2 > -1){
return (_keys[_local2]);
};
}
public function get length():int{
return (_keys.length);
}
public function put(_arg1, _arg2):void{
var _local3:int;
_local3 = getKeyIndex(_arg1);
if (_local3 > -1){
_values[_local3] = _arg2;
} else {
_keys.push(_arg1);
_values.push(_arg2);
};
}
public function getKeyIndex(_arg1):int{
return (_keys.indexOf(_arg1));
}
public function get values():Array{
return (_values.slice());
}
public function has(_arg1):Boolean{
return ((getKeyIndex(_arg1) > -1));
}
public function get keys():Array{
return (_keys.slice());
}
public function getValueIndex(_arg1):int{
return (_values.indexOf(_arg1));
}
public function getValue(_arg1){
var _local2:int;
_local2 = getKeyIndex(_arg1);
if (_local2 > -1){
return (_values[_local2]);
};
}
}
}//package org.generalrelativity.foam.util
Section 54
//DisplayObjectData (org.generalrelativity.foam.view.DisplayObjectData)
package org.generalrelativity.foam.view {
import flash.display.*;
public dynamic class DisplayObjectData {
protected var _displayObject:DisplayObject;
public var autoCenter:Boolean;
public var offsetX:Number;
public var offsetY:Number;
public var hasBeenDisplayed:Boolean;
public function DisplayObjectData(_arg1, _arg2:Number=0, _arg3:Number=0, _arg4:Boolean=true){
this.displayObject = _arg1;
this.offsetX = _arg2;
this.offsetY = _arg3;
this.autoCenter = _arg4;
}
public function set displayObject(_arg1):void{
if ((_arg1 is DisplayObject)){
_displayObject = _arg1;
} else {
if ((_arg1 is Class)){
_displayObject = new (_arg1);
} else {
throw (new ArgumentError("DisplayObjectData.displayObject must be a DisplayObject or DisplayObject Class"));
};
};
}
public function get displayObject():DisplayObject{
return (_displayObject);
}
}
}//package org.generalrelativity.foam.view
Section 55
//DisplayObjectFoamRenderer (org.generalrelativity.foam.view.DisplayObjectFoamRenderer)
package org.generalrelativity.foam.view {
import flash.display.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.util.*;
public class DisplayObjectFoamRenderer extends SimpleFoamRenderer implements IFoamRenderer {
protected var _containerMap:SimpleMap;
public function DisplayObjectFoamRenderer(){
_containerMap = new SimpleMap();
}
override public function draw():void{
var _local1:DisplayObject;
var _local2:Renderable;
staticCanvas.graphics.clear();
currentCanvas = staticCanvas;
for each (_local2 in _staticRenderables) {
if (_containerMap.has(_local2)){
_local1 = (_containerMap.getValue(_local2) as DisplayObject);
if ((_local2.element is ISimulatable)){
_local1.x = ISimulatable(_local2.element).x;
_local1.y = ISimulatable(_local2.element).y;
if ((_local2.element is IBody)){
_local1.rotation = ((IBody(_local2.element).q * 180) / Math.PI);
};
};
} else {
proxy(_local2, 0, null);
};
};
}
override public function addRenderable(_arg1:Renderable):void{
var _local2:Sprite;
var _local3:DisplayObject;
if (_arg1.data.displayObject){
_local2 = (addChild(new Sprite()) as Sprite);
_local3 = _local2.addChild(_arg1.data.displayObject);
if (!_arg1.data.hasBeenDisplayed){
if (_arg1.data.offsetX){
_local3.x = (_local3.x + _arg1.data.offsetX);
};
if (_arg1.data.offsetY){
_local3.y = (_local3.y + _arg1.data.offsetY);
};
if (_arg1.data.autoCenter){
_local3.x = (_local3.x - (_local3.width / 2));
_local3.y = (_local3.y - (_local3.height / 2));
};
_arg1.data.hasBeenDisplayed = true;
};
_containerMap.put(_arg1, _local2);
};
super.addRenderable(_arg1);
draw();
redraw();
}
override public function removeRenderable(_arg1:Renderable):void{
var _local2:Sprite;
if (_containerMap.has(_arg1)){
_local2 = (_containerMap.getValue(_arg1) as Sprite);
removeChild(_local2);
};
super.removeRenderable(_arg1);
}
override public function getDisplayObject(_arg1:Renderable):DisplayObject{
return (this);
}
override public function redraw():void{
var _local1:DisplayObject;
var _local2:Renderable;
auxillaryCanvas.graphics.clear();
dynamicCanvas.graphics.clear();
currentCanvas = dynamicCanvas;
for each (_local2 in _dynamicRenderables) {
if (_containerMap.has(_local2)){
_local1 = (_containerMap.getValue(_local2) as DisplayObject);
if ((_local2.element is ISimulatable)){
_local1.x = ISimulatable(_local2.element).x;
_local1.y = ISimulatable(_local2.element).y;
if ((_local2.element is IBody)){
_local1.rotation = ((IBody(_local2.element).q * 180) / Math.PI);
};
};
} else {
proxy(_local2, 0, null);
};
};
}
}
}//package org.generalrelativity.foam.view
Section 56
//IFoamRenderer (org.generalrelativity.foam.view.IFoamRenderer)
package org.generalrelativity.foam.view {
import flash.display.*;
public interface IFoamRenderer {
function addRenderable(_arg1:Renderable):void;
function draw():void;
function removeRenderable(_arg1:Renderable):void;
function copy(_arg1:IFoamRenderer):void;
function get renderables():Array;
function getDisplayObject(_arg1:Renderable):DisplayObject;
function redraw():void;
}
}//package org.generalrelativity.foam.view
Section 57
//Renderable (org.generalrelativity.foam.view.Renderable)
package org.generalrelativity.foam.view {
import flash.utils.*;
public class Renderable {
public var renderMethodKey:Class;
public var data;
public var isDynamic:Boolean;
public var element;
public function Renderable(_arg1, _arg2:Boolean=true, _arg3=null){
this.element = _arg1;
this.isDynamic = _arg2;
if (_arg3){
this.data = _arg3;
} else {
this.data = new Object();
};
this.renderMethodKey = (getDefinitionByName(getQualifiedClassName(_arg1)) as Class);
}
}
}//package org.generalrelativity.foam.view
Section 58
//SimpleFoamRenderer (org.generalrelativity.foam.view.SimpleFoamRenderer)
package org.generalrelativity.foam.view {
import flash.display.*;
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.element.body.*;
import org.generalrelativity.foam.dynamics.force.spring.*;
import org.generalrelativity.foam.util.*;
public class SimpleFoamRenderer extends Sprite implements IFoamRenderer {
protected var auxillaryCanvas:Sprite;
protected var currentCanvas:Sprite;
protected var _dynamicRenderables:Array;
protected var staticCanvas:Sprite;
protected var dynamicCanvas:Sprite;
protected var _staticRenderables:Array;
public static const DEFAULT_COLOR:uint = 0xFFFFFF;
public function SimpleFoamRenderer(){
staticCanvas = (addChild(new Sprite()) as Sprite);
dynamicCanvas = (addChild(new Sprite()) as Sprite);
auxillaryCanvas = (addChild(new Sprite()) as Sprite);
_staticRenderables = new Array();
_dynamicRenderables = new Array();
}
protected function drawMouseSpring(_arg1:MouseSpring):void{
var _local2:Vector;
currentCanvas.graphics.lineStyle(1, 0xFF0000);
_local2 = _arg1.getPointInWorldSpace();
currentCanvas.graphics.moveTo(_local2.x, _local2.y);
currentCanvas.graphics.lineTo(mouseX, mouseY);
}
protected function drawCircle(_arg1:Circle, _arg2:uint, _arg3:Number, _arg4:int):void{
currentCanvas.graphics.lineStyle(1, 0x333333);
currentCanvas.graphics.beginFill(_arg2, _arg3);
currentCanvas.graphics.drawCircle(_arg1.x, _arg1.y, _arg1.radius);
currentCanvas.graphics.endFill();
currentCanvas.graphics.beginFill(0xFFFFFF);
RenderingUtil.drawHash(currentCanvas.graphics, _arg1.x, _arg1.y, _arg1.rotation, _arg4);
currentCanvas.graphics.endFill();
}
protected function setupRenderDataDefaults(_arg1:Renderable):void{
if (_arg1.data.color == null){
_arg1.data.color = SimpleFoamRenderer.DEFAULT_COLOR;
};
if (!_arg1.data.alpha){
_arg1.data.alpha = 0.5;
};
if (!_arg1.data.hashSize){
_arg1.data.hashSize = 10;
};
}
public function draw():void{
currentCanvas = staticCanvas;
currentCanvas.graphics.clear();
_staticRenderables.forEach(proxy);
redraw();
}
protected function drawPolygon(_arg1:RigidBody, _arg2:uint, _arg3:Number):void{
var _local4:RotationMatrix;
var _local5:Vector;
var _local6:Vector;
var _local7:int;
currentCanvas.graphics.lineStyle(3, 0x333333, 0.4);
currentCanvas.graphics.beginFill(_arg2, _arg3);
_local4 = _arg1.rotation;
_local5 = _local4.getVectorProduct((_arg1.vertices[0] as Vector));
_local6 = _local5;
currentCanvas.graphics.moveTo((_arg1.x + _local6.x), (_arg1.y + _local6.y));
_local7 = 0;
while (++_local7 < _arg1.vertices.length) {
_local5 = _local4.getVectorProduct((_arg1.vertices[_local7] as Vector));
currentCanvas.graphics.lineTo((_arg1.x + _local5.x), (_arg1.y + _local5.y));
};
currentCanvas.graphics.lineTo((_arg1.x + _local6.x), (_arg1.y + _local6.y));
currentCanvas.graphics.beginFill(0xFFFFFF);
if (_arg1.vertices.length > 2){
RenderingUtil.drawHash(currentCanvas.graphics, _arg1.x, _arg1.y, _arg1.rotation);
};
currentCanvas.graphics.endFill();
}
protected function proxy(_arg1:Renderable, _arg2:int, _arg3:Array):void{
switch (_arg1.renderMethodKey){
case Circle:
drawCircle(Circle(_arg1.element), _arg1.data.color, _arg1.data.alpha, _arg1.data.hashSize);
break;
case RigidBody:
drawPolygon(RigidBody(_arg1.element), _arg1.data.color, _arg1.data.alpha);
break;
case Spring:
currentCanvas = auxillaryCanvas;
drawSpring(Spring(_arg1.element));
currentCanvas = dynamicCanvas;
break;
case Bungee:
currentCanvas = auxillaryCanvas;
drawSpring(Spring(_arg1.element));
currentCanvas = dynamicCanvas;
break;
case RigidBodySpring:
currentCanvas = auxillaryCanvas;
drawSpring(Spring(_arg1.element));
currentCanvas = dynamicCanvas;
break;
case RigidBodyBungee:
currentCanvas = auxillaryCanvas;
drawSpring(Spring(_arg1.element));
currentCanvas = dynamicCanvas;
break;
case MouseSpring:
currentCanvas = auxillaryCanvas;
drawMouseSpring(MouseSpring(_arg1.element));
currentCanvas = dynamicCanvas;
break;
};
}
public function addRenderable(_arg1:Renderable):void{
setupRenderDataDefaults(_arg1);
if (_arg1.isDynamic){
_dynamicRenderables.push(_arg1);
} else {
_staticRenderables.push(_arg1);
};
}
public function copy(_arg1:IFoamRenderer):void{
var _local2:Array;
var _local3:Renderable;
_local2 = renderables;
for each (_local3 in _local2) {
_arg1.addRenderable(_local3);
};
}
public function get renderables():Array{
return (_staticRenderables.concat(_dynamicRenderables));
}
public function removeRenderable(_arg1:Renderable):void{
var _local2:Array;
var _local3:int;
if (_arg1.isDynamic){
_local2 = _dynamicRenderables;
} else {
_local2 = _staticRenderables;
};
_local3 = _local2.indexOf(_arg1);
if (_local3 > -1){
_local2.splice(_local3, 1);
};
}
protected function drawSpring(_arg1:Spring):void{
var _local2:Vector;
var _local3:Vector;
currentCanvas.graphics.lineStyle(1, 0xFF0000);
_local2 = _arg1.getPoint1InWorldSpace();
_local3 = _arg1.getPoint2InWorldSpace();
currentCanvas.graphics.moveTo(_local2.x, _local2.y);
currentCanvas.graphics.lineTo(_local3.x, _local3.y);
}
public function getDisplayObject(_arg1:Renderable):DisplayObject{
if (_staticRenderables.indexOf(_arg1) != -1){
return (staticCanvas);
};
if (_dynamicRenderables.indexOf(_arg1) != -1){
return (dynamicCanvas);
};
return (null);
}
public function redraw():void{
auxillaryCanvas.graphics.clear();
dynamicCanvas.graphics.clear();
currentCanvas = dynamicCanvas;
_dynamicRenderables.forEach(proxy);
}
}
}//package org.generalrelativity.foam.view
Section 59
//Foam (org.generalrelativity.foam.Foam)
package org.generalrelativity.foam {
import flash.events.*;
import flash.display.*;
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
import org.generalrelativity.foam.dynamics.element.*;
import org.generalrelativity.foam.view.*;
import org.generalrelativity.foam.dynamics.ode.*;
import org.generalrelativity.foam.dynamics.collision.*;
import org.generalrelativity.foam.dynamics.force.spring.*;
import org.generalrelativity.foam.dynamics.*;
import org.generalrelativity.foam.util.*;
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.dynamics.ode.solver.*;
public class Foam extends Sprite {
private var _renderer:IFoamRenderer;
private var _useMouseDragger:Boolean;
private var _globalForceGenerators:Array;
private var _callOnAddedToStage:Array;
private var _mouseSpring:MouseSpring;
private var _renderMap:SimpleMap;
private var _engine:PhysicsEngine;
private var _timestep:Number;
private var _isSimulating:Boolean;
private var _defaultSolver:Class;
private var _solverMap:SimpleMap;
public static const DEFAULT_ODE_SOLVER:Class = RK4;
public static const STEP:String = "step";
public function Foam(){
_solverMap = new SimpleMap();
_renderMap = new SimpleMap();
_engine = new PhysicsEngine();
_globalForceGenerators = new Array();
_callOnAddedToStage = new Array();
_defaultSolver = Foam.DEFAULT_ODE_SOLVER;
_timestep = 1;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
}
public function setCollisionFactory(_arg1:ICollisionFactory):void{
_engine.setCollisionFactory(_arg1);
}
public function addGlobalForceGenerator(_arg1:IForceGenerator, _arg2:Boolean=true):void{
var _local3:ISimulatable;
if (_arg2){
for each (_local3 in _solverMap.keys) {
_local3.addForceGenerator(_arg1);
};
};
_globalForceGenerators.push(_arg1);
}
public function stop():void{
if (_isSimulating){
_isSimulating = false;
removeEventListener(Event.ENTER_FRAME, stepForward);
};
}
public function get timestep():Number{
return (_timestep);
}
public function simulate():void{
if (((!(_isSimulating)) && (_solverMap.length))){
_isSimulating = true;
_renderer.draw();
addEventListener(Event.ENTER_FRAME, stepForward, false, 0, true);
};
}
public function set timestep(_arg1:Number):void{
_timestep = _arg1;
}
private function onMouseUp(_arg1:MouseEvent):void{
_mouseSpring.destroy();
stopDrawing(_mouseSpring);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
public function setRenderer(_arg1:IFoamRenderer):void{
if (_renderer){
_renderer.copy(_arg1);
removeChild(DisplayObject(_renderer));
};
_renderer = _arg1;
addChild(DisplayObject(_renderer));
}
public function addElement(_arg1:ISimulatable, _arg2:Boolean=true, _arg3:Boolean=true, _arg4=null, _arg5:IODESolver=null):void{
var _local6:IForceGenerator;
if (((!((_arg1.mass == Simplification.INFINITE_MASS))) && ((_arg1 is IODE)))){
if (!_arg5){
_arg5 = new _defaultSolver(_arg1);
};
_solverMap.put(_arg1, _arg5);
_engine.addODESolver(_arg5);
for each (_local6 in _globalForceGenerators) {
_arg1.addForceGenerator(_local6);
};
};
if (_arg2){
_engine.addCollidable(_arg1);
};
if (_arg3){
if (!_renderer){
_renderer = new SimpleFoamRenderer();
addChild(DisplayObject(_renderer));
};
addRenderable(new Renderable(_arg1, !((_arg1.mass == Simplification.INFINITE_MASS)), _arg4));
};
}
public function get engine():PhysicsEngine{
return (_engine);
}
public function useMouseDragger(_arg1:Boolean):void{
if (!stage){
if (_callOnAddedToStage.indexOf(useMouseDragger) == -1){
_callOnAddedToStage.push(useMouseDragger, [_arg1]);
};
return;
};
if (_useMouseDragger != _arg1){
_useMouseDragger = _arg1;
if (_useMouseDragger){
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
} else {
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
};
};
}
public function setCoarseCollisionDetector(_arg1:ICoarseCollisionDetector):void{
_engine.setCoarseCollisionDetector(_arg1);
}
public function set defaultSolver(_arg1:Class):void{
_defaultSolver = _arg1;
}
public function removeGlobalForceGenerator(_arg1:IForceGenerator, _arg2:Boolean=false):void{
var _local3:int;
var _local4:ISimulatable;
_local3 = _globalForceGenerators.indexOf(_arg1);
if (_local3 > -1){
if (!_arg2){
for each (_local4 in _solverMap.keys) {
_local4.removeForceGenerator(_arg1);
};
};
_globalForceGenerators.splice(_globalForceGenerators.indexOf(_arg1), 1);
};
}
public function set solverIterations(_arg1:int):void{
_engine.solverIterations = _arg1;
}
public function stepForward(_arg1:Event=null):void{
_engine.step(_timestep);
_renderer.redraw();
dispatchEvent(new Event(Foam.STEP));
}
public function stopSimulating(_arg1:ISimulatable):void{
if (_solverMap.has(_arg1)){
_engine.removeODESolver(IODESolver(_solverMap.getValue(_arg1)));
_solverMap.remove(_arg1);
stopColliding(_arg1);
};
if (!_solverMap.keys.length){
stop();
};
}
public function get simulatables():Array{
return (_solverMap.keys);
}
public function stopColliding(_arg1:ISimulatable):void{
_engine.removeCollidable(_arg1);
}
private function onAddedToStage(_arg1:Event):void{
var _local2:Array;
var _local3:Function;
while (_callOnAddedToStage.length) {
_local2 = _callOnAddedToStage.pop();
_local3 = _callOnAddedToStage.pop();
_local3.apply(this, _local2);
};
}
public function addRenderable(_arg1:Renderable):void{
_renderMap.put(_arg1.element, _arg1);
_renderer.addRenderable(_arg1);
}
public function stopDrawing(_arg1):void{
if (_renderMap.has(_arg1)){
_renderer.removeRenderable(Renderable(_renderMap.getValue(_arg1)));
_renderMap.remove(_arg1);
if (_isSimulating){
_renderer.draw();
};
};
}
private function onMouseDown(_arg1:MouseEvent):void{
var _local2:Vector;
var _local3:IBody;
_local2 = new Vector(mouseX, mouseY);
_local3 = _engine.getBodyUnderPoint(_local2);
if (_local3){
_mouseSpring = new MouseSpring(_local3, _local2.minus(_local3.position), this);
addRenderable(new Renderable(_mouseSpring));
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, false, 0, true);
};
}
public function stepBackward(_arg1:Event=null):void{
_engine.step(-(_timestep));
_renderer.redraw();
dispatchEvent(new Event(Foam.STEP));
}
public function removeElement(_arg1:ISimulatable):void{
stopDrawing(_arg1);
stopSimulating(_arg1);
}
}
}//package org.generalrelativity.foam
Section 60
//ArmorGamesButton (ArmorGamesButton)
package {
import flash.display.*;
public dynamic class ArmorGamesButton extends SimpleButton {
}
}//package
Section 61
//AvalancherLevel (AvalancherLevel)
package {
import flash.events.*;
import caurina.transitions.*;
import flash.display.*;
import org.generalrelativity.foam.math.*;
import org.generalrelativity.foam.dynamics.force.*;
import org.generalrelativity.foam.view.*;
import org.generalrelativity.foam.dynamics.element.body.*;
import org.generalrelativity.foam.dynamics.force.spring.*;
import org.generalrelativity.foam.util.*;
import org.generalrelativity.foam.dynamics.enum.*;
import org.generalrelativity.foam.*;
import flash.net.*;
import mochi.*;
public class AvalancherLevel extends Sprite {
const WONLEVELFX:int = 5;
const MOVEDESKIMOFX:int = 6;
const BIGBOULDERTRACTION:Number = 0.9;
const FOAMESKIMO:int = 1;
const HURT2FX:int = 14;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const TREEHEIGHT:int = 100;
const GOODSPOTFX:int = 2;
const HURT1FX:int = 13;
const TOPBOUNDARY:int = 0;
const ESKIMODIEDFX:int = 9;
const NUMLEVELS:int = 12;
const BIGBOULDERSIZE:int = 25;
const SLOPE_ENDING_POINT:int = 50;
const TREEFRICTION:Number = 0;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const LEVELWIDTH:int = 0x0500;
const STATE_PLACINGESKIMO:int = 1;
const TREEWIDTH:int = 20;
const ICEBLOCKMASS:int = 20;
const BUTTONCLICKFX:int = 10;
const DELETE_BLOCK:int = 2;
const FOAMBLOCK:int = 3;
const NOPEFX:int = 12;
const BIGBOULDER1:int = 99;
const BIGBOULDER2:int = 102;
const BIGBOULDERFRICTION:Number = 0.1;
const HOLDBLOCK:int = 104;
const ESKIMOMASS:int = 1;
const PLACEDBLOCKFX:int = 7;
const LEFTBOUNDARY:int = 0;
const DRAG:int = 57;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const BACKTOPBOUNDARY:int = 0;
const INCREASESIZE:int = 38;
const SPACEBAR:int = 32;
const BUILD_BLOCK:int = 1;
const BOTTOMBOUNDARY:int = -800;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERMASS:int = 100;
const FOAMBOULDER:int = 2;
const SLOPEFRICTION:Number = 0;
const LEVELHEIGHT:int = 0x0500;
const TREEMASS:Number = 50;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const TREE:int = 103;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const TREEBOUNCE:Number = 0.1;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const DELETE:int = 48;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const SLOPE_POINT:int = 51;
const NO_BUILD_STATE:int = 0;
const STATE_AVALANCHE:int = 3;
const STATE_BUILDINGIGLOO:int = 2;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const REMOVEDBLOCKFX:int = 8;
const ICEBLOCKFRICTION:Number = 0.7;
const HURT3FX:int = 15;
const SLOPE_STARTING_POINT:int = 49;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const ICEBLOCKBOUNCE:Number = 0;
const BACKBOTTOMBOUNDARY:int = -400;
private var timeBar:TimeBar;
public var iceBlocks:Array;
public var maxBlocks:int;// = 0
private var healthBar:HealthBar;
public var maxTime:int;// = 0
private var hurtSoundUpdater:int;// = 0
private var prevHealth:int;// = 100
private var slopePoints:Array;
public var currentBlocks:int;// = 0
private var screenObscurer:ScreenObscurer;
private var foregroundBoulders:Array;
public var levelWon:Boolean;// = true
private var trees:Array;
private var treeStands:Array;
public var blocksLeft:BlocksLeft;
private var mouseHidden:Boolean;// = false
private var foam:Foam;
private var slopeShape:Sprite;
private var linkPhysics:Array;
private var blockPhysics:Array;
private var eskimoMarker:RigidBody;
private var validSpot:Boolean;// = false
private var clipsToRemove:Array;
public var mouseBuildState:int;// = 0
private var levelState:int;// = 0
public var levelScore:int;// = 0
private var scrollArrow:ScrollArrow;
private var triggerInstructions:TriggerInstructions;
private var mouseClip:EskimoClip;
private var tutorialBox:TutorialBox;
private var scoreScreen:ScoreScreen;
private var lineSegments:Array;
private var levelBackground:Sprite;
private var eskimoSkin:EskimoClip;
public var currentTime:int;// = 0
private var levelForeground:Sprite;
private var goodSpotArrow:GoodSpotArrow;
private var currentLevel:int;// = 0
public function AvalancherLevel(_arg1:int){
var _local2:RigidBody;
var _local3:int;
var _local4:int;
var _local5:Circle;
var _local6:int;
var _local7:RigidBody;
var _local8:RigidBody;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:SmallBoulder1;
var _local14:TreeClip;
levelForeground = new Sprite();
slopePoints = new Array();
lineSegments = new Array();
foregroundBoulders = new Array();
trees = new Array();
treeStands = new Array();
slopeShape = new Sprite();
blockPhysics = new Array();
linkPhysics = new Array();
levelState = 0;
validSpot = false;
mouseBuildState = NO_BUILD_STATE;
iceBlocks = new Array();
currentLevel = 0;
clipsToRemove = new Array();
currentTime = 0;
maxTime = 0;
maxBlocks = 0;
currentBlocks = 0;
eskimoSkin = new EskimoClip();
levelWon = true;
levelScore = 0;
scoreScreen = new ScoreScreen();
prevHealth = 100;
hurtSoundUpdater = 0;
foam = new Foam();
mouseHidden = false;
scrollArrow = new ScrollArrow();
mouseClip = new EskimoClip();
healthBar = new HealthBar();
timeBar = new TimeBar();
blocksLeft = new BlocksLeft();
super();
if (!AvalancherManager.congratsShown){
mouseClip.crownClip.visible = false;
eskimoSkin.crownClip.visible = false;
};
currentLevel = _arg1;
levelState = STATE_PLACINGESKIMO;
levelBackground = new AvalancherManager.levelInfo[_arg1].backgroundType();
levelBackground.x = -160;
levelBackground.y = -200;
levelForeground.x = -320;
levelForeground.y = -400;
addChild(levelBackground);
addChild(levelForeground);
maxTime = AvalancherManager.levelInfo[_arg1].levelTime;
currentTime = AvalancherManager.levelInfo[_arg1].levelTime;
maxBlocks = AvalancherManager.levelInfo[_arg1].startingBlocks;
currentBlocks = maxBlocks;
blocksLeft.blocksLeftText.text = String(currentBlocks);
timeBar.x = 20;
timeBar.y = 20;
timeBar.gotoAndStop(100);
addChild(timeBar);
healthBar.x = 20;
healthBar.y = 50;
healthBar.gotoAndStop(100);
addChild(healthBar);
blocksLeft.x = 20;
blocksLeft.y = 80;
addChild(blocksLeft);
if (currentLevel == 0){
tutorialBox = new TutorialBox();
tutorialBox.x = 220;
tutorialBox.y = 20;
tutorialBox.tutorialText.text = "Find a safe spot for the Eskimo. During the avalanche, boulders will come rolling down the slope.";
addChild(tutorialBox);
goodSpotArrow = new GoodSpotArrow();
goodSpotArrow.x = 570;
goodSpotArrow.y = 500;
levelForeground.addChildAt(goodSpotArrow, 0);
};
levelForeground.addChild(foam);
foam.setRenderer(new DisplayObjectFoamRenderer());
foam.solverIterations = 2;
foam.addGlobalForceGenerator(new Gravity(new Vector(0, 1.3)));
foam.addGlobalForceGenerator(new Friction(0.01));
_local3 = AvalancherManager.levelInfo[_arg1].slopePointPos[0].length;
slopeShape.graphics.lineStyle(5, 0xCCCCCC);
slopeShape.graphics.beginFill(0xFFFFFF);
slopeShape.graphics.moveTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][0], AvalancherManager.levelInfo[_arg1].slopePointPos[1][0]);
_local4 = 0;
while (_local4 < _local3) {
if (_local4 > 0){
slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]);
_local9 = getMidPoint(AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4]);
_local10 = getMidPoint(AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]);
_local11 = (getDistance(AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]) / 2);
_local12 = getTargetRotation((AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)] - AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4]), (AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)] - AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]));
_local2 = new RigidBody(_local9, _local10, Simplification.INFINITE_MASS, ShapeUtil.createSymmetricPolygon(2, _local11), 0, 0, SLOPEFRICTION, SLOPEBOUNCE, _local12, 0);
foam.addElement(_local2);
foam.stopDrawing(_local2);
lineSegments.push(_local2);
if (_local4 == (_local3 - 1)){
slopeShape.graphics.lineStyle(0, 0);
slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], 1700);
slopeShape.graphics.lineTo(0, 1700);
slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][0], AvalancherManager.levelInfo[_arg1].slopePointPos[1][0]);
};
};
_local4++;
};
levelForeground.addChildAt(slopeShape, 0);
_local3 = AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[0].length;
_local6 = 0;
_local4 = 0;
while (_local4 < _local3) {
if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] > 0)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 20)))){
_local6 = 40;
} else {
if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 20)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 40)))){
_local6 = 100;
} else {
if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 40)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 60)))){
_local6 = 150;
} else {
if (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 60){
_local6 = 200;
};
};
};
};
_local5 = new Circle(AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[0][_local4], AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[1][_local4], AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4], _local6, 0, 0, 0.5, 0.15, 0, 0);
_local5.foamLabel = FOAMBOULDER;
_local13 = new SmallBoulder1();
_local13.height = (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] * 2);
_local13.width = (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] * 2);
foam.addElement(_local5, true, true, new DisplayObjectData(_local13, 0, 0));
foregroundBoulders.push(_local5);
_local4++;
};
_local3 = AvalancherManager.levelInfo[_arg1].treePos[0].length;
_local4 = 0;
while (_local4 < _local3) {
_local7 = new RigidBody(AvalancherManager.levelInfo[_arg1].treePos[0][_local4], AvalancherManager.levelInfo[_arg1].treePos[1][_local4], TREEMASS, ShapeUtil.createRectangle(TREEWIDTH, TREEHEIGHT), 0, 0, 0.1, 0);
_local7.foamLabel = FOAMBOULDER;
_local14 = new TreeClip();
foam.addElement(_local7, true, true, new DisplayObjectData(_local14, 0, 0));
trees.push(_local7);
_local8 = new RigidBody(AvalancherManager.levelInfo[_arg1].treePos[0][_local4], (AvalancherManager.levelInfo[_arg1].treePos[1][_local4] + ((TREEHEIGHT / 2) + 1)), Simplification.INFINITE_MASS, ShapeUtil.createSymmetricPolygon(2, 10), 0, 0, 0.1, 0);
foam.addElement(_local8);
foam.stopDrawing(_local8);
treeStands.push(_local8);
_local4++;
};
}
private function stepLevel(_arg1:Event){
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:IceBlockClip;
var _local11:int;
var _local12:EskimoHit;
var _local13:int;
scrollLevel();
switch (levelState){
case STATE_PLACINGESKIMO:
mouseClip.x = (mouseX - levelForeground.x);
mouseClip.y = (mouseY - levelForeground.y);
validSpot = true;
if (((((((slopeShape.hitTestPoint(mouseX, (mouseY + ESKIMOHEIGHT), true)) || (slopeShape.hitTestPoint(mouseX, (mouseY - ESKIMOHEIGHT), true)))) || (slopeShape.hitTestPoint((mouseX + ESKIMOWIDTH), mouseY, true)))) || (slopeShape.hitTestPoint((mouseX - ESKIMOWIDTH), mouseY, true)))){
validSpot = false;
} else {
_local5 = AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0].length;
_local6 = AvalancherManager.levelInfo[currentLevel].treePos[0].length;
_local7 = 0;
while (_local7 < _local5) {
if (getDistance(AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0][_local7], AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[1][_local7], mouseClip.x, mouseClip.y) < (ESKIMOHEIGHT + AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[2][_local7])){
validSpot = false;
};
_local7++;
};
_local8 = 0;
while (_local8 < _local6) {
if ((((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[0][_local8] - mouseClip.x)) < (TREEWIDTH + ESKIMOWIDTH))) && ((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[1][_local8] - mouseClip.y)) < (TREEHEIGHT - 20))))){
validSpot = false;
};
_local8++;
};
};
if (validSpot){
mouseClip.gotoAndStop("normal");
} else {
mouseClip.gotoAndStop("badSpot");
};
break;
case STATE_BUILDINGIGLOO:
break;
case STATE_AVALANCHE:
_local2 = blockPhysics.length;
_local9 = (_local2 - 1);
while (_local9 >= 0) {
if (!blockPhysics[_local9].isAlive){
if (!blockPhysics[_local9].alreadyDead){
blockPhysics[_local9].alreadyDead = true;
_local10 = new IceBlockClip();
_local10.x = (blockPhysics[_local9].x - 10);
_local10.y = (blockPhysics[_local9].y - 10);
levelForeground.addChild(_local10);
_local10.gotoAndPlay("blowUp");
clipsToRemove.push(_local10);
foam.stopColliding(blockPhysics[_local9]);
foam.stopDrawing(blockPhysics[_local9]);
};
};
_local9--;
};
_local3 = clipsToRemove.length;
_local11 = (_local3 - 1);
while (_local11 >= 0) {
if (clipsToRemove[_local11].currentLabel == "removeMe"){
levelForeground.removeChild(clipsToRemove[_local11]);
clipsToRemove.splice(_local11, 1);
};
_local11--;
};
_local4 = int(((eskimoMarker.lifeLeft / MAXHEALTH) * 100));
if (_local4 < (prevHealth - 5)){
_local12 = new EskimoHit();
_local12.x = eskimoMarker.x;
_local12.y = eskimoMarker.y;
levelForeground.addChild(_local12);
clipsToRemove.push(_local12);
AvalancherManager.playFx((13 + hurtSoundUpdater));
if (hurtSoundUpdater >= 2){
hurtSoundUpdater = 0;
} else {
hurtSoundUpdater++;
};
};
prevHealth = _local4;
healthBar.gotoAndStop(_local4);
if (_local4 <= 0){
eskimoSkin.gotoAndStop("dead");
if (levelWon){
AvalancherManager.playFx(ESKIMODIEDFX);
};
levelWon = false;
};
if ((((((eskimoMarker.x < 0)) || ((eskimoMarker.x > 1300)))) || ((eskimoMarker.y > 1300)))){
if (levelWon){
AvalancherManager.playFx(ESKIMODIEDFX);
};
levelWon = false;
eskimoMarker.lifeLeft = 0;
healthBar.gotoAndStop(0);
};
if (levelWon){
currentTime--;
} else {
currentTime = (currentTime - 5);
};
if (currentTime <= 0){
foam.stop();
timeBar.gotoAndStop(0);
endLevel();
} else {
_local13 = int(((currentTime / maxTime) * 100));
timeBar.gotoAndStop(_local13);
};
break;
};
}
private function startAvalanche(){
var _local1:RigidBody;
var _local2:Bungee;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:IceBlockClip;
_local3 = 0;
while (_local3 < 6) {
_local5 = 0;
while (_local5 < 9) {
if (iceBlocks[_local3][_local5].blockHere){
_local1 = new RigidBody(iceBlocks[_local3][_local5].x, iceBlocks[_local3][_local5].y, Simplification.INFINITE_MASS, ShapeUtil.createRectangle(20, 20));
_local1.foamLabel = FOAMBLOCK;
_local6 = new IceBlockClip();
foam.addElement(_local1, true, true, new DisplayObjectData(_local6, 0, 0));
blockPhysics.push(_local1);
};
_local5++;
};
_local3++;
};
if (currentLevel == 0){
tutorialBox.tutorialText.text = "Hope for the best!";
};
removeIceBlocks();
levelForeground.removeChild(triggerInstructions);
triggerInstructions = null;
levelForeground.removeChild(mouseClip);
eskimoMarker = new RigidBody(mouseClip.x, mouseClip.y, ESKIMOMASS, ShapeUtil.createRectangle((ESKIMOWIDTH * 2), (ESKIMOHEIGHT * 2)));
eskimoMarker.foamLabel = FOAMESKIMO;
foam.addElement(eskimoMarker, true, true, new DisplayObjectData(eskimoSkin, ESKIMOWIDTH, (ESKIMOHEIGHT + 15)));
AvalancherManager.playFx(AVALANCHEFX);
Tweener.addTween(this, {x:10, time:0.1, transition:"easeInExpo"});
Tweener.addTween(this, {y:-10, time:0.1, transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:0.1, transition:"easeInExpo"});
Tweener.addTween(this, {y:20, time:0.1, delay:0.1, transition:"easeInExpo"});
Tweener.addTween(this, {x:-10, time:0.1, delay:0.2, transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:0.2, transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:0.3, transition:"easeInExpo"});
Tweener.addTween(this, {y:-15, time:0.1, delay:0.3, transition:"easeInExpo"});
Tweener.addTween(this, {x:-20, time:0.1, delay:0.4, transition:"easeInExpo"});
Tweener.addTween(this, {y:-20, time:0.1, delay:0.4, transition:"easeInExpo"});
Tweener.addTween(this, {x:0, time:0.1, delay:0.5, transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:0.5, transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:0.6, transition:"easeInExpo"});
Tweener.addTween(this, {y:20, time:0.1, delay:0.6, transition:"easeInExpo"});
Tweener.addTween(this, {x:-10, time:0.1, delay:0.7, transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:0.7, transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:0.8, transition:"easeInExpo"});
Tweener.addTween(this, {y:-15, time:0.1, delay:0.8, transition:"easeInExpo"});
Tweener.addTween(this, {x:-20, time:0.1, delay:0.9, transition:"easeInExpo"});
Tweener.addTween(this, {y:-20, time:0.1, delay:0.9, transition:"easeInExpo"});
Tweener.addTween(this, {x:0, time:0.1, delay:1, transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:1, transition:"easeInExpo"});
_local4 = 1;
while (_local4 < 3) {
Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.1), transition:"easeInExpo"});
Tweener.addTween(this, {y:20, time:0.1, delay:(_local4 + 0.1), transition:"easeInExpo"});
Tweener.addTween(this, {x:-10, time:0.1, delay:(_local4 + 0.2), transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.2), transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.3), transition:"easeInExpo"});
Tweener.addTween(this, {y:-15, time:0.1, delay:(_local4 + 0.3), transition:"easeInExpo"});
Tweener.addTween(this, {x:-20, time:0.1, delay:(_local4 + 0.4), transition:"easeInExpo"});
Tweener.addTween(this, {y:-20, time:0.1, delay:(_local4 + 0.4), transition:"easeInExpo"});
Tweener.addTween(this, {x:0, time:0.1, delay:(_local4 + 0.5), transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.5), transition:"easeInExpo"});
Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.6), transition:"easeInExpo"});
Tweener.addTween(this, {y:20, time:0.1, delay:(_local4 + 0.6), transition:"easeInExpo"});
Tweener.addTween(this, {x:-10, time:0.1, delay:(_local4 + 0.7), transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.7), transition:"easeInExpo"});
if (_local4 < 2){
Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.8), transition:"easeInExpo"});
Tweener.addTween(this, {y:-15, time:0.1, delay:(_local4 + 0.8), transition:"easeInExpo"});
Tweener.addTween(this, {x:-20, time:0.1, delay:(_local4 + 0.9), transition:"easeInExpo"});
Tweener.addTween(this, {y:-20, time:0.1, delay:(_local4 + 0.9), transition:"easeInExpo"});
Tweener.addTween(this, {x:0, time:0.1, delay:(_local4 + 1), transition:"easeInExpo"});
Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 1), transition:"easeInExpo"});
} else {
Tweener.addTween(this, {x:20, time:0.2, delay:(_local4 + 0.8), transition:"linear"});
Tweener.addTween(this, {y:-15, time:0.2, delay:(_local4 + 0.8), transition:"linear"});
Tweener.addTween(this, {x:-20, time:0.3, delay:(_local4 + 1), transition:"linear"});
Tweener.addTween(this, {y:-20, time:0.3, delay:(_local4 + 1), transition:"linear"});
Tweener.addTween(this, {x:0, time:0.5, delay:(_local4 + 1.3), transition:"easeOutExpo"});
Tweener.addTween(this, {y:0, time:0.5, delay:(_local4 + 1.3), transition:"easeOutExpo"});
};
_local4++;
};
foam.simulate();
}
private function populateIceBlocks(){
var _local1:IceBlock;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local2 = (mouseClip.x - 80);
_local3 = (mouseClip.y - 80);
_local4 = 0;
while (_local4 < 6) {
iceBlocks[_local4] = new Array();
_local5 = 0;
while (_local5 < 9) {
_local1 = new IceBlock(_local4, _local5);
_local1.x = (_local2 + (_local5 * 20));
_local1.y = (_local3 + (_local4 * 20));
levelForeground.addChild(_local1);
_local1.activate();
if ((((((_local5 >= 3)) && ((_local5 <= 5)))) && ((((_local4 >= 3)) && ((_local4 <= 5)))))){
_local1.visible = false;
_local1.permanentlyEmpty = true;
} else {
if (((((((slopeShape.hitTestPoint(((_local1.x + levelForeground.x) - 10), ((_local1.y + levelForeground.y) - 10), true)) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) + 10), ((_local1.y + levelForeground.y) - 10), true)))) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) + 10), ((_local1.y + levelForeground.y) + 10), true)))) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) - 10), ((_local1.y + levelForeground.y) + 10), true)))){
_local1.visible = false;
_local1.permanentlyEmpty = true;
} else {
_local6 = AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0].length;
_local7 = AvalancherManager.levelInfo[currentLevel].treePos[0].length;
_local8 = 0;
while (_local8 < _local6) {
if (getDistance(AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0][_local8], AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[1][_local8], _local1.x, _local1.y) < (10 + AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[2][_local8])){
_local1.visible = false;
_local1.permanentlyEmpty = true;
};
_local8++;
};
_local9 = 0;
while (_local9 < _local7) {
if ((((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[0][_local9] - _local1.x)) < (TREEWIDTH + 10))) && ((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[1][_local9] - _local1.y)) < (TREEHEIGHT - 20))))){
_local1.visible = false;
_local1.permanentlyEmpty = true;
};
_local9++;
};
};
};
iceBlocks[_local4].push(_local1);
_local5++;
};
_local4++;
};
}
private function clickedEskimo(_arg1:MouseEvent){
mouseClip.buttonMode = false;
mouseClip.useHandCursor = false;
mouseClip.x = mouseX;
mouseClip.y = mouseY;
mouseClip.removeEventListener(MouseEvent.CLICK, clickedEskimo);
mouseClip.addEventListener(MouseEvent.CLICK, placeEskimo);
levelForeground.removeChild(triggerInstructions);
if (currentLevel == 0){
tutorialBox.tutorialText.text = "Find a safe spot for the Eskimo. During the avalanche, boulders will come rolling down the slope.";
levelForeground.addChildAt(goodSpotArrow, 0);
};
removeIceBlocks();
currentBlocks = maxBlocks;
blocksLeft.blocksLeftText.text = String(currentBlocks);
levelState = STATE_PLACINGESKIMO;
AvalancherManager.playFx(MOVEDESKIMOFX);
}
public function tryAgain(_arg1:MouseEvent){
AvalancherManager.playFx(BUTTONCLICKFX);
deactivate();
AvalancherManager.restartLevel(currentLevel);
}
public function deactivate(){
stage.removeEventListener(KeyboardEvent.KEY_UP, keyPressed);
}
private function scrollLevel(){
var _local1:Boolean;
var _local2:String;
var _local3:String;
var _local4:String;
var _local5:String;
_local1 = false;
_local2 = "O";
_local3 = "O";
_local4 = "O";
_local5 = "O";
if (stage.mouseY < 50){
if (levelForeground.y < TOPBOUNDARY){
if (!mouseHidden){
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
addChild(scrollArrow);
mouseHidden = true;
} else {
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
};
if ((levelForeground.y + SCROLLAMOUNT) < TOPBOUNDARY){
levelForeground.y = (levelForeground.y + SCROLLAMOUNT);
levelBackground.y = (levelBackground.y + BACKGROUNDSCROLLAMOUNT);
} else {
levelForeground.y = TOPBOUNDARY;
levelBackground.y = BACKTOPBOUNDARY;
};
_local1 = true;
_local2 = "X";
};
} else {
if (stage.mouseY >= 430){
if (levelForeground.y > BOTTOMBOUNDARY){
if (!mouseHidden){
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
addChild(scrollArrow);
mouseHidden = true;
} else {
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
};
if ((levelForeground.y - SCROLLAMOUNT) > BOTTOMBOUNDARY){
levelForeground.y = (levelForeground.y - SCROLLAMOUNT);
levelBackground.y = (levelBackground.y - BACKGROUNDSCROLLAMOUNT);
} else {
levelForeground.y = BOTTOMBOUNDARY;
levelBackground.y = BACKBOTTOMBOUNDARY;
};
_local1 = true;
_local3 = "X";
};
};
};
if (stage.mouseX < 50){
if (levelForeground.x < LEFTBOUNDARY){
if (!mouseHidden){
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
addChild(scrollArrow);
mouseHidden = true;
} else {
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
};
if ((levelForeground.x + SCROLLAMOUNT) < LEFTBOUNDARY){
levelForeground.x = (levelForeground.x + SCROLLAMOUNT);
levelBackground.x = (levelBackground.x + BACKGROUNDSCROLLAMOUNT);
} else {
levelForeground.x = LEFTBOUNDARY;
levelBackground.x = BACKLEFTBOUNDARY;
};
_local1 = true;
_local4 = "X";
};
} else {
if (stage.mouseX >= 590){
if (levelForeground.x > RIGHTBOUNDARY){
if (!mouseHidden){
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
addChild(scrollArrow);
mouseHidden = true;
} else {
scrollArrow.x = mouseX;
scrollArrow.y = mouseY;
};
if ((levelForeground.x - SCROLLAMOUNT) > RIGHTBOUNDARY){
levelForeground.x = (levelForeground.x - SCROLLAMOUNT);
levelBackground.x = (levelBackground.x - BACKGROUNDSCROLLAMOUNT);
} else {
levelForeground.x = RIGHTBOUNDARY;
levelBackground.x = BACKRIGHTBOUNDARY;
};
_local1 = true;
_local5 = "X";
};
};
};
if (!_local1){
if (mouseHidden){
removeChild(scrollArrow);
mouseHidden = false;
};
} else {
scrollArrow.gotoAndStop((((_local2 + _local5) + _local3) + _local4));
};
}
private function keyPressed(_arg1:KeyboardEvent){
switch (_arg1.keyCode){
case SPACEBAR:
if (levelState == STATE_BUILDINGIGLOO){
levelState = STATE_AVALANCHE;
startAvalanche();
};
break;
};
}
public function activate(){
mouseClip.x = mouseX;
mouseClip.y = mouseY;
levelForeground.addChild(mouseClip);
mouseClip.addEventListener(MouseEvent.CLICK, placeEskimo);
addEventListener(Event.ENTER_FRAME, stepLevel);
stage.addEventListener(KeyboardEvent.KEY_UP, keyPressed);
}
public function placeEskimo(_arg1:MouseEvent){
if (validSpot){
mouseClip.removeEventListener(MouseEvent.CLICK, placeEskimo);
mouseClip.addEventListener(MouseEvent.CLICK, clickedEskimo);
mouseClip.buttonMode = true;
mouseClip.useHandCursor = true;
levelState = STATE_BUILDINGIGLOO;
addEventListener(MouseEvent.MOUSE_UP, mouseButtonUp);
populateIceBlocks();
AvalancherManager.playFx(GOODSPOTFX);
if (currentLevel == 0){
tutorialBox.tutorialText.text = "Now build him a protective igloo. Just click and drag the area around him to add/remove blocks.";
levelForeground.removeChild(goodSpotArrow);
};
triggerInstructions = new TriggerInstructions();
triggerInstructions.x = mouseClip.x;
triggerInstructions.y = (mouseClip.y - 120);
levelForeground.addChild(triggerInstructions);
} else {
AvalancherManager.playFx(NOPEFX);
};
}
public function getTargetRotation(_arg1:Number, _arg2:Number):Number{
var _local3:*;
_local3 = Math.atan2(_arg2, _arg1);
return (_local3);
}
private function mouseButtonUp(_arg1:MouseEvent){
mouseBuildState = NO_BUILD_STATE;
}
public function getDistance(_arg1:int, _arg2:int, _arg3:int, _arg4:int):Number{
return (Math.sqrt((((_arg3 - _arg1) * (_arg3 - _arg1)) + ((_arg4 - _arg2) * (_arg4 - _arg2)))));
}
public function endLevel(){
screenObscurer = new ScreenObscurer();
addChild(screenObscurer);
removeEventListener(Event.ENTER_FRAME, stepLevel);
if (levelWon){
AvalancherManager.playFx(WONLEVELFX);
scoreScreen.titleFail.visible = false;
scoreScreen.failGrave.visible = false;
scoreScreen.bonusLabel.text = "Level Bonus: \nHealth Bonus: \nUnused Block Bonus:";
scoreScreen.bonusAmounts.text = ((((String(AvalancherManager.levelInfo[currentLevel].levelBonus) + "\n") + String((eskimoMarker.lifeLeft * 10))) + "\n") + String((currentBlocks * 50)));
levelScore = (levelScore + AvalancherManager.levelInfo[currentLevel].levelBonus);
levelScore = (levelScore + (eskimoMarker.lifeLeft * 10));
levelScore = (levelScore + (currentBlocks * 50));
scoreScreen.otherBonusText.text = "";
scoreScreen.otherBonusAmounts.text = "";
if (eskimoMarker.lifeLeft >= 100){
scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Not a Scratch \n");
scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "+ 250 \n");
levelScore = (levelScore + 250);
} else {
if (eskimoMarker.lifeLeft <= 25){
scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Large Hospital Bill \n");
scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "- 250 \n");
levelScore = (levelScore - 250);
};
};
if (currentBlocks == maxBlocks){
scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "No Igloo \n");
scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "+ 150 \n");
levelScore = (levelScore + 150);
} else {
if (currentBlocks == 0){
scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Igloo McMansion \n");
scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "- 150 \n");
levelScore = (levelScore - 150);
};
};
scoreScreen.previousAmount.text = String(AvalancherManager.levelInfo[currentLevel].bestScore);
scoreScreen.finalAmount.text = String(levelScore);
AvalancherManager.levelBeaten(currentLevel, levelScore);
} else {
AvalancherManager.playFx(LOSTLEVELFX);
scoreScreen.titleSuccess.visible = false;
scoreScreen.bonusLabel.visible = false;
scoreScreen.bonusAmounts.visible = false;
scoreScreen.otherBonusLabel.visible = false;
scoreScreen.otherBonusText.visible = false;
scoreScreen.otherBonusAmounts.visible = false;
scoreScreen.finalLabel.visible = false;
scoreScreen.finalAmount.visible = false;
scoreScreen.previousLabel.visible = false;
scoreScreen.previousAmount.visible = false;
};
scoreScreen.tryAgainButton.addEventListener(MouseEvent.CLICK, tryAgain);
scoreScreen.newLevelButton.addEventListener(MouseEvent.CLICK, newLevel);
scoreScreen.x = 320;
scoreScreen.y = -200;
addChild(scoreScreen);
Tweener.addTween(scoreScreen, {y:240, time:2});
}
public function getMidPoint(_arg1:int, _arg2:int):Number{
return (((_arg1 + _arg2) / 2));
}
private function removeIceBlocks(){
var _local1:int;
var _local2:int;
_local1 = 5;
while (_local1 >= 0) {
_local2 = 8;
while (_local2 >= 0) {
iceBlocks[_local1][_local2].deactivate();
levelForeground.removeChild(iceBlocks[_local1][_local2]);
_local2--;
};
_local1--;
};
}
public function newLevel(_arg1:MouseEvent){
AvalancherManager.playFx(BUTTONCLICKFX);
deactivate();
AvalancherManager.returnToTitle();
}
}
}//package
Section 62
//AvalancherManager (AvalancherManager)
package {
import flash.events.*;
import caurina.transitions.*;
import flash.display.*;
import org.generalrelativity.foam.view.*;
import flash.media.*;
import flash.net.*;
import mochi.*;
public final class AvalancherManager {
const WONLEVELFX:int = 5;
const BUTTONCLICKFX:int = 10;
const HOLDBLOCK:int = 104;
const MOVEDESKIMOFX:int = 6;
const HURT2FX:int = 14;
const BACKTOPBOUNDARY:int = 0;
const BIGBOULDERTRACTION:Number = 0.9;
const ESKIMOMASS:int = 1;
const FOAMESKIMO:int = 1;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const PLACEDBLOCKFX:int = 7;
const LEFTBOUNDARY:int = 0;
const DRAG:int = 57;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const NOPEFX:int = 12;
const INCREASESIZE:int = 38;
const BUILD_BLOCK:int = 1;
const SPACEBAR:int = 32;
const GOODSPOTFX:int = 2;
const TREEHEIGHT:int = 100;
const BOTTOMBOUNDARY:int = -800;
const HURT1FX:int = 13;
const NUMLEVELS:int = 12;
const TOPBOUNDARY:int = 0;
const BIGBOULDERMASS:int = 100;
const ESKIMODIEDFX:int = 9;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERSIZE:int = 25;
const SLOPEFRICTION:Number = 0;
const FOAMBOULDER:int = 2;
const LEVELHEIGHT:int = 0x0500;
const SLOPE_ENDING_POINT:int = 50;
const TREEMASS:Number = 50;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const TREE:int = 103;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const DELETE:int = 48;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const TREEFRICTION:Number = 0;
const SLOPE_POINT:int = 51;
const REMOVEDBLOCKFX:int = 8;
const NO_BUILD_STATE:int = 0;
const STATE_PLACINGESKIMO:int = 1;
const STATE_AVALANCHE:int = 3;
const LEVELWIDTH:int = 0x0500;
const STATE_BUILDINGIGLOO:int = 2;
const TREEWIDTH:int = 20;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const ICEBLOCKMASS:int = 20;
const TREEBOUNCE:Number = 0.1;
const DELETE_BLOCK:int = 2;
const ICEBLOCKFRICTION:Number = 0.7;
const BIGBOULDER1:int = 99;
const SLOPE_STARTING_POINT:int = 49;
const BIGBOULDERFRICTION:Number = 0.1;
const ICEBLOCKBOUNCE:Number = 0;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const HURT3FX:int = 15;
const BIGBOULDER2:int = 102;
const FOAMBLOCK:int = 3;
const BACKBOTTOMBOUNDARY:int = -400;
public static var buttonClickedSound:ButtonClickedSound = new ButtonClickedSound();
public static var removedBlockSound:RemovedBlockSound = new RemovedBlockSound();
public static var ssIntroSound:SSIntroSound = new SSIntroSound();
private static var currentLevel:AvalancherLevel;
public static var lastSubmittedScore:int = 0;
private static var currentScore:int = 0;
public static var avalancheSound:AvalancheSound = new AvalancheSound();
public static var musicChannel:SoundChannel = new SoundChannel();
public static var placedBlockSound:PlacedBlockSound = new PlacedBlockSound();
public static var transitionScreen:TransitionScreen = new TransitionScreen();
public static var fxButton:ToggleButton = new ToggleButton();
public static var fadeDisplay:Sprite = new Sprite();
public static var wonLevelSound:WonLevelSound = new WonLevelSound();
public static var hurt1Sound:Hurt1Sound = new Hurt1Sound();
public static var lostLevelSound:LostLevelSound = new LostLevelSound();
public static var screenDisplay:Sprite = new Sprite();
public static var musicButton:ToggleButton = new ToggleButton();
public static var nopeSound:NopeSound = new NopeSound();
public static var fxTransform:SoundTransform = new SoundTransform();
public static var congratsShown:Boolean = false;
public static var noBlocksSound:NoBlocksSound = new NoBlocksSound();
public static var avalancherMusic:AvalancherMusic = new AvalancherMusic();
public static var musicTransform:SoundTransform = new SoundTransform();
public static var interfaceDisplay:Sprite = new Sprite();
public static var movedEskimoSound:MovedEskimoSound = new MovedEskimoSound();
public static var musicPlaying:Boolean = false;
public static var fxChannel:SoundChannel = new SoundChannel();
public static var levelInfo:Array = new Array();
public static var hurt2Sound:Hurt2Sound = new Hurt2Sound();
public static var resumeLSO:SharedObject = SharedObject.getLocal("avalancherResume");
private static var titleScreen:AvalancherTitleScreen;
public static var hurt3Sound:Hurt3Sound = new Hurt3Sound();
private static var goThereIntro:GoThereIntro;
private static var ssIntro:LogoIntroClip;
public static var goodSpotSound:GoodSpotSound = new GoodSpotSound();
public static var eskimoDiedSound:EskimoDiedSound = new EskimoDiedSound();
public static function removeTransition(){
fadeDisplay.removeChild(transitionScreen);
}
private static function clickedGoThere(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.sinistersea.com");
navigateToURL(_local2, "_blank");
}
private static function addGoThere(){
goThereIntro = new GoThereIntro();
goThereIntro.useHandCursor = true;
goThereIntro.buttonMode = true;
screenDisplay.addChild(goThereIntro);
goThereIntro.addEventListener(MouseEvent.ROLL_OVER, mouseOverGoThere);
goThereIntro.addEventListener(MouseEvent.ROLL_OUT, mouseOutGoThere);
goThereIntro.addEventListener(MouseEvent.CLICK, clickedGoThere);
}
public static function removeLevel_Restart(_arg1:int){
screenDisplay.removeChild(currentLevel);
loadLevel(_arg1);
fadeIn();
}
private static function mouseOverGoThere(_arg1:MouseEvent){
goThereIntro.gotoAndPlay(2);
}
public static function initiate(){
var _local1:int;
var _local2:int;
populateLevels();
loadIntro();
musicTransform.volume = 0;
musicChannel.soundTransform = musicTransform;
fadeDisplay.mouseEnabled = false;
fadeDisplay.mouseChildren = false;
transitionScreen.mouseEnabled = false;
transitionScreen.mouseChildren = false;
musicButton.clip = new MusicButton();
fxButton.clip = new FxButton();
musicButton.clip.x = 540;
musicButton.clip.y = 20;
fxButton.clip.x = 585;
fxButton.clip.y = 20;
musicButton.clip.visible = false;
fxButton.clip.visible = false;
interfaceDisplay.addChild(musicButton.clip);
interfaceDisplay.addChild(fxButton.clip);
musicButton.activate();
fxButton.activate();
musicButton.turnOn();
fxButton.turnOn();
musicButton.clip.addEventListener(MouseEvent.CLICK, musicToggle);
fxButton.clip.addEventListener(MouseEvent.CLICK, fxToggle);
if (resumeLSO.data.previouslyViewed){
_local1 = 0;
while (_local1 < 12) {
levelInfo[_local1].beaten = resumeLSO.data.beatenArray[_local1];
levelInfo[_local1].isAvailable = resumeLSO.data.availableArray[_local1];
levelInfo[_local1].bestScore = resumeLSO.data.bestScoreArray[_local1];
congratsShown = resumeLSO.data.congratsShown;
_local1++;
};
lastSubmittedScore = resumeLSO.data.lastSubmittedScore;
} else {
resumeLSO.data.previouslyViewed = true;
resumeLSO.data.beatenArray = new Array();
resumeLSO.data.availableArray = new Array();
resumeLSO.data.bestScoreArray = new Array();
resumeLSO.data.lastSubmittedScore = 0;
resumeLSO.data.congratsShown = false;
_local2 = 0;
while (_local2 < 12) {
resumeLSO.data.beatenArray.push(false);
resumeLSO.data.availableArray.push(false);
resumeLSO.data.bestScoreArray.push(0);
_local2++;
};
resumeLSO.data.availableArray[0] = true;
};
}
public static function levelBeaten(_arg1:int, _arg2:int){
var i:int;
var sentLevel = _arg1;
var sentScore = _arg2;
if (sentScore > levelInfo[sentLevel].bestScore){
levelInfo[sentLevel].bestScore = sentScore;
};
levelInfo[sentLevel].beaten = true;
switch (sentLevel){
case 0:
levelInfo[1].isAvailable = true;
levelInfo[2].isAvailable = true;
levelInfo[5].isAvailable = true;
levelInfo[6].isAvailable = true;
break;
case 1:
if (((((levelInfo[2].beaten) && (levelInfo[5].beaten))) && (levelInfo[6].beaten))){
levelInfo[4].isAvailable = true;
levelInfo[9].isAvailable = true;
levelInfo[3].isAvailable = true;
levelInfo[7].isAvailable = true;
};
break;
case 2:
if (((((levelInfo[1].beaten) && (levelInfo[5].beaten))) && (levelInfo[6].beaten))){
levelInfo[4].isAvailable = true;
levelInfo[9].isAvailable = true;
levelInfo[3].isAvailable = true;
levelInfo[7].isAvailable = true;
};
break;
case 5:
if (((((levelInfo[2].beaten) && (levelInfo[1].beaten))) && (levelInfo[6].beaten))){
levelInfo[4].isAvailable = true;
levelInfo[9].isAvailable = true;
levelInfo[3].isAvailable = true;
levelInfo[7].isAvailable = true;
};
break;
case 6:
if (((((levelInfo[2].beaten) && (levelInfo[5].beaten))) && (levelInfo[1].beaten))){
levelInfo[4].isAvailable = true;
levelInfo[9].isAvailable = true;
levelInfo[3].isAvailable = true;
levelInfo[7].isAvailable = true;
};
break;
case 4:
if (((((levelInfo[9].beaten) && (levelInfo[3].beaten))) && (levelInfo[7].beaten))){
levelInfo[8].isAvailable = true;
levelInfo[10].isAvailable = true;
levelInfo[11].isAvailable = true;
};
break;
case 9:
if (((((levelInfo[4].beaten) && (levelInfo[3].beaten))) && (levelInfo[7].beaten))){
levelInfo[8].isAvailable = true;
levelInfo[10].isAvailable = true;
levelInfo[11].isAvailable = true;
};
break;
case 3:
if (((((levelInfo[9].beaten) && (levelInfo[4].beaten))) && (levelInfo[7].beaten))){
levelInfo[8].isAvailable = true;
levelInfo[10].isAvailable = true;
levelInfo[11].isAvailable = true;
};
break;
case 7:
if (((((levelInfo[9].beaten) && (levelInfo[3].beaten))) && (levelInfo[4].beaten))){
levelInfo[8].isAvailable = true;
levelInfo[10].isAvailable = true;
levelInfo[11].isAvailable = true;
};
break;
};
i = 0;
while (i < 12) {
resumeLSO.data.beatenArray[i] = levelInfo[i].beaten;
resumeLSO.data.availableArray[i] = levelInfo[i].isAvailable;
resumeLSO.data.bestScoreArray[i] = levelInfo[i].bestScore;
i = (i + 1);
};
try {
resumeLSO.flush();
} catch(e:Error) {
};
}
public static function removeLevel_Title(){
screenDisplay.removeChild(currentLevel);
loadTitle();
fadeIn();
}
private static function mouseOutGoThere(_arg1:MouseEvent){
goThereIntro.gotoAndStop(1);
}
public static function loadTitle(){
if (((musicButton.isOn) && (!(musicPlaying)))){
musicChannel = avalancherMusic.play(0, int.MAX_VALUE);
Tweener.addTween(musicTransform, {volume:1, time:3, onUpdate:function (){
musicChannel.soundTransform = musicTransform;
}});
musicPlaying = true;
};
titleScreen = new AvalancherTitleScreen();
screenDisplay.addChild(titleScreen);
titleScreen.activate();
musicButton.clip.visible = true;
fxButton.clip.visible = true;
fadeIn();
}
public static function playFx(_arg1:int){
if (fxButton.isOn){
switch (_arg1){
case 1:
fxChannel = avalancheSound.play();
break;
case 2:
fxChannel = goodSpotSound.play();
break;
case 3:
fxChannel = lostLevelSound.play();
break;
case 5:
fxChannel = wonLevelSound.play();
break;
case 6:
fxChannel = movedEskimoSound.play();
break;
case 7:
fxChannel = placedBlockSound.play();
break;
case 8:
fxChannel = removedBlockSound.play();
break;
case 9:
fxChannel = eskimoDiedSound.play();
break;
case 10:
fxChannel = buttonClickedSound.play();
break;
case 11:
fxChannel = noBlocksSound.play();
break;
case 12:
fxChannel = nopeSound.play();
break;
case 13:
fxChannel = hurt1Sound.play();
break;
case 14:
fxChannel = hurt2Sound.play();
break;
case 15:
fxChannel = hurt3Sound.play();
break;
};
};
}
public static function fadeIn(){
transitionScreen.alpha = 1;
Tweener.addTween(transitionScreen, {alpha:0, time:2, onComplete:removeTransition});
}
public static function clearTitle(_arg1:int){
screenDisplay.removeChild(titleScreen);
loadLevel(_arg1);
}
public static function fxToggle(_arg1:MouseEvent){
var e = _arg1;
if (fxButton.isOn){
Tweener.addTween(fxTransform, {volume:0, time:1, onUpdate:function (){
fxChannel.soundTransform = fxTransform;
}, onComplete:function (){
fxChannel.stop();
}});
fxButton.turnOff();
} else {
fxButton.turnOn();
};
}
public static function returnToTitle(){
startFadeOut();
Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:removeLevel_Title});
}
public static function loadLevel(_arg1:int){
currentLevel = new AvalancherLevel(_arg1);
screenDisplay.addChild(currentLevel);
currentLevel.activate();
fadeIn();
}
public static function musicToggle(_arg1:MouseEvent){
var e = _arg1;
if (musicButton.isOn){
Tweener.addTween(musicTransform, {volume:0, time:1, onUpdate:function (){
musicChannel.soundTransform = musicTransform;
}, onComplete:function (){
musicChannel.stop();
}});
musicButton.turnOff();
} else {
musicChannel = avalancherMusic.play(0, int.MAX_VALUE);
Tweener.addTween(musicTransform, {volume:1, time:3, onUpdate:function (){
musicChannel.soundTransform = musicTransform;
}});
musicButton.turnOn();
};
}
public static function loadIntro(){
ssIntro = new LogoIntroClip();
ssIntro.x = 320;
ssIntro.y = 240;
ssIntro.width = 26573;
ssIntro.height = 4489.7;
screenDisplay.addChild(ssIntro);
Tweener.addTween(ssIntro, {x:491.3, time:1.5, onComplete:addGoThere});
Tweener.addTween(ssIntro, {width:389.4, time:2});
Tweener.addTween(ssIntro, {height:65.8, time:2});
Tweener.addTween(ssIntro, {x:1200, time:3, delay:4});
Tweener.addTween(ssIntro, {width:26573, time:3, delay:4, onComplete:endIntro});
Tweener.addTween(ssIntro, {height:4489.7, time:3, delay:4});
fxChannel = ssIntroSound.play();
}
public static function restartLevel(_arg1:int){
startFadeOut();
Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:removeLevel_Restart, onCompleteParams:[_arg1]});
}
public static function leaveTitle(_arg1:int){
titleScreen.deactivate();
startFadeOut();
Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:clearTitle, onCompleteParams:[_arg1]});
}
public static function endIntro(){
transitionScreen.alpha = 1;
fadeDisplay.addChild(transitionScreen);
goThereIntro.removeEventListener(MouseEvent.ROLL_OVER, mouseOverGoThere);
goThereIntro.removeEventListener(MouseEvent.ROLL_OUT, mouseOverGoThere);
goThereIntro.removeEventListener(MouseEvent.CLICK, clickedGoThere);
screenDisplay.removeChild(goThereIntro);
screenDisplay.removeChild(ssIntro);
ssIntro = null;
loadTitle();
}
private static function populateLevels(){
var _local1:LevelData;
var _local2:int;
_local2 = 0;
while (_local2 < 12) {
_local1 = new LevelData(_local2);
levelInfo.push(_local1);
_local2++;
};
}
public static function startFadeOut(){
transitionScreen.alpha = 0;
fadeDisplay.addChild(transitionScreen);
}
}
}//package
Section 63
//AvalancherMusic (AvalancherMusic)
package {
import flash.media.*;
public dynamic class AvalancherMusic extends Sound {
}
}//package
Section 64
//AvalancherTitleScreen (AvalancherTitleScreen)
package {
import flash.events.*;
import caurina.transitions.*;
import flash.display.*;
import org.generalrelativity.foam.view.*;
import flash.net.*;
import mochi.*;
public class AvalancherTitleScreen extends Sprite {
const WONLEVELFX:int = 5;
const MOVEDESKIMOFX:int = 6;
const BIGBOULDERTRACTION:Number = 0.9;
const FOAMESKIMO:int = 1;
const HURT2FX:int = 14;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const TREEHEIGHT:int = 100;
const GOODSPOTFX:int = 2;
const HURT1FX:int = 13;
const TOPBOUNDARY:int = 0;
const ESKIMODIEDFX:int = 9;
const NUMLEVELS:int = 12;
const BIGBOULDERSIZE:int = 25;
const SLOPE_ENDING_POINT:int = 50;
const TREEFRICTION:Number = 0;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const LEVELWIDTH:int = 0x0500;
const STATE_PLACINGESKIMO:int = 1;
const TREEWIDTH:int = 20;
const ICEBLOCKMASS:int = 20;
const BUTTONCLICKFX:int = 10;
const DELETE_BLOCK:int = 2;
const FOAMBLOCK:int = 3;
const NOPEFX:int = 12;
const BIGBOULDER1:int = 99;
const BIGBOULDER2:int = 102;
const BIGBOULDERFRICTION:Number = 0.1;
const HOLDBLOCK:int = 104;
const ESKIMOMASS:int = 1;
const PLACEDBLOCKFX:int = 7;
const LEFTBOUNDARY:int = 0;
const DRAG:int = 57;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const BACKTOPBOUNDARY:int = 0;
const INCREASESIZE:int = 38;
const SPACEBAR:int = 32;
const BUILD_BLOCK:int = 1;
const BOTTOMBOUNDARY:int = -800;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERMASS:int = 100;
const FOAMBOULDER:int = 2;
const SLOPEFRICTION:Number = 0;
const LEVELHEIGHT:int = 0x0500;
const TREEMASS:Number = 50;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const TREE:int = 103;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const TREEBOUNCE:Number = 0.1;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const DELETE:int = 48;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const SLOPE_POINT:int = 51;
const NO_BUILD_STATE:int = 0;
const STATE_AVALANCHE:int = 3;
const STATE_BUILDINGIGLOO:int = 2;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const REMOVEDBLOCKFX:int = 8;
const ICEBLOCKFRICTION:Number = 0.7;
const HURT3FX:int = 15;
const SLOPE_STARTING_POINT:int = 49;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const ICEBLOCKBOUNCE:Number = 0;
const BACKBOTTOMBOUNDARY:int = -400;
private var startHereAdded:Boolean;// = false
public var playMoreGamesButton:PlayMoreGamesButton;
public var agButton:ArmorGamesButton;
private var titleScore:TitleScore;
private var submitScoreButton:SubmitScoreButton;
private var levelMarkers:Array;
public var createdByButton:CreatedByButton;
private var startHere:StartHereClip;
public var totalScore:int;// = 0
private var allBeaten:Boolean;// = true
private var congratsScreen:CongratsScreen;
public var videoWalkthroughButton:VideoWalkthroughButton;
public function AvalancherTitleScreen(){
levelMarkers = new Array();
titleScore = new TitleScore();
submitScoreButton = new SubmitScoreButton();
totalScore = 0;
allBeaten = true;
startHere = new StartHereClip();
startHereAdded = false;
super();
populateMarkers();
titleScore.scoreText.text = ("Score: " + String(totalScore));
titleScore.x = 8;
titleScore.y = 9;
addChild(titleScore);
}
public function congratsComplete(){
removeChild(congratsScreen);
congratsScreen = null;
activate();
}
public function deactivate(){
var _local1:int;
_local1 = 0;
while (_local1 < NUMLEVELS) {
levelMarkers[_local1].deactivate();
_local1++;
};
createdByButton.removeEventListener(MouseEvent.CLICK, ssClicked);
videoWalkthroughButton.removeEventListener(MouseEvent.CLICK, goToWalkthrough);
playMoreGamesButton.removeEventListener(MouseEvent.CLICK, goToAG);
agButton.removeEventListener(MouseEvent.CLICK, goToAG);
if (startHereAdded){
removeChild(startHere);
};
}
private function okClicked(_arg1:MouseEvent){
congratsScreen.okButton.removeEventListener(MouseEvent.CLICK, okClicked);
AvalancherManager.playFx(BUTTONCLICKFX);
Tweener.addTween(congratsScreen, {x:-400, time:2, onComplete:congratsComplete});
}
public function activate(){
var _local1:int;
allBeaten = true;
_local1 = 0;
while (_local1 < NUMLEVELS) {
levelMarkers[_local1].activate();
if (!levelMarkers[_local1].isBeaten){
allBeaten = false;
};
_local1++;
};
createdByButton.addEventListener(MouseEvent.CLICK, ssClicked);
agButton.addEventListener(MouseEvent.CLICK, goToAG);
videoWalkthroughButton.addEventListener(MouseEvent.CLICK, goToWalkthrough);
playMoreGamesButton.addEventListener(MouseEvent.CLICK, goToAG);
if (((allBeaten) && (!(AvalancherManager.congratsShown)))){
AvalancherManager.congratsShown = true;
AvalancherManager.resumeLSO.data.congratsShown = true;
AvalancherManager.playFx(WONLEVELFX);
deactivate();
congratsScreen = new CongratsScreen();
congratsScreen.x = -400;
congratsScreen.y = 240;
addChild(congratsScreen);
congratsScreen.okButton.addEventListener(MouseEvent.CLICK, okClicked);
Tweener.addTween(congratsScreen, {x:320, time:2});
};
}
private function goToAG(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.armorgames.com");
navigateToURL(_local2, "_blank");
}
public function populateMarkers(){
var _local1:LevelMarker;
var _local2:int;
_local2 = 0;
while (_local2 < NUMLEVELS) {
_local1 = new LevelMarker(_local2);
_local1.x = AvalancherManager.levelInfo[_local2].mapPosX;
_local1.y = AvalancherManager.levelInfo[_local2].mapPosY;
addChild(_local1);
if (AvalancherManager.levelInfo[_local2].beaten){
_local1.makeBeaten();
};
if (AvalancherManager.levelInfo[_local2].isAvailable){
_local1.makeAvailable();
};
if ((((_local2 == 1)) && (!(AvalancherManager.levelInfo[_local2].isAvailable)))){
startHere.x = 330;
startHere.y = 310;
addChild(startHere);
startHereAdded = true;
} else {
startHereAdded = false;
};
levelMarkers.push(_local1);
totalScore = (totalScore + AvalancherManager.levelInfo[_local2].bestScore);
_local2++;
};
}
private function goToWalkthrough(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.youtube.com/watch?v=QFE-BDl1v6I");
navigateToURL(_local2, "_blank");
}
private function ssClicked(_arg1:MouseEvent){
var _local2:URLRequest;
_local2 = new URLRequest("http://www.sinistersea.com");
navigateToURL(_local2, "_blank");
}
}
}//package
Section 65
//AvalancheSound (AvalancheSound)
package {
import flash.media.*;
public dynamic class AvalancheSound extends Sound {
}
}//package
Section 66
//Background1 (Background1)
package {
import flash.display.*;
public dynamic class Background1 extends Sprite {
}
}//package
Section 67
//BeatenFlag (BeatenFlag)
package {
import flash.display.*;
public dynamic class BeatenFlag extends Sprite {
}
}//package
Section 68
//BlockHighlight (BlockHighlight)
package {
import flash.display.*;
public dynamic class BlockHighlight extends Sprite {
}
}//package
Section 69
//BlocksLeft (BlocksLeft)
package {
import flash.display.*;
import flash.text.*;
public dynamic class BlocksLeft extends MovieClip {
public var blocksLeftText:TextField;
public function BlocksLeft(){
addFrameScript(0, frame1, 40, frame41);
}
function frame1(){
stop();
}
function frame41(){
gotoAndStop("normal");
}
}
}//package
Section 70
//ButtonClickedSound (ButtonClickedSound)
package {
import flash.media.*;
public dynamic class ButtonClickedSound extends Sound {
}
}//package
Section 71
//CongratsScreen (CongratsScreen)
package {
import flash.display.*;
import flash.text.*;
public dynamic class CongratsScreen extends MovieClip {
public var okButton:OkButtoncopy;
public var titleSuccess:TextField;
}
}//package
Section 72
//CreatedByButton (CreatedByButton)
package {
import flash.display.*;
public dynamic class CreatedByButton extends SimpleButton {
}
}//package
Section 73
//Crown (Crown)
package {
import flash.display.*;
public dynamic class Crown extends Sprite {
}
}//package
Section 74
//EskimoClip (EskimoClip)
package {
import flash.display.*;
public dynamic class EskimoClip extends MovieClip {
public var crownClip:Crown;
public function EskimoClip(){
addFrameScript(0, frame1, 1, frame2, 2, frame3);
}
function frame3(){
stop();
}
function frame1(){
stop();
}
function frame2(){
stop();
}
}
}//package
Section 75
//EskimoDiedSound (EskimoDiedSound)
package {
import flash.media.*;
public dynamic class EskimoDiedSound extends Sound {
}
}//package
Section 76
//EskimoHit (EskimoHit)
package {
import flash.display.*;
public dynamic class EskimoHit extends MovieClip {
public function EskimoHit(){
addFrameScript(18, frame19);
}
function frame19(){
stop();
}
}
}//package
Section 77
//EverythingHolder (EverythingHolder)
package {
import flash.display.*;
public dynamic class EverythingHolder extends MovieClip {
public function EverythingHolder(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 78
//FxButton (FxButton)
package {
import flash.display.*;
public dynamic class FxButton extends MovieClip {
public function FxButton(){
addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4);
}
function frame3(){
stop();
}
function frame1(){
stop();
}
function frame4(){
stop();
}
function frame2(){
stop();
}
}
}//package
Section 79
//GoodSpotArrow (GoodSpotArrow)
package {
import flash.display.*;
public dynamic class GoodSpotArrow extends Sprite {
}
}//package
Section 80
//GoodSpotSound (GoodSpotSound)
package {
import flash.media.*;
public dynamic class GoodSpotSound extends Sound {
}
}//package
Section 81
//GoThereIntro (GoThereIntro)
package {
import flash.display.*;
public dynamic class GoThereIntro extends MovieClip {
public function GoThereIntro(){
addFrameScript(0, frame1, 19, frame20);
}
function frame1(){
stop();
}
function frame20(){
stop();
}
}
}//package
Section 82
//GraveClip (GraveClip)
package {
import flash.display.*;
public dynamic class GraveClip extends Sprite {
}
}//package
Section 83
//HealthBar (HealthBar)
package {
import flash.display.*;
public dynamic class HealthBar extends MovieClip {
}
}//package
Section 84
//HostButton (HostButton)
package {
import flash.display.*;
public dynamic class HostButton extends SimpleButton {
}
}//package
Section 85
//Hurt1Sound (Hurt1Sound)
package {
import flash.media.*;
public dynamic class Hurt1Sound extends Sound {
}
}//package
Section 86
//Hurt2Sound (Hurt2Sound)
package {
import flash.media.*;
public dynamic class Hurt2Sound extends Sound {
}
}//package
Section 87
//Hurt3Sound (Hurt3Sound)
package {
import flash.media.*;
public dynamic class Hurt3Sound extends Sound {
}
}//package
Section 88
//IceBlock (IceBlock)
package {
import flash.events.*;
import flash.display.*;
import org.generalrelativity.foam.view.*;
import flash.net.*;
import mochi.*;
public class IceBlock extends MovieClip {
const WONLEVELFX:int = 5;
const MOVEDESKIMOFX:int = 6;
const BIGBOULDERTRACTION:Number = 0.9;
const FOAMESKIMO:int = 1;
const HURT2FX:int = 14;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const TREEHEIGHT:int = 100;
const GOODSPOTFX:int = 2;
const HURT1FX:int = 13;
const TOPBOUNDARY:int = 0;
const ESKIMODIEDFX:int = 9;
const NUMLEVELS:int = 12;
const BIGBOULDERSIZE:int = 25;
const SLOPE_ENDING_POINT:int = 50;
const TREEFRICTION:Number = 0;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const LEVELWIDTH:int = 0x0500;
const STATE_PLACINGESKIMO:int = 1;
const TREEWIDTH:int = 20;
const ICEBLOCKMASS:int = 20;
const DELETE_BLOCK:int = 2;
const BUTTONCLICKFX:int = 10;
const BIGBOULDER1:int = 99;
const BIGBOULDER2:int = 102;
const BIGBOULDERFRICTION:Number = 0.1;
const NOPEFX:int = 12;
const HOLDBLOCK:int = 104;
const FOAMBLOCK:int = 3;
const ESKIMOMASS:int = 1;
const PLACEDBLOCKFX:int = 7;
const BACKTOPBOUNDARY:int = 0;
const LEFTBOUNDARY:int = 0;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const DRAG:int = 57;
const INCREASESIZE:int = 38;
const SPACEBAR:int = 32;
const BUILD_BLOCK:int = 1;
const BOTTOMBOUNDARY:int = -800;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERMASS:int = 100;
const FOAMBOULDER:int = 2;
const SLOPEFRICTION:Number = 0;
const LEVELHEIGHT:int = 0x0500;
const TREEMASS:Number = 50;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const TREE:int = 103;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const TREEBOUNCE:Number = 0.1;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const DELETE:int = 48;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const SLOPE_POINT:int = 51;
const NO_BUILD_STATE:int = 0;
const STATE_AVALANCHE:int = 3;
const STATE_BUILDINGIGLOO:int = 2;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const REMOVEDBLOCKFX:int = 8;
const HURT3FX:int = 15;
const ICEBLOCKFRICTION:Number = 0.7;
const SLOPE_STARTING_POINT:int = 49;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const ICEBLOCKBOUNCE:Number = 0;
const BACKBOTTOMBOUNDARY:int = -400;
public var blockHere:Boolean;// = false
public var blockHighlight:BlockHighlight;
public var linkId:int;// = 0
public var xPos:int;// = 0
public var yPos:int;// = 0
public var permanentlyEmpty:Boolean;// = false
public function IceBlock(_arg1:int, _arg2:int){
blockHighlight = new BlockHighlight();
blockHere = false;
permanentlyEmpty = false;
yPos = 0;
xPos = 0;
linkId = 0;
super();
addFrameScript(0, frame1, 1, frame2);
this.mouseChildren = false;
yPos = _arg1;
xPos = _arg2;
}
private function mousePressed(_arg1:MouseEvent){
if (!permanentlyEmpty){
if (blockHere){
_arg1.target.parent.parent.mouseBuildState = DELETE_BLOCK;
removeBlock();
if (_arg1.target.parent.parent.currentBlocks < _arg1.target.parent.parent.maxBlocks){
_arg1.target.parent.parent.currentBlocks++;
};
_arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks);
_arg1.target.parent.parent.blocksLeft.gotoAndStop("normal");
} else {
_arg1.target.parent.parent.mouseBuildState = BUILD_BLOCK;
if (_arg1.target.parent.parent.currentBlocks > 0){
addBlock();
_arg1.target.parent.parent.currentBlocks--;
_arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks);
_arg1.target.parent.parent.blocksLeft.gotoAndStop("normal");
} else {
if (_arg1.target.parent.parent.blocksLeft.currentLabel == "normal"){
_arg1.target.parent.parent.blocksLeft.gotoAndPlay("outOfBlocks");
AvalancherManager.playFx(NOBLOCKSFX);
};
};
};
};
}
private function mouseOverClip(_arg1:MouseEvent){
if (!permanentlyEmpty){
addChild(blockHighlight);
if (_arg1.buttonDown){
if (_arg1.target.parent.parent.mouseBuildState == DELETE_BLOCK){
if (blockHere){
removeBlock();
if (_arg1.target.parent.parent.currentBlocks < _arg1.target.parent.parent.maxBlocks){
_arg1.target.parent.parent.currentBlocks++;
};
_arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks);
_arg1.target.parent.parent.blocksLeft.gotoAndStop("normal");
};
} else {
if (_arg1.target.parent.parent.mouseBuildState == BUILD_BLOCK){
if ((((_arg1.target.parent.parent.currentBlocks > 0)) && (!(blockHere)))){
addBlock();
_arg1.target.parent.parent.currentBlocks--;
_arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks);
_arg1.target.parent.parent.blocksLeft.gotoAndStop("normal");
} else {
if (_arg1.target.parent.parent.currentBlocks <= 0){
if (_arg1.target.parent.parent.blocksLeft.currentLabel == "normal"){
_arg1.target.parent.parent.blocksLeft.gotoAndPlay("outOfBlocks");
AvalancherManager.playFx(NOBLOCKSFX);
};
};
};
};
};
};
};
}
function frame2(){
stop();
}
private function removeBlock(){
AvalancherManager.playFx(REMOVEDBLOCKFX);
gotoAndStop("empty");
blockHere = false;
}
public function deactivate(){
removeEventListener(MouseEvent.MOUSE_DOWN, mousePressed);
removeEventListener(MouseEvent.MOUSE_OVER, mouseOverClip);
removeEventListener(MouseEvent.MOUSE_OUT, mouseLeftClip);
buttonMode = false;
useHandCursor = false;
}
private function addBlock(){
AvalancherManager.playFx(PLACEDBLOCKFX);
gotoAndStop("OOOO");
blockHere = true;
}
function frame1(){
stop();
}
public function activate(){
addEventListener(MouseEvent.MOUSE_DOWN, mousePressed);
addEventListener(MouseEvent.ROLL_OVER, mouseOverClip);
addEventListener(MouseEvent.ROLL_OUT, mouseLeftClip);
buttonMode = true;
useHandCursor = true;
}
private function mouseLeftClip(_arg1:MouseEvent){
if (!permanentlyEmpty){
removeChild(blockHighlight);
};
}
}
}//package
Section 89
//IceBlockClip (IceBlockClip)
package {
import flash.display.*;
public dynamic class IceBlockClip extends MovieClip {
public function IceBlockClip(){
addFrameScript(0, frame1, 20, frame21);
}
function frame1(){
stop();
}
function frame21(){
stop();
}
}
}//package
Section 90
//LevelData (LevelData)
package {
import flash.events.*;
public class LevelData {
const WONLEVELFX:int = 5;
const BUTTONCLICKFX:int = 10;
const HOLDBLOCK:int = 104;
const MOVEDESKIMOFX:int = 6;
const HURT2FX:int = 14;
const BACKTOPBOUNDARY:int = 0;
const BIGBOULDERTRACTION:Number = 0.9;
const ESKIMOMASS:int = 1;
const FOAMESKIMO:int = 1;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const PLACEDBLOCKFX:int = 7;
const LEFTBOUNDARY:int = 0;
const DRAG:int = 57;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const NOPEFX:int = 12;
const INCREASESIZE:int = 38;
const BUILD_BLOCK:int = 1;
const SPACEBAR:int = 32;
const GOODSPOTFX:int = 2;
const TREEHEIGHT:int = 100;
const BOTTOMBOUNDARY:int = -800;
const HURT1FX:int = 13;
const NUMLEVELS:int = 12;
const TOPBOUNDARY:int = 0;
const BIGBOULDERMASS:int = 100;
const ESKIMODIEDFX:int = 9;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERSIZE:int = 25;
const SLOPEFRICTION:Number = 0;
const FOAMBOULDER:int = 2;
const LEVELHEIGHT:int = 0x0500;
const SLOPE_ENDING_POINT:int = 50;
const TREEMASS:Number = 50;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const TREE:int = 103;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const DELETE:int = 48;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const TREEFRICTION:Number = 0;
const SLOPE_POINT:int = 51;
const REMOVEDBLOCKFX:int = 8;
const NO_BUILD_STATE:int = 0;
const STATE_PLACINGESKIMO:int = 1;
const STATE_AVALANCHE:int = 3;
const LEVELWIDTH:int = 0x0500;
const STATE_BUILDINGIGLOO:int = 2;
const TREEWIDTH:int = 20;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const ICEBLOCKMASS:int = 20;
const TREEBOUNCE:Number = 0.1;
const DELETE_BLOCK:int = 2;
const ICEBLOCKFRICTION:Number = 0.7;
const BIGBOULDER1:int = 99;
const SLOPE_STARTING_POINT:int = 49;
const BIGBOULDERFRICTION:Number = 0.1;
const ICEBLOCKBOUNCE:Number = 0;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const HURT3FX:int = 15;
const BIGBOULDER2:int = 102;
const FOAMBLOCK:int = 3;
const BACKBOTTOMBOUNDARY:int = -400;
public var foregroundBoulderPos:Array;
public var backgroundBoulderPos:Array;
public var mapPosY:int;// = 0
public var bestScore:int;// = 0
public var levelName:String;
public var treePos:Array;
public var mapPosX:int;// = 0
public var levelTime:int;// = 0
public var slopePointPos:Array;
public var backgroundType:Object;
public var isAvailable:Boolean;// = false
public var startingBlocks:int;// = 0
public var levelNumber:int;// = 0
public var beaten:Boolean;// = false
public var levelBonus:int;// = 0
public function LevelData(_arg1:int){
levelNumber = 0;
levelTime = 0;
startingBlocks = 0;
levelBonus = 0;
isAvailable = false;
beaten = false;
bestScore = 0;
mapPosX = 0;
mapPosY = 0;
slopePointPos = new Array();
foregroundBoulderPos = new Array();
backgroundBoulderPos = new Array();
treePos = new Array();
super();
levelNumber = _arg1;
populateLevel();
}
public function deactivate(){
}
private function startGame(_arg1:MouseEvent){
deactivate();
}
public function populateLevel(){
switch (levelNumber){
case 0:
levelName = "Bunny Slope";
levelTime = 300;
startingBlocks = 10;
levelBonus = 100;
mapPosX = 500;
mapPosY = 340;
isAvailable = true;
backgroundType = Background1;
slopePointPos[0] = [-400, 110, 185, 314, 377, 469, 670, 772, 770, 926, 1045, 1202, 1325, 1486, 1680];
slopePointPos[1] = [1272, 1055, 915, 884, 761, 673, 622, 622, 486, 425, 283, 142, 106, 61, -8];
foregroundBoulderPos[0] = [1307, 1344, 1330, 1393, 1364, 1465, 1596, 1567, 1626, 1519];
foregroundBoulderPos[1] = [88, 71, 28, 45, -9, -81, -32, -116, -111, 14];
foregroundBoulderPos[2] = [16, 21, 11, 31, 21, 56, 36, 21, 31, 21];
treePos[0] = [269, 212, 56, 539];
treePos[1] = [835, 851, 1019, 595];
break;
case 1:
levelName = "Hidden Valley";
levelTime = 200;
startingBlocks = 15;
levelBonus = 600;
mapPosX = 290;
mapPosY = 350;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, -88, 90, 210, 245, 289, 371, 421, 461, 509, 570, 619, 720, 833, 934, 990, 1048, 1073, 1054, 985, 908, 1134, 1346, 1404, 1680];
slopePointPos[1] = [-293, -26, 258, 688, 909, 1021, 1029, 999, 885, 774, 737, 667, 668, 703, 855, 869, 867, 784, 601, 532, 463, 397, 34, -155, -314];
foregroundBoulderPos[0] = [-202, -138, -99, 1425, 1478, 1571, 1577, 1630];
foregroundBoulderPos[1] = [-180, -177, -101, -206, -270, -303, -359, -317];
foregroundBoulderPos[2] = [31, 21, 41, 21, 51, 36, 11, 21];
treePos[0] = [525, 824, 383, 329, 297, 708];
treePos[1] = [704, 640, 962, 968, 963, 612];
break;
case 2:
levelName = "Bald Mountain";
levelTime = 125;
startingBlocks = 15;
levelBonus = 500;
mapPosX = 70;
mapPosY = 125;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 42, 114, 162, 200, 211, 238, 245, 338, 342, 379, 395, 494, 527, 562, 599, 637, 682, 714, 761, 866, 885, 905, 925, 935, 1053, 1058, 1103, 1181, 1265, 1360, 1680];
slopePointPos[1] = [916, 1201, 1207, 1185, 1111, 1032, 988, 897, 897, 781, 694, 621, 621, 564, 475, 424, 411, 424, 478, 625, 625, 687, 736, 807, 889, 889, 1017, 1057, 1070, 1039, 981, 902];
foregroundBoulderPos[0] = [695, 605, 623, 677, 609, 698, 572, 647];
foregroundBoulderPos[1] = [-137, -67, -204, -233, -358, -190, -148, -311];
foregroundBoulderPos[2] = [21, 11, 26, 21, 11, 11, 21, 36];
treePos[0] = [1042, 954, 855, 772, 482, 403, 325, 249];
treePos[1] = [834, 834, 569, 569, 564, 565, 842, 843];
break;
case 3:
levelName = "Indiana Heights";
levelTime = 250;
startingBlocks = 1;
levelBonus = 1100;
mapPosX = 170;
mapPosY = 270;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 18, 108, 149, 178, 190, 233, 284, 361, 459, 564, 653, 684, 725, 797, 869, 987, 1058, 1121, 1172, 1322, 1680];
slopePointPos[1] = [-98, 206, 208, 235, 279, 330, 392, 451, 488, 525, 0x0200, 546, 628, 735, 815, 841, 841, 853, 901, 994, 1157, 1427];
foregroundBoulderPos[0] = [-297];
foregroundBoulderPos[1] = [-142];
foregroundBoulderPos[2] = [81];
treePos[0] = [];
treePos[1] = [];
break;
case 4:
levelName = "The Gap";
levelTime = 240;
startingBlocks = 5;
levelBonus = 1200;
mapPosX = 360;
mapPosY = 270;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, -190, 98, 259, 496, 601, 597, 797, 801, 921, 1199, 1396, 1680];
slopePointPos[1] = [151, 381, 520, 671, 749, 749, 1619, 1618, 747, 748, 613, 351, 51];
foregroundBoulderPos[0] = [-211, -256, -324, -260, -177, 1546, 1597, 1630];
foregroundBoulderPos[1] = [295, 225, 168, 148, 249, 131, 100, 55];
foregroundBoulderPos[2] = [26, 46, 36, 21, 16, 36, 21, 31];
treePos[0] = [826, 572];
treePos[1] = [691, 694];
break;
case 5:
levelName = "Mount Crumpet";
levelTime = 180;
startingBlocks = 5;
levelBonus = 1000;
mapPosX = 175;
mapPosY = 145;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 119, 233, 365, 435, 376, 320, 248, 195, 131, 142, 219, 308, 374, 459, 543, 655, 842, 1020, 1303, 1680];
slopePointPos[1] = [1590, 1556, 1304, 1173, 987, 795, 664, 599, 595, 649, 567, 498, 498, 521, 591, 701, 841, 1019, 1141, 1231, 1590];
foregroundBoulderPos[0] = [176, 240, 243, 268, 383, 479, 331, 393];
foregroundBoulderPos[1] = [-191, -289, -34, -126, -335, -171, -196, -80];
foregroundBoulderPos[2] = [26, 41, 11, 31, 36, 46, 16, 11];
treePos[0] = [1072, 1222, 301];
treePos[1] = [1099, 1146, 1172];
break;
case 6:
levelName = "Meteor Flats";
levelTime = 150;
startingBlocks = 3;
levelBonus = 500;
mapPosX = 80;
mapPosY = 350;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 1680];
slopePointPos[1] = [825, 825];
foregroundBoulderPos[0] = [50, 175, 340, 249, 469, 550, 670, 743, 878, 810, 968, 1066, 1138, 1228, 582];
foregroundBoulderPos[1] = [-132, -99, -172, -131, -105, -336, -233, -114, -168, -262, -98, -282, -179, -98, -152];
foregroundBoulderPos[2] = [36, 21, 51, 16, 31, 36, 26, 46, 36, 16, 51, 51, 41, 21, 76];
treePos[0] = [1155, 915, 239];
treePos[1] = [0x0300, 0x0300, 769];
break;
case 7:
levelName = "Lover's Leap";
levelTime = 200;
startingBlocks = 0;
levelBonus = 1100;
mapPosX = 320;
mapPosY = 95;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, -10, 194, 287, 391, 394, 662, 654, 0x0303, 1002, 1157, 1336, 1680];
slopePointPos[1] = [-260, 266, 388, 405, 405, 1636, 1633, 921, 919, 781, 659, 415, 115];
foregroundBoulderPos[0] = [1341, -128];
foregroundBoulderPos[1] = [330, 53];
foregroundBoulderPos[2] = [56, 26];
treePos[0] = [];
treePos[1] = [];
break;
case 8:
levelName = "Lemming Cliff";
levelTime = 250;
startingBlocks = 20;
levelBonus = 1700;
mapPosX = 280;
mapPosY = 175;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 481, 479, 624, 793, 1004, 1146, 1680];
slopePointPos[1] = [1557, 1546, 845, 836, 773, 635, 472, -330];
foregroundBoulderPos[0] = [1469, 1486, 1524, 1557, 1538, 1505, 1575, 1527, 1500, 1592, 1564, 1585, 1613, 1585, 1553, 1513, 1476, 1463, 1614, 1632];
foregroundBoulderPos[1] = [-34, -59, -116, -171, -143, -85, -198, -172, -116, -231, -232, -212, -256, -269, -201, -143, -88, -60, -282, -280];
foregroundBoulderPos[2] = [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6];
treePos[0] = [704, 865];
treePos[1] = [748, 666];
break;
case 9:
levelName = "Precarious Peaks";
levelTime = 250;
startingBlocks = 5;
levelBonus = 700;
mapPosX = 555;
mapPosY = 140;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 247, 249, 365, 371, 470, 469, 577, 580, 686, 685, 794, 793, 910, 910, 1031, 1030, 1680];
slopePointPos[1] = [-108, 607, 1607, 1607, 823, 823, 1604, 1606, 944, 944, 1603, 1602, 814, 814, 1603, 1602, 599, -108];
foregroundBoulderPos[0] = [1456, 1520, -261, -206, -158, -133, -340, -281, 1612, 1627, 1549, 1418];
foregroundBoulderPos[1] = [62, -38, -63, 29, 97, 42, -134, -171, -102, -185, -146, 119];
foregroundBoulderPos[2] = [36, 61, 61, 41, 31, 16, 31, 31, 36, 41, 21, 16];
treePos[0] = [];
treePos[1] = [];
break;
case 10:
levelName = "The Great Depression";
levelTime = 220;
startingBlocks = 30;
levelBonus = 1500;
mapPosX = 440;
mapPosY = 200;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, -54, 97, 259, 382, 482, 578, 659, 741, 821, 931, 1032, 1148, 1289, 1680];
slopePointPos[1] = [-99, 462, 719, 934, 1085, 1154, 1198, 1198, 1196, 1158, 1075, 944, 778, 574, -102];
foregroundBoulderPos[0] = [1587, 1487, -24, -43, -19, -65, -23, -92, -27, 1614, 1631, 1557, 1510];
foregroundBoulderPos[1] = [-131, -185, 468, 425, 394, 375, 351, 305, 304, -332, -223, -227, -290];
foregroundBoulderPos[2] = [46, 46, 16, 21, 11, 26, 16, 41, 21, 61, 41, 31, 41];
treePos[0] = [];
treePos[1] = [];
break;
case 11:
levelName = "Mount Doom";
levelTime = 100;
startingBlocks = 15;
levelBonus = 1800;
mapPosX = 420;
mapPosY = 50;
isAvailable = false;
backgroundType = Background1;
slopePointPos[0] = [-400, 236, 419, 500, 499, 539, 540, 577, 606, 670, 666, 707, 708, 750, 750, 841, 1026, 1680];
slopePointPos[1] = [1379, 727, 442, 233, 317, 317, 471, 471, 1634, 1635, 462, 462, 318, 318, 235, 444, 725, 1379];
foregroundBoulderPos[0] = [524, 533, 605, 670, 618, 545, 594, 661, 670, 564, 636, 563, 683, 593, 548, 673, 725, 373, 848, 259, 272, 1008, 1053, 904, 447];
foregroundBoulderPos[1] = [-312, -246, -260, -323, -355, -97, -27, -71, -144, -357, -302, -280, -197, -116, -185, -372, -264, -187, -124, -48, -237, -263, -107, -345, -275];
foregroundBoulderPos[2] = [16, 11, 21, 16, 21, 6, 6, 11, 16, 26, 21, 21, 16, 11, 21, 26, 21, 21, 26, 26, 31, 31, 36, 31, 26];
treePos[0] = [];
treePos[1] = [];
break;
};
}
public function activate(){
}
}
}//package
Section 91
//LevelMarker (LevelMarker)
package {
import flash.events.*;
import flash.display.*;
import org.generalrelativity.foam.view.*;
import flash.text.*;
import flash.net.*;
import mochi.*;
public class LevelMarker extends MovieClip {
const WONLEVELFX:int = 5;
const MOVEDESKIMOFX:int = 6;
const BIGBOULDERTRACTION:Number = 0.9;
const FOAMESKIMO:int = 1;
const HURT2FX:int = 14;
const AVALANCHEFX:int = 1;
const RIGHTBOUNDARY:int = -640;
const ESKIMOFRICTION:Number = 0.1;
const TREEHEIGHT:int = 100;
const GOODSPOTFX:int = 2;
const HURT1FX:int = 13;
const TOPBOUNDARY:int = 0;
const ESKIMODIEDFX:int = 9;
const NUMLEVELS:int = 12;
const BIGBOULDERSIZE:int = 25;
const SLOPE_ENDING_POINT:int = 50;
const TREEFRICTION:Number = 0;
const BACKRIGHTBOUNDARY:int = -320;
const MAXHEALTH:int = 100;
const LEVELWIDTH:int = 0x0500;
const STATE_PLACINGESKIMO:int = 1;
const TREEWIDTH:int = 20;
const ICEBLOCKMASS:int = 20;
const DELETE_BLOCK:int = 2;
const BUTTONCLICKFX:int = 10;
const BIGBOULDER1:int = 99;
const BIGBOULDER2:int = 102;
const BIGBOULDERFRICTION:Number = 0.1;
const NOPEFX:int = 12;
const HOLDBLOCK:int = 104;
const FOAMBLOCK:int = 3;
const ESKIMOMASS:int = 1;
const BACKTOPBOUNDARY:int = 0;
const LEFTBOUNDARY:int = 0;
const ESKIMOBOUNCE:Number = 0.3;
const ESKIMOWIDTH:int = 15;
const DRAG:int = 57;
const INCREASESIZE:int = 38;
const PLACEDBLOCKFX:int = 7;
const SPACEBAR:int = 32;
const BUILD_BLOCK:int = 1;
const BOTTOMBOUNDARY:int = -800;
const SCROLLAMOUNT:int = 20;
const BIGBOULDERMASS:int = 100;
const FOAMBOULDER:int = 2;
const SLOPEFRICTION:Number = 0;
const LEVELHEIGHT:int = 0x0500;
const TREEMASS:Number = 50;
const BACKLEFTBOUNDARY:int = 0;
const LOSTLEVELFX:int = 3;
const BACKGROUNDSCROLLAMOUNT:int = 10;
const TREE:int = 103;
const DECREASESIZE:int = 40;
const NOBLOCKSFX:int = 11;
const TREEBOUNCE:Number = 0.1;
const MEDBOULDER1:int = 98;
const MEDBOULDER2:int = 101;
const DELETE:int = 48;
const EXPORT:int = 96;
const BIGBOULDERBOUNCE:Number = 0.5;
const SLOPE_POINT:int = 51;
const NO_BUILD_STATE:int = 0;
const STATE_AVALANCHE:int = 3;
const STATE_BUILDINGIGLOO:int = 2;
const SLOPEBOUNCE:Number = 0.25;
const ESKIMOHEIGHT:int = 26;
const REMOVEDBLOCKFX:int = 8;
const ICEBLOCKFRICTION:Number = 0.7;
const SLOPE_STARTING_POINT:int = 49;
const SMALLBOULDER1:int = 97;
const SMALLBOULDER2:int = 100;
const HURT3FX:int = 15;
const ICEBLOCKBOUNCE:Number = 0;
const BACKBOTTOMBOUNDARY:int = -400;
public var isBeaten:Boolean;// = false
public var isAvailable:Boolean;// = false
public var beatenFlag:BeatenFlag;
public var markerHover:MarkerHover;
public var levelLabel:TextField;
public var levelNumber:int;// = 0
public function LevelMarker(_arg1:int){
levelNumber = 0;
isAvailable = false;
isBeaten = false;
super();
addFrameScript(0, frame1, 1, frame2);
this.buttonMode = true;
this.useHandCursor = true;
this.mouseChildren = false;
levelNumber = _arg1;
gotoAndStop("unavailable");
markerHover.visible = false;
beatenFlag.visible = false;
levelLabel.visible = false;
}
private function mouseOverClip(_arg1:MouseEvent){
if (isAvailable){
markerHover.visible = true;
};
}
function frame2(){
stop();
}
private function startLevel(_arg1:MouseEvent){
AvalancherManager.leaveTitle(levelNumber);
AvalancherManager.playFx(BUTTONCLICKFX);
}
public function deactivate(){
if (isAvailable){
removeEventListener(MouseEvent.CLICK, startLevel);
};
removeEventListener(MouseEvent.ROLL_OVER, mouseOverClip);
removeEventListener(MouseEvent.ROLL_OUT, mouseOutClip);
}
public function makeAvailable(){
levelLabel.visible = true;
isAvailable = true;
gotoAndStop("available");
levelLabel.text = AvalancherManager.levelInfo[levelNumber].levelName;
if (isBeaten){
beatenFlag.visible = true;
levelLabel.text = ((AvalancherManager.levelInfo[levelNumber].levelName + "\n") + String(AvalancherManager.levelInfo[levelNumber].bestScore));
};
}
public function makeBeaten(){
isBeaten = true;
beatenFlag.visible = true;
levelLabel.text = ((AvalancherManager.levelInfo[levelNumber].levelName + "\n") + String(AvalancherManager.levelInfo[levelNumber].bestScore));
}
function frame1(){
stop();
}
public function activate(){
if (isAvailable){
addEventListener(MouseEvent.CLICK, startLevel);
};
addEventListener(MouseEvent.ROLL_OVER, mouseOverClip);
addEventListener(MouseEvent.ROLL_OUT, mouseOutClip);
}
private function mouseOutClip(_arg1:MouseEvent){
if (isAvailable){
markerHover.visible = false;
};
}
}
}//package
Section 92
//LogoIntroClip (LogoIntroClip)
package {
import flash.display.*;
public dynamic class LogoIntroClip extends MovieClip {
}
}//package
Section 93
//LostLevelSound (LostLevelSound)
package {
import flash.media.*;
public dynamic class LostLevelSound extends Sound {
}
}//package
Section 94
//MarkerHover (MarkerHover)
package {
import flash.display.*;
public dynamic class MarkerHover extends Sprite {
}
}//package
Section 95
//MovedEskimoSound (MovedEskimoSound)
package {
import flash.media.*;
public dynamic class MovedEskimoSound extends Sound {
}
}//package
Section 96
//MusicButton (MusicButton)
package {
import flash.display.*;
public dynamic class MusicButton extends MovieClip {
public function MusicButton(){
addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4);
}
function frame3(){
stop();
}
function frame1(){
stop();
}
function frame4(){
stop();
}
function frame2(){
stop();
}
}
}//package
Section 97
//NewLevelButton (NewLevelButton)
package {
import flash.display.*;
public dynamic class NewLevelButton extends SimpleButton {
}
}//package
Section 98
//NoBlocksSound (NoBlocksSound)
package {
import flash.media.*;
public dynamic class NoBlocksSound extends Sound {
}
}//package
Section 99
//NopeSound (NopeSound)
package {
import flash.media.*;
public dynamic class NopeSound extends Sound {
}
}//package
Section 100
//OkButtoncopy (OkButtoncopy)
package {
import flash.display.*;
public dynamic class OkButtoncopy extends SimpleButton {
}
}//package
Section 101
//PlacedBlockSound (PlacedBlockSound)
package {
import flash.media.*;
public dynamic class PlacedBlockSound extends Sound {
}
}//package
Section 102
//PlayMoreGamesButton (PlayMoreGamesButton)
package {
import flash.display.*;
public dynamic class PlayMoreGamesButton extends SimpleButton {
}
}//package
Section 103
//RemovedBlockSound (RemovedBlockSound)
package {
import flash.media.*;
public dynamic class RemovedBlockSound extends Sound {
}
}//package
Section 104
//ScoreScreen (ScoreScreen)
package {
import flash.display.*;
import flash.text.*;
public dynamic class ScoreScreen extends MovieClip {
public var tryAgainButton:TryAgainButton;
public var bonusAmounts:TextField;
public var bonusLabel:TextField;
public var finalLabel:TextField;
public var newLevelButton:NewLevelButton;
public var otherBonusAmounts:TextField;
public var previousAmount:TextField;
public var previousLabel:TextField;
public var otherBonusLabel:TextField;
public var finalAmount:TextField;
public var failGrave:GraveClip;
public var titleSuccess:TextField;
public var titleFail:TextField;
public var otherBonusText:TextField;
}
}//package
Section 105
//ScreenObscurer (ScreenObscurer)
package {
import flash.display.*;
public dynamic class ScreenObscurer extends MovieClip {
public function ScreenObscurer(){
addFrameScript(34, frame35);
}
function frame35(){
stop();
}
}
}//package
Section 106
//ScrollArrow (ScrollArrow)
package {
import flash.display.*;
public dynamic class ScrollArrow extends MovieClip {
public function ScrollArrow(){
addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8);
}
function frame3(){
stop();
}
function frame6(){
stop();
}
function frame7(){
stop();
}
function frame1(){
stop();
}
function frame4(){
stop();
}
function frame5(){
stop();
}
function frame8(){
stop();
}
function frame2(){
stop();
}
}
}//package
Section 107
//SmallBoulder1 (SmallBoulder1)
package {
import flash.display.*;
public dynamic class SmallBoulder1 extends MovieClip {
}
}//package
Section 108
//SmallBoulder2 (SmallBoulder2)
package {
import flash.display.*;
public dynamic class SmallBoulder2 extends MovieClip {
}
}//package
Section 109
//Smash (Smash)
package {
import flash.media.*;
public dynamic class Smash extends Sound {
}
}//package
Section 110
//SSIntroSound (SSIntroSound)
package {
import flash.media.*;
public dynamic class SSIntroSound extends Sound {
}
}//package
Section 111
//StartHereClip (StartHereClip)
package {
import flash.display.*;
public dynamic class StartHereClip extends Sprite {
}
}//package
Section 112
//SubmitScoreButton (SubmitScoreButton)
package {
import flash.display.*;
public dynamic class SubmitScoreButton extends SimpleButton {
}
}//package
Section 113
//TimeBar (TimeBar)
package {
import flash.display.*;
public dynamic class TimeBar extends MovieClip {
}
}//package
Section 114
//TitleScore (TitleScore)
package {
import flash.display.*;
import flash.text.*;
public dynamic class TitleScore extends Sprite {
public var scoreText:TextField;
}
}//package
Section 115
//ToggleButton (ToggleButton)
package {
import flash.events.*;
import flash.display.*;
public class ToggleButton {
public var idNumber:int;// = 0
public var isOn:Boolean;// = false
public var isMouseOver:Boolean;// = false
public var clip:MovieClip;
public function ToggleButton(){
isOn = false;
isMouseOver = false;
idNumber = 0;
super();
}
public function turnOn(){
isOn = true;
if (isMouseOver){
clip.gotoAndStop("onOver");
} else {
clip.gotoAndStop("on");
};
}
public function mouseOverButton(_arg1:MouseEvent){
isMouseOver = true;
if (isOn){
clip.gotoAndStop("onOver");
} else {
clip.gotoAndStop("offOver");
};
}
public function deactivate(){
clip.removeEventListener(MouseEvent.MOUSE_OVER, mouseOverButton);
clip.removeEventListener(MouseEvent.MOUSE_OUT, mouseOffButton);
clip.buttonMode = false;
}
public function turnOff(){
isOn = false;
if (isMouseOver){
clip.gotoAndStop("offOver");
} else {
clip.gotoAndStop("off");
};
}
public function activate(){
clip.addEventListener(MouseEvent.MOUSE_OVER, mouseOverButton);
clip.addEventListener(MouseEvent.MOUSE_OUT, mouseOffButton);
clip.buttonMode = true;
}
public function mouseClickedButton(_arg1:MouseEvent){
if (isOn){
isOn = false;
clip.gotoAndStop("offOver");
} else {
isOn = true;
clip.gotoAndStop("onOver");
};
}
public function mouseOffButton(_arg1:MouseEvent){
isMouseOver = false;
if (isOn){
clip.gotoAndStop("on");
} else {
clip.gotoAndStop("off");
};
}
}
}//package
Section 116
//TransitionScreen (TransitionScreen)
package {
import flash.display.*;
public dynamic class TransitionScreen extends Sprite {
}
}//package
Section 117
//TreeClip (TreeClip)
package {
import flash.display.*;
public dynamic class TreeClip extends Sprite {
}
}//package
Section 118
//TriggerInstructions (TriggerInstructions)
package {
import flash.display.*;
public dynamic class TriggerInstructions extends Sprite {
}
}//package
Section 119
//TryAgainButton (TryAgainButton)
package {
import flash.display.*;
public dynamic class TryAgainButton extends SimpleButton {
}
}//package
Section 120
//TutorialBox (TutorialBox)
package {
import flash.display.*;
import flash.text.*;
public dynamic class TutorialBox extends MovieClip {
public var tutorialText:TextField;
}
}//package
Section 121
//VideoWalkthroughButton (VideoWalkthroughButton)
package {
import flash.display.*;
public dynamic class VideoWalkthroughButton extends SimpleButton {
}
}//package
Section 122
//WonLevelSound (WonLevelSound)
package {
import flash.media.*;
public dynamic class WonLevelSound extends Sound {
}
}//package