From 964b90350007a8d56c1e7ac2ca0dd030742c902c Mon Sep 17 00:00:00 2001 From: dnesov Date: Thu, 15 Jun 2023 22:39:34 +0200 Subject: [PATCH] API renames, change ref renderer to in renderer in IDrawable, make Layer implement IDrawable. --- DaggerFramework.sln | 14 +++++++++ Source/Entities/CircleShape2d.cs | 2 +- Source/Entities/Drawable2d.cs | 6 ++-- Source/Entities/IDrawable.cs | 2 +- Source/Entities/Particles2d.cs | 2 +- Source/Entities/Sprite2d.cs | 2 +- Source/Entities/Text2d.cs | 2 +- Source/EntityLayer.cs | 4 +-- Source/Game.cs | 3 +- Source/ImGuiRenderLayer.cs | 6 ++-- Source/Layer.cs | 6 ++-- Source/Rendering/GlRenderer.cs | 9 +++++- Source/Rendering/RaylibRenderer.cs | 36 ++++++++++++--------- Source/Rendering/Renderer.cs | 28 ++++++++++++++++- Source/Scene.cs | 2 +- Source/UiLayer.cs | 2 +- TestGame/Circle2d.cs | 13 ++++++++ TestGame/TestGame.cs | 50 ++++++++++++------------------ 18 files changed, 122 insertions(+), 67 deletions(-) create mode 100644 DaggerFramework.sln create mode 100644 TestGame/Circle2d.cs diff --git a/DaggerFramework.sln b/DaggerFramework.sln new file mode 100644 index 0000000..bb32f59 --- /dev/null +++ b/DaggerFramework.sln @@ -0,0 +1,14 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Source/Entities/CircleShape2d.cs b/Source/Entities/CircleShape2d.cs index 569e5ed..c1b4513 100755 --- a/Source/Entities/CircleShape2d.cs +++ b/Source/Entities/CircleShape2d.cs @@ -9,7 +9,7 @@ namespace DaggerFramework public float Radius { get => _radius; set => _radius = value; } public Color Color { get => _color; set => _color = value; } - public override void OnDraw(ref Renderer renderer) + public override void OnDraw(in Renderer renderer) { renderer.DrawCircle(_radius, _color); } diff --git a/Source/Entities/Drawable2d.cs b/Source/Entities/Drawable2d.cs index 2a3e3bd..bc65f7a 100755 --- a/Source/Entities/Drawable2d.cs +++ b/Source/Entities/Drawable2d.cs @@ -4,12 +4,12 @@ namespace DaggerFramework { public abstract class Drawable2d : Entity2d, IDrawable { - public void Draw(ref Renderer renderer) + public void Draw(in Renderer renderer) { renderer.SetTransform(position); - OnDraw(ref renderer); + OnDraw(in renderer); } - public abstract void OnDraw(ref Renderer renderer); + public abstract void OnDraw(in Renderer renderer); } } \ No newline at end of file diff --git a/Source/Entities/IDrawable.cs b/Source/Entities/IDrawable.cs index db26afb..dba0d1b 100755 --- a/Source/Entities/IDrawable.cs +++ b/Source/Entities/IDrawable.cs @@ -4,6 +4,6 @@ namespace DaggerFramework { public interface IDrawable { - public void Draw(ref Renderer renderer); + public void Draw(in Renderer renderer); } } \ No newline at end of file diff --git a/Source/Entities/Particles2d.cs b/Source/Entities/Particles2d.cs index 3b4c5e1..863a309 100644 --- a/Source/Entities/Particles2d.cs +++ b/Source/Entities/Particles2d.cs @@ -21,7 +21,7 @@ namespace DaggerFramework CleanupParticles(); InitializeParticles(); } - public override void OnDraw(ref Renderer renderer) + public override void OnDraw(in Renderer renderer) { foreach (var particle in _particles) { diff --git a/Source/Entities/Sprite2d.cs b/Source/Entities/Sprite2d.cs index a728cf8..069b0ea 100755 --- a/Source/Entities/Sprite2d.cs +++ b/Source/Entities/Sprite2d.cs @@ -14,7 +14,7 @@ namespace DaggerFramework _texId = renderer.LoadTexture(_texture); } - public override void OnDraw(ref Renderer renderer) + public override void OnDraw(in Renderer renderer) { renderer.DrawTexture(_texId, Color.White); } diff --git a/Source/Entities/Text2d.cs b/Source/Entities/Text2d.cs index 3f9cc3d..d9175e9 100644 --- a/Source/Entities/Text2d.cs +++ b/Source/Entities/Text2d.cs @@ -9,7 +9,7 @@ namespace DaggerFramework public int FontSize { get => _fontSize; set => _fontSize = value; } public Color FontColor { get => _fontColor; set => _fontColor = value; } - public override void OnDraw(ref Renderer renderer) + public override void OnDraw(in Renderer renderer) { renderer.DrawDebugText(position, _contents, _fontSize, _fontColor); } diff --git a/Source/EntityLayer.cs b/Source/EntityLayer.cs index 36d6aa0..aa24c08 100755 --- a/Source/EntityLayer.cs +++ b/Source/EntityLayer.cs @@ -45,11 +45,11 @@ namespace DaggerFramework } } - protected override void OnDraw(ref Renderer renderer) + protected override void OnDraw(in Renderer renderer) { foreach (IDrawable drawable in _entities) { - drawable.Draw(ref renderer); + drawable.Draw(in renderer); } } diff --git a/Source/Game.cs b/Source/Game.cs index 4bc903e..e61c20a 100755 --- a/Source/Game.cs +++ b/Source/Game.cs @@ -7,12 +7,11 @@ namespace DaggerFramework { LoadResources(); OnStart(); + MainLoop(); } protected abstract void OnStart(); protected abstract void LoadResources(); protected abstract void MainLoop(); public abstract void Shutdown(); - - protected Scene scene; } } \ No newline at end of file diff --git a/Source/ImGuiRenderLayer.cs b/Source/ImGuiRenderLayer.cs index 99620ea..75ec0ef 100755 --- a/Source/ImGuiRenderLayer.cs +++ b/Source/ImGuiRenderLayer.cs @@ -8,10 +8,10 @@ namespace DaggerFramework { public class ImGuiRenderLayer : Layer { - protected override void OnDraw(ref Renderer renderer) + protected override void OnDraw(in Renderer renderer) { Layout(); - _controller.Draw(ref renderer); + _controller.Draw(in renderer); } protected virtual void Layout() { } @@ -307,7 +307,7 @@ namespace DaggerFramework Rlgl.rlEnd(); } - public void Draw(ref Renderer renderer) + public void Draw(in Renderer renderer) { ImGui.Render(); RenderCommandLists(ImGui.GetDrawData()); diff --git a/Source/Layer.cs b/Source/Layer.cs index 0154208..8545352 100755 --- a/Source/Layer.cs +++ b/Source/Layer.cs @@ -3,12 +3,12 @@ using DaggerFramework.Rendering; namespace DaggerFramework { - public abstract class Layer + public abstract class Layer : IDrawable { public Scene Scene { get; set; } public InputHandler Input { get; set; } - public void Draw(ref Renderer renderer) => OnDraw(ref renderer); + public void Draw(in Renderer renderer) => OnDraw(in renderer); public void Start() => OnStart(); public void Update(double dt) => OnUpdate(dt); @@ -17,6 +17,6 @@ namespace DaggerFramework protected virtual void OnStart() { } protected virtual void OnUpdate(double dt) { } protected virtual void OnInput(InputHandler input) { } - protected abstract void OnDraw(ref Renderer renderer); + protected abstract void OnDraw(in Renderer renderer); } } \ No newline at end of file diff --git a/Source/Rendering/GlRenderer.cs b/Source/Rendering/GlRenderer.cs index 2d1d409..0635a8f 100644 --- a/Source/Rendering/GlRenderer.cs +++ b/Source/Rendering/GlRenderer.cs @@ -9,12 +9,19 @@ namespace DaggerFramework.Rendering public class GlRenderer : Renderer { public override Vector2 WindowSize => throw new NotImplementedException(); + public override bool ShouldRun => throw new NotImplementedException(); public override void Initialize(RendererSettings settings) { } + public override void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings) + { + CreateWindow(windowSettings); + Initialize(renderSettings); + } + public override void BeginFrame() { _glfw.PollEvents(); @@ -34,7 +41,7 @@ namespace DaggerFramework.Rendering } public override void CreateWindow(string title, Vector2 size) => CreateWindowUnsafe(title, size); - public override void CloseWindow() + public override void Shutdown() { CloseWindowUnsafe(); _glfw.Terminate(); diff --git a/Source/Rendering/RaylibRenderer.cs b/Source/Rendering/RaylibRenderer.cs index 7623290..e4b6696 100755 --- a/Source/Rendering/RaylibRenderer.cs +++ b/Source/Rendering/RaylibRenderer.cs @@ -7,16 +7,7 @@ namespace DaggerFramework.Rendering public class RaylibRenderer : Renderer { public override Vector2 WindowSize => _windowSize; - public override void DrawCircle(float radius, System.Drawing.Color color) - { - Raylib.DrawCircle((int)_position.X, (int)_position.Y, radius, SystemColorToRaylibColor(color)); - } - - public override void SetTransform(Vector2 position, float rotation) - { - _position = position; - _rotation = rotation; - } + public override bool ShouldRun => !WindowShouldClose(); public override void CreateWindow(string title, Vector2 size) { @@ -45,7 +36,7 @@ namespace DaggerFramework.Rendering return Raylib.WindowShouldClose(); } - public override void CloseWindow() + public override void Shutdown() { Raylib.CloseWindow(); } @@ -70,9 +61,15 @@ namespace DaggerFramework.Rendering return (double)Raylib.GetFrameTime(); } - private Raylib_cs.Color SystemColorToRaylibColor(System.Drawing.Color color) + public override void DrawCircle(float radius, System.Drawing.Color color) { - return new Color { r = color.R, g = color.G, b = color.B, a = color.A }; + Raylib.DrawCircle((int)_position.X, (int)_position.Y, radius, SystemColorToRaylibColor(color)); + } + + public override void SetTransform(Vector2 position, float rotation) + { + _position = position; + _rotation = rotation; } public override int LoadTexture(Texture2d texture) @@ -125,7 +122,7 @@ namespace DaggerFramework.Rendering public override void DrawSdfText(Vector2 position, string text, int fontSize, System.Drawing.Color color) { - + throw new NotImplementedException(); } public override void Initialize(RendererSettings settings) @@ -146,6 +143,17 @@ namespace DaggerFramework.Rendering // TODO public override void SetTransform(Matrix4x4 transform) { } + public override void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings) + { + CreateWindow(windowSettings); + Initialize(renderSettings); + } + + private Raylib_cs.Color SystemColorToRaylibColor(System.Drawing.Color color) + { + return new Color { r = color.R, g = color.G, b = color.B, a = color.A }; + } + private List _texturePool = new List(); private Vector2 _position; private float _rotation; diff --git a/Source/Rendering/Renderer.cs b/Source/Rendering/Renderer.cs index 9ae01a5..d39bc68 100755 --- a/Source/Rendering/Renderer.cs +++ b/Source/Rendering/Renderer.cs @@ -6,15 +6,24 @@ namespace DaggerFramework.Rendering public abstract class Renderer { // INIT + public abstract void CreateAndInitialize(WindowSettings windowSettings, RendererSettings renderSettings); public abstract void Initialize(RendererSettings settings); + + // UTIL + public abstract bool ShouldRun { get; } + // WINDOW public abstract Vector2 WindowSize { get; } public abstract void CreateWindow(string title, Vector2 size); + public void CreateWindow(WindowSettings windowSettings) + { + CreateWindow(windowSettings.Title, windowSettings.Size); + } public abstract void SetWindowTitle(string title); public abstract void SetWindowVSync(bool value); public abstract void SetTargetFps(int fps); public abstract bool WindowShouldClose(); - public abstract void CloseWindow(); + public abstract void Shutdown(); // DRAWING public abstract void BeginFrame(); @@ -43,5 +52,22 @@ namespace DaggerFramework.Rendering public Msaa Msaa; public bool UseVSync; public bool Fullscreen; + + public static RendererSettings Default => new RendererSettings() + { + UseVSync = true, + }; + } + + public struct WindowSettings + { + public string Title; + public Vector2 Size = new Vector2(640, 480); + + public WindowSettings(string title, Vector2 size) + { + Title = title; + Size = size; + } } } \ No newline at end of file diff --git a/Source/Scene.cs b/Source/Scene.cs index 591ff34..b3eae82 100755 --- a/Source/Scene.cs +++ b/Source/Scene.cs @@ -60,7 +60,7 @@ namespace DaggerFramework Renderer.ClearBackground(Color.Black); foreach (var layer in _layers.Values) { - layer.Draw(ref _renderer); + layer.Draw(in _renderer); } Renderer.EndFrame(); diff --git a/Source/UiLayer.cs b/Source/UiLayer.cs index f3e25cb..25719e6 100755 --- a/Source/UiLayer.cs +++ b/Source/UiLayer.cs @@ -12,7 +12,7 @@ namespace DaggerFramework base.OnUpdate(dt); _time += dt; } - protected override void OnDraw(ref Renderer renderer) + protected override void OnDraw(in Renderer renderer) { renderer.SetTransform(Vector2.Zero); renderer.DrawRectangle(new Vector2(720 / 2, 1280), Color.Green); diff --git a/TestGame/Circle2d.cs b/TestGame/Circle2d.cs new file mode 100644 index 0000000..60785a5 --- /dev/null +++ b/TestGame/Circle2d.cs @@ -0,0 +1,13 @@ +using DaggerFramework.Rendering; +using System.Drawing; + + +namespace DaggerFramework; + +public class Circle2d : Drawable2d +{ + public override void OnDraw(in Renderer renderer) + { + renderer.DrawCircle(32f, Color.AliceBlue); + } +} \ No newline at end of file diff --git a/TestGame/TestGame.cs b/TestGame/TestGame.cs index 022f343..edc0bfe 100644 --- a/TestGame/TestGame.cs +++ b/TestGame/TestGame.cs @@ -1,52 +1,40 @@ using DaggerFramework; -using DaggerFramework.Audio; +using System.Numerics; using DaggerFramework.Rendering; public class TestGame : Game { public override string ResourceRoot => "Resources/"; - public override void Shutdown() => scene.Renderer.CloseWindow(); protected override void OnStart() { _renderer = new RaylibRenderer(); - _inputHandler = new RaylibInputHandler(); - scene = new Scene(_renderer, _inputHandler, new DummyAudioBackend()); - - var mainGameLayer = new EntityLayer(); - - scene.AddLayer("World", mainGameLayer); - - var text = new Text2d(); - - text.Contents = "Hello World!"; - text.FontSize = 32; - - var sprite = new Sprite2d(); - - sprite.Texture = _funnyTexture; - - mainGameLayer.AddEntity(text); - mainGameLayer.AddEntity(sprite); - - scene.Init(); - scene.Start(); - - MainLoop(); + _renderer.CreateAndInitialize(new WindowSettings() + { + Title = "Test Game", + Size = new Vector2(1280, 720) + }, RendererSettings.Default); } + protected override void LoadResources() { - _funnyTexture = _textureLoader.Load($"{ResourceRoot}icon.png"); + } protected override void MainLoop() { - while (!scene.ShouldStop()) scene.Update(); + while (_renderer.ShouldRun) + { + _renderer.BeginFrame(); + _renderer.ClearBackground(System.Drawing.Color.Black); + _renderer.EndFrame(); + } + } + + public override void Shutdown() + { + _renderer.Shutdown(); } private Renderer _renderer; - private RaylibInputHandler _inputHandler; - - private Texture2dLoader _textureLoader = new(); - private Texture2d? _funnyTexture; } \ No newline at end of file