Initial main menu impl

This commit is contained in:
2021-04-23 15:07:50 +02:00
parent 05657b14dd
commit 44f0f9e399
10 changed files with 91 additions and 38 deletions
+25 -6
View File
@@ -4,7 +4,6 @@ using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using SynthySound;
using Synthizer;
using Microsoft.Xna.Framework.Audio;
using EvilSatellites.Screens;
@@ -14,6 +13,8 @@ namespace EvilSatellites
public class ScreenManager : DrawableGameComponent
{
private List<IScreen> _Screens;
private List<IScreen> _ToRemove;
private List<IScreen> _ToAdd;
private IScreen _CurrentScreen;
private Game _Game;
private bool _Running = false;
@@ -29,9 +30,11 @@ namespace EvilSatellites
EnvironmentEffect.T60 = 1;
EnvironmentEffect.Defusion = 1f;
EnvironmentEffect.FreePath = 0.02;
Sound.SetMaxDistance(150);
_Game = instance;
_Screens = new List<IScreen>();
_ToRemove = new List<IScreen>();
_ToAdd = new List<IScreen>();
_CurrentScreen = null;
}
@@ -48,8 +51,7 @@ namespace EvilSatellites
public void AddScreen(IScreen screen)
{
screen.Manager = this;
if (_Running) screen.Activate();
_Screens.Add(screen);
_ToAdd.Add(screen);
}
public void RemoveScreen(IScreen screen)
{
@@ -57,12 +59,29 @@ namespace EvilSatellites
{
throw new Exception("Cannot remove a screen that isn't added to manager");
}
screen.Deactivate();
_Screens.Remove(screen);
_ToRemove.Add(screen);
}
public void Update(GameTime gameTime)
{
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();
}
Sound.Update();
var input = Keyboard.GetState();
foreach (var screen in _Screens)