2021-01-22 08:20:07 +00:00
|
|
|
|
using SDL2;
|
|
|
|
|
|
|
|
|
|
namespace MoonWorks.Input
|
|
|
|
|
{
|
|
|
|
|
public class Mouse
|
|
|
|
|
{
|
2021-01-22 22:41:34 +00:00
|
|
|
|
public ButtonState LeftButton { get; } = new ButtonState();
|
|
|
|
|
public ButtonState MiddleButton { get; } = new ButtonState();
|
|
|
|
|
public ButtonState RightButton { get; } = new ButtonState();
|
2021-01-22 08:20:07 +00:00
|
|
|
|
|
|
|
|
|
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(
|
2021-01-22 22:41:34 +00:00
|
|
|
|
relativeMode ?
|
|
|
|
|
SDL.SDL_bool.SDL_TRUE :
|
2021-01-22 08:20:07 +00:00
|
|
|
|
SDL.SDL_bool.SDL_FALSE
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal void Update()
|
|
|
|
|
{
|
2021-01-22 22:41:34 +00:00
|
|
|
|
var buttonMask = SDL.SDL_GetMouseState(out var x, out var y);
|
2021-01-22 08:20:07 +00:00
|
|
|
|
var _ = SDL.SDL_GetRelativeMouseState(out var deltaX, out var deltaY);
|
|
|
|
|
|
|
|
|
|
X = x;
|
|
|
|
|
Y = y;
|
|
|
|
|
DeltaX = deltaX;
|
|
|
|
|
DeltaY = deltaY;
|
|
|
|
|
|
2021-01-22 22:41:34 +00:00
|
|
|
|
LeftButton.Update(IsPressed(buttonMask, SDL.SDL_BUTTON_LMASK));
|
|
|
|
|
MiddleButton.Update(IsPressed(buttonMask, SDL.SDL_BUTTON_MMASK));
|
|
|
|
|
RightButton.Update(IsPressed(buttonMask, SDL.SDL_BUTTON_RMASK));
|
2021-01-22 08:20:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-22 22:41:34 +00:00
|
|
|
|
private bool IsPressed(uint buttonMask, uint buttonFlag)
|
2021-01-22 08:20:07 +00:00
|
|
|
|
{
|
2021-01-22 22:41:34 +00:00
|
|
|
|
return (buttonMask & buttonFlag) != 0;
|
2021-01-22 08:20:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|