RaylibRenderer

3D rendering system powered by Raylib.

namespace Xengine.Rendering;
public class RaylibRenderer

Accessing the Renderer

// Get the global renderer instance
var renderer = RaylibRenderer.Instance;

// Usually accessed in OnRender
protected override void OnRender(RaylibRenderer renderer)
{
    renderer.DrawCube(Transform.Position, Vector3.One, Color.Red);
}

Camera Setup

// Set camera position and target
renderer.SetCamera(
    new Vector3(0, 10, -10),  // Camera position
    Vector3.Zero,              // Look at target
    60f                        // Field of view
);

// Set camera with rotation
renderer.SetCameraRotation(
    position,
    rotation,  // Quaternion
    60f
);

Drawing 3D Shapes

DrawCube

// Solid cube
renderer.DrawCube(
    new Vector3(0, 1, 0),  // Position
    new Vector3(1, 1, 1),  // Size
    Color.Blue             // Color
);

// Wireframe cube
renderer.DrawCubeWires(
    position,
    size,
    Color.White
);

DrawSphere

renderer.DrawSphere(
    new Vector3(0, 1, 0),  // Position
    0.5f,                  // Radius
    Color.Red              // Color
);

DrawPlane

renderer.DrawPlane(
    Vector3.Zero,           // Position
    new Vector2(20, 20),    // Size (width, depth)
    Color.Green             // Color
);

DrawGrid

renderer.DrawGrid(
    20,   // Number of slices
    1f    // Spacing between lines
);

DrawLine3D

renderer.DrawLine3D(
    new Vector3(0, 0, 0),  // Start
    new Vector3(5, 5, 5),  // End
    Color.Yellow           // Color
);

Drawing 2D (UI Overlay)

// Draw text on screen
renderer.DrawText(
    "Hello World",  // Text
    10,             // X position
    10,             // Y position
    24,             // Font size
    Color.White     // Color
);

// Common UI patterns
renderer.DrawText($"FPS: {Time.FPS:F0}", 10, 10, 20, Color.White);
renderer.DrawText($"Score: {score}", 10, 40, 30, Color.Yellow);

Complete Example

public class GameRenderer : Component
{
    public float CubeSize = 1f;
    public Color CubeColor = Color.Blue;
    
    protected override void OnUpdate()
    {
        // Update camera
        RaylibRenderer.Instance?.SetCamera(
            new Vector3(0, 10, -10),
            Transform.Position,
            60f
        );
    }
    
    protected override void OnRender(RaylibRenderer r)
    {
        // Draw the main object
        r.DrawCube(Transform.Position, new Vector3(CubeSize), CubeColor);
        
        // Draw shadow on ground
        r.DrawCube(
            new Vector3(Transform.Position.X, 0.01f, Transform.Position.Z),
            new Vector3(CubeSize, 0.02f, CubeSize),
            new Color(0, 0, 0, 0.3f)
        );
        
        // Draw UI
        r.DrawText($"Position: {Transform.Position}", 10, 10, 20, Color.White);
    }
}