2021-04-10 14:08:20 +02:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using Microsoft.Xna.Framework;
|
|
|
|
|
using Microsoft.Xna.Framework.Input;
|
|
|
|
|
using SynthySound;
|
2021-04-11 20:43:29 +02:00
|
|
|
using Synthizer;
|
2021-04-10 14:08:20 +02:00
|
|
|
using Microsoft.Xna.Framework.Audio;
|
2021-04-11 17:09:57 +02:00
|
|
|
using EvilSatellites.Screens;
|
|
|
|
|
|
2021-04-10 14:08:20 +02:00
|
|
|
|
|
|
|
|
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();
|
2021-04-11 20:43:29 +02:00
|
|
|
|
2021-04-10 14:08:20 +02:00
|
|
|
public FDNReverb EnvironmentEffect;
|
|
|
|
|
public AudioListener Listener = new AudioListener();
|
|
|
|
|
public ScreenManager(Game instance): base(instance)
|
|
|
|
|
{
|
|
|
|
|
EnvironmentEffect = Sound.CreateReverb();
|
|
|
|
|
EnvironmentEffect.Delay = 0.03;
|
|
|
|
|
EnvironmentEffect.Wet = 30;
|
2021-04-15 01:30:13 +02:00
|
|
|
EnvironmentEffect.T60 = 5;
|
2021-04-10 14:08:20 +02:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|