/// <summary> /// Updates the LaserDrone /// </summary> /// <param name="elapsedTime">The in-game time between the previous and current frame</param> public override void Update(float elapsedTime) { // Sense the Player's position PlayerShip Player = ScrollingShooterGame.Game.Player; Vector2 PlayerPosition = new Vector2(Player.Bounds.Center.X, Player.Bounds.Center.Y); switch (aiState) { case AIState.Chasing: getInPosition(PlayerPosition, elapsedTime); if (Math.Abs(PlayerPosition.X - Bounds.Center.X) < 40 && Bounds.Center.Y < PlayerPosition.Y) { //transition to firing state fireTimeRemaining = FIRE_TIME; aiState = AIState.Firing; currentSpeed = MAX_MOVE_SPEED * 0.66f; if (droneLaser == null) { droneLaser = (DroneLaser)ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.DroneLaser, Vector2.Zero); } droneLaser.isOn = true; droneLaser.laserPower = WeaponChargeLevel.Full; droneLaser.updatePosition(position.X + 23, position.Y + 30); } break; case AIState.Firing: fireTimeRemaining -= elapsedTime; //change to medium charge sprite when halfway depleted if (weaponChargeLevel == WeaponChargeLevel.Full && fireTimeRemaining / FIRE_TIME < 0.66) { weaponChargeLevel = droneLaser.laserPower = WeaponChargeLevel.Medium; } else if (weaponChargeLevel == WeaponChargeLevel.Medium && fireTimeRemaining / FIRE_TIME < 0.33) { weaponChargeLevel = droneLaser.laserPower = WeaponChargeLevel.Low; } if (fireTimeRemaining <= 0) { //transition to recharging state aiState = AIState.Recharging; currentSpeed = MAX_MOVE_SPEED * 0.33f; rechargeTimeRemaining = RECHARGE_TIME; weaponChargeLevel = WeaponChargeLevel.Low; droneLaser.isOn = false; } getInPosition(PlayerPosition, elapsedTime); droneLaser.updatePosition(position.X + 23, position.Y + 30); break; case AIState.Recharging: rechargeTimeRemaining -= elapsedTime; if (weaponChargeLevel == WeaponChargeLevel.Low && rechargeTimeRemaining / RECHARGE_TIME < 0.66) { weaponChargeLevel = WeaponChargeLevel.Medium; } if (weaponChargeLevel == WeaponChargeLevel.Medium && rechargeTimeRemaining / RECHARGE_TIME < 0.33) { weaponChargeLevel = WeaponChargeLevel.Full; } if (rechargeTimeRemaining <= 0) { aiState = AIState.Chasing; currentSpeed = MAX_MOVE_SPEED; weaponChargeLevel = WeaponChargeLevel.Full; } moveAwayFrom(PlayerPosition, elapsedTime); break; } }
/// <summary> /// Updates the Dart ship /// </summary> /// <param name="elapsedTime">The in-game time between the previous and current frame</param> public override void Update(float elapsedTime) { switch (BES) { case birdEntranceState.flyOver: this.position.Y -= elapsedTime * 500; if (position.Y <= 3892) // -200 { BES = birdEntranceState.enter; } break; case birdEntranceState.enter: this.position.Y += elapsedTime * 100; if (position.Y >= 0) { BES = birdEntranceState.normal; } ScrollingShooterGame.LevelManager.Scrolling = false; break; case birdEntranceState.normal: fireTimer += elapsedTime; laserTimer += elapsedTime; float velocity = 1; // Sense the player's position PlayerShip player = ScrollingShooterGame.Game.Player; Vector2 playerPosition = new Vector2(player.Bounds.Center.X, player.Bounds.Center.Y); if (playerPosition.X - Bounds.Center.X < -20) { this.position.X -= elapsedTime * 40 * velocity; } else { if (playerPosition.X - Bounds.Center.X > 20) { this.position.X += elapsedTime * 40 * velocity; } else { if (fireTimer > 0.6f) { ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.BirdWrath, position + beakPosition); fireTimer = 0f; } } } if (fireTimer > 1.5f) { ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.BirdWrath, position + beakPosition); fireTimer = 0f; } //Firein Mah Lazars!! switch (laserState) { case LaserState.off: if (laserTimer > 3f) { laserState = LaserState.turningOn; laserAnimState = 0; } break; case LaserState.turningOn: laserAnimState++; if (laserAnimState == NUMBER_OF_ANIM_STATES_LASER - 1) { laserState = LaserState.on; laserTimer = 0f; } break; case LaserState.on: LeftLaser.isOn = true; RightLaser.isOn = true; LeftLaser.updatePosition(position.X + LeftLaserPosition.X, position.Y + LeftLaserPosition.Y); RightLaser.updatePosition(position.X + RightLaserPosition.X, position.Y + RightLaserPosition.Y); if (laserTimer > 3f) { LeftLaser.isOn = false; RightLaser.isOn = false; laserState = LaserState.turningOff; } break; case LaserState.turningOff: laserAnimState--; if (laserAnimState == 0) { laserState = LaserState.off; laserTimer = 0f; } break; } break; case birdEntranceState.exit: this.position.Y += elapsedTime * 500; ScrollingShooterGame.LevelManager.Scrolling = true; break; } }