Browse Source

[core] Change axisCount to be an array (#3421)

* Update `PLATFORM_DRM` implementation of `GetGamepadAxisCount`

* Update

* Update `PLATFORM_DRM` implementation of `GetGamepadName`

* Add example to test gamepad info functions
Fix typo

* Update new gamepad info example

* Move axis count update out of GamepadThread - race condition

* Remove pointless if statement

* Start integrating stuff from the mikesinput lib

* Add more logging

* Add semicolon

* Add forgotten static

* More fixes

* Update axisCount to be array

* More debugging

* Add forgotten index to ready check

* Add path logging

* Missing parenthesis

* Add missing slash

* Fix axis count being reset to 0

* Fix missing paren

* Test polling joystick button events

* Major updates

* Fix missing array index

* Fix another missing array index

* Update example

* dumb logging

* Wrong constant for ev.code handling

* More dumb logging

* Remove some logging

* Add FPS to gamepad info example and try for max FPS

* tweak

* Revert example

* Add fps back

* Clean up after merge

* Switch axisCount to be an array
MichaelFiber 1 year ago
parent
commit
18bedbd095
8 changed files with 27 additions and 13 deletions
  1. 17 3
      examples/core/core_input_gamepad_info.c
  2. 1 1
      src/rcore.c
  3. 1 1
      src/rcore.h
  4. 1 1
      src/rcore_android.c
  5. 2 2
      src/rcore_desktop.c
  6. 2 2
      src/rcore_drm.c
  7. 1 1
      src/rcore_template.c
  8. 2 2
      src/rcore_web.c

+ 17 - 3
examples/core/core_input_gamepad_info.c

@@ -41,15 +41,29 @@ int main(void)
 
         ClearBackground(RAYWHITE);
 
-        for (int i = 0; i < 4; i++)     // by default rcore.h has a MAX_GAMEPADS of 4 so mimmic that here.
+        for (int i = 0; i < 4; i++) // by default rcore.h has a MAX_GAMEPADS of 4 so mimmic that here.
         {
             if (IsGamepadAvailable(i))
             {
-                DrawText(TextFormat("Gamepad:\n\tName: %s\n\tAxes: %d", GetGamepadName(i), GetGamepadAxisCount(i)), 10, y, 20, BLACK);
-                y += 40;
+                DrawText(TextFormat("Gamepad name: %s", GetGamepadName(i)), 10, y, 20, BLACK);
+                y += 30;
+                DrawText(TextFormat("\tAxis count:   %d", GetGamepadAxisCount(i)), 10, y, 20, BLACK);
+                y += 30;
+                for (int axis = 0; axis < GetGamepadAxisCount(i); axis++)
+                {
+                    DrawText(TextFormat("\tAxis %d = %f", axis, GetGamepadAxisMovement(i, axis)), 10, y, 20, BLACK);
+                    y += 30;
+                }
+                for (int button = 0; button < 32; button++)
+                {
+                    DrawText(TextFormat("\tButton %d = %d", button, IsGamepadButtonDown(i, button)), 10, y, 20, BLACK);
+                    y += 30;
+                }
             }
         }
 
+        DrawFPS(GetScreenWidth() - 100, 100);
+
         EndDrawing();
     }
 

+ 1 - 1
src/rcore.c

@@ -2168,7 +2168,7 @@ int GetGamepadButtonPressed(void)
 // Get gamepad axis count
 int GetGamepadAxisCount(int gamepad)
 {
-    return CORE.Input.Gamepad.axisCount;
+    return CORE.Input.Gamepad.axisCount[gamepad];
 }
 
 // Get axis movement vector for a gamepad

+ 1 - 1
src/rcore.h

@@ -179,7 +179,7 @@ typedef struct CoreData {
         } Touch;
         struct {
             int lastButtonPressed;          // Register last gamepad button pressed
-            int axisCount;                  // Register number of available gamepad axis
+            int axisCount[MAX_GAMEPADS];                  // Register number of available gamepad axis
             bool ready[MAX_GAMEPADS];       // Flag to know if gamepad is ready
             char name[MAX_GAMEPADS][64];    // Gamepad name holder
             char currentButtonState[MAX_GAMEPADS][MAX_GAMEPAD_BUTTONS];     // Current gamepad buttons state

+ 1 - 1
src/rcore_android.c

@@ -566,7 +566,7 @@ void PollInputEvents(void)
 
     // Reset last gamepad button/axis registered state
     CORE.Input.Gamepad.lastButtonPressed = 0;       // GAMEPAD_BUTTON_UNKNOWN
-    CORE.Input.Gamepad.axisCount = 0;
+    //CORE.Input.Gamepad.axisCount = 0;
 
     // Register previous touch states
     for (int i = 0; i < MAX_TOUCH_POINTS; i++) CORE.Input.Touch.previousTouchState[i] = CORE.Input.Touch.currentTouchState[i];

+ 2 - 2
src/rcore_desktop.c

@@ -1234,7 +1234,7 @@ void PollInputEvents(void)
 
     // Reset last gamepad button/axis registered state
     CORE.Input.Gamepad.lastButtonPressed = 0;       // GAMEPAD_BUTTON_UNKNOWN
-    CORE.Input.Gamepad.axisCount = 0;
+    //CORE.Input.Gamepad.axisCount = 0;
     // Keyboard/Mouse input polling (automatically managed by GLFW3 through callback)
 
     // Register previous keys states
@@ -1341,7 +1341,7 @@ void PollInputEvents(void)
             CORE.Input.Gamepad.currentButtonState[i][GAMEPAD_BUTTON_LEFT_TRIGGER_2] = (char)(CORE.Input.Gamepad.axisState[i][GAMEPAD_AXIS_LEFT_TRIGGER] > 0.1f);
             CORE.Input.Gamepad.currentButtonState[i][GAMEPAD_BUTTON_RIGHT_TRIGGER_2] = (char)(CORE.Input.Gamepad.axisState[i][GAMEPAD_AXIS_RIGHT_TRIGGER] > 0.1f);
 
-            CORE.Input.Gamepad.axisCount = GLFW_GAMEPAD_AXIS_LAST + 1;
+            CORE.Input.Gamepad.axisCount[i] = GLFW_GAMEPAD_AXIS_LAST + 1;
         }
     }
 

+ 2 - 2
src/rcore_drm.c

@@ -655,7 +655,7 @@ void PollInputEvents(void)
 
     // Reset last gamepad button/axis registered state
     CORE.Input.Gamepad.lastButtonPressed = 0;       // GAMEPAD_BUTTON_UNKNOWN
-    CORE.Input.Gamepad.axisCount = 0;
+    //CORE.Input.Gamepad.axisCount = 0;
 
     // Register previous keys states
     for (int i = 0; i < MAX_KEYBOARD_KEYS; i++)
@@ -1847,7 +1847,7 @@ static void InitGamepad(void)
             }
 
             ioctl(platform.gamepadStreamFd[i], JSIOCGNAME(64), &CORE.Input.Gamepad.name[i]);
-            ioctl(platform.gamepadStreamFd[i], JSIOCGAXES, &CORE.Input.Gamepad.axisCount);
+            ioctl(platform.gamepadStreamFd[i], JSIOCGAXES, &CORE.Input.Gamepad.axisCount[i]);
         }
     }
 }

+ 1 - 1
src/rcore_template.c

@@ -569,7 +569,7 @@ void PollInputEvents(void)
 
     // Reset last gamepad button/axis registered state
     CORE.Input.Gamepad.lastButtonPressed = 0; // GAMEPAD_BUTTON_UNKNOWN
-    CORE.Input.Gamepad.axisCount = 0;
+    //CORE.Input.Gamepad.axisCount = 0;
 
     // Register previous touch states
     for (int i = 0; i < MAX_TOUCH_POINTS; i++) CORE.Input.Touch.previousTouchState[i] = CORE.Input.Touch.currentTouchState[i];

+ 2 - 2
src/rcore_web.c

@@ -705,7 +705,7 @@ void PollInputEvents(void)
 
     // Reset last gamepad button/axis registered state
     CORE.Input.Gamepad.lastButtonPressed = 0;       // GAMEPAD_BUTTON_UNKNOWN
-    CORE.Input.Gamepad.axisCount = 0;
+    //CORE.Input.Gamepad.axisCount = 0;
     // Keyboard/Mouse input polling (automatically managed by GLFW3 through callback)
 
     // Register previous keys states
@@ -799,7 +799,7 @@ void PollInputEvents(void)
                 CORE.Input.Gamepad.axisState[i][j] = gamepadState.axis[j];
             }
 
-            CORE.Input.Gamepad.axisCount = gamepadState.numAxes;
+            CORE.Input.Gamepad.axisCount[i] = gamepadState.numAxes;
         }
     }
 }