Files
evilsatellites/EvilSatellites/ScreenManager.cs
T
2021-04-10 14:08:20 +02:00

73 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using SynthySound;
using Microsoft.Xna.Framework.Audio;
namespace EvilSatellites
{
public class ScreenManager : DrawableGameComponent
{
private List<IScreen> _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<IScreen>();
_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);
}
}
}