Files
evilsatellites/EvilSatellites/ScreenManager.cs
T

103 lines
3.1 KiB
C#
Raw Normal View History

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;
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;
2021-04-23 15:07:50 +02:00
private List<IScreen> _ToRemove;
private List<IScreen> _ToAdd;
2021-04-10 14:08:20 +02:00
private IScreen _CurrentScreen;
private Game _Game;
private bool _Running = false;
2021-04-23 20:28:06 +02:00
public Synthy Sound;
public MusicManager Music;
2021-04-24 18:47:51 +02:00
public AI Computer;
2021-04-24 02:47:17 +02:00
public VibrationManager Vibrations;
2021-04-10 14:08:20 +02:00
public FDNReverb EnvironmentEffect;
public ScreenManager(Game instance): base(instance)
{
2021-04-23 20:28:06 +02:00
Sound = new Synthy();
Music = new MusicManager(Sound);
2021-04-24 18:47:51 +02:00
Computer = new AI(Sound);
2021-04-24 02:47:17 +02:00
Vibrations = new VibrationManager(PlayerIndex.One);
2021-04-10 14:08:20 +02:00
EnvironmentEffect = Sound.CreateReverb();
EnvironmentEffect.Delay = 0.03;
EnvironmentEffect.Wet = 30;
2021-04-22 23:03:05 +02:00
EnvironmentEffect.T60 = 1;
2021-04-20 20:13:05 +02:00
EnvironmentEffect.Defusion = 1f;
EnvironmentEffect.FreePath = 0.02;
2021-04-23 15:07:50 +02:00
Sound.SetMaxDistance(150);
2021-04-10 14:08:20 +02:00
_Game = instance;
_Screens = new List<IScreen>();
2021-04-23 15:07:50 +02:00
_ToRemove = new List<IScreen>();
_ToAdd = new List<IScreen>();
2021-04-10 14:08:20 +02:00
_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;
2021-04-23 15:07:50 +02:00
_ToAdd.Add(screen);
2021-04-10 14:08:20 +02:00
}
public void RemoveScreen(IScreen screen)
{
if (!_Screens.Contains(screen))
{
throw new Exception("Cannot remove a screen that isn't added to manager");
}
2021-04-23 15:07:50 +02:00
_ToRemove.Add(screen);
2021-04-10 14:08:20 +02:00
}
public void Update(GameTime gameTime)
{
2021-04-24 02:47:17 +02:00
Vibrations.Update((float)gameTime.ElapsedGameTime.TotalMilliseconds);
2021-04-24 23:31:43 +02:00
Computer.Update(gameTime);
2021-04-23 15:07:50 +02:00
if (_ToAdd.Count > 0)
{
foreach (var screen in _ToAdd)
{
screen.Activate();
_Screens.Add(screen);
}
_ToAdd.Clear();
}
if (_ToRemove.Count > 0)
{
foreach (var screen in _ToRemove)
{
screen.Deactivate();
_Screens.Remove(screen);
}
_ToRemove.Clear();
}
2021-04-10 14:08:20 +02:00
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);
}
}
}