Mouse Input
Handle mouse position, buttons, and scroll wheel using RaylibInput.
using Xengine.Rendering;
Mouse Position
MousePosition
static Vector2 MousePosition { get; }
Current mouse position in screen coordinates.
var pos = RaylibInput.MousePosition;
Log.Info($"Mouse at: {pos.X}, {pos.Y}");
MouseDelta
static Vector2 MouseDelta { get; }
Mouse movement since last frame.
var delta = RaylibInput.MouseDelta;
_yaw += delta.X * sensitivity;
_pitch -= delta.Y * sensitivity;
Mouse Buttons
IsMouseButtonDown
static bool IsMouseButtonDown(MouseButton button)
if (RaylibInput.IsMouseButtonDown(MouseButton.Left))
Shoot();
IsMouseButtonPressed
static bool IsMouseButtonPressed(MouseButton button)
if (RaylibInput.IsMouseButtonPressed(MouseButton.Left))
SelectUnit();
IsMouseButtonReleased
static bool IsMouseButtonReleased(MouseButton button)
if (RaylibInput.IsMouseButtonReleased(MouseButton.Left))
ReleaseCharge();
Mouse Buttons
| Button | Description |
|---|---|
MouseButton.Left | Left mouse button |
MouseButton.Right | Right mouse button |
MouseButton.Middle | Middle mouse button (scroll wheel click) |
Mouse Wheel
MouseWheel
static float MouseWheel { get; }
Scroll wheel movement this frame (+1 up, -1 down).
float scroll = RaylibInput.MouseWheel;
_zoom -= scroll * zoomSpeed;
Common Patterns
Camera Look
public class MouseLook : Component
{
public float Sensitivity = 0.2f;
private float _yaw, _pitch;
protected override void OnUpdate()
{
var delta = RaylibInput.MouseDelta;
_yaw += delta.X * Sensitivity;
_pitch -= delta.Y * Sensitivity;
_pitch = MathHelper.Clamp(_pitch, -89f, 89f);
}
}
Zoom Control
public class ZoomCamera : Component
{
public float MinZoom = 5f;
public float MaxZoom = 50f;
public float ZoomSpeed = 5f;
private float _zoom = 15f;
protected override void OnUpdate()
{
_zoom -= RaylibInput.MouseWheel * ZoomSpeed;
_zoom = MathHelper.Clamp(_zoom, MinZoom, MaxZoom);
}
}
Click to Select
protected override void OnUpdate()
{
if (RaylibInput.IsMouseButtonPressed(MouseButton.Left))
{
var mousePos = RaylibInput.MousePosition;
Log.Info($"Clicked at {mousePos}");
// Perform raycast or UI hit test
}
}
Drag and Drop
private bool _dragging;
private Vector2 _dragStart;
protected override void OnUpdate()
{
if (RaylibInput.IsMouseButtonPressed(MouseButton.Left))
{
_dragging = true;
_dragStart = RaylibInput.MousePosition;
}
if (_dragging)
{
var current = RaylibInput.MousePosition;
var delta = current - _dragStart;
// Use delta for dragging
}
if (RaylibInput.IsMouseButtonReleased(MouseButton.Left))
{
_dragging = false;
}
}
Hold to Charge
private float _chargeTime;
protected override void OnUpdate()
{
if (RaylibInput.IsMouseButtonDown(MouseButton.Left))
{
_chargeTime += Time.Delta;
_chargeTime = MathHelper.Clamp(_chargeTime, 0, 3f);
}
if (RaylibInput.IsMouseButtonReleased(MouseButton.Left))
{
float power = _chargeTime / 3f; // 0 to 1
Fire(power);
_chargeTime = 0;
}
}