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:
2024-10-14 17:29:52 +02:00
parent 5227c390a1
commit f68f8f4b02
34 changed files with 189 additions and 143 deletions

View File

@@ -5,7 +5,7 @@ namespace Voile;
public class Circle2d : Drawable2d
{
public override void OnDraw(Renderer renderer)
public override void OnDraw(RenderSystem renderer)
{
renderer.DrawCircle(32f, Color.AliceBlue);
}

View File

@@ -12,8 +12,8 @@ public class TestGame : Game
{
InitializeDefault();
_audioBackend = new FmodAudioBackend();
_audioBackend.Initialize();
_audioSystem = new FmodAudioSystem();
_audioSystem.Start();
}
protected override void LoadResources()
@@ -39,7 +39,7 @@ public class TestGame : Game
_scene = new Scene(new SceneSettings()
{
Renderer = Renderer,
AudioBackend = _audioBackend!,
AudioBackend = _audioSystem!,
InputHandler = Input,
ResourceManager = ResourceManager
});
@@ -47,7 +47,7 @@ public class TestGame : Game
_uiLayer = new UiLayer();
_worldLayer = new EntityLayer();
_testSoundInstance = _audioBackend!.CreateInstance(_testSound!);
_testSoundInstance = _audioSystem!.CreateInstance(_testSound!);
Input.AddInputMapping("play", new InputAction[] { new KeyInputAction(KeyboardKey.Spacebar) });
Input.AddInputMapping("sprint", new InputAction[] { new KeyInputAction(KeyboardKey.LeftShift) });
@@ -82,13 +82,13 @@ public class TestGame : Game
public override void Shutdown()
{
ShutdownDefault();
_audioBackend!.Dispose();
_audioSystem!.Dispose();
}
private Sound? _testSound;
private SoundInstance? _testSoundInstance;
private Font? _font;
private FmodAudioBackend? _audioBackend;
private FmodAudioSystem? _audioSystem;
private Scene? _scene;
private UiLayer? _uiLayer;

View File

@@ -22,17 +22,17 @@ public class UiLayer : Layer
_screenContainer.UpdateRect(Vector2.Zero, Scene.Renderer.WindowSize);
}
protected override void OnBeginDraw(Renderer renderer)
protected override void OnBeginDraw(RenderSystem renderer)
{
}
protected override void OnDraw(Renderer renderer)
protected override void OnDraw(RenderSystem renderer)
{
_screenContainer.Render(renderer);
}
protected override void OnEndDraw(Renderer renderer)
protected override void OnEndDraw(RenderSystem renderer)
{
}

View File

@@ -15,7 +15,7 @@ public class World : Drawable2d
_randomPositions[i] = MathUtils.RandomVector2(Position, Vector2.One * 2048f);
}
}
public override void OnDraw(Renderer renderer)
public override void OnDraw(RenderSystem renderer)
{
for (int i = 0; i < _rectangleAmount; i++)
{

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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);
}

View File

@@ -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()
{

View File

@@ -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;

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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()
{

View File

@@ -4,6 +4,6 @@ namespace Voile.SceneGraph
{
public interface IDrawable
{
public void Draw(Renderer renderer);
public void Draw(RenderSystem renderer);
}
}

View File

@@ -30,7 +30,7 @@ namespace Voile.SceneGraph
}
}
public override void OnDraw(Renderer renderer)
public override void OnDraw(RenderSystem renderer)
{
foreach (var particle in _particles)
{

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -21,7 +21,7 @@ namespace Voile.SceneGraph
_font = font;
}
public override void OnDraw(Renderer renderer)
public override void OnDraw(RenderSystem renderer)
{
if (_font == null)
{

View File

@@ -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)

View File

@@ -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);
}
}

View File

@@ -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; }
}
}

View File

@@ -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();
}

View 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);
}

View File

@@ -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,

View File

@@ -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
};
}

View File

@@ -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)
{
}

View File

@@ -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);

View File

@@ -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)

View File

@@ -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;

View File

@@ -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());

View File

@@ -2,11 +2,11 @@
## Core
- Add and implement interfaces for subsystems (ISubSystem, IUpdatableSubSystem, etc.)
- ~~Add and implement interfaces for systems (ISystem, IUpdatableSystem, etc.)~~
- Minimize amount of possible null references.
- Serialization of Resources through code generation.
- Serialization and deserialization of Resources from and to TOML files.
- Add documentation for common classes.
- Hot reloading
- Hot reloading of resources.
## I/O