using System.Numerics; using System.Text; using Raylib_cs; 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 void CreateWindow(string title, Vector2 size) { Raylib.SetTraceLogLevel(TraceLogLevel.LOG_NONE); _windowSize = size; Raylib.InitWindow((int)_windowSize.X, (int)_windowSize.Y, title); } public override void SetWindowTitle(string title) { Raylib.SetWindowTitle(title); } public override void SetWindowVSync(bool value) { } public override void SetTargetFps(int fps) { Raylib.SetTargetFPS(fps); } public override bool WindowShouldClose() { return Raylib.WindowShouldClose(); } public override void CloseWindow() { Raylib.CloseWindow(); } public override void BeginFrame() { Raylib.BeginDrawing(); } public override void EndFrame() { Raylib.EndDrawing(); } public override void ClearBackground(System.Drawing.Color color) { Raylib.ClearBackground(SystemColorToRaylibColor(color)); } public override double GetFrameTime() { return (double)Raylib.GetFrameTime(); } private Raylib_cs.Color SystemColorToRaylibColor(System.Drawing.Color color) { return new Color { r = color.R, g = color.G, b = color.B, a = color.A }; } public override int LoadTexture(Texture2d texture) { Image image = new Image(); unsafe { fixed (void* dataPtr = texture.Buffer) { image.data = dataPtr; } } image.width = texture.Width; image.height = texture.Height; image.mipmaps = 1; image.format = PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; Texture2D rayTexture; rayTexture = Raylib.LoadTextureFromImage(image); _texturePool.Add(rayTexture); return _texturePool.Count - 1; } public override void DrawTexture(int id, System.Drawing.Color tint) { Raylib.DrawTextureV(_texturePool[id], _position, SystemColorToRaylibColor(tint)); } public override void DrawRectangle(Vector2 size, System.Drawing.Color color) { // Raylib.DrawRectangleV(_position, size, SystemColorToRaylibColor(color)); Raylib.DrawRectanglePro(new Rectangle() { x = _position.X, y = _position.Y, width = size.X, height = size.Y }, Vector2.Zero, _rotation, SystemColorToRaylibColor(color)); } public override void DrawDebugText(Vector2 position, string text, int fontSize, System.Drawing.Color color) { Raylib.DrawText(text, (int)position.X, (int)position.Y, fontSize, SystemColorToRaylibColor(color)); } public override void DrawSdfText(Vector2 position, string text, int fontSize, System.Drawing.Color color) { } public override void Initialize(RendererSettings settings) { 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 flags |= settings.Fullscreen ? ConfigFlags.FLAG_FULLSCREEN_MODE : 0; Raylib.SetConfigFlags(flags); } // TODO public override void SetTransform(Matrix4x4 transform) { } private List _texturePool = new List(); private Vector2 _position; private float _rotation; private Vector2 _windowSize; } }