Section 1
//AuxFunctions (caurina.transitions.AuxFunctions)
package caurina.transitions {
public class AuxFunctions {
public static function getObjectLength(p_object:Object):uint{
var pName:String;
var totalProperties:uint;
for (pName in p_object) {
totalProperties++;
};
return (totalProperties);
}
public static function numberToG(p_num:Number):Number{
return (((p_num & 0xFF00) >> 8));
}
public static function numberToB(p_num:Number):Number{
return ((p_num & 0xFF));
}
public static function numberToR(p_num:Number):Number{
return (((p_num & 0xFF0000) >> 16));
}
public static function concatObjects(... _args):Object{
var currentObject:Object;
var prop:String;
var finalObject:Object = {};
var i:int;
while (i < _args.length) {
currentObject = _args[i];
for (prop in currentObject) {
if (currentObject[prop] == null){
delete finalObject[prop];
} else {
finalObject[prop] = currentObject[prop];
};
};
i++;
};
return (finalObject);
}
}
}//package caurina.transitions
Section 2
//Equations (caurina.transitions.Equations)
package caurina.transitions {
public class Equations {
public function Equations(){
super();
trace("Equations is a static class and should not be instantiated.");
}
public static function easeOutBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
if (t < (1 / 2.75)){
return (((c * ((7.5625 * t) * t)) + b));
};
if (t < (2 / 2.75)){
t = (t - (1.5 / 2.75));
return (((c * (((7.5625 * t) * t) + 0.75)) + b));
};
if (t < (2.5 / 2.75)){
t = (t - (2.25 / 2.75));
return (((c * (((7.5625 * t) * t) + 0.9375)) + b));
};
t = (t - (2.625 / 2.75));
return (((c * (((7.5625 * t) * t) + 0.984375)) + b));
}
public static function easeInOutElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number;
if (t == 0){
return (b);
};
t = (t / (d / 2));
if (t == 2){
return ((b + c));
};
var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * (0.3 * 1.5)) : p_params.period;
var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude;
if (((!(Boolean(a))) || ((a < Math.abs(c))))){
a = c;
s = (p / 4);
} else {
s = ((p / (2 * Math.PI)) * Math.asin((c / a)));
};
if (t < 1){
--t;
return (((-0.5 * ((a * Math.pow(2, (10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p)))) + b));
};
--t;
return ((((((a * Math.pow(2, (-10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p))) * 0.5) + c) + b));
}
public static function easeInOutQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / (d / 2));
if (t < 1){
return (((((c / 2) * t) * t) + b));
};
--t;
return ((((-(c) / 2) * ((t * (t - 2)) - 1)) + b));
}
public static function easeInOutBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (((easeInBounce((t * 2), 0, c, d) * 0.5) + b));
};
return ((((easeOutBounce(((t * 2) - d), 0, c, d) * 0.5) + (c * 0.5)) + b));
}
public static function easeInOutBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot;
t = (t / (d / 2));
if (t < 1){
s = (s * 1.525);
return ((((c / 2) * ((t * t) * (((s + 1) * t) - s))) + b));
};
t = (t - 2);
s = (s * 1.525);
return ((((c / 2) * (((t * t) * (((s + 1) * t) + s)) + 2)) + b));
}
public static function easeOutInCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutCubic((t * 2), b, (c / 2), d, p_params));
};
return (easeInCubic(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeNone(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return ((((c * t) / d) + b));
}
public static function easeOutBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot;
t = ((t / d) - 1);
return (((c * (((t * t) * (((s + 1) * t) + s)) + 1)) + b));
}
public static function easeInOutSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return ((((-(c) / 2) * (Math.cos(((Math.PI * t) / d)) - 1)) + b));
}
public static function easeInBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number = (((!(Boolean(p_params))) || (isNaN(p_params.overshoot)))) ? 1.70158 : p_params.overshoot;
t = (t / d);
return (((((c * t) * t) * (((s + 1) * t) - s)) + b));
}
public static function easeInQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return ((((((c * t) * t) * t) * t) + b));
}
public static function easeOutInQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutQuint((t * 2), b, (c / 2), d, p_params));
};
return (easeInQuint(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeOutInBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutBounce((t * 2), b, (c / 2), d, p_params));
};
return (easeInBounce(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
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(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return (((t)==d) ? (b + c) : (((c * 1.001) * (-(Math.pow(2, ((-10 * t) / d))) + 1)) + b));
}
public static function easeOutInBack(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutBack((t * 2), b, (c / 2), d, p_params));
};
return (easeInBack(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeInExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return (((t)==0) ? b : (((c * Math.pow(2, (10 * ((t / d) - 1)))) + b) - (c * 0.001)));
}
public static function easeInCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return (((((c * t) * t) * t) + b));
}
public static function easeInQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return (((((((c * t) * t) * t) * t) * t) + b));
}
public static function easeInOutCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / (d / 2));
if (t < 1){
return ((((-(c) / 2) * (Math.sqrt((1 - (t * t))) - 1)) + b));
};
t = (t - 2);
return ((((c / 2) * (Math.sqrt((1 - (t * t))) + 1)) + b));
}
public static function easeInQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return ((((c * t) * t) + b));
}
public static function easeInBounce(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return (((c - easeOutBounce((d - t), 0, c, d)) + b));
}
public static function easeOutInExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutExpo((t * 2), b, (c / 2), d, p_params));
};
return (easeInExpo(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeOutQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = ((t / d) - 1);
return (((-(c) * ((((t * t) * t) * t) - 1)) + b));
}
public static function easeInSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return ((((-(c) * Math.cos(((t / d) * (Math.PI / 2)))) + c) + b));
}
public static function easeInOutQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / (d / 2));
if (t < 1){
return (((((((c / 2) * t) * t) * t) * t) + b));
};
t = (t - 2);
return ((((-(c) / 2) * ((((t * t) * t) * t) - 2)) + b));
}
public static function easeOutQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return ((((-(c) * t) * (t - 2)) + b));
}
public static function easeOutInElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutElastic((t * 2), b, (c / 2), d, p_params));
};
return (easeInElastic(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeInElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number;
if (t == 0){
return (b);
};
t = (t / d);
if (t == 1){
return ((b + c));
};
var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * 0.3) : p_params.period;
var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude;
if (((!(Boolean(a))) || ((a < Math.abs(c))))){
a = c;
s = (p / 4);
} else {
s = ((p / (2 * Math.PI)) * Math.asin((c / a)));
};
--t;
return ((-(((a * Math.pow(2, (10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p)))) + b));
}
public static function easeOutCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = ((t / d) - 1);
return (((c * (((t * t) * t) + 1)) + b));
}
public static function easeOutQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = ((t / d) - 1);
return (((c * (((((t * t) * t) * t) * t) + 1)) + b));
}
public static function easeOutInQuad(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutQuad((t * 2), b, (c / 2), d, p_params));
};
return (easeInQuad(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeOutSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
return (((c * Math.sin(((t / d) * (Math.PI / 2)))) + b));
}
public static function easeInOutCubic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / (d / 2));
if (t < 1){
return ((((((c / 2) * t) * t) * t) + b));
};
t = (t - 2);
return ((((c / 2) * (((t * t) * t) + 2)) + b));
}
public static function easeInOutQuint(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / (d / 2));
if (t < 1){
return ((((((((c / 2) * t) * t) * t) * t) * t) + b));
};
t = (t - 2);
return ((((c / 2) * (((((t * t) * t) * t) * t) + 2)) + b));
}
public static function easeInCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = (t / d);
return (((-(c) * (Math.sqrt((1 - (t * t))) - 1)) + b));
}
public static function easeOutInSine(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutSine((t * 2), b, (c / 2), d, p_params));
};
return (easeInSine(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeInOutExpo(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t == 0){
return (b);
};
if (t == d){
return ((b + c));
};
t = (t / (d / 2));
if (t < 1){
return (((((c / 2) * Math.pow(2, (10 * (t - 1)))) + b) - (c * 0.0005)));
};
--t;
return (((((c / 2) * 1.0005) * (-(Math.pow(2, (-10 * t))) + 2)) + b));
}
public static function easeOutElastic(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
var s:Number;
if (t == 0){
return (b);
};
t = (t / d);
if (t == 1){
return ((b + c));
};
var p:Number = (((!(Boolean(p_params))) || (isNaN(p_params.period)))) ? (d * 0.3) : p_params.period;
var a:Number = (((!(Boolean(p_params))) || (isNaN(p_params.amplitude)))) ? 0 : p_params.amplitude;
if (((!(Boolean(a))) || ((a < Math.abs(c))))){
a = c;
s = (p / 4);
} else {
s = ((p / (2 * Math.PI)) * Math.asin((c / a)));
};
return (((((a * Math.pow(2, (-10 * t))) * Math.sin(((((t * d) - s) * (2 * Math.PI)) / p))) + c) + b));
}
public static function easeOutCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
t = ((t / d) - 1);
return (((c * Math.sqrt((1 - (t * t)))) + b));
}
public static function easeOutInQuart(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutQuart((t * 2), b, (c / 2), d, p_params));
};
return (easeInQuart(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
public static function easeOutInCirc(t:Number, b:Number, c:Number, d:Number, p_params:Object=null):Number{
if (t < (d / 2)){
return (easeOutCirc((t * 2), b, (c / 2), d, p_params));
};
return (easeInCirc(((t * 2) - d), (b + (c / 2)), (c / 2), d, p_params));
}
}
}//package caurina.transitions
Section 3
//PropertyInfoObj (caurina.transitions.PropertyInfoObj)
package caurina.transitions {
public class PropertyInfoObj {
public var modifierParameters:Array;
public var isSpecialProperty:Boolean;
public var valueComplete:Number;
public var modifierFunction:Function;
public var extra:Object;
public var valueStart:Number;
public var hasModifier:Boolean;
public var arrayIndex:Number;
public var originalValueComplete:Object;
public function PropertyInfoObj(p_valueStart:Number, p_valueComplete:Number, p_originalValueComplete:Object, p_arrayIndex:Number, p_extra:Object, p_isSpecialProperty:Boolean, p_modifierFunction:Function, p_modifierParameters:Array){
super();
valueStart = p_valueStart;
valueComplete = p_valueComplete;
originalValueComplete = p_originalValueComplete;
arrayIndex = p_arrayIndex;
extra = p_extra;
isSpecialProperty = p_isSpecialProperty;
hasModifier = Boolean(p_modifierFunction);
modifierFunction = p_modifierFunction;
modifierParameters = p_modifierParameters;
}
public function toString():String{
var returnStr:String = "\n[PropertyInfoObj ";
returnStr = (returnStr + ("valueStart:" + String(valueStart)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("valueComplete:" + String(valueComplete)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("originalValueComplete:" + String(originalValueComplete)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("arrayIndex:" + String(arrayIndex)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("extra:" + String(extra)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("isSpecialProperty:" + String(isSpecialProperty)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("hasModifier:" + String(hasModifier)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("modifierFunction:" + String(modifierFunction)));
returnStr = (returnStr + ", ");
returnStr = (returnStr + ("modifierParameters:" + String(modifierParameters)));
returnStr = (returnStr + "]\n");
return (returnStr);
}
public function clone():PropertyInfoObj{
var nProperty:PropertyInfoObj = new PropertyInfoObj(valueStart, valueComplete, originalValueComplete, arrayIndex, extra, isSpecialProperty, modifierFunction, modifierParameters);
return (nProperty);
}
}
}//package caurina.transitions
Section 4
//SpecialProperty (caurina.transitions.SpecialProperty)
package caurina.transitions {
public class SpecialProperty {
public var parameters:Array;
public var getValue:Function;
public var preProcess:Function;
public var setValue:Function;
public function SpecialProperty(p_getFunction:Function, p_setFunction:Function, p_parameters:Array=null, p_preProcessFunction:Function=null){
super();
getValue = p_getFunction;
setValue = p_setFunction;
parameters = p_parameters;
preProcess = p_preProcessFunction;
}
public function toString():String{
var value:String = "";
value = (value + "[SpecialProperty ");
value = (value + ("getValue:" + String(getValue)));
value = (value + ", ");
value = (value + ("setValue:" + String(setValue)));
value = (value + ", ");
value = (value + ("parameters:" + String(parameters)));
value = (value + ", ");
value = (value + ("preProcess:" + String(preProcess)));
value = (value + "]");
return (value);
}
}
}//package caurina.transitions
Section 5
//SpecialPropertyModifier (caurina.transitions.SpecialPropertyModifier)
package caurina.transitions {
public class SpecialPropertyModifier {
public var getValue:Function;
public var modifyValues:Function;
public function SpecialPropertyModifier(p_modifyFunction:Function, p_getFunction:Function){
super();
modifyValues = p_modifyFunction;
getValue = p_getFunction;
}
public function toString():String{
var value:String = "";
value = (value + "[SpecialPropertyModifier ");
value = (value + ("modifyValues:" + String(modifyValues)));
value = (value + ", ");
value = (value + ("getValue:" + String(getValue)));
value = (value + "]");
return (value);
}
}
}//package caurina.transitions
Section 6
//SpecialPropertySplitter (caurina.transitions.SpecialPropertySplitter)
package caurina.transitions {
public class SpecialPropertySplitter {
public var parameters:Array;
public var splitValues:Function;
public function SpecialPropertySplitter(p_splitFunction:Function, p_parameters:Array){
super();
splitValues = p_splitFunction;
parameters = p_parameters;
}
public function toString():String{
var value:String = "";
value = (value + "[SpecialPropertySplitter ");
value = (value + ("splitValues:" + String(splitValues)));
value = (value + ", ");
value = (value + ("parameters:" + String(parameters)));
value = (value + "]");
return (value);
}
}
}//package caurina.transitions
Section 7
//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(){
super();
trace("Tweener is a static class and should not be instantiated.");
}
public static function registerSpecialPropertyModifier(p_name:String, p_modifyFunction:Function, p_getFunction:Function):void{
if (!_inited){
init();
};
var spm:SpecialPropertyModifier = new SpecialPropertyModifier(p_modifyFunction, p_getFunction);
_specialPropertyModifierList[p_name] = spm;
}
public static function registerSpecialProperty(p_name:String, p_getFunction:Function, p_setFunction:Function, p_parameters:Array=null, p_preProcessFunction:Function=null):void{
if (!_inited){
init();
};
var sp:SpecialProperty = new SpecialProperty(p_getFunction, p_setFunction, p_parameters, p_preProcessFunction);
_specialPropertyList[p_name] = sp;
}
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 i:int;
if (_tweenList.length == 0){
return (false);
};
i = 0;
while (i < _tweenList.length) {
if ((((_tweenList[i] == undefined)) || (!(_tweenList[i].isPaused)))){
if (!updateTweenByIndex(i)){
removeTweenByIndex(i);
};
if (_tweenList[i] == null){
removeTweenByIndex(i, true);
i--;
};
};
i++;
};
return (true);
}
public static function addCaller(p_scopes:Object=null, p_parameters:Object=null):Boolean{
var i:Number;
var rScopes:Array;
var rTransition:Function;
var nTween:TweenListObj;
var myT:Number;
var trans:String;
if (!Boolean(p_scopes)){
return (false);
};
if ((p_scopes is Array)){
rScopes = p_scopes.concat();
} else {
rScopes = [p_scopes];
};
var p_obj:Object = p_parameters;
if (!_inited){
init();
};
if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){
startEngine();
};
var rTime:Number = (isNaN(p_obj.time)) ? 0 : p_obj.time;
var rDelay:Number = (isNaN(p_obj.delay)) ? 0 : p_obj.delay;
if (typeof(p_obj.transition) == "string"){
trans = p_obj.transition.toLowerCase();
rTransition = _transitionList[trans];
} else {
rTransition = p_obj.transition;
};
if (!Boolean(rTransition)){
rTransition = _transitionList["easeoutexpo"];
};
i = 0;
while (i < rScopes.length) {
if (p_obj.useFrames == true){
nTween = new TweenListObj(rScopes[i], (_currentTimeFrame + (rDelay / _timeScale)), (_currentTimeFrame + ((rDelay + rTime) / _timeScale)), true, rTransition, p_obj.transitionParams);
} else {
nTween = new TweenListObj(rScopes[i], (_currentTime + ((rDelay * 1000) / _timeScale)), (_currentTime + (((rDelay * 1000) + (rTime * 1000)) / _timeScale)), false, rTransition, p_obj.transitionParams);
};
nTween.properties = null;
nTween.onStart = p_obj.onStart;
nTween.onUpdate = p_obj.onUpdate;
nTween.onComplete = p_obj.onComplete;
nTween.onOverwrite = p_obj.onOverwrite;
nTween.onStartParams = p_obj.onStartParams;
nTween.onUpdateParams = p_obj.onUpdateParams;
nTween.onCompleteParams = p_obj.onCompleteParams;
nTween.onOverwriteParams = p_obj.onOverwriteParams;
nTween.onStartScope = p_obj.onStartScope;
nTween.onUpdateScope = p_obj.onUpdateScope;
nTween.onCompleteScope = p_obj.onCompleteScope;
nTween.onOverwriteScope = p_obj.onOverwriteScope;
nTween.onErrorScope = p_obj.onErrorScope;
nTween.isCaller = true;
nTween.count = p_obj.count;
nTween.waitFrames = p_obj.waitFrames;
_tweenList.push(nTween);
if ((((rTime == 0)) && ((rDelay == 0)))){
myT = (_tweenList.length - 1);
updateTweenByIndex(myT);
removeTweenByIndex(myT);
};
i++;
};
return (true);
}
public static function pauseAllTweens():Boolean{
var i:uint;
if (!Boolean(_tweenList)){
return (false);
};
var paused:Boolean;
i = 0;
while (i < _tweenList.length) {
pauseTweenByIndex(i);
paused = true;
i++;
};
return (paused);
}
public static function removeTweens(p_scope:Object, ... _args):Boolean{
var i:uint;
var sps:SpecialPropertySplitter;
var specialProps:Array;
var j:uint;
var properties:Array = new Array();
i = 0;
while (i < _args.length) {
if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){
if (_specialPropertySplitterList[_args[i]]){
sps = _specialPropertySplitterList[_args[i]];
specialProps = sps.splitValues(p_scope, null);
j = 0;
while (j < specialProps.length) {
properties.push(specialProps[j].name);
j++;
};
} else {
properties.push(_args[i]);
};
};
i++;
};
return (affectTweens(removeTweenByIndex, p_scope, properties));
}
public static function splitTweens(p_tween:Number, p_properties:Array):uint{
var i:uint;
var pName:String;
var found:Boolean;
var originalTween:TweenListObj = _tweenList[p_tween];
var newTween:TweenListObj = originalTween.clone(false);
i = 0;
while (i < p_properties.length) {
pName = p_properties[i];
if (Boolean(originalTween.properties[pName])){
originalTween.properties[pName] = undefined;
delete originalTween.properties[pName];
};
i++;
};
for (pName in newTween.properties) {
found = false;
i = 0;
while (i < p_properties.length) {
if (p_properties[i] == pName){
found = true;
break;
};
i++;
};
if (!found){
newTween.properties[pName] = undefined;
delete newTween.properties[pName];
};
};
_tweenList.push(newTween);
return ((_tweenList.length - 1));
}
public static function updateFrame():void{
_currentTimeFrame++;
}
public static function resumeTweenByIndex(p_tween:Number):Boolean{
var tTweening:TweenListObj = _tweenList[p_tween];
if ((((tTweening == null)) || (!(tTweening.isPaused)))){
return (false);
};
var cTime:Number = getCurrentTweeningTime(tTweening);
tTweening.timeStart = (tTweening.timeStart + (cTime - tTweening.timePaused));
tTweening.timeComplete = (tTweening.timeComplete + (cTime - tTweening.timePaused));
tTweening.timePaused = undefined;
tTweening.isPaused = false;
return (true);
}
public static function getVersion():String{
return ("AS3 1.31.74");
}
public static function onEnterFrame(e:Event):void{
updateTime();
updateFrame();
var hasUpdated:Boolean;
hasUpdated = updateTweens();
if (!hasUpdated){
stopEngine();
};
}
public static function updateTime():void{
_currentTime = getTimer();
}
private static function updateTweenByIndex(i:Number):Boolean{
var tTweening:TweenListObj;
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 tProperty:Object;
var pv:Number;
var i = i;
tTweening = _tweenList[i];
if ((((tTweening == null)) || (!(Boolean(tTweening.scope))))){
return (false);
};
var isOver:Boolean;
var cTime:Number = 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);
//unresolved if
if (Boolean(tTweening.onUpdate)){
eventScope = (Boolean(tTweening.onUpdateScope)) ? tTweening.onUpdateScope : tScope;
tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams);
continue;
var _slot1 = e1;
handleError(tTweening, _slot1, "onUpdate");
};
} while (tTweening.timesCalled++, !(tTweening.timesCalled >= tTweening.count));
} 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;
tTweening.onStart.apply(eventScope, tTweening.onStartParams);
//unresolved jump
var _slot1 = e2;
handleError(tTweening, _slot1, "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;
tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams);
//unresolved jump
var _slot1 = e3;
handleError(tTweening, _slot1, "onUpdate");
};
} else {
tTweening.updatesSkipped++;
};
};
if (((isOver) && (Boolean(tTweening.onComplete)))){
eventScope = (Boolean(tTweening.onCompleteScope)) ? tTweening.onCompleteScope : tScope;
tTweening.onComplete.apply(eventScope, tTweening.onCompleteParams);
//unresolved jump
var _slot1 = e4;
handleError(tTweening, _slot1, "onComplete");
};
return (!(isOver));
};
return (true);
}
public static function setTimeScale(p_time:Number):void{
var i:Number;
var cTime:Number;
if (isNaN(p_time)){
p_time = 1;
};
if (p_time < 1E-5){
p_time = 1E-5;
};
if (p_time != _timeScale){
if (_tweenList != null){
i = 0;
while (i < _tweenList.length) {
cTime = getCurrentTweeningTime(_tweenList[i]);
_tweenList[i].timeStart = (cTime - (((cTime - _tweenList[i].timeStart) * _timeScale) / p_time));
_tweenList[i].timeComplete = (cTime - (((cTime - _tweenList[i].timeComplete) * _timeScale) / p_time));
if (_tweenList[i].timePaused != undefined){
_tweenList[i].timePaused = (cTime - (((cTime - _tweenList[i].timePaused) * _timeScale) / p_time));
};
i++;
};
};
_timeScale = p_time;
};
}
public static function resumeAllTweens():Boolean{
var i:uint;
if (!Boolean(_tweenList)){
return (false);
};
var resumed:Boolean;
i = 0;
while (i < _tweenList.length) {
resumeTweenByIndex(i);
resumed = true;
i++;
};
return (resumed);
}
private static function handleError(pTweening:TweenListObj, pError:Error, pCallBackName:String):void{
var eventScope:Object;
var pTweening = pTweening;
var pError = pError;
var pCallBackName = pCallBackName;
if (((Boolean(pTweening.onError)) && ((pTweening.onError is Function)))){
eventScope = (Boolean(pTweening.onErrorScope)) ? pTweening.onErrorScope : pTweening.scope;
pTweening.onError.apply(eventScope, [pTweening.scope, pError]);
//unresolved jump
var _slot1 = metaError;
printError(((((String(pTweening.scope) + " raised an error while executing the 'onError' handler. Original error:\n ") + pError.getStackTrace()) + "\nonError error: ") + _slot1.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 i:uint;
if (!Boolean(_tweenList)){
return (false);
};
var removed:Boolean;
i = 0;
while (i < _tweenList.length) {
removeTweenByIndex(i);
removed = true;
i++;
};
return (removed);
}
public static function addTween(p_scopes:Object=null, p_parameters:Object=null):Boolean{
var i:Number;
var j:Number;
var istr:String;
var rScopes:Array;
var rTransition:Function;
var nProperties:Object;
var nTween:TweenListObj;
var myT:Number;
var splitProperties:Array;
var splitProperties2:Array;
var tempModifiedProperties:Array;
var trans:String;
if (!Boolean(p_scopes)){
return (false);
};
if ((p_scopes is Array)){
rScopes = p_scopes.concat();
} else {
rScopes = [p_scopes];
};
var p_obj:Object = TweenListObj.makePropertiesChain(p_parameters);
if (!_inited){
init();
};
if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){
startEngine();
};
var rTime:Number = (isNaN(p_obj.time)) ? 0 : p_obj.time;
var rDelay:Number = (isNaN(p_obj.delay)) ? 0 : p_obj.delay;
var rProperties:Array = new Array();
var restrictedWords:Object = {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};
var modifiedProperties:Object = new Object();
for (istr in p_obj) {
if (!restrictedWords[istr]){
if (_specialPropertySplitterList[istr]){
splitProperties = _specialPropertySplitterList[istr].splitValues(p_obj[istr], _specialPropertySplitterList[istr].parameters);
i = 0;
while (i < splitProperties.length) {
if (_specialPropertySplitterList[splitProperties[i].name]){
splitProperties2 = _specialPropertySplitterList[splitProperties[i].name].splitValues(splitProperties[i].value, _specialPropertySplitterList[splitProperties[i].name].parameters);
j = 0;
while (j < splitProperties2.length) {
rProperties[splitProperties2[j].name] = {valueStart:undefined, valueComplete:splitProperties2[j].value, arrayIndex:splitProperties2[j].arrayIndex, isSpecialProperty:false};
j++;
};
} else {
rProperties[splitProperties[i].name] = {valueStart:undefined, valueComplete:splitProperties[i].value, arrayIndex:splitProperties[i].arrayIndex, isSpecialProperty:false};
};
i++;
};
} else {
if (_specialPropertyModifierList[istr] != undefined){
tempModifiedProperties = _specialPropertyModifierList[istr].modifyValues(p_obj[istr]);
i = 0;
while (i < tempModifiedProperties.length) {
modifiedProperties[tempModifiedProperties[i].name] = {modifierParameters:tempModifiedProperties[i].parameters, modifierFunction:_specialPropertyModifierList[istr].getValue};
i++;
};
} else {
rProperties[istr] = {valueStart:undefined, valueComplete:p_obj[istr]};
};
};
};
};
for (istr in rProperties) {
if (_specialPropertyList[istr] != undefined){
rProperties[istr].isSpecialProperty = true;
} else {
if (rScopes[0][istr] == undefined){
printError((((("The property '" + istr) + "' doesn't seem to be a normal object property of ") + String(rScopes[0])) + " or a registered special property."));
};
};
};
for (istr in modifiedProperties) {
if (rProperties[istr] != undefined){
rProperties[istr].modifierParameters = modifiedProperties[istr].modifierParameters;
rProperties[istr].modifierFunction = modifiedProperties[istr].modifierFunction;
};
};
if (typeof(p_obj.transition) == "string"){
trans = p_obj.transition.toLowerCase();
rTransition = _transitionList[trans];
} else {
rTransition = p_obj.transition;
};
if (!Boolean(rTransition)){
rTransition = _transitionList["easeoutexpo"];
};
i = 0;
while (i < rScopes.length) {
nProperties = new Object();
for (istr in rProperties) {
nProperties[istr] = new PropertyInfoObj(rProperties[istr].valueStart, rProperties[istr].valueComplete, rProperties[istr].valueComplete, rProperties[istr].arrayIndex, {}, rProperties[istr].isSpecialProperty, rProperties[istr].modifierFunction, rProperties[istr].modifierParameters);
};
if (p_obj.useFrames == true){
nTween = new TweenListObj(rScopes[i], (_currentTimeFrame + (rDelay / _timeScale)), (_currentTimeFrame + ((rDelay + rTime) / _timeScale)), true, rTransition, p_obj.transitionParams);
} else {
nTween = new TweenListObj(rScopes[i], (_currentTime + ((rDelay * 1000) / _timeScale)), (_currentTime + (((rDelay * 1000) + (rTime * 1000)) / _timeScale)), false, rTransition, p_obj.transitionParams);
};
nTween.properties = nProperties;
nTween.onStart = p_obj.onStart;
nTween.onUpdate = p_obj.onUpdate;
nTween.onComplete = p_obj.onComplete;
nTween.onOverwrite = p_obj.onOverwrite;
nTween.onError = p_obj.onError;
nTween.onStartParams = p_obj.onStartParams;
nTween.onUpdateParams = p_obj.onUpdateParams;
nTween.onCompleteParams = p_obj.onCompleteParams;
nTween.onOverwriteParams = p_obj.onOverwriteParams;
nTween.onStartScope = p_obj.onStartScope;
nTween.onUpdateScope = p_obj.onUpdateScope;
nTween.onCompleteScope = p_obj.onCompleteScope;
nTween.onOverwriteScope = p_obj.onOverwriteScope;
nTween.onErrorScope = p_obj.onErrorScope;
nTween.rounded = p_obj.rounded;
nTween.skipUpdates = p_obj.skipUpdates;
removeTweensByTime(nTween.scope, nTween.properties, nTween.timeStart, nTween.timeComplete);
_tweenList.push(nTween);
if ((((rTime == 0)) && ((rDelay == 0)))){
myT = (_tweenList.length - 1);
updateTweenByIndex(myT);
removeTweenByIndex(myT);
};
i++;
};
return (true);
}
public static function registerTransition(p_name:String, p_function:Function):void{
if (!_inited){
init();
};
_transitionList[p_name] = p_function;
}
public static function printError(p_message:String):void{
trace(("## [Tweener] Error: " + p_message));
}
private static function affectTweens(p_affectFunction:Function, p_scope:Object, p_properties:Array):Boolean{
var i:uint;
var affectedProperties:Array;
var j:uint;
var objectProperties:uint;
var slicedTweenIndex:uint;
var affected:Boolean;
if (!Boolean(_tweenList)){
return (false);
};
i = 0;
while (i < _tweenList.length) {
if (((_tweenList[i]) && ((_tweenList[i].scope == p_scope)))){
if (p_properties.length == 0){
p_affectFunction(i);
affected = true;
} else {
affectedProperties = new Array();
j = 0;
while (j < p_properties.length) {
if (Boolean(_tweenList[i].properties[p_properties[j]])){
affectedProperties.push(p_properties[j]);
};
j++;
};
if (affectedProperties.length > 0){
objectProperties = AuxFunctions.getObjectLength(_tweenList[i].properties);
if (objectProperties == affectedProperties.length){
p_affectFunction(i);
affected = true;
} else {
slicedTweenIndex = splitTweens(i, affectedProperties);
p_affectFunction(slicedTweenIndex);
affected = true;
};
};
};
};
i++;
};
return (affected);
}
public static function getTweens(p_scope:Object):Array{
var i:uint;
var pName:String;
if (!Boolean(_tweenList)){
return ([]);
};
var tList:Array = new Array();
i = 0;
while (i < _tweenList.length) {
if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){
for (pName in _tweenList[i].properties) {
tList.push(pName);
};
};
i++;
};
return (tList);
}
public static function isTweening(p_scope:Object):Boolean{
var i:uint;
if (!Boolean(_tweenList)){
return (false);
};
i = 0;
while (i < _tweenList.length) {
if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){
return (true);
};
i++;
};
return (false);
}
public static function pauseTweenByIndex(p_tween:Number):Boolean{
var tTweening:TweenListObj = _tweenList[p_tween];
if ((((tTweening == null)) || (tTweening.isPaused))){
return (false);
};
tTweening.timePaused = getCurrentTweeningTime(tTweening);
tTweening.isPaused = true;
return (true);
}
public static function getCurrentTweeningTime(p_tweening:Object):Number{
return ((p_tweening.useFrames) ? _currentTimeFrame : _currentTime);
}
public static function getTweenCount(p_scope:Object):Number{
var i:uint;
if (!Boolean(_tweenList)){
return (0);
};
var c:Number = 0;
i = 0;
while (i < _tweenList.length) {
if (((Boolean(_tweenList[i])) && ((_tweenList[i].scope == p_scope)))){
c = (c + AuxFunctions.getObjectLength(_tweenList[i].properties));
};
i++;
};
return (c);
}
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(p_scope:Object, p_properties:Object, p_timeStart:Number, p_timeComplete:Number):Boolean{
var removedLocally:Boolean;
var i:uint;
var pName:String;
var eventScope:Object;
var p_scope = p_scope;
var p_properties = p_properties;
var p_timeStart = p_timeStart;
var p_timeComplete = p_timeComplete;
var removed:Boolean;
var tl:uint = _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;
_tweenList[i].onOverwrite.apply(eventScope, _tweenList[i].onOverwriteParams);
//unresolved jump
var _slot1 = e;
handleError(_tweenList[i], _slot1, "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(p_name:String, p_splitFunction:Function, p_parameters:Array=null):void{
if (!_inited){
init();
};
var sps:SpecialPropertySplitter = new SpecialPropertySplitter(p_splitFunction, p_parameters);
_specialPropertySplitterList[p_name] = sps;
}
public static function removeTweenByIndex(i:Number, p_finalRemoval:Boolean=false):Boolean{
_tweenList[i] = null;
if (p_finalRemoval){
_tweenList.splice(i, 1);
};
return (true);
}
public static function resumeTweens(p_scope:Object, ... _args):Boolean{
var i:uint;
var properties:Array = new Array();
i = 0;
while (i < _args.length) {
if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){
properties.push(_args[i]);
};
i++;
};
return (affectTweens(resumeTweenByIndex, p_scope, properties));
}
public static function pauseTweens(p_scope:Object, ... _args):Boolean{
var i:uint;
var properties:Array = new Array();
i = 0;
while (i < _args.length) {
if ((((typeof(_args[i]) == "string")) && ((properties.indexOf(_args[i]) == -1)))){
properties.push(_args[i]);
};
i++;
};
return (affectTweens(pauseTweenByIndex, p_scope, properties));
}
}
}//package caurina.transitions
Section 8
//TweenListObj (caurina.transitions.TweenListObj)
package caurina.transitions {
public class TweenListObj {
public var hasStarted:Boolean;
public var onUpdate:Function;
public var useFrames:Boolean;
public var count:Number;
public var onOverwriteParams:Array;
public var timeStart: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 isCaller:Boolean;
public var timePaused:Number;
public var transition:Function;
public var onCompleteParams:Array;
public var onError:Function;
public var timesCalled:Number;
public var onErrorScope:Object;
public var onOverwrite:Function;
public var isPaused:Boolean;
public var waitFrames:Boolean;
public var onCompleteScope:Object;
public function TweenListObj(p_scope:Object, p_timeStart:Number, p_timeComplete:Number, p_useFrames:Boolean, p_transition:Function, p_transitionParams:Object){
super();
scope = p_scope;
timeStart = p_timeStart;
timeComplete = p_timeComplete;
useFrames = p_useFrames;
transition = p_transition;
transitionParams = p_transitionParams;
properties = new Object();
isPaused = false;
timePaused = undefined;
isCaller = false;
updatesSkipped = 0;
timesCalled = 0;
skipUpdates = 0;
hasStarted = false;
}
public function clone(omitEvents:Boolean):TweenListObj{
var pName:String;
var nTween:TweenListObj = new TweenListObj(scope, timeStart, timeComplete, useFrames, transition, transitionParams);
nTween.properties = new Array();
for (pName in properties) {
nTween.properties[pName] = properties[pName].clone();
};
nTween.skipUpdates = skipUpdates;
nTween.updatesSkipped = updatesSkipped;
if (!omitEvents){
nTween.onStart = onStart;
nTween.onUpdate = onUpdate;
nTween.onComplete = onComplete;
nTween.onOverwrite = onOverwrite;
nTween.onError = onError;
nTween.onStartParams = onStartParams;
nTween.onUpdateParams = onUpdateParams;
nTween.onCompleteParams = onCompleteParams;
nTween.onOverwriteParams = onOverwriteParams;
nTween.onStartScope = onStartScope;
nTween.onUpdateScope = onUpdateScope;
nTween.onCompleteScope = onCompleteScope;
nTween.onOverwriteScope = onOverwriteScope;
nTween.onErrorScope = onErrorScope;
};
nTween.rounded = rounded;
nTween.isPaused = isPaused;
nTween.timePaused = timePaused;
nTween.isCaller = isCaller;
nTween.count = count;
nTween.timesCalled = timesCalled;
nTween.waitFrames = waitFrames;
nTween.hasStarted = hasStarted;
return (nTween);
}
public function toString():String{
var i:String;
var returnStr:String = "\n[TweenListObj ";
returnStr = (returnStr + ("scope:" + String(scope)));
returnStr = (returnStr + ", properties:");
var isFirst:Boolean;
for (i in properties) {
if (!isFirst){
returnStr = (returnStr + ",");
};
returnStr = (returnStr + ("[name:" + properties[i].name));
returnStr = (returnStr + (",valueStart:" + properties[i].valueStart));
returnStr = (returnStr + (",valueComplete:" + properties[i].valueComplete));
returnStr = (returnStr + "]");
isFirst = false;
};
returnStr = (returnStr + (", timeStart:" + String(timeStart)));
returnStr = (returnStr + (", timeComplete:" + String(timeComplete)));
returnStr = (returnStr + (", useFrames:" + String(useFrames)));
returnStr = (returnStr + (", transition:" + String(transition)));
returnStr = (returnStr + (", transitionParams:" + String(transitionParams)));
if (skipUpdates){
returnStr = (returnStr + (", skipUpdates:" + String(skipUpdates)));
};
if (updatesSkipped){
returnStr = (returnStr + (", updatesSkipped:" + String(updatesSkipped)));
};
if (Boolean(onStart)){
returnStr = (returnStr + (", onStart:" + String(onStart)));
};
if (Boolean(onUpdate)){
returnStr = (returnStr + (", onUpdate:" + String(onUpdate)));
};
if (Boolean(onComplete)){
returnStr = (returnStr + (", onComplete:" + String(onComplete)));
};
if (Boolean(onOverwrite)){
returnStr = (returnStr + (", onOverwrite:" + String(onOverwrite)));
};
if (Boolean(onError)){
returnStr = (returnStr + (", onError:" + String(onError)));
};
if (onStartParams){
returnStr = (returnStr + (", onStartParams:" + String(onStartParams)));
};
if (onUpdateParams){
returnStr = (returnStr + (", onUpdateParams:" + String(onUpdateParams)));
};
if (onCompleteParams){
returnStr = (returnStr + (", onCompleteParams:" + String(onCompleteParams)));
};
if (onOverwriteParams){
returnStr = (returnStr + (", onOverwriteParams:" + String(onOverwriteParams)));
};
if (onStartScope){
returnStr = (returnStr + (", onStartScope:" + String(onStartScope)));
};
if (onUpdateScope){
returnStr = (returnStr + (", onUpdateScope:" + String(onUpdateScope)));
};
if (onCompleteScope){
returnStr = (returnStr + (", onCompleteScope:" + String(onCompleteScope)));
};
if (onOverwriteScope){
returnStr = (returnStr + (", onOverwriteScope:" + String(onOverwriteScope)));
};
if (onErrorScope){
returnStr = (returnStr + (", onErrorScope:" + String(onErrorScope)));
};
if (rounded){
returnStr = (returnStr + (", rounded:" + String(rounded)));
};
if (isPaused){
returnStr = (returnStr + (", isPaused:" + String(isPaused)));
};
if (timePaused){
returnStr = (returnStr + (", timePaused:" + String(timePaused)));
};
if (isCaller){
returnStr = (returnStr + (", isCaller:" + String(isCaller)));
};
if (count){
returnStr = (returnStr + (", count:" + String(count)));
};
if (timesCalled){
returnStr = (returnStr + (", timesCalled:" + String(timesCalled)));
};
if (waitFrames){
returnStr = (returnStr + (", waitFrames:" + String(waitFrames)));
};
if (hasStarted){
returnStr = (returnStr + (", hasStarted:" + String(hasStarted)));
};
returnStr = (returnStr + "]\n");
return (returnStr);
}
public static function makePropertiesChain(p_obj:Object):Object{
var chainedObject:Object;
var chain:Object;
var currChainObj:Object;
var len:Number;
var i:Number;
var k:Number;
var baseObject:Object = p_obj.base;
if (baseObject){
chainedObject = {};
if ((baseObject is Array)){
chain = [];
k = 0;
while (k < baseObject.length) {
chain.push(baseObject[k]);
k++;
};
} else {
chain = [baseObject];
};
chain.push(p_obj);
len = chain.length;
i = 0;
while (i < len) {
if (chain[i]["base"]){
currChainObj = AuxFunctions.concatObjects(makePropertiesChain(chain[i]["base"]), chain[i]);
} else {
currChainObj = chain[i];
};
chainedObject = AuxFunctions.concatObjects(chainedObject, currChainObj);
i++;
};
if (chainedObject["base"]){
delete chainedObject["base"];
};
return (chainedObject);
//unresolved jump
};
return (p_obj);
}
}
}//package caurina.transitions
Section 9
//Animation (com.urbansquall.ginger.Animation)
package com.urbansquall.ginger {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.utils.*;
public class Animation extends EventDispatcher {
var m_frameMap:Dictionary;
private var m_totalFrames:int;
private var m_isLooping:Boolean;
var m_framesOfRotation:int;
var m_fps:int;
var m_frames:Array;
var m_degToRotBy:Number;
public function Animation(a_fps:int, a_numRotations:int=1){
super();
m_frames = [];
m_frameMap = new Dictionary();
m_fps = a_fps;
m_framesOfRotation = a_numRotations;
if (m_framesOfRotation < 1){
m_framesOfRotation = 1;
};
m_degToRotBy = (360 / m_framesOfRotation);
}
public function addFrame(a_numFrames:int, a_bitmapData:BitmapData, a_frameLocation:Rectangle, a_offsetX:Number, a_offsetY:Number, a_frameID:String=null):void{
if (a_frameID == ""){
a_frameID = null;
};
var bmpData:BitmapData = new BitmapData(a_frameLocation.width, a_frameLocation.height, true, 0);
bmpData.copyPixels(a_bitmapData, a_frameLocation, new Point());
m_frames.push(new Frame(a_numFrames, bmpData, m_framesOfRotation, a_frameID, a_offsetX, a_offsetY));
if (a_frameID != null){
m_frameMap[a_frameID] = m_totalFrames;
};
m_totalFrames++;
}
public function set isLooping(a_value:Boolean):void{
m_isLooping = a_value;
}
public function get isLooping():Boolean{
return (m_isLooping);
}
public function changeAllOffsets(a_offsetX:int, a_offsetY:int):void{
var frame:Frame;
var i:int;
while (i < m_frames.length) {
frame = m_frames[i];
frame.offsetX = a_offsetX;
frame.offsetY = a_offsetY;
i++;
};
}
}
}//package com.urbansquall.ginger
Section 10
//AnimationBuilder (com.urbansquall.ginger.AnimationBuilder)
package com.urbansquall.ginger {
import flash.display.*;
import flash.geom.*;
public class AnimationBuilder {
public static function importStrip(a_fps:int, a_bitmapData:BitmapData, a_tileWidth:int, a_tileHeight:int, a_tileCount:int=-1, a_startingX:int=0, a_startingY:int=0, a_rotations:int=1):Animation{
var frameLocation:Rectangle;
var tileX:int;
var tileY:int;
var animation:Animation = new Animation(a_fps, a_rotations);
var rows:int = Math.ceil((a_bitmapData.height / a_tileHeight));
var cols:int = Math.ceil((a_bitmapData.width / a_tileWidth));
if (a_tileCount == -1){
a_tileCount = (rows * cols);
};
var i:int;
while (i < a_tileCount) {
tileX = (i % cols);
tileY = Math.floor((i / cols));
frameLocation = new Rectangle((a_startingX + (tileX * a_tileWidth)), (a_startingY + (tileY * a_tileHeight)), a_tileWidth, a_tileHeight);
animation.addFrame(1, a_bitmapData, frameLocation, (a_tileWidth / 2), (a_tileHeight / 2));
i++;
};
return (animation);
}
}
}//package com.urbansquall.ginger
Section 11
//AnimationEvent (com.urbansquall.ginger.AnimationEvent)
package com.urbansquall.ginger {
import flash.events.*;
public class AnimationEvent extends Event {
public var begin:Boolean;
public var animationID:String;
public static const CHANGE:String = "animation_event_change";
public function AnimationEvent(type:String, a_begin:Boolean, a_animationID:String, bubbles:Boolean=false, cancelable:Boolean=false){
super(type, bubbles, cancelable);
begin = a_begin;
animationID = a_animationID;
}
}
}//package com.urbansquall.ginger
Section 12
//AnimationPlayer (com.urbansquall.ginger.AnimationPlayer)
package com.urbansquall.ginger {
import flash.display.*;
import flash.utils.*;
public class AnimationPlayer extends Bitmap {
private var m_animationDelay:int;
private var m_framesMap:Dictionary;
private var m_currentFrame:Frame;
private var m_hasAnimationEnded:Boolean;
private var m_rotation:Number;// = 0
private var m_currentAnimation:Animation;
private var m_fps:int;
private var m_IDArray:Array;
private var m_defaultAnimationID:String;
private var m_totalFrames:int;
private var m_rotationFrame:int;
private var m_frames:Array;
private var m_framesPassed:int;
private var m_animationMap:Dictionary;
private var m_isPlaying:Boolean;
private var m_isLooping:Boolean;
private var m_hasRotationChanged:Boolean;
private var m_frameIndex:int;
private var m_currentAnimationID:String;
private var m_timeSinceLastUpdate:int;
private var m_animationQueue:Array;
public function AnimationPlayer(pixelSnapping:String="auto", smoothing:Boolean=false){
super(null, pixelSnapping, smoothing);
m_IDArray = [];
m_animationQueue = [];
m_frames = [];
m_animationMap = new Dictionary();
m_framesMap = new Dictionary();
}
public function togglePause():void{
if (m_currentAnimation != null){
m_isPlaying = !(m_isPlaying);
};
}
override public function get rotation():Number{
return (m_rotation);
}
override public function get x():Number{
return ((super.x + offsetX));
}
public function queue(a_animationID:String):void{
var animation:Animation = m_animationMap[a_animationID];
if (animation == null){
throw (new Error("<AnimationPlayer> Invalid Animation ID!"));
};
m_animationQueue.push(a_animationID);
}
override public function set width(value:Number):void{
throw (new Error("<AnimationPlayer> Width / Height cannot be changed!"));
}
public function isPaused():Boolean{
return (m_isPlaying);
}
public function copy():AnimationPlayer{
var id:String;
var player:AnimationPlayer = new AnimationPlayer();
var i:int;
while (i < m_IDArray.length) {
id = m_IDArray[i];
player.addAnimation(id, m_animationMap[id]);
i++;
};
player.defaultAnimationID = m_defaultAnimationID;
player.fps = m_fps;
player.play(m_defaultAnimationID);
return (player);
}
public function get defaultAnimationID():String{
return (m_defaultAnimationID);
}
public function get offsetY():Number{
return (m_currentFrame.offsetY);
}
override public function get height():Number{
return (m_currentFrame.height[m_rotationFrame]);
}
private function updateFrame():void{
var currentX:Number;
var currentY:Number;
if (m_currentFrame == null){
return;
};
m_framesPassed++;
if (m_framesPassed > m_currentFrame.numFrames){
m_framesPassed = 0;
if (++m_frameIndex >= m_totalFrames){
if (!m_isLooping){
m_hasAnimationEnded = true;
return;
};
m_frameIndex = 0;
};
currentX = 0;
currentY = 0;
if (m_currentAnimationID != null){
currentX = this.x;
currentY = this.y;
};
m_currentFrame = Frame(m_frames[m_frameIndex]);
bitmapData = (m_currentFrame.bitmapData[m_rotationFrame] as BitmapData);
this.x = currentX;
this.y = currentY;
if (m_currentFrame.frameID != null){
if (hasEventListener(FrameEvent.CHANGE)){
dispatchEvent(new FrameEvent(FrameEvent.CHANGE, true, m_currentFrame.frameID, m_currentAnimationID));
};
};
};
}
public function get offsetX():Number{
return (m_currentFrame.offsetX);
}
public function get animationIDs():Array{
return (m_IDArray.slice());
}
public function set defaultAnimationID(value:String):void{
m_defaultAnimationID = value;
}
public function play(a_animationID:String):void{
if (m_animationMap[a_animationID] == null){
throw (new Error("<AnimationPlayer> Invalid Animation ID!"));
};
m_isPlaying = true;
m_hasAnimationEnded = false;
m_currentAnimationID = a_animationID;
startNewAnimation(a_animationID);
m_animationQueue = [];
m_animationQueue.push(m_currentAnimation);
}
override public function get width():Number{
return (m_currentFrame.width[m_rotationFrame]);
}
public function update(a_ms:Number):void{
var eventToDispatch:AnimationEvent;
if (m_hasAnimationEnded){
eventToDispatch = null;
if (hasEventListener(AnimationEvent.CHANGE)){
eventToDispatch = new AnimationEvent(AnimationEvent.CHANGE, false, m_currentAnimationID);
};
m_animationQueue.shift();
if (((((((!(m_isLooping)) && ((m_animationQueue.length == 0)))) && ((m_animationQueue[0] == undefined)))) && ((m_currentAnimationID == m_defaultAnimationID)))){
m_isPlaying = false;
} else {
startNewAnimation(m_animationQueue[0]);
};
m_hasAnimationEnded = false;
if (eventToDispatch != null){
dispatchEvent(eventToDispatch);
};
} else {
if (m_hasRotationChanged){
bitmapData = m_currentFrame.bitmapData[m_rotationFrame];
m_hasRotationChanged = false;
};
};
if (m_isPlaying){
m_timeSinceLastUpdate = (m_timeSinceLastUpdate + a_ms);
if (m_timeSinceLastUpdate > m_animationDelay){
m_timeSinceLastUpdate = (m_timeSinceLastUpdate - m_animationDelay);
updateFrame();
};
};
}
private function startNewAnimation(a_animationID:String):void{
var currentX:Number = 0;
var currentY:Number = 0;
if (m_currentAnimationID != null){
currentX = this.x;
currentY = this.y;
};
m_timeSinceLastUpdate = 0;
m_currentAnimationID = a_animationID;
m_currentAnimation = m_animationMap[m_currentAnimationID];
if (m_currentAnimation == null){
m_currentAnimation = m_animationMap[m_defaultAnimationID];
m_currentAnimationID = m_defaultAnimationID;
};
fps = m_currentAnimation.m_fps;
m_frames = m_currentAnimation.m_frames;
m_framesMap = m_currentAnimation.m_frameMap;
m_isLooping = m_currentAnimation.isLooping;
m_totalFrames = m_frames.length;
m_frameIndex = 0;
m_currentFrame = Frame(m_frames[0]);
bitmapData = m_currentFrame.bitmapData[m_rotationFrame];
this.x = currentX;
this.y = currentY;
if (hasEventListener(AnimationEvent.CHANGE)){
dispatchEvent(new AnimationEvent(AnimationEvent.CHANGE, true, m_currentAnimationID));
};
}
override public function set height(value:Number):void{
throw (new Error("<AnimationPlayer> Width / Height cannot be changed!"));
}
public function gotoFrame(a_frameID:String, a_animationID:String=null):void{
if (a_animationID != null){
startNewAnimation(a_animationID);
};
var index:int = m_framesMap[a_frameID];
var currentX:Number = 0;
var currentY:Number = 0;
if (m_currentAnimationID != null){
currentX = this.x;
currentY = this.y;
};
m_currentFrame = Frame(m_frames[index]);
this.x = currentX;
this.y = currentY;
bitmapData = (m_currentFrame.bitmapData[m_rotationFrame] as BitmapData);
m_frameIndex = index;
m_framesPassed = 0;
m_isPlaying = false;
if (m_currentFrame.frameID != null){
if (hasEventListener(FrameEvent.CHANGE)){
dispatchEvent(new FrameEvent(FrameEvent.CHANGE, true, m_currentFrame.frameID, m_currentAnimationID));
};
};
}
public function set fps(value:int):void{
m_fps = value;
if (value <= 0){
m_fps = 0;
m_animationDelay = 0;
} else {
m_fps = value;
m_animationDelay = (1000 / value);
};
}
public function addAnimation(a_animationID:String, a_animation:Animation):void{
m_IDArray.push(a_animationID);
m_animationMap[a_animationID] = a_animation;
if (m_defaultAnimationID == null){
m_defaultAnimationID = a_animationID;
startNewAnimation(m_defaultAnimationID);
play(a_animationID);
this.x = 0;
this.y = 0;
};
}
public function get currentAnimationID():String{
return (m_currentAnimationID);
}
public function get fps():int{
return (m_fps);
}
override public function set x(value:Number):void{
super.x = (value - offsetX);
}
override public function set y(value:Number):void{
super.y = (value - offsetY);
}
public function pause():void{
m_isPlaying = false;
}
override public function get y():Number{
return ((super.y + offsetY));
}
override public function set rotation(value:Number):void{
m_rotation = int(value);
m_rotation = (m_rotation % 360);
if (m_rotation < 0){
m_rotation = (m_rotation + 360);
};
m_rotationFrame = Math.round((m_rotation / m_currentAnimation.m_degToRotBy));
if (m_rotationFrame >= m_currentAnimation.m_framesOfRotation){
m_rotationFrame = 0;
};
m_hasRotationChanged = true;
}
public function unpause():void{
if (m_currentAnimation != null){
m_isPlaying = true;
};
}
}
}//package com.urbansquall.ginger
Section 13
//AnimationPlayerFactory (com.urbansquall.ginger.AnimationPlayerFactory)
package com.urbansquall.ginger {
import flash.utils.*;
public class AnimationPlayerFactory {
private var m_animations:Dictionary;
public function AnimationPlayerFactory(){
super();
m_animations = new Dictionary();
}
public function instantiate(a_name:String):AnimationPlayer{
if (m_animations[a_name] == null){
throw (new Error((("AnimationFactory:instantiate. There is no animation with the name [" + a_name) + "]")));
};
var animationPlayer:AnimationPlayer = m_animations[a_name];
return (animationPlayer.copy());
}
public function register(a_name:String, a_animationPlayer:AnimationPlayer):void{
if (m_animations[a_name] != null){
throw (new Error((("AnimationFactory:register. There is already an animation with the name [" + a_name) + "]")));
};
m_animations[a_name] = a_animationPlayer;
}
public function dispose():void{
var key:String;
var animationPlayer:AnimationPlayer;
for (key in m_animations) {
animationPlayer = m_animations[key];
delete m_animations[key];
};
m_animations = null;
}
}
}//package com.urbansquall.ginger
Section 14
//Frame (com.urbansquall.ginger.Frame)
package com.urbansquall.ginger {
import flash.display.*;
import flash.geom.*;
import com.urbansquall.ginger.*;
class Frame {
public var offsetX:Number;
public var width:Array;
public var height:Array;
public var frameID:String;
public var numFrames:int;
public var offsetY:Number;
public var bitmapData:Array;
function Frame(a_numFrames:int, a_bitmapData:BitmapData, a_numRotations:int, a_frameID:String, a_offsetX:Number, a_offsetY:Number){
super();
numFrames = a_numFrames;
frameID = a_frameID;
bitmapData = [];
width = [];
height = [];
offsetX = a_offsetX;
offsetY = a_offsetY;
if (a_numRotations == 1){
createFrameWithNoRotation(a_bitmapData, a_frameID, a_offsetX, a_offsetY);
} else {
createRotatedFrame(a_bitmapData, a_numRotations, a_frameID, a_offsetX, a_offsetY);
};
}
private function createRotatedFrame(a_bitmapData:BitmapData, a_numRotations:int, a_frameID:String, a_offsetX:Number, a_offsetY:Number):void{
var tileWidth:int = a_bitmapData.width;
var tileHeight:int = a_bitmapData.height;
var tx:Number = ((tileWidth / 2) * Math.SQRT2);
var ty:Number = ((tileHeight / 2) * Math.SQRT2);
var maxTxy:Number = Math.max(tx, ty);
var bdSize:Number = Math.ceil((Math.max(tileWidth, tileHeight) * Math.SQRT2));
var mat:Matrix = new Matrix(1, 0, 0, 1, maxTxy, maxTxy);
var bd:BitmapData = new BitmapData(bdSize, bdSize, true, 0);
var container:Sprite = new Sprite();
var bmpHolder:Sprite = new Sprite();
var bmpData:BitmapData = new BitmapData(tileWidth, tileHeight, true, 0);
var bmp:Bitmap = new Bitmap(a_bitmapData, "auto", true);
bmp.x = -((tileWidth / 2));
bmp.y = -((tileHeight / 2));
bmpHolder.addChild(bmp);
container.addChild(bmpHolder);
var ri:int;
while (ri < a_numRotations) {
bd.fillRect(bd.rect, 0);
bd.draw(container, mat);
bitmapData[ri] = bd.clone();
width[ri] = bmpHolder.width;
height[ri] = bmpHolder.height;
bmpHolder.rotation = (bmpHolder.rotation + (360 / a_numRotations));
ri++;
};
}
private function createFrameWithNoRotation(a_bitmapData:BitmapData, a_frameID:String, a_offsetX:Number, a_offsetY:Number):void{
bitmapData[0] = a_bitmapData;
width[0] = a_bitmapData.width;
height[0] = a_bitmapData.height;
}
}
}//package com.urbansquall.ginger
Section 15
//FrameEvent (com.urbansquall.ginger.FrameEvent)
package com.urbansquall.ginger {
import flash.events.*;
public class FrameEvent extends Event {
public var frameID:String;
public var begin:Boolean;
public var animationID:String;
public static const CHANGE:String = "frame_event_change";
public function FrameEvent(type:String, a_begin:Boolean, a_frameID:String, a_animationID:String, bubbles:Boolean=false, cancelable:Boolean=false){
super(type, bubbles, cancelable);
begin = a_begin;
frameID = a_frameID;
animationID = a_animationID;
}
}
}//package com.urbansquall.ginger
Section 16
//Preloader (com.urbansquall.preloader.Preloader)
package com.urbansquall.preloader {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Preloader extends MovieClip {
private var m_firstFrame:Boolean;// = true
public function Preloader(){
super();
addEventListener(Event.ENTER_FRAME, checkFrame);
}
protected function endLoading():void{
}
protected function updateLoading(a_percent:Number):void{
}
private function checkFrame(e:Event):void{
if (currentFrame == totalFrames){
removeEventListener(Event.ENTER_FRAME, checkFrame);
startup();
return;
};
if (m_firstFrame){
beginLoading();
m_firstFrame = false;
return;
};
var percent:Number = (root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal);
updateLoading(percent);
}
protected function get mainClassName():String{
return ("Main");
}
protected function beginLoading():void{
}
private function startup():void{
stop();
if (!m_firstFrame){
endLoading();
};
var MainClass:Class = (getDefinitionByName(mainClassName) as Class);
if (MainClass == null){
throw (new Error((("Preloader:startup. There was no class matching [" + mainClassName) + "]. You may need to override Preloader::mainClassName")));
};
var main:DisplayObject = (new (MainClass) as DisplayObject);
if (main == null){
throw (new Error((("Preloader::startup. [" + mainClassName) + "] needs to inherit from Sprite or MovieClip.")));
};
addChildAt(main, 0);
}
}
}//package com.urbansquall.preloader
Section 17
//safeint (com.urbansquall.security.safeint)
package com.urbansquall.security {
public class safeint {
private var m_safeVal:int;
private var m_seed:int;
public function safeint(a_value:int){
super();
m_seed = (Math.random() * int.MAX_VALUE);
this.val = a_value;
}
public function get val():int{
return ((m_safeVal ^ m_seed));
}
public function set val(a_value:int):void{
m_safeVal = (a_value ^ m_seed);
}
public function toString():String{
return (this.val.toString());
}
}
}//package com.urbansquall.security
Section 18
//SafeSolManager (com.urbansquall.security.SafeSolManager)
package com.urbansquall.security {
import flash.net.*;
import flash.utils.*;
public class SafeSolManager {
private var m_keys:Array;
private var m_hexKey:uint;
private var m_so:SharedObject;
private var m_xorKey:int;
public function SafeSolManager(a_name:String, a_hexKey:uint=16753249){
super();
m_so = SharedObject.getLocal(a_name);
m_hexKey = a_hexKey;
m_keys = [];
if (m_so.data["ads"] == undefined){
m_so.data["ads"] = new Object();
};
if (readRealData(m_hexKey, int, false) == undefined){
m_xorKey = (Math.random() * int.MAX_VALUE);
writeRealData(m_hexKey, m_xorKey, int, false);
} else {
m_xorKey = readRealData(m_hexKey, int, false);
};
}
private function hexStr(a_hex:uint):String{
return (a_hex.toString(16).toUpperCase());
}
public function flush():void{
m_so.flush();
}
public function readString(a_var:String):String{
return (read(a_var, String));
}
public function writeNumber(a_var:String, a_value:Number):void{
write(a_var, a_value, Number);
}
public function createBool(a_var:String, a_value:Boolean, a_hasFake:Boolean=false):void{
create(a_var, a_value, Boolean, a_hasFake);
}
public function writeInt(a_var:String, a_value:int):void{
write(a_var, a_value, int);
}
public function createInt(a_var:String, a_value:int, a_hasFake:Boolean=false):void{
create(a_var, a_value, int, a_hasFake);
}
private function readFakeData(a_name:String){
return (m_so.data[a_name]);
}
public function writeString(a_var:String, a_value:String):void{
write(a_var, a_value, String);
}
private function read(a_var:String, a_type:Class){
var i:int = m_keys.indexOf(a_var);
if (i < 0){
return (undefined);
};
var dictKey:uint = ((m_hexKey + i) + 1);
return (readRealData(dictKey, a_type, true));
}
private function readRealData(a_hexKey:uint, a_type:Class, a_isEncrypted:Boolean){
var bab:ByteArray;
var ban:ByteArray;
var bas:ByteArray;
var j:int;
var intBytes:int;
var val:* = m_so.data["ads"][hexStr(a_hexKey)];
if (((!((val == undefined))) && (a_isEncrypted))){
if (a_type == int){
val = (val ^ m_xorKey);
} else {
if (a_type == Boolean){
bab = new ByteArray();
bab.writeInt((val ^ m_xorKey));
bab.position = 0;
val = bab.readBoolean();
} else {
if (a_type == Number){
ban = new ByteArray();
ban.writeInt((val ^ m_xorKey));
ban.position = 0;
val = ban.readFloat();
} else {
if (a_type == String){
bas = new ByteArray();
val.position = 0;
j = 0;
while (j < (val.length / 4)) {
intBytes = val.readInt();
bas.writeInt((intBytes ^ m_xorKey));
j++;
};
bas.position = 0;
val = bas.readUTF();
};
};
};
};
};
return (val);
}
private function write(a_var:String, a_value, a_type:Class):void{
var i:int = m_keys.indexOf(a_var);
if (i < 0){
throw (new Error((("You did not first call create() for [" + a_var) + "] so it was not written.")));
};
var dictKey:uint = ((m_hexKey + i) + 1);
writeRealData(dictKey, a_value, a_type, true);
if (readFakeData(a_var) != undefined){
writeFakeData(a_var, a_value);
};
}
public function readBool(a_var:String):Boolean{
return (read(a_var, Boolean));
}
public function createNumber(a_var:String, a_value:Number, a_hasFake:Boolean=false):void{
create(a_var, a_value, Number, a_hasFake);
}
private function writeRealData(a_hexKey:uint, a_value, a_type:Class, a_isEncrypted:Boolean):void{
var bab:ByteArray;
var ban:ByteArray;
var bas:ByteArray;
var i:int;
var j:int;
var bytes:int;
var writeVal:int = a_value;
if (a_isEncrypted){
if (a_type == int){
writeVal = (a_value ^ m_xorKey);
} else {
if (a_type == Boolean){
bab = new ByteArray();
bab.writeBoolean(a_value);
bab.writeByte((Math.random() * 0xFF));
bab.writeByte((Math.random() * 0xFF));
bab.writeByte((Math.random() * 0xFF));
bab.position = 0;
writeVal = (bab.readInt() ^ m_xorKey);
} else {
if (a_type == Number){
ban = new ByteArray();
ban.writeFloat(a_value);
ban.position = 0;
writeVal = (ban.readInt() ^ m_xorKey);
} else {
if (a_type == String){
bas = new ByteArray();
bas.writeUTF(a_value);
i = (3 - (bas.length % 4));
while (i >= 0) {
bas.writeByte((Math.random() * 0xFF));
i--;
};
bas.position = 0;
j = 0;
while (j < (bas.length / 4)) {
bytes = bas.readInt();
bas.position = (bas.position - 4);
bas.writeInt((bytes ^ m_xorKey));
j++;
};
m_so.data["ads"][hexStr(a_hexKey)] = bas;
return;
};
};
};
};
};
m_so.data["ads"][hexStr(a_hexKey)] = writeVal;
}
public function writeBool(a_var:String, a_value:Boolean):void{
write(a_var, a_value, Boolean);
}
public function createString(a_var:String, a_value:String, a_hasFake:Boolean=false):void{
create(a_var, a_value, String, a_hasFake);
}
private function writeFakeData(a_name:String, a_value):void{
m_so.data[a_name] = a_value;
}
public function readInt(a_var:String):int{
return (read(a_var, int));
}
private function create(a_var:String, a_value, a_type:Class, a_hasFake:Boolean):void{
m_keys.push(a_var);
var dictKey:uint = (m_hexKey + m_keys.length);
if (readRealData(dictKey, a_type, true) != undefined){
return;
};
writeRealData(dictKey, a_value, a_type, true);
if (a_hasFake){
writeFakeData(a_var, a_value);
};
}
public function readNumber(a_var:String):Number{
return (read(a_var, Number));
}
}
}//package com.urbansquall.security
Section 19
//EntityContainer (com.urbansquall.serenity.EntityContainer)
package com.urbansquall.serenity {
import flash.utils.*;
public class EntityContainer {
private var m_entitiesToBeAdded:Array;
private var m_entitiesToBeRemoved:Array;
private var m_entities:Array;
private var m_idMap:Dictionary;
public function EntityContainer(){
super();
m_entities = new Array();
m_idMap = new Dictionary();
m_entitiesToBeAdded = new Array();
m_entitiesToBeRemoved = new Array();
}
private function addNewEntities():void{
var entity:IEntity;
var entityCount:int = m_entitiesToBeAdded.length;
var entityIndex:int = (entityCount - 1);
while (entityIndex >= 0) {
entity = m_entitiesToBeAdded[entityIndex];
m_idMap[entity.id] = entity;
m_entities.push(entity);
entityIndex--;
};
m_entitiesToBeAdded.splice(0);
}
public function addEntity(a_entity:IEntity):void{
var entity:IEntity;
if (m_entitiesToBeAdded.indexOf(a_entity) != -1){
return;
};
if (m_idMap[a_entity.id] != null){
return;
};
var entityCount:int = m_entitiesToBeAdded.length;
var entityIndex:int = (entityCount - 1);
while (entityIndex >= 0) {
entity = m_entitiesToBeAdded[entityIndex];
if (entity.id == a_entity.id){
return;
};
entityIndex--;
};
m_entitiesToBeAdded.push(a_entity);
}
public function removeEntity(a_entity:IEntity):void{
if (m_entitiesToBeRemoved.indexOf(a_entity) != -1){
return;
};
if (m_idMap[a_entity.id] == null){
return;
};
m_entitiesToBeRemoved.push(a_entity);
}
private function processAddAndRemoves():void{
addNewEntities();
removeOldEntities();
}
private function removeOldEntities():void{
var entity:IEntity;
var removalIndex:int;
var entityCount:int = m_entitiesToBeRemoved.length;
var entityIndex:int = (entityCount - 1);
while (entityIndex >= 0) {
entity = m_entitiesToBeRemoved[entityIndex];
removalIndex = m_entities.indexOf(entity);
if (removalIndex >= 0){
m_entities.splice(removalIndex, 1);
delete m_idMap[entity.id];
};
entityIndex--;
};
m_entitiesToBeRemoved.splice(0);
}
public function getEntityAt(a_index:int):IEntity{
return (m_entities[a_index]);
}
public function get numEntities():int{
return (m_entities.length);
}
public function tick(a_deltaTime:Number):void{
var entity:IEntity;
var entityCount:int = m_entities.length;
var entityIndex:int = (entityCount - 1);
while (entityIndex >= 0) {
entity = m_entities[entityIndex];
entity.tick(a_deltaTime);
entityIndex--;
};
processAddAndRemoves();
}
public function lookupEntity(a_id:String):IEntity{
return (m_idMap[a_id]);
}
public function dispose():void{
var entity:IEntity;
if (m_entities == null){
return;
};
processAddAndRemoves();
var entityCount:int = m_entities.length;
var entityIndex:int = (entityCount - 1);
while (entityIndex >= 0) {
entity = m_entities[entityIndex];
delete m_idMap[entity.id];
entity.dispose();
entityIndex--;
};
m_entities.splice(0);
m_entities = null;
m_entitiesToBeAdded = null;
m_entitiesToBeRemoved = null;
m_idMap = null;
}
}
}//package com.urbansquall.serenity
Section 20
//IEntity (com.urbansquall.serenity.IEntity)
package com.urbansquall.serenity {
public interface IEntity {
function get id():String;
function tick(C:\Users\Marshall\Desktop\roboriot\lib\serenity;com\urbansquall\serenity;IEntity.as:Number):void;
function dispose():void;
}
}//package com.urbansquall.serenity
Section 21
//BitmapAsset (mx.core.BitmapAsset)
package mx.core {
import flash.display.*;
public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject {
mx_internal static const VERSION:String = "3.0.0.0";
public function BitmapAsset(bitmapData:BitmapData=null, pixelSnapping:String="auto", smoothing:Boolean=false){
super(bitmapData, pixelSnapping, smoothing);
}
public function get measuredWidth():Number{
if (bitmapData){
return (bitmapData.width);
};
return (0);
}
public function get measuredHeight():Number{
if (bitmapData){
return (bitmapData.height);
};
return (0);
}
public function setActualSize(newWidth:Number, newHeight:Number):void{
width = newWidth;
height = newHeight;
}
public function move(x:Number, y:Number):void{
this.x = x;
this.y = y;
}
}
}//package mx.core
Section 22
//FlexBitmap (mx.core.FlexBitmap)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexBitmap extends Bitmap {
mx_internal static const VERSION:String = "3.0.0.0";
public function FlexBitmap(bitmapData:BitmapData=null, pixelSnapping:String="auto", smoothing:Boolean=false){
var bitmapData = bitmapData;
var pixelSnapping = pixelSnapping;
var smoothing = smoothing;
super(bitmapData, pixelSnapping, smoothing);
name = NameUtil.createUniqueName(this);
//unresolved jump
var _slot1 = e;
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 23
//FontAsset (mx.core.FontAsset)
package mx.core {
import flash.text.*;
public class FontAsset extends Font implements IFlexAsset {
mx_internal static const VERSION:String = "3.0.0.0";
public function FontAsset(){
super();
}
}
}//package mx.core
Section 24
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 25
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(void:Point):Point;
function get name():String;
function set width(flash.display:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(flash.display:String):void;
function set scaleX(flash.display:Number):void;
function set scaleY(flash.display:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(flash.display:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(void:Point):Point;
function get height():Number;
function set blendMode(flash.display:String):void;
function get parent():DisplayObjectContainer;
function getBounds(String:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(flash.display:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(flash.display:Number):void;
function set accessibilityProperties(flash.display:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(flash.display:Boolean):void;
function get scaleX():Number;
function get scaleY():Number;
function get scrollRect():Rectangle;
function get mouseX():Number;
function get mouseY():Number;
function set height(flash.display:Number):void;
function set mask(flash.display:DisplayObject):void;
function getRect(String:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(flash.display:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(mx.core:IFlexDisplayObject/mx.core:IFlexDisplayObject:stage/get:DisplayObject):Boolean;
function set opaqueBackground(flash.display:Object):void;
function set visible(flash.display:Boolean):void;
function get mask():DisplayObject;
function set x(flash.display:Number):void;
function set y(flash.display:Number):void;
function get transform():Transform;
function set filters(flash.display:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(flash.display:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 26
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(E:\dev\3.0.3\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function get isDocument():Boolean;
function set repeaters(E:\dev\3.0.3\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function initializeRepeaterArrays(E:\dev\3.0.3\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(E:\dev\3.0.3\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 27
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 28
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "3.0.0.0";
public function SoundAsset(){
super();
}
}
}//package mx.core
Section 29
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import mx.core.*;
import flash.utils.*;
public class NameUtil {
mx_internal static const VERSION:String = "3.0.0.0";
private static var counter:int = 0;
public static function displayObjectToString(displayObject:DisplayObject):String{
var result:String;
var s:String;
var indices:Array;
var o:DisplayObject = displayObject;
while (o != null) {
if (((((o.parent) && (o.stage))) && ((o.parent == o.stage)))){
break;
};
s = o.name;
if ((o is IRepeaterClient)){
indices = IRepeaterClient(o).instanceIndices;
if (indices){
s = (s + (("[" + indices.join("][")) + "]"));
};
};
result = ((result == null)) ? s : ((s + ".") + result);
o = o.parent;
};
return (result);
}
public static function createUniqueName(object:Object):String{
if (!object){
return (null);
};
var name:String = getQualifiedClassName(object);
var index:int = name.indexOf("::");
if (index != -1){
name = name.substr((index + 2));
};
var charCode:int = name.charCodeAt((name.length - 1));
if ((((charCode >= 48)) && ((charCode <= 57)))){
name = (name + "_");
};
return ((name + counter++));
}
}
}//package mx.utils
Section 30
//AlarmEffect (AlarmEffect)
package {
import flash.media.*;
public dynamic class AlarmEffect extends Sound {
}
}//package
Section 31
//Animations (Animations)
package {
import flash.geom.*;
import com.urbansquall.ginger.*;
public class Animations extends AnimationPlayerFactory {
private static var s_instance:Animations = null;
public function Animations(){
super();
}
private static function createColorBot(a_botidx:int):AnimationPlayer{
var bw:int = Block.s_blockSize;
var bh:int = Block.s_blockSize;
var player:AnimationPlayer = new AnimationPlayer();
var stillAnimation:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, bw, bh, 1, 0, (bh * a_botidx));
stillAnimation.changeAllOffsets(0, 0);
player.addAnimation("still", stillAnimation);
var waveAnimation:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, bw, bh, 4, 0, (bh * a_botidx));
waveAnimation.changeAllOffsets(0, 0);
player.addAnimation("wave", waveAnimation);
var deathAnimation:Animation = new Animation(30);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((1 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((1 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((2 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((3 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((4 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((5 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((6 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((7 * bw), ((a_botidx + 1) * bh), bw, bh), 0, 0);
deathAnimation.isLooping = false;
player.addAnimation("death", deathAnimation);
var eyesAnimation:Animation = new Animation(1);
eyesAnimation.addFrame(1, AssetManager.RobotEyesBitmap.bitmapData, new Rectangle((0 * bw), (a_botidx * bh), bw, bh), 0, 0);
player.addAnimation("eyes", eyesAnimation);
return (player);
}
private static function createCrossPowerUp():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, Block.s_blockSize, Block.s_blockSize, 8, 0, (11 * Block.s_blockSize));
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
private static function createBombPowerUp():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, Block.s_blockSize, Block.s_blockSize, 8, 0, (6 * Block.s_blockSize));
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
private static function createRowPowerUp():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, Block.s_blockSize, Block.s_blockSize, 8, 0, (12 * Block.s_blockSize));
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
private static function createColumnPowerUp():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, Block.s_blockSize, Block.s_blockSize, 8, 0, (13 * Block.s_blockSize));
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
private static function init():void{
s_instance.register("explosion", createExplosion());
var bot_idx:int;
while (bot_idx < 5) {
s_instance.register(ColorBlock.s_animationNames[bot_idx], createColorBot(bot_idx));
bot_idx++;
};
s_instance.register("wildcardbot", createWildCardBot());
s_instance.register("rowpowerup", createRowPowerUp());
s_instance.register("columnpowerup", createColumnPowerUp());
s_instance.register("crosspowerup", createCrossPowerUp());
s_instance.register("bigpowerup", createBigPowerUp());
s_instance.register("bombpowerup", createBombPowerUp());
s_instance.register("active_smartbomb", createActiveSmartbomb());
s_instance.register("disabled_smartbomb", createDisabledSmartbomb());
}
private static function createWildCardBot():AnimationPlayer{
var bw:int = Block.s_blockSize;
var bh:int = Block.s_blockSize;
var player:AnimationPlayer = new AnimationPlayer();
var stillAnimation:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, bw, bh, 6, 0, (5 * bh));
stillAnimation.changeAllOffsets(0, 0);
stillAnimation.isLooping = true;
player.addAnimation("still", stillAnimation);
var deathAnimation:Animation = new Animation(30);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((1 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((1 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((0 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((2 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((3 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((4 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((5 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((6 * bw), 0, bw, bh), 0, 0);
deathAnimation.addFrame(1, AssetManager.RobotDeathBitmap.bitmapData, new Rectangle((7 * bw), 0, bw, bh), 0, 0);
deathAnimation.isLooping = false;
player.addAnimation("death", deathAnimation);
return (player);
}
private static function createDisabledSmartbomb():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, new AssetManager.LockedSmartBombPNG().bitmapData, 30, 30, 1);
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
public static function get instance():Animations{
if (s_instance == null){
s_instance = new (Animations);
init();
};
return (s_instance);
}
private static function createActiveSmartbomb():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = new Animation(10);
a.addFrame(1, AssetManager.SmartBombBitmap.bitmapData, new Rectangle(0, 0, 30, 30), 0, 0);
a.addFrame(4, AssetManager.SmartBombBitmap.bitmapData, new Rectangle(30, 0, 30, 30), 0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
private static function createExplosion():AnimationPlayer{
var ew:int = Explosion.s_explosionWidth;
var eh:int = Explosion.s_explosionHeight;
var player:AnimationPlayer = new AnimationPlayer();
var animation:Animation = new Animation(60);
animation.addFrame(2, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((0 * ew), (0 * eh), ew, eh), 0, 0);
animation.addFrame(2, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((1 * ew), (0 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((2 * ew), (0 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((3 * ew), (0 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((0 * ew), (1 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((1 * ew), (1 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((2 * ew), (1 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((3 * ew), (1 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((0 * ew), (2 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((1 * ew), (2 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((2 * ew), (2 * eh), ew, eh), 0, 0);
animation.addFrame(3, AssetManager.ExplosionBitmap.bitmapData, new Rectangle((3 * ew), (2 * eh), ew, eh), 0, 0);
animation.isLooping = false;
animation.changeAllOffsets(0, 0);
player.addAnimation("explode", animation);
return (player);
}
private static function createBigPowerUp():AnimationPlayer{
var player:AnimationPlayer = new AnimationPlayer();
var a:Animation = AnimationBuilder.importStrip(30, AssetManager.RobotBitmap.bitmapData, Block.s_blockSize, Block.s_blockSize, 8, 0, (14 * Block.s_blockSize));
a.changeAllOffsets(0, 0);
a.isLooping = true;
player.addAnimation("still", a);
return (player);
}
}
}//package
Section 32
//AssassinationGame (AssassinationGame)
package {
import flash.events.*;
import flash.display.*;
import flash.media.*;
import com.urbansquall.serenity.*;
import com.urbansquall.security.*;
import flash.text.*;
import flash.filters.*;
import caurina.transitions.*;
public class AssassinationGame extends Sprite {
private var m_seenAssassinationTutorial:Boolean;
private var m_toolTips:Sprite;
private var m_tutorialQueue:Array;
private var m_pauseSprite:Sprite;
private var m_waveIndex:int;
private var m_innocentCount:safeint;
private var m_missionBoxPlaceholder:Sprite;
private var m_timerSprite:TimerBar;
private var m_spotlight:Sprite;
private var m_bgLoop:LoopingSound;
private var m_spotLayer:Sprite;
private var m_blocks:EntityContainer;
private var m_scope:Bitmap;
private var m_safeLevel:safeint;
private var m_container:Sprite;
private var m_targets:Array;
private var m_paused:Boolean;
private var m_background:Sprite;
private var m_fxSprite:Sprite;
private var m_main:Main;
private var m_targetGraphics:Array;
private var m_timerContainer:Sprite;
private var m_score:ScoreDisplay;
private var m_botsKilledPreviously:Array;
private var m_blockSprite:Sprite;
private var m_levelLabel:CustomTextField;
private var m_fx:EntityContainer;
private var m_blockArray:Array;
private var m_interface:Sprite;
private var m_showingTutorial:Boolean;
private var m_leveling:Boolean;
private var m_waveTime:int;
private var m_deltaTimer:DeltaTimer;
private static const c_boardHeight:int = 474;
private static const c_waveTime:int = 1000;
private static const c_maxTime:int = 17000;
private static const c_boardWidth:int = 520;
public function AssassinationGame(a_main:Main){
var a_main = a_main;
super();
m_main = a_main;
m_paused = false;
m_leveling = false;
m_showingTutorial = false;
m_safeLevel = new safeint(0);
m_fx = new EntityContainer();
m_blocks = new EntityContainer();
m_targets = new Array(null, null, null, null, null);
m_targetGraphics = new Array(null, null, null, null, null);
createContainerSprite();
createBgSprite();
createBlockSprite();
m_spotLayer = new Sprite();
m_spotLayer.cacheAsBitmap = true;
m_spotLayer.mouseEnabled = false;
m_spotLayer.blendMode = BlendMode.LAYER;
this.addChild(m_spotLayer);
var black:Sprite = new Sprite();
black.cacheAsBitmap = true;
black.mouseEnabled = false;
black.graphics.beginFill(0);
black.graphics.drawRect(0, 0, 640, 480);
black.graphics.endFill();
m_spotLayer.addChild(black);
m_spotlight = createSpotlight();
m_spotLayer.addChild(m_spotlight);
m_scope = new AssetManager.ScopePNG();
addChild(m_scope);
this.addEventListener(MouseEvent.MOUSE_MOVE, updateSpotlight);
createFxSprite();
createInterface();
m_botsKilledPreviously = new Array(0, 0, 0, 0, 0);
m_innocentCount = new safeint(0);
m_bgLoop = new LoopingSound(SoundManager.s_assassinationLoop);
m_bgLoop.startLoop();
m_tutorialQueue = new Array();
startLevel();
m_seenAssassinationTutorial = Main.s_safeSolManager.readBool(Main.tutAss);
if (((true) || (!(m_seenAssassinationTutorial)))){
m_seenAssassinationTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutAss, true);
Tweener.addTween(this, {time:1.25, onComplete:function ():void{
push_tutorial(new AssetManager.HowToPlayAssassinationPNG());
}});
};
}
private function addScoreLabel(a_bot:ColorBlock, a_value:int):void{
m_score.score = (m_score.score + a_value);
var sl:ScoreLabel = new ScoreLabel(a_value);
m_fxSprite.addChild(sl);
sl.x = a_bot.x;
sl.y = a_bot.y;
Tweener.addTween(sl, {y:(sl.y - 100), time:1, transition:"linear"});
Tweener.addTween(sl, {alpha:0.3, time:0.5, delay:0.25, transition:"linear", onComplete:Tweens.removeOnComplete});
}
private function createBgSprite():void{
m_background = new Sprite();
m_background.graphics.beginBitmapFill(AssetManager.BackgroundBitmap.bitmapData);
m_background.graphics.drawRect(0, 0, c_boardWidth, c_boardHeight);
m_background.graphics.endFill();
m_container.addChild(m_background);
}
private function createContainerSprite():void{
m_container = new Sprite();
addChild(m_container);
m_container.x = ((640 - c_boardWidth) - 22);
}
private function unpause():void{
Tweener.resumeAllTweens();
m_paused = false;
m_pauseSprite.visible = false;
m_blockSprite.mouseChildren = true;
}
private function botClicked(a_me:MouseEvent):void{
var idx:int;
if (!(a_me.target is ColorBlock)){
return;
};
SoundManager.s_surgeSound.play(0, 0, new SoundTransform(0.4));
var bot:ColorBlock = (a_me.target as ColorBlock);
bot.playAnimation("death");
bot.onComplete = removeOnComplete(bot);
Tweener.removeTweens(bot);
bot.removeEventListener(MouseEvent.MOUSE_DOWN, botClicked);
bot.mouseEnabled = false;
m_botsKilledPreviously[bot.index] = (m_botsKilledPreviously[bot.index] + 1);
var inno = 1;
var val:int = (-5 * (m_safeLevel.val - 1));
if (m_targets[bot.index] === bot){
m_botsKilledPreviously[bot.index] = (m_botsKilledPreviously[bot.index] - 1);
inno = 0;
val = (10 * m_safeLevel.val);
killTarget(bot.index);
} else {
idx = 0;
while (idx < 5) {
if (m_targets[idx] != null){
hilightTarget(m_targets[idx], Math.max(0.2, (0.8 - (0.1 * m_safeLevel.val))));
};
idx++;
};
};
if (val != 0){
addScoreLabel(bot, val);
};
m_innocentCount.val = (m_innocentCount.val + inno);
}
private function depthSortBlocks():void{
var i:int;
while (i < m_blocks.numEntities) {
m_blockArray[i] = m_blocks.getEntityAt(i);
i++;
};
m_blockArray.sortOn("y", Array.NUMERIC);
var j:int;
while (j < m_blockArray.length) {
m_blockSprite.swapChildrenAt(j, m_blockSprite.getChildIndex(m_blockArray[j]));
j++;
};
}
private function killTarget(a_idx:int):void{
var elim:Bitmap;
var a_idx = a_idx;
flashScreen();
addExplosionAt(m_targets[a_idx]);
SoundManager.s_explosionEffect.play();
m_targets[a_idx] = null;
var target:ColorBlock = (m_targetGraphics[a_idx] as ColorBlock);
elim = new AssetManager.TargetEliminatedPNG();
m_interface.addChild(elim);
var x_final:int = ((target.x + ((40 - elim.width) / 2)) - 3);
var y_final:int = (target.y + ((40 - elim.height) / 2));
elim.smoothing = true;
elim.scaleX = 5;
elim.scaleY = 5;
elim.x = ((target.x + ((40 - elim.width) / 2)) - 3);
elim.y = (target.y + ((40 - elim.height) / 2));
Tweener.addTween(elim, {x:x_final, y:y_final, scaleX:1, scaleY:1, time:1.5, transition:"easeInQuad", onComplete:function ():void{
if (elim.stage != null){
SoundManager.s_clearSounds[0].play();
};
}});
}
private function createTimer():void{
m_deltaTimer = new DeltaTimer();
m_deltaTimer.reset();
m_timerSprite = new TimerBar(c_maxTime, 20, 480, 0);
m_timerSprite.timeRemaining = (c_maxTime - 1);
m_timerContainer.addChild(m_timerSprite);
m_timerSprite.x = (640 - m_timerSprite.width);
addEventListener(Event.ENTER_FRAME, tick);
updateTimeDisplay();
m_waveTime = c_waveTime;
m_waveIndex = 0;
}
private function createInterface():void{
m_timerContainer = new Sprite();
addChild(m_timerContainer);
m_interface = new Sprite();
m_interface.mouseEnabled = false;
m_interface.addChild(new AssetManager.AssassinationOverlayPNG());
addChild(m_interface);
createScore();
var pauseButton:RegularButton = new RegularButton(AssetManager.PauseButtonPNG);
m_interface.addChild(pauseButton);
pauseButton.x = 1;
pauseButton.y = 338;
pauseButton.height = 28;
pauseButton.width = 90;
pauseButton.addEventListener(MouseEvent.CLICK, function (a_event:Event):void{
togglePause();
});
var pause_msg:CustomTextField = new CustomTextField("PAUSED", 0, 48, true);
m_pauseSprite = new Sprite();
m_pauseSprite.mouseEnabled = false;
m_pauseSprite.mouseChildren = false;
m_pauseSprite.graphics.beginFill(0);
m_pauseSprite.graphics.drawRect(0, 0, m_background.width, m_background.height);
m_pauseSprite.graphics.endFill();
m_fxSprite.addChild(m_pauseSprite);
m_pauseSprite.addChild(pause_msg);
pause_msg.x = ((m_background.width - pause_msg.width) / 2);
pause_msg.y = ((m_background.height - pause_msg.height) / 2);
m_pauseSprite.visible = false;
m_toolTips = new Sprite();
m_toolTips.mouseEnabled = false;
addChild(m_toolTips);
}
private function updateSpotlight(a_event:MouseEvent):void{
if (m_paused){
return;
};
Tweener.addTween(m_spotlight, {alpha:0, time:0.2, transition:"linear", onComplete:Tweens.removeOnComplete});
m_spotlight = createSpotlight();
m_spotLayer.addChild(m_spotlight);
m_spotlight.x = a_event.stageX;
m_spotlight.y = a_event.stageY;
m_scope.x = (a_event.stageX - (m_scope.width / 2));
m_scope.y = (a_event.stageY - (m_scope.height / 2));
}
private function createBlockSprite():void{
m_blockSprite = new Sprite();
m_container.addChild(m_blockSprite);
}
private function show_tutorial(a_bmp:Bitmap):void{
var black:Sprite;
var btn:RegularButton;
var a_bmp = a_bmp;
m_showingTutorial = true;
black = new Sprite();
black.graphics.beginFill(0, 1);
black.graphics.drawRect(0, 0, width, height);
black.graphics.endFill();
black.alpha = 0.7;
addChild(black);
pause();
addChild(a_bmp);
a_bmp.x = ((640 - a_bmp.width) / 2);
a_bmp.y = 150;
btn = new RegularButton(AssetManager.ContinueButtonPNG);
addChild(btn);
btn.x = ((640 - btn.width) / 2);
btn.y = (a_bmp.getBounds(this).bottom + 2);
var rem:Function = function (a_event:MouseEvent):void{
removeChild(black);
removeChild(a_bmp);
removeChild(btn);
Tweener.removeTweens(black);
unpause();
m_showingTutorial = false;
};
btn.addEventListener(MouseEvent.CLICK, rem);
}
private function hilightTarget(a_bot:ColorBlock, a_time:Number):void{
var hilight:ColorBlock;
var a_bot = a_bot;
var a_time = a_time;
hilight = new ColorBlock(a_bot.index, false);
hilight.playAnimation("eyes");
hilight.filters = [new GlowFilter()];
a_bot.filters = [new GlowFilter()];
m_fx.addEntity(hilight);
m_fxSprite.addChild(hilight);
hilight.x = a_bot.x;
hilight.y = a_bot.y;
Tweener.addTween(a_bot, {time:a_time, onComplete:function ():void{
a_bot.filters = [];
}});
Tweener.addTween(hilight, {time:a_time, transition:"linear", onUpdate:function ():void{
hilight.x = a_bot.x;
hilight.y = a_bot.y;
}, onComplete:removeOnComplete(hilight)});
}
private function createSpotlight():Sprite{
var spotlight:Sprite = new Sprite();
spotlight.blendMode = BlendMode.ERASE;
spotlight.cacheAsBitmap = true;
spotlight.mouseEnabled = false;
spotlight.graphics.beginFill(0xFFFFFF);
spotlight.graphics.drawCircle(0, 0, 85);
spotlight.graphics.endFill();
spotlight.filters = [new GlowFilter(0xFFFFFF, 1, 32, 32, 8)];
return (spotlight);
}
private function endLevel():void{
var disp:DisplayObject;
var j:int;
var target:ColorBlock;
var o:DisplayObject;
var cb:ColorBlock;
flashScreen();
SoundManager.s_levelUpEffect.play();
var i:int;
while (i < 6) {
target = (m_targetGraphics[i] as ColorBlock);
m_targetGraphics[i] = null;
if (target != null){
m_interface.removeChild(target);
};
i++;
};
var xs:Array = new Array();
var if_idx:int;
while (if_idx < m_interface.numChildren) {
o = m_interface.getChildAt(if_idx);
if ((o is AssetManager.TargetEliminatedPNG)){
xs.push(o);
};
if_idx++;
};
for each (disp in xs) {
m_interface.removeChild(disp);
};
j = 0;
while (j < m_blocks.numEntities) {
cb = (m_blocks.getEntityAt(j) as ColorBlock);
if (cb != null){
m_blockSprite.removeChild(cb);
Tweener.removeTweens(cb);
};
j++;
};
if (m_safeLevel.val == 15){
m_main.updateMinStat(Main.assMinInno, m_innocentCount.val);
};
m_blocks.dispose();
m_blocks = new EntityContainer();
setLevel((m_safeLevel.val + 1));
}
private function startLevel():void{
var num:int;
var b:ColorBlock;
levelUpMessage();
createTimer();
var max_index:int = (2 + Math.min(3, (m_safeLevel.val / 4)));
var count:int;
var diff_idx:int;
while (diff_idx < max_index) {
num = 0;
while (num < (3 + (m_botsKilledPreviously[diff_idx] * 2))) {
count = (count + 1);
b = new ColorBlock(diff_idx);
m_blocks.addEntity(b);
if (num == 0){
m_targets[diff_idx] = b;
hilightTarget(b, 0.3);
};
m_blockSprite.addChild(b);
randomLocation(b);
randomDestination(b);
b.addEventListener(MouseEvent.MOUSE_DOWN, botClicked);
num++;
};
diff_idx++;
};
m_blockArray = new Array(count);
createTargets(max_index);
updateTargets();
}
private function randomLocation(a_block:ColorBlock):void{
a_block.x = RandomUtils.RandomInt((0 - (a_block.width / 2)), (m_background.width - (a_block.width / 2)));
a_block.y = RandomUtils.RandomInt((0 - (a_block.height / 2)), (m_background.height - (a_block.height / 2)));
}
private function setLevel(a_level:int):void{
m_safeLevel.val = a_level;
m_levelLabel.text = ("" + m_safeLevel.val);
}
private function randomDestination(a_block:ColorBlock):void{
var a_block = a_block;
Tweener.addTween(a_block, {x:RandomUtils.RandomInt(3, ((m_background.width - a_block.width) - 3)), y:RandomUtils.RandomInt(3, ((m_background.height - a_block.height) - 3)), time:RandomUtils.RandomInt(6, 10), transition:"linear", onComplete:function ():void{
randomDestination(a_block);
}});
}
private function createFxSprite():void{
var mask:Sprite = new Sprite();
mask.graphics.beginFill(0);
mask.graphics.drawRect(0, 0, m_background.width, m_background.height);
mask.graphics.endFill();
addChild(mask);
mask.x = m_container.x;
mask.y = m_container.y;
m_fxSprite = new Sprite();
addChild(m_fxSprite);
m_fxSprite.mask = mask;
m_fxSprite.x = m_container.x;
m_fxSprite.y = m_container.y;
m_fxSprite.mouseEnabled = false;
m_fxSprite.mouseChildren = false;
}
private function levelUpMessage():void{
var l:CustomTextField = new CustomTextField(("LEVEL " + m_safeLevel.val), 0xFF0000, 70);
l.filters = [new GlowFilter(0xFFFFFF, 1, 4, 4, 4)];
l.background = false;
l.mouseEnabled = false;
l.x = (320 - (l.width / 2));
l.y = 480;
addChild(l);
Tweener.addTween(l, {y:(240 - (l.height / 2)), time:1, transition:"easeOutExpo"});
Tweener.addTween(l, {y:-(l.height), time:1, delay:1, transition:"easeInExpo", onComplete:Tweens.removeOnComplete});
}
private function updateTimeDisplay():void{
m_timerSprite.updateBar();
}
private function removeOnComplete(a_ent:SpriteEntity):Function{
var a_ent = a_ent;
return (function ():void{
a_ent.parent.removeChild(this);
m_blockArray.splice(m_blockArray.indexOf(a_ent), 1);
m_blocks.removeEntity(this);
});
}
private function tick(a_event:Event):void{
var deltaTime:int = m_deltaTimer.calculateDeltaTime();
m_blocks.tick(deltaTime);
m_fx.tick(deltaTime);
if (((m_paused) || (m_showingTutorial))){
return;
};
if ((((m_tutorialQueue.length > 0)) && (!(m_showingTutorial)))){
show_tutorial(m_tutorialQueue.shift());
};
m_timerSprite.updateTime(deltaTime);
m_waveTime = (m_waveTime - deltaTime);
if (m_waveTime < 0){
blockWave();
m_waveTime = c_waveTime;
};
depthSortBlocks();
if (levelComplete()){
endLevel();
startLevel();
};
if (m_timerSprite.timeRemaining < 0){
gameOver();
};
updateTimeDisplay();
}
private function createTargets(a_max_idx:int):void{
var bot:ColorBlock;
var eyes:ColorBlock;
var i:int;
while (i < a_max_idx) {
bot = new ColorBlock(i);
eyes = new ColorBlock(i, false);
eyes.playAnimation("eyes");
bot.addChild(eyes);
m_targetGraphics[i] = bot;
m_interface.addChild(m_targetGraphics[i]);
i++;
};
}
private function push_tutorial(a_bmp:Bitmap):void{
m_tutorialQueue.push(a_bmp);
}
private function levelComplete():Boolean{
var complete:Boolean;
var i:int;
while (i < 6) {
if (m_targets[i] != null){
complete = false;
};
i++;
};
return (complete);
}
private function gameOver():void{
m_bgLoop.stopLoop();
SoundManager.s_gameOverSound.play();
removeEventListener(Event.ENTER_FRAME, tick);
m_main.createAssassinationGameOver(m_safeLevel.val, m_score.score);
}
private function addExplosionAt(a_bot:ColorBlock):void{
var e:Explosion = new Explosion();
e.x = (a_bot.x - ((e.width - Block.s_blockSize) / 2));
e.y = (((a_bot.y + Block.s_blockSize) - e.height) + 10);
m_fxSprite.addChild(e);
m_fx.addEntity(e);
e.onComplete = removeOnComplete(e);
}
private function togglePause():void{
if (m_paused){
unpause();
} else {
pause();
};
}
private function createScore():void{
m_score = new ScoreDisplay();
m_interface.addChild(m_score);
m_score.y = (480 - m_score.height);
m_levelLabel = new CustomTextField("", 0, 22);
m_interface.addChild(m_levelLabel);
m_levelLabel.background = false;
m_levelLabel.y = 393;
setLevel((m_safeLevel.val + 1));
}
private function updateTargets():void{
var target:ColorBlock;
var i:int;
while (i < 6) {
target = (m_targetGraphics[i] as ColorBlock);
if (target != null){
target.x = 28;
target.y = (38 + ((target.height + 7) * i));
};
i++;
};
}
private function blockWave():void{
var wave_idx:int;
var wave_block:ColorBlock;
var num_wave:int = (m_blocks.numEntities / 4);
var i:int;
while (i < num_wave) {
wave_idx = RandomUtils.RandomInt(0, (m_blocks.numEntities - 1));
wave_block = (m_blocks.getEntityAt(wave_idx) as ColorBlock);
if (wave_block == null){
trace("null wave block");
} else {
wave_block.playAnimation("wave");
};
i++;
};
}
private function flashScreen():void{
var f:Sprite = new Sprite();
f.graphics.beginFill(0xFFFFFF);
f.graphics.drawRect(0, 0, 640, 480);
f.graphics.endFill();
addChild(f);
Tweener.addTween(f, {alpha:0, time:0.2, transition:"easeInQuad", onComplete:Tweens.removeOnComplete});
}
private function pause():void{
Tweener.pauseAllTweens();
m_paused = true;
m_pauseSprite.visible = true;
m_blockSprite.mouseChildren = false;
}
}
}//package
Section 33
//AssassinationGameOver (AssassinationGameOver)
package {
import flash.events.*;
import flash.display.*;
import flash.filters.*;
public class AssassinationGameOver extends Sprite {
private var m_controller:Main;
public function AssassinationGameOver(a_level:int, a_score:int, a_controller:Main){
var btn:RegularButton;
var rem:Function;
var a_level = a_level;
var a_score = a_score;
var a_controller = a_controller;
super();
m_controller = a_controller;
var filter:GlowFilter = new GlowFilter(0xFFFFFF, 0.7, 12, 12, 4);
addChild(new AssetManager.AssassinationGameOverPNG());
var score:CustomTextField = new CustomTextField(("Score : " + a_score), 0, 28, true);
addChild(score);
score.x = ((640 - score.width) / 2);
score.y = 150;
var level:CustomTextField = new CustomTextField(("Level : " + a_level), 0, 28, true);
addChild(level);
level.x = ((640 - level.width) / 2);
level.y = (score.getBounds(this).bottom + 5);
m_controller.updateMaxStat(Main.assHighScore, a_score);
m_controller.updateMaxStat(Main.assHighLevel, a_level);
var str:String = ("High Score: " + Main.s_safeSolManager.readInt(Main.assHighScore));
var assHighScore:CustomTextField = new CustomTextField(str, 0, 28, true);
addChild(assHighScore);
assHighScore.x = ((640 - assHighScore.width) / 2);
assHighScore.y = (level.getBounds(this).bottom + 2);
str = ("Best Level: " + Main.s_safeSolManager.readInt(Main.assHighLevel));
var assHighLevel:CustomTextField = new CustomTextField(str, 0, 28, true);
addChild(assHighLevel);
assHighLevel.x = ((640 - assHighLevel.width) / 2);
assHighLevel.y = (assHighScore.getBounds(this).bottom + 2);
btn = new RegularButton(AssetManager.MainMenuButtonPNG);
addChild(btn);
btn.x = ((640 - btn.width) / 2);
btn.y = ((480 - btn.height) - 5);
rem = function (a_event:MouseEvent):void{
btn.removeEventListener(MouseEvent.CLICK, rem);
m_controller.createMainMenu();
};
btn.addEventListener(MouseEvent.CLICK, rem);
}
}
}//package
Section 34
//AssassinationLoop (AssassinationLoop)
package {
import flash.media.*;
public dynamic class AssassinationLoop extends Sound {
}
}//package
Section 35
//AssetManager (AssetManager)
package {
import flash.display.*;
public class AssetManager {
public static const PerimiterBitmap:Bitmap = new PerimiterPNG();
public static const RobotBitmap:Bitmap = new RobotPNG();
public static const RobotEyesBitmap:Bitmap = new RobotEyesPNG();
public static const BackgroundBitmap:Bitmap = new BackgroundPNG();
public static const RobotDeathBitmap:Bitmap = new RobotDeathPNG();
public static const interfaceFont:String = "AssetManager_interfaceFont";
public static const ExplosionBitmap:Bitmap = new ExplosionPNG();
public static const SmartBombBitmap:Bitmap = new ActiveSmartBombPNG();
public static var BackgroundPNG:Class = AssetManager_BackgroundPNG;
public static var AssassinationButtonPNG:Class = AssetManager_AssassinationButtonPNG;
public static var Score5MP3:Class = AssetManager_Score5MP3;
public static var KongTitlePNG:Class = AssetManager_KongTitlePNG;
public static var TargetEliminatedPNG:Class = AssetManager_TargetEliminatedPNG;
public static var Score8MP3:Class = AssetManager_Score8MP3;
public static var BonusAllAtOncePNG:Class = AssetManager_BonusAllAtOncePNG;
public static var KongInGamePNG:Class = AssetManager_KongInGamePNG;
public static var HowToPlayAssassinationPNG:Class = AssetManager_HowToPlayAssassinationPNG;
public static var BonusBlueMatchPNG:Class = AssetManager_BonusBlueMatchPNG;
public static var Score10MP3:Class = AssetManager_Score10MP3;
public static var GameOverPNG:Class = AssetManager_GameOverPNG;
public static var CreditsButtonPNG:Class = AssetManager_CreditsButtonPNG;
public static var AssassinationOverlayPNG:Class = AssetManager_AssassinationOverlayPNG;
public static var TitleBgPNG:Class = AssetManager_TitleBgPNG;
public static var UrbanSquallPNG:Class = AssetManager_UrbanSquallPNG;
public static var Score3MP3:Class = AssetManager_Score3MP3;
public static var BonusOrangeMatchPNG:Class = AssetManager_BonusOrangeMatchPNG;
public static var HowToLowTimePNG:Class = AssetManager_HowToLowTimePNG;
public static var ScopePNG:Class = AssetManager_ScopePNG;
public static var BonusRedMatchPNG:Class = AssetManager_BonusRedMatchPNG;
public static var HowToScorePNG:Class = AssetManager_HowToScorePNG;
public static var CreditsPNG:Class = AssetManager_CreditsPNG;
public static var PauseButtonPNG:Class = AssetManager_PauseButtonPNG;
public static var ActiveSmartBombPNG:Class = AssetManager_ActiveSmartBombPNG;
public static var CrowdControlButtonPNG:Class = AssetManager_CrowdControlButtonPNG;
public static var LockedSmartBombPNG:Class = AssetManager_LockedSmartBombPNG;
public static var Score6MP3:Class = AssetManager_Score6MP3;
public static var HowToBonusPNG:Class = AssetManager_HowToBonusPNG;
public static var RobotDeathPNG:Class = AssetManager_RobotDeathPNG;
public static var PutOnSiteButtonPNG:Class = AssetManager_PutOnSiteButtonPNG;
public static var BonusGreenMatchPNG:Class = AssetManager_BonusGreenMatchPNG;
public static var Score9MP3:Class = AssetManager_Score9MP3;
public static var ContinueButtonPNG:Class = AssetManager_ContinueButtonPNG;
public static var Score1MP3:Class = AssetManager_Score1MP3;
public static var HowToLevelUpPNG:Class = AssetManager_HowToLevelUpPNG;
public static var RobotPNG:Class = AssetManager_RobotPNG;
public static var MainMenuButtonPNG:Class = AssetManager_MainMenuButtonPNG;
public static var PlayButtonPNG:Class = AssetManager_PlayButtonPNG;
public static var CrossHairPNG:Class = AssetManager_CrossHairPNG;
public static var Score4MP3:Class = AssetManager_Score4MP3;
public static var HowToPowerUpPNG:Class = AssetManager_HowToPowerUpPNG;
public static var RobotEyesPNG:Class = AssetManager_RobotEyesPNG;
public static var NextButtonPNG:Class = AssetManager_NextButtonPNG;
public static var BonusChainPNG:Class = AssetManager_BonusChainPNG;
public static var Score7MP3:Class = AssetManager_Score7MP3;
public static var AssassinationGameOverPNG:Class = AssetManager_AssassinationGameOverPNG;
public static var BonusPurpleMatchPNG:Class = AssetManager_BonusPurpleMatchPNG;
public static var InGameOverlayPNG:Class = AssetManager_InGameOverlayPNG;
public static var Score2MP3:Class = AssetManager_Score2MP3;
public static var ExplosionPNG:Class = AssetManager_ExplosionPNG;
public static var PerimiterPNG:Class = AssetManager_PerimiterPNG;
public function AssetManager(){
super();
}
}
}//package
Section 36
//AssetManager_ActiveSmartBombPNG (AssetManager_ActiveSmartBombPNG)
package {
import mx.core.*;
public class AssetManager_ActiveSmartBombPNG extends BitmapAsset {
}
}//package
Section 37
//AssetManager_AssassinationButtonPNG (AssetManager_AssassinationButtonPNG)
package {
import mx.core.*;
public class AssetManager_AssassinationButtonPNG extends BitmapAsset {
}
}//package
Section 38
//AssetManager_AssassinationGameOverPNG (AssetManager_AssassinationGameOverPNG)
package {
import mx.core.*;
public class AssetManager_AssassinationGameOverPNG extends BitmapAsset {
}
}//package
Section 39
//AssetManager_AssassinationOverlayPNG (AssetManager_AssassinationOverlayPNG)
package {
import mx.core.*;
public class AssetManager_AssassinationOverlayPNG extends BitmapAsset {
}
}//package
Section 40
//AssetManager_BackgroundPNG (AssetManager_BackgroundPNG)
package {
import mx.core.*;
public class AssetManager_BackgroundPNG extends BitmapAsset {
}
}//package
Section 41
//AssetManager_BonusAllAtOncePNG (AssetManager_BonusAllAtOncePNG)
package {
import mx.core.*;
public class AssetManager_BonusAllAtOncePNG extends BitmapAsset {
}
}//package
Section 42
//AssetManager_BonusBlueMatchPNG (AssetManager_BonusBlueMatchPNG)
package {
import mx.core.*;
public class AssetManager_BonusBlueMatchPNG extends BitmapAsset {
}
}//package
Section 43
//AssetManager_BonusChainPNG (AssetManager_BonusChainPNG)
package {
import mx.core.*;
public class AssetManager_BonusChainPNG extends BitmapAsset {
}
}//package
Section 44
//AssetManager_BonusGreenMatchPNG (AssetManager_BonusGreenMatchPNG)
package {
import mx.core.*;
public class AssetManager_BonusGreenMatchPNG extends BitmapAsset {
}
}//package
Section 45
//AssetManager_BonusOrangeMatchPNG (AssetManager_BonusOrangeMatchPNG)
package {
import mx.core.*;
public class AssetManager_BonusOrangeMatchPNG extends BitmapAsset {
}
}//package
Section 46
//AssetManager_BonusPurpleMatchPNG (AssetManager_BonusPurpleMatchPNG)
package {
import mx.core.*;
public class AssetManager_BonusPurpleMatchPNG extends BitmapAsset {
}
}//package
Section 47
//AssetManager_BonusRedMatchPNG (AssetManager_BonusRedMatchPNG)
package {
import mx.core.*;
public class AssetManager_BonusRedMatchPNG extends BitmapAsset {
}
}//package
Section 48
//AssetManager_ContinueButtonPNG (AssetManager_ContinueButtonPNG)
package {
import mx.core.*;
public class AssetManager_ContinueButtonPNG extends BitmapAsset {
}
}//package
Section 49
//AssetManager_CreditsButtonPNG (AssetManager_CreditsButtonPNG)
package {
import mx.core.*;
public class AssetManager_CreditsButtonPNG extends BitmapAsset {
}
}//package
Section 50
//AssetManager_CreditsPNG (AssetManager_CreditsPNG)
package {
import mx.core.*;
public class AssetManager_CreditsPNG extends BitmapAsset {
}
}//package
Section 51
//AssetManager_CrossHairPNG (AssetManager_CrossHairPNG)
package {
import mx.core.*;
public class AssetManager_CrossHairPNG extends BitmapAsset {
}
}//package
Section 52
//AssetManager_CrowdControlButtonPNG (AssetManager_CrowdControlButtonPNG)
package {
import mx.core.*;
public class AssetManager_CrowdControlButtonPNG extends BitmapAsset {
}
}//package
Section 53
//AssetManager_ExplosionPNG (AssetManager_ExplosionPNG)
package {
import mx.core.*;
public class AssetManager_ExplosionPNG extends BitmapAsset {
}
}//package
Section 54
//AssetManager_GameOverPNG (AssetManager_GameOverPNG)
package {
import mx.core.*;
public class AssetManager_GameOverPNG extends BitmapAsset {
}
}//package
Section 55
//AssetManager_HowToBonusPNG (AssetManager_HowToBonusPNG)
package {
import mx.core.*;
public class AssetManager_HowToBonusPNG extends BitmapAsset {
}
}//package
Section 56
//AssetManager_HowToLevelUpPNG (AssetManager_HowToLevelUpPNG)
package {
import mx.core.*;
public class AssetManager_HowToLevelUpPNG extends BitmapAsset {
}
}//package
Section 57
//AssetManager_HowToLowTimePNG (AssetManager_HowToLowTimePNG)
package {
import mx.core.*;
public class AssetManager_HowToLowTimePNG extends BitmapAsset {
}
}//package
Section 58
//AssetManager_HowToPlayAssassinationPNG (AssetManager_HowToPlayAssassinationPNG)
package {
import mx.core.*;
public class AssetManager_HowToPlayAssassinationPNG extends BitmapAsset {
}
}//package
Section 59
//AssetManager_HowToPowerUpPNG (AssetManager_HowToPowerUpPNG)
package {
import mx.core.*;
public class AssetManager_HowToPowerUpPNG extends BitmapAsset {
}
}//package
Section 60
//AssetManager_HowToScorePNG (AssetManager_HowToScorePNG)
package {
import mx.core.*;
public class AssetManager_HowToScorePNG extends BitmapAsset {
}
}//package
Section 61
//AssetManager_InGameOverlayPNG (AssetManager_InGameOverlayPNG)
package {
import mx.core.*;
public class AssetManager_InGameOverlayPNG extends BitmapAsset {
}
}//package
Section 62
//AssetManager_interfaceFont (AssetManager_interfaceFont)
package {
import mx.core.*;
public class AssetManager_interfaceFont extends FontAsset {
}
}//package
Section 63
//AssetManager_KongInGamePNG (AssetManager_KongInGamePNG)
package {
import mx.core.*;
public class AssetManager_KongInGamePNG extends BitmapAsset {
}
}//package
Section 64
//AssetManager_KongTitlePNG (AssetManager_KongTitlePNG)
package {
import mx.core.*;
public class AssetManager_KongTitlePNG extends BitmapAsset {
}
}//package
Section 65
//AssetManager_LockedSmartBombPNG (AssetManager_LockedSmartBombPNG)
package {
import mx.core.*;
public class AssetManager_LockedSmartBombPNG extends BitmapAsset {
}
}//package
Section 66
//AssetManager_MainMenuButtonPNG (AssetManager_MainMenuButtonPNG)
package {
import mx.core.*;
public class AssetManager_MainMenuButtonPNG extends BitmapAsset {
}
}//package
Section 67
//AssetManager_NextButtonPNG (AssetManager_NextButtonPNG)
package {
import mx.core.*;
public class AssetManager_NextButtonPNG extends BitmapAsset {
}
}//package
Section 68
//AssetManager_PauseButtonPNG (AssetManager_PauseButtonPNG)
package {
import mx.core.*;
public class AssetManager_PauseButtonPNG extends BitmapAsset {
}
}//package
Section 69
//AssetManager_PerimiterPNG (AssetManager_PerimiterPNG)
package {
import mx.core.*;
public class AssetManager_PerimiterPNG extends BitmapAsset {
}
}//package
Section 70
//AssetManager_PlayButtonPNG (AssetManager_PlayButtonPNG)
package {
import mx.core.*;
public class AssetManager_PlayButtonPNG extends BitmapAsset {
}
}//package
Section 71
//AssetManager_PutOnSiteButtonPNG (AssetManager_PutOnSiteButtonPNG)
package {
import mx.core.*;
public class AssetManager_PutOnSiteButtonPNG extends BitmapAsset {
}
}//package
Section 72
//AssetManager_RobotDeathPNG (AssetManager_RobotDeathPNG)
package {
import mx.core.*;
public class AssetManager_RobotDeathPNG extends BitmapAsset {
}
}//package
Section 73
//AssetManager_RobotEyesPNG (AssetManager_RobotEyesPNG)
package {
import mx.core.*;
public class AssetManager_RobotEyesPNG extends BitmapAsset {
}
}//package
Section 74
//AssetManager_RobotPNG (AssetManager_RobotPNG)
package {
import mx.core.*;
public class AssetManager_RobotPNG extends BitmapAsset {
}
}//package
Section 75
//AssetManager_ScopePNG (AssetManager_ScopePNG)
package {
import mx.core.*;
public class AssetManager_ScopePNG extends BitmapAsset {
}
}//package
Section 76
//AssetManager_Score10MP3 (AssetManager_Score10MP3)
package {
import mx.core.*;
public class AssetManager_Score10MP3 extends SoundAsset {
}
}//package
Section 77
//AssetManager_Score1MP3 (AssetManager_Score1MP3)
package {
import mx.core.*;
public class AssetManager_Score1MP3 extends SoundAsset {
}
}//package
Section 78
//AssetManager_Score2MP3 (AssetManager_Score2MP3)
package {
import mx.core.*;
public class AssetManager_Score2MP3 extends SoundAsset {
}
}//package
Section 79
//AssetManager_Score3MP3 (AssetManager_Score3MP3)
package {
import mx.core.*;
public class AssetManager_Score3MP3 extends SoundAsset {
}
}//package
Section 80
//AssetManager_Score4MP3 (AssetManager_Score4MP3)
package {
import mx.core.*;
public class AssetManager_Score4MP3 extends SoundAsset {
}
}//package
Section 81
//AssetManager_Score5MP3 (AssetManager_Score5MP3)
package {
import mx.core.*;
public class AssetManager_Score5MP3 extends SoundAsset {
}
}//package
Section 82
//AssetManager_Score6MP3 (AssetManager_Score6MP3)
package {
import mx.core.*;
public class AssetManager_Score6MP3 extends SoundAsset {
}
}//package
Section 83
//AssetManager_Score7MP3 (AssetManager_Score7MP3)
package {
import mx.core.*;
public class AssetManager_Score7MP3 extends SoundAsset {
}
}//package
Section 84
//AssetManager_Score8MP3 (AssetManager_Score8MP3)
package {
import mx.core.*;
public class AssetManager_Score8MP3 extends SoundAsset {
}
}//package
Section 85
//AssetManager_Score9MP3 (AssetManager_Score9MP3)
package {
import mx.core.*;
public class AssetManager_Score9MP3 extends SoundAsset {
}
}//package
Section 86
//AssetManager_TargetEliminatedPNG (AssetManager_TargetEliminatedPNG)
package {
import mx.core.*;
public class AssetManager_TargetEliminatedPNG extends BitmapAsset {
}
}//package
Section 87
//AssetManager_TitleBgPNG (AssetManager_TitleBgPNG)
package {
import mx.core.*;
public class AssetManager_TitleBgPNG extends BitmapAsset {
}
}//package
Section 88
//AssetManager_UrbanSquallPNG (AssetManager_UrbanSquallPNG)
package {
import mx.core.*;
public class AssetManager_UrbanSquallPNG extends BitmapAsset {
}
}//package
Section 89
//BiggestBlock (BiggestBlock)
package {
public class BiggestBlock extends Block {
public function BiggestBlock(){
super();
buttonMode = true;
m_player = Animations.instance.instantiate("bigpowerup");
addChild(m_player);
toolTip = "Executes the biggest move.";
}
}
}//package
Section 90
//BigMatchMission (BigMatchMission)
package {
import flash.display.*;
import flash.geom.*;
public class BigMatchMission extends Mission {
private var m_icon:Bitmap;
private var m_goal:int;
private var m_complete:Boolean;
public function BigMatchMission(a_maxIndex:int){
super();
m_goal = 25;
m_complete = false;
createLabel();
toolTip = (("Zap at least " + m_goal) + " bots at once");
}
override public function get isComplete():Boolean{
return (m_complete);
}
public function createLabel():void{
m_icon = new AssetManager.BonusAllAtOncePNG();
addChild(m_icon);
var label:CustomTextField = new CustomTextField("25", 0, c_missionFontSize);
label.background = false;
addChild(label);
label.x = (((m_icon.width - label.width) / 2) - 3);
label.y = (m_icon.getBounds(this).bottom - 10);
}
override public function update(a_columns:Array, a_rect:Rectangle):void{
if ((a_rect.width * a_rect.height) >= m_goal){
m_complete = true;
};
}
}
}//package
Section 91
//Block (Block)
package {
import flash.events.*;
import flash.display.*;
import com.urbansquall.ginger.*;
public class Block extends SpriteEntity {
protected var m_onComplete:Function;
protected var m_player:AnimationPlayer;
protected var m_board:CrowdControlGame;
protected var m_tileX:int;
protected var m_tileY:int;
public static const s_blockSize:uint = 40;
private static var s_id_counter:int = 0;
public function Block(hasShadow:Boolean=true){
var dropShadow:Sprite;
var g:Graphics;
super();
m_onComplete = null;
m_id = ("Block_" + s_id_counter);
s_id_counter = (s_id_counter + 1);
if (hasShadow){
dropShadow = new Sprite();
g = dropShadow.graphics;
g.beginFill(0, 0.4);
g.drawEllipse(2, (s_blockSize - 6), (s_blockSize - 4), 8);
g.endFill();
addChildAt(dropShadow, 0);
};
}
private function blockMouseDown(a_event:MouseEvent):void{
m_board.mouseDown(m_tileX, m_tileY);
}
private function blockMouseUp(a_event:MouseEvent):void{
m_board.mouseUp(m_tileX, m_tileY);
}
protected function animationChange(a_event:AnimationEvent):void{
if (((((!(a_event.begin)) && ((a_event.animationID == "death")))) && (!((m_onComplete == null))))){
m_player.removeEventListener(AnimationEvent.CHANGE, animationChange);
m_onComplete();
};
}
override public function tick(a_deltaTime:Number):void{
m_player.update(a_deltaTime);
}
private function blockMouseMove(a_event:MouseEvent):void{
m_board.mouseMove(m_tileX, m_tileY);
}
override public function dispose():void{
super.dispose();
unregisterEvents();
}
public function unregisterEvents():void{
removeEventListener(MouseEvent.MOUSE_MOVE, blockMouseMove);
removeEventListener(MouseEvent.MOUSE_DOWN, blockMouseDown);
removeEventListener(MouseEvent.MOUSE_UP, blockMouseUp);
}
public function set onComplete(a_func:Function):void{
m_onComplete = a_func;
}
public function registerEvents(a_board:CrowdControlGame, a_tileX:int, a_tileY:int):void{
m_board = a_board;
m_tileX = a_tileX;
m_tileY = a_tileY;
addEventListener(MouseEvent.MOUSE_MOVE, blockMouseMove);
addEventListener(MouseEvent.MOUSE_DOWN, blockMouseDown);
addEventListener(MouseEvent.MOUSE_UP, blockMouseUp);
}
public function playAnimation(a_animId:String):void{
m_player.play(a_animId);
}
public function equals(a_block:Block):Boolean{
return (true);
}
}
}//package
Section 92
//BlockGenerator (BlockGenerator)
package {
public class BlockGenerator {
public function BlockGenerator(){
super();
}
public static function generateRandomColorBlock(a_maxIndex:int, a_probabilityOfLastIndex:Number=0):ColorBlock{
var idx:int;
var n:Number = Math.random();
if (n < a_probabilityOfLastIndex){
idx = (a_maxIndex - 1);
} else {
idx = RandomUtils.RandomInt(0, (a_maxIndex - 1));
};
return (new ColorBlock(idx));
}
}
}//package
Section 93
//BonusAchievedEffect (BonusAchievedEffect)
package {
import flash.media.*;
public dynamic class BonusAchievedEffect extends Sound {
}
}//package
Section 94
//CancelDragEffect (CancelDragEffect)
package {
import flash.media.*;
public dynamic class CancelDragEffect extends Sound {
}
}//package
Section 95
//ChainMission (ChainMission)
package {
import flash.display.*;
import flash.geom.*;
public class ChainMission extends Mission {
private var m_countText:CustomTextField;
private var m_chain:Bitmap;
private var m_prevRect:Rectangle;
private var m_count:int;
private static const c_goal:int = 5;
public function ChainMission(a_maxIndex:int){
super();
m_count = c_goal;
createCount();
updateDisplay();
toolTip = "Make matches with matches inside them";
}
public function createCount():void{
m_chain = new AssetManager.BonusChainPNG();
addChild(m_chain);
m_countText = new CustomTextField("", 0, c_missionFontSize);
m_countText.background = false;
addChild(m_countText);
m_countText.x = ((m_chain.width - m_countText.width) / 2);
m_countText.y = (m_chain.getBounds(this).bottom - 10);
}
override public function get isComplete():Boolean{
return ((m_count <= 0));
}
override public function update(a_columns:Array, a_rect:Rectangle):void{
if (((!((m_prevRect == null))) && (m_prevRect.containsRect(a_rect)))){
m_count = (m_count - 1);
};
m_prevRect = a_rect;
updateDisplay();
}
public function updateDisplay():void{
m_countText.text = ("x" + m_count);
m_countText.x = ((m_chain.width - m_countText.width) / 2);
}
}
}//package
Section 96
//ColorBlock (ColorBlock)
package {
import com.urbansquall.ginger.*;
public class ColorBlock extends Block {
private var m_index:uint;
public static var s_animationNames:Array = new Array("bluebot", "redbot", "greenbot", "purplebot", "orangebot");
private static var s_matchColors:Array = new Array(4210943, 0xFF0000, 0xFF00, 0xFF00FF, 0xFFFF00);
public function ColorBlock(a_index:int, hasShadow:Boolean=true){
super(hasShadow);
m_index = a_index;
m_player = Animations.instance.instantiate(s_animationNames[m_index]);
m_player.play("still");
addChild(m_player);
m_player.addEventListener(AnimationEvent.CHANGE, animationChange);
}
public function get index():uint{
return (m_index);
}
override public function playAnimation(a_animId:String):void{
if (m_player.currentAnimationID != "death"){
super.playAnimation(a_animId);
};
}
public function get matchColor():uint{
return (s_matchColors[m_index]);
}
override public function equals(a_block:Block):Boolean{
if ((a_block is ColorBlock)){
return (((a_block as ColorBlock).index == this.index));
};
return (false);
}
}
}//package
Section 97
//ColumnBlock (ColumnBlock)
package {
import flash.display.*;
public class ColumnBlock extends Block {
private static var s_bitmap:BitmapData = null;
public function ColumnBlock(){
super();
buttonMode = true;
m_player = Animations.instance.instantiate("columnpowerup");
addChild(m_player);
toolTip = "Replaces this column with one color.";
}
}
}//package
Section 98
//CreditsScreen (CreditsScreen)
package {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public class CreditsScreen extends Sprite {
private var m_controller:Main;
public function CreditsScreen(a_controller:Main){
var btn:RegularButton;
var rem:Function;
var a_controller = a_controller;
super();
m_controller = a_controller;
addChild(new AssetManager.CreditsPNG());
var urbansquall:SimpleButton = new RegularButton(AssetManager.UrbanSquallPNG);
addChild(urbansquall);
urbansquall.x = ((640 - urbansquall.width) / 2);
urbansquall.y = 50;
urbansquall.addEventListener(MouseEvent.CLICK, goToUrbanSquall);
btn = new RegularButton(AssetManager.MainMenuButtonPNG);
addChild(btn);
btn.x = ((640 - btn.width) / 2);
btn.y = ((480 - btn.height) - 5);
rem = function (a_event:MouseEvent):void{
btn.removeEventListener(MouseEvent.CLICK, rem);
m_controller.createMainMenu();
};
btn.addEventListener(MouseEvent.CLICK, rem);
}
private function goToUrbanSquall(a_event:Event=null):void{
navigateToURL(new URLRequest("http://www.urbansquall.com/blog/"), "_blank");
}
}
}//package
Section 99
//CrossBlock (CrossBlock)
package {
public class CrossBlock extends Block {
public function CrossBlock(){
super();
buttonMode = true;
m_player = Animations.instance.instantiate("crosspowerup");
addChild(m_player);
toolTip = "Replaces this row and column with one color.";
}
}
}//package
Section 100
//CrowdControlGame (CrowdControlGame)
package {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import com.urbansquall.serenity.*;
import com.urbansquall.security.*;
import flash.text.*;
import flash.filters.*;
import caurina.transitions.*;
public class CrowdControlGame extends Sprite {
private var m_timeInLevel:int;
private var m_tutorialQueue:Array;
private var m_missionBoxPlaceholder:Sprite;
private var m_curMaxTime:int;
private var m_waveIndex:int;
private var m_seenScoreTutorial:Boolean;
private var m_columns:Array;
private var m_kongStatTime:int;
private var m_safePowerUpCount:safeint;
private var m_seenPowerUpTutorial:Boolean;
private var m_level:safeint;
private var m_selectionRect:Rectangle;
private var m_paused:Boolean;
private var m_arcLoop:LoopingSound;
private var m_score:ScoreDisplay;
private var m_main:Main;
private var m_background:Sprite;
private var m_selectionOverBlocks:Sprite;
private var m_leveling:Boolean;
private var m_showingTutorial:Boolean;
private var m_selectionMgr:SelectionManager;
private var m_removalSprite:Sprite;
private var m_toolTips:Sprite;
private var m_deltaTimer:DeltaTimer;
private var m_pauseSprite:Sprite;
private var m_seenBonusTutorial:Boolean;
private var m_botBuffer:int;
private var m_blocks:EntityContainer;
private var m_boardWidth:uint;
private var m_bgLoop:LoopingSound;
private var m_warningLoop:LoopingSound;
private var m_matching:Boolean;
private var m_timerSprite:TimerBar;
private var m_safeCrowdControlCount:safeint;
private var m_safeBonusCount:safeint;
private var m_mission:Mission;
private var m_curBonusTime:int;
private var m_bombs:Array;
private var m_safeBotCount:safeint;
private var m_fxSprite:Sprite;
private var m_timerContainer:Sprite;
private var m_boardHeight:uint;
private var m_prev_tile_x:int;
private var m_prev_tile_y:int;
private var m_fx:EntityContainer;
private var m_blockSprite:Sprite;
private var m_levelLabel:CustomTextField;
private var m_interface:Sprite;
private var m_seenLevelUpTutorial:Boolean;
private var m_seenLowTimeTutorial:Boolean;
private var m_waveTime:int;
private static const c_smushFactor:int = 7;
private static const c_initialBonusTime:int = 10000;
private static const c_initialMaxTime:int = 90000;
private static const c_waveTime:int = 2000;
private static const c_timeFactor:Number = 0.96;
private static const c_penaltyInterval:int = 10000;
private static const c_rectClearTime:int = 5000;
private static const c_kongStatTime:int = 5000;
private static var s_missionTypes:Array = new Array(BigMatchMission, OneColorBlockCountMission, ChainMission);
private static var s_bonusTypes:Array = new Array(CrossBlock, MorphBlock, ColumnBlock, RowBlock, BiggestBlock, WildCardBlock);
public function CrowdControlGame(a_width:uint, a_height:uint, a_main:Main){
super();
m_main = a_main;
m_seenScoreTutorial = Main.s_safeSolManager.readBool(Main.tutScore);
m_seenPowerUpTutorial = Main.s_safeSolManager.readBool(Main.tutPower);
m_seenLevelUpTutorial = Main.s_safeSolManager.readBool(Main.tutLevel);
m_seenLowTimeTutorial = Main.s_safeSolManager.readBool(Main.tutTime);
m_seenBonusTutorial = Main.s_safeSolManager.readBool(Main.tutBonus);
m_paused = false;
m_leveling = false;
m_matching = false;
m_showingTutorial = false;
m_botBuffer = 0;
m_safeBotCount = new safeint(0);
m_safeBonusCount = new safeint(0);
m_safeCrowdControlCount = new safeint(0);
m_safePowerUpCount = new safeint(0);
m_boardWidth = a_width;
m_boardHeight = a_height;
addEventListener(Event.ADDED_TO_STAGE, added);
}
private function unpause():void{
Tweener.resumeAllTweens();
m_paused = false;
m_pauseSprite.visible = false;
m_blockSprite.mouseChildren = true;
}
private function togglePause():void{
if (m_paused){
unpause();
} else {
pause();
};
}
private function depthSortBlocks():void{
var row:int;
var b:Block;
var col:int;
while (col < m_boardHeight) {
row = 0;
while (row < m_boardWidth) {
b = (m_columns[row][col] as Block);
m_blockSprite.setChildIndex(b, (m_blockSprite.numChildren - 1));
row++;
};
col++;
};
}
private function removeOnComplete(a_ent:SpriteEntity):Function{
var a_ent = a_ent;
return (function ():void{
a_ent.parent.removeChild(this);
m_fx.removeEntity(this);
m_blocks.removeEntity(this);
});
}
private function destroySelectionSprite():void{
var b:Block;
while (m_selectionOverBlocks.numChildren > 0) {
m_selectionOverBlocks.removeChildAt(0);
};
var idx:int;
while (idx < m_blockSprite.numChildren) {
b = (m_blockSprite.getChildAt(idx) as Block);
b.filters = [];
idx++;
};
}
private function added(a_event:Event):void{
var a_event = a_event;
removeEventListener(Event.ADDED_TO_STAGE, added);
m_curMaxTime = c_initialMaxTime;
m_curBonusTime = c_initialBonusTime;
m_deltaTimer = new DeltaTimer();
m_deltaTimer.reset();
addEventListener(Event.ENTER_FRAME, tick);
m_arcLoop = new LoopingSound(SoundManager.s_electricalArcLoop);
m_warningLoop = new LoopingSound(SoundManager.s_warningLoop);
m_bgLoop = new LoopingSound(SoundManager.s_crowdControlLoop);
m_bgLoop.startLoop();
m_bgLoop.volume = 0;
Tweener.addTween(m_bgLoop, {volume:1, time:5, transition:"easeOutQuad"});
m_fx = new EntityContainer();
m_blocks = new EntityContainer();
m_level = new safeint(0);
createBgSprite();
createBlockSprite();
createRemovalSprite();
createFxSprite();
createInterface();
createMissionSprite();
startLevel();
m_tutorialQueue = new Array();
if (!m_seenScoreTutorial){
m_seenScoreTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutScore, true);
Tweener.addTween(m_blockSprite, {time:1, onComplete:function ():void{
push_tutorial(new AssetManager.HowToScorePNG());
}});
};
}
private function crowdControlMessage():void{
var l:CustomTextField = new CustomTextField("CROWD CONTROL!", 0, 70);
l.filters = [new GlowFilter(0xFFFFFF, 1, 4, 4, 4)];
l.background = false;
l.x = (320 - (l.width / 2));
l.y = 480;
addChild(l);
Tweener.addTween(l, {y:(240 - (l.height / 2)), time:1, transition:"easeOutExpo"});
Tweener.addTween(l, {y:-(l.height), time:1, delay:1, transition:"easeInExpo", onComplete:Tweens.removeOnComplete});
}
private function createBlockSprite():void{
m_blockSprite = new Sprite();
addChild(m_blockSprite);
m_blockSprite.x = m_background.x;
m_blockSprite.y = m_background.y;
m_selectionOverBlocks = new Sprite();
m_selectionOverBlocks.mouseEnabled = false;
m_selectionOverBlocks.mouseChildren = false;
addChild(m_selectionOverBlocks);
m_selectionOverBlocks.x = m_blockSprite.x;
m_selectionOverBlocks.y = m_blockSprite.y;
}
private function resetSelectionIndicators():void{
m_prev_tile_x = -1;
m_prev_tile_y = -1;
destroySelectionSprite();
}
public function mouseMove(a_tileX:int, a_tileY:int):void{
if (((((m_leveling) || (m_matching))) || ((m_prev_tile_x < 0)))){
return;
};
var t_x:int = a_tileX;
var t_y:int = a_tileY;
if ((((((((t_x < 0)) || ((t_y < 0)))) || ((t_x >= m_boardWidth)))) || ((t_y >= m_boardHeight)))){
return;
};
var tile_left:uint = Math.min(a_tileX, m_prev_tile_x);
var tile_right:uint = Math.max(a_tileX, m_prev_tile_x);
var tile_top:uint = Math.min(a_tileY, m_prev_tile_y);
var tile_bottom:uint = Math.max(a_tileY, m_prev_tile_y);
updateSelection(new Rectangle(tile_left, tile_top, ((tile_right - tile_left) + 1), ((tile_bottom - tile_top) + 1)));
}
private function blockWave():void{
var i:int;
var j:int;
var cb:ColorBlock;
var sparkled:Boolean;
var loops:int;
while (((!(sparkled)) && ((loops < 5)))) {
i = 0;
while (i < m_boardWidth) {
j = 0;
while (j < m_boardHeight) {
if ((m_columns[i][j] is ColorBlock)){
cb = m_columns[i][j];
if (cb.index == m_waveIndex){
sparkled = true;
cb.playAnimation("wave");
};
};
j++;
};
i++;
};
loops++;
m_waveIndex = ((m_waveIndex + 1) % 5);
};
}
public function mouseUp(a_tileX:int, a_tileY:int):void{
if (((m_leveling) || (m_matching))){
return;
};
if ((((m_prev_tile_x == -1)) || ((m_selectionRect == null)))){
return;
};
if ((((m_selectionRect.width == 1)) && ((m_selectionRect.height == 1)))){
return;
};
finalizeMove();
resetSelectionIndicators();
}
private function createRemovalSprite():void{
m_removalSprite = new Sprite();
addChild(m_removalSprite);
m_removalSprite.x = m_blockSprite.x;
m_removalSprite.y = m_blockSprite.y;
m_removalSprite.mouseEnabled = false;
m_removalSprite.mouseChildren = false;
}
private function isLegalMove(a_rect:Rectangle):Boolean{
return (isCornerMatch(a_rect));
}
private function applyCrossBlock(a_x:int, a_y:int):void{
SoundManager.s_linePowerUpEffect.play();
var paintColor:int = RandomUtils.RandomInt(0, (missionIndex() - 1));
removeBlock(a_x, a_y);
addExplosionAt(a_x, a_y);
addBlockAt(new ColorBlock(paintColor), a_x, a_y);
paintRow(a_x, a_y, paintColor);
paintColumn(a_x, a_y, paintColor);
depthSortBlocks();
}
private function finalizeMove():void{
var d:Number;
m_arcLoop.stopLoop();
if (!isLegalMove(m_selectionRect)){
m_selectionRect = null;
resetSelectionIndicators();
SoundManager.s_cancelMoveEffect.play();
return;
};
if ((((m_selectionRect.width == m_boardWidth)) && ((m_selectionRect.height == m_boardHeight)))){
m_safeCrowdControlCount.val = (m_safeCrowdControlCount.val + 1);
m_main.updateMaxStat(Main.ccMaxCrowdControls, m_safeCrowdControlCount.val);
crowdControlMessage();
};
m_matching = true;
d = animateRemoval(m_selectionRect, 0, 0);
Tweener.addTween(this, {delay:d, onComplete:function ():void{
m_matching = false;
if (m_timerSprite.timeRemaining >= m_curMaxTime){
setLevel((m_level.val + 1));
endLevel();
} else {
SoundManager.s_surgeSound.play();
removeAndReplace(m_selectionRect);
if (d > 0.5){
addRandomBonusBlock(m_selectionRect);
};
};
m_selectionRect = null;
resetSelectionIndicators();
}});
}
private function applyBombBlock(a_x:int, a_y:int):void{
var j:int;
var b:ColorBlock;
SoundManager.s_explosionEffect.play();
var ob:Block = randomBlock();
while (!((ob is ColorBlock))) {
ob = randomBlock();
};
var orig_index:int = (ob as ColorBlock).index;
var i:int;
while (i < m_boardWidth) {
j = 0;
while (j < m_boardHeight) {
if ((m_columns[i][j] is ColorBlock)){
b = m_columns[i][j];
if (b.index == orig_index){
removeBlock(i, j, ((i * 0.025) + (j * 0.025)));
addExplosionAt(i, j, ((i * 0.025) + (j * 0.025)));
addBlockAt(blockFromLevel(), i, j);
};
};
j++;
};
i++;
};
removeBlock(a_x, a_y);
addExplosionAt(a_x, a_y);
addBlockAt(blockFromLevel(), a_x, a_y);
depthSortBlocks();
}
private function startLevel():void{
newMission();
m_timeInLevel = 0;
m_columns = new Array(m_boardWidth);
var i:int;
while (i < m_boardWidth) {
m_columns[i] = new Array(m_boardHeight);
i++;
};
fillEmptySpaces();
m_prev_tile_x = -1;
m_prev_tile_y = -1;
destroySelectionSprite();
levelUpMessage();
if (((!(m_seenLevelUpTutorial)) && ((m_level.val == 2)))){
m_seenLevelUpTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutLevel, true);
push_tutorial(new AssetManager.HowToLevelUpPNG());
};
m_leveling = false;
createTimer();
Tweener.addTween(m_timerSprite, {timeRemaining:(m_curMaxTime * 0.4), time:1.5, transition:"easeOutQuad", onUpdate:m_timerSprite.updateBar});
}
private function removeOneRect(a_rect:Rectangle, a_soundIndex:int):void{
var sound_index:int = Math.min(a_soundIndex, (SoundManager.s_clearSounds.length - 1));
SoundManager.s_clearSounds[sound_index].play();
if (m_mission != null){
m_mission.update(m_columns, a_rect);
if (m_mission.isComplete){
missionSuccess();
SoundManager.s_bonusAchievedEffect.play();
};
};
var s:Sprite = new Sprite();
var cb:ColorBlock = getMatchColorBlock(a_rect, m_columns);
s.graphics.beginFill(((cb == null)) ? 0xFFFFFF : cb.matchColor, 1);
s.graphics.drawRect(0, 0, tilePxX(a_rect.width), (tilePxY(a_rect.height) + c_smushFactor));
s.graphics.endFill();
m_background.addChild(s);
s.x = tilePxX(a_rect.x);
s.y = tilePxY(a_rect.y);
Tweener.addTween(s, {alpha:0.15, time:0.5, transition:"easeOutQuad", onComplete:Tweens.removeOnComplete});
scoreMove(a_rect);
m_timerSprite.timeRemaining = (m_timerSprite.timeRemaining + (500 * (a_soundIndex + 1)));
}
private function setLevel(a_level:int):void{
m_level.val = a_level;
m_levelLabel.text = ("" + m_level.val);
}
private function createFxSprite():void{
var mask:Sprite = new Sprite();
mask.graphics.beginFill(0);
mask.graphics.drawRect(0, 0, m_background.width, m_background.height);
mask.graphics.endFill();
addChild(mask);
mask.x = m_background.x;
mask.y = m_background.y;
m_fxSprite = new Sprite();
addChild(m_fxSprite);
m_fxSprite.mask = mask;
m_fxSprite.x = m_blockSprite.x;
m_fxSprite.y = m_blockSprite.y;
m_fxSprite.mouseEnabled = false;
m_fxSprite.mouseChildren = false;
}
private function fillEmptySpaces():void{
var k:uint;
var i:uint;
while (i < m_columns.length) {
k = 0;
while (k < m_columns[i].length) {
if (m_columns[i][k] == null){
addBlockAt(blockFromLevel(), i, k);
};
k++;
};
i++;
};
depthSortBlocks();
}
private function paintColumn(a_x:int, a_y:int, a_index:int):void{
var up:int;
var down:int;
var d = 1;
while (d < m_boardWidth) {
up = (a_y - d);
down = (a_y + d);
if (up >= 0){
removeBlock(a_x, up, (d * 0.05));
addExplosionAt(a_x, up, (d * 0.05));
addBlockAt(new ColorBlock(a_index), a_x, up);
};
if (down < m_boardHeight){
removeBlock(a_x, down, (d * 0.05));
addExplosionAt(a_x, down, (d * 0.05));
addBlockAt(new ColorBlock(a_index), a_x, down);
};
d++;
};
}
private function removeExistingMission():void{
if (m_mission != null){
Tweener.addTween(m_mission, {alpha:0.2, delay:0.25, time:0.75, transition:"linear"});
Tweener.addTween(m_mission, {scaleX:2, scaleY:2, x:(m_mission.x - (m_mission.width / 2)), y:(m_mission.y - (m_mission.height / 2)), time:1, transition:"linear", onComplete:Tweens.removeOnComplete});
};
}
private function findListMatchesInside(a_rect:Rectangle, a_list:Array):Array{
var a_rect = a_rect;
var a_list = a_list;
return (a_list.filter(function (r:Rectangle, index:int, array:Array):Boolean{
return (((!(a_rect.equals(r))) && (a_rect.containsRect(r))));
}));
}
private function show_tutorial(a_bmp:Bitmap):void{
var black:Sprite;
var btn:RegularButton;
var a_bmp = a_bmp;
m_showingTutorial = true;
black = new Sprite();
black.graphics.beginFill(0, 1);
black.graphics.drawRect(0, 0, width, height);
black.graphics.endFill();
black.alpha = 0.7;
addChild(black);
pause();
addChild(a_bmp);
a_bmp.x = ((640 - a_bmp.width) / 2);
a_bmp.y = 150;
btn = new RegularButton(AssetManager.ContinueButtonPNG);
addChild(btn);
btn.x = ((640 - btn.width) / 2);
btn.y = (a_bmp.getBounds(this).bottom + 2);
var rem:Function = function (a_event:MouseEvent):void{
removeChild(black);
removeChild(a_bmp);
removeChild(btn);
Tweener.removeTweens(black);
unpause();
m_showingTutorial = false;
};
btn.addEventListener(MouseEvent.CLICK, rem);
}
private function applyRowBlock(a_x:int, a_y:int):void{
SoundManager.s_linePowerUpEffect.play();
var paintColor:int = RandomUtils.RandomInt(0, (missionIndex() - 1));
removeBlock(a_x, a_y);
addExplosionAt(a_x, a_y);
addBlockAt(new ColorBlock(paintColor), a_x, a_y);
paintRow(a_x, a_y, paintColor);
depthSortBlocks();
}
private function endLevel():void{
var j:int;
var t:Number;
flashScreen();
destroyTimer();
m_curMaxTime = (m_curMaxTime * c_timeFactor);
m_curBonusTime = (m_curBonusTime * c_timeFactor);
m_leveling = true;
var i:int;
while (i < m_boardWidth) {
j = 0;
while (j < m_boardHeight) {
t = (Math.random() * 2);
addExplosionAt(i, j, t);
removeBlock(i, j, t);
if (Math.random() < 0.05){
Tweener.addTween(this, {time:t, onComplete:function ():void{
SoundManager.s_explosionEffect.play();
}});
};
j = (j + 1);
};
i = (i + 1);
};
Tweener.addTween(this, {delay:1.8, time:0.5, transition:"linear", onComplete:function ():void{
SoundManager.s_levelUpEffect.play();
startLevel();
}});
}
private function destroyTimer():void{
if (m_timerSprite != null){
Tweener.addTween(m_timerSprite, {alpha:0, transition:"linear", time:1, onComplete:Tweens.removeOnComplete});
};
}
private function applyMorphBlock(a_event:Event):void{
var j:int;
var b:ColorBlock;
if (((((m_paused) || (m_matching))) || (m_leveling))){
return;
};
SoundManager.s_radarPowerUpEffect.play();
var sb:SmartBomb = (a_event.target as SmartBomb);
if (sb.buttonMode){
sb.removeEventListener(MouseEvent.CLICK, applyMorphBlock);
m_interface.removeChild(sb);
m_fx.removeEntity(sb);
m_bombs.splice(m_bombs.indexOf(sb), 1);
};
updateBombs();
var ob:Block = randomBlock();
while (!((ob is ColorBlock))) {
ob = randomBlock();
};
var orig_index:int = (ob as ColorBlock).index;
var new_index:int = RandomUtils.RandomInt(0, (missionIndex() - 1));
while (new_index == orig_index) {
new_index = RandomUtils.RandomInt(0, (missionIndex() - 1));
};
var i:int;
while (i < m_boardWidth) {
j = 0;
while (j < m_boardHeight) {
if ((m_columns[i][j] is ColorBlock)){
b = m_columns[i][j];
if (b.index == orig_index){
removeBlock(i, j, ((i * 0.025) + (j * 0.025)));
addExplosionAt(i, j, ((i * 0.025) + (j * 0.025)));
addBlockAt(new ColorBlock(new_index), i, j);
};
};
j++;
};
i++;
};
depthSortBlocks();
}
private function removeBlock(a_tileX:int, a_tileY:int, a_delay:Number=0):void{
var b:Block;
var a_tileX = a_tileX;
var a_tileY = a_tileY;
var a_delay = a_delay;
b = (m_columns[a_tileX][a_tileY] as Block);
m_columns[a_tileX][a_tileY] = null;
var r:Rectangle = b.getBounds(m_blockSprite);
b.unregisterEvents();
m_blockSprite.removeChild(b);
m_removalSprite.addChild(b);
b.x = r.left;
b.y = r.top;
if ((((b is ColorBlock)) || ((b is WildCardBlock)))){
b.filters = [];
Tweener.addTween(b, {delay:a_delay, onStart:function ():void{
b.onComplete = removeOnComplete(b);
b.playAnimation("death");
}});
m_botBuffer = (m_botBuffer + 1);
} else {
Tweener.addTween(b, {scaleX:0.2, scaleY:1.5, x:(b.x + (Block.s_blockSize * 0.4)), y:(b.y - (Block.s_blockSize * 0.75)), delay:a_delay, time:0.5, transition:"easeOutQuad", onComplete:removeOnComplete(b)});
};
}
private function findBoardMatchesInside(a_rect:Rectangle, a_allowSelf:Boolean=false):Array{
var top:int;
var width:int;
var height:int;
var candidate:Rectangle;
var r:Rectangle = a_rect;
var ret:Array = new Array();
var left:int = r.x;
while (left < (r.x + r.width)) {
top = r.y;
while (top < (r.y + r.height)) {
width = 2;
while (((left + width) - 1) < (r.x + r.width)) {
height = 2;
while (((top + height) - 1) < (r.y + r.height)) {
candidate = new Rectangle(left, top, width, height);
if (((((a_allowSelf) || (!(candidate.equals(a_rect))))) && (isCornerMatch(candidate)))){
ret.push(candidate);
};
height++;
};
width++;
};
top++;
};
left++;
};
return (ret);
}
private function removeAndReplace(a_rect:Rectangle):void{
var j:uint;
var b:Block;
var i:uint;
while (i < a_rect.width) {
j = 0;
while (j < a_rect.height) {
b = m_columns[(i + a_rect.x)][(j + a_rect.y)];
if ((((b == null)) || (((!((b is WildCardBlock))) && (!((b is ColorBlock))))))){
} else {
removeBlock((i + a_rect.x), (j + a_rect.y));
m_columns[(i + a_rect.x)][(j + a_rect.y)] = null;
};
j++;
};
i++;
};
fillEmptySpaces();
}
private function scoreMove(a_rect:Rectangle):void{
var score:int;
var sl:ScoreLabel;
var penalty:Number = Math.max(-1, (1 - (0.1 * Math.floor((m_timeInLevel / c_penaltyInterval)))));
if (penalty > 0){
score = calculateScore(a_rect);
score = (score * m_level.val);
score = (score * penalty);
m_score.score = (m_score.score + score);
sl = new ScoreLabel(score);
m_interface.addChild(sl);
sl.x = ((m_blockSprite.getBounds(m_interface).left + tilePxX(a_rect.x)) + (tilePxX(a_rect.width) / 2));
sl.y = ((m_blockSprite.getBounds(m_interface).top + tilePxY(a_rect.y)) + (tilePxY(a_rect.height) / 2));
Tweener.addTween(sl, {y:(sl.y - 100), time:1, transition:"linear"});
Tweener.addTween(sl, {alpha:0.3, time:0.5, delay:0.25, transition:"linear", onComplete:Tweens.removeOnComplete});
};
}
private function flashScreen():void{
var f:Sprite = new Sprite();
f.graphics.beginFill(0xFFFFFF);
f.graphics.drawRect(0, 0, 640, 480);
f.graphics.endFill();
addChild(f);
Tweener.addTween(f, {alpha:0, time:0.2, transition:"easeInQuad", onComplete:Tweens.removeOnComplete});
}
private function createBgSprite():void{
m_background = new Sprite();
m_background.graphics.beginBitmapFill(AssetManager.BackgroundBitmap.bitmapData);
m_background.graphics.drawRect(0, 0, tilePxX(m_boardWidth), ((tilePxY(m_boardHeight) + c_smushFactor) + 4));
m_background.graphics.endFill();
m_background.x = ((640 - tilePxX(m_boardWidth)) - 22);
addChild(m_background);
}
private function randomBlock():Block{
var r_x:int = RandomUtils.RandomInt(0, (m_boardWidth - 1));
var r_y:int = RandomUtils.RandomInt(0, (m_boardHeight - 1));
return (m_columns[r_x][r_y]);
}
private function difficultyFromLevel():int{
return (((m_level.val / 3) + 1));
}
private function addRandomBonusBlock(a_rect:Rectangle):void{
if (!m_seenPowerUpTutorial){
m_seenPowerUpTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutPower, true);
push_tutorial(new AssetManager.HowToPowerUpPNG());
};
var x:int = RandomUtils.RandomInt(a_rect.x, ((a_rect.x + a_rect.width) - 1));
var y:int = RandomUtils.RandomInt(a_rect.y, ((a_rect.y + a_rect.height) - 1));
removeBlock(x, y);
var bonusType:Class = RandomUtils.RandomSelection(s_bonusTypes);
var b:Block = new (bonusType);
b.registerToolTips(m_toolTips);
addBlockAt(b, x, y);
depthSortBlocks();
}
private function paintRow(a_x:int, a_y:int, a_index:int):void{
var left:int;
var right:int;
var d = 1;
while (d < m_boardWidth) {
left = (a_x - d);
right = (a_x + d);
if (left >= 0){
removeBlock(left, a_y, (d * 0.05));
addExplosionAt(left, a_y, (d * 0.05));
addBlockAt(new ColorBlock(a_index), left, a_y);
};
if (right < m_boardWidth){
removeBlock(right, a_y, (d * 0.05));
addExplosionAt(right, a_y, (d * 0.05));
addBlockAt(new ColorBlock(a_index), right, a_y);
};
d++;
};
}
private function createInterface():void{
var b:SmartBomb;
var sponsorButton:RegularButton;
m_timerContainer = new Sprite();
addChild(m_timerContainer);
m_interface = new Sprite();
m_interface.mouseEnabled = false;
m_interface.addChild(new AssetManager.InGameOverlayPNG());
addChild(m_interface);
m_toolTips = new Sprite();
m_toolTips.mouseEnabled = false;
addChild(m_toolTips);
createScore();
m_bombs = new Array();
var num_usable = 3;
if (SponsorSingleton.instance.isStolen(stage)){
num_usable = 1;
};
var i:int;
while (i < 3) {
b = new SmartBomb((i < num_usable));
m_bombs.push(b);
m_interface.addChild(b);
m_fx.addEntity(b);
b.registerToolTips(m_toolTips);
b.tick((i * 100));
if (b.usable){
b.addEventListener(MouseEvent.CLICK, applyMorphBlock);
} else {
b.addEventListener(MouseEvent.MOUSE_DOWN, SponsorSingleton.instance.goToSponsorSite);
};
i = (i + 1);
};
updateBombs();
if (SponsorSingleton.instance.isStolen(stage)){
sponsorButton = SponsorSingleton.instance.createInGameButton();
m_interface.addChild(sponsorButton);
sponsorButton.y = (m_bombs[0].getBounds(m_interface).bottom + 2);
};
var pauseButton:RegularButton = new RegularButton(AssetManager.PauseButtonPNG);
m_interface.addChild(pauseButton);
pauseButton.x = 1;
pauseButton.y = 338;
pauseButton.height = 28;
pauseButton.width = 90;
pauseButton.addEventListener(MouseEvent.CLICK, function (a_event:Event):void{
togglePause();
});
var pause_msg:CustomTextField = new CustomTextField("PAUSED", 0, 48, true);
m_pauseSprite = new Sprite();
m_pauseSprite.mouseEnabled = false;
m_pauseSprite.mouseChildren = false;
m_pauseSprite.graphics.beginFill(0);
m_pauseSprite.graphics.drawRect(0, 0, m_background.width, m_background.height);
m_pauseSprite.graphics.endFill();
m_fxSprite.addChild(m_pauseSprite);
m_pauseSprite.addChild(pause_msg);
pause_msg.x = ((m_background.width - pause_msg.width) / 2);
pause_msg.y = ((m_background.height - pause_msg.height) / 2);
m_pauseSprite.visible = false;
}
private function missionIndex():int{
var difficulty:int = difficultyFromLevel();
if (difficulty < 4){
return (3);
};
if (difficulty < 6){
return (4);
};
return (5);
}
private function createTimer():void{
m_timerSprite = new TimerBar(m_curMaxTime, 20, 480, 0);
m_timerSprite.timeRemaining = 1000;
m_timerContainer.addChild(m_timerSprite);
m_timerSprite.x = (640 - m_timerSprite.width);
m_waveTime = c_waveTime;
m_waveIndex = 0;
m_kongStatTime = c_kongStatTime;
}
private function applyColumnBlock(a_x:int, a_y:int):void{
SoundManager.s_linePowerUpEffect.play();
var paintColor:int = RandomUtils.RandomInt(0, (missionIndex() - 1));
removeBlock(a_x, a_y);
addExplosionAt(a_x, a_y);
addBlockAt(new ColorBlock(paintColor), a_x, a_y);
paintColumn(a_x, a_y, paintColor);
depthSortBlocks();
}
private function tick(a_event:Event):void{
var a_event = a_event;
var deltaTime:int = m_deltaTimer.calculateDeltaTime();
m_blocks.tick(deltaTime);
m_fx.tick(deltaTime);
if (((((m_paused) || (m_showingTutorial))) || (m_leveling))){
return;
};
if ((((m_tutorialQueue.length > 0)) && (!(m_showingTutorial)))){
show_tutorial(m_tutorialQueue.shift());
};
if (m_timerSprite.timeRemaining < m_curMaxTime){
m_timerSprite.updateTime(deltaTime);
} else {
m_timerSprite.updateTime(0);
};
m_waveTime = (m_waveTime - deltaTime);
m_timeInLevel = (m_timeInLevel + deltaTime);
m_kongStatTime = (m_kongStatTime - deltaTime);
if ((((Tweener.getTweenCount(m_timerSprite) == 0)) && ((m_timerSprite.timeRemaining < (m_curMaxTime * 0.2))))){
if (!m_seenLowTimeTutorial){
m_seenLowTimeTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutTime, true);
Tweener.addTween(m_blockSprite, {time:1, onComplete:function ():void{
push_tutorial(new AssetManager.HowToLowTimePNG());
}});
};
};
if (Tweener.getTweenCount(m_timerSprite) == 0){
if (((((m_bgLoop.playing) && (!(m_warningLoop.playing)))) && ((m_timerSprite.timeRemaining < (m_curMaxTime * 0.2))))){
Tweener.removeTweens(m_bgLoop);
Tweener.removeTweens(m_warningLoop);
Tweener.addTween(m_bgLoop, {volume:0, time:0.75, transition:"linear", onComplete:m_bgLoop.stopLoop});
m_warningLoop.startLoop();
m_warningLoop.volume = 0;
Tweener.addTween(m_warningLoop, {volume:1, time:0.75, transition:"linear"});
};
if (((((m_warningLoop.playing) && (!(m_bgLoop.playing)))) && ((m_timerSprite.timeRemaining >= (m_curMaxTime * 0.2))))){
Tweener.removeTweens(m_bgLoop);
Tweener.removeTweens(m_warningLoop);
Tweener.addTween(m_warningLoop, {volume:0, time:0.75, transition:"linear", onComplete:m_warningLoop.stopLoop});
m_bgLoop.startLoop();
m_bgLoop.volume = 0;
Tweener.addTween(m_bgLoop, {volume:1, time:0.75, transition:"linear"});
};
};
if (m_botBuffer > 0){
m_safeBotCount.val = (m_safeBotCount.val + m_botBuffer);
m_main.updateMaxStat(Main.ccMaxBotsPerGame, m_safeBotCount.val);
m_botBuffer = 0;
};
if (m_timerSprite.timeRemaining < 0){
gameOver();
};
if (m_waveTime < 0){
m_waveTime = c_waveTime;
if (!m_leveling){
blockWave();
};
};
if (m_kongStatTime < 0){
m_kongStatTime = c_kongStatTime;
m_main.submitAllKongStats();
};
if (m_selectionMgr != null){
m_selectionMgr.update(deltaTime);
};
updateTimeDisplay();
}
private function updateTimeDisplay():void{
m_timerSprite.updateBar();
}
private function applyBiggestBlock(a_x:int, a_y:int):void{
SoundManager.s_radarPowerUpEffect.play();
removeBlock(a_x, a_y);
addExplosionAt(a_x, a_y);
addBlockAt(blockFromLevel(), a_x, a_y);
var r:Rectangle = new Rectangle(0, 0, m_boardWidth, m_boardHeight);
m_selectionRect = findLargestRectangle(findBoardMatchesInside(r, true));
finalizeMove();
resetSelectionIndicators();
}
private function updateSelection(a_rect:Rectangle):void{
var xoff:int;
var yoff:int;
var b:Block;
if (((!((m_selectionRect == null))) && (a_rect.equals(m_selectionRect)))){
return;
};
m_selectionRect = a_rect;
destroySelectionSprite();
createSelectionSprite(a_rect);
if (isCornerMatch(a_rect)){
xoff = 0;
while (xoff < a_rect.width) {
yoff = 0;
while (yoff < a_rect.height) {
b = (m_columns[(a_rect.left + xoff)][(a_rect.top + yoff)] as Block);
b.filters = [new GlowFilter(0xEEEEEE, 0.4, 64, 64, 2, 1, true)];
yoff++;
};
xoff++;
};
};
}
private function addBlockAt(a_block:Block, tile_x:uint, tile_y:uint):void{
var b:Block = a_block;
m_columns[tile_x][tile_y] = b;
m_blockSprite.addChildAt(b, 0);
b.registerEvents(this, tile_x, tile_y);
b.x = tilePxX(tile_x);
b.y = tilePxY(tile_y);
b.alpha = 0;
m_blocks.addEntity(b);
Tweener.addTween(b, {alpha:1, time:0.5, delay:0.8, transition:"linear"});
}
private function newMission():void{
removeExistingMission();
var missionClass:Class = RandomUtils.RandomSelection(s_missionTypes);
m_mission = new missionClass(missionIndex());
m_mission.x = 0;
m_mission.alpha = 0;
m_missionBoxPlaceholder.addChild(m_mission);
Tweener.addTween(m_mission, {alpha:1, delay:0.3, time:0.7, transition:"linear"});
m_mission.registerToolTips(m_toolTips);
}
private function updateBombs():void{
var b:SmartBomb;
var y = 120;
var x_off = 2;
var throbber:Function = function (a_bomb:SmartBomb):Function{
var expand:Boolean;
var f:Function;
var a_bomb = a_bomb;
expand = true;
f = function ():void{
var scl:Number;
var off:int;
var trans:String;
if (a_bomb.stage != null){
scl = 1.2;
off = -3;
trans = "easeInQuad";
expand = !(expand);
if (expand){
scl = 1;
off = 3;
trans = "easeOutQuad";
};
Tweener.addTween(a_bomb, {x:(a_bomb.x + off), y:(a_bomb.y + off), scaleX:scl, scaleY:scl, time:0.5, transition:trans, onComplete:f});
};
};
return (f);
};
var i:int;
while (i < m_bombs.length) {
b = (m_bombs[i] as SmartBomb);
b.x = (x_off + (28 * i));
b.y = y;
if (Tweener.getTweenCount(b) != 1){
throbber(b)();
};
i = (i + 1);
};
}
private function animateRemoval(a_rect:Rectangle, a_delay:Number, a_soundIndex:int, a_rect_list:Array=null):Number{
var matches:Array;
var sub:Rectangle;
var recursive_delay:Number;
var a_rect = a_rect;
var a_delay = a_delay;
var a_soundIndex = a_soundIndex;
var a_rect_list = a_rect_list;
var d:Number = a_delay;
Tweener.addTween(this, {delay:d, onComplete:function ():void{
removeOneRect(a_rect, a_soundIndex);
}});
if (a_rect_list == null){
matches = findBoardMatchesInside(a_rect);
} else {
matches = findListMatchesInside(a_rect, a_rect_list);
};
if (matches.length > 0){
sub = findLargestRectangle(matches);
if ((sub.width * sub.height) >= ((a_rect.width * a_rect.height) * 0.5)){
recursive_delay = animateRemoval(sub, (d + 0.25), (a_soundIndex + 1), matches);
d = recursive_delay;
};
};
return (d);
}
private function findLargestRectangle(a_array:Array):Rectangle{
var biggest:Array;
var r:Rectangle;
var area:int;
var biggest_area = -1;
for each (r in a_array) {
area = (r.width * r.height);
if (area > biggest_area){
biggest = new Array();
biggest_area = area;
};
if (area == biggest_area){
biggest.push(r);
};
};
return (RandomUtils.RandomSelection(biggest));
}
private function addExplosionAt(tile_x:int, tile_y:int, a_delay:Number=0):void{
var e:Explosion;
var tile_x = tile_x;
var tile_y = tile_y;
var a_delay = a_delay;
e = new Explosion();
e.x = (tilePxX(tile_x) - ((e.width - Block.s_blockSize) / 2));
e.y = (((tilePxY(tile_y) + Block.s_blockSize) - Explosion.s_explosionHeight) + 7);
Tweener.addTween(e, {delay:a_delay, time:0.5, transition:"linear", onStart:function ():void{
m_fxSprite.addChild(e);
m_fx.addEntity(e);
e.onComplete = removeOnComplete(e);
}});
}
private function missionSuccess():void{
m_timerSprite.timeRemaining = (m_timerSprite.timeRemaining + m_curBonusTime);
m_safeBonusCount.val = (m_safeBonusCount.val + 1);
m_main.updateMaxStat(Main.ccMaxBonuses, m_safeBonusCount.val);
if (!m_seenBonusTutorial){
m_seenBonusTutorial = true;
Main.s_safeSolManager.writeBool(Main.tutBonus, true);
push_tutorial(new AssetManager.HowToBonusPNG());
};
newMission();
}
private function createMissionSprite():void{
m_missionBoxPlaceholder = new Sprite();
m_interface.addChild(m_missionBoxPlaceholder);
m_missionBoxPlaceholder.x = 0;
m_missionBoxPlaceholder.y = 35;
}
private function push_tutorial(a_bmp:Bitmap):void{
m_tutorialQueue.push(a_bmp);
}
private function isCornerMatch(a_rect:Rectangle):Boolean{
var block:ColorBlock;
var y:int;
var b:Block;
if ((((a_rect.width < 2)) || ((a_rect.height < 2)))){
return (false);
};
var blocks:Array = new Array();
var x:int;
while (x < 2) {
y = 0;
while (y < 2) {
b = m_columns[(a_rect.x + (x * (a_rect.width - 1)))][(a_rect.y + (y * (a_rect.height - 1)))];
if ((b is WildCardBlock)){
} else {
if ((b is ColorBlock)){
blocks.push(b);
} else {
return (false);
};
};
y++;
};
x++;
};
if (blocks.length == 0){
return (true);
};
var first:ColorBlock = blocks[0];
for each (block in blocks) {
if (!first.equals(block)){
return (false);
};
};
return (true);
}
private function levelUpMessage():void{
var l:CustomTextField = new CustomTextField(("LEVEL " + m_level.val), 0, 70);
l.filters = [new GlowFilter(0xFFFFFF, 1, 4, 4, 4)];
l.background = false;
l.x = (320 - (l.width / 2));
l.y = 480;
addChild(l);
Tweener.addTween(l, {y:(240 - (l.height / 2)), time:1, transition:"easeOutExpo"});
Tweener.addTween(l, {y:-(l.height), time:1, delay:1, transition:"easeInExpo", onComplete:Tweens.removeOnComplete});
}
private function createSelectionSprite(a_rect:Rectangle):void{
m_selectionMgr = new SelectionManager(a_rect, tilePxX, tilePxY, m_selectionOverBlocks);
}
private function blockFromLevel():ColorBlock{
var difficulty:int = difficultyFromLevel();
if (difficulty == 1){
return (BlockGenerator.generateRandomColorBlock(4, 0));
};
if (difficulty == 2){
return (BlockGenerator.generateRandomColorBlock(4, 0.05));
};
if (difficulty == 3){
return (BlockGenerator.generateRandomColorBlock(4, 0.15));
};
if (difficulty == 4){
return (BlockGenerator.generateRandomColorBlock(5, 0));
};
if (difficulty == 5){
return (BlockGenerator.generateRandomColorBlock(5, 0.05));
};
return (BlockGenerator.generateRandomColorBlock(6));
}
private function gameOver():void{
m_bgLoop.stopLoop();
m_warningLoop.stopLoop();
m_arcLoop.stopLoop();
SoundManager.s_gameOverSound.play();
removeEventListener(Event.ENTER_FRAME, tick);
m_main.createResults(m_level.val, m_score.score);
}
private function createScore():void{
m_score = new ScoreDisplay();
m_interface.addChild(m_score);
m_score.y = (480 - m_score.height);
m_levelLabel = new CustomTextField("", 0, 22);
m_interface.addChild(m_levelLabel);
m_levelLabel.background = false;
m_levelLabel.y = 393;
setLevel((m_level.val + 1));
}
private function calculateScore(a_rect:Rectangle):int{
var j:uint;
var b:Block;
var score:int = (a_rect.width * a_rect.height);
if (a_rect.width > a_rect.height){
score = (score * a_rect.height);
} else {
score = (score * a_rect.width);
};
var multiplier:int;
var i:uint;
while (i < a_rect.width) {
j = 0;
while (j < a_rect.height) {
b = m_columns[(i + a_rect.x)][(j + a_rect.y)];
if ((b is WildCardBlock)){
multiplier = (multiplier + 5);
};
j++;
};
i++;
};
score = (score * Math.max(1, multiplier));
return (score);
}
private function pause():void{
Tweener.pauseAllTweens();
m_paused = true;
m_pauseSprite.visible = true;
m_blockSprite.mouseChildren = false;
}
public function mouseDown(a_tileX:int, a_tileY:int):void{
var c_x:int;
var c_y:int;
var clicked_block:Block;
if (((m_leveling) || (m_matching))){
return;
};
if (m_prev_tile_x == -1){
c_x = a_tileX;
c_y = a_tileY;
clicked_block = m_columns[c_x][c_y];
if (!(clicked_block is ColorBlock)){
m_safePowerUpCount.val = (m_safePowerUpCount.val + 1);
m_main.updateMaxStat(Main.ccMaxPowerUps, m_safePowerUpCount.val);
};
if ((clicked_block is CrossBlock)){
applyCrossBlock(c_x, c_y);
return;
};
if ((clicked_block is RowBlock)){
applyRowBlock(c_x, c_y);
return;
};
if ((clicked_block is ColumnBlock)){
applyColumnBlock(c_x, c_y);
return;
};
if ((clicked_block is MorphBlock)){
applyBombBlock(c_x, c_y);
return;
};
if ((clicked_block is BiggestBlock)){
applyBiggestBlock(c_x, c_y);
return;
};
m_prev_tile_x = a_tileX;
m_prev_tile_y = a_tileY;
mouseMove(a_tileX, a_tileY);
m_arcLoop.startLoop();
SoundManager.s_startMoveEffect.play();
return;
};
finalizeMove();
resetSelectionIndicators();
}
private static function tilePxY(a_tile:int):int{
return ((a_tile * (Block.s_blockSize - c_smushFactor)));
}
private static function tilePxX(a_tile:int):int{
return ((a_tile * Block.s_blockSize));
}
public static function getMatchColorBlock(a_rect:Rectangle, a_columns:Array):ColorBlock{
var y:int;
var b:Block;
var x:int;
while (x < 2) {
y = 0;
while (y < 2) {
b = a_columns[(a_rect.x + (x * (a_rect.width - 1)))][(a_rect.y + (y * (a_rect.height - 1)))];
if ((b is ColorBlock)){
return ((b as ColorBlock));
};
y++;
};
x++;
};
return (null);
}
}
}//package
Section 101
//CrowdControlLoop (CrowdControlLoop)
package {
import flash.media.*;
public dynamic class CrowdControlLoop extends Sound {
}
}//package
Section 102
//CustomTextField (CustomTextField)
package {
import flash.text.*;
import flash.filters.*;
public class CustomTextField extends TextField {
private static var filter:GlowFilter = new GlowFilter(0xFFFFFF, 0.7, 12, 12, 4);
public function CustomTextField(a_text:String="", a_color:uint=0, a_size:int=28, a_glow:Boolean=false, a_fontName:String="interfaceFont"){
super();
this.background = false;
this.backgroundColor = 0xFFFFFF;
this.autoSize = TextFieldAutoSize.LEFT;
this.multiline = true;
this.selectable = false;
this.embedFonts = true;
this.defaultTextFormat = new TextFormat(a_fontName, a_size, a_color, null, null, null, null, null, TextFormatAlign.CENTER);
this.text = a_text;
if (a_glow){
this.filters = [filter];
};
}
private function copyTextFormat():TextFormat{
var f:TextFormat = this.defaultTextFormat;
f = new TextFormat(f.font, f.size, f.color, f.bold, f.italic, f.underline, f.url, f.target, f.align, f.leftMargin, f.rightMargin, f.indent, f.leading);
return (f);
}
public function set leading(a_val:int):void{
var f:TextFormat = copyTextFormat();
f.leading = a_val;
this.defaultTextFormat = f;
}
public function center():void{
var f:TextFormat = copyTextFormat();
f.align = TextFormatAlign.CENTER;
this.defaultTextFormat = f;
}
}
}//package
Section 103
//DeltaTimer (DeltaTimer)
package {
import flash.utils.*;
public class DeltaTimer {
private var m_timeSinceLastTick:int;
public function DeltaTimer(){
super();
reset();
}
public function calculateDeltaTime():int{
var currentTime:int = getTimer();
var deltaTime:int = (currentTime - m_timeSinceLastTick);
m_timeSinceLastTick = currentTime;
return (deltaTime);
}
public function reset():void{
m_timeSinceLastTick = getTimer();
}
}
}//package
Section 104
//Effect11 (Effect11)
package {
import flash.media.*;
public dynamic class Effect11 extends Sound {
}
}//package
Section 105
//Effect13 (Effect13)
package {
import flash.media.*;
public dynamic class Effect13 extends Sound {
}
}//package
Section 106
//Effect15 (Effect15)
package {
import flash.media.*;
public dynamic class Effect15 extends Sound {
}
}//package
Section 107
//Effect17 (Effect17)
package {
import flash.media.*;
public dynamic class Effect17 extends Sound {
}
}//package
Section 108
//Effect19 (Effect19)
package {
import flash.media.*;
public dynamic class Effect19 extends Sound {
}
}//package
Section 109
//Effect7 (Effect7)
package {
import flash.media.*;
public dynamic class Effect7 extends Sound {
}
}//package
Section 110
//Effect9 (Effect9)
package {
import flash.media.*;
public dynamic class Effect9 extends Sound {
}
}//package
Section 111
//ElectricalArcLoop (ElectricalArcLoop)
package {
import flash.media.*;
public dynamic class ElectricalArcLoop extends Sound {
}
}//package
Section 112
//ElectricalSurgeEffect (ElectricalSurgeEffect)
package {
import flash.media.*;
public dynamic class ElectricalSurgeEffect extends Sound {
}
}//package
Section 113
//Explosion (Explosion)
package {
import com.urbansquall.ginger.*;
public class Explosion extends SpriteEntity {
private var m_player:AnimationPlayer;
private var m_onComplete:Function;
public static const s_explosionHeight:int = 96;
public static const s_explosionWidth:int = 56;
private static var s_id_counter:int = 0;
public function Explosion(){
super();
m_id = ("Explosion_" + s_id_counter);
s_id_counter = (s_id_counter + 1);
m_player = Animations.instance.instantiate("explosion");
addChild(m_player);
m_player.play("explode");
m_player.addEventListener(AnimationEvent.CHANGE, animationChange);
onComplete = null;
}
public function set onComplete(a_func:Function):void{
m_onComplete = a_func;
}
private function animationChange(a_event:AnimationEvent):void{
if (((((!(a_event.begin)) && ((a_event.animationID == "explode")))) && (!((m_onComplete == null))))){
m_player.removeEventListener(AnimationEvent.CHANGE, animationChange);
m_onComplete();
};
}
override public function tick(a_deltaTime:Number):void{
m_player.update(a_deltaTime);
}
}
}//package
Section 114
//ExplosionEffect (ExplosionEffect)
package {
import flash.media.*;
public dynamic class ExplosionEffect extends Sound {
}
}//package
Section 115
//GameOverEffect (GameOverEffect)
package {
import flash.media.*;
public dynamic class GameOverEffect extends Sound {
}
}//package
Section 116
//ISponsor (ISponsor)
package {
import flash.events.*;
import flash.display.*;
public interface ISponsor {
function isStolen(:Stage):Boolean;
function createInGameButton():RegularButton;
function createPreloader(a_stage:Stage):MovieClip;
function createTitleButton():RegularButton;
function goToSponsorSite(Boolean:Event=null):void;
}
}//package
Section 117
//KongregateSponsor (KongregateSponsor)
package {
import flash.events.*;
import flash.display.*;
import caurina.transitions.*;
import flash.net.*;
public class KongregateSponsor implements ISponsor {
public static const c_kongURL:String = "http://www.kongregate.com/games/urbansquall/robo-riot?gamereferral=robo-riot";
public function KongregateSponsor(){
super();
}
public function isStolen(a_stage:Stage):Boolean{
return (!((0 == a_stage.loaderInfo.url.indexOf("http://chat.kongregate.com"))));
}
public function createPreloader(a_stage:Stage):MovieClip{
var a_stage = a_stage;
var mc:MovieClip = new splash_kong();
if (isStolen(a_stage)){
mc.addEventListener(MouseEvent.CLICK, function ():void{
navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=robo-riot"), "_blank");
});
};
return (mc);
}
public function createInGameButton():RegularButton{
var button:RegularButton = new RegularButton(AssetManager.KongInGamePNG);
button.addEventListener(MouseEvent.MOUSE_DOWN, goToSponsorSite);
return (button);
}
public function goToSponsorSite(a_event:Event=null):void{
navigateToURL(new URLRequest(c_kongURL), "_blank");
}
public function createTitleButton():RegularButton{
var button:RegularButton;
var dir:int;
var complete:Function;
button = new RegularButton(AssetManager.KongTitlePNG);
button.addEventListener(MouseEvent.MOUSE_DOWN, goToSponsorSite);
dir = -7;
complete = function ():void{
dir = (dir * -1);
Tweener.addTween(button, {y:(button.y + dir), transition:"linear", time:1, onComplete:complete});
};
complete();
button.addEventListener(Event.REMOVED_FROM_STAGE, function ():void{
Tweener.removeTweens(button);
});
return (button);
}
}
}//package
Section 118
//LevelAchievedEffect (LevelAchievedEffect)
package {
import flash.media.*;
public dynamic class LevelAchievedEffect extends Sound {
}
}//package
Section 119
//LinePowerUp (LinePowerUp)
package {
import flash.media.*;
public dynamic class LinePowerUp extends Sound {
}
}//package
Section 120
//LoopingSound (LoopingSound)
package {
import flash.events.*;
import flash.media.*;
public class LoopingSound {
private var m_soundChannel:SoundChannel;
private var m_sound:Sound;
public function LoopingSound(a_sound:Sound){
super();
m_sound = a_sound;
m_soundChannel = null;
}
public function get playing():Boolean{
return (!((m_soundChannel == null)));
}
public function get volume():Number{
return (m_soundChannel.soundTransform.volume);
}
public function set volume(a_value:Number):void{
var transform:SoundTransform = m_soundChannel.soundTransform;
transform.volume = a_value;
m_soundChannel.soundTransform = transform;
}
public function startLoop():void{
m_soundChannel = m_sound.play(0, 100);
m_soundChannel.addEventListener(Event.SOUND_COMPLETE, soundComplete);
}
private function soundComplete(a_event:Event):void{
m_soundChannel.removeEventListener(Event.SOUND_COMPLETE, soundComplete);
m_soundChannel = m_sound.play(0, 100);
m_soundChannel.addEventListener(Event.SOUND_COMPLETE, soundComplete);
}
public function stopLoop():void{
if (m_soundChannel != null){
m_soundChannel.removeEventListener(Event.SOUND_COMPLETE, soundComplete);
m_soundChannel.stop();
m_soundChannel = null;
};
}
}
}//package
Section 121
//Main (Main)
package {
import flash.events.*;
import flash.display.*;
import flash.media.*;
import flash.ui.*;
import com.urbansquall.security.*;
import flash.net.*;
import caurina.transitions.*;
public dynamic class Main extends Sprite {
public var kongregate;
private var m_currentDisplay:DisplayObject;
private var m_toolTipContext:ContextMenuItem;
private var m_muted:Boolean;
private var m_uiLoop:LoopingSound;
private var m_dirtyStats:Boolean;
public static var tutTime:String = "seenLowTimeTutorial";
public static var assHighLevel:String = "assassinationHighLevel";
public static var ccHighLevel:String = "crowdControlHighLevel";
public static var tutBonus:String = "seenBonusTutorial";
public static var tutScore:String = "seenScoreTutorial";
public static var assHighScore:String = "assassinationHighScore";
public static var ccHighScore:String = "crowdControlHighScore";
public static var assMinInno:String = "assassinationMinInnocent";
public static var ccMaxBonuses:String = "ccMaxBonus";
public static var s_showToolTips:Boolean = true;
public static var gameName:String = "roboriot";
public static var ccMaxBotsPerGame:String = "ccMaxBots";
public static var toolTip:String = "showToolTips";
public static var muted:String = "muted";
public static var tutLevel:String = "seenLevelUpTutorial";
public static var tutPower:String = "seenPowerUpTutorial";
public static var s_safeSolManager:SafeSolManager;
public static var ccMaxPowerUps:String = "ccMaxPowerUps";
public static var tutAss:String = "seenAssassinationTutorial";
public static var ccMaxCrowdControls:String = "ccMaxCrowdControl";
public function Main():void{
super();
m_dirtyStats = true;
s_safeSolManager = new SafeSolManager(gameName, 5018373);
s_safeSolManager.createInt(ccHighScore, 0, true);
s_safeSolManager.createInt(ccHighLevel, 0, true);
s_safeSolManager.createInt(assHighScore, 0, true);
s_safeSolManager.createInt(assHighLevel, 0, true);
s_safeSolManager.createInt(ccMaxBonuses, 0, true);
s_safeSolManager.createInt(ccMaxBotsPerGame, 0, true);
s_safeSolManager.createInt(ccMaxCrowdControls, 0, true);
s_safeSolManager.createInt(ccMaxPowerUps, 0, true);
s_safeSolManager.createInt(assMinInno, 10000, true);
s_safeSolManager.createBool(toolTip, true);
s_safeSolManager.createBool(tutScore, false);
s_safeSolManager.createBool(tutPower, false);
s_safeSolManager.createBool(tutLevel, false);
s_safeSolManager.createBool(tutTime, false);
s_safeSolManager.createBool(tutBonus, false);
s_safeSolManager.createBool(tutAss, false);
s_safeSolManager.createBool(muted, false);
s_showToolTips = s_safeSolManager.readBool(toolTip);
m_uiLoop = new LoopingSound(SoundManager.s_uiLoop);
m_muted = s_safeSolManager.readBool(muted);
if (m_muted){
soundOff();
};
addEventListener(Event.ADDED_TO_STAGE, added);
}
public function added(a_event:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, added);
kongregate = null;
if (hostedOnKongregate()){
loadKongApi();
} else {
finishInit();
};
}
public function hostedOnKongregate():Boolean{
return ((((SponsorSingleton.instance is KongregateSponsor)) && (!(SponsorSingleton.instance.isStolen(stage)))));
}
private function finishInit():void{
var showMochi:Boolean;
if (showMochi){
MochiAd.showInterLevelAd({clip:this, id:"82ce5996ae5b3af2", res:"640x480", ad_started:startAd, ad_finished:finishAd});
} else {
finishAd();
};
}
public function createAssassinationGame():void{
if (m_uiLoop.playing){
m_uiLoop.stopLoop();
};
updateDisplay(new AssassinationGame(this));
}
public function submitKongStat(a_stat:String):void{
if (kongregate != null){
kongregate.stats.submit(a_stat, s_safeSolManager.readInt(a_stat));
};
}
private function toolTipCaption(a_val:Boolean):String{
var s:String = "ToolTips Off";
if (!s_showToolTips){
s = "ToolTips On";
};
return (s);
}
public function createCredits():void{
if (!m_uiLoop.playing){
m_uiLoop.startLoop();
};
updateDisplay(new CreditsScreen(this));
}
public function soundOn():void{
var t:SoundTransform = SoundMixer.soundTransform;
t.volume = 1;
SoundMixer.soundTransform = t;
}
public function updateMaxStat(a_stat:String, a_value:int):void{
var cur_val:int = s_safeSolManager.readInt(a_stat);
s_safeSolManager.writeInt(a_stat, Math.max(cur_val, a_value));
m_dirtyStats = (cur_val < a_value);
}
public function createContextMenu():void{
var myContextMenu:ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();
var mute:ContextMenuItem = new ContextMenuItem("Toggle Sound");
myContextMenu.customItems.push(mute);
mute.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, toggleSound);
m_toolTipContext = new ContextMenuItem(toolTipCaption(s_showToolTips));
myContextMenu.customItems.push(m_toolTipContext);
m_toolTipContext.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, toggleToolTips);
var reset:ContextMenuItem = new ContextMenuItem("Reset Tutorials");
myContextMenu.customItems.push(reset);
reset.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, resetTutorial);
this.contextMenu = myContextMenu;
}
private function finishAd():void{
createMainMenu();
createContextMenu();
}
public function submitAllKongStats(a_force:Boolean=false):void{
var a:Array;
var s:String;
if (((m_dirtyStats) || (a_force))){
a = new Array(ccHighLevel, ccHighScore, ccMaxBonuses, ccMaxBotsPerGame, ccMaxCrowdControls, ccMaxPowerUps, assHighScore, assHighLevel, assMinInno);
for each (s in a) {
submitKongStat(s);
};
m_dirtyStats = false;
};
}
public function createResults(a_level:int, a_score:int):void{
if (!m_uiLoop.playing){
m_uiLoop.startLoop();
};
updateDisplay(new ResultsScreen(a_level, a_score, this));
}
private function resetTutorial(a_event:ContextMenuEvent=null):void{
s_safeSolManager.writeBool(tutScore, false);
s_safeSolManager.writeBool(tutPower, false);
s_safeSolManager.writeBool(tutLevel, false);
s_safeSolManager.writeBool(tutTime, false);
s_safeSolManager.writeBool(tutBonus, false);
s_safeSolManager.writeBool(tutAss, false);
}
public function toggleSound(a_event:ContextMenuEvent=null):void{
if (m_muted){
soundOn();
m_muted = false;
} else {
soundOff();
m_muted = true;
};
s_safeSolManager.writeBool(muted, m_muted);
}
public function kongApiLoaded(a_event:Event=null):void{
kongregate = a_event.target.content;
kongregate.services.connect();
finishInit();
}
public function createMainMenu():void{
if (!m_uiLoop.playing){
m_uiLoop.startLoop();
};
updateDisplay(new MainMenu(this));
}
public function toggleToolTips(a_event:ContextMenuEvent=null):void{
s_showToolTips = !(s_showToolTips);
m_toolTipContext.caption = toolTipCaption(s_showToolTips);
s_safeSolManager.writeBool(toolTip, s_showToolTips);
}
private function startAd():void{
}
public function soundOff():void{
var t:SoundTransform = SoundMixer.soundTransform;
t.volume = 0;
SoundMixer.soundTransform = t;
}
public function createCrowdControlGame():void{
if (m_uiLoop.playing){
m_uiLoop.stopLoop();
};
updateDisplay(new CrowdControlGame(13, 14, this));
}
public function loadKongApi():void{
var paramObj:Object = LoaderInfo(root.loaderInfo).parameters;
var api_url:String = ((paramObj.api_path) || ("http://www.kongregate.com/flash/API_AS3_Local.swf"));
var request:URLRequest = new URLRequest(api_url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, kongApiLoaded);
loader.load(request);
this.addChild(loader);
}
private function updateDisplay(a_replacement:DisplayObject):void{
var speed:Number = 0.5;
var d:Number = 0;
if (m_currentDisplay != null){
d = speed;
Tweener.addTween(m_currentDisplay, {alpha:0, time:speed, transition:"linear", onComplete:Tweens.removeOnComplete});
};
m_currentDisplay = a_replacement;
m_currentDisplay.alpha = 0;
addChild(m_currentDisplay);
Tweener.addTween(m_currentDisplay, {alpha:1, delay:d, time:speed, transition:"linear"});
}
public function createAssassinationGameOver(a_level:int, a_score:int):void{
if (!m_uiLoop.playing){
m_uiLoop.startLoop();
};
updateDisplay(new AssassinationGameOver(a_level, a_score, this));
}
public function updateMinStat(a_stat:String, a_value:int):void{
var cur_val:int = s_safeSolManager.readInt(a_stat);
s_safeSolManager.writeInt(a_stat, Math.min(cur_val, a_value));
m_dirtyStats = (cur_val > a_value);
}
}
}//package
Section 122
//MainMenu (MainMenu)
package {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.net.*;
import flash.filters.*;
import caurina.transitions.*;
public class MainMenu extends Sprite {
private var m_main:Main;
private var m_assassinationButton:SimpleButton;
private var m_creditsButton:SimpleButton;
private var m_crowdControlButton:SimpleButton;
private var m_rightClick:CustomTextField;
public function MainMenu(a_main:Main){
super();
m_main = a_main;
addEventListener(Event.ADDED_TO_STAGE, added);
}
private function creditsButtonClick(a_event:Event):void{
m_main.createCredits();
}
private function createButtons():void{
var filter:GlowFilter = new GlowFilter(0xFFFFFF, 0.7, 12, 12, 4);
var btnSprite:Sprite = new Sprite();
var recordSize = 14;
m_crowdControlButton = new RegularButton(AssetManager.CrowdControlButtonPNG);
btnSprite.addChild(m_crowdControlButton);
m_crowdControlButton.addEventListener(MouseEvent.CLICK, crowdControlButtonClick);
m_assassinationButton = new RegularButton(AssetManager.AssassinationButtonPNG);
btnSprite.addChild(m_assassinationButton);
m_assassinationButton.x = (m_crowdControlButton.getBounds(btnSprite).right + 5);
if (SponsorSingleton.instance.isStolen(stage)){
m_assassinationButton.addEventListener(MouseEvent.MOUSE_DOWN, SponsorSingleton.instance.goToSponsorSite);
} else {
m_assassinationButton.addEventListener(MouseEvent.CLICK, assassinationButtonClick);
};
m_creditsButton = new RegularButton(AssetManager.CreditsButtonPNG);
m_creditsButton.x = m_crowdControlButton.x;
m_creditsButton.y = (m_crowdControlButton.getBounds(btnSprite).bottom + 2);
btnSprite.addChild(m_creditsButton);
m_creditsButton.addEventListener(MouseEvent.CLICK, creditsButtonClick);
var stealButton:RegularButton = new RegularButton(AssetManager.PutOnSiteButtonPNG);
stealButton.x = m_assassinationButton.x;
stealButton.y = (m_assassinationButton.getBounds(btnSprite).bottom + 2);
btnSprite.addChild(stealButton);
stealButton.addEventListener(MouseEvent.CLICK, stealButtonClick);
addChild(btnSprite);
btnSprite.x = (320 - (btnSprite.width / 2));
btnSprite.y = (m_rightClick.getBounds(this).top - btnSprite.height);
}
private function crowdControlButtonClick(a_event:Event):void{
m_main.createCrowdControlGame();
}
private function added(a_event:Event):void{
var color:Number;
var transform:ColorTransform;
var throb:Function;
var b:RegularButton;
var a_event = a_event;
removeEventListener(Event.ADDED_TO_STAGE, added);
addChild(new AssetManager.TitleBgPNG());
m_rightClick = new CustomTextField("Right Click to Change Settings", 0xFFFFFF, 20);
m_rightClick.filters = [new GlowFilter(0, 1, 12, 12, 4)];
addChild(m_rightClick);
m_rightClick.x = ((640 - m_rightClick.width) / 2);
m_rightClick.y = (480 - m_rightClick.height);
color = 0;
transform = new ColorTransform(1, 1, 1);
throb = function ():void{
if (stage != null){
if (color < 0.1){
color = 1;
} else {
color = 0;
};
Tweener.addTween(transform, {time:0.75, transition:"linear", greenMultiplier:color, blueMultiplier:color, onUpdate:function ():void{
m_rightClick.transform.colorTransform = transform;
}, onComplete:throb});
};
};
throb();
createButtons();
if (SponsorSingleton.instance.isStolen(stage)){
b = SponsorSingleton.instance.createTitleButton();
addChild(b);
b.x = (640 - b.width);
};
m_main.submitAllKongStats();
}
private function assassinationButtonClick(a_event:Event):void{
m_main.createAssassinationGame();
}
private function stealButtonClick(a_event:Event):void{
navigateToURL(new URLRequest("http://www.kongregate.com/game_sponsorships/list"), "_blank");
}
}
}//package
Section 123
//Mission (Mission)
package {
import flash.geom.*;
public class Mission extends SpriteEntity {
public static const c_missionFontSize:int = 22;
public function Mission(a_maxIndex:int=4){
super();
}
public function update(a_columns:Array, a_rect:Rectangle):void{
}
public function get isComplete():Boolean{
return (false);
}
}
}//package
Section 124
//MochiAd (MochiAd)
package {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.utils.*;
import flash.system.*;
public class MochiAd {
public static function getVersion():String{
return ("2.7");
}
public static function showClickAwayAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:2000, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{
}, ad_finished:function ():void{
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
var sendHostProgress:Boolean;
mc.regContLC = function (lc_name:String):void{
mc._containerLCName = lc_name;
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (!this.parent){
delete this.onEnterFrame;
return;
};
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
finished = true;
chk.started = getTimer();
} else {
if (elapsed > chk.ad_timeout){
options.ad_failed();
finished = true;
};
};
};
if (this.root == null){
finished = true;
};
if (finished){
delete this.onEnterFrame;
};
};
doOnEnterFrame(chk);
}
public static function _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function _allowDomains(server:String):String{
var hostname:String = server.split("/")[2].split(":")[0];
Security.allowDomain("*");
Security.allowDomain(hostname);
Security.allowInsecureDomain("*");
Security.allowInsecureDomain(hostname);
return (hostname);
}
public static function unload(clip:Object):Boolean{
if (((clip.clip) && (clip.clip._mochiad))){
clip = clip.clip;
};
if (clip.origFrameRate != undefined){
clip.stage.frameRate = clip.origFrameRate;
};
if (!clip._mochiad){
return (false);
};
if (clip._mochiad._containerLCName != undefined){
clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"unload"});
};
if (clip._mochiad.onUnload){
clip._mochiad.onUnload();
};
delete clip._mochiad_loaded;
delete clip._mochiad;
return (true);
}
public static function showInterLevelAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time:Number = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var p:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (p > 0){
this.parent.alpha = (p * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.adjustProgress = function (msec:Number):void{
var _chk:Object = mc._mochiad_wait;
_chk.server_control = true;
_chk.showing = true;
_chk.started = getTimer();
_chk.ad_msec = (msec - 250);
};
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if (elapsed > chk.ad_timeout){
options.ad_failed();
finished = true;
};
};
};
if (elapsed > chk.ad_msec){
finished = true;
};
if (finished){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function _parseOptions(options:Object, defaults:Object):Object{
var k:String;
var pairs:Array;
var i:Number;
var kv:Array;
var optcopy:Object = {};
for (k in defaults) {
optcopy[k] = defaults[k];
};
if (options){
for (k in options) {
optcopy[k] = options[k];
};
};
if (optcopy.clip == undefined){
throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite."));
};
options = optcopy.clip.loaderInfo.parameters.mochiad_options;
if (options){
pairs = options.split("&");
i = 0;
while (i < pairs.length) {
kv = pairs[i].split("=");
optcopy[unescape(kv[0])] = unescape(kv[1]);
i++;
};
};
if (optcopy.id == "test"){
trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!");
};
return (optcopy);
}
public static function _cleanup(mc:Object):void{
var k:String;
var lc:LocalConnection;
var f:Function;
var mc = mc;
if (("lc" in mc)){
lc = mc.lc;
f = function ():void{
lc.client = null;
lc.close();
//unresolved jump
var _slot1 = e;
};
setTimeout(f, 0);
};
var idx:Number = DisplayObjectContainer(mc).numChildren;
while (idx > 0) {
idx = (idx - 1);
DisplayObjectContainer(mc).removeChildAt(idx);
};
for (k in mc) {
delete mc[k];
};
}
public static function load(options:Object):MovieClip{
var clip:Object;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var g:Function;
var req:URLRequest;
var v:Object;
var options = options;
var DEFAULTS:Object = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
if (!MochiAd._isNetworkAvailable()){
return (null);
};
if (clip._mochiad_loaded){
return (null);
};
//unresolved jump
var _slot1 = e;
throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
var depth:Number = options.depth;
delete options.depth;
var mc:MovieClip = createEmptyMovieClip(clip, "_mochiad", depth);
var wh:Array = MochiAd._getRes(options, clip);
options.res = ((wh[0] + "x") + wh[1]);
options.server = (options.server + options.id);
delete options.id;
clip._mochiad_loaded = true;
if (clip.loaderInfo.loaderURL.indexOf("http") == 0){
options.as3_swf = clip.loaderInfo.loaderURL;
};
var lv:URLVariables = new URLVariables();
for (k in options) {
v = options[k];
if (!(v is Function)){
lv[k] = v;
};
};
server = lv.server;
delete lv.server;
hostname = _allowDomains(server);
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.lc = lc;
mc.lcName = name;
lv.lc = name;
lv.st = getTimer();
loader = new Loader();
g = function (ev:Object):void{
ev.target.removeEventListener(ev.type, arguments.callee);
MochiAd.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime()));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.load(req);
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function runMethod(base:Object, methodName:String, argsArray:Array):Object{
var nameArray:Array = methodName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return (undefined);
};
base = base[nameArray[i]];
i++;
};
if (typeof(base[nameArray[i]]) == "function"){
return (base[nameArray[i]].apply(base, argsArray));
};
return (undefined);
}
public static function createEmptyMovieClip(parent:Object, name:String, depth:Number):MovieClip{
var mc:MovieClip = new MovieClip();
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
parent[name] = mc;
mc["_name"] = name;
return (mc);
}
public static function _getRes(options:Object, clip:Object):Array{
var xy:Array;
var b:Object = clip.getBounds(clip.root);
var w:Number = 0;
var h:Number = 0;
if (typeof(options.res) != "undefined"){
xy = options.res.split("x");
w = parseFloat(xy[0]);
h = parseFloat(xy[1]);
} else {
w = (b.xMax - b.xMin);
h = (b.yMax - b.yMin);
};
if ((((w == 0)) || ((h == 0)))){
w = clip.stage.stageWidth;
h = clip.stage.stageHeight;
};
return ([w, h]);
}
public static function adShowing(mc:Object):void{
mc.origFrameRate = mc.stage.frameRate;
mc.stage.frameRate = 30;
}
public static function getValue(base:Object, objectName:String):Object{
var nameArray:Array = objectName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return (undefined);
};
base = base[nameArray[i]];
i++;
};
return (base[nameArray[i]]);
}
public static function rpc(clip:Object, callbackID:Number, arg:Object):void{
var _local4:Object;
var _local5:Object;
switch (arg.id){
case "setValue":
MochiAd.setValue(clip, arg.objectName, arg.value);
break;
case "getValue":
_local4 = MochiAd.getValue(clip, arg.objectName);
clip._mochiad.lc.send(clip._mochiad._containerLCName, "rpcResult", callbackID, _local4);
break;
case "runMethod":
_local5 = MochiAd.runMethod(clip, arg.method, arg.args);
clip._mochiad.lc.send(clip._mochiad._containerLCName, "rpcResult", callbackID, _local5);
break;
default:
trace(("[mochiads rpc] unknown rpc id: " + arg.id));
};
}
public static function setValue(base:Object, objectName:String, value:Object):void{
var nameArray:Array = objectName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return;
};
base = base[nameArray[i]];
i++;
};
base[nameArray[i]] = value;
}
public static function showPreGameAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var complete:Boolean;
var unloaded:Boolean;
var sendHostProgress:Boolean;
var fn:Function;
var r:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}, ad_progress:function (percent:Number):void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){
options.ad_started();
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
return;
};
clip = options.clip;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time:Number = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
var fn:Function = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.x = (w * -0.5);
chk.y = (h * -0.5);
var bar:MovieClip = createEmptyMovieClip(chk, "_mochiad_bar", 4);
if (options.no_progress_bar){
bar.visible = false;
delete options.no_progress_bar;
} else {
bar.x = 10;
bar.y = (h - 20);
};
var bar_color:Number = options.color;
delete options.color;
var bar_background:Number = options.background;
delete options.background;
var bar_outline:Number = options.outline;
delete options.outline;
var backing_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 1);
var backing:Object = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo((w - 20), 0);
backing.lineTo((w - 20), 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
var inside_mc:MovieClip = createEmptyMovieClip(bar, "_inside", 2);
var inside:Object = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo((w - 20), 0);
inside.lineTo((w - 20), 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
var outline_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 3);
var outline:Object = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo((w - 20), 0);
outline.lineTo((w - 20), 10);
outline.lineTo(0, 10);
outline.lineTo(0, 0);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var p:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (p > 0){
this.parent.alpha = (p * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
complete = false;
unloaded = false;
var f:Function = function (ev:Event):void{
ev.target.removeEventListener(ev.type, arguments.callee);
complete = true;
if (unloaded){
MochiAd.unload(clip);
};
};
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
if ((clip.root is MovieClip)){
r = (clip.root as MovieClip);
if (r.framesLoaded >= r.totalFrames){
complete = true;
};
};
mc.unloadAd = function ():void{
unloaded = true;
if (complete){
MochiAd.unload(clip);
};
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.adjustProgress = function (msec:Number):void{
var _chk:Object = mc._mochiad_wait;
_chk.server_control = true;
_chk.showing = true;
_chk.started = getTimer();
_chk.ad_msec = msec;
};
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
mc.rpcTestFn = function (s:String):Object{
trace(("[MOCHIAD rpcTestFn] " + s));
return (s);
};
mc.regContLC = function (lc_name:String):void{
mc._containerLCName = lc_name;
};
sendHostProgress = false;
mc.sendHostLoadProgress = function (lc_name:String):void{
sendHostProgress = true;
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (((!(this.parent)) || (!(this.parent.parent)))){
delete this["onEnterFrame"];
return;
};
var _clip:Object = this.parent.parent.root;
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
var clip_total:Number = _clip.loaderInfo.bytesTotal;
var clip_loaded:Number = _clip.loaderInfo.bytesLoaded;
if (complete){
clip_loaded = Math.max(1, clip_loaded);
clip_total = clip_loaded;
};
var clip_pcnt:Number = ((100 * clip_loaded) / clip_total);
var ad_pcnt:Number = ((100 * elapsed) / chk.ad_msec);
var _inside:Object = this._mochiad_bar._inside;
var pcnt:Number = Math.min(100, Math.min(((clip_pcnt) || (0)), ad_pcnt));
pcnt = Math.max(this.last_pcnt, pcnt);
this.last_pcnt = pcnt;
_inside.scaleX = (pcnt * 0.01);
options.ad_progress(pcnt);
if (sendHostProgress){
clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:clip_pcnt});
if (clip_pcnt == 100){
sendHostProgress = false;
};
};
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if ((((elapsed > chk.ad_timeout)) && ((clip_pcnt == 100)))){
options.ad_failed();
finished = true;
};
};
};
if (elapsed > chk.ad_msec){
finished = true;
};
if (((complete) && (finished))){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function showPreloaderAd(options:Object):void{
trace("[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0");
MochiAd.showPreGameAd(options);
}
public static function showTimedAd(options:Object):void{
trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0");
MochiAd.showInterLevelAd(options);
}
public static function doOnEnterFrame(mc:MovieClip):void{
var mc = mc;
var f:Function = function (ev:Object):void{
if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){
mc.onEnterFrame();
} else {
ev.target.removeEventListener(ev.type, arguments.callee);
};
};
mc.addEventListener(Event.ENTER_FRAME, f);
}
}
}//package
Section 125
//MochiBot (MochiBot)
package {
import flash.display.*;
import flash.system.*;
import flash.net.*;
public dynamic class MochiBot extends Sprite {
public static function track(parent:Sprite, tag:String):MochiBot{
if (Security.sandboxType == "localWithFile"){
return (null);
};
var self:MochiBot = new (MochiBot);
parent.addChild(self);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var server:String = "http://core.mochibot.com/my/core.swf";
var lv:URLVariables = new URLVariables();
lv["sb"] = Security.sandboxType;
lv["v"] = Capabilities.version;
lv["swfid"] = tag;
lv["mv"] = "8";
lv["fv"] = "9";
var url:String = self.root.loaderInfo.loaderURL;
if (url.indexOf("http") == 0){
lv["url"] = url;
} else {
lv["url"] = "local";
};
var req:URLRequest = new URLRequest(server);
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
var loader:Loader = new Loader();
self.addChild(loader);
loader.load(req);
return (self);
}
}
}//package
Section 126
//MorphBlock (MorphBlock)
package {
public class MorphBlock extends Block {
public function MorphBlock(){
super();
buttonMode = true;
m_player = Animations.instance.instantiate("bombpowerup");
addChild(m_player);
toolTip = "Destroys bots of one color.";
}
}
}//package
Section 127
//MyPreloader (MyPreloader)
package {
import flash.display.*;
import com.urbansquall.preloader.*;
public class MyPreloader extends Preloader {
private var m_movieClip:MovieClip;
private var m_text:CustomTextField;
public function MyPreloader(){
super();
MochiBot.track(this, "4d652990");
}
override protected function endLoading():void{
removeChild(m_movieClip);
m_movieClip = null;
removeChild(m_text);
m_text = null;
}
override protected function updateLoading(a_percent:Number):void{
m_text.text = (("" + Math.floor((100 * a_percent))) + "%");
m_text.x = (320 - (m_text.width / 2));
m_text.y = ((480 - m_text.height) - 10);
m_movieClip.gotoAndStop(Math.floor((m_movieClip.totalFrames * a_percent)));
}
override protected function beginLoading():void{
m_movieClip = SponsorSingleton.instance.createPreloader(stage);
addChild(m_movieClip);
m_movieClip.x = 320;
m_movieClip.y = 240;
m_movieClip.gotoAndPlay(0);
m_text = new CustomTextField("", 0xFFFFFF);
addChild(m_text);
}
}
}//package
Section 128
//OneColorBlockCountMission (OneColorBlockCountMission)
package {
import flash.display.*;
import flash.geom.*;
public class OneColorBlockCountMission extends Mission {
private var m_label:CustomTextField;
private var m_icon:Bitmap;
private var m_count:int;
private var m_block:ColorBlock;
private static const c_goal:int = 25;
private static var icons:Array = new Array(AssetManager.BonusBlueMatchPNG, AssetManager.BonusRedMatchPNG, AssetManager.BonusGreenMatchPNG, AssetManager.BonusPurpleMatchPNG, AssetManager.BonusOrangeMatchPNG);
public function OneColorBlockCountMission(a_maxIndex:int){
super();
m_count = c_goal;
m_block = BlockGenerator.generateRandomColorBlock(a_maxIndex);
createCount();
updateDisplay();
toolTip = "Zap bots of this color";
}
override public function get isComplete():Boolean{
return ((m_count <= 0));
}
override public function update(a_columns:Array, a_rect:Rectangle):void{
var j:int;
var num:int;
var i:int = a_rect.left;
while (i < a_rect.right) {
j = a_rect.top;
while (j < a_rect.bottom) {
if ((((a_columns[i][j] is ColorBlock)) && ((a_columns[i][j] as ColorBlock).equals(m_block)))){
num++;
};
j++;
};
i++;
};
m_count = Math.max(0, (m_count - num));
updateDisplay();
}
public function createCount():void{
var bot:Class = icons[m_block.index];
m_icon = new (bot);
addChild(m_icon);
m_label = new CustomTextField("", 0, c_missionFontSize);
m_label.background = false;
addChild(m_label);
m_label.y = (m_icon.getBounds(this).bottom - 10);
updateDisplay();
}
public function updateDisplay():void{
m_label.text = ("x" + m_count);
m_label.x = (((m_icon.width - m_label.width) / 2) - 3);
}
}
}//package
Section 129
//RandomUtils (RandomUtils)
package {
public class RandomUtils {
public function RandomUtils(){
super();
}
public static function Shuffle(a_array:Array):void{
var swapIndex:int;
var tmp:Object;
var i:int;
while (i < a_array.length) {
swapIndex = RandomInt(i, (a_array.length - 1));
tmp = a_array[swapIndex];
a_array[swapIndex] = a_array[i];
a_array[i] = tmp;
i++;
};
}
public static function RandomSelection(a_array:Array){
return (a_array[Math.floor((a_array.length * Math.random()))]);
}
public static function RandomInt(a_min:int, a_max:int):int{
var range:int = (a_max - a_min);
return ((a_min + Math.floor((Math.random() * range))));
}
public static function RandomBool(a_probabilityTrue:Number):Boolean{
return ((Math.random() < a_probabilityTrue));
}
}
}//package
Section 130
//RegularButton (RegularButton)
package {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
public class RegularButton extends SimpleButton {
private var m_overThings:Array;
public function RegularButton(a_imgClass:Class, a_optionalPutOverThing:Class=null){
var upThing:Sprite;
var overThing:Sprite;
var downThing:Sprite;
super();
m_overThings = [];
var up:Sprite = new Sprite();
up.addChild(new (a_imgClass));
up.cacheAsBitmap = true;
this.upState = up;
var over:Sprite = new Sprite();
over.addChild(new (a_imgClass));
over.transform.colorTransform = new ColorTransform(1.1, 1.1, 1.1);
over.cacheAsBitmap = true;
this.overState = over;
var down:Sprite = new Sprite();
down.addChild(new (a_imgClass));
down.transform.colorTransform = new ColorTransform(0.8, 0.8, 0.8);
down.cacheAsBitmap = true;
this.downState = down;
this.hitTestState = up;
this.cacheAsBitmap = true;
this.useHandCursor = true;
if (a_optionalPutOverThing != null){
upThing = new (a_optionalPutOverThing);
up.addChild(upThing);
overThing = new (a_optionalPutOverThing);
over.addChild(overThing);
downThing = new (a_optionalPutOverThing);
down.addChild(downThing);
m_overThings = [upThing, overThing, downThing];
toggleOverThings();
this.addEventListener(MouseEvent.CLICK, onClick);
};
}
private function onClick(a_event:MouseEvent):void{
toggleOverThings();
}
private function toggleOverThings():void{
var t:Sprite;
for each (t in m_overThings) {
t.visible = !(t.visible);
};
}
}
}//package
Section 131
//ResultsScreen (ResultsScreen)
package {
import flash.events.*;
import flash.display.*;
public class ResultsScreen extends Sprite {
private var m_controller:Main;
public function ResultsScreen(a_level:int, a_score:int, a_controller:Main){
var str:String;
var btn:RegularButton;
var rem:Function;
var a_level = a_level;
var a_score = a_score;
var a_controller = a_controller;
super();
m_controller = a_controller;
addChild(new AssetManager.GameOverPNG());
var score:CustomTextField = new CustomTextField(("Score : " + a_score), 0, 28, true);
addChild(score);
score.x = ((640 - score.width) / 2);
score.y = 150;
var level:CustomTextField = new CustomTextField(("Level : " + a_level), 0, 28, true);
addChild(level);
level.x = ((640 - level.width) / 2);
level.y = (score.getBounds(this).bottom + 5);
m_controller.updateMaxStat(Main.ccHighScore, a_score);
m_controller.updateMaxStat(Main.ccHighLevel, a_level);
str = ("High Score: " + Main.s_safeSolManager.readInt(Main.ccHighScore));
var ccHighScore:CustomTextField = new CustomTextField(str, 0, 28, true);
addChild(ccHighScore);
ccHighScore.x = ((640 - ccHighScore.width) / 2);
ccHighScore.y = (level.getBounds(this).bottom + 2);
str = ("Best Level: " + Main.s_safeSolManager.readInt(Main.ccHighLevel));
var ccHighLevel:CustomTextField = new CustomTextField(str, 0, 28, true);
addChild(ccHighLevel);
ccHighLevel.x = ((640 - ccHighLevel.width) / 2);
ccHighLevel.y = (ccHighScore.getBounds(this).bottom + 2);
btn = new RegularButton(AssetManager.MainMenuButtonPNG);
addChild(btn);
btn.x = ((640 - btn.width) / 2);
btn.y = ((480 - btn.height) - 38);
rem = function (a_event:MouseEvent):void{
btn.removeEventListener(MouseEvent.CLICK, rem);
m_controller.createMainMenu();
};
btn.addEventListener(MouseEvent.CLICK, rem);
}
}
}//package
Section 132
//RowBlock (RowBlock)
package {
public class RowBlock extends Block {
public function RowBlock(){
super();
buttonMode = true;
m_player = Animations.instance.instantiate("rowpowerup");
addChild(m_player);
toolTip = "Replaces this row with one color.";
}
}
}//package
Section 133
//ScoreDisplay (ScoreDisplay)
package {
import flash.display.*;
import com.urbansquall.security.*;
import flash.text.*;
import caurina.transitions.*;
public class ScoreDisplay extends Sprite {
private var m_scoreValue:safeint;
public var m_scoreDisplay:int;
private var m_textField:TextField;
public function ScoreDisplay(){
super();
m_scoreValue = new safeint(0);
m_textField = new CustomTextField("", 0, 22);
m_textField.background = false;
addChild(m_textField);
updateScore();
}
private function updateScore():void{
m_textField.text = ("" + m_scoreDisplay);
}
public function get score():int{
return (m_scoreValue.val);
}
public function set score(value:int):void{
m_scoreValue.val = value;
if (Tweener.getTweenCount(this) > 0){
Tweener.removeTweens(this);
};
Tweener.addTween(this, {m_scoreDisplay:value, time:1, transition:"linear", onUpdate:updateScore});
}
}
}//package
Section 134
//ScoreLabel (ScoreLabel)
package {
import flash.display.*;
import flash.text.*;
import flash.filters.*;
public class ScoreLabel extends Sprite {
private var m_labelText:TextField;
public function ScoreLabel(a_points:int){
super();
m_labelText = new CustomTextField(("" + a_points), 0xFFFFFF, (30 + (15 * Math.max(1, Math.floor((Math.log(Math.abs(a_points)) / Math.log(10)))))));
m_labelText.filters = [new GlowFilter(0, 1, 2, 2, 32)];
m_labelText.x = (-(m_labelText.width) / 2);
m_labelText.y = (-(m_labelText.height) / 2);
m_labelText.background = false;
addChild(m_labelText);
}
}
}//package
Section 135
//SelectionManager (SelectionManager)
package {
import flash.display.*;
import flash.geom.*;
import com.urbansquall.ginger.*;
public class SelectionManager {
private var m_controllers:Array;
private static const c_ls:String = "Left";
private static const c_bl:String = "BottomLeft";
private static const c_ts:String = "Top";
private static const c_br:String = "BottomRight";
private static const c_tr:String = "TopRight";
private static const c_tl:String = "TopLeft";
private static const c_bs:String = "Bottom";
private static const c_rs:String = "Right";
public static var s_masterController:AnimationPlayer = null;
public function SelectionManager(a_selectionRect:Rectangle, a_tilePxX:Function, a_tilePxY:Function, a_foreground:Sprite){
var t:AnimationPlayer;
var b:AnimationPlayer;
var l:AnimationPlayer;
var r:AnimationPlayer;
super();
m_controllers = new Array();
var tl:AnimationPlayer = getAnimation();
tl.play(c_tl);
m_controllers.push(tl);
a_foreground.addChild(tl);
tl.x = a_tilePxX(a_selectionRect.left);
tl.y = a_tilePxY(a_selectionRect.top);
var tr:AnimationPlayer = getAnimation();
tr.play(c_tr);
m_controllers.push(tr);
a_foreground.addChild(tr);
tr.x = a_tilePxX((a_selectionRect.right - 1));
tr.y = a_tilePxY(a_selectionRect.top);
var bl:AnimationPlayer = getAnimation();
bl.play(c_bl);
m_controllers.push(bl);
a_foreground.addChild(bl);
bl.x = a_tilePxX(a_selectionRect.left);
bl.y = a_tilePxY((a_selectionRect.bottom - 1));
var br:AnimationPlayer = getAnimation();
br.play(c_br);
m_controllers.push(br);
a_foreground.addChild(br);
br.x = a_tilePxX((a_selectionRect.right - 1));
br.y = a_tilePxY((a_selectionRect.bottom - 1));
var xoff = 1;
while (xoff < (a_selectionRect.width - 1)) {
t = getAnimation();
t.play(c_ts);
m_controllers.push(t);
a_foreground.addChild(t);
t.x = a_tilePxX((a_selectionRect.left + xoff));
t.y = a_tilePxY(a_selectionRect.top);
b = getAnimation();
b.play(c_bs);
m_controllers.push(b);
a_foreground.addChild(b);
b.x = a_tilePxX((a_selectionRect.left + xoff));
b.y = (a_tilePxY(a_selectionRect.bottom) - 3);
xoff++;
};
var yoff = 1;
while (yoff < (a_selectionRect.height - 1)) {
l = getAnimation();
l.play(c_ls);
m_controllers.push(l);
a_foreground.addChild(l);
l.x = a_tilePxX(a_selectionRect.left);
l.y = a_tilePxY((a_selectionRect.top + yoff));
r = getAnimation();
r.play(c_rs);
m_controllers.push(r);
a_foreground.addChild(r);
r.x = a_tilePxX((a_selectionRect.right - 1));
r.y = a_tilePxY((a_selectionRect.top + yoff));
yoff++;
};
}
public function update(a_deltaTime:int):void{
var a:AnimationPlayer;
for each (a in m_controllers) {
a.update(a_deltaTime);
};
}
private function getAnimation():AnimationPlayer{
var a:Array;
var o:Object;
var anim:Animation;
if (null == s_masterController){
s_masterController = new AnimationPlayer();
a = new Array({name:c_tl, startX:0, startY:1}, {name:c_tr, startX:4, startY:1}, {name:c_bl, startX:0, startY:2}, {name:c_br, startX:4, startY:2}, {name:c_ls, startX:0, startY:3}, {name:c_rs, startX:4, startY:3}, {name:c_ts, startX:0, startY:0}, {name:c_bs, startX:0, startY:0});
for each (o in a) {
anim = AnimationBuilder.importStrip(30, AssetManager.PerimiterBitmap.bitmapData, 40, 40, 4, (o.startX * 40), (o.startY * 40));
anim.isLooping = true;
anim.changeAllOffsets(0, 0);
s_masterController.addAnimation(o.name, anim);
};
};
return (s_masterController.copy());
}
}
}//package
Section 136
//SmartBomb (SmartBomb)
package {
import com.urbansquall.ginger.*;
public class SmartBomb extends SpriteEntity {
private var m_player:AnimationPlayer;
private var m_usable:Boolean;
private static const c_radius:int = 13;
public function SmartBomb(a_usable:Boolean){
super();
m_usable = a_usable;
buttonMode = true;
if (!a_usable){
m_player = Animations.instance.instantiate("disabled_smartbomb");
this.toolTip = "Extra bombs available in the Kongregate version.\nClick to go there now";
} else {
m_player = Animations.instance.instantiate("active_smartbomb");
this.toolTip = "Transforms one color into another";
};
addChild(m_player);
}
public function get usable():Boolean{
return (m_usable);
}
override public function tick(a_deltaTime:Number):void{
super.tick(a_deltaTime);
m_player.update(a_deltaTime);
}
}
}//package
Section 137
//SonarEffect (SonarEffect)
package {
import flash.media.*;
public dynamic class SonarEffect extends Sound {
}
}//package
Section 138
//SoundManager (SoundManager)
package {
import flash.media.*;
public class SoundManager {
public static var s_crowdControlLoop:Sound = new CrowdControlLoop();
public static var s_explosionEffect:Sound = new ExplosionEffect();
public static var s_assassinationLoop:Sound = new AssassinationLoop();
public static var s_surgeSound:Sound = new ElectricalSurgeEffect();
public static var s_linePowerUpEffect:Sound = new LinePowerUp();
public static var s_warningLoop:Sound = new AlarmEffect();
public static var s_radarPowerUpEffect:Sound = new SonarEffect();
public static var s_bonusAchievedEffect:Sound = new BonusAchievedEffect();
public static var s_levelUpEffect:Sound = new LevelAchievedEffect();
public static var s_clearSounds:Array = new Array(new Effect7(), new Effect9(), new Effect11(), new Effect13(), new Effect15(), new Effect17(), new Effect19());
public static var s_cancelMoveEffect:Sound = new CancelDragEffect();
public static var s_electricalArcLoop:Sound = new ElectricalArcLoop();
public static var s_uiLoop:Sound = new UILoop();
public static var sfx_transform:SoundTransform = new SoundTransform();
public static var s_startMoveEffect:Sound = new StartMoveEffect();
public static var bgm_transform:SoundTransform = new SoundTransform();
public static var s_gameOverSound:Sound = new GameOverEffect();
public function SoundManager(){
super();
}
}
}//package
Section 139
//splash_kong (splash_kong)
package {
import flash.display.*;
public dynamic class splash_kong extends MovieClip {
}
}//package
Section 140
//SponsorSingleton (SponsorSingleton)
package {
public class SponsorSingleton {
private static var m_instance:ISponsor;
public function SponsorSingleton(){
super();
}
public static function get instance():ISponsor{
if (m_instance == null){
m_instance = new KongregateSponsor();
};
return (m_instance);
}
}
}//package
Section 141
//SpriteEntity (SpriteEntity)
package {
import flash.events.*;
import flash.display.*;
import com.urbansquall.serenity.*;
import flash.filters.*;
public class SpriteEntity extends Sprite implements IEntity {
protected var m_id:String;
protected var m_toolTip:CustomTextField;
protected var m_toolTipSprite:Sprite;
private static const glow:GlowFilter = new GlowFilter(0, 0.8, 12, 12, 4);
public static var m_counter:int = 0;
public function SpriteEntity(){
super();
m_id = ("SpriteEntity_" + m_counter);
m_counter = (m_counter + 1);
m_toolTip = new CustomTextField("", 0xFFFFFF, 14);
m_toolTip.filters = [glow];
m_toolTip.visible = false;
m_toolTip.mouseEnabled = false;
m_toolTip.background = false;
}
public function get toolTip():String{
return (m_toolTip.text);
}
protected function mouseMove(a_event:MouseEvent):void{
if (Main.s_showToolTips){
m_toolTip.visible = true;
m_toolTip.x = Math.min(Math.max(0, (a_event.stageX - (m_toolTip.width / 2))), (640 - m_toolTip.width));
m_toolTip.y = (a_event.stageY - m_toolTip.height);
};
}
protected function mouseOut(a_event:MouseEvent):void{
m_toolTip.visible = false;
}
public function get id():String{
return (m_id);
}
public function registerToolTips(a_sprite:Sprite):void{
addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
addEventListener(MouseEvent.MOUSE_OUT, mouseOut);
a_sprite.addChild(m_toolTip);
}
public function set toolTip(a_val:String):void{
m_toolTip.text = a_val;
}
public function tick(a_deltaTime:Number):void{
}
public function dispose():void{
removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
removeEventListener(MouseEvent.ROLL_OUT, mouseOut);
}
}
}//package
Section 142
//StartMoveEffect (StartMoveEffect)
package {
import flash.media.*;
public dynamic class StartMoveEffect extends Sound {
}
}//package
Section 143
//TimerBar (TimerBar)
package {
import flash.display.*;
import flash.geom.*;
public class TimerBar extends Sprite {
private var m_orange:Sprite;
private var m_height:int;
private var m_prevTime:int;
private var m_timeRemaining:int;
private var m_margin:int;
private var m_cover:Sprite;
private var m_blue:Sprite;
private var m_width:int;
private var m_box:Sprite;
private var m_maxTime:int;
private static var s_orange:ColorTransform = new ColorTransform(1, 0.5, 0);
private static var s_red:ColorTransform = new ColorTransform(1, 0, 0);
public function TimerBar(a_maxTime:int, a_width:int, a_height:int, a_margin:int){
super();
m_maxTime = a_maxTime;
m_timeRemaining = m_maxTime;
m_prevTime = 0;
m_margin = a_margin;
m_width = a_width;
m_height = a_height;
m_box = new Sprite();
m_box.graphics.beginFill(0);
m_box.graphics.drawRect(0, 0, a_width, a_height);
m_box.graphics.endFill();
addChild(m_box);
var blue_mask:Sprite = makeBar(0);
addChild(blue_mask);
blue_mask.x = m_margin;
blue_mask.y = m_margin;
m_blue = makeBar(33023);
m_blue.mask = blue_mask;
addChild(m_blue);
m_blue.x = m_margin;
m_blue.y = m_margin;
var orange_mask:Sprite = makeBar(0);
addChild(orange_mask);
orange_mask.x = m_margin;
orange_mask.y = m_margin;
m_orange = makeBar(0xFFFFFF);
m_orange.mask = orange_mask;
addChild(m_orange);
m_orange.x = m_margin;
m_orange.y = m_margin;
}
private function makeBar(a_color:uint):Sprite{
var bar:Sprite = new Sprite();
bar.graphics.beginFill(a_color);
bar.graphics.drawRect(0, 0, (m_width - (m_margin * 2)), (m_height - (m_margin * 2)));
bar.graphics.endFill();
return (bar);
}
public function updateBar():void{
m_orange.y = ((m_margin * 2) + (m_orange.height * ((m_maxTime - m_prevTime) / m_maxTime)));
m_blue.y = ((m_margin * 2) + (m_orange.height * ((m_maxTime - m_timeRemaining) / m_maxTime)));
m_orange.transform.colorTransform = s_orange;
if (m_timeRemaining < (m_maxTime * 0.15)){
m_orange.transform.colorTransform = s_red;
};
}
public function set timeRemaining(a_value:int):void{
m_timeRemaining = Math.min(m_maxTime, a_value);
}
public function get timeRemaining():int{
return (m_timeRemaining);
}
public function updateTime(a_deltaTime:int):void{
m_timeRemaining = (m_timeRemaining - a_deltaTime);
m_prevTime = Math.min(m_timeRemaining, (m_prevTime + ((m_timeRemaining - m_prevTime) / 10)));
}
}
}//package
Section 144
//Tweens (Tweens)
package {
public class Tweens {
public static const removeOnComplete:Function = function ():void{
this.parent.removeChild(this);
};
public function Tweens(){
super();
}
}
}//package
Section 145
//UILoop (UILoop)
package {
import flash.media.*;
public dynamic class UILoop extends Sound {
}
}//package
Section 146
//WildCardBlock (WildCardBlock)
package {
import com.urbansquall.ginger.*;
public class WildCardBlock extends Block {
public function WildCardBlock(){
super();
m_onComplete = null;
m_player = Animations.instance.instantiate("wildcardbot");
addChild(m_player);
m_player.addEventListener(AnimationEvent.CHANGE, animationChange);
toolTip = "Matches any color and multiplies score.";
}
}
}//package