mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-24 12:11:07 +00:00
[SDL2] Implemented support for hat state
This commit is contained in:
parent
801d6ead04
commit
168c45f0e2
|
@ -46,6 +46,8 @@ namespace OpenTK.Platform.SDL2
|
||||||
public int HatCount { get; set; }
|
public int HatCount { get; set; }
|
||||||
public int BallCount { get; set; }
|
public int BallCount { get; set; }
|
||||||
public bool IsConnected { get; set; }
|
public bool IsConnected { get; set; }
|
||||||
|
public readonly JoystickHatState[] Hat =
|
||||||
|
new JoystickHatState[JoystickState.MaxHats];
|
||||||
}
|
}
|
||||||
|
|
||||||
// For IJoystickDriver2 implementation
|
// For IJoystickDriver2 implementation
|
||||||
|
@ -127,6 +129,35 @@ namespace OpenTK.Platform.SDL2
|
||||||
return sdl_instanceid_to_joysticks.ContainsKey(instance_id);
|
return sdl_instanceid_to_joysticks.ContainsKey(instance_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OpenTK.Input.HatPosition TranslateHat(HatPosition value)
|
||||||
|
{
|
||||||
|
if ((value & HatPosition.LeftUp) == value)
|
||||||
|
return OpenTK.Input.HatPosition.UpLeft;
|
||||||
|
|
||||||
|
if ((value & HatPosition.RightUp) == value)
|
||||||
|
return OpenTK.Input.HatPosition.UpRight;
|
||||||
|
|
||||||
|
if ((value & HatPosition.LeftDown) == value)
|
||||||
|
return OpenTK.Input.HatPosition.DownLeft;
|
||||||
|
|
||||||
|
if ((value & HatPosition.RightDown) == value)
|
||||||
|
return OpenTK.Input.HatPosition.DownRight;
|
||||||
|
|
||||||
|
if ((value & HatPosition.Up) == value)
|
||||||
|
return OpenTK.Input.HatPosition.Up;
|
||||||
|
|
||||||
|
if ((value & HatPosition.Right) == value)
|
||||||
|
return OpenTK.Input.HatPosition.Right;
|
||||||
|
|
||||||
|
if ((value & HatPosition.Down) == value)
|
||||||
|
return OpenTK.Input.HatPosition.Down;
|
||||||
|
|
||||||
|
if ((value & HatPosition.Left) == value)
|
||||||
|
return OpenTK.Input.HatPosition.Left;
|
||||||
|
|
||||||
|
return OpenTK.Input.HatPosition.Centered;
|
||||||
|
}
|
||||||
|
|
||||||
#if USE_SDL2_GAMECONTROLLER
|
#if USE_SDL2_GAMECONTROLLER
|
||||||
bool IsControllerValid(int id)
|
bool IsControllerValid(int id)
|
||||||
{
|
{
|
||||||
|
@ -386,7 +417,14 @@ namespace OpenTK.Platform.SDL2
|
||||||
{
|
{
|
||||||
int index = sdl_instanceid_to_joysticks[id];
|
int index = sdl_instanceid_to_joysticks[id];
|
||||||
JoystickDevice<Sdl2JoystickDetails> joystick = (JoystickDevice<Sdl2JoystickDetails>)joysticks[index];
|
JoystickDevice<Sdl2JoystickDetails> joystick = (JoystickDevice<Sdl2JoystickDetails>)joysticks[index];
|
||||||
// Todo: map hat to an extra axis
|
if (ev.Hat >= 0 && ev.Hat < JoystickState.MaxHats)
|
||||||
|
{
|
||||||
|
joystick.Details.Hat[ev.Hat] = new JoystickHatState(TranslateHat(ev.Value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Print("[SDL2] Hat {0} out of range [0, {1}]", ev.Hat, JoystickState.MaxHats);
|
||||||
|
}
|
||||||
joystick.Details.PacketNumber = Math.Max(0, unchecked(joystick.Details.PacketNumber + 1));
|
joystick.Details.PacketNumber = Math.Max(0, unchecked(joystick.Details.PacketNumber + 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -596,6 +634,11 @@ namespace OpenTK.Platform.SDL2
|
||||||
state.SetButton(JoystickButton.Button0 + i, joystick.Button[i]);
|
state.SetButton(JoystickButton.Button0 + i, joystick.Button[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < joystick.Details.HatCount; i++)
|
||||||
|
{
|
||||||
|
state.SetHat(JoystickHat.Hat0 + i, joystick.Details.Hat[i]);
|
||||||
|
}
|
||||||
|
|
||||||
state.SetIsConnected(joystick.Details.IsConnected);
|
state.SetIsConnected(joystick.Details.IsConnected);
|
||||||
state.SetPacketNumber(joystick.Details.PacketNumber);
|
state.SetPacketNumber(joystick.Details.PacketNumber);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue