refactor and better screen mechanism (probably)

This commit is contained in:
2018-11-17 23:27:05 -06:00
parent 8377bb5ae8
commit 1195b8228a
15 changed files with 89 additions and 71 deletions

View File

@@ -1,15 +1,17 @@

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Diagnostics;
namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
{
class LoadingScreen : Screen, ITransition
public class LoadingScreen : Screen, ITransition
{
private const float ENTER_TIME = 2f;
private const float EXIT_TIME = 1f;
Game game;
readonly Texture2D texture;
Color color;
Rectangle textureBounds;
@@ -22,12 +24,14 @@ namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
readonly bool rotate;
Vector2 origin;
public LoadingScreen(Texture2D texture, float proportion, bool rotate = false) : base(true)
public LoadingScreen(Game game, Texture2D screenImage, float proportion, bool rotate = false) : base(true)
{
this.texture = texture;
this.game = game;
this.texture = screenImage;
this.proportion = proportion;
this.rotate = rotate;
Transitions.Add(this);
game.IsMouseVisible = false;
}
public void InitiateTransition(Rectangle dimensions)

View File

@@ -10,16 +10,17 @@ using System.Threading.Tasks;
namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
{
public delegate void RequireNextScreen(Screen screen);
public delegate void FirstScreenChange(Screen screen);
public class ScreenManager : IDisposable
{
public event RequireNextScreen RequireNextScreenEvent;
public event FirstScreenChange RequireNextScreenEvent;
private GraphicsDeviceManager graphics;
private Screen previousScreen;
private RenderTarget2D previousScreenRenderTarget;
private Screen currentScreen;
private Camera2D camera;
private bool firstScreenChangeComplete;
public Screen Screen
{
get
@@ -42,7 +43,6 @@ namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
graphics.GraphicsDevice.Clear(Color.Black);
Debug.WriteLine("Showing " + value.GetType().Name);
Debug.WriteLine("Previous screen is " + previousScreen?.GetType().Name);
Screen.Show();
}
}
@@ -67,9 +67,10 @@ namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
case ScreenState.ExitTransition:
if (Screen.UseRenderTargetForExitTransition || Screen.UpdateTransition(gameTime.ElapsedGameTime.TotalSeconds, assetsDone))
{
if (Screen.NextScreen == null)
if (!firstScreenChangeComplete)
{
OnRequireNextScreen(Screen);
firstScreenChangeComplete = true;
OnFirstScreenChange(Screen);
}
if (Screen.NextScreen != null)
{
@@ -109,10 +110,10 @@ namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
spriteBatch.End();
}
public void Resize(Texture2D loadingScreenSymbol)
public void Resize(LoadingScreen loadingScreen)
{
Screen.AssetLoadStateChange(true);
Screen = new LoadingScreen(loadingScreenSymbol, 0.3f, true);
Screen = loadingScreen;
previousScreenRenderTarget.Dispose();
previousScreenRenderTarget = null;
}
@@ -122,7 +123,7 @@ namespace RhythmBullet.Zer01HD.Utilities.ScreenSystem
Screen.AssetLoadStateChange(false);
}
public void OnRequireNextScreen(Screen screen)
public void OnFirstScreenChange(Screen screen)
{
RequireNextScreenEvent?.Invoke(screen);
}