MoonWorks/src/Input/Mouse.cs

66 lines
1.9 KiB
C#
Raw Normal View History

using SDL2;
namespace MoonWorks.Input
{
public class Mouse
{
public ButtonState LeftButton { get; private set; }
public ButtonState MiddleButton { get; private set; }
public ButtonState RightButton { get; private set; }
public int X { get; private set; }
public int Y { get; private set; }
public int DeltaX { get; private set; }
public int DeltaY { get; private set; }
private bool relativeMode;
public bool RelativeMode
{
get => relativeMode;
set
{
relativeMode = value;
SDL.SDL_SetRelativeMouseMode(
relativeMode ?
SDL.SDL_bool.SDL_TRUE :
SDL.SDL_bool.SDL_FALSE
);
}
}
internal void Update()
{
var buttons = SDL.SDL_GetMouseState(out var x, out var y);
var _ = SDL.SDL_GetRelativeMouseState(out var deltaX, out var deltaY);
X = x;
Y = y;
DeltaX = deltaX;
DeltaY = deltaY;
2021-01-22 20:48:56 +00:00
LeftButton = UpdateState(LeftButton, buttons, SDL.SDL_BUTTON_LMASK);
MiddleButton = UpdateState(MiddleButton, buttons, SDL.SDL_BUTTON_MMASK);
RightButton = UpdateState(RightButton, buttons, SDL.SDL_BUTTON_RMASK);
}
private ButtonState UpdateState(ButtonState state, uint buttonMask, uint buttonFlag)
{
var isPressed = buttonMask & buttonFlag;
if (isPressed != 0)
{
if (state == ButtonState.Pressed)
{
return ButtonState.Held;
}
else if (state == ButtonState.Released)
{
return ButtonState.Pressed;
}
}
return ButtonState.Released;
}
}
}