Add and implement interfaces for systems (ISystem, IUpdatableSystem, etc.), move Color to Utils, rename Handlers/Renderers/Backends to System, move input related classes to an Input subfolder.
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
namespace Voile.Audio
|
||||
{
|
||||
public class DummyAudioBackend : AudioBackend
|
||||
/// <summary>
|
||||
/// Dummy audio system.
|
||||
/// </summary>
|
||||
public class DummyAudioSystem : AudioSystem
|
||||
{
|
||||
public override void AddBusEffect<T>(T effect, string bus = "Master")
|
||||
{
|
||||
@@ -17,7 +20,7 @@ namespace Voile.Audio
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
protected override void Initialize()
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -32,7 +35,7 @@ namespace Voile.Audio
|
||||
return;
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
protected override void Update()
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -4,9 +4,9 @@ using Voile.Utils;
|
||||
|
||||
namespace Voile.Audio
|
||||
{
|
||||
public class FmodAudioBackend : AudioBackend
|
||||
public class FmodAudioSystem : AudioSystem
|
||||
{
|
||||
public override void Initialize()
|
||||
protected override void Initialize()
|
||||
{
|
||||
CreateSystem();
|
||||
_loadedSounds = new Dictionary<string, FMOD.Sound>();
|
||||
@@ -14,7 +14,7 @@ namespace Voile.Audio
|
||||
|
||||
CreateBus("Master");
|
||||
}
|
||||
public override void Update() => _system.update();
|
||||
protected override void Update() => _system.update();
|
||||
|
||||
public override void PlaySound(Sound sound, float pitch, float volume, string bus = "Master")
|
||||
{
|
||||
@@ -134,7 +134,7 @@ namespace Voile.Audio
|
||||
return _channelGroups[busName];
|
||||
}
|
||||
|
||||
private Logger _logger = new(nameof(FmodAudioBackend));
|
||||
private Logger _logger = new(nameof(FmodAudioSystem));
|
||||
private FMOD.System _system;
|
||||
|
||||
// TODO: use a different key for the dictionary, paths are not good :( (waste of memory lol)
|
||||
@@ -3,7 +3,7 @@ namespace Voile.Audio
|
||||
public class SoundInstance
|
||||
{
|
||||
protected virtual Sound Sound => _sound;
|
||||
public SoundInstance(AudioBackend backend, Sound sound)
|
||||
public SoundInstance(AudioSystem backend, Sound sound)
|
||||
{
|
||||
_backend = backend;
|
||||
_sound = sound;
|
||||
@@ -34,7 +34,7 @@ namespace Voile.Audio
|
||||
_backend.PlaySound(Sound, _pitch, _volume, _bus);
|
||||
}
|
||||
|
||||
private readonly AudioBackend _backend;
|
||||
private readonly AudioSystem _backend;
|
||||
private readonly Sound _sound;
|
||||
private string _bus = "Master";
|
||||
private float _pitch, _volume = 1.0f;
|
||||
|
||||
@@ -10,14 +10,14 @@ namespace Voile
|
||||
/// </summary>
|
||||
protected ResourceManager ResourceManager { get; private set; }
|
||||
/// <summary>
|
||||
/// The InputHandler associated with this game. Uses <see cref="RaylibInputHandler"/> by default.
|
||||
/// The InputHandler associated with this game. Uses <see cref="RaylibInputSystem"/> by default.
|
||||
/// </summary>
|
||||
protected InputHandler Input { get; private set; }
|
||||
protected InputSystem Input { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The Renderer associated with this game. Uses <see cref="RaylibRenderer"/> by default.
|
||||
/// The Renderer associated with this game. Uses <see cref="RaylibRenderSystem"/> by default.
|
||||
/// </summary>
|
||||
protected Renderer Renderer { get; private set; }
|
||||
protected RenderSystem Renderer { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Resource root path for this game.
|
||||
@@ -37,8 +37,8 @@ namespace Voile
|
||||
public Game()
|
||||
{
|
||||
ResourceManager = new ResourceManager();
|
||||
Input = new RaylibInputHandler();
|
||||
Renderer = new RaylibRenderer();
|
||||
Input = new RaylibInputSystem();
|
||||
Renderer = new RaylibRenderSystem();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -61,8 +61,10 @@ namespace Voile
|
||||
{
|
||||
ResourceManager.ResourceRoot = ResourceRoot;
|
||||
|
||||
Input = new RaylibInputHandler();
|
||||
Renderer = new RaylibRenderer();
|
||||
Input = new RaylibInputSystem();
|
||||
Renderer = new RaylibRenderSystem();
|
||||
|
||||
Input.Start();
|
||||
|
||||
InitializeRenderer();
|
||||
}
|
||||
@@ -103,7 +105,7 @@ namespace Voile
|
||||
if (!string.IsNullOrWhiteSpace(Name))
|
||||
windowSettings.Title = Name;
|
||||
|
||||
Renderer.CreateAndInitialize(windowSettings, RendererSettings.Default);
|
||||
Renderer.Start(RendererSettings.Default);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@ namespace Voile
|
||||
{
|
||||
public abstract class InputAction
|
||||
{
|
||||
public abstract bool IsDown(InputHandler inputHandler);
|
||||
public abstract bool IsPressed(InputHandler inputHandler);
|
||||
public abstract bool IsReleased(InputHandler inputHandler);
|
||||
public abstract bool IsDown(InputSystem inputHandler);
|
||||
public abstract bool IsPressed(InputSystem inputHandler);
|
||||
public abstract bool IsReleased(InputSystem inputHandler);
|
||||
}
|
||||
|
||||
public class KeyInputAction : InputAction
|
||||
@@ -15,17 +15,17 @@ namespace Voile
|
||||
{
|
||||
_keyboardKey = keyboardKey;
|
||||
}
|
||||
public override bool IsDown(InputHandler inputHandler)
|
||||
public override bool IsDown(InputSystem inputHandler)
|
||||
{
|
||||
return inputHandler.IsKeyboardKeyDown(_keyboardKey);
|
||||
}
|
||||
|
||||
public override bool IsPressed(InputHandler inputHandler)
|
||||
public override bool IsPressed(InputSystem inputHandler)
|
||||
{
|
||||
return inputHandler.KeyboardKeyJustPressed(_keyboardKey);
|
||||
}
|
||||
|
||||
public override bool IsReleased(InputHandler inputHandler)
|
||||
public override bool IsReleased(InputSystem inputHandler)
|
||||
{
|
||||
return inputHandler.KeyboardKeyJustReleased(_keyboardKey);
|
||||
}
|
||||
@@ -3,7 +3,10 @@ using Raylib_cs;
|
||||
|
||||
namespace Voile
|
||||
{
|
||||
public class RaylibInputHandler : InputHandler
|
||||
/// <summary>
|
||||
/// An input system implemented using Raylib's API. Used by default together with <see cref="RaylibRenderer"/>.
|
||||
/// </summary>
|
||||
public class RaylibInputSystem : InputSystem
|
||||
{
|
||||
public override int GetCharPressed()
|
||||
{
|
||||
@@ -1,11 +1,10 @@
|
||||
using System.Numerics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Raylib_cs;
|
||||
|
||||
namespace Voile.Rendering
|
||||
{
|
||||
public class RaylibRenderer : Renderer
|
||||
public class RaylibRenderSystem : RenderSystem
|
||||
{
|
||||
public override bool ShouldRun => !WindowShouldClose();
|
||||
public override Vector2 WindowSize
|
||||
@@ -33,6 +32,31 @@ namespace Voile.Rendering
|
||||
public override bool VSync { get => _vsync; set => SetWindowVSync(value); }
|
||||
public override bool Fullscreen { get => _fullscreen; set => SetFullscreen(value); }
|
||||
|
||||
public override void Initialize(RendererSettings settings)
|
||||
{
|
||||
_targetFps = settings.TargetFps;
|
||||
|
||||
ConfigFlags flags = 0;
|
||||
|
||||
// MSAA
|
||||
flags |= settings.Msaa == Msaa.Msaa4x ? ConfigFlags.FLAG_MSAA_4X_HINT : 0;
|
||||
|
||||
// VSync
|
||||
flags |= settings.UseVSync ? ConfigFlags.FLAG_VSYNC_HINT : 0;
|
||||
|
||||
_fullscreen = settings.Fullscreen;
|
||||
|
||||
_defaultFlags = flags;
|
||||
|
||||
Raylib.SetConfigFlags(flags);
|
||||
}
|
||||
|
||||
public override void CreateAndInitializeWithWindow(RendererSettings settings)
|
||||
{
|
||||
Initialize(settings);
|
||||
CreateWindow(settings.WindowSettings);
|
||||
}
|
||||
|
||||
public override void CreateWindow(WindowSettings windowSettings)
|
||||
{
|
||||
Raylib.SetTraceLogLevel(TraceLogLevel.LOG_NONE);
|
||||
@@ -154,25 +178,6 @@ namespace Voile.Rendering
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override void Initialize(RendererSettings settings)
|
||||
{
|
||||
_targetFps = settings.TargetFps;
|
||||
|
||||
ConfigFlags flags = 0;
|
||||
|
||||
// MSAA
|
||||
flags |= settings.Msaa == Msaa.Msaa4x ? ConfigFlags.FLAG_MSAA_4X_HINT : 0;
|
||||
|
||||
// VSync
|
||||
flags |= settings.UseVSync ? ConfigFlags.FLAG_VSYNC_HINT : 0;
|
||||
|
||||
_fullscreen = settings.Fullscreen;
|
||||
|
||||
_defaultFlags = flags;
|
||||
|
||||
Raylib.SetConfigFlags(flags);
|
||||
}
|
||||
|
||||
private void SetFullscreen(bool fullscreen)
|
||||
{
|
||||
// var flags = _defaultFlags;
|
||||
@@ -193,12 +198,6 @@ namespace Voile.Rendering
|
||||
// TODO
|
||||
public override void SetTransform(Matrix4x4 transform) { }
|
||||
|
||||
public override void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings)
|
||||
{
|
||||
Initialize(renderSettings);
|
||||
CreateWindow(windowSettings);
|
||||
}
|
||||
|
||||
private Raylib_cs.Color VoileColorToRaylibColor(Color color)
|
||||
{
|
||||
return new Raylib_cs.Color { r = (byte)Math.Round(color.R * 255f), g = (byte)Math.Round(color.G * 255f), b = (byte)Math.Round(color.B * 255f), a = (byte)Math.Round(color.A * 255f) };
|
||||
@@ -284,7 +283,6 @@ namespace Voile.Rendering
|
||||
texture.Handle = _texturePool.Count - 1;
|
||||
}
|
||||
|
||||
|
||||
private List<Texture2D> _texturePool = new();
|
||||
private List<Raylib_cs.Font> _fontPool = new();
|
||||
private Vector2 _windowSize;
|
||||
@@ -12,7 +12,7 @@ namespace Voile.Rendering
|
||||
/// <summary>
|
||||
/// A standard, WebGPU-based renderer.
|
||||
/// </summary>
|
||||
public class StandardRenderer : Renderer
|
||||
public class StandardRenderSystem : RenderSystem
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override Vector2 WindowSize { get; set; }
|
||||
@@ -43,10 +43,10 @@ namespace Voile.Rendering
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings)
|
||||
public override void CreateAndInitializeWithWindow(RendererSettings settings)
|
||||
{
|
||||
CreateWindow(windowSettings);
|
||||
Initialize(renderSettings);
|
||||
CreateWindow(settings.WindowSettings);
|
||||
Initialize(settings);
|
||||
}
|
||||
|
||||
public override void CreateWindow(WindowSettings windowSettings)
|
||||
@@ -369,6 +369,6 @@ namespace Voile.Rendering
|
||||
private unsafe CommandEncoder* _commandEncoder;
|
||||
private unsafe RenderPassEncoder* _renderPassEncoder;
|
||||
|
||||
private Logger _logger = new(nameof(StandardRenderer));
|
||||
private Logger _logger = new(nameof(StandardRenderSystem));
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ namespace Voile.SceneGraph
|
||||
public float Radius { get => _radius; set => _radius = value; }
|
||||
public Color Color { get => _color; set => _color = value; }
|
||||
|
||||
public override void OnDraw(Renderer renderer)
|
||||
public override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
renderer.DrawCircle(_radius, _color);
|
||||
}
|
||||
|
||||
@@ -6,12 +6,12 @@ namespace Voile.SceneGraph
|
||||
public abstract class Drawable2d : Entity2d, IDrawable
|
||||
{
|
||||
public Vector2 PivotOffset { get; set; }
|
||||
public void Draw(Renderer renderer)
|
||||
public void Draw(RenderSystem renderer)
|
||||
{
|
||||
renderer.SetTransform(Position, PivotOffset, Rotation);
|
||||
OnDraw(renderer);
|
||||
}
|
||||
|
||||
public abstract void OnDraw(Renderer renderer);
|
||||
public abstract void OnDraw(RenderSystem renderer);
|
||||
}
|
||||
}
|
||||
@@ -7,19 +7,19 @@ namespace Voile.SceneGraph
|
||||
public class Entity
|
||||
{
|
||||
[JsonIgnore] public EntityLayer? Layer { get; set; }
|
||||
[JsonIgnore] public InputHandler Input => Layer!.Scene.Input;
|
||||
[JsonIgnore] public AudioBackend Audio => Layer!.Scene.Audio;
|
||||
[JsonIgnore] public Renderer Renderer => Layer!.Scene.Renderer;
|
||||
[JsonIgnore] public InputSystem Input => Layer!.Scene.Input;
|
||||
[JsonIgnore] public AudioSystem Audio => Layer!.Scene.Audio;
|
||||
[JsonIgnore] public RenderSystem Renderer => Layer!.Scene.Renderer;
|
||||
public int Id { get; set; }
|
||||
|
||||
public void Start() => OnStart();
|
||||
public void Update(double dt) => OnUpdate(dt);
|
||||
public void ReceiveInput(InputHandler input) => OnInput(input);
|
||||
public void ReceiveInput(InputSystem input) => OnInput(input);
|
||||
|
||||
protected virtual void OnStart() { }
|
||||
protected virtual void OnDestroy() { }
|
||||
protected virtual void OnUpdate(double dt) { }
|
||||
protected virtual void OnInput(InputHandler input) { }
|
||||
protected virtual void OnInput(InputSystem input) { }
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
|
||||
@@ -4,6 +4,6 @@ namespace Voile.SceneGraph
|
||||
{
|
||||
public interface IDrawable
|
||||
{
|
||||
public void Draw(Renderer renderer);
|
||||
public void Draw(RenderSystem renderer);
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDraw(Renderer renderer)
|
||||
public override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
foreach (var particle in _particles)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ public class RectangleShape2d : Drawable2d
|
||||
{
|
||||
public Vector2 Size { get; set; } = Vector2.One * 32;
|
||||
public Color Color { get; set; } = Color.White;
|
||||
public override void OnDraw(Renderer renderer)
|
||||
public override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
PivotOffset = Size / 2;
|
||||
renderer.DrawRectangle(Size, Color);
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Voile.SceneGraph
|
||||
var renderer = Layer.Scene.Renderer;
|
||||
}
|
||||
|
||||
public override void OnDraw(Renderer renderer)
|
||||
public override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
renderer.DrawTexture(_texture!, Color.White);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Voile.SceneGraph
|
||||
_font = font;
|
||||
}
|
||||
|
||||
public override void OnDraw(Renderer renderer)
|
||||
public override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
if (_font == null)
|
||||
{
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnBeginDraw(Renderer renderer)
|
||||
protected override void OnBeginDraw(RenderSystem renderer)
|
||||
{
|
||||
if (CurrentCamera is not null)
|
||||
{
|
||||
@@ -83,7 +83,7 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnEndDraw(Renderer renderer)
|
||||
protected override void OnEndDraw(RenderSystem renderer)
|
||||
{
|
||||
if (CurrentCamera is not null)
|
||||
{
|
||||
@@ -92,7 +92,7 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
|
||||
|
||||
protected override void OnDraw(Renderer renderer)
|
||||
protected override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
// TODO: can be done more efficiently, needs rendering redesign.
|
||||
foreach (var entity in Entities)
|
||||
|
||||
@@ -7,22 +7,22 @@ namespace Voile.SceneGraph
|
||||
public abstract class Layer : IDrawable
|
||||
{
|
||||
[JsonIgnore] public Scene? Scene { get; set; }
|
||||
[JsonIgnore] public InputHandler? Input { get; set; }
|
||||
[JsonIgnore] public InputSystem? Input { get; set; }
|
||||
[JsonIgnore] public ResourceManager ResourceManager => Scene!.ResourceManager;
|
||||
|
||||
public void BeginDraw(Renderer renderer) => OnBeginDraw(renderer);
|
||||
public void Draw(Renderer renderer) => OnDraw(renderer);
|
||||
public void EndDraw(Renderer renderer) => OnEndDraw(renderer);
|
||||
public void BeginDraw(RenderSystem renderer) => OnBeginDraw(renderer);
|
||||
public void Draw(RenderSystem renderer) => OnDraw(renderer);
|
||||
public void EndDraw(RenderSystem renderer) => OnEndDraw(renderer);
|
||||
|
||||
public void Start() => OnStart();
|
||||
public void Update(double dt) => OnUpdate(dt);
|
||||
public void ReceiveInput(InputHandler input) => OnInput(input);
|
||||
public void ReceiveInput(InputSystem input) => OnInput(input);
|
||||
|
||||
protected virtual void OnStart() { }
|
||||
protected virtual void OnUpdate(double dt) { }
|
||||
protected virtual void OnInput(InputHandler input) { }
|
||||
protected abstract void OnBeginDraw(Renderer renderer);
|
||||
protected abstract void OnDraw(Renderer renderer);
|
||||
protected abstract void OnEndDraw(Renderer renderer);
|
||||
protected virtual void OnInput(InputSystem input) { }
|
||||
protected abstract void OnBeginDraw(RenderSystem renderer);
|
||||
protected abstract void OnDraw(RenderSystem renderer);
|
||||
protected abstract void OnEndDraw(RenderSystem renderer);
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,9 @@ namespace Voile.SceneGraph
|
||||
{
|
||||
public class Scene : IMainLoop
|
||||
{
|
||||
public Renderer Renderer { get => _renderer; set => _renderer = value; }
|
||||
public InputHandler? Input { get => _input; set => _input = value; }
|
||||
public AudioBackend? Audio => _audioBackend;
|
||||
public RenderSystem Renderer { get => _renderer; set => _renderer = value; }
|
||||
public InputSystem? Input { get => _input; set => _input = value; }
|
||||
public AudioSystem? Audio => _audioBackend;
|
||||
public ResourceManager ResourceManager => _resourceManager;
|
||||
|
||||
public double DeltaTime => _renderer.FrameTime;
|
||||
@@ -75,7 +75,7 @@ namespace Voile.SceneGraph
|
||||
layer.Value.Update(DeltaTime);
|
||||
}
|
||||
|
||||
Audio?.Update();
|
||||
Audio?.Update(DeltaTime);
|
||||
}
|
||||
|
||||
public void AddLayer(string name, Layer layer)
|
||||
@@ -114,17 +114,17 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
|
||||
private Dictionary<string, Layer> _layers = new();
|
||||
private Renderer _renderer;
|
||||
private AudioBackend? _audioBackend;
|
||||
private InputHandler? _input;
|
||||
private RenderSystem _renderer;
|
||||
private AudioSystem? _audioBackend;
|
||||
private InputSystem? _input;
|
||||
private ResourceManager _resourceManager;
|
||||
}
|
||||
|
||||
public struct SceneSettings
|
||||
{
|
||||
public Renderer Renderer { get; set; }
|
||||
public AudioBackend AudioBackend { get; set; }
|
||||
public InputHandler InputHandler { get; set; }
|
||||
public RenderSystem Renderer { get; set; }
|
||||
public AudioSystem AudioBackend { get; set; }
|
||||
public InputSystem InputHandler { get; set; }
|
||||
public ResourceManager ResourceManager { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,19 @@
|
||||
namespace Voile.Audio
|
||||
{
|
||||
public abstract class AudioBackend : IDisposable
|
||||
public abstract class AudioSystem : IStartableSystem, IUpdatableSystem, IDisposable
|
||||
{
|
||||
public abstract void Initialize();
|
||||
public abstract void Update();
|
||||
public void Start() => Initialize();
|
||||
|
||||
public void Update(double deltaTime) => Update();
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Shutdown();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected abstract void Initialize();
|
||||
protected abstract void Update();
|
||||
protected abstract void Shutdown();
|
||||
// BUS
|
||||
public abstract void CreateBus(string busName);
|
||||
@@ -23,11 +33,6 @@ namespace Voile.Audio
|
||||
// EFFECTS
|
||||
public abstract void AddBusEffect<T>(T effect, string bus = "Master") where T : AudioEffect;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Shutdown();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
private LehmerRandom _random = new LehmerRandom();
|
||||
}
|
||||
18
Voile/Source/Systems/ISystem.cs
Normal file
18
Voile/Source/Systems/ISystem.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
public interface IStartableSystem
|
||||
{
|
||||
void Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A system that accepts additional data for starting.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public interface IStartableSystem<T>
|
||||
{
|
||||
void Start(T configuration);
|
||||
}
|
||||
|
||||
public interface IUpdatableSystem
|
||||
{
|
||||
void Update(double deltaTime);
|
||||
}
|
||||
@@ -4,16 +4,24 @@ using Voile.Utils;
|
||||
|
||||
namespace Voile
|
||||
{
|
||||
public abstract class InputHandler : IDisposable
|
||||
/// <summary>
|
||||
/// A system providing means for collecting user input, as well as defining custom <see cref="InputAction"/> list.
|
||||
/// </summary>
|
||||
public abstract class InputSystem : IStartableSystem, IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// The list of all available input mappings, custom and built-in.
|
||||
/// </summary>
|
||||
public static IReadOnlyDictionary<string, List<InputAction>> InputMappings => inputMappings;
|
||||
|
||||
public InputHandler()
|
||||
public void Start()
|
||||
{
|
||||
inputMappings = new Dictionary<string, List<InputAction>>();
|
||||
CreateDefaultMappings();
|
||||
}
|
||||
|
||||
public void Shutdown() => Dispose();
|
||||
|
||||
public void Dispose() => GC.SuppressFinalize(this);
|
||||
|
||||
public bool Handled { get => _handled; set => _handled = value; }
|
||||
@@ -79,10 +87,9 @@ namespace Voile
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
protected static Dictionary<string, List<InputAction>> inputMappings = new();
|
||||
private bool _handled;
|
||||
private Logger _logger = new(nameof(InputHandler));
|
||||
private Logger _logger = new(nameof(InputSystem));
|
||||
}
|
||||
|
||||
public enum KeyboardKey
|
||||
@@ -198,6 +205,8 @@ namespace Voile
|
||||
RightSuper = 347,
|
||||
KBMenu = 348
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum MouseButton
|
||||
{
|
||||
Left = 0,
|
||||
@@ -5,15 +5,26 @@ namespace Voile.Rendering
|
||||
/// <summary>
|
||||
/// An abstract class representing the graphics renderer.
|
||||
/// </summary>
|
||||
public abstract class Renderer : IDisposable
|
||||
public abstract class RenderSystem : IStartableSystem<RendererSettings>, IDisposable
|
||||
{
|
||||
public void Start(RendererSettings settings)
|
||||
{
|
||||
CreateAndInitializeWithWindow(settings);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Dispose()
|
||||
{
|
||||
Shutdown();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// INIT
|
||||
/// <summary>
|
||||
/// Creates the renderer window and initializes internal resources.
|
||||
/// Creates the renderer with an OS window and initializes internal resources.
|
||||
/// </summary>
|
||||
/// <param name="windowSettings">Settings for the rendering window.</param>
|
||||
/// <param name="renderSettings">Rendering settings.</param>
|
||||
public abstract void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings);
|
||||
public abstract void CreateAndInitializeWithWindow(RendererSettings renderSettings);
|
||||
/// <summary>
|
||||
/// Initializes internal resources. Should be called before other methods.
|
||||
/// </summary>
|
||||
@@ -46,13 +57,6 @@ namespace Voile.Rendering
|
||||
/// </summary>
|
||||
public abstract Vector2 MonitorSize { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Dispose()
|
||||
{
|
||||
Shutdown();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a window.
|
||||
/// </summary>
|
||||
@@ -148,6 +152,7 @@ namespace Voile.Rendering
|
||||
/// <param name="tint">Texture tint.</param>
|
||||
public abstract void DrawTexture(Texture2d texture, Color tint);
|
||||
|
||||
|
||||
protected Vector2 transformPosition, transformOffset;
|
||||
protected float transformRotation;
|
||||
}
|
||||
@@ -166,12 +171,15 @@ namespace Voile.Rendering
|
||||
public bool Fullscreen;
|
||||
public int TargetFps = 60;
|
||||
|
||||
public WindowSettings WindowSettings;
|
||||
|
||||
public RendererSettings() { }
|
||||
|
||||
public static RendererSettings Default => new RendererSettings()
|
||||
{
|
||||
UseVSync = true,
|
||||
TargetFps = 60
|
||||
TargetFps = 60,
|
||||
WindowSettings = WindowSettings.Default
|
||||
};
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class Container : UIElement
|
||||
|
||||
protected virtual void RearrangeChild(int idx, UIElement child) { }
|
||||
|
||||
protected override void OnRender(Renderer renderer)
|
||||
protected override void OnRender(RenderSystem renderer)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ public class Panel : Container
|
||||
Style = style;
|
||||
}
|
||||
|
||||
protected override void OnRender(Renderer renderer)
|
||||
protected override void OnRender(RenderSystem renderer)
|
||||
{
|
||||
base.OnRender(renderer);
|
||||
renderer.DrawRectangle(Rect.Size, Style.BackgroundColor);
|
||||
|
||||
@@ -14,7 +14,7 @@ public class TextLabel : UIElement
|
||||
}
|
||||
public int FontSize { get; set; } = 16;
|
||||
public Color FontColor { get; set; } = Color.White;
|
||||
protected override void OnRender(Renderer renderer)
|
||||
protected override void OnRender(RenderSystem renderer)
|
||||
{
|
||||
|
||||
if (_font == null)
|
||||
|
||||
@@ -23,7 +23,7 @@ public abstract class UIElement
|
||||
child.parent = this;
|
||||
}
|
||||
|
||||
public void Render(Renderer renderer)
|
||||
public void Render(RenderSystem renderer)
|
||||
{
|
||||
Vector2 parentPos = parent != null ? parent.Rect.Position : Vector2.Zero;
|
||||
renderer.SetTransform(Rect.Position + parentPos, Vector2.Zero, 0);
|
||||
@@ -36,7 +36,7 @@ public abstract class UIElement
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void OnRender(Renderer renderer);
|
||||
protected abstract void OnRender(RenderSystem renderer);
|
||||
|
||||
protected List<UIElement> children;
|
||||
protected UIElement? parent;
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Voile.SceneGraph
|
||||
{
|
||||
public class ImGuiRenderLayer : Layer
|
||||
{
|
||||
protected override void OnDraw(Renderer renderer)
|
||||
protected override void OnDraw(RenderSystem renderer)
|
||||
{
|
||||
Layout();
|
||||
_controller.Draw(renderer);
|
||||
@@ -27,12 +27,12 @@ namespace Voile.SceneGraph
|
||||
_controller.Update(dt, Input);
|
||||
}
|
||||
|
||||
protected override void OnBeginDraw(Renderer renderer)
|
||||
protected override void OnBeginDraw(RenderSystem renderer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override void OnEndDraw(Renderer renderer)
|
||||
protected override void OnEndDraw(RenderSystem renderer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -124,7 +124,7 @@ namespace Voile.SceneGraph
|
||||
io.DisplaySize = size / _scaleFactor;
|
||||
}
|
||||
|
||||
public void Update(double dt, InputHandler input)
|
||||
public void Update(double dt, InputSystem input)
|
||||
{
|
||||
ImGuiIOPtr io = ImGui.GetIO();
|
||||
|
||||
@@ -137,7 +137,7 @@ namespace Voile.SceneGraph
|
||||
ImGui.NewFrame();
|
||||
}
|
||||
|
||||
private void UpdateKeyboard(InputHandler input)
|
||||
private void UpdateKeyboard(InputSystem input)
|
||||
{
|
||||
ImGuiIOPtr io = ImGui.GetIO();
|
||||
|
||||
@@ -161,7 +161,7 @@ namespace Voile.SceneGraph
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateMouse(InputHandler input)
|
||||
private void UpdateMouse(InputSystem input)
|
||||
{
|
||||
ImGuiIOPtr io = ImGui.GetIO();
|
||||
|
||||
@@ -317,7 +317,7 @@ namespace Voile.SceneGraph
|
||||
Rlgl.rlEnd();
|
||||
}
|
||||
|
||||
public void Draw(Renderer renderer)
|
||||
public void Draw(RenderSystem renderer)
|
||||
{
|
||||
ImGui.Render();
|
||||
RenderCommandLists(ImGui.GetDrawData());
|
||||
|
||||
Reference in New Issue
Block a user