/// <summary> /// The draw method for the Jet, draws the Jet to the screen if it is alive /// </summary> /// <param name="elapsedTime">The time elapsed since the last Draw</param> /// <param name="spriteBatch">The sprite batch to draw this Jet into</param> public override void Draw(float elapsedTime, SpriteBatch spriteBatch) { bool isInHealthyRetreat = (_myVisualState == JetMinionVisualState.HEALTHY) && (_myBehaviourState == JetMinionBehaviourState.RETREAT); bool isInDamagedRetreat = (_myVisualState == JetMinionVisualState.DAMAGED) && (_myBehaviourState == JetMinionBehaviourState.RETREAT); bool isDestroyedWhileRetreating = (_myVisualState == JetMinionVisualState.EXPLODING) && (_myBehaviourState == JetMinionBehaviourState.RETREAT); if (_myVisualState == JetMinionVisualState.HEALTHY || isInHealthyRetreat) { spriteBatch.Draw(_spriteSheet, _position, _spriteBounds[(int)_myVisualState], Color.White, 0f, Vector2.Zero, SpriteScale, SpriteEffects.None, 0); } else if (_myVisualState == JetMinionVisualState.DAMAGED || isInDamagedRetreat) { //The position of the gun turrets will change depending on the sprite scale, so //we need to take that into account Vector2 gunSectionPosition = _position + (GunSectionOffset * SpriteScale); //We need to draw both the Jet and the gun turrets in the damaged state spriteBatch.Draw(_spriteSheet, _position, _spriteBounds[(int)_myVisualState], Color.White, 0f, Vector2.Zero, SpriteScale, SpriteEffects.None, 0); spriteBatch.Draw(_spriteSheet, gunSectionPosition, _spriteGun[(int)_myGunState], Color.White, 0f, Vector2.Zero, SpriteScale, SpriteEffects.None, 0); } else if (_myVisualState == JetMinionVisualState.EXPLODING || isDestroyedWhileRetreating) { if (_timerExplosion <= 0) { _explosionAnimator.StopAndFinish(); _timerExplosion = TotalExplosionTime; } else { _timerExplosion -= elapsedTime; } _explosionAnimator.Draw(elapsedTime, spriteBatch); } }