using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using SynthySound; using Synthizer; using Microsoft.Xna.Framework.Audio; using EvilSatellites.Screens; namespace EvilSatellites { public class ScreenManager : DrawableGameComponent { private List _Screens; private IScreen _CurrentScreen; private Game _Game; private bool _Running = false; public Synthy Sound = new Synthy(); public FDNReverb EnvironmentEffect; public AudioListener Listener = new AudioListener(); public ScreenManager(Game instance): base(instance) { EnvironmentEffect = Sound.CreateReverb(); EnvironmentEffect.Delay = 0.03; EnvironmentEffect.Wet = 30; EnvironmentEffect.T60 = 3.3; EnvironmentEffect.Defusion = 1; EnvironmentEffect.FreePath = 0.22; _Game = instance; _Screens = new List(); _CurrentScreen = null; } public override void Initialize() { _Running = true; foreach (var screen in _Screens) { screen.Activate(); } base.Initialize(); } public void AddScreen(IScreen screen) { screen.Manager = this; if (_Running) screen.Activate(); _Screens.Add(screen); } public void RemoveScreen(IScreen screen) { if (!_Screens.Contains(screen)) { throw new Exception("Cannot remove a screen that isn't added to manager"); } screen.Deactivate(); _Screens.Remove(screen); } public void Update(GameTime gameTime) { Sound.Update(); var input = Keyboard.GetState(); foreach (var screen in _Screens) { if (screen.State == ScreenState.Active) screen.HandleInput(gameTime, input); screen.Update(gameTime); } base.Update(gameTime); } } }