forked from MoonsideGames/MoonWorks
add mouse input + move inputs to Input namespace
parent
1e77ad2cb4
commit
f2487cd71b
|
@ -2,6 +2,7 @@
|
||||||
using SDL2;
|
using SDL2;
|
||||||
using MoonWorks.Audio;
|
using MoonWorks.Audio;
|
||||||
using MoonWorks.Graphics;
|
using MoonWorks.Graphics;
|
||||||
|
using MoonWorks.Input;
|
||||||
|
|
||||||
namespace MoonWorks
|
namespace MoonWorks
|
||||||
{
|
{
|
||||||
|
@ -16,7 +17,7 @@ namespace MoonWorks
|
||||||
public Window Window { get; }
|
public Window Window { get; }
|
||||||
public GraphicsDevice GraphicsDevice { get; }
|
public GraphicsDevice GraphicsDevice { get; }
|
||||||
public AudioDevice AudioDevice { get; }
|
public AudioDevice AudioDevice { get; }
|
||||||
public Input Input { get; }
|
public Inputs Inputs { get; }
|
||||||
|
|
||||||
private Dictionary<PresentMode, RefreshCS.Refresh.PresentMode> moonWorksToRefreshPresentMode = new Dictionary<PresentMode, RefreshCS.Refresh.PresentMode>
|
private Dictionary<PresentMode, RefreshCS.Refresh.PresentMode> moonWorksToRefreshPresentMode = new Dictionary<PresentMode, RefreshCS.Refresh.PresentMode>
|
||||||
{
|
{
|
||||||
|
@ -42,7 +43,7 @@ namespace MoonWorks
|
||||||
|
|
||||||
Logger.Initialize();
|
Logger.Initialize();
|
||||||
|
|
||||||
Input = new Input();
|
Inputs = new Inputs();
|
||||||
|
|
||||||
Window = new Window(windowCreateInfo);
|
Window = new Window(windowCreateInfo);
|
||||||
|
|
||||||
|
@ -81,7 +82,7 @@ namespace MoonWorks
|
||||||
{
|
{
|
||||||
HandleSDLEvents();
|
HandleSDLEvents();
|
||||||
|
|
||||||
Input.Update();
|
Inputs.Update();
|
||||||
AudioDevice.Update();
|
AudioDevice.Update();
|
||||||
|
|
||||||
Update(timestep);
|
Update(timestep);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
public enum ButtonState
|
public enum ButtonState
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using SDL2;
|
using SDL2;
|
||||||
|
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
public class Gamepad
|
public class Gamepad
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
using SDL2;
|
using SDL2;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
public class Input
|
public class Inputs
|
||||||
{
|
{
|
||||||
public Keyboard Keyboard { get; }
|
public Keyboard Keyboard { get; }
|
||||||
|
public Mouse Mouse { get; }
|
||||||
|
|
||||||
List<Gamepad> gamepads = new List<Gamepad>();
|
List<Gamepad> gamepads = new List<Gamepad>();
|
||||||
|
|
||||||
internal Input()
|
internal Inputs()
|
||||||
{
|
{
|
||||||
Keyboard = new Keyboard();
|
Keyboard = new Keyboard();
|
||||||
|
Mouse = new Mouse();
|
||||||
|
|
||||||
for (int i = 0; i < SDL.SDL_NumJoysticks(); i++)
|
for (int i = 0; i < SDL.SDL_NumJoysticks(); i++)
|
||||||
{
|
{
|
||||||
|
@ -26,6 +28,7 @@ namespace MoonWorks
|
||||||
internal void Update()
|
internal void Update()
|
||||||
{
|
{
|
||||||
Keyboard.Update();
|
Keyboard.Update();
|
||||||
|
Mouse.Update();
|
||||||
|
|
||||||
foreach (var gamepad in gamepads)
|
foreach (var gamepad in gamepads)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
internal class Key
|
internal class Key
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@ using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using SDL2;
|
using SDL2;
|
||||||
|
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
public class Keyboard
|
public class Keyboard
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace MoonWorks
|
namespace MoonWorks.Input
|
||||||
{
|
{
|
||||||
// Enum values are equivalent to the SDL Scancode value.
|
// Enum values are equivalent to the SDL Scancode value.
|
||||||
public enum Keycode : int
|
public enum Keycode : int
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
LeftButton = UpdateState(LeftButton, buttons, SDL.SDL_BUTTON_LEFT);
|
||||||
|
MiddleButton = UpdateState(MiddleButton, buttons, SDL.SDL_BUTTON_MIDDLE);
|
||||||
|
RightButton = UpdateState(RightButton, buttons, SDL.SDL_BUTTON_RIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue