Basic Examples

Fundamental examples to get started with Xengine.

Cube Renderer

public class CubeRenderer : Component
{
    public Vector3 Size { get; set; } = Vector3.One;
    public Color Color { get; set; } = Color.White;
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawCube(Transform!.Position, Size, Color);
    }
}

Sphere Renderer

public class SphereRenderer : Component
{
    public float Radius { get; set; } = 0.5f;
    public Color Color { get; set; } = Color.White;
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawSphere(Transform!.Position, Radius, Color);
    }
}

Rotating Cube

public class RotatingCube : Component
{
    public float DegreesPerSecond = 90f;
    private float _angle;
    
    protected override void OnUpdate()
    {
        _angle += DegreesPerSecond * Time.Delta;
    }
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawCube(Transform!.Position, Vector3.One, Color.Red);
    }
}

Bobbing Motion

public class BobbingObject : Component
{
    public float Height = 0.5f;
    public float Speed = 2f;
    private Vector3 _basePos;
    
    protected override void OnStart()
    {
        _basePos = Transform!.Position;
    }
    
    protected override void OnUpdate()
    {
        var pos = _basePos;
        pos.Y += MathF.Sin(Time.Now * Speed) * Height;
        Transform!.Position = pos;
    }
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawSphere(Transform!.Position, 0.5f, Color.Yellow);
    }
}

Simple Camera

public class SimpleCamera : Component
{
    public Vector3 Position = new Vector3(0, 10, -12);
    public Vector3 Target = Vector3.Zero;
    public float FOV = 60f;
    
    protected override void OnUpdate()
    {
        RaylibRenderer.Instance?.SetCamera(Position, Target, FOV);
    }
}

Ground Plane

public class GroundRenderer : Component
{
    public float Size = 20f;
    public Color Color = new Color(0.3f, 0.3f, 0.3f);
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawPlane(Vector3.Zero, new Vector2(Size, Size), Color);
        r.DrawGrid((int)Size, 1f);
    }
}

Text UI

public class TextUI : Component
{
    public string Text = "";
    public int X = 10;
    public int Y = 10;
    public int FontSize = 24;
    public Color Color = Color.White;
    
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawText(Text, X, Y, FontSize, Color);
    }
}

FPS Counter

public class FPSCounter : Component
{
    protected override void OnRender(RaylibRenderer r)
    {
        r.DrawText($"FPS: {Time.FPS:F0}", 10, 10, 20, Color.Green);
        r.DrawText($"Frame: {Time.FrameCount}", 10, 35, 16, Color.Gray);
    }
}

Grid of Objects

// In setup code:
int gridSize = 5;
for (int x = 0; x < gridSize; x++)
{
    for (int z = 0; z < gridSize; z++)
    {
        var pos = new Vector3(x * 2 - gridSize, 0.5f, z * 2 - gridSize);
        var cube = scene.CreateGameObject($"Cube_{x}_{z}", pos);
        cube.AddComponent().Color = Color.FromHSV((x + z) / 10f, 0.8f, 1f);
    }
}