[Input][SDL] Fix JoystickHat bugs
authorAndrew O'Connor <bravesirandrew@gmail.com>
Sun, 27 Jul 2014 13:54:36 +0000 (14:54 +0100)
committerAndrew O'Connor <bravesirandrew@gmail.com>
Sun, 27 Jul 2014 13:54:36 +0000 (14:54 +0100)
On SDL, DPad inputs were not correctly translated from joystick
hat inputs.
Updated MappedGamePadDriver so that it will correctly recognize
combined joystick hat directions e.g. DPadLeft should be true when
DownLeft, Left, or UpLeft are returned from the joystick hat.

Source/OpenTK/Platform/MappedGamePadDriver.cs
Source/OpenTK/Platform/SDL2/Sdl2.cs
Source/OpenTK/Platform/SDL2/Sdl2JoystickDriver.cs

index e6902af2de37ac83ea701cf479111f94ea43c0f9..2b8b313cad549693f1ad8a0d503fa141cfe6118b 100644 (file)
@@ -122,7 +122,26 @@ namespace OpenTK.Platform
                             {
                                 // JoystickHat -> Buttons/GamePadAxes mapping
                                 JoystickHat source_hat = map.Source.Hat;
-                                bool pressed = joy.GetHat(source_hat).Position == map.Source.HatPosition;
+
+                                   bool pressed = false;
+                                                               switch (map.Source.HatPosition)
+                                   {
+                                                                       case HatPosition.Down:
+                                                   pressed = joy.GetHat(source_hat).IsDown;
+                                                   break;
+
+                                                                       case HatPosition.Up:
+                                                                               pressed = joy.GetHat(source_hat).IsUp;
+                                                   break;
+
+                                                                       case HatPosition.Left:
+                                                                               pressed = joy.GetHat(source_hat).IsLeft;
+                                                   break;
+
+                                                                       case HatPosition.Right:
+                                                                               pressed = joy.GetHat(source_hat).IsRight;
+                                                   break;
+                                   }
 
                                 switch (map.Target.Type)
                                 {
index 2a9bba153fb3a571b38f9071293e11fd043e14dd..53418e44c592b39fa71cdcc57eb4d770f2067e09 100644 (file)
@@ -753,8 +753,8 @@ namespace OpenTK.Platform.SDL2
         Centered = 0x00,
         Up = 0x01,
         Right = 0x02,
-        Down = 0x03,
-        Left = 0x04,
+        Down = 0x04,
+        Left = 0x08,
         RightUp = Right | Up,
         RightDown = Right | Down,
         LeftUp = Left | Up,
index 41726c6210b502219431351573c3ec59ef5a24c7..32d8a59f15d804eefd50597b1dba7dbd060882a6 100644 (file)
@@ -127,28 +127,28 @@ namespace OpenTK.Platform.SDL2
 
         OpenTK.Input.HatPosition TranslateHat(HatPosition value)
         {
-            if ((value & HatPosition.LeftUp) == value)
+                       if ((value & HatPosition.LeftUp) == HatPosition.LeftUp)
                 return OpenTK.Input.HatPosition.UpLeft;
 
-            if ((value & HatPosition.RightUp) == value)
+                       if ((value & HatPosition.RightUp) == HatPosition.RightUp)
                 return OpenTK.Input.HatPosition.UpRight;
 
-            if ((value & HatPosition.LeftDown) == value)
+                       if ((value & HatPosition.LeftDown) == HatPosition.LeftDown)
                 return OpenTK.Input.HatPosition.DownLeft;
 
-            if ((value & HatPosition.RightDown) == value)
+                       if ((value & HatPosition.RightDown) == HatPosition.RightDown)
                 return OpenTK.Input.HatPosition.DownRight;
 
-            if ((value & HatPosition.Up) == value)
+                       if ((value & HatPosition.Up) == HatPosition.Up)
                 return OpenTK.Input.HatPosition.Up;
 
-            if ((value & HatPosition.Right) == value)
+                       if ((value & HatPosition.Right) == HatPosition.Right)
                 return OpenTK.Input.HatPosition.Right;
 
-            if ((value & HatPosition.Down) == value)
+                       if ((value & HatPosition.Down) == HatPosition.Down)
                 return OpenTK.Input.HatPosition.Down;
 
-            if ((value & HatPosition.Left) == value)
+                       if ((value & HatPosition.Left) == HatPosition.Left)
                 return OpenTK.Input.HatPosition.Left;
 
             return OpenTK.Input.HatPosition.Centered;