mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-12-26 18:19:24 +01:00
77 lines
No EOL
2.7 KiB
C#
77 lines
No EOL
2.7 KiB
C#
using Coroutine;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using Microsoft.Xna.Framework.Input;
|
|
using MLEM.Input;
|
|
using MLEM.Ui;
|
|
using MLEM.Ui.Style;
|
|
|
|
namespace MLEM.Startup {
|
|
public class MlemGame : Game {
|
|
|
|
private static MlemGame instance;
|
|
public static InputHandler Input => instance.InputHandler;
|
|
|
|
public readonly GraphicsDeviceManager GraphicsDeviceManager;
|
|
public SpriteBatch SpriteBatch { get; protected set; }
|
|
public InputHandler InputHandler { get; protected set; }
|
|
public UiSystem UiSystem { get; protected set; }
|
|
|
|
public GenericCallback OnLoadContent;
|
|
public TimeCallback OnUpdate;
|
|
public TimeCallback OnDraw;
|
|
|
|
public MlemGame(int windowWidth = 1280, int windowHeight = 720) {
|
|
instance = this;
|
|
|
|
this.GraphicsDeviceManager = new GraphicsDeviceManager(this) {
|
|
PreferredBackBufferWidth = windowWidth,
|
|
PreferredBackBufferHeight = windowHeight,
|
|
HardwareModeSwitch = false
|
|
};
|
|
this.Window.AllowUserResizing = true;
|
|
this.Content.RootDirectory = "Content";
|
|
}
|
|
|
|
protected override void LoadContent() {
|
|
this.SpriteBatch = new SpriteBatch(this.GraphicsDevice);
|
|
this.InputHandler = new InputHandler();
|
|
this.Components.Add(this.InputHandler);
|
|
this.UiSystem = new UiSystem(this.Window, this.GraphicsDevice, new UntexturedStyle(this.SpriteBatch), this.InputHandler);
|
|
this.Components.Add(this.UiSystem);
|
|
this.OnLoadContent?.Invoke(this);
|
|
}
|
|
|
|
protected sealed override void Update(GameTime gameTime) {
|
|
this.DoUpdate(gameTime);
|
|
this.OnUpdate?.Invoke(this, gameTime);
|
|
CoroutineHandler.Tick(gameTime.ElapsedGameTime.TotalSeconds);
|
|
CoroutineHandler.RaiseEvent(CoroutineEvents.Update);
|
|
}
|
|
|
|
protected sealed override void Draw(GameTime gameTime) {
|
|
this.UiSystem.DrawEarly(gameTime, this.SpriteBatch);
|
|
this.DoDraw(gameTime);
|
|
this.UiSystem.Draw(gameTime, this.SpriteBatch);
|
|
this.OnDraw?.Invoke(this, gameTime);
|
|
CoroutineHandler.RaiseEvent(CoroutineEvents.Draw);
|
|
}
|
|
|
|
protected virtual void DoDraw(GameTime gameTime) {
|
|
base.Draw(gameTime);
|
|
}
|
|
|
|
protected virtual void DoUpdate(GameTime gameTime) {
|
|
base.Update(gameTime);
|
|
}
|
|
|
|
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);
|
|
|
|
}
|
|
} |