package { import flash.geom.Point; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; public class PlayerShip extends Ship { private var keyPress:Array; private var fireTimer:Timer; private var secFireTimer:Timer; private var respawnTimer:Timer; private var mainWep:Object; private var secWep:Object; private var afterBurnerActive:Boolean = false; private var timer:int = 0; private var secFireLoaded:Boolean = true; public function PlayerShip($keyPress:Array, $coords:Point, $rotation:Number, $sector:Sector, $shipData:Object, $allegience:int, $weaponData:Object) { super($coords, $rotation, $sector, $shipData, $allegience); keyPress = $keyPress; mainWep = $weaponData.getWeaponData($shipData.weaponPrim); secWep = $weaponData.getWeaponData($shipData.weaponSec); respawnTimer = new Timer(2000); respawnTimer.addEventListener(TimerEvent.TIMER, respawn, false, 0, true); respawnTimer.repeatCount = 0; fireTimer = new Timer((1 / mainWep.rof) * 1000); fireTimer.addEventListener(TimerEvent.TIMER, fire, false, 0, true); fireTimer.start(); secFireTimer = new Timer(secWep.rof); secFireTimer.addEventListener(TimerEvent.TIMER, reEnableSecFire, false, 0, true); respawnTimer.repeatCount = 0; addEventListener(Event.ENTER_FRAME, loop); } private function loop($e:Event):void { changeSpeed(); changeTorque(); move(); fireSec(); //timer restarts every 10th second, 0 - 400 if (++timer >= 400) timer = 0; } //changes speed according to keyboard presses private function changeSpeed():void { if (keyPress[0])//up Speed += SpeedAcc; else if (keyPress[1])//down Speed -= BreakSpeed; else Speed -= SpeedAcc; //round off Speed = (Math.round(Speed * 100)) / 100; } private function changeTorque():void { if (keyPress[2])//left TorqueSpeed -= TorqueAcc; else if (keyPress[3])//right TorqueSpeed += TorqueAcc; else breakTorque(); //trace("speed: " + Speed + " torqueSpeed: " + TorqueSpeed + " torqueRate: " + torqueRate); //trace("x:" + coordX + " y:" + coordY); } private function breakTorque():void { if (Math.abs(TorqueSpeed) > .05) { TorqueSpeed *= .9; }else { TorqueSpeed = 0; } } //fire main guns private function fire($e:Event):void { if (keyPress[4] && HP > 0 && Energy > 0) { getSector.addChildAt(new Projectile(Speed, rotation, mainWep, getSector, this), 0); Energy--; } } //firing missles and such private function fireSec():void { if (keyPress[5] && HP > 0 && secFireLoaded && SecAmmo > 0) { getSector.addChildAt(new Missile(Speed, rotation, secWep, getSector, this), 0); secFireLoaded = false; SecAmmo--; secFireTimer.start(); } } private function reEnableSecFire($e:Event):void { secFireTimer.reset(); secFireLoaded = true; } private function respawn($e:Event):void { respawnTimer.reset(); addEventListener(Event.ENTER_FRAME, loop); HP = MaxHP; visible = true; Dying = false; SecAmmo = 999; moveTo(new Point(Math.random() * getSector.SectorW, Math.random() * getSector.SectorH), Math.random() * 360); } public override function destroy():void { if (!Dying) { Dying = true; HP = 0; Speed = 0; TorqueSpeed = 0; visible = false; removeEventListener(Event.ENTER_FRAME, loop); removeEventListener(Event.ENTER_FRAME, reEnableSecFire); var boom:ShipExplode = new ShipExplode(); boom.x = x; boom.y = y; getSector.addChildAt(boom, 2); spawnSmoke(6, 1, 2, true); respawnTimer.start(); /* removeEventListener(Event.ENTER_FRAME, loop); super.destroy(); */ } } //--------------------------------------------set/get-------------------------------------------- public override function get ID():int { return -1; } public function get MainWep():Object { return mainWep; } public function set MainWep($value:Object):void { mainWep = $value; fireTimer.delay = (1 / mainWep.rof) * 1000; /* fireTimer.stop(); fireTimer = new Timer((1 / mainWep.rof) * 1000); fireTimer.addEventListener(TimerEvent.TIMER, fire, false, 0, true); fireTimer.start(); */ } public function get SecWep():Object { return secWep; } public function set SecWep($value:Object):void { secWep = $value; secFireTimer.delay = secWep.rof; } } }