Section 1
//sellBubble_8 (castledefense_fla.sellBubble_8)
package castledefense_fla {
import flash.display.*;
import flash.text.*;
public dynamic class sellBubble_8 extends MovieClip {
public var moneyText:TextField;
}
}//package castledefense_fla
Section 2
//Bullet (com.novelgames.flashgames.castledefense.Bullet)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import com.novelgames.flashgames.common.*;
public class Bullet extends MovieClip {
public var power:Number;
private var startX:Number;
private var startY:Number;
public var speed:Number;
private var startTime:int;
public var maxDistance:Number;
private var duration:Number;
private var endX:Number;
private var endY:Number;
public function initialize(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){
this.x = _arg1;
this.y = _arg2;
this.power = _arg3;
this.speed = _arg4;
this.maxDistance = _arg5;
this.rotation = _arg6;
startX = _arg1;
startY = _arg2;
endX = (_arg1 + (Math.cos(((_arg6 * Math.PI) / 180)) * _arg5));
endY = (_arg2 + (Math.sin(((_arg6 * Math.PI) / 180)) * _arg5));
duration = ((_arg5 * 1000) / _arg4);
startTime = NewTimer.getTimer();
}
public function move(_arg1:int):Boolean{
var _local2:Number;
_local2 = ((_arg1 - startTime) / duration);
if (_local2 > 1){
_local2 = 1;
};
x = ((startX * (1 - _local2)) + (endX * _local2));
y = ((startY * (1 - _local2)) + (endY * _local2));
return ((_local2 >= 1));
}
}
}//package com.novelgames.flashgames.castledefense
Section 3
//Bullet0 (com.novelgames.flashgames.castledefense.Bullet0)
package com.novelgames.flashgames.castledefense {
public dynamic class Bullet0 extends Bullet {
}
}//package com.novelgames.flashgames.castledefense
Section 4
//Bullet1 (com.novelgames.flashgames.castledefense.Bullet1)
package com.novelgames.flashgames.castledefense {
public dynamic class Bullet1 extends Bullet {
}
}//package com.novelgames.flashgames.castledefense
Section 5
//Bullet2 (com.novelgames.flashgames.castledefense.Bullet2)
package com.novelgames.flashgames.castledefense {
public dynamic class Bullet2 extends Bullet {
}
}//package com.novelgames.flashgames.castledefense
Section 6
//BuyDialog (com.novelgames.flashgames.castledefense.BuyDialog)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*;
import flash.geom.*;
public class BuyDialog extends MovieClip {
public var rangeText:TextField;
public var priceText:TextField;
private var cannons:Array;
public var shadeHolder:MovieClip;
public var cancelButton:SimpleButton;
public var buyButton:SimpleButton;
public var cannonsHolder:MovieClip;
public var backgroundHolder:MovieClip;
public var frequencyText:TextField;
public var powerText:TextField;
private var index:int;
public function BuyDialog(){
buyButton.addEventListener(MouseEvent.CLICK, buyButtonClicked);
cancelButton.addEventListener(MouseEvent.CLICK, cancelButtonClicked);
visible = false;
}
private function cancelButtonClicked(_arg1:MouseEvent):void{
hide();
Object(parent).buyFinished();
}
private function drawShade():void{
var _local1:Point;
var _local2:Point;
_local1 = this.globalToLocal(new Point(0, 0));
_local2 = this.globalToLocal(new Point(stage.stageWidth, stage.stageHeight));
shadeHolder.graphics.clear();
shadeHolder.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
shadeHolder.graphics.moveTo(_local1.x, _local1.y);
shadeHolder.graphics.lineTo(_local2.x, _local1.y);
shadeHolder.graphics.lineTo(_local2.x, _local2.y);
shadeHolder.graphics.lineTo(_local1.x, _local2.y);
shadeHolder.graphics.lineTo(_local1.x, _local1.y);
shadeHolder.graphics.endFill();
}
private function cannonClicked(_arg1:MouseEvent):void{
var _local2:CannonSet;
_local2 = CannonSet(_arg1.currentTarget);
showCannon(_local2.type);
}
public function hide():void{
visible = false;
}
private function showCannon(_arg1:int):void{
this.index = _arg1;
drawShade();
drawBackground(_arg1);
createCannons(_arg1);
showNumbers(_arg1);
setButtons(_arg1);
}
private function drawBackground(_arg1:int):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
_local2 = (Config.CANNON_TYPES * Config.BUYDIALOG_TABSIZE);
if (_local2 < Config.BUYDIALOG_MINWIDTH){
_local2 = Config.BUYDIALOG_MINWIDTH;
};
_local3 = (-(Config.BUYDIALOG_HEIGHT) / 2);
_local4 = (-(_local2) / 2);
_local5 = (Config.BUYDIALOG_HEIGHT / 2);
_local6 = (_local2 / 2);
_local7 = Config.BUYDIALOG_BACKGROUNDINSET;
_local8 = Config.BUYDIALOG_CORNERRADIUS;
_local9 = Config.BUYDIALOG_TABSIZE;
backgroundHolder.graphics.clear();
backgroundHolder.graphics.lineStyle(Config.BUYDIALOG_BORDERTHICKNESS, Config.BUYDIALOG_BORDERCOLOUR);
backgroundHolder.graphics.beginFill(Config.BUYDIALOG_BACKGROUNDCOLOUR);
backgroundHolder.graphics.moveTo(((_local4 + _local7) + _local8), (_local3 + _local7));
backgroundHolder.graphics.lineTo(((_local6 - _local7) - _local8), (_local3 + _local7));
backgroundHolder.graphics.curveTo((_local6 - _local7), (_local3 + _local7), (_local6 - _local7), ((_local3 + _local7) + _local8));
backgroundHolder.graphics.lineTo((_local6 - _local7), ((_local5 - _local7) - _local8));
backgroundHolder.graphics.curveTo((_local6 - _local7), (_local5 - _local7), ((_local6 - _local7) - _local8), (_local5 - _local7));
backgroundHolder.graphics.lineTo(((_local4 + _local7) + _local8), (_local5 - _local7));
backgroundHolder.graphics.curveTo((_local4 + _local7), (_local5 - _local7), (_local4 + _local7), ((_local5 - _local7) - _local8));
backgroundHolder.graphics.lineTo((_local4 + _local7), ((_local3 + _local7) + _local8));
backgroundHolder.graphics.curveTo((_local4 + _local7), (_local3 + _local7), ((_local4 + _local7) + _local8), (_local3 + _local7));
backgroundHolder.graphics.endFill();
backgroundHolder.graphics.beginFill(Config.BUYDIALOG_FOREGROUNDCOLOUR);
backgroundHolder.graphics.moveTo((_local4 + (_arg1 * _local9)), (_local3 + _local9));
backgroundHolder.graphics.lineTo((_local4 + (_arg1 * _local9)), (_local3 + _local8));
backgroundHolder.graphics.curveTo((_local4 + (_arg1 * _local9)), _local3, ((_local4 + (_arg1 * _local9)) + _local8), _local3);
backgroundHolder.graphics.lineTo(((_local4 + ((_arg1 + 1) * _local9)) - _local8), _local3);
backgroundHolder.graphics.curveTo((_local4 + ((_arg1 + 1) * _local9)), _local3, (_local4 + ((_arg1 + 1) * _local9)), (_local3 + _local8));
backgroundHolder.graphics.lineTo((_local4 + ((_arg1 + 1) * _local9)), (_local3 + _local9));
backgroundHolder.graphics.lineTo(_local6, (_local3 + _local9));
backgroundHolder.graphics.lineTo(_local6, (_local5 - _local8));
backgroundHolder.graphics.curveTo(_local6, _local5, (_local6 - _local8), _local5);
backgroundHolder.graphics.lineTo((_local4 + _local8), _local5);
backgroundHolder.graphics.curveTo(_local4, _local5, _local4, (_local5 - _local8));
backgroundHolder.graphics.lineTo(_local4, (_local3 + _local9));
backgroundHolder.graphics.lineTo((_local4 + (_arg1 * _local9)), (_local3 + _local9));
backgroundHolder.graphics.endFill();
}
private function showNumbers(_arg1:int):void{
powerText.text = Config.CANNON_INFOS[_arg1][0].toString();
frequencyText.text = Config.CANNON_INFOS[_arg1][1].toString();
rangeText.text = Config.CANNON_INFOS[_arg1][2].toString();
priceText.text = (Config.MONEY_PREFIX + Config.CANNON_INFOS[_arg1][3]);
}
private function buyButtonClicked(_arg1:MouseEvent):void{
hide();
Object(parent).buyCannon(index);
}
private function createCannons(_arg1:int):void{
var _local2:Number;
var _local3:Class;
var _local4:CannonSet;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
_local2 = (Config.CANNON_TYPES * Config.BUYDIALOG_TABSIZE);
if (cannons){
_local8 = 0;
while (_local8 < cannons.length) {
cannonsHolder.removeChild(cannons[_local8]);
_local8++;
};
};
cannons = new Array();
if (_local2 < Config.BUYDIALOG_MINWIDTH){
_local2 = Config.BUYDIALOG_MINWIDTH;
};
_local8 = 0;
while (_local8 < Config.CANNON_TYPES) {
_local3 = Class(getDefinitionByName(("com.novelgames.flashgames.castledefense.CannonSet" + _local8)));
_local4 = new (_local3);
_local4.type = _local8;
if (_local8 != _arg1){
_local7 = Config.BUYDIALOG_CANNONNORMALSIZE;
_local4.addEventListener(MouseEvent.MOUSE_DOWN, cannonClicked);
_local4.buttonMode = true;
} else {
_local7 = Config.BUYDIALOG_CANNONHIGHLIGHTSIZE;
};
_local5 = (((-(_local2) / 2) + (_local8 * Config.BUYDIALOG_TABSIZE)) + (Config.BUYDIALOG_TABSIZE / 2));
_local6 = ((-(Config.BUYDIALOG_HEIGHT) / 2) + (Config.BUYDIALOG_TABSIZE / 2));
_local4.x = _local5;
_local4.y = _local6;
_local4.width = _local7;
_local4.height = _local7;
cannonsHolder.addChild(_local4);
cannons.push(_local4);
_local8++;
};
}
private function setButtons(_arg1:int):void{
buyButton.visible = (Object(parent).money >= Config.CANNON_INFOS[_arg1][3]);
}
public function show():void{
showCannon(0);
visible = true;
}
}
}//package com.novelgames.flashgames.castledefense
Section 7
//CannonSet (com.novelgames.flashgames.castledefense.CannonSet)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import com.novelgames.flashgames.common.*;
public class CannonSet extends MovieClip {
public var power:Number;
public var bulletDistance:Number;
private var fireInterval:Number;
public var background:MovieClip;
public var range:int;
public var price:int;
public var frequency:Number;
public var bulletSpeed:Number;
public var type:int;
public var turnSpeed:Number;
private var lastFireTime:int;
public var cannon:MovieClip;
private function getBulletDistance():void{
var _local1:Number;
var _local2:Number;
_local1 = (Config.BLOCK_SIZE / 2);
_local2 = ((range * Config.BLOCK_SIZE) + (Config.BLOCK_SIZE / 2));
bulletDistance = Math.sqrt(((_local1 * _local1) + (_local2 * _local2)));
}
public function setDefaultRotation(_arg1:Number):void{
cannon.rotation = _arg1;
background.rotation = _arg1;
}
public function initialize(_arg1:int):void{
this.type = _arg1;
power = Config.CANNON_INFOS[_arg1][0];
frequency = Config.CANNON_INFOS[_arg1][1];
range = Config.CANNON_INFOS[_arg1][2];
price = Config.CANNON_INFOS[_arg1][3];
turnSpeed = Config.CANNON_INFOS[_arg1][4];
bulletSpeed = Config.CANNON_INFOS[_arg1][5];
getBulletDistance();
fireInterval = (1000 / frequency);
lastFireTime = 0;
}
private function getCanShoot(_arg1:Enemy):Boolean{
var _local2:Number;
var _local3:Number;
_local2 = (_arg1.x - this.x);
_local3 = (_arg1.y - this.y);
return ((((_local2 * _local2) + (_local3 * _local3)) <= (bulletDistance * bulletDistance)));
}
public function move(_arg1:int, _arg2:Array):Boolean{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:int;
_local6 = 0;
while (_local6 < _arg2.length) {
if (getCanShoot(_arg2[_local6])){
break;
};
_local6++;
};
if (_local6 >= _arg2.length){
return (false);
};
_local3 = ((Math.atan2((_arg2[_local6].y - this.y), (_arg2[_local6].x - this.x)) * 180) / Math.PI);
_local4 = ((turnSpeed * _arg1) / 1000);
_local5 = (_local3 - cannon.rotation);
if (_local5 > 180){
_local5 = (_local5 - 360);
} else {
if (_local5 < -180){
_local5 = (_local5 + 360);
};
};
if (_local4 <= Math.abs(_local5)){
_local4 = ((_local5 > 0)) ? _local4 : -(_local4);
cannon.rotation = (cannon.rotation + _local4);
return (false);
//unresolved jump
};
_local4 = _local5;
cannon.rotation = (cannon.rotation + _local4);
if ((NewTimer.getTimer() - lastFireTime) >= fireInterval){
lastFireTime = NewTimer.getTimer();
return (true);
};
return (false);
}
}
}//package com.novelgames.flashgames.castledefense
Section 8
//CannonSet0 (com.novelgames.flashgames.castledefense.CannonSet0)
package com.novelgames.flashgames.castledefense {
public dynamic class CannonSet0 extends CannonSet {
}
}//package com.novelgames.flashgames.castledefense
Section 9
//CannonSet1 (com.novelgames.flashgames.castledefense.CannonSet1)
package com.novelgames.flashgames.castledefense {
public dynamic class CannonSet1 extends CannonSet {
}
}//package com.novelgames.flashgames.castledefense
Section 10
//CannonSet2 (com.novelgames.flashgames.castledefense.CannonSet2)
package com.novelgames.flashgames.castledefense {
public dynamic class CannonSet2 extends CannonSet {
}
}//package com.novelgames.flashgames.castledefense
Section 11
//CannonSetRange (com.novelgames.flashgames.castledefense.CannonSetRange)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public dynamic class CannonSetRange extends MovieClip {
}
}//package com.novelgames.flashgames.castledefense
Section 12
//Castle (com.novelgames.flashgames.castledefense.Castle)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.utils.*;
public class Castle extends MovieClip {
private var life:Number;
private var targetLife:Number;
private var castleY:Number;
private var castleX:Number;
private var lastLifeTime:int;
public var lifeBubble:LifeBubble;
private var lifeTimer:Timer;
private var startShakeTime:int;
private var shakeTimer:Timer;
public var castle:MovieClip;
public function Castle(){
castleX = castle.x;
castleY = castle.y;
life = Config.CASTLE_LIFE;
targetLife = life;
lifeBubble.updateBar(1);
lifeBubble.visible = false;
}
private function lifeStayFinished(_arg1:TimerEvent):void{
lifeBubble.visible = false;
}
public function showDamage(_arg1:Number):void{
this.targetLife = _arg1;
lifeBubble.visible = true;
startShakeTime = NewTimer.getTimer();
if (shakeTimer){
shakeTimer.stop();
};
shakeTimer = new NewTimer(1, 0);
shakeTimer.addEventListener(TimerEvent.TIMER, onShakeTime);
shakeTimer.start();
lastLifeTime = NewTimer.getTimer();
if (lifeTimer){
lifeTimer.stop();
};
lifeTimer = new NewTimer(1, 0);
lifeTimer.addEventListener(TimerEvent.TIMER, onLifeTime);
lifeTimer.start();
}
private function onShakeTime(_arg1:TimerEvent):void{
var _local2:int;
var _local3:Number;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - startShakeTime) / Config.CASTLE_SHAKETIME);
if (_local3 > 1){
_local3 = 1;
};
_arg1.updateAfterEvent();
castle.x = (castleX + ((Math.random() < 0.5)) ? -(Config.CASTLE_SHAKEAMPLITUDE) : Config.CASTLE_SHAKEAMPLITUDE);
castle.y = (castleY + ((Math.random() < 0.5)) ? -(Config.CASTLE_SHAKEAMPLITUDE) : Config.CASTLE_SHAKEAMPLITUDE);
if (_local3 >= 1){
shakeTimer.stop();
castle.x = castleX;
castle.y = castleY;
};
}
private function onLifeTime(_arg1:TimerEvent):void{
var _local2:int;
_local2 = NewTimer.getTimer();
life = (life - (((_local2 - lastLifeTime) * Config.CASTLE_LIFESPEED) / 1000));
if (life < targetLife){
life = targetLife;
};
lifeBubble.updateBar((life / Config.CASTLE_LIFE));
lastLifeTime = _local2;
if (life <= targetLife){
lifeTimer.stop();
lifeTimer = new NewTimer(Config.CASTLE_LIFESTAYTIME, 1);
lifeTimer.addEventListener(TimerEvent.TIMER, lifeStayFinished);
lifeTimer.start();
};
}
}
}//package com.novelgames.flashgames.castledefense
Section 13
//Config (com.novelgames.flashgames.castledefense.Config)
package com.novelgames.flashgames.castledefense {
public class Config {
public static var MONEY_INITIAL:int = 1000;
public static var CASTLE_LIFESTAYTIME:Number = 1000;
public static var MESSAGE_GAMEOVERTIME:int = 2000;
public static var MONEY_PREFIX:String = "$";
public static var BLOCK_SIZE:int = 30;
public static var BUYDIALOG_CANNONNORMALSIZE:Number = 40;
public static var CANNON_TYPES:int = 3;
public static var BUYDIALOG_CORNERRADIUS:Number = 5;
public static var MONEYPOPUP_STAYTIME:int = 200;
public static var BUYDIALOG_BORDERTHICKNESS:Number = 2;
public static var MONEYPOPUP_MOVETIME:int = 500;
public static var CANNON_INFOS:Array = [[2, 2, 3, 200, 1440, 750], [1, 4, 5, 400, 1080, 1000], [40, 0.5, 2, 600, 720, 500]];
public static var CASTLE_LIFESPEED:Number = 20;
public static var BUYDIALOG_MINWIDTH:Number = 210;
public static var BUYDIALOG_CANNONHIGHLIGHTSIZE:Number = 50;
public static var DIALOG_SHADEALPHA:Number = 0.7;
public static var CASTLE_SHAKETIME:int = 100;
public static var FIELD_LAYOUT:Array = [" ", " RRRRR ", " R R ", "RRR R RR C ", " R R R R ", " R R R R RRR ", " R R R RRRR R ", " R R R R ", " RRRR R R ", " R RRRRRRR ", " RRRRR "];
public static var DIALOG_SHADECOLOUR:uint = 0;
public static var FIELD_X:Number = 0;
public static var FIELD_Y:Number = 40;
public static var CANNON_SELLPRICERATIO:Number = 0.5;
public static var LEVEL_LIFEINCREASE:int = 5;
public static var BUYDIALOG_FOREGROUNDCOLOUR:uint = 13748346;
public static var ENEMY_TYPES:int = 3;
public static var ENEMY_INFOS:Array = [[20, 100, 360, 10, 50, 50], [10, 500, 720, 5, 100, 100], [100, 50, 180, 50, 150, 200]];
public static var LEVEL_INFOS:Array = [[[0, 8]], [[0, 8]], [[1, 3]], [[2, 3]], [[0, 7], [1, 3]], [[1, 5], [0, 10]], [[0, 10], [2, 10], [1, 10]], [[2, 10], [1, 10], [0, 20]], [[1, 10], [0, 10], [2, 20]], [[0, 20], [2, 20], [1, 20]]];
public static var FIELD_DIMENSIONX:int = 20;
public static var FIELD_DIMENSIONY:int = 12;
public static var MESSAGE_LEVELTIME:int = 1500;
public static var CASTLE_LIFE:Number = 100;
public static var CASTLE_SHAKEAMPLITUDE:Number = 2;
public static var BUYDIALOG_TABSIZE:Number = 70;
public static var BUYDIALOG_HEIGHT:Number = 270;
public static var BUYDIALOG_BORDERCOLOUR:uint = 0x3333;
public static var BUYDIALOG_BACKGROUNDCOLOUR:uint = 11576638;
public static var MESSAGE_LEVELCLEARTIME:int = 1000;
public static var SCORE_LEVEL:int = 1000;
public static var MESSAGE_ALLCLEARTIME:int = 2000;
public static var MONEYPOPUP_MOVEHEIGHT:Number = 20;
public static var LEVEL_NO:int = 10;
public static var BUYDIALOG_BACKGROUNDINSET:Number = 5;
}
}//package com.novelgames.flashgames.castledefense
Section 14
//Cross (com.novelgames.flashgames.castledefense.Cross)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public dynamic class Cross extends MovieClip {
}
}//package com.novelgames.flashgames.castledefense
Section 15
//Enemy (com.novelgames.flashgames.castledefense.Enemy)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public class Enemy extends MovieClip {
public var currentY:int;
public var currentX:int;
public var life:Number;
public var speed:Number;
private var turnTarget:Number;
public var damage:Number;
public var score:int;
public var type:int;
public var moveToY:int;
public var moveToX:int;
private var isTurning:Boolean;
public var distanceFromCurrent:Number;
public var turnSpeed:Number;
public var money:int;
private function turnAngle(_arg1:Number):Number{
var _local2:Number;
var _local3:Number;
_local2 = (turnTarget - rotation);
if (_local2 > 180){
_local2 = (_local2 - 360);
} else {
if (_local2 < -180){
_local2 = (_local2 + 360);
};
};
_local3 = (_arg1 - Math.abs(_local2));
if (_local3 <= 0){
_local3 = 0;
_arg1 = ((_local2 > 0)) ? _arg1 : -(_arg1);
} else {
_arg1 = _local2;
isTurning = false;
};
rotation = (rotation + _arg1);
return (_local3);
}
public function initialize(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{
this.type = _arg1;
this.life = (_arg4 + Config.ENEMY_INFOS[_arg1][0]);
this.speed = Config.ENEMY_INFOS[_arg1][1];
this.turnSpeed = Config.ENEMY_INFOS[_arg1][2];
this.damage = Config.ENEMY_INFOS[_arg1][3];
this.money = Config.ENEMY_INFOS[_arg1][4];
this.score = Config.ENEMY_INFOS[_arg1][5];
this.currentX = _arg2;
this.currentY = _arg3;
this.moveToX = _arg2;
this.moveToY = _arg3;
if (_arg2 == -1){
this.moveToX++;
this.rotation = 0;
} else {
if (_arg2 == Config.FIELD_DIMENSIONX){
this.moveToX--;
this.rotation = 180;
} else {
if (_arg3 == -1){
this.moveToY++;
this.rotation = 90;
} else {
this.moveToY--;
this.rotation = -90;
};
};
};
this.distanceFromCurrent = 0;
this.x = ((_arg2 * Config.BLOCK_SIZE) + (Config.BLOCK_SIZE / 2));
this.y = ((_arg3 * Config.BLOCK_SIZE) + (Config.BLOCK_SIZE / 2));
isTurning = false;
}
private function updateDirection():void{
var _local1:int;
var _local2:int;
x = ((moveToX * Config.BLOCK_SIZE) + (Config.BLOCK_SIZE / 2));
y = ((moveToY * Config.BLOCK_SIZE) + (Config.BLOCK_SIZE / 2));
if (!Object(parent.parent).roads[moveToX][moveToY]){
currentX = moveToX;
currentY = moveToY;
return;
};
_local1 = Object(parent.parent).roads[moveToX][moveToY].getNextDirection(currentX, currentY);
if ((currentY - 1) == moveToY){
_local2 = Road.DIRECTION_UP;
} else {
if ((currentY + 1) == moveToY){
_local2 = Road.DIRECTION_DOWN;
} else {
if ((currentX - 1) == moveToX){
_local2 = Road.DIRECTION_LEFT;
} else {
_local2 = Road.DIRECTION_RIGHT;
};
};
};
currentX = moveToX;
currentY = moveToY;
distanceFromCurrent = 0;
switch (_local1){
case Road.DIRECTION_UP:
moveToY--;
break;
case Road.DIRECTION_DOWN:
moveToY++;
break;
case Road.DIRECTION_LEFT:
moveToX--;
break;
case Road.DIRECTION_RIGHT:
moveToX++;
break;
};
if (_local2 == _local1){
return;
};
isTurning = true;
switch (_local1){
case Road.DIRECTION_UP:
turnTarget = -90;
break;
case Road.DIRECTION_DOWN:
turnTarget = 90;
break;
case Road.DIRECTION_LEFT:
turnTarget = 180;
break;
case Road.DIRECTION_RIGHT:
turnTarget = 0;
break;
};
}
public function move(_arg1:Number, _arg2:Number):void{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
_local3 = 0;
_local6 = 0;
if (!isTurning){
_local3 = ((speed * _arg1) / 1000);
if (_local3 > _arg2){
_local3 = _arg2;
};
if ((_local3 + distanceFromCurrent) >= Config.BLOCK_SIZE){
_local6 = (((Config.BLOCK_SIZE - distanceFromCurrent) * 1000) / speed);
_local3 = (Config.BLOCK_SIZE - distanceFromCurrent);
};
moveDistance(_local3);
if (_local6 > 0){
updateDirection();
};
} else {
_local4 = ((turnSpeed * _arg1) / 1000);
_local5 = turnAngle(_local4);
if (_local5 > 0){
_local6 = ((_local5 * 1000) / turnSpeed);
};
};
if (_local6 > 0){
move(_local6, (_arg2 - _local3));
};
}
private function moveDistance(_arg1:Number):void{
x = (x + ((moveToX - currentX) * _arg1));
y = (y + ((moveToY - currentY) * _arg1));
distanceFromCurrent = (distanceFromCurrent + _arg1);
}
}
}//package com.novelgames.flashgames.castledefense
Section 16
//Enemy0 (com.novelgames.flashgames.castledefense.Enemy0)
package com.novelgames.flashgames.castledefense {
public dynamic class Enemy0 extends Enemy {
}
}//package com.novelgames.flashgames.castledefense
Section 17
//Enemy1 (com.novelgames.flashgames.castledefense.Enemy1)
package com.novelgames.flashgames.castledefense {
public dynamic class Enemy1 extends Enemy {
}
}//package com.novelgames.flashgames.castledefense
Section 18
//Enemy2 (com.novelgames.flashgames.castledefense.Enemy2)
package com.novelgames.flashgames.castledefense {
public dynamic class Enemy2 extends Enemy {
}
}//package com.novelgames.flashgames.castledefense
Section 19
//Explosion (com.novelgames.flashgames.castledefense.Explosion)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.utils.*;
public class Explosion extends MovieClip {
private var totalTime:int;
private var timer:Timer;
private var startTime:int;
private function onTime(_arg1:TimerEvent):void{
var _local2:int;
var _local3:Number;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - startTime) / totalTime);
if (_local3 > 1){
_local3 = 1;
};
_arg1.updateAfterEvent();
gotoAndStop((1 + Math.floor((_local3 * totalFrames))));
if (_local3 >= 1){
timer.stop();
parent.removeChild(this);
};
}
public function initialize(){
startTime = NewTimer.getTimer();
totalTime = Math.floor(((totalFrames * 1000) / stage.frameRate));
timer = new NewTimer(1, 0);
timer.addEventListener(TimerEvent.TIMER, onTime);
timer.start();
stop();
}
}
}//package com.novelgames.flashgames.castledefense
Section 20
//ExplosionBullet (com.novelgames.flashgames.castledefense.ExplosionBullet)
package com.novelgames.flashgames.castledefense {
public dynamic class ExplosionBullet extends Explosion {
}
}//package com.novelgames.flashgames.castledefense
Section 21
//ExplosionCastle (com.novelgames.flashgames.castledefense.ExplosionCastle)
package com.novelgames.flashgames.castledefense {
public dynamic class ExplosionCastle extends Explosion {
}
}//package com.novelgames.flashgames.castledefense
Section 22
//ExplosionEnemy (com.novelgames.flashgames.castledefense.ExplosionEnemy)
package com.novelgames.flashgames.castledefense {
public dynamic class ExplosionEnemy extends Explosion {
}
}//package com.novelgames.flashgames.castledefense
Section 23
//Game (com.novelgames.flashgames.castledefense.Game)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.media.*;
import flash.utils.*;
import flash.text.*;
import flash.geom.*;
public class Game extends Game {
private var minRoadX:int;
public var message:Message;
public var moneyText:TextField;
private var minRoadY:int;
private var soundGameOver:Sound;
private var enemies:Array;
private var maxRoadX:int;
private var maxRoadY:int;
public var cannonSetsHolder:MovieClip;
private var castleX:int;
private var castleY:int;
private var enterX:int;
private var lastTime:int;
private var enterY:int;
private var __score:int;
public var bulletsHolder:MovieClip;
public var levelText:TextField;
public var scoreText:TextField;
private var __money:int;
public var roadsHolder:MovieClip;
private var soundCastle:Sound;
private var soundBuySell:Sound;
private var cannonSets:Array;
private var life:Number;
private var castle:Castle;
public var sellButton:SimpleButton;
public var sellDialog:SellDialog;
public var putDialog:PutDialog;
public var moneysHolder:MovieClip;
private var timer:Timer;
public var roads:Array;
public var buyButton:SimpleButton;
private var soundAllClear:Sound;
public var buyDialog:BuyDialog;
public var enemiesHolder:MovieClip;
public var explosionsHolder:MovieClip;
private var soundLevelClear:Sound;
private var __level:int;
private var bullets:Array;
private var soundEnemy:Sound;
public function Game(){
level = 1;
score = 0;
money = Config.MONEY_INITIAL;
life = Config.CASTLE_LIFE;
soundEnemy = new SoundEnemy();
soundCastle = new SoundCastle();
soundLevelClear = new SoundLevelClear();
soundAllClear = new SoundAllClear();
soundBuySell = new SoundBuySell();
soundGameOver = new SoundGameOver();
startGame();
}
private function moveCannons(_arg1:int):void{
var _local2:int;
var _local3:int;
_local2 = 0;
while (_local2 < Config.FIELD_DIMENSIONX) {
_local3 = 0;
while (_local3 < Config.FIELD_DIMENSIONY) {
if (!cannonSets[_local2][_local3]){
} else {
if (cannonSets[_local2][_local3].move(_arg1, enemies)){
addBullet(_local2, _local3);
};
};
_local3++;
};
_local2++;
};
}
private function startNextLevel(_arg1:TimerEvent):void{
startLevel((level + 1));
}
private function showSellDialog(_arg1:MouseEvent):void{
pause();
sellDialog.x = Config.FIELD_X;
sellDialog.y = Config.FIELD_Y;
sellDialog.show(cannonSets);
}
private function getInterEnemyDistance(_arg1:Enemy, _arg2:Enemy):Number{
var _local3:Number;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = (_arg2.distanceFromCurrent - _arg1.distanceFromCurrent);
_local4 = _arg1.currentX;
_local5 = _arg1.currentY;
_local6 = _arg1.moveToX;
_local7 = _arg1.moveToY;
while (((!((_local4 == _arg2.currentX))) || (!((_local5 == _arg2.currentY))))) {
_local3 = (_local3 + Config.BLOCK_SIZE);
_local8 = _local4;
_local9 = _local5;
_local4 = _local6;
_local5 = _local7;
if (!roads[_local6][_local7]){
break;
};
switch (roads[_local6][_local7].getNextDirection(_local8, _local9)){
case Road.DIRECTION_UP:
_local7--;
break;
case Road.DIRECTION_DOWN:
_local7++;
break;
case Road.DIRECTION_LEFT:
_local6--;
break;
case Road.DIRECTION_RIGHT:
_local6++;
break;
};
};
return (_local3);
}
private function showLevelFinished(_arg1:TimerEvent):void{
message.hide();
createEnemies();
bullets = new Array();
lastTime = NewTimer.getTimer();
timer = new NewTimer(1, 0);
timer.addEventListener(TimerEvent.TIMER, onPlayTime);
timer.start();
buyButton.addEventListener(MouseEvent.CLICK, showBuyDialog);
buyButton.enabled = true;
sellButton.addEventListener(MouseEvent.CLICK, showSellDialog);
sellButton.enabled = true;
showBuyDialog();
}
private function showPlayAgain(_arg1:TimerEvent):void{
Object(parent).showEnterHighScore(score);
message.showPlayAgain();
}
private function checkHitEnemies(_arg1:Bullet, _arg2:Number, _arg3:Number):Boolean{
var _local4:int;
_local4 = 0;
while (_local4 < enemies.length) {
if (checkHitEnemy(_arg1, _arg2, _arg3, enemies[_local4])){
enemies[_local4].life = (enemies[_local4].life - _arg1.power);
if (enemies[_local4].life <= 0){
createExplosionEnemy(enemies[_local4].x, enemies[_local4].y);
createMoneyPopup(enemies[_local4].x, enemies[_local4].y, enemies[_local4].money);
money = (money + enemies[_local4].money);
score = (score + enemies[_local4].score);
enemiesHolder.removeChild(enemies[_local4]);
enemies.splice(_local4, 1);
soundEnemy.play();
};
return (true);
};
_local4++;
};
return (false);
}
private function createRoad(_arg1:int, _arg2:int):void{
var _local3:Road;
_local3 = new Road();
_local3.initialize(_arg1, _arg2);
roads[_arg1][_arg2] = _local3;
roadsHolder.addChild(_local3);
}
private function checkHitCastle():void{
if (enemies.length == 0){
return;
};
if (((!((enemies[0].currentX == castleX))) || (!((enemies[0].currentY == castleY))))){
return;
};
life = (life - enemies[0].damage);
if (life < 0){
life = 0;
};
castle.showDamage(life);
createExplosionEnemy(enemies[0].x, enemies[0].y);
createExplosionCastle();
enemiesHolder.removeChild(enemies[0]);
enemies.splice(0, 1);
soundCastle.play();
}
private function checkLevelClear():Boolean{
var _local1:int;
if (enemies.length > 0){
return (false);
};
score = (score + Config.SCORE_LEVEL);
_local1 = 0;
while (_local1 < bullets.length) {
bulletsHolder.removeChild(bullets[_local1]);
_local1++;
};
bullets = new Array();
timer.stop();
buyButton.removeEventListener(TimerEvent.TIMER, showBuyDialog);
buyButton.enabled = false;
sellButton.removeEventListener(TimerEvent.TIMER, showSellDialog);
buyButton.enabled = false;
if (level < Config.LEVEL_NO){
message.showLevelClear();
soundLevelClear.play();
timer = new NewTimer(Config.MESSAGE_LEVELCLEARTIME, 1);
timer.addEventListener(TimerEvent.TIMER, startNextLevel);
timer.start();
} else {
message.showAllClear();
soundAllClear.play();
timer = new NewTimer(Config.MESSAGE_ALLCLEARTIME, 1);
timer.addEventListener(TimerEvent.TIMER, showPlayAgain);
timer.start();
};
return (true);
}
private function getCannotPutCannonBlocks():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
_local1 = new Array();
_local2 = 0;
while (_local2 < Config.FIELD_DIMENSIONX) {
_local3 = 0;
while (_local3 < Config.FIELD_DIMENSIONY) {
if (getCanPutCannon(_local2, _local3)){
} else {
_local1.push({x:_local2, y:_local3});
};
_local3++;
};
_local2++;
};
return (_local1);
}
private function startLevel(_arg1:int):void{
this.level = _arg1;
buyButton.enabled = false;
sellButton.enabled = false;
message.showLevel(_arg1);
timer = new NewTimer(Config.MESSAGE_LEVELTIME, 1);
timer.addEventListener(TimerEvent.TIMER, showLevelFinished);
timer.start();
}
public function addCannonSet(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:int;
var _local5:Class;
var _local6:CannonSet;
_local4 = getCannonDirection(_arg1, _arg2);
_local5 = Class(getDefinitionByName(("com.novelgames.flashgames.castledefense.CannonSet" + _arg3)));
_local6 = new (_local5);
_local6.x = ((Config.BLOCK_SIZE / 2) + (_arg1 * Config.BLOCK_SIZE));
_local6.y = ((Config.BLOCK_SIZE / 2) + (_arg2 * Config.BLOCK_SIZE));
_local6.initialize(_arg3);
switch (_local4){
case Road.DIRECTION_UP:
_local6.setDefaultRotation(-90);
break;
case Road.DIRECTION_DOWN:
_local6.setDefaultRotation(90);
break;
case Road.DIRECTION_LEFT:
_local6.setDefaultRotation(180);
break;
case Road.DIRECTION_RIGHT:
_local6.setDefaultRotation(0);
break;
};
cannonSets[_arg1][_arg2] = _local6;
cannonSetsHolder.addChild(_local6);
showBuyDialog();
}
public function get score():int{
return (__score);
}
private function createCannons():void{
var _local1:int;
var _local2:int;
cannonSets = new Array();
_local1 = 0;
while (_local1 < Config.FIELD_DIMENSIONX) {
cannonSets[_local1] = new Array();
_local2 = 0;
while (_local2 < Config.FIELD_DIMENSIONY) {
cannonSets[_local1][_local2] = null;
_local2++;
};
_local1++;
};
}
private function moveBullets(_arg1:int):void{
var _local2:Number;
var _local3:Number;
var _local4:Boolean;
var _local5:int;
_local5 = 0;
while (_local5 < bullets.length) {
_local2 = bullets[_local5].x;
_local3 = bullets[_local5].y;
_local4 = bullets[_local5].move(_arg1);
if (checkHitEnemies(bullets[_local5], _local2, _local3)){
_local4 = true;
};
if (_local4){
bulletsHolder.removeChild(bullets[_local5]);
bullets.splice(_local5, 1);
_local5--;
};
_local5++;
};
}
private function getCannonDirection(_arg1:int, _arg2:int):int{
var _local3:Array;
var _local4:Array;
var _local5:Array;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Boolean;
var _local10:Boolean;
var _local11:Boolean;
var _local12:Boolean;
var _local13:int;
var _local14:int;
_local3 = [Road.DIRECTION_UP, Road.DIRECTION_DOWN, Road.DIRECTION_LEFT, Road.DIRECTION_RIGHT];
_local4 = [[0, -1], [0, 1], [-1, 0], [1, 0]];
_local6 = int.MAX_VALUE;
if (_arg1 < minRoadX){
return (Road.DIRECTION_RIGHT);
};
if (_arg1 > maxRoadX){
return (Road.DIRECTION_LEFT);
};
if (_arg2 < minRoadY){
return (Road.DIRECTION_DOWN);
};
if (_arg2 > maxRoadY){
return (Road.DIRECTION_UP);
};
_local13 = 0;
while (_local13 < _local3.length) {
_local14 = 1;
while (true) {
_local7 = (_arg1 + (_local14 * _local4[_local13][0]));
_local8 = (_arg2 + (_local14 * _local4[_local13][1]));
if ((((((((_local7 < 0)) || ((_local7 >= Config.FIELD_DIMENSIONX)))) || ((_local8 < 0)))) || ((_local8 >= Config.FIELD_DIMENSIONY)))){
break;
};
if (roads[_local7][_local8] == null){
} else {
if (_local14 == _local6){
_local5.push(_local3[_local13]);
} else {
if (_local14 < _local6){
_local5 = [_local3[_local13]];
_local6 = _local14;
};
};
break;
};
_local14++;
};
_local13++;
};
_local9 = false;
_local10 = false;
_local11 = false;
_local12 = false;
_local13 = 0;
while (_local13 < _local5.length) {
switch (_local5[_local13]){
case Road.DIRECTION_UP:
_local11 = true;
break;
case Road.DIRECTION_DOWN:
_local12 = true;
break;
case Road.DIRECTION_LEFT:
_local9 = true;
break;
case Road.DIRECTION_RIGHT:
_local10 = true;
break;
};
_local13++;
};
switch (_local5.length){
case 1:
return (_local5[0]);
case 2:
if (((_local9) && (_local10))){
return (((_arg2 >= (Config.FIELD_DIMENSIONY / 2))) ? Road.DIRECTION_UP : Road.DIRECTION_DOWN);
};
if (((_local11) && (_local12))){
return (((_arg1 >= (Config.FIELD_DIMENSIONX / 2))) ? Road.DIRECTION_LEFT : Road.DIRECTION_RIGHT);
};
if (Math.abs((_arg1 - (Config.FIELD_DIMENSIONX / 2))) > Math.abs((_arg2 - (Config.FIELD_DIMENSIONY / 2)))){
return ((_local9) ? Road.DIRECTION_LEFT : Road.DIRECTION_RIGHT);
} else {
return ((_local11) ? Road.DIRECTION_UP : Road.DIRECTION_DOWN);
};
case 3:
if (!_local9){
return (Road.DIRECTION_RIGHT);
};
if (!_local10){
return (Road.DIRECTION_LEFT);
};
if (!_local11){
return (Road.DIRECTION_DOWN);
};
if (!_local12){
return (Road.DIRECTION_UP);
};
default:
if (Math.abs((_arg1 - (Config.FIELD_DIMENSIONX / 2))) > Math.abs((_arg2 - (Config.FIELD_DIMENSIONY / 2)))){
return (((_arg1 >= (Config.FIELD_DIMENSIONX / 2))) ? Road.DIRECTION_LEFT : Road.DIRECTION_RIGHT);
} else {
return (((_arg2 >= (Config.FIELD_DIMENSIONY / 2))) ? Road.DIRECTION_UP : Road.DIRECTION_DOWN);
};
};
}
public function get money():int{
return (__money);
}
private function checkHitEnemy(_arg1:Bullet, _arg2:Number, _arg3:Number, _arg4:Enemy):Boolean{
var _local5:Number;
var _local6:Number;
var _local7:int;
var _local8:Number;
var _local9:Number;
var _local10:int;
_local5 = (_arg1.x - _arg2);
_local6 = (_arg1.y - _arg3);
_local7 = Math.ceil((Math.max(Math.abs(_local5), Math.abs(_local6)) / (Config.BLOCK_SIZE / 2)));
_local10 = 1;
while (_local10 <= _local7) {
_local8 = (_arg2 + ((_local5 * _local10) / _local7));
_local9 = (_arg3 + ((_local6 * _local10) / _local7));
if (_arg4.hitTestPoint((_local8 + Config.FIELD_X), (_local9 + Config.FIELD_Y), false)){
createExplosionBullet(_local8, _local9);
return (true);
};
_local10++;
};
return (false);
}
private function showBuyDialog(_arg1:MouseEvent=null):void{
pause();
buyDialog.show();
}
public function sellCannonSet(_arg1:int, _arg2:int):void{
var _local3:CannonSet;
_local3 = cannonSets[_arg1][_arg2];
money = (money + (_local3.price * Config.CANNON_SELLPRICERATIO));
cannonSetsHolder.removeChild(_local3);
cannonSets[_arg1][_arg2] = null;
soundBuySell.play();
}
public function set level(_arg1:int):void{
__level = _arg1;
levelText.text = _arg1.toString();
}
private function checkGameOver():Boolean{
if (life > 0){
return (false);
};
timer.stop();
buyButton.removeEventListener(TimerEvent.TIMER, showBuyDialog);
buyButton.enabled = false;
sellButton.removeEventListener(TimerEvent.TIMER, showSellDialog);
buyButton.enabled = false;
message.showGameOver();
soundGameOver.play();
timer = new NewTimer(Config.MESSAGE_GAMEOVERTIME, 1);
timer.addEventListener(TimerEvent.TIMER, showPlayAgain);
timer.start();
return (true);
}
private function addBullet(_arg1:int, _arg2:int):void{
var _local3:CannonSet;
var _local4:Class;
var _local5:Bullet;
_local3 = cannonSets[_arg1][_arg2];
_local4 = Class(getDefinitionByName(("com.novelgames.flashgames.castledefense.Bullet" + _local3.type)));
_local5 = new (_local4);
_local5.initialize(cannonSets[_arg1][_arg2].x, cannonSets[_arg1][_arg2].y, cannonSets[_arg1][_arg2].power, cannonSets[_arg1][_arg2].bulletSpeed, cannonSets[_arg1][_arg2].bulletDistance, cannonSets[_arg1][_arg2].cannon.rotation);
bullets.push(_local5);
bulletsHolder.addChild(_local5);
}
private function createCastle():void{
castle = new Castle();
castle.x = (castleX * Config.BLOCK_SIZE);
castle.y = (castleY * Config.BLOCK_SIZE);
roadsHolder.addChild(castle);
}
private function moveEnemies(_arg1:int):void{
var _local2:Number;
var _local3:int;
_local2 = Number.POSITIVE_INFINITY;
_local3 = 0;
while (_local3 < enemies.length) {
enemies[_local3].move(_arg1, _local2);
if ((((_local3 >= 0)) && ((_local3 < (enemies.length - 1))))){
_local2 = (getInterEnemyDistance(enemies[(_local3 + 1)], enemies[_local3]) - Config.BLOCK_SIZE);
if (_local2 < 0){
_local2 = 0;
};
};
_local3++;
};
}
private function onPlayTime(_arg1:TimerEvent):void{
var _local2:int;
_local2 = NewTimer.getTimer();
_arg1.updateAfterEvent();
moveEnemies((_local2 - lastTime));
moveCannons((_local2 - lastTime));
moveBullets(_local2);
checkHitCastle();
if (!checkGameOver()){
checkLevelClear();
};
lastTime = _local2;
}
public function buyCannon(_arg1:int):void{
var _local2:Array;
_local2 = getCannotPutCannonBlocks();
money = (money - Config.CANNON_INFOS[_arg1][3]);
putDialog.x = Config.FIELD_X;
putDialog.y = Config.FIELD_Y;
putDialog.show(_arg1, _local2);
soundBuySell.play();
}
public function set score(_arg1:int):void{
__score = _arg1;
scoreText.text = _arg1.toString();
}
private function updateRoadDirections():void{
var _local1:int;
var _local2:int;
_local1 = 0;
while (_local1 < roads.length) {
_local2 = 0;
while (_local2 < roads[_local1].length) {
if (!roads[_local1][_local2]){
} else {
roads[_local1][_local2].setDirection(roads);
};
_local2++;
};
_local1++;
};
}
private function startGame():void{
roadsHolder.x = Config.FIELD_X;
roadsHolder.y = Config.FIELD_Y;
cannonSetsHolder.x = Config.FIELD_X;
cannonSetsHolder.y = Config.FIELD_Y;
bulletsHolder.x = Config.FIELD_X;
bulletsHolder.y = Config.FIELD_Y;
enemiesHolder.x = Config.FIELD_X;
enemiesHolder.y = Config.FIELD_Y;
moneysHolder.x = Config.FIELD_X;
moneysHolder.y = Config.FIELD_Y;
explosionsHolder.x = Config.FIELD_X;
explosionsHolder.y = Config.FIELD_Y;
createRoads();
createCastle();
createCannons();
startLevel(1);
}
private function getCanPutCannon(_arg1:int, _arg2:int):Boolean{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
if (roads[_arg1][_arg2] != null){
return (false);
};
if (cannonSets[_arg1][_arg2] != null){
return (false);
};
_local3 = ((_arg1 * Config.BLOCK_SIZE) + Config.FIELD_X);
_local4 = ((_arg2 * Config.BLOCK_SIZE) + Config.FIELD_Y);
_local5 = (_local3 + Config.BLOCK_SIZE);
_local6 = (_local4 + Config.BLOCK_SIZE);
if (getIntersectsThing(_local3, _local4, _local5, _local6, castle.castle)){
return (false);
};
if (getIntersectsThing(_local3, _local4, _local5, _local6, buyButton)){
return (false);
};
if (getIntersectsThing(_local3, _local4, _local5, _local6, sellButton)){
return (false);
};
return (true);
}
public function get level():int{
return (__level);
}
public function set money(_arg1:int):void{
__money = _arg1;
moneyText.text = (Config.MONEY_PREFIX + _arg1.toString());
}
private function createEnemies():void{
var _local1:int;
var _local2:Class;
var _local3:Enemy;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
_local1 = ((level - 1) * Config.LEVEL_LIFEINCREASE);
enemies = new Array();
_local6 = 0;
while (_local6 < Config.LEVEL_INFOS[(level - 1)].length) {
_local4 = Config.LEVEL_INFOS[(level - 1)][_local6][0];
_local5 = Config.LEVEL_INFOS[(level - 1)][_local6][1];
_local2 = Class(getDefinitionByName(("com.novelgames.flashgames.castledefense.Enemy" + _local4)));
_local7 = 0;
while (_local7 < _local5) {
_local3 = new (_local2);
_local3.initialize(_local4, enterX, enterY, _local1);
enemiesHolder.addChild(_local3);
enemies.push(_local3);
_local7++;
};
_local6++;
};
}
public function buyFinished():void{
unpause();
}
private function createExplosionEnemy(_arg1:Number, _arg2:Number):void{
var _local3:ExplosionEnemy;
_local3 = new ExplosionEnemy();
_local3.x = _arg1;
_local3.y = _arg2;
explosionsHolder.addChild(_local3);
_local3.initialize();
}
private function getEnterXY():void{
var _local1:int;
_local1 = 0;
while (_local1 < Config.FIELD_DIMENSIONX) {
if (((roads[_local1][0]) && (roads[_local1][0].toUp))){
enterX = _local1;
enterY = -1;
return;
};
if (((roads[_local1][(Config.FIELD_DIMENSIONY - 1)]) && (roads[_local1][(Config.FIELD_DIMENSIONY - 1)].toDown))){
enterX = _local1;
enterY = Config.FIELD_DIMENSIONY;
return;
};
_local1++;
};
_local1 = 0;
while (_local1 < Config.FIELD_DIMENSIONY) {
if (((roads[0][_local1]) && (roads[0][_local1].toLeft))){
enterX = -1;
enterY = _local1;
return;
};
if (((roads[(Config.FIELD_DIMENSIONX - 1)][_local1]) && (roads[(Config.FIELD_DIMENSIONX - 1)][_local1].toRight))){
enterX = Config.FIELD_DIMENSIONX;
enterY = _local1;
return;
};
_local1++;
};
}
private function createRoads():void{
var _local1:String;
var _local2:int;
var _local3:int;
minRoadX = Config.FIELD_DIMENSIONX;
minRoadY = Config.FIELD_DIMENSIONY;
maxRoadX = -1;
maxRoadY = -1;
roads = new Array();
_local2 = 0;
while (_local2 < Config.FIELD_DIMENSIONX) {
roads[_local2] = new Array();
_local3 = 0;
while (_local3 < Config.FIELD_DIMENSIONY) {
roads[_local2][_local3] = null;
_local3++;
};
_local2++;
};
_local2 = 0;
while (_local2 < Config.FIELD_LAYOUT.length) {
_local3 = 0;
while ((((_local3 < Config.FIELD_LAYOUT[_local2].length)) && ((_local3 < Config.FIELD_DIMENSIONX)))) {
_local1 = Config.FIELD_LAYOUT[_local2].charAt(_local3);
if (_local1 == "R"){
createRoad(_local3, _local2);
if (_local3 < minRoadX){
minRoadX = _local3;
};
if (_local3 > maxRoadX){
maxRoadX = _local3;
};
if (_local2 < minRoadY){
minRoadY = _local2;
};
if (_local2 > maxRoadY){
maxRoadY = _local2;
};
} else {
if (_local1 == "C"){
castleX = _local3;
castleY = _local2;
};
};
_local3++;
};
_local2++;
};
updateRoadDirections();
getEnterXY();
}
private function createExplosionCastle():void{
var _local1:ExplosionCastle;
var _local2:Rectangle;
var _local3:Number;
var _local4:Number;
_local1 = new ExplosionCastle();
_local2 = castle.getBounds(roadsHolder);
while (true) {
_local3 = (_local2.x + (Math.random() * _local2.width));
_local4 = (_local2.y + (Math.random() * _local2.height));
if (castle.hitTestPoint((_local3 - roadsHolder.x), (_local4 - roadsHolder.y), true)){
break;
};
};
_local1.x = _local3;
_local1.y = _local4;
explosionsHolder.addChild(_local1);
_local1.initialize();
}
private function createExplosionBullet(_arg1:Number, _arg2:Number):void{
var _local3:ExplosionBullet;
_local3 = new ExplosionBullet();
_local3.x = _arg1;
_local3.y = _arg2;
explosionsHolder.addChild(_local3);
_local3.initialize();
}
private function getIntersectsThing(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5):Boolean{
var _local6:Rectangle;
_local6 = _arg5.getBounds(this);
if (_arg1 >= _local6.right){
return (false);
};
if (_arg3 <= _local6.left){
return (false);
};
if (_arg2 >= _local6.bottom){
return (false);
};
if (_arg4 <= _local6.top){
return (false);
};
return (true);
}
private function createMoneyPopup(_arg1:Number, _arg2:Number, _arg3:int):void{
var _local4:MoneyPopup;
_local4 = new MoneyPopup();
_local4.initialize(_arg1, _arg2, _arg3);
moneysHolder.addChild(_local4);
}
public function sellFinished():void{
unpause();
}
}
}//package com.novelgames.flashgames.castledefense
Section 24
//LifeBubble (com.novelgames.flashgames.castledefense.LifeBubble)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public class LifeBubble extends MovieClip {
private var maskX:Number;
public var barMask:MovieClip;
public function LifeBubble(){
maskX = barMask.x;
}
public function updateBar(_arg1:Number):void{
barMask.x = (maskX + (barMask.width * _arg1));
}
}
}//package com.novelgames.flashgames.castledefense
Section 25
//Logo (com.novelgames.flashgames.castledefense.Logo)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public dynamic class Logo extends MovieClip {
}
}//package com.novelgames.flashgames.castledefense
Section 26
//Main (com.novelgames.flashgames.castledefense.Main)
package com.novelgames.flashgames.castledefense {
import com.novelgames.flashgames.common.*;
import flash.media.*;
import flash.utils.*;
import com.novelgames.flashgames.preloader.*;
public class Main extends MainDevelopment {
public var __setPropDict:Dictionary;
public var title:Title;
public var __id0_:Preloader;
public function Main(){
__setPropDict = new Dictionary(true);
super();
addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8, 8, frame9, 9, frame10);
}
override protected function getMusicGame():Sound{
return (new MusicGame());
}
function frame10(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame3(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame6(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame1(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame7(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame4(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
override protected function getGame():Game{
return (new Game());
}
function frame9(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame8(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame2(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
function frame5(){
if ((((__setPropDict[__id0_] == undefined)) || (!((((int(__setPropDict[__id0_]) >= 1)) && ((int(__setPropDict[__id0_]) <= 10))))))){
__setPropDict[__id0_] = currentFrame;
__setProp___id0__Scene1_preloader_1();
};
}
override protected function getTitle():Title{
return (title);
}
function __setProp___id0__Scene1_preloader_1(){
try {
__id0_["componentInspectorSetting"] = true;
} catch(e:Error) {
};
__id0_.background = "com.novelgames.flashgames.castledefense.Logo";
__id0_.barBorderColour = 0xFFFF00;
__id0_.barBorderThickness = 2;
__id0_.barColourBottom = 0xFF0000;
__id0_.barColourTop = 0xFF0000;
__id0_.barHeight = 20;
__id0_.barWidth = 100;
__id0_.barX = 250;
__id0_.barY = 300;
__id0_.enabled = true;
__id0_.minShowTime = 1000;
__id0_.playOrStop = "stop";
__id0_.startLabel = "game";
__id0_.visible = true;
try {
__id0_["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package com.novelgames.flashgames.castledefense
Section 27
//Message (com.novelgames.flashgames.castledefense.Message)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
public class Message extends MovieClip {
private var messagePlayAgain:MessagePlayAgain;
private var messageLevel:MessageLevel;
public function Message(){
stop();
}
public function showLevelClear():void{
hide();
gotoAndStop("levelClear");
}
public function showGameOver():void{
hide();
gotoAndStop("gameOver");
}
public function showPlayAgain():void{
hide();
messagePlayAgain = new MessagePlayAgain();
messagePlayAgain.playAgainButton.addEventListener(MouseEvent.CLICK, playAgainButtonClicked);
messagePlayAgain.homeButton.addEventListener(MouseEvent.CLICK, homeButtonClicked);
this.addChild(messagePlayAgain);
}
public function showAllClear():void{
hide();
gotoAndStop("allClear");
}
private function playAgainButtonClicked(_arg1:MouseEvent):void{
Object(parent.parent).gotoGamePage();
}
public function hide():void{
if (messageLevel){
this.removeChild(messageLevel);
messageLevel = null;
};
gotoAndStop("hide");
}
public function showLevel(_arg1:int):void{
hide();
messageLevel = new MessageLevel();
messageLevel.levelText.text = _arg1.toString();
this.addChild(messageLevel);
}
private function homeButtonClicked(_arg1:MouseEvent):void{
Object(parent.parent).gotoTitlePage();
}
}
}//package com.novelgames.flashgames.castledefense
Section 28
//MessageLevel (com.novelgames.flashgames.castledefense.MessageLevel)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.text.*;
public dynamic class MessageLevel extends MovieClip {
public var levelText:TextField;
}
}//package com.novelgames.flashgames.castledefense
Section 29
//MessagePlayAgain (com.novelgames.flashgames.castledefense.MessagePlayAgain)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public dynamic class MessagePlayAgain extends MovieClip {
public var playAgainButton:SimpleButton;
public var homeButton:SimpleButton;
}
}//package com.novelgames.flashgames.castledefense
Section 30
//MoneyPopup (com.novelgames.flashgames.castledefense.MoneyPopup)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.utils.*;
import flash.text.*;
public class MoneyPopup extends MovieClip {
public var moneyText:TextField;
private var timer:Timer;
private var startTime:int;
private var originalY:Number;
private function stayFinished(_arg1:TimerEvent):void{
parent.removeChild(this);
}
private function onMoveTime(_arg1:TimerEvent):void{
var _local2:int;
var _local3:Number;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - startTime) / Config.MONEYPOPUP_MOVETIME);
if (_local3 > 1){
_local3 = 1;
};
_arg1.updateAfterEvent();
y = (originalY - (Math.sin((_local3 * Math.PI)) * Config.MONEYPOPUP_MOVEHEIGHT));
if (_local3 >= 1){
timer.stop();
timer = new NewTimer(Config.MONEYPOPUP_STAYTIME, 1);
timer.addEventListener(TimerEvent.TIMER, stayFinished);
timer.start();
};
}
public function initialize(_arg1:Number, _arg2:Number, _arg3:int):void{
this.x = _arg1;
this.y = _arg2;
moneyText.text = (Config.MONEY_PREFIX + _arg3);
originalY = _arg2;
startTime = NewTimer.getTimer();
timer = new NewTimer(1, 0);
timer.addEventListener(TimerEvent.TIMER, onMoveTime);
timer.start();
}
}
}//package com.novelgames.flashgames.castledefense
Section 31
//MusicGame (com.novelgames.flashgames.castledefense.MusicGame)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class MusicGame extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 32
//PutDialog (com.novelgames.flashgames.castledefense.PutDialog)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class PutDialog extends MovieClip {
private var cannonY:int;
private var cannonSet:CannonSet;
private var range:CannonSetRange;
private var cross:Cross;
private var cannonX:int;
private var cannotPutBlocks:Array;
private var index:int;
public function PutDialog(){
visible = false;
}
public function show(_arg1:int, _arg2:Array):void{
this.index = _arg1;
this.cannotPutBlocks = _arg2;
drawBackground();
createCannonSet();
createCross();
createRange();
this.addEventListener(MouseEvent.MOUSE_MOVE, onDragMouseMove);
this.addEventListener(MouseEvent.MOUSE_DOWN, onDragMouseDown);
onDragMouseMove();
visible = true;
}
public function hide():void{
this.removeEventListener(MouseEvent.MOUSE_MOVE, onDragMouseMove);
this.removeEventListener(MouseEvent.MOUSE_DOWN, onDragMouseDown);
visible = false;
}
private function onDragMouseDown(_arg1:MouseEvent):void{
if (cross.visible){
return;
};
hide();
Object(parent).addCannonSet(cannonX, cannonY, index);
}
private function createCannonSet():void{
var _local1:Class;
if (cannonSet){
this.removeChild(cannonSet);
};
_local1 = Class(getDefinitionByName(("com.novelgames.flashgames.castledefense.CannonSet" + index)));
cannonSet = new (_local1);
cannonSet.initialize(index);
this.addChild(cannonSet);
}
private function drawBackground():void{
var _local1:Number;
var _local2:Number;
var _local3:int;
this.graphics.clear();
this.graphics.beginFill(0, 0);
this.graphics.moveTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.endFill();
if (Config.FIELD_Y > 0){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), 0);
this.graphics.lineTo(-(Config.FIELD_X), 0);
this.graphics.lineTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.endFill();
};
if (Config.FIELD_X > 0){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), 0);
this.graphics.lineTo(0, 0);
this.graphics.lineTo(0, (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo(-(Config.FIELD_X), 0);
this.graphics.endFill();
};
if ((Config.FIELD_X + (Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE)) < stage.stageWidth){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), 0);
this.graphics.lineTo((stage.stageWidth - Config.FIELD_X), 0);
this.graphics.lineTo((stage.stageWidth - Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), 0);
this.graphics.endFill();
};
if ((Config.FIELD_Y + (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE)) < stage.stageHeight){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.endFill();
};
_local3 = 0;
while (_local3 < cannotPutBlocks.length) {
_local1 = (cannotPutBlocks[_local3].x * Config.BLOCK_SIZE);
_local2 = (cannotPutBlocks[_local3].y * Config.BLOCK_SIZE);
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(_local1, _local2);
this.graphics.lineTo((_local1 + Config.BLOCK_SIZE), _local2);
this.graphics.lineTo((_local1 + Config.BLOCK_SIZE), (_local2 + Config.BLOCK_SIZE));
this.graphics.lineTo(_local1, (_local2 + Config.BLOCK_SIZE));
this.graphics.lineTo(_local1, _local2);
this.graphics.endFill();
_local3++;
};
}
private function createRange():void{
var _local1:Number;
_local1 = cannonSet.bulletDistance;
if (range){
this.removeChild(range);
};
range = new CannonSetRange();
range.width = (_local1 * 2);
range.height = (_local1 * 2);
this.addChildAt(range, 1);
}
private function onDragMouseMove(_arg1:MouseEvent=null):void{
var _local2:int;
cannonX = Math.floor((mouseX / Config.BLOCK_SIZE));
cannonY = Math.floor((mouseY / Config.BLOCK_SIZE));
if (cannonX < 0){
cannonX = 0;
} else {
if (cannonX >= Config.FIELD_DIMENSIONX){
cannonX = (Config.FIELD_DIMENSIONX - 1);
};
};
if (cannonY < 0){
cannonY = 0;
} else {
if (cannonY >= Config.FIELD_DIMENSIONY){
cannonY = (Config.FIELD_DIMENSIONY - 1);
};
};
_local2 = 0;
while (_local2 < cannotPutBlocks.length) {
if ((((cannotPutBlocks[_local2].x == cannonX)) && ((cannotPutBlocks[_local2].y == cannonY)))){
break;
};
_local2++;
};
cannonSet.x = ((Config.BLOCK_SIZE / 2) + (cannonX * Config.BLOCK_SIZE));
cannonSet.y = ((Config.BLOCK_SIZE / 2) + (cannonY * Config.BLOCK_SIZE));
range.x = cannonSet.x;
range.y = cannonSet.y;
if (_local2 < cannotPutBlocks.length){
cross.x = cannonSet.x;
cross.y = cannonSet.y;
cross.visible = true;
this.buttonMode = true;
} else {
cross.visible = false;
this.buttonMode = false;
};
}
private function createCross():void{
if (cross){
this.removeChild(cross);
};
cross = new Cross();
this.addChild(cross);
}
}
}//package com.novelgames.flashgames.castledefense
Section 33
//Road (com.novelgames.flashgames.castledefense.Road)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
public class Road extends MovieClip {
public var toLeft:Boolean;
public var toRight:Boolean;
public var toUp:Boolean;
public var toDown:Boolean;
public var indexX:int;
public var indexY:int;
public static var DIRECTION_DOWN:int = 2;
public static var DIRECTION_LEFT:int = 3;
public static var DIRECTION_NONE:int = 0;
public static var DIRECTION_UP:int = 1;
public static var DIRECTION_RIGHT:int = 4;
public function getNextDirection(_arg1:int, _arg2:int):int{
if (((toUp) && (!((_arg2 == (indexY - 1)))))){
return (DIRECTION_UP);
};
if (((toDown) && (!((_arg2 == (indexY + 1)))))){
return (DIRECTION_DOWN);
};
if (((toLeft) && (!((_arg1 == (indexX - 1)))))){
return (DIRECTION_LEFT);
};
if (((toRight) && (!((_arg1 == (indexX + 1)))))){
return (DIRECTION_RIGHT);
};
return (DIRECTION_NONE);
}
public function setDirection(_arg1:Array):void{
var _local2:String;
_local2 = "";
if ((((indexY > 0)) && (!((_arg1[indexX][(indexY - 1)] == null))))){
toUp = true;
_local2 = (_local2 + "U");
};
if ((((indexX > 0)) && (!((_arg1[(indexX - 1)][indexY] == null))))){
toLeft = true;
_local2 = (_local2 + "L");
};
if ((((indexY < (Config.FIELD_DIMENSIONY - 1))) && (!((_arg1[indexX][(indexY + 1)] == null))))){
toDown = true;
_local2 = (_local2 + "D");
};
if ((((indexX < (Config.FIELD_DIMENSIONX - 1))) && (!((_arg1[(indexX + 1)][indexY] == null))))){
toRight = true;
_local2 = (_local2 + "R");
};
if ((((_local2 == "U")) || ((_local2 == "D")))){
toUp = true;
toDown = true;
_local2 = "UD";
} else {
if ((((_local2 == "L")) || ((_local2 == "R")))){
toLeft = true;
toRight = true;
_local2 = "LR";
};
};
gotoAndStop(_local2);
}
public function initialize(_arg1:int, _arg2:int):void{
this.indexX = _arg1;
this.indexY = _arg2;
this.x = (_arg1 * Config.BLOCK_SIZE);
this.y = (_arg2 * Config.BLOCK_SIZE);
toUp = false;
toDown = false;
toLeft = false;
toRight = false;
stop();
}
}
}//package com.novelgames.flashgames.castledefense
Section 34
//SellDialog (com.novelgames.flashgames.castledefense.SellDialog)
package com.novelgames.flashgames.castledefense {
import flash.display.*;
import flash.events.*;
public class SellDialog extends MovieClip {
private var cannonY:int;
private var cannonX:int;
public var sellBubble:MovieClip;
private var cannonSets:Array;
public function SellDialog(){
visible = false;
}
public function show(_arg1:Array):void{
this.cannonSets = _arg1;
drawBackground();
this.addEventListener(MouseEvent.MOUSE_MOVE, onNormalMove);
this.addEventListener(MouseEvent.MOUSE_DOWN, onNormalDown);
onNormalMove();
visible = true;
}
private function getCannonSet(_arg1:int, _arg2:int):CannonSet{
if ((((_arg1 < 0)) || ((_arg1 >= Config.FIELD_DIMENSIONX)))){
return (null);
};
if ((((_arg2 < 0)) || ((_arg2 >= Config.FIELD_DIMENSIONY)))){
return (null);
};
return (cannonSets[_arg1][_arg2]);
}
private function onNormalDown(_arg1:MouseEvent):void{
if (sellBubble.visible){
Object(parent).sellCannonSet(cannonX, cannonY);
drawBackground();
onNormalMove();
} else {
hide();
Object(parent).sellFinished();
};
}
public function hide():void{
this.removeEventListener(MouseEvent.MOUSE_MOVE, onNormalMove);
this.removeEventListener(MouseEvent.MOUSE_DOWN, onNormalDown);
visible = false;
}
private function onNormalMove(_arg1:MouseEvent=null):void{
var _local2:CannonSet;
cannonX = Math.floor((mouseX / Config.BLOCK_SIZE));
cannonY = Math.floor((mouseY / Config.BLOCK_SIZE));
_local2 = getCannonSet(cannonX, cannonY);
if (!_local2){
sellBubble.visible = false;
this.buttonMode = false;
} else {
sellBubble.x = _local2.x;
sellBubble.y = _local2.y;
sellBubble.moneyText.text = (Config.MONEY_PREFIX + (_local2.price * Config.CANNON_SELLPRICERATIO));
sellBubble.visible = true;
this.buttonMode = true;
};
}
private function drawBackground():void{
var _local1:Number;
var _local2:Number;
var _local3:int;
var _local4:int;
this.graphics.clear();
this.graphics.beginFill(0, 0);
this.graphics.moveTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.endFill();
if (Config.FIELD_Y > 0){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), -(Config.FIELD_Y));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), 0);
this.graphics.lineTo(-(Config.FIELD_X), 0);
this.graphics.lineTo(-(Config.FIELD_X), -(Config.FIELD_Y));
this.graphics.endFill();
};
if (Config.FIELD_X > 0){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), 0);
this.graphics.lineTo(0, 0);
this.graphics.lineTo(0, (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo(-(Config.FIELD_X), 0);
this.graphics.endFill();
};
if ((Config.FIELD_X + (Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE)) < stage.stageWidth){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), 0);
this.graphics.lineTo((stage.stageWidth - Config.FIELD_X), 0);
this.graphics.lineTo((stage.stageWidth - Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((Config.FIELD_DIMENSIONX * Config.BLOCK_SIZE), 0);
this.graphics.endFill();
};
if ((Config.FIELD_Y + (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE)) < stage.stageHeight){
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.lineTo((-(Config.FIELD_X) + stage.stageWidth), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (-(Config.FIELD_Y) + stage.stageHeight));
this.graphics.lineTo(-(Config.FIELD_X), (Config.FIELD_DIMENSIONY * Config.BLOCK_SIZE));
this.graphics.endFill();
};
_local3 = 0;
while (_local3 < Config.FIELD_DIMENSIONX) {
_local4 = 0;
while (_local4 < Config.FIELD_DIMENSIONY) {
if (cannonSets[_local3][_local4]){
} else {
_local1 = (_local3 * Config.BLOCK_SIZE);
_local2 = (_local4 * Config.BLOCK_SIZE);
this.graphics.beginFill(Config.DIALOG_SHADECOLOUR, Config.DIALOG_SHADEALPHA);
this.graphics.moveTo(_local1, _local2);
this.graphics.lineTo((_local1 + Config.BLOCK_SIZE), _local2);
this.graphics.lineTo((_local1 + Config.BLOCK_SIZE), (_local2 + Config.BLOCK_SIZE));
this.graphics.lineTo(_local1, (_local2 + Config.BLOCK_SIZE));
this.graphics.lineTo(_local1, _local2);
this.graphics.endFill();
};
_local4++;
};
_local3++;
};
}
}
}//package com.novelgames.flashgames.castledefense
Section 35
//SoundAllClear (com.novelgames.flashgames.castledefense.SoundAllClear)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundAllClear extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 36
//SoundBuySell (com.novelgames.flashgames.castledefense.SoundBuySell)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundBuySell extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 37
//SoundCastle (com.novelgames.flashgames.castledefense.SoundCastle)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundCastle extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 38
//SoundEnemy (com.novelgames.flashgames.castledefense.SoundEnemy)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundEnemy extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 39
//SoundGameOver (com.novelgames.flashgames.castledefense.SoundGameOver)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundGameOver extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 40
//SoundLevelClear (com.novelgames.flashgames.castledefense.SoundLevelClear)
package com.novelgames.flashgames.castledefense {
import flash.media.*;
public dynamic class SoundLevelClear extends Sound {
}
}//package com.novelgames.flashgames.castledefense
Section 41
//Game (com.novelgames.flashgames.common.Game)
package com.novelgames.flashgames.common {
import flash.display.*;
public class Game extends MovieClip {
public static var gameStage:Stage;
public function unpause():void{
NewTimer.unpause();
}
public function pause():void{
NewTimer.pause();
}
}
}//package com.novelgames.flashgames.common
Section 42
//Instructions (com.novelgames.flashgames.common.Instructions)
package com.novelgames.flashgames.common {
import flash.display.*;
import flash.events.*;
public class Instructions extends MovieClip {
public var startButton:SimpleButton;
private var shownFromGame:Boolean;
public function Instructions(_arg1:Boolean=false){
this.shownFromGame = _arg1;
startButton.addEventListener(MouseEvent.CLICK, startButtonClicked);
}
private function startButtonClicked(_arg1:MouseEvent):void{
if (!shownFromGame){
Object(parent).gotoGamePage();
} else {
Object(parent).hideInstructionsFromGame();
};
}
}
}//package com.novelgames.flashgames.common
Section 43
//InstructionsButton (com.novelgames.flashgames.common.InstructionsButton)
package com.novelgames.flashgames.common {
import flash.display.*;
import flash.events.*;
public class InstructionsButton extends MovieClip {
public function InstructionsButton(){
super();
this.buttonMode = true;
this.addEventListener(MouseEvent.CLICK, function ():void{
Object(parent.parent).showInstructionsFromGame();
});
}
}
}//package com.novelgames.flashgames.common
Section 44
//MainDevelopment (com.novelgames.flashgames.common.MainDevelopment)
package com.novelgames.flashgames.common {
import flash.display.*;
import flash.events.*;
import flash.media.*;
public class MainDevelopment extends MovieClip {
private var title:Title;
private var musicGameSoundChannel:SoundChannel;
private var titleIndex:int;
private var instructions:Instructions;
private var musicGame:Sound;
private var game:Game;
public function MainDevelopment(){
this.addEventListener(Event.ENTER_FRAME, checkTitle);
}
protected function getMusicGame():Sound{
return (null);
}
public function hideInstructionsFromGame():void{
this.removeChild(instructions);
instructions = null;
game.visible = true;
game.unpause();
}
public function showInstructionsFromGame():void{
game.pause();
game.visible = false;
instructions = new Instructions(true);
this.addChildAt(instructions, (titleIndex + 1));
}
public function gotoGamePage():void{
Game.gameStage = stage;
removePage();
game = getGame();
this.addChildAt(game, titleIndex);
musicGame = getMusicGame();
musicGameSoundChannel = musicGame.play(0, int.MAX_VALUE);
}
private function checkTitle(_arg1:Event):void{
if (!(title = getTitle())){
return;
};
this.removeEventListener(Event.ENTER_FRAME, checkTitle);
stop();
titleIndex = this.getChildIndex(title);
}
public function gotoTitlePage():void{
removePage();
title = new Title();
this.addChildAt(title, titleIndex);
}
public function gotoInstructionsPage():void{
removePage();
instructions = new Instructions();
this.addChildAt(instructions, titleIndex);
}
public function showHighScores():void{
trace("showHighScores()");
}
public function showEnterHighScore(_arg1:int):void{
trace((("showEnterHighScore(" + _arg1) + ")"));
}
protected function getGame():Game{
return (null);
}
private function removePage():void{
if (title){
removeChild(title);
title = null;
};
if (instructions){
removeChild(instructions);
instructions = null;
};
if (game){
removeChild(game);
game = null;
};
if (musicGame){
musicGameSoundChannel.stop();
musicGame = null;
musicGameSoundChannel = null;
};
}
protected function getTitle():Title{
return (null);
}
}
}//package com.novelgames.flashgames.common
Section 45
//MuteButton (com.novelgames.flashgames.common.MuteButton)
package com.novelgames.flashgames.common {
import flash.display.*;
import flash.events.*;
import flash.media.*;
public class MuteButton extends MovieClip {
private var gameSoundTransform:SoundTransform;
public function MuteButton(){
if (SoundMixer.soundTransform.volume == 0){
showOff();
} else {
showOn();
};
this.addEventListener(MouseEvent.CLICK, buttonClicked);
this.buttonMode = true;
}
private function showOff():void{
gotoAndStop("off");
}
private function buttonClicked(_arg1:MouseEvent):void{
var _local2:SoundTransform;
_local2 = new SoundTransform();
if (SoundMixer.soundTransform.volume == 0){
_local2.volume = 1;
SoundMixer.soundTransform = _local2;
showOn();
} else {
_local2.volume = 0;
SoundMixer.soundTransform = _local2;
showOff();
};
}
private function showOn():void{
gotoAndStop("on");
}
}
}//package com.novelgames.flashgames.common
Section 46
//NewTimer (com.novelgames.flashgames.common.NewTimer)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.utils.*;
public class NewTimer extends Timer {
private var adjustedStartTime:int;
private var listener:Function;
private var originalRepeatCount:int;
private var originalDelay:int;
private static var pauseTime:int;
private static var paused:Boolean = false;
private static var totalPausedTime:int = 0;
public function NewTimer(_arg1:Number, _arg2:int=0):void{
super(_arg1, _arg2);
originalDelay = _arg1;
originalRepeatCount = _arg2;
}
override public function addEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false, _arg4:int=0, _arg5:Boolean=false):void{
if (_arg1 != TimerEvent.TIMER){
super.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);
return;
};
this.listener = _arg2;
super.addEventListener(_arg1, timerEventListener);
}
override public function start():void{
adjustedStartTime = NewTimer.getTimer();
super.start();
}
private function timerEventListener(_arg1:TimerEvent):void{
if (paused){
stop();
delay = Math.max((originalDelay - (NewTimer.getTimer() - adjustedStartTime)), 1);
if (originalRepeatCount > 0){
repeatCount++;
};
super.start();
return;
};
if ((NewTimer.getTimer() - adjustedStartTime) >= originalDelay){
adjustedStartTime = NewTimer.getTimer();
if (delay != originalDelay){
stop();
delay = originalDelay;
super.start();
};
listener(_arg1);
} else {
stop();
delay = Math.max((originalDelay - (NewTimer.getTimer() - adjustedStartTime)), 1);
if (originalRepeatCount > 0){
repeatCount++;
};
super.start();
};
}
public static function unpause():void{
if (!paused){
return;
};
paused = false;
totalPausedTime = (totalPausedTime + (getTimer() - pauseTime));
}
public static function getTimer():int{
if (paused){
return ((pauseTime - totalPausedTime));
};
return ((getTimer() - totalPausedTime));
}
public static function pause():void{
if (paused){
return;
};
paused = true;
pauseTime = getTimer();
}
}
}//package com.novelgames.flashgames.common
Section 47
//Title (com.novelgames.flashgames.common.Title)
package com.novelgames.flashgames.common {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class Title extends MovieClip {
public var startButton:SimpleButton;
public function Title(){
startButton.addEventListener(MouseEvent.CLICK, startButtonClicked);
}
private function startButtonClicked(_arg1:MouseEvent):void{
Object(parent).gotoInstructionsPage();
}
private function moreGamesButtonClicked(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.novelgames.com"), "_blank");
}
private function highScoresButtonClicked(_arg1:MouseEvent):void{
Object(parent).showHighScores();
}
}
}//package com.novelgames.flashgames.common
Section 48
//Bar (com.novelgames.flashgames.preloader.Bar)
package com.novelgames.flashgames.preloader {
import flash.display.*;
import flash.geom.*;
public class Bar extends MovieClip {
private var colourBottom:Number;
private var barHeight:Number;
private var border:MovieClip;
private var borderColour:Number;
private var percent:Number;
private var barWidth:Number;
private var borderThickness:Number;
private var colourTop:Number;
public function setHeight(_arg1:Number):void{
this.barHeight = _arg1;
updateBorder();
updateBar();
}
private function updateBorder():void{
border.graphics.clear();
border.graphics.lineStyle(borderThickness, borderColour, 100, false, "normal", "square", "miter");
border.graphics.moveTo(0, 0);
border.graphics.lineTo(barWidth, 0);
border.graphics.lineTo(barWidth, barHeight);
border.graphics.lineTo(0, barHeight);
border.graphics.lineTo(0, 0);
}
public function setPercent(_arg1:Number):void{
this.percent = _arg1;
updateBar();
}
public function setWidth(_arg1:Number):void{
this.barWidth = _arg1;
updateBorder();
updateBar();
}
public function initialize(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number):void{
this.x = _arg1;
this.y = _arg2;
this.barWidth = _arg3;
this.barHeight = _arg4;
this.colourTop = _arg5;
this.colourBottom = _arg6;
this.borderThickness = _arg7;
this.borderColour = _arg8;
border = new MovieClip();
this.addChild(border);
updateBorder();
updateBar();
}
private function updateBar():void{
var _local1:Number;
var _local2:Matrix;
_local1 = ((barWidth * percent) / 100);
_local2 = new Matrix();
_local2.createGradientBox(_local1, barHeight, (Math.PI / 2), 0, 0);
this.graphics.clear();
this.graphics.beginGradientFill("linear", [colourTop, colourBottom], [100, 100], [0, 0xFF], _local2);
this.graphics.moveTo(0, 0);
this.graphics.lineTo(_local1, 0);
this.graphics.lineTo(_local1, barHeight);
this.graphics.lineTo(0, barHeight);
this.graphics.lineTo(0, 0);
this.graphics.endFill();
}
public function setColourBottom(_arg1:Number):void{
this.colourBottom = _arg1;
updateBar();
}
public function setBorderColour(_arg1:Number):void{
this.borderColour = _arg1;
updateBorder();
}
public function setColourTop(_arg1:Number):void{
this.colourTop = _arg1;
updateBar();
}
public function setBorderThickness(_arg1:Number):void{
this.borderThickness = _arg1;
updateBorder();
}
}
}//package com.novelgames.flashgames.preloader
Section 49
//Preloader (com.novelgames.flashgames.preloader.Preloader)
package com.novelgames.flashgames.preloader {
import flash.display.*;
import fl.core.*;
import flash.events.*;
import flash.utils.*;
public class Preloader extends UIComponent {
private var __minShowTime:Number;
private var bytesLoaded:Number;
private var startTime:Number;
private var __barY:Number;
private var __barX:Number;
private var __playOrStop:String;
private var __barColourBottom:Number;
private var __barColourTop:Number;
private var __barBorderColour:Number;
private var __background:String;
private var backgroundMovieClip:MovieClip;
private var preloaderReal:MovieClip;
private var __barHeight:Number;
private var timer:Timer;
private var __barWidth:Number;
private var __startLabel:String;
private var bytesTotal:Number;
private var __barBorderThickness:Number;
public function set barColourTop(_arg1:Number):void{
__barColourTop = _arg1;
invalidate();
}
public function get barBorderThickness():Number{
return (__barBorderThickness);
}
public function set barBorderThickness(_arg1:Number):void{
__barBorderThickness = _arg1;
invalidate();
}
public function set barHeight(_arg1:Number):void{
__barHeight = _arg1;
invalidate();
}
public function set background(_arg1:String):void{
__background = _arg1;
invalidate();
}
public function get barX():Number{
return (__barX);
}
public function get barY():Number{
return (__barX);
}
public function get barColourBottom():Number{
return (__barColourBottom);
}
public function get barBorderColour():Number{
return (__barBorderColour);
}
public function get playOrStop():String{
return (__playOrStop);
}
public function set barWidth(_arg1:Number):void{
__barWidth = _arg1;
invalidate();
}
public function get barHeight():Number{
return (__barHeight);
}
public function get background():String{
return (__background);
}
public function get barColourTop():Number{
return (__barColourTop);
}
override protected function draw():void{
var theClass:Class;
var temp:MovieClip;
temp = null;
try {
theClass = Class(getDefinitionByName(__background));
temp = new (theClass);
} catch(e) {
};
if (!temp){
if (preloaderReal.backgroundMovieClip){
preloaderReal.backgroundHolder.removeChild(preloaderReal.backgroundMovieClip);
preloaderReal.backgroundMovieClip = null;
};
preloaderReal.white.visible = true;
preloaderReal.text.visible = true;
} else {
preloaderReal.backgroundMovieClip = temp;
preloaderReal.white.visible = false;
preloaderReal.text.visible = false;
preloaderReal.backgroundHolder.addChild(temp);
};
preloaderReal.white.width = width;
preloaderReal.white.height = height;
preloaderReal.text.x = (width / 2);
preloaderReal.text.y = (height / 2);
preloaderReal.bar.x = __barX;
preloaderReal.bar.y = __barY;
preloaderReal.bar.setWidth(__barWidth);
preloaderReal.bar.setHeight(__barHeight);
preloaderReal.bar.setColourTop(__barColourTop);
preloaderReal.bar.setColourBottom(__barColourBottom);
preloaderReal.bar.setBorderThickness(__barBorderThickness);
preloaderReal.bar.setBorderColour(__barBorderColour);
}
override protected function configUI():void{
super.configUI();
__background = "";
__barX = 250;
__barY = 300;
__barWidth = 100;
__barHeight = 20;
__barColourTop = 0xCCCCCC;
__barColourBottom = 0x333333;
__barBorderThickness = 2;
__barBorderColour = 0;
__startLabel = "game";
__playOrStop = "stop";
__minShowTime = 1000;
Object(parent).stop();
bytesLoaded = stage.loaderInfo.bytesLoaded;
bytesTotal = stage.loaderInfo.bytesTotal;
startTime = getTimer();
timer = new Timer(1, 0);
timer.addEventListener(TimerEvent.TIMER, onTime);
timer.start();
preloaderReal = new PreloaderReal();
preloaderReal.white.width = width;
preloaderReal.white.height = height;
preloaderReal.text.x = (width / 2);
preloaderReal.text.y = (height / 2);
preloaderReal.bar.initialize(__barX, __barY, __barWidth, __barHeight, __barColourTop, __barColourBottom, __barBorderThickness, __barBorderColour);
preloaderReal.bar.setPercent(((bytesLoaded * 100) / bytesTotal));
this.addChild(preloaderReal);
}
public function set barY(_arg1:Number):void{
__barY = _arg1;
invalidate();
}
public function set barX(_arg1:Number):void{
__barX = _arg1;
invalidate();
}
private function onTime(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_arg1.updateAfterEvent();
bytesLoaded = stage.loaderInfo.bytesLoaded;
_local2 = ((bytesLoaded * 100) / bytesTotal);
_local3 = (((getTimer() - startTime) * 100) / minShowTime);
_local4 = Math.min(_local2, _local3);
preloaderReal.bar.setPercent(_local4);
if (_local4 >= 100){
timer.stop();
if (__playOrStop == "play"){
Object(parent).gotoAndPlay(__startLabel);
} else {
Object(parent).gotoAndStop(__startLabel);
};
};
}
public function get barWidth():Number{
return (__barWidth);
}
public function set startLabel(_arg1:String):void{
__startLabel = _arg1;
}
public function set barColourBottom(_arg1:Number):void{
__barColourBottom = _arg1;
invalidate();
}
public function set barBorderColour(_arg1:Number):void{
__barBorderColour = _arg1;
invalidate();
}
public function get startLabel():String{
return (__startLabel);
}
public function set playOrStop(_arg1:String):void{
__playOrStop = _arg1;
}
public function set minShowTime(_arg1:Number):void{
__minShowTime = _arg1;
}
public function get minShowTime():Number{
return (__minShowTime);
}
}
}//package com.novelgames.flashgames.preloader
Section 50
//PreloaderReal (com.novelgames.flashgames.preloader.PreloaderReal)
package com.novelgames.flashgames.preloader {
import flash.display.*;
public dynamic class PreloaderReal extends MovieClip {
public var bar:Bar;
public var white:MovieClip;
public var text:MovieClip;
public var backgroundHolder:MovieClip;
}
}//package com.novelgames.flashgames.preloader
Section 51
//BaseButton (fl.controls.BaseButton)
package fl.controls {
import flash.display.*;
import fl.core.*;
import flash.events.*;
import flash.utils.*;
import fl.events.*;
public class BaseButton extends UIComponent {
protected var _selected:Boolean;// = false
private var unlockedMouseState:String;
protected var pressTimer:Timer;
protected var mouseState:String;
protected var background:DisplayObject;
private var _mouseStateLocked:Boolean;// = false
protected var _autoRepeat:Boolean;// = false
private static var defaultStyles:Object = {upSkin:"Button_upSkin", downSkin:"Button_downSkin", overSkin:"Button_overSkin", disabledSkin:"Button_disabledSkin", selectedDisabledSkin:"Button_selectedDisabledSkin", selectedUpSkin:"Button_selectedUpSkin", selectedDownSkin:"Button_selectedDownSkin", selectedOverSkin:"Button_selectedOverSkin", focusRectSkin:null, focusRectPadding:null, repeatDelay:500, repeatInterval:35};
public function BaseButton(){
_selected = false;
_autoRepeat = false;
_mouseStateLocked = false;
super();
buttonMode = true;
mouseChildren = false;
useHandCursor = false;
setupMouseEvents();
setMouseState("up");
pressTimer = new Timer(1, 0);
pressTimer.addEventListener(TimerEvent.TIMER, buttonDown, false, 0, true);
}
protected function endPress():void{
pressTimer.reset();
}
public function set mouseStateLocked(_arg1:Boolean):void{
_mouseStateLocked = _arg1;
if (_arg1 == false){
setMouseState(unlockedMouseState);
} else {
unlockedMouseState = mouseState;
};
}
public function get autoRepeat():Boolean{
return (_autoRepeat);
}
public function set autoRepeat(_arg1:Boolean):void{
_autoRepeat = _arg1;
}
override public function set enabled(_arg1:Boolean):void{
super.enabled = _arg1;
mouseEnabled = _arg1;
}
public function get selected():Boolean{
return (_selected);
}
protected function mouseEventHandler(_arg1:MouseEvent):void{
if (_arg1.type == MouseEvent.MOUSE_DOWN){
setMouseState("down");
startPress();
} else {
if ((((_arg1.type == MouseEvent.ROLL_OVER)) || ((_arg1.type == MouseEvent.MOUSE_UP)))){
setMouseState("over");
endPress();
} else {
if (_arg1.type == MouseEvent.ROLL_OUT){
setMouseState("up");
endPress();
};
};
};
}
public function setMouseState(_arg1:String):void{
if (_mouseStateLocked){
unlockedMouseState = _arg1;
return;
};
if (mouseState == _arg1){
return;
};
mouseState = _arg1;
invalidate(InvalidationType.STATE);
}
protected function startPress():void{
if (_autoRepeat){
pressTimer.delay = Number(getStyleValue("repeatDelay"));
pressTimer.start();
};
dispatchEvent(new ComponentEvent(ComponentEvent.BUTTON_DOWN, true));
}
protected function buttonDown(_arg1:TimerEvent):void{
if (!_autoRepeat){
endPress();
return;
};
if (pressTimer.currentCount == 1){
pressTimer.delay = Number(getStyleValue("repeatInterval"));
};
dispatchEvent(new ComponentEvent(ComponentEvent.BUTTON_DOWN, true));
}
public function set selected(_arg1:Boolean):void{
if (_selected == _arg1){
return;
};
_selected = _arg1;
invalidate(InvalidationType.STATE);
}
override public function get enabled():Boolean{
return (super.enabled);
}
override protected function draw():void{
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
drawBackground();
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE)){
drawLayout();
};
super.draw();
}
protected function setupMouseEvents():void{
addEventListener(MouseEvent.ROLL_OVER, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.ROLL_OUT, mouseEventHandler, false, 0, true);
}
protected function drawLayout():void{
background.width = width;
background.height = height;
}
protected function drawBackground():void{
var _local1:String;
var _local2:DisplayObject;
_local1 = (enabled) ? mouseState : "disabled";
if (selected){
_local1 = (("selected" + _local1.substr(0, 1).toUpperCase()) + _local1.substr(1));
};
_local1 = (_local1 + "Skin");
_local2 = background;
background = getDisplayObjectInstance(getStyleValue(_local1));
addChildAt(background, 0);
if (((!((_local2 == null))) && (!((_local2 == background))))){
removeChild(_local2);
};
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
}
}//package fl.controls
Section 52
//Button (fl.controls.Button)
package fl.controls {
import flash.display.*;
import fl.core.*;
import fl.managers.*;
public class Button extends LabelButton implements IFocusManagerComponent {
protected var emphasizedBorder:DisplayObject;
protected var _emphasized:Boolean;// = false
private static var defaultStyles:Object = {emphasizedSkin:"Button_emphasizedSkin", emphasizedPadding:2};
public static var createAccessibilityImplementation:Function;
public function Button(){
_emphasized = false;
super();
}
override public function drawFocus(_arg1:Boolean):void{
var _local2:Number;
var _local3:*;
super.drawFocus(_arg1);
if (_arg1){
_local2 = Number(getStyleValue("emphasizedPadding"));
if ((((_local2 < 0)) || (!(_emphasized)))){
_local2 = 0;
};
_local3 = getStyleValue("focusRectPadding");
_local3 = ((_local3)==null) ? 2 : _local3;
_local3 = (_local3 + _local2);
uiFocusRect.x = -(_local3);
uiFocusRect.y = -(_local3);
uiFocusRect.width = (width + (_local3 * 2));
uiFocusRect.height = (height + (_local3 * 2));
};
}
public function set emphasized(_arg1:Boolean):void{
_emphasized = _arg1;
invalidate(InvalidationType.STYLES);
}
override protected function draw():void{
if (((isInvalid(InvalidationType.STYLES)) || (isInvalid(InvalidationType.SIZE)))){
drawEmphasized();
};
super.draw();
if (emphasizedBorder != null){
setChildIndex(emphasizedBorder, (numChildren - 1));
};
}
public function get emphasized():Boolean{
return (_emphasized);
}
override protected function initializeAccessibility():void{
if (Button.createAccessibilityImplementation != null){
Button.createAccessibilityImplementation(this);
};
}
protected function drawEmphasized():void{
var _local1:Object;
var _local2:Number;
if (emphasizedBorder != null){
removeChild(emphasizedBorder);
};
emphasizedBorder = null;
if (!_emphasized){
return;
};
_local1 = getStyleValue("emphasizedSkin");
if (_local1 != null){
emphasizedBorder = getDisplayObjectInstance(_local1);
};
if (emphasizedBorder != null){
addChildAt(emphasizedBorder, 0);
_local2 = Number(getStyleValue("emphasizedPadding"));
emphasizedBorder.x = (emphasizedBorder.y = -(_local2));
emphasizedBorder.width = (width + (_local2 * 2));
emphasizedBorder.height = (height + (_local2 * 2));
};
}
public static function getStyleDefinition():Object{
return (UIComponent.mergeStyles(LabelButton.getStyleDefinition(), defaultStyles));
}
}
}//package fl.controls
Section 53
//ButtonLabelPlacement (fl.controls.ButtonLabelPlacement)
package fl.controls {
public class ButtonLabelPlacement {
public static const TOP:String = "top";
public static const LEFT:String = "left";
public static const BOTTOM:String = "bottom";
public static const RIGHT:String = "right";
}
}//package fl.controls
Section 54
//LabelButton (fl.controls.LabelButton)
package fl.controls {
import flash.display.*;
import fl.core.*;
import flash.events.*;
import fl.managers.*;
import fl.events.*;
import flash.text.*;
import flash.ui.*;
public class LabelButton extends BaseButton implements IFocusManagerComponent {
protected var _labelPlacement:String;// = "right"
protected var _toggle:Boolean;// = false
protected var icon:DisplayObject;
protected var oldMouseState:String;
protected var mode:String;// = "center"
public var textField:TextField;
protected var _label:String;// = "Label"
private static var defaultStyles:Object = {icon:null, upIcon:null, downIcon:null, overIcon:null, disabledIcon:null, selectedDisabledIcon:null, selectedUpIcon:null, selectedDownIcon:null, selectedOverIcon:null, textFormat:null, disabledTextFormat:null, textPadding:5, embedFonts:false};
public static var createAccessibilityImplementation:Function;
public function LabelButton(){
_labelPlacement = ButtonLabelPlacement.RIGHT;
_toggle = false;
_label = "Label";
mode = "center";
super();
}
protected function toggleSelected(_arg1:MouseEvent):void{
selected = !(selected);
dispatchEvent(new Event(Event.CHANGE, true));
}
public function get labelPlacement():String{
return (_labelPlacement);
}
override protected function keyDownHandler(_arg1:KeyboardEvent):void{
if (!enabled){
return;
};
if (_arg1.keyCode == Keyboard.SPACE){
if (oldMouseState == null){
oldMouseState = mouseState;
};
setMouseState("down");
startPress();
};
}
protected function setEmbedFont(){
var _local1:Object;
_local1 = getStyleValue("embedFonts");
if (_local1 != null){
textField.embedFonts = _local1;
};
}
override protected function keyUpHandler(_arg1:KeyboardEvent):void{
if (!enabled){
return;
};
if (_arg1.keyCode == Keyboard.SPACE){
setMouseState(oldMouseState);
oldMouseState = null;
endPress();
dispatchEvent(new MouseEvent(MouseEvent.CLICK));
};
}
override public function get selected():Boolean{
return ((_toggle) ? _selected : false);
}
public function set labelPlacement(_arg1:String):void{
_labelPlacement = _arg1;
invalidate(InvalidationType.SIZE);
}
public function set toggle(_arg1:Boolean):void{
if (((!(_arg1)) && (super.selected))){
selected = false;
};
_toggle = _arg1;
if (_toggle){
addEventListener(MouseEvent.CLICK, toggleSelected, false, 0, true);
} else {
removeEventListener(MouseEvent.CLICK, toggleSelected);
};
invalidate(InvalidationType.STATE);
}
public function get label():String{
return (_label);
}
override public function set selected(_arg1:Boolean):void{
_selected = _arg1;
if (_toggle){
invalidate(InvalidationType.STATE);
};
}
override protected function draw():void{
if (textField.text != _label){
label = _label;
};
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
drawBackground();
drawIcon();
drawTextFormat();
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE)){
drawLayout();
};
if (isInvalid(InvalidationType.SIZE, InvalidationType.STYLES)){
if (((isFocused) && (focusManager.showFocusIndicator))){
drawFocus(true);
};
};
validate();
}
public function get toggle():Boolean{
return (_toggle);
}
override protected function configUI():void{
super.configUI();
textField = new TextField();
textField.type = TextFieldType.DYNAMIC;
textField.selectable = false;
addChild(textField);
}
override protected function drawLayout():void{
var _local1:Number;
var _local2:String;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local1 = Number(getStyleValue("textPadding"));
_local2 = ((((icon == null)) && ((mode == "center")))) ? ButtonLabelPlacement.TOP : _labelPlacement;
textField.height = (textField.textHeight + 4);
_local3 = (textField.textWidth + 4);
_local4 = (textField.textHeight + 4);
_local5 = ((icon)==null) ? 0 : (icon.width + _local1);
_local6 = ((icon)==null) ? 0 : (icon.height + _local1);
textField.visible = (label.length > 0);
if (icon != null){
icon.x = Math.round(((width - icon.width) / 2));
icon.y = Math.round(((height - icon.height) / 2));
};
if (textField.visible == false){
textField.width = 0;
textField.height = 0;
} else {
if ((((_local2 == ButtonLabelPlacement.BOTTOM)) || ((_local2 == ButtonLabelPlacement.TOP)))){
_local7 = Math.max(0, Math.min(_local3, (width - (2 * _local1))));
if ((height - 2) > _local4){
_local8 = _local4;
} else {
_local8 = (height - 2);
};
_local3 = _local7;
textField.width = _local3;
_local4 = _local8;
textField.height = _local4;
textField.x = Math.round(((width - _local3) / 2));
textField.y = Math.round(((((height - textField.height) - _local6) / 2) + ((_local2)==ButtonLabelPlacement.BOTTOM) ? _local6 : 0));
if (icon != null){
icon.y = Math.round(((_local2)==ButtonLabelPlacement.BOTTOM) ? (textField.y - _local6) : ((textField.y + textField.height) + _local1));
};
} else {
_local7 = Math.max(0, Math.min(_local3, ((width - _local5) - (2 * _local1))));
_local3 = _local7;
textField.width = _local3;
textField.x = Math.round(((((width - _local3) - _local5) / 2) + ((_local2)!=ButtonLabelPlacement.LEFT) ? _local5 : 0));
textField.y = Math.round(((height - textField.height) / 2));
if (icon != null){
icon.x = Math.round(((_local2)!=ButtonLabelPlacement.LEFT) ? (textField.x - _local5) : ((textField.x + _local3) + _local1));
};
};
};
super.drawLayout();
}
override protected function initializeAccessibility():void{
if (LabelButton.createAccessibilityImplementation != null){
LabelButton.createAccessibilityImplementation(this);
};
}
protected function drawIcon():void{
var _local1:DisplayObject;
var _local2:String;
var _local3:Object;
_local1 = icon;
_local2 = (enabled) ? mouseState : "disabled";
if (selected){
_local2 = (("selected" + _local2.substr(0, 1).toUpperCase()) + _local2.substr(1));
};
_local2 = (_local2 + "Icon");
_local3 = getStyleValue(_local2);
if (_local3 == null){
_local3 = getStyleValue("icon");
};
if (_local3 != null){
icon = getDisplayObjectInstance(_local3);
};
if (icon != null){
addChildAt(icon, 1);
};
if (((!((_local1 == null))) && (!((_local1 == icon))))){
removeChild(_local1);
};
}
public function set label(_arg1:String):void{
_label = _arg1;
if (textField.text != _label){
textField.text = _label;
dispatchEvent(new ComponentEvent(ComponentEvent.LABEL_CHANGE));
};
invalidate(InvalidationType.SIZE);
invalidate(InvalidationType.STYLES);
}
protected function drawTextFormat():void{
var _local1:Object;
var _local2:TextFormat;
var _local3:TextFormat;
_local1 = UIComponent.getStyleDefinition();
_local2 = (enabled) ? (_local1.defaultTextFormat as TextFormat) : (_local1.defaultDisabledTextFormat as TextFormat);
textField.setTextFormat(_local2);
_local3 = (getStyleValue((enabled) ? "textFormat" : "disabledTextFormat") as TextFormat);
if (_local3 != null){
textField.setTextFormat(_local3);
} else {
_local3 = _local2;
};
textField.defaultTextFormat = _local3;
setEmbedFont();
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, BaseButton.getStyleDefinition()));
}
}
}//package fl.controls
Section 55
//InvalidationType (fl.core.InvalidationType)
package fl.core {
public class InvalidationType {
public static const SIZE:String = "size";
public static const ALL:String = "all";
public static const DATA:String = "data";
public static const SCROLL:String = "scroll";
public static const STATE:String = "state";
public static const STYLES:String = "styles";
public static const SELECTED:String = "selected";
public static const RENDERER_STYLES:String = "rendererStyles";
}
}//package fl.core
Section 56
//UIComponent (fl.core.UIComponent)
package fl.core {
import flash.display.*;
import flash.events.*;
import fl.managers.*;
import flash.utils.*;
import fl.events.*;
import flash.text.*;
import flash.system.*;
public class UIComponent extends Sprite {
protected var _enabled:Boolean;// = true
private var _mouseFocusEnabled:Boolean;// = true
protected var startHeight:Number;
protected var _height:Number;
protected var _oldIMEMode:String;// = null
protected var startWidth:Number;
public var focusTarget:IFocusManagerComponent;
protected var errorCaught:Boolean;// = false
protected var uiFocusRect:DisplayObject;
protected var _width:Number;
public var version:String;// = "3.0.0.15"
protected var isFocused:Boolean;// = false
protected var callLaterMethods:Dictionary;
private var _focusEnabled:Boolean;// = true
private var tempText:TextField;
protected var invalidateFlag:Boolean;// = false
protected var _inspector:Boolean;// = false
protected var sharedStyles:Object;
protected var invalidHash:Object;
protected var isLivePreview:Boolean;// = false
protected var _imeMode:String;// = null
protected var instanceStyles:Object;
protected var _x:Number;
protected var _y:Number;
public static var inCallLaterPhase:Boolean = false;
private static var defaultStyles:Object = {focusRectSkin:"focusRectSkin", focusRectPadding:2, textFormat:new TextFormat("_sans", 11, 0, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), disabledTextFormat:new TextFormat("_sans", 11, 0x999999, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), defaultTextFormat:new TextFormat("_sans", 11, 0, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), defaultDisabledTextFormat:new TextFormat("_sans", 11, 0x999999, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0)};
public static var createAccessibilityImplementation:Function;
private static var focusManagers:Dictionary = new Dictionary(false);
public function UIComponent(){
version = "3.0.0.15";
isLivePreview = false;
invalidateFlag = false;
_enabled = true;
isFocused = false;
_focusEnabled = true;
_mouseFocusEnabled = true;
_imeMode = null;
_oldIMEMode = null;
errorCaught = false;
_inspector = false;
super();
instanceStyles = {};
sharedStyles = {};
invalidHash = {};
callLaterMethods = new Dictionary();
StyleManager.registerInstance(this);
configUI();
invalidate(InvalidationType.ALL);
tabEnabled = (this is IFocusManagerComponent);
focusRect = false;
if (tabEnabled){
addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
};
initializeFocusManager();
addEventListener(Event.ENTER_FRAME, hookAccessibility, false, 0, true);
}
public function drawFocus(_arg1:Boolean):void{
var _local2:Number;
isFocused = _arg1;
if (((!((uiFocusRect == null))) && (contains(uiFocusRect)))){
removeChild(uiFocusRect);
uiFocusRect = null;
};
if (_arg1){
uiFocusRect = (getDisplayObjectInstance(getStyleValue("focusRectSkin")) as Sprite);
if (uiFocusRect == null){
return;
};
_local2 = Number(getStyleValue("focusRectPadding"));
uiFocusRect.x = -(_local2);
uiFocusRect.y = -(_local2);
uiFocusRect.width = (width + (_local2 * 2));
uiFocusRect.height = (height + (_local2 * 2));
addChildAt(uiFocusRect, 0);
};
}
private function callLaterDispatcher(_arg1:Event):void{
var _local2:Dictionary;
var _local3:Object;
if (_arg1.type == Event.ADDED_TO_STAGE){
removeEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher);
stage.addEventListener(Event.RENDER, callLaterDispatcher, false, 0, true);
stage.invalidate();
return;
};
_arg1.target.removeEventListener(Event.RENDER, callLaterDispatcher);
if (stage == null){
addEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher, false, 0, true);
return;
};
inCallLaterPhase = true;
_local2 = callLaterMethods;
for (_local3 in _local2) {
_local3();
delete _local2[_local3];
};
inCallLaterPhase = false;
}
private function addedHandler(_arg1:Event):void{
removeEventListener("addedToStage", addedHandler);
initializeFocusManager();
}
protected function getStyleValue(_arg1:String):Object{
return (((instanceStyles[_arg1])==null) ? sharedStyles[_arg1] : instanceStyles[_arg1]);
}
protected function isOurFocus(_arg1:DisplayObject):Boolean{
return ((_arg1 == this));
}
override public function get scaleX():Number{
return ((width / startWidth));
}
override public function get scaleY():Number{
return ((height / startHeight));
}
override public function set height(_arg1:Number):void{
if (_height == _arg1){
return;
};
setSize(width, _arg1);
}
protected function keyDownHandler(_arg1:KeyboardEvent):void{
}
protected function focusInHandler(_arg1:FocusEvent):void{
var _local2:IFocusManager;
if (isOurFocus((_arg1.target as DisplayObject))){
_local2 = focusManager;
if (((_local2) && (_local2.showFocusIndicator))){
drawFocus(true);
isFocused = true;
};
};
}
public function setStyle(_arg1:String, _arg2:Object):void{
if ((((instanceStyles[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
instanceStyles[_arg1] = _arg2;
invalidate(InvalidationType.STYLES);
}
override public function get visible():Boolean{
return (super.visible);
}
public function get componentInspectorSetting():Boolean{
return (_inspector);
}
override public function get x():Number{
return ((isNaN(_x)) ? super.x : _x);
}
override public function get y():Number{
return ((isNaN(_y)) ? super.y : _y);
}
protected function setIMEMode(_arg1:Boolean){
var enabled = _arg1;
if (_imeMode != null){
if (enabled){
IME.enabled = true;
_oldIMEMode = IME.conversionMode;
try {
if (((!(errorCaught)) && (!((IME.conversionMode == IMEConversionMode.UNKNOWN))))){
IME.conversionMode = _imeMode;
};
errorCaught = false;
} catch(e:Error) {
errorCaught = true;
throw (new Error(("IME mode not supported: " + _imeMode)));
};
} else {
if (((!((IME.conversionMode == IMEConversionMode.UNKNOWN))) && (!((_oldIMEMode == IMEConversionMode.UNKNOWN))))){
IME.conversionMode = _oldIMEMode;
};
IME.enabled = false;
};
};
}
public function set enabled(_arg1:Boolean):void{
if (_arg1 == _enabled){
return;
};
_enabled = _arg1;
invalidate(InvalidationType.STATE);
}
public function setSharedStyle(_arg1:String, _arg2:Object):void{
if ((((sharedStyles[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
sharedStyles[_arg1] = _arg2;
if (instanceStyles[_arg1] == null){
invalidate(InvalidationType.STYLES);
};
}
protected function keyUpHandler(_arg1:KeyboardEvent):void{
}
public function set focusEnabled(_arg1:Boolean):void{
_focusEnabled = _arg1;
}
override public function set scaleX(_arg1:Number):void{
setSize((startWidth * _arg1), height);
}
public function get mouseFocusEnabled():Boolean{
return (_mouseFocusEnabled);
}
override public function set scaleY(_arg1:Number):void{
setSize(width, (startHeight * _arg1));
}
protected function getDisplayObjectInstance(_arg1:Object):DisplayObject{
var classDef:Object;
var skin = _arg1;
classDef = null;
if ((skin is Class)){
return ((new (skin) as DisplayObject));
};
if ((skin is DisplayObject)){
(skin as DisplayObject).x = 0;
(skin as DisplayObject).y = 0;
return ((skin as DisplayObject));
};
try {
classDef = getDefinitionByName(skin.toString());
} catch(e:Error) {
try {
classDef = (loaderInfo.applicationDomain.getDefinition(skin.toString()) as Object);
} catch(e:Error) {
};
};
if (classDef == null){
return (null);
};
return ((new (classDef) as DisplayObject));
}
protected function copyStylesToChild(_arg1:UIComponent, _arg2:Object):void{
var _local3:String;
for (_local3 in _arg2) {
_arg1.setStyle(_local3, getStyleValue(_arg2[_local3]));
};
}
protected function beforeComponentParameters():void{
}
protected function callLater(_arg1:Function):void{
if (inCallLaterPhase){
return;
};
callLaterMethods[_arg1] = true;
if (stage != null){
stage.addEventListener(Event.RENDER, callLaterDispatcher, false, 0, true);
stage.invalidate();
} else {
addEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher, false, 0, true);
};
}
protected function createFocusManager():void{
if (focusManagers[stage] == null){
focusManagers[stage] = new FocusManager(stage);
};
}
override public function set visible(_arg1:Boolean):void{
var _local2:String;
if (super.visible == _arg1){
return;
};
super.visible = _arg1;
_local2 = (_arg1) ? ComponentEvent.SHOW : ComponentEvent.HIDE;
dispatchEvent(new ComponentEvent(_local2, true));
}
protected function hookAccessibility(_arg1:Event):void{
removeEventListener(Event.ENTER_FRAME, hookAccessibility);
initializeAccessibility();
}
public function set componentInspectorSetting(_arg1:Boolean):void{
_inspector = _arg1;
if (_inspector){
beforeComponentParameters();
} else {
afterComponentParameters();
};
}
override public function set x(_arg1:Number):void{
move(_arg1, _y);
}
public function drawNow():void{
draw();
}
override public function set y(_arg1:Number):void{
move(_x, _arg1);
}
protected function checkLivePreview():Boolean{
var className:String;
if (parent == null){
return (false);
};
try {
className = getQualifiedClassName(parent);
} catch(e:Error) {
};
return ((className == "fl.livepreview::LivePreviewParent"));
}
protected function focusOutHandler(_arg1:FocusEvent):void{
if (isOurFocus((_arg1.target as DisplayObject))){
drawFocus(false);
isFocused = false;
};
}
public function set mouseFocusEnabled(_arg1:Boolean):void{
_mouseFocusEnabled = _arg1;
}
public function getFocus():InteractiveObject{
if (stage){
return (stage.focus);
};
return (null);
}
protected function validate():void{
invalidHash = {};
}
override public function get height():Number{
return (_height);
}
public function invalidate(_arg1:String="all", _arg2:Boolean=true):void{
invalidHash[_arg1] = true;
if (_arg2){
this.callLater(draw);
};
}
public function get enabled():Boolean{
return (_enabled);
}
protected function getScaleX():Number{
return (super.scaleX);
}
protected function getScaleY():Number{
return (super.scaleY);
}
public function get focusEnabled():Boolean{
return (_focusEnabled);
}
protected function afterComponentParameters():void{
}
protected function draw():void{
if (isInvalid(InvalidationType.SIZE, InvalidationType.STYLES)){
if (((isFocused) && (focusManager.showFocusIndicator))){
drawFocus(true);
};
};
validate();
}
protected function configUI():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
isLivePreview = checkLivePreview();
_local1 = rotation;
rotation = 0;
_local2 = super.width;
_local3 = super.height;
var _local4 = 1;
super.scaleY = _local4;
super.scaleX = _local4;
setSize(_local2, _local3);
move(super.x, super.y);
rotation = _local1;
startWidth = _local2;
startHeight = _local3;
if (numChildren > 0){
removeChildAt(0);
};
}
protected function setScaleX(_arg1:Number):void{
super.scaleX = _arg1;
}
protected function setScaleY(_arg1:Number):void{
super.scaleY = _arg1;
}
private function initializeFocusManager():void{
if (stage == null){
addEventListener(Event.ADDED_TO_STAGE, addedHandler, false, 0, true);
} else {
createFocusManager();
};
}
public function set focusManager(_arg1:IFocusManager):void{
UIComponent.focusManagers[this] = _arg1;
}
public function clearStyle(_arg1:String):void{
setStyle(_arg1, null);
}
protected function isInvalid(_arg1:String, ... _args):Boolean{
if (((invalidHash[_arg1]) || (invalidHash[InvalidationType.ALL]))){
return (true);
};
while (_args.length > 0) {
if (invalidHash[_args.pop()]){
return (true);
};
};
return (false);
}
public function setSize(_arg1:Number, _arg2:Number):void{
_width = _arg1;
_height = _arg2;
invalidate(InvalidationType.SIZE);
dispatchEvent(new ComponentEvent(ComponentEvent.RESIZE, false));
}
override public function set width(_arg1:Number):void{
if (_width == _arg1){
return;
};
setSize(_arg1, height);
}
public function setFocus():void{
if (stage){
stage.focus = this;
};
}
protected function initializeAccessibility():void{
if (UIComponent.createAccessibilityImplementation != null){
UIComponent.createAccessibilityImplementation(this);
};
}
public function get focusManager():IFocusManager{
var _local1:DisplayObject;
_local1 = this;
while (_local1) {
if (UIComponent.focusManagers[_local1] != null){
return (IFocusManager(UIComponent.focusManagers[_local1]));
};
_local1 = _local1.parent;
};
return (null);
}
override public function get width():Number{
return (_width);
}
public function move(_arg1:Number, _arg2:Number):void{
_x = _arg1;
_y = _arg2;
super.x = Math.round(_arg1);
super.y = Math.round(_arg2);
dispatchEvent(new ComponentEvent(ComponentEvent.MOVE));
}
public function validateNow():void{
invalidate(InvalidationType.ALL, false);
draw();
}
public function getStyle(_arg1:String):Object{
return (instanceStyles[_arg1]);
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
public static function mergeStyles(... _args):Object{
var _local2:Object;
var _local3:uint;
var _local4:uint;
var _local5:Object;
var _local6:String;
_local2 = {};
_local3 = _args.length;
_local4 = 0;
while (_local4 < _local3) {
_local5 = _args[_local4];
for (_local6 in _local5) {
if (_local2[_local6] != null){
} else {
_local2[_local6] = _args[_local4][_local6];
};
};
_local4++;
};
return (_local2);
}
}
}//package fl.core
Section 57
//ComponentEvent (fl.events.ComponentEvent)
package fl.events {
import flash.events.*;
public class ComponentEvent extends Event {
public static const HIDE:String = "hide";
public static const BUTTON_DOWN:String = "buttonDown";
public static const MOVE:String = "move";
public static const RESIZE:String = "resize";
public static const ENTER:String = "enter";
public static const LABEL_CHANGE:String = "labelChange";
public static const SHOW:String = "show";
public function ComponentEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
override public function toString():String{
return (formatToString("ComponentEvent", "type", "bubbles", "cancelable"));
}
override public function clone():Event{
return (new ComponentEvent(type, bubbles, cancelable));
}
}
}//package fl.events
Section 58
//FocusManager (fl.managers.FocusManager)
package fl.managers {
import fl.controls.*;
import flash.display.*;
import fl.core.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*;
import flash.ui.*;
public class FocusManager implements IFocusManager {
private var focusableObjects:Dictionary;
private var _showFocusIndicator:Boolean;// = true
private var defButton:Button;
private var focusableCandidates:Array;
private var _form:DisplayObjectContainer;
private var _defaultButtonEnabled:Boolean;// = true
private var activated:Boolean;// = false
private var _defaultButton:Button;
private var calculateCandidates:Boolean;// = true
private var lastFocus:InteractiveObject;
private var lastAction:String;
public function FocusManager(_arg1:DisplayObjectContainer){
activated = false;
calculateCandidates = true;
_showFocusIndicator = true;
_defaultButtonEnabled = true;
super();
focusableObjects = new Dictionary(true);
if (_arg1 != null){
_form = _arg1;
addFocusables(DisplayObject(_arg1));
_arg1.addEventListener(Event.ADDED, addedHandler);
_arg1.addEventListener(Event.REMOVED, removedHandler);
activate();
};
}
public function get showFocusIndicator():Boolean{
return (_showFocusIndicator);
}
private function getIndexOfNextObject(_arg1:int, _arg2:Boolean, _arg3:Boolean, _arg4:String):int{
var _local5:int;
var _local6:int;
var _local7:DisplayObject;
var _local8:IFocusManagerGroup;
var _local9:int;
var _local10:DisplayObject;
var _local11:IFocusManagerGroup;
_local5 = focusableCandidates.length;
_local6 = _arg1;
while (true) {
if (_arg2){
_arg1--;
} else {
_arg1++;
};
if (_arg3){
if (((_arg2) && ((_arg1 < 0)))){
break;
};
if (((!(_arg2)) && ((_arg1 == _local5)))){
break;
};
} else {
_arg1 = ((_arg1 + _local5) % _local5);
if (_local6 == _arg1){
break;
};
};
if (isValidFocusCandidate(focusableCandidates[_arg1], _arg4)){
_local7 = DisplayObject(findFocusManagerComponent(focusableCandidates[_arg1]));
if ((_local7 is IFocusManagerGroup)){
_local8 = IFocusManagerGroup(_local7);
_local9 = 0;
while (_local9 < focusableCandidates.length) {
_local10 = focusableCandidates[_local9];
if ((_local10 is IFocusManagerGroup)){
_local11 = IFocusManagerGroup(_local10);
if ((((_local11.groupName == _local8.groupName)) && (_local11.selected))){
_arg1 = _local9;
break;
};
};
_local9++;
};
};
return (_arg1);
};
};
return (_arg1);
}
public function set form(_arg1:DisplayObjectContainer):void{
_form = _arg1;
}
private function addFocusables(_arg1:DisplayObject, _arg2:Boolean=false):void{
var focusable:IFocusManagerComponent;
var io:InteractiveObject;
var doc:DisplayObjectContainer;
var i:int;
var child:DisplayObject;
var o = _arg1;
var skipTopLevel = _arg2;
if (!skipTopLevel){
if ((o is IFocusManagerComponent)){
focusable = IFocusManagerComponent(o);
if (focusable.focusEnabled){
if (((focusable.tabEnabled) && (isTabVisible(o)))){
focusableObjects[o] = true;
calculateCandidates = true;
};
o.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
o.addEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
};
} else {
if ((o is InteractiveObject)){
io = (o as InteractiveObject);
if (((((io) && (io.tabEnabled))) && ((findFocusManagerComponent(io) == io)))){
focusableObjects[io] = true;
calculateCandidates = true;
};
io.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
io.addEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
};
};
};
if ((o is DisplayObjectContainer)){
doc = DisplayObjectContainer(o);
o.addEventListener(Event.TAB_CHILDREN_CHANGE, tabChildrenChangeHandler);
if ((((((doc is Stage)) || ((doc.parent is Stage)))) || (doc.tabChildren))){
i = 0;
while (i < doc.numChildren) {
try {
child = doc.getChildAt(i);
if (child != null){
addFocusables(doc.getChildAt(i));
};
} catch(error:SecurityError) {
};
i = (i + 1);
};
};
};
}
private function getChildIndex(_arg1:DisplayObjectContainer, _arg2:DisplayObject):int{
return (_arg1.getChildIndex(_arg2));
}
private function mouseFocusChangeHandler(_arg1:FocusEvent):void{
if ((_arg1.relatedObject is TextField)){
return;
};
_arg1.preventDefault();
}
private function focusOutHandler(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
_local2 = (_arg1.target as InteractiveObject);
}
private function isValidFocusCandidate(_arg1:DisplayObject, _arg2:String):Boolean{
var _local3:IFocusManagerGroup;
if (!isEnabledAndVisible(_arg1)){
return (false);
};
if ((_arg1 is IFocusManagerGroup)){
_local3 = IFocusManagerGroup(_arg1);
if (_arg2 == _local3.groupName){
return (false);
};
};
return (true);
}
public function findFocusManagerComponent(_arg1:InteractiveObject):InteractiveObject{
var _local2:InteractiveObject;
_local2 = _arg1;
while (_arg1) {
if ((((_arg1 is IFocusManagerComponent)) && (IFocusManagerComponent(_arg1).focusEnabled))){
return (_arg1);
};
_arg1 = _arg1.parent;
};
return (_local2);
}
private function sortFocusableObjectsTabIndex():void{
var _local1:Object;
var _local2:InteractiveObject;
focusableCandidates = [];
for (_local1 in focusableObjects) {
_local2 = InteractiveObject(_local1);
if (((_local2.tabIndex) && (!(isNaN(Number(_local2.tabIndex)))))){
focusableCandidates.push(_local2);
};
};
focusableCandidates.sort(sortByTabIndex);
}
private function removeFocusables(_arg1:DisplayObject):void{
var _local2:Object;
var _local3:DisplayObject;
if ((_arg1 is DisplayObjectContainer)){
_arg1.removeEventListener(Event.TAB_CHILDREN_CHANGE, tabChildrenChangeHandler);
_arg1.removeEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
for (_local2 in focusableObjects) {
_local3 = DisplayObject(_local2);
if (DisplayObjectContainer(_arg1).contains(_local3)){
if (_local3 == lastFocus){
lastFocus = null;
};
_local3.removeEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
delete focusableObjects[_local2];
calculateCandidates = true;
};
};
};
}
private function addedHandler(_arg1:Event):void{
var _local2:DisplayObject;
_local2 = DisplayObject(_arg1.target);
if (_local2.stage){
addFocusables(DisplayObject(_arg1.target));
};
}
private function getTopLevelFocusTarget(_arg1:InteractiveObject):InteractiveObject{
while (_arg1 != InteractiveObject(form)) {
if ((((((((_arg1 is IFocusManagerComponent)) && (IFocusManagerComponent(_arg1).focusEnabled))) && (IFocusManagerComponent(_arg1).mouseFocusEnabled))) && (UIComponent(_arg1).enabled))){
return (_arg1);
};
_arg1 = _arg1.parent;
if (_arg1 == null){
break;
};
};
return (null);
}
private function tabChildrenChangeHandler(_arg1:Event):void{
var _local2:DisplayObjectContainer;
if (_arg1.target != _arg1.currentTarget){
return;
};
calculateCandidates = true;
_local2 = DisplayObjectContainer(_arg1.target);
if (_local2.tabChildren){
addFocusables(_local2, true);
} else {
removeFocusables(_local2);
};
}
public function sendDefaultButtonEvent():void{
defButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
public function getFocus():InteractiveObject{
var _local1:InteractiveObject;
_local1 = form.stage.focus;
return (findFocusManagerComponent(_local1));
}
private function isEnabledAndVisible(_arg1:DisplayObject):Boolean{
var _local2:DisplayObjectContainer;
var _local3:TextField;
var _local4:SimpleButton;
_local2 = DisplayObject(form).parent;
while (_arg1 != _local2) {
if ((_arg1 is UIComponent)){
if (!UIComponent(_arg1).enabled){
return (false);
};
} else {
if ((_arg1 is TextField)){
_local3 = TextField(_arg1);
if ((((_local3.type == TextFieldType.DYNAMIC)) || (!(_local3.selectable)))){
return (false);
};
} else {
if ((_arg1 is SimpleButton)){
_local4 = SimpleButton(_arg1);
if (!_local4.enabled){
return (false);
};
};
};
};
if (!_arg1.visible){
return (false);
};
_arg1 = _arg1.parent;
};
return (true);
}
public function set defaultButton(_arg1:Button):void{
var _local2:Button;
_local2 = (_arg1) ? Button(_arg1) : null;
if (_local2 != _defaultButton){
if (_defaultButton){
_defaultButton.emphasized = false;
};
if (defButton){
defButton.emphasized = false;
};
_defaultButton = _local2;
defButton = _local2;
if (_local2){
_local2.emphasized = true;
};
};
}
private function deactivateHandler(_arg1:Event):void{
var _local2:InteractiveObject;
_local2 = InteractiveObject(_arg1.target);
}
public function setFocus(_arg1:InteractiveObject):void{
if ((_arg1 is IFocusManagerComponent)){
IFocusManagerComponent(_arg1).setFocus();
} else {
form.stage.focus = _arg1;
};
}
private function setFocusToNextObject(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
if (!hasFocusableObjects()){
return;
};
_local2 = getNextFocusManagerComponent(_arg1.shiftKey);
if (_local2){
setFocus(_local2);
};
}
private function hasFocusableObjects():Boolean{
var _local1:Object;
for (_local1 in focusableObjects) {
return (true);
};
return (false);
}
private function tabIndexChangeHandler(_arg1:Event):void{
calculateCandidates = true;
}
private function sortFocusableObjects():void{
var _local1:Object;
var _local2:InteractiveObject;
focusableCandidates = [];
for (_local1 in focusableObjects) {
_local2 = InteractiveObject(_local1);
if (((((_local2.tabIndex) && (!(isNaN(Number(_local2.tabIndex)))))) && ((_local2.tabIndex > 0)))){
sortFocusableObjectsTabIndex();
return;
};
focusableCandidates.push(_local2);
};
focusableCandidates.sort(sortByDepth);
}
private function keyFocusChangeHandler(_arg1:FocusEvent):void{
showFocusIndicator = true;
if ((((((_arg1.keyCode == Keyboard.TAB)) || ((_arg1.keyCode == 0)))) && (!(_arg1.isDefaultPrevented())))){
setFocusToNextObject(_arg1);
_arg1.preventDefault();
};
}
private function getIndexOfFocusedObject(_arg1:DisplayObject):int{
var _local2:int;
var _local3:int;
_local2 = focusableCandidates.length;
_local3 = 0;
_local3 = 0;
while (_local3 < _local2) {
if (focusableCandidates[_local3] == _arg1){
return (_local3);
};
_local3++;
};
return (-1);
}
public function hideFocus():void{
}
private function removedHandler(_arg1:Event):void{
var _local2:int;
var _local3:DisplayObject;
var _local4:InteractiveObject;
_local3 = DisplayObject(_arg1.target);
if ((((_local3 is IFocusManagerComponent)) && ((focusableObjects[_local3] == true)))){
if (_local3 == lastFocus){
IFocusManagerComponent(lastFocus).drawFocus(false);
lastFocus = null;
};
_local3.removeEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
delete focusableObjects[_local3];
calculateCandidates = true;
} else {
if ((((_local3 is InteractiveObject)) && ((focusableObjects[_local3] == true)))){
_local4 = (_local3 as InteractiveObject);
if (_local4){
if (_local4 == lastFocus){
lastFocus = null;
};
delete focusableObjects[_local4];
calculateCandidates = true;
};
_local3.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
};
};
removeFocusables(_local3);
}
private function sortByDepth(_arg1:InteractiveObject, _arg2:InteractiveObject):Number{
var _local3:String;
var _local4:String;
var _local5:int;
var _local6:String;
var _local7:String;
var _local8:String;
var _local9:DisplayObject;
var _local10:DisplayObject;
_local3 = "";
_local4 = "";
_local8 = "0000";
_local9 = DisplayObject(_arg1);
_local10 = DisplayObject(_arg2);
while (((!((_local9 == DisplayObject(form)))) && (_local9.parent))) {
_local5 = getChildIndex(_local9.parent, _local9);
_local6 = _local5.toString(16);
if (_local6.length < 4){
_local7 = (_local8.substring(0, (4 - _local6.length)) + _local6);
};
_local3 = (_local7 + _local3);
_local9 = _local9.parent;
};
while (((!((_local10 == DisplayObject(form)))) && (_local10.parent))) {
_local5 = getChildIndex(_local10.parent, _local10);
_local6 = _local5.toString(16);
if (_local6.length < 4){
_local7 = (_local8.substring(0, (4 - _local6.length)) + _local6);
};
_local4 = (_local7 + _local4);
_local10 = _local10.parent;
};
return (((_local3 > _local4)) ? 1 : ((_local3 < _local4)) ? -1 : 0);
}
public function get defaultButton():Button{
return (_defaultButton);
}
private function activateHandler(_arg1:Event):void{
var _local2:InteractiveObject;
_local2 = InteractiveObject(_arg1.target);
if (lastFocus){
if ((lastFocus is IFocusManagerComponent)){
IFocusManagerComponent(lastFocus).setFocus();
} else {
form.stage.focus = lastFocus;
};
};
lastAction = "ACTIVATE";
}
public function showFocus():void{
}
public function set defaultButtonEnabled(_arg1:Boolean):void{
_defaultButtonEnabled = _arg1;
}
public function getNextFocusManagerComponent(_arg1:Boolean=false):InteractiveObject{
var _local2:DisplayObject;
var _local3:String;
var _local4:int;
var _local5:Boolean;
var _local6:int;
var _local7:int;
var _local8:IFocusManagerGroup;
if (!hasFocusableObjects()){
return (null);
};
if (calculateCandidates){
sortFocusableObjects();
calculateCandidates = false;
};
_local2 = form.stage.focus;
_local2 = DisplayObject(findFocusManagerComponent(InteractiveObject(_local2)));
_local3 = "";
if ((_local2 is IFocusManagerGroup)){
_local8 = IFocusManagerGroup(_local2);
_local3 = _local8.groupName;
};
_local4 = getIndexOfFocusedObject(_local2);
_local5 = false;
_local6 = _local4;
if (_local4 == -1){
if (_arg1){
_local4 = focusableCandidates.length;
};
_local5 = true;
};
_local7 = getIndexOfNextObject(_local4, _arg1, _local5, _local3);
return (findFocusManagerComponent(focusableCandidates[_local7]));
}
private function mouseDownHandler(_arg1:MouseEvent):void{
var _local2:InteractiveObject;
if (_arg1.isDefaultPrevented()){
return;
};
_local2 = getTopLevelFocusTarget(InteractiveObject(_arg1.target));
if (!_local2){
return;
};
showFocusIndicator = false;
if (((((!((_local2 == lastFocus))) || ((lastAction == "ACTIVATE")))) && (!((_local2 is TextField))))){
setFocus(_local2);
};
lastAction = "MOUSEDOWN";
}
private function isTabVisible(_arg1:DisplayObject):Boolean{
var _local2:DisplayObjectContainer;
_local2 = _arg1.parent;
while (((((_local2) && (!((_local2 is Stage))))) && (!(((_local2.parent) && ((_local2.parent is Stage))))))) {
if (!_local2.tabChildren){
return (false);
};
_local2 = _local2.parent;
};
return (true);
}
public function get nextTabIndex():int{
return (0);
}
private function keyDownHandler(_arg1:KeyboardEvent):void{
if (_arg1.keyCode == Keyboard.TAB){
lastAction = "KEY";
if (calculateCandidates){
sortFocusableObjects();
calculateCandidates = false;
};
};
if (((((((defaultButtonEnabled) && ((_arg1.keyCode == Keyboard.ENTER)))) && (defaultButton))) && (defButton.enabled))){
sendDefaultButtonEvent();
};
}
private function focusInHandler(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
var _local3:Button;
_local2 = InteractiveObject(_arg1.target);
if (form.contains(_local2)){
lastFocus = findFocusManagerComponent(InteractiveObject(_local2));
if ((lastFocus is Button)){
_local3 = Button(lastFocus);
if (defButton){
defButton.emphasized = false;
defButton = _local3;
_local3.emphasized = true;
};
} else {
if (((defButton) && (!((defButton == _defaultButton))))){
defButton.emphasized = false;
defButton = _defaultButton;
_defaultButton.emphasized = true;
};
};
};
}
private function tabEnabledChangeHandler(_arg1:Event):void{
var _local2:InteractiveObject;
var _local3:Boolean;
calculateCandidates = true;
_local2 = InteractiveObject(_arg1.target);
_local3 = (focusableObjects[_local2] == true);
if (_local2.tabEnabled){
if (((!(_local3)) && (isTabVisible(_local2)))){
if (!(_local2 is IFocusManagerComponent)){
_local2.focusRect = false;
};
focusableObjects[_local2] = true;
};
} else {
if (_local3){
delete focusableObjects[_local2];
};
};
}
public function set showFocusIndicator(_arg1:Boolean):void{
_showFocusIndicator = _arg1;
}
public function get form():DisplayObjectContainer{
return (_form);
}
private function sortByTabIndex(_arg1:InteractiveObject, _arg2:InteractiveObject):int{
return (((_arg1.tabIndex > _arg2.tabIndex)) ? 1 : ((_arg1.tabIndex < _arg2.tabIndex)) ? -1 : sortByDepth(_arg1, _arg2));
}
public function activate():void{
if (activated){
return;
};
form.stage.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler, false, 0, true);
form.stage.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler, false, 0, true);
form.addEventListener(FocusEvent.FOCUS_IN, focusInHandler, true);
form.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler, true);
form.stage.addEventListener(Event.ACTIVATE, activateHandler, false, 0, true);
form.stage.addEventListener(Event.DEACTIVATE, deactivateHandler, false, 0, true);
form.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
form.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, true);
activated = true;
if (lastFocus){
setFocus(lastFocus);
};
}
public function deactivate():void{
form.stage.removeEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler);
form.stage.removeEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler);
form.removeEventListener(FocusEvent.FOCUS_IN, focusInHandler, true);
form.removeEventListener(FocusEvent.FOCUS_OUT, focusOutHandler, true);
form.stage.removeEventListener(Event.ACTIVATE, activateHandler);
form.stage.removeEventListener(Event.DEACTIVATE, deactivateHandler);
form.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
form.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, true);
activated = false;
}
public function get defaultButtonEnabled():Boolean{
return (_defaultButtonEnabled);
}
}
}//package fl.managers
Section 59
//IFocusManager (fl.managers.IFocusManager)
package fl.managers {
import fl.controls.*;
import flash.display.*;
public interface IFocusManager {
function getFocus():InteractiveObject;
function deactivate():void;
function set defaultButton(_arg1:Button):void;
function set showFocusIndicator(_arg1:Boolean):void;
function get defaultButtonEnabled():Boolean;
function get nextTabIndex():int;
function get defaultButton():Button;
function get showFocusIndicator():Boolean;
function setFocus(_arg1:InteractiveObject):void;
function activate():void;
function showFocus():void;
function set defaultButtonEnabled(_arg1:Boolean):void;
function hideFocus():void;
function findFocusManagerComponent(_arg1:InteractiveObject):InteractiveObject;
function getNextFocusManagerComponent(_arg1:Boolean=false):InteractiveObject;
}
}//package fl.managers
Section 60
//IFocusManagerComponent (fl.managers.IFocusManagerComponent)
package fl.managers {
public interface IFocusManagerComponent {
function set focusEnabled(_arg1:Boolean):void;
function drawFocus(_arg1:Boolean):void;
function setFocus():void;
function get focusEnabled():Boolean;
function get tabEnabled():Boolean;
function get tabIndex():int;
function get mouseFocusEnabled():Boolean;
}
}//package fl.managers
Section 61
//IFocusManagerGroup (fl.managers.IFocusManagerGroup)
package fl.managers {
public interface IFocusManagerGroup {
function set groupName(_arg1:String):void;
function set selected(_arg1:Boolean):void;
function get groupName():String;
function get selected():Boolean;
}
}//package fl.managers
Section 62
//StyleManager (fl.managers.StyleManager)
package fl.managers {
import fl.core.*;
import flash.utils.*;
import flash.text.*;
public class StyleManager {
private var globalStyles:Object;
private var classToDefaultStylesDict:Dictionary;
private var styleToClassesHash:Object;
private var classToStylesDict:Dictionary;
private var classToInstancesDict:Dictionary;
private static var _instance:StyleManager;
public function StyleManager(){
styleToClassesHash = {};
classToInstancesDict = new Dictionary(true);
classToStylesDict = new Dictionary(true);
classToDefaultStylesDict = new Dictionary(true);
globalStyles = UIComponent.getStyleDefinition();
}
public static function clearComponentStyle(_arg1:Object, _arg2:String):void{
var _local3:Class;
var _local4:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance().classToStylesDict[_local3];
if (((!((_local4 == null))) && (!((_local4[_arg2] == null))))){
delete _local4[_arg2];
invalidateComponentStyle(_local3, _arg2);
};
}
private static function getClassDef(_arg1:Object):Class{
var component = _arg1;
if ((component is Class)){
return ((component as Class));
};
try {
return ((getDefinitionByName(getQualifiedClassName(component)) as Class));
} catch(e:Error) {
if ((component is UIComponent)){
try {
return ((component.loaderInfo.applicationDomain.getDefinition(getQualifiedClassName(component)) as Class));
} catch(e:Error) {
};
};
};
return (null);
}
public static function clearStyle(_arg1:String):void{
setStyle(_arg1, null);
}
public static function setComponentStyle(_arg1:Object, _arg2:String, _arg3:Object):void{
var _local4:Class;
var _local5:Object;
_local4 = getClassDef(_arg1);
_local5 = getInstance().classToStylesDict[_local4];
if (_local5 == null){
_local5 = (getInstance().classToStylesDict[_local4] = {});
};
if (_local5 == _arg3){
return;
};
_local5[_arg2] = _arg3;
invalidateComponentStyle(_local4, _arg2);
}
private static function setSharedStyles(_arg1:UIComponent):void{
var _local2:StyleManager;
var _local3:Class;
var _local4:Object;
var _local5:String;
_local2 = getInstance();
_local3 = getClassDef(_arg1);
_local4 = _local2.classToDefaultStylesDict[_local3];
for (_local5 in _local4) {
_arg1.setSharedStyle(_local5, getSharedStyle(_arg1, _local5));
};
}
public static function getComponentStyle(_arg1:Object, _arg2:String):Object{
var _local3:Class;
var _local4:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance().classToStylesDict[_local3];
return (((_local4)==null) ? null : _local4[_arg2]);
}
private static function getInstance(){
if (_instance == null){
_instance = new (StyleManager);
};
return (_instance);
}
private static function invalidateComponentStyle(_arg1:Class, _arg2:String):void{
var _local3:Dictionary;
var _local4:Object;
var _local5:UIComponent;
_local3 = getInstance().classToInstancesDict[_arg1];
if (_local3 == null){
return;
};
for (_local4 in _local3) {
_local5 = (_local4 as UIComponent);
if (_local5 == null){
} else {
_local5.setSharedStyle(_arg2, getSharedStyle(_local5, _arg2));
};
};
}
private static function invalidateStyle(_arg1:String):void{
var _local2:Dictionary;
var _local3:Object;
_local2 = getInstance().styleToClassesHash[_arg1];
if (_local2 == null){
return;
};
for (_local3 in _local2) {
invalidateComponentStyle(Class(_local3), _arg1);
};
}
public static function registerInstance(_arg1:UIComponent):void{
var inst:StyleManager;
var classDef:Class;
var target:Class;
var defaultStyles:Object;
var styleToClasses:Object;
var n:String;
var instance = _arg1;
inst = getInstance();
classDef = getClassDef(instance);
if (classDef == null){
return;
};
if (inst.classToInstancesDict[classDef] == null){
inst.classToInstancesDict[classDef] = new Dictionary(true);
target = classDef;
while (defaultStyles == null) {
if (target["getStyleDefinition"] != null){
defaultStyles = target["getStyleDefinition"]();
break;
};
try {
target = (instance.loaderInfo.applicationDomain.getDefinition(getQualifiedSuperclassName(target)) as Class);
} catch(err:Error) {
try {
target = (getDefinitionByName(getQualifiedSuperclassName(target)) as Class);
} catch(e:Error) {
defaultStyles = UIComponent.getStyleDefinition();
break;
};
};
};
styleToClasses = inst.styleToClassesHash;
for (n in defaultStyles) {
if (styleToClasses[n] == null){
styleToClasses[n] = new Dictionary(true);
};
styleToClasses[n][classDef] = true;
};
inst.classToDefaultStylesDict[classDef] = defaultStyles;
inst.classToStylesDict[classDef] = {};
};
inst.classToInstancesDict[classDef][instance] = true;
setSharedStyles(instance);
}
public static function getStyle(_arg1:String):Object{
return (getInstance().globalStyles[_arg1]);
}
private static function getSharedStyle(_arg1:UIComponent, _arg2:String):Object{
var _local3:Class;
var _local4:StyleManager;
var _local5:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance();
_local5 = _local4.classToStylesDict[_local3][_arg2];
if (_local5 != null){
return (_local5);
};
_local5 = _local4.globalStyles[_arg2];
if (_local5 != null){
return (_local5);
};
return (_local4.classToDefaultStylesDict[_local3][_arg2]);
}
public static function setStyle(_arg1:String, _arg2:Object):void{
var _local3:Object;
_local3 = getInstance().globalStyles;
if ((((_local3[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
_local3[_arg1] = _arg2;
invalidateStyle(_arg1);
}
}
}//package fl.managers