import mx.events.EventDispatcher; class HomeWars { static var PLAYER_DEPTH = 1000; static var MISSILE_MIN_DEPTH = 2000; static var MISSILE_MAX_DEPTH = 3000; static var TITLE_SCREEN_DEPTH = 10000; static var END_SCREEN_DEPTH = 10010; static var STATE_TITLE_SCREEN = 10; static var STATE_WAIT_FOR_CLOSE = 20; static var STATE_INIT = 30; static var STATE_PLAY = 40 static var STATE_END_SCREEN = 50; static var PAUSE_KEY_CODE = 80; static var PAUSE_WAIT_FRAMES = 2; //static var FIRE_WAIT_FRAMES = 7; var gameState:Number = 0; var missiles:Array; var player:MovieClip; var titleScreen:MovieClip; var endScreen:MovieClip; var missileCount:Number = 0; var parentTL:MovieClip; var pauseGame:Boolean = false; function HomeWars(pt) { EventDispatcher.initialize(this); missiles = new Array(); missileCount=0; parentTL = pt; pauseGame = false; gameState = STATE_TITLE_SCREEN ; Key.addListener(this); } public static function main (container:MovieClip):Void { var game:HomeWars = new HomeWars(container); container.game = game; container.onEnterFrame = function ():Void { this.game.run(); } } function run() { switch(gameState) { case STATE_TITLE_SCREEN: fSTATE_TITLE_SCREEN(); break; case STATE_WAIT_FOR_CLOSE: fSTATE_WAIT_FOR_CLOSE(); break; case STATE_INIT: fSTATE_INIT(); break; case STATE_PLAY: fSTATE_PLAY(); break; case STATE_END_SCREEN: fSTATE_END_SCREEN(); break; } } function fSTATE_TITLE_SCREEN() { titleScreen = parentTL.attachMovie("FTitleScreen","titlescreen", TITLE_SCREEN_DEPTH); titleScreen.setLocation(0,0); titleScreen.addEventListener("EventCloseTitleScreen", this); gameState = STATE_WAIT_FOR_CLOSE; } function EventCloseTitleScreen(e:Object) { trace("event close title screen"); titleScreen.removeMovieClip(); gameState = STATE_INIT; } function fSTATE_WAIT_FOR_CLOSE() { //waiting } function fSTATE_INIT() { player = parentTL.attachMovie("FPlayer", "player1", PLAYER_DEPTH); player.setLocation((Stage.width/2)-(player._width/2),Stage.height-player._height); player.addEventListener("EventFireMissile", this); this.addEventListener("Move",player); this.addEventListener("Render",player); gameState = STATE_PLAY; } function fSTATE_PLAY() { if (!pauseGame) { dispatchEvent({type:"Move"}); dispatchEvent({type:"Render"}); } } function onKeyDown() { if (Key.getCode() == PAUSE_KEY_CODE) { if (pauseGame) { pauseGame=false; } else { pauseGame=true; } } } function EventFireMissile() { var tempClip:MovieClip; var md:Number = getNextMissileDepth(); tempClip = parentTL.attachMovie("FMissile", "missile" + md, md); tempClip.setSpeed(10); tempClip.setFinishedY(0); tempClip.setLocation(player._x, player._y); tempClip.addEventListener("EventMissileOffScreen",this); this.addEventListener("Move",tempClip); this.addEventListener("Render",tempClip); missiles.push(tempClip); } function EventMissileOffScreen(e:Object) { this.removeEventListener("Move",e.missile); this.removeEventListener("Render",e.missile); e.missile.removeMovieClip(); removeMissile(e.missile); } function removeMissile(missile:MovieClip) { var tempClip:MovieClip = null; for (var i=missiles.length;i >= 0; i--) { tempClip=missiles[i]; if (tempClip==missile) { missiles[i].removeMovieClip(); missiles.splice(i,1); } } } function getNextMissileDepth():Number { missileCount++; if (missileCount+MISSILE_MIN_DEPTH > MISSILE_MAX_DEPTH) { missileCount = 0; } return missileCount+MISSILE_MIN_DEPTH; } function fSTATE_END_SCREEN() { endScreen = parentTL.attachMovie("FEndScreen","endscreen", END_SCREEN_DEPTH); endScreen.setLocation(0,0); endScreen.addEventListener("EventCloseEndScreen", this); gameState = STATE_WAIT_FOR_CLOSE; } function EventCloseEndScreen() { endScreen.removeMovieClip(); gameState = STATE_INIT; } public function addEventListener(){/*Interface Stub*/} public function removeEventListener(){/*Interface Stub*/} public function dispatchEvent(){/*Interface Stub*/} }