public override void Draw(SpriteBatch spriteBatch) { if (MainContent == null) { Screens.Pop(); return; } graphicsDevice.Clear(Color.Black); spriteBatch.Begin(); // player spriteBatch.Draw(MainContent.PlayerShip.Texture, new Rectangle(MainContent.PlayerShip.Location, MainContent.PlayerShip.Texture.Bounds.Size), Color.White); // draw each enemy foreach (EnemyModel enemy in MainContent.EnemyShipList.ToList()) { if (MainContent.RemoveIfOffScreen(enemy) == false) { if (MainContent.IsColliding(enemy, MainContent.PlayerShip)) { MainContent.PlayerShip.TakeDamage(enemy); enemy.TakeDamage(MainContent.PlayerShip); if (enemy.IsDead()) { Stats.EnemyDestroyed(); MainContent.RemoveEnemy(enemy); } MainContent.DrawTinyExplosion(MainContent.CollisionPoint(enemy, MainContent.PlayerShip)); } // "Check each enemy bullet to see if it collides with a good bullet" foreach (BulletModel goodBullet in MainContent.GoodBulletList.ToList()) { if (MainContent.IsColliding(enemy, goodBullet)) { Stats.AddPoints(5); MainContent.GoodBulletList.Remove(goodBullet); MainContent.DrawTinyExplosion(MainContent.CollisionPoint(enemy, goodBullet)); enemy.TakeDamage(goodBullet); if (enemy.IsDead()) { //Maybe drop bomb Random r = new Random(); if (r.Next() % 5 == 0) { MainContent.ModelFactory.BuildGenericModel(TextureNames.Bomb, MainContent.Events.TimeElapsed(), MainContent.Events.TimeElapsed() + 10, enemy.GetLocation(), 0); } Stats.EnemyDestroyed(); MainContent.RemoveEnemy(enemy); } MainContent.Events.RemoveFutureTaggedEvents(enemy); } } spriteBatch.Draw(enemy.Texture, enemy.DrawingLocationVector, new Rectangle(0, 0, enemy.Texture.Height, enemy.Texture.Height), Color.White, enemy.Rotation, new Point(0, 0).ToVector2(), enemy.Scale, SpriteEffects.None, 1.0f); } } foreach (BulletModel gb in MainContent.GoodBulletList) { spriteBatch.Draw(gb.Texture, gb.DrawingLocationVector, new Rectangle(0, 0, gb.Texture.Width, gb.Texture.Height), Color.White, gb.Rotation, new Point(0, 0).ToVector2(), gb.Scale, SpriteEffects.None, 1.0f); } foreach (BaseModel bm in MainContent.MiscModelList) { spriteBatch.Draw(bm.Texture, bm.DrawingLocationVector, new Rectangle(0, 0, bm.Texture.Height, bm.Texture.Height), Color.White, bm.Rotation, new Point(0, 0).ToVector2(), bm.Scale, SpriteEffects.None, 1.0f); } foreach (BaseModel bm in MainContent.PowerUpList) { spriteBatch.Draw(bm.Texture, bm.DrawingLocationVector, new Rectangle(0, 0, bm.Texture.Height, bm.Texture.Height), Color.White, bm.Rotation, new Point(0, 0).ToVector2(), bm.Scale, SpriteEffects.None, 1.0f); } foreach (BaseModel pu in MainContent.PowerUpList.ToList()) { if (MainContent.IsColliding(MainContent.PlayerShip, pu)) { MainContent.PowerUpList.Remove(pu); MainContent.PlayerShip.addBomb(); } } foreach (BulletModel enemyBullet in MainContent.EnemyBulletList.ToList()) { // "Check each enemy bullet to see if it collides with a good bullet" foreach (BulletModel goodBullet in MainContent.GoodBulletList.ToList()) { if (MainContent.IsColliding(enemyBullet, goodBullet)) { Stats.AddPoints(1); MainContent.GoodBulletList.Remove(goodBullet); MainContent.RemoveBullet(enemyBullet); MainContent.Events.RemoveFutureTaggedEvents(enemyBullet); // draw explosions lol MainContent.DrawTinyExplosion(MainContent.CollisionPoint(enemyBullet, goodBullet)); } } // "Check the enemey bullet to see if it is colliding with player" if (MainContent.IsColliding(enemyBullet, MainContent.PlayerShip)) { MainContent.PlayerShip.TakeDamage(enemyBullet); MainContent.RemoveBullet(enemyBullet); MainContent.Events.RemoveFutureTaggedEvents(enemyBullet); Point collisionPoint = MainContent.CollisionPoint(enemyBullet, MainContent.PlayerShip); MainContent.DrawTinyExplosion(collisionPoint); } else { spriteBatch.Draw(enemyBullet.Texture, enemyBullet.DrawingLocationVector, new Rectangle(0, 0, enemyBullet.Texture.Width, enemyBullet.Texture.Height), Color.White, enemyBullet.Rotation, new Point(0, 0).ToVector2(), enemyBullet.Scale, SpriteEffects.None, 1.0f); } } int j = 600; foreach (EnemyModel en in MainContent.EnemyShipList) { if (j < 300) { break; } spriteBatch.DrawString(font, en.Name + " Health: " + en.Health, new Vector2(25, j), Color.White); j -= 25; } spriteBatch.DrawString(font, "Bombs: " + MainContent.PlayerShip.getBombs(), new Vector2(25, 625), Color.Aqua); spriteBatch.DrawString(font, "Score: " + Stats.GetPoints(), new Vector2(25, 650), Color.Aqua); spriteBatch.DrawString(font, "Health: " + MainContent.PlayerShip.Health, new Vector2(25, 675), Color.Aqua); spriteBatch.DrawString(font, "Lives Remaining: " + MainContent.PlayerShip.Lives, new Vector2(25, 700), Color.DeepPink); spriteBatch.DrawString(font, "Time Elapsed: " + MainContent.Events.TimeElapsed(), new Vector2(25, 750), Color.White); if (MainContent.PlayerShip.IsInvincible) { spriteBatch.DrawString(font, "TEMPORARILY INVINCIBLE", new Vector2(25, 775), Color.Red); } if (MainContent.PlayerShip.IsDead()) { MainContent.PlayerShip.Lives -= 1; if (MainContent.PlayerShip.Lives == 0) { EndGameLostState es = new EndGameLostState(graphicsDevice, Content, ref Screens); MainContent.Events.StopTimer(); Screens.Push(es); } else { MainContent.PlayerShip.Respawn(); MainContent.EnablePlayerInvincibility(); } } if (MainContent.HasWon()) { EndGameWonState es = new EndGameWonState(graphicsDevice, Content, ref Screens); MainContent.Events.StopTimer(); Screens.Push(es); } spriteBatch.End(); }