using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Input; namespace SuperPolarity { class GameScreen : Screen { public GameScreen(SuperPolarity newGame) : base(newGame) {} protected List Generators; protected int LivesRate; protected int CurrentLivesRate; protected int BombRate; protected int CurrentBombRate; protected SoundEffect BombSound; protected SoundEffect LifeSound; protected bool Flashing; protected bool IsPaused; protected Texture2D PauseScreen; public override void Initialize() { Generators = new List(); CurrentBombRate = 1; BombRate = 6000; LivesRate = 10000; CurrentLivesRate = 1; InputController.RegisterEventForButton("changePolarity", Buttons.A); InputController.RegisterEventForKey("changePolarity", Keys.Z); InputController.RegisterEventForButton("shoot", Buttons.X); InputController.RegisterEventForKey("shoot", Keys.X); InputController.Bind("pause", HandlePause); PauseScreen = Game.Content.Load("Graphics\\pause-screen"); } protected void HandlePause(float value) { Console.WriteLine("Paused"); IsPaused = !IsPaused; if (IsPaused) { MediaPlayer.Volume = 0.05f; } else { MediaPlayer.Volume = 1; } } public override void LoadContent() { CreateGenerators(); Vector2 playerPosition = new Vector2(Game.GraphicsDevice.Viewport.TitleSafeArea.X + Game.GraphicsDevice.Viewport.Width / 2, Game.GraphicsDevice.Viewport.TitleSafeArea.Y + Game.GraphicsDevice.Viewport.TitleSafeArea.Height / 2); BombSound = Game.Content.Load("Sound\\bomb"); LifeSound = Game.Content.Load("Sound\\life"); Renderer.CheckIn(ActorFactory.CreateMainShip(playerPosition)); Game.PlaySong("game"); } protected void CalculateBomb() { if (Game.Player.Score >= BombRate * CurrentBombRate) { ActorManager.Bomb(); Flashing = true; BombSound.Play(); CurrentBombRate = CurrentBombRate + 1; } } protected void CalculateLife() { if (Game.Player.Score >= LivesRate * CurrentLivesRate) { Game.Player.Lives = Game.Player.Lives + 1; LifeSound.Play(); CurrentLivesRate = CurrentLivesRate + 1; } } public override void Update(GameTime gameTime) { CalculateBomb(); CalculateLife(); InputController.UpdateInput(IsPaused); if (IsPaused) { return; } ActorManager.Update(gameTime); foreach (BasicGenerator generator in Generators) { generator.Update(gameTime); } } public override void Draw(SpriteBatch spriteBatch) { Renderer.Draw(spriteBatch); Game.Player.Draw(spriteBatch); if (IsPaused) { spriteBatch.Draw(PauseScreen, new Vector2(0, 0), Color.White); } if (Flashing) { Game.GraphicsDevice.Clear(Color.Black); Flashing = false; } } protected void CreateGenerators() { // The basic ship generators. var gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(-50, -50), BasicGenerator.Ships.Ship, 3000, 0); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(-50, Game.GraphicsDevice.Viewport.Height + 50), BasicGenerator.Ships.Ship, 3000, 0); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width + 50, -50), BasicGenerator.Ships.Ship, 3000, 0); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width + 50, Game.GraphicsDevice.Viewport.Height + 50), BasicGenerator.Ships.Ship, 3000, 0); Generators.Add(gen); // After 1.5k liberate some sporadic Scouts, and add two more ship generators. gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, -50), BasicGenerator.Ships.Ship, 3000, 1500); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, Game.GraphicsDevice.Viewport.Height + 50), BasicGenerator.Ships.Ship, 3000, 1500); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(-50, Game.GraphicsDevice.Viewport.Height / 2), BasicGenerator.Ships.Scout, 6000, 1500); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width + 50, Game.GraphicsDevice.Viewport.Height / 2), BasicGenerator.Ships.Scout, 6000, 1500); Generators.Add(gen); // After 3k add more scouts. gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, -50), BasicGenerator.Ships.Scout, 3000, 3000); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, Game.GraphicsDevice.Viewport.Height + 50), BasicGenerator.Ships.Scout, 3000, 5000); Generators.Add(gen); // After 5k release more ships and a cruiser. gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, -50), BasicGenerator.Ships.Ship, 1500, 5000); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width / 2, Game.GraphicsDevice.Viewport.Height + 50), BasicGenerator.Ships.Ship, 1500, 5000); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(-50, Game.GraphicsDevice.Viewport.Height / 2), BasicGenerator.Ships.Battlecruiser, 10000, 5000); Generators.Add(gen); gen = new BasicGenerator(); gen.Initialize(Game, new Vector2(Game.GraphicsDevice.Viewport.Width + 50, Game.GraphicsDevice.Viewport.Height / 2), BasicGenerator.Ships.Battlecruiser, 10000, 5000); Generators.Add(gen); } public override void CleanUp() { base.CleanUp(); Generators.Clear(); InputController.Unbind("pause", HandlePause); Renderer.Empty(); ActorManager.Empty(); } } }