diff --git a/TestGame/Circle2d.cs b/TestGame/Circle2d.cs
index 067b8ab..9a06e7d 100644
--- a/TestGame/Circle2d.cs
+++ b/TestGame/Circle2d.cs
@@ -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);
}
diff --git a/TestGame/TestGame.cs b/TestGame/TestGame.cs
index 3f613b8..a21eeca 100644
--- a/TestGame/TestGame.cs
+++ b/TestGame/TestGame.cs
@@ -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;
diff --git a/TestGame/UiLayer.cs b/TestGame/UiLayer.cs
index 6f1c4aa..6a6d69e 100644
--- a/TestGame/UiLayer.cs
+++ b/TestGame/UiLayer.cs
@@ -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)
{
}
diff --git a/TestGame/World.cs b/TestGame/World.cs
index a682345..1074be4 100644
--- a/TestGame/World.cs
+++ b/TestGame/World.cs
@@ -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++)
{
diff --git a/Voile/Source/Audio/DummyAudioBackend.cs b/Voile/Source/Audio/DummyAudioSystem.cs
similarity index 79%
rename from Voile/Source/Audio/DummyAudioBackend.cs
rename to Voile/Source/Audio/DummyAudioSystem.cs
index 6c8b918..f7b1d21 100644
--- a/Voile/Source/Audio/DummyAudioBackend.cs
+++ b/Voile/Source/Audio/DummyAudioSystem.cs
@@ -1,6 +1,9 @@
namespace Voile.Audio
{
- public class DummyAudioBackend : AudioBackend
+ ///
+ /// Dummy audio system.
+ ///
+ public class DummyAudioSystem : AudioSystem
{
public override void AddBusEffect(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;
}
diff --git a/Voile/Source/Audio/FmodAudioBackend.cs b/Voile/Source/Audio/FmodAudioSystem.cs
similarity index 95%
rename from Voile/Source/Audio/FmodAudioBackend.cs
rename to Voile/Source/Audio/FmodAudioSystem.cs
index 2e8cd0a..2694d94 100644
--- a/Voile/Source/Audio/FmodAudioBackend.cs
+++ b/Voile/Source/Audio/FmodAudioSystem.cs
@@ -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();
@@ -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)
diff --git a/Voile/Source/Audio/SoundInstance.cs b/Voile/Source/Audio/SoundInstance.cs
index 006e377..3fa1c6a 100644
--- a/Voile/Source/Audio/SoundInstance.cs
+++ b/Voile/Source/Audio/SoundInstance.cs
@@ -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;
diff --git a/Voile/Source/Game.cs b/Voile/Source/Game.cs
index 432d361..931084a 100644
--- a/Voile/Source/Game.cs
+++ b/Voile/Source/Game.cs
@@ -10,14 +10,14 @@ namespace Voile
///
protected ResourceManager ResourceManager { get; private set; }
///
- /// The InputHandler associated with this game. Uses by default.
+ /// The InputHandler associated with this game. Uses by default.
///
- protected InputHandler Input { get; private set; }
+ protected InputSystem Input { get; private set; }
///
- /// The Renderer associated with this game. Uses by default.
+ /// The Renderer associated with this game. Uses by default.
///
- protected Renderer Renderer { get; private set; }
+ protected RenderSystem Renderer { get; private set; }
///
/// 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();
}
///
@@ -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);
}
}
}
\ No newline at end of file
diff --git a/Voile/Source/InputAction.cs b/Voile/Source/Input/InputAction.cs
similarity index 60%
rename from Voile/Source/InputAction.cs
rename to Voile/Source/Input/InputAction.cs
index 375c42f..e8c5b88 100644
--- a/Voile/Source/InputAction.cs
+++ b/Voile/Source/Input/InputAction.cs
@@ -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);
}
diff --git a/Voile/Source/RaylibInputHandler.cs b/Voile/Source/Input/RaylibInputSystem.cs
similarity index 95%
rename from Voile/Source/RaylibInputHandler.cs
rename to Voile/Source/Input/RaylibInputSystem.cs
index beabd0a..3d7b344 100644
--- a/Voile/Source/RaylibInputHandler.cs
+++ b/Voile/Source/Input/RaylibInputSystem.cs
@@ -3,7 +3,10 @@ using Raylib_cs;
namespace Voile
{
- public class RaylibInputHandler : InputHandler
+ ///
+ /// An input system implemented using Raylib's API. Used by default together with .
+ ///
+ public class RaylibInputSystem : InputSystem
{
public override int GetCharPressed()
{
diff --git a/Voile/Source/Rendering/RaylibRenderer.cs b/Voile/Source/Rendering/RaylibRenderSystem.cs
similarity index 96%
rename from Voile/Source/Rendering/RaylibRenderer.cs
rename to Voile/Source/Rendering/RaylibRenderSystem.cs
index 0eda918..2b3e747 100644
--- a/Voile/Source/Rendering/RaylibRenderer.cs
+++ b/Voile/Source/Rendering/RaylibRenderSystem.cs
@@ -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 _texturePool = new();
private List _fontPool = new();
private Vector2 _windowSize;
diff --git a/Voile/Source/Rendering/StandardRenderer.cs b/Voile/Source/Rendering/StandardRenderSystem.cs
similarity index 97%
rename from Voile/Source/Rendering/StandardRenderer.cs
rename to Voile/Source/Rendering/StandardRenderSystem.cs
index 3bdd14f..eace441 100644
--- a/Voile/Source/Rendering/StandardRenderer.cs
+++ b/Voile/Source/Rendering/StandardRenderSystem.cs
@@ -12,7 +12,7 @@ namespace Voile.Rendering
///
/// A standard, WebGPU-based renderer.
///
- public class StandardRenderer : Renderer
+ public class StandardRenderSystem : RenderSystem
{
///
public override Vector2 WindowSize { get; set; }
@@ -43,10 +43,10 @@ namespace Voile.Rendering
}
///
- 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));
}
}
\ No newline at end of file
diff --git a/Voile/Source/SceneGraph/Entities/CircleShape2d.cs b/Voile/Source/SceneGraph/Entities/CircleShape2d.cs
index 74fadb9..dee3731 100644
--- a/Voile/Source/SceneGraph/Entities/CircleShape2d.cs
+++ b/Voile/Source/SceneGraph/Entities/CircleShape2d.cs
@@ -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);
}
diff --git a/Voile/Source/SceneGraph/Entities/Drawable2d.cs b/Voile/Source/SceneGraph/Entities/Drawable2d.cs
index ec6fec1..b1bb6ff 100644
--- a/Voile/Source/SceneGraph/Entities/Drawable2d.cs
+++ b/Voile/Source/SceneGraph/Entities/Drawable2d.cs
@@ -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);
}
}
\ No newline at end of file
diff --git a/Voile/Source/SceneGraph/Entities/Entity.cs b/Voile/Source/SceneGraph/Entities/Entity.cs
index a704632..0074fe9 100644
--- a/Voile/Source/SceneGraph/Entities/Entity.cs
+++ b/Voile/Source/SceneGraph/Entities/Entity.cs
@@ -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()
{
diff --git a/Voile/Source/SceneGraph/Entities/IDrawable.cs b/Voile/Source/SceneGraph/Entities/IDrawable.cs
index 4d5df17..2c92de0 100644
--- a/Voile/Source/SceneGraph/Entities/IDrawable.cs
+++ b/Voile/Source/SceneGraph/Entities/IDrawable.cs
@@ -4,6 +4,6 @@ namespace Voile.SceneGraph
{
public interface IDrawable
{
- public void Draw(Renderer renderer);
+ public void Draw(RenderSystem renderer);
}
}
\ No newline at end of file
diff --git a/Voile/Source/SceneGraph/Entities/Particles2d.cs b/Voile/Source/SceneGraph/Entities/Particles2d.cs
index e4671dc..09931a5 100644
--- a/Voile/Source/SceneGraph/Entities/Particles2d.cs
+++ b/Voile/Source/SceneGraph/Entities/Particles2d.cs
@@ -30,7 +30,7 @@ namespace Voile.SceneGraph
}
}
- public override void OnDraw(Renderer renderer)
+ public override void OnDraw(RenderSystem renderer)
{
foreach (var particle in _particles)
{
diff --git a/Voile/Source/SceneGraph/Entities/RectangleShape2d.cs b/Voile/Source/SceneGraph/Entities/RectangleShape2d.cs
index 39f6993..249d243 100644
--- a/Voile/Source/SceneGraph/Entities/RectangleShape2d.cs
+++ b/Voile/Source/SceneGraph/Entities/RectangleShape2d.cs
@@ -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);
diff --git a/Voile/Source/SceneGraph/Entities/Sprite2d.cs b/Voile/Source/SceneGraph/Entities/Sprite2d.cs
index e3ec670..6c73c57 100644
--- a/Voile/Source/SceneGraph/Entities/Sprite2d.cs
+++ b/Voile/Source/SceneGraph/Entities/Sprite2d.cs
@@ -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);
}
diff --git a/Voile/Source/SceneGraph/Entities/Text2d.cs b/Voile/Source/SceneGraph/Entities/Text2d.cs
index d33cd4d..aaa8fab 100644
--- a/Voile/Source/SceneGraph/Entities/Text2d.cs
+++ b/Voile/Source/SceneGraph/Entities/Text2d.cs
@@ -21,7 +21,7 @@ namespace Voile.SceneGraph
_font = font;
}
- public override void OnDraw(Renderer renderer)
+ public override void OnDraw(RenderSystem renderer)
{
if (_font == null)
{
diff --git a/Voile/Source/SceneGraph/EntityLayer.cs b/Voile/Source/SceneGraph/EntityLayer.cs
index 46dd120..2563149 100644
--- a/Voile/Source/SceneGraph/EntityLayer.cs
+++ b/Voile/Source/SceneGraph/EntityLayer.cs
@@ -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)
diff --git a/Voile/Source/SceneGraph/Layer.cs b/Voile/Source/SceneGraph/Layer.cs
index ef1218c..35cbff0 100644
--- a/Voile/Source/SceneGraph/Layer.cs
+++ b/Voile/Source/SceneGraph/Layer.cs
@@ -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);
}
}
\ No newline at end of file
diff --git a/Voile/Source/SceneGraph/Scene.cs b/Voile/Source/SceneGraph/Scene.cs
index 6769660..7047df5 100644
--- a/Voile/Source/SceneGraph/Scene.cs
+++ b/Voile/Source/SceneGraph/Scene.cs
@@ -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 _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; }
}
}
\ No newline at end of file
diff --git a/Voile/Source/Audio/AudioBackend.cs b/Voile/Source/Systems/AudioSystem.cs
similarity index 77%
rename from Voile/Source/Audio/AudioBackend.cs
rename to Voile/Source/Systems/AudioSystem.cs
index 15771a8..63f8747 100644
--- a/Voile/Source/Audio/AudioBackend.cs
+++ b/Voile/Source/Systems/AudioSystem.cs
@@ -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 effect, string bus = "Master") where T : AudioEffect;
- public void Dispose()
- {
- Shutdown();
- GC.SuppressFinalize(this);
- }
private LehmerRandom _random = new LehmerRandom();
}
diff --git a/Voile/Source/Systems/ISystem.cs b/Voile/Source/Systems/ISystem.cs
new file mode 100644
index 0000000..5658766
--- /dev/null
+++ b/Voile/Source/Systems/ISystem.cs
@@ -0,0 +1,18 @@
+public interface IStartableSystem
+{
+ void Start();
+}
+
+///
+/// A system that accepts additional data for starting.
+///
+///
+public interface IStartableSystem
+{
+ void Start(T configuration);
+}
+
+public interface IUpdatableSystem
+{
+ void Update(double deltaTime);
+}
\ No newline at end of file
diff --git a/Voile/Source/InputHandler.cs b/Voile/Source/Systems/InputSystem.cs
similarity index 91%
rename from Voile/Source/InputHandler.cs
rename to Voile/Source/Systems/InputSystem.cs
index 17ff325..c60bfe4 100644
--- a/Voile/Source/InputHandler.cs
+++ b/Voile/Source/Systems/InputSystem.cs
@@ -4,16 +4,24 @@ using Voile.Utils;
namespace Voile
{
- public abstract class InputHandler : IDisposable
+ ///
+ /// A system providing means for collecting user input, as well as defining custom list.
+ ///
+ public abstract class InputSystem : IStartableSystem, IDisposable
{
+ ///
+ /// The list of all available input mappings, custom and built-in.
+ ///
public static IReadOnlyDictionary> InputMappings => inputMappings;
- public InputHandler()
+ public void Start()
{
inputMappings = new Dictionary>();
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> 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,
diff --git a/Voile/Source/Rendering/Renderer.cs b/Voile/Source/Systems/RenderSystem.cs
similarity index 92%
rename from Voile/Source/Rendering/Renderer.cs
rename to Voile/Source/Systems/RenderSystem.cs
index 02ef916..67cf054 100644
--- a/Voile/Source/Rendering/Renderer.cs
+++ b/Voile/Source/Systems/RenderSystem.cs
@@ -5,15 +5,26 @@ namespace Voile.Rendering
///
/// An abstract class representing the graphics renderer.
///
- public abstract class Renderer : IDisposable
+ public abstract class RenderSystem : IStartableSystem, IDisposable
{
+ public void Start(RendererSettings settings)
+ {
+ CreateAndInitializeWithWindow(settings);
+ }
+
+ ///
+ public void Dispose()
+ {
+ Shutdown();
+ GC.SuppressFinalize(this);
+ }
+
// INIT
///
- /// Creates the renderer window and initializes internal resources.
+ /// Creates the renderer with an OS window and initializes internal resources.
///
- /// Settings for the rendering window.
/// Rendering settings.
- public abstract void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings);
+ public abstract void CreateAndInitializeWithWindow(RendererSettings renderSettings);
///
/// Initializes internal resources. Should be called before other methods.
///
@@ -46,13 +57,6 @@ namespace Voile.Rendering
///
public abstract Vector2 MonitorSize { get; }
- ///
- public void Dispose()
- {
- Shutdown();
- GC.SuppressFinalize(this);
- }
-
///
/// Creates a window.
///
@@ -148,6 +152,7 @@ namespace Voile.Rendering
/// Texture tint.
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
};
}
diff --git a/Voile/Source/UI/Container.cs b/Voile/Source/UI/Container.cs
index b9418bc..49128d5 100644
--- a/Voile/Source/UI/Container.cs
+++ b/Voile/Source/UI/Container.cs
@@ -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)
{
}
diff --git a/Voile/Source/UI/Panel.cs b/Voile/Source/UI/Panel.cs
index 3cab364..1987700 100644
--- a/Voile/Source/UI/Panel.cs
+++ b/Voile/Source/UI/Panel.cs
@@ -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);
diff --git a/Voile/Source/UI/TextLabel.cs b/Voile/Source/UI/TextLabel.cs
index fb021d9..3fd84cd 100644
--- a/Voile/Source/UI/TextLabel.cs
+++ b/Voile/Source/UI/TextLabel.cs
@@ -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)
diff --git a/Voile/Source/UI/UIElement.cs b/Voile/Source/UI/UIElement.cs
index 6ee750e..c6d4cf5 100644
--- a/Voile/Source/UI/UIElement.cs
+++ b/Voile/Source/UI/UIElement.cs
@@ -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 children;
protected UIElement? parent;
diff --git a/Voile/Source/Color.cs b/Voile/Source/Utils/Color.cs
similarity index 100%
rename from Voile/Source/Color.cs
rename to Voile/Source/Utils/Color.cs
diff --git a/Voile/Source/Utils/ImGuiRenderLayer.cs b/Voile/Source/Utils/ImGuiRenderLayer.cs
index f906f73..6bca284 100644
--- a/Voile/Source/Utils/ImGuiRenderLayer.cs
+++ b/Voile/Source/Utils/ImGuiRenderLayer.cs
@@ -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());
diff --git a/Voile/TODO.md b/Voile/TODO.md
index 1df6c85..3d5d1f3 100644
--- a/Voile/TODO.md
+++ b/Voile/TODO.md
@@ -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