refactor and better screen mechanism (probably)
This commit is contained in:
@@ -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)
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user