1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-26 06:28:35 +01:00
MLEM/MLEM.Startup/MlemGame.cs

76 lines
2.8 KiB
C#
Raw Normal View History

2019-08-06 16:33:49 +02:00
using Coroutine;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using MLEM.Input;
2019-08-09 23:43:50 +02:00
using MLEM.Ui;
2019-08-10 21:37:10 +02:00
using MLEM.Ui.Style;
2019-08-06 16:33:49 +02:00
namespace MLEM.Startup {
public class MlemGame : Game {
private static MlemGame instance;
public static InputHandler Input => instance.InputHandler;
2019-08-06 16:33:49 +02:00
public readonly GraphicsDeviceManager GraphicsDeviceManager;
public SpriteBatch SpriteBatch { get; protected set; }
public InputHandler InputHandler { get; protected set; }
2019-08-09 23:43:50 +02:00
public UiSystem UiSystem { get; protected set; }
2019-08-06 16:33:49 +02:00
public GenericCallback OnLoadContent;
public TimeCallback OnUpdate;
public TimeCallback OnDraw;
2019-08-06 16:33:49 +02:00
public MlemGame(int windowWidth = 1280, int windowHeight = 720, bool vsync = false, bool allowResizing = true, string contentDir = "Content") {
instance = this;
this.GraphicsDeviceManager = new GraphicsDeviceManager(this) {
PreferredBackBufferWidth = windowWidth,
PreferredBackBufferHeight = windowHeight,
SynchronizeWithVerticalRetrace = vsync
};
this.Content.RootDirectory = contentDir;
this.Window.AllowUserResizing = allowResizing;
}
protected override void LoadContent() {
this.SpriteBatch = new SpriteBatch(this.GraphicsDevice);
this.InputHandler = new InputHandler();
this.Components.Add(this.InputHandler);
2019-08-10 21:37:10 +02:00
this.UiSystem = new UiSystem(this.Window, this.GraphicsDevice, new UntexturedStyle(this.SpriteBatch), this.InputHandler);
this.Components.Add(this.UiSystem);
this.OnLoadContent?.Invoke(this);
2019-08-06 16:33:49 +02:00
}
2019-12-05 17:35:24 +01:00
protected sealed override void Update(GameTime gameTime) {
this.DoUpdate(gameTime);
this.OnUpdate?.Invoke(this, gameTime);
CoroutineHandler.Tick(gameTime.ElapsedGameTime.TotalSeconds);
CoroutineHandler.RaiseEvent(CoroutineEvents.Update);
}
2019-08-06 16:33:49 +02:00
2019-12-01 20:25:25 +01:00
protected sealed override void Draw(GameTime gameTime) {
this.UiSystem.DrawEarly(gameTime, this.SpriteBatch);
this.DoDraw(gameTime);
2019-08-09 23:43:50 +02:00
this.UiSystem.Draw(gameTime, this.SpriteBatch);
this.OnDraw?.Invoke(this, gameTime);
CoroutineHandler.RaiseEvent(CoroutineEvents.Draw);
2019-08-06 16:33:49 +02:00
}
protected virtual void DoDraw(GameTime gameTime) {
base.Draw(gameTime);
}
2019-12-05 17:35:24 +01:00
protected virtual void DoUpdate(GameTime gameTime) {
base.Update(gameTime);
}
2019-08-06 16:33:49 +02:00
public static T LoadContent<T>(string name) {
return instance.Content.Load<T>(name);
}
public delegate void GenericCallback(MlemGame game);
public delegate void TimeCallback(MlemGame game, GameTime time);
2019-08-06 16:33:49 +02:00
}
}