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);
}
}