Пример #1
0
        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();
        }