REVIEWED: Gamepad system, specially for RPI
This commit is contained in:
parent
e818dc27cd
commit
96db787657
2 changed files with 28 additions and 28 deletions
50
src/core.c
50
src/core.c
|
@ -2860,9 +2860,7 @@ bool IsGamepadAvailable(int gamepad)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad]) result = true;
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad]) result = true;
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2871,13 +2869,10 @@ bool IsGamepadAvailable(int gamepad)
|
||||||
bool IsGamepadName(int gamepad, const char *name)
|
bool IsGamepadName(int gamepad, const char *name)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
const char *currentName = NULL;
|
const char *currentName = NULL;
|
||||||
|
|
||||||
if (CORE.Input.Gamepad.ready[gamepad]) currentName = GetGamepadName(gamepad);
|
if (CORE.Input.Gamepad.ready[gamepad]) currentName = GetGamepadName(gamepad);
|
||||||
if ((name != NULL) && (currentName != NULL)) result = (strcmp(name, currentName) == 0);
|
if ((name != NULL) && (currentName != NULL)) result = (strcmp(name, currentName) == 0);
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2905,6 +2900,7 @@ int GetGamepadAxisCount(int gamepad)
|
||||||
if (CORE.Input.Gamepad.ready[gamepad]) ioctl(CORE.Input.Gamepad.streamId[gamepad], JSIOCGAXES, &axisCount);
|
if (CORE.Input.Gamepad.ready[gamepad]) ioctl(CORE.Input.Gamepad.streamId[gamepad], JSIOCGAXES, &axisCount);
|
||||||
CORE.Input.Gamepad.axisCount = axisCount;
|
CORE.Input.Gamepad.axisCount = axisCount;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return CORE.Input.Gamepad.axisCount;
|
return CORE.Input.Gamepad.axisCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2913,11 +2909,8 @@ float GetGamepadAxisMovement(int gamepad, int axis)
|
||||||
{
|
{
|
||||||
float value = 0;
|
float value = 0;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXIS) &&
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXIS) &&
|
||||||
((axis == GAMEPAD_AXIS_LEFT_TRIGGER) || (axis == GAMEPAD_AXIS_RIGHT_TRIGGER) ||
|
(fabsf(CORE.Input.Gamepad.axisState[gamepad][axis]) > 0.1f)) value = CORE.Input.Gamepad.axisState[gamepad][axis]; // 0.1f = GAMEPAD_AXIS_MINIMUM_DRIFT/DELTA
|
||||||
(fabsf(CORE.Input.Gamepad.axisState[gamepad][axis]) >= 0.2f))) value = CORE.Input.Gamepad.axisState[gamepad][axis];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -2927,11 +2920,9 @@ bool IsGamepadButtonPressed(int gamepad, int button)
|
||||||
{
|
{
|
||||||
bool pressed = false;
|
bool pressed = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] != CORE.Input.Gamepad.previousState[gamepad][button]) &&
|
(CORE.Input.Gamepad.previousState[gamepad][button] == 0) && (CORE.Input.Gamepad.currentState[gamepad][button] == 1)) pressed = true;
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] == 1)) pressed = true;
|
else pressed = false;
|
||||||
#endif
|
|
||||||
|
|
||||||
return pressed;
|
return pressed;
|
||||||
}
|
}
|
||||||
|
@ -2941,10 +2932,8 @@ bool IsGamepadButtonDown(int gamepad, int button)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] == 1)) result = true;
|
(CORE.Input.Gamepad.currentState[gamepad][button] == 1)) result = true;
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2954,11 +2943,9 @@ bool IsGamepadButtonReleased(int gamepad, int button)
|
||||||
{
|
{
|
||||||
bool released = false;
|
bool released = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] != CORE.Input.Gamepad.previousState[gamepad][button]) &&
|
(CORE.Input.Gamepad.previousState[gamepad][button] == 1) && (CORE.Input.Gamepad.currentState[gamepad][button] == 0)) released = true;
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] == 0)) released = true;
|
else released = false;
|
||||||
#endif
|
|
||||||
|
|
||||||
return released;
|
return released;
|
||||||
}
|
}
|
||||||
|
@ -2968,10 +2955,8 @@ bool IsGamepadButtonUp(int gamepad, int button)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
#if !defined(PLATFORM_ANDROID)
|
|
||||||
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS) &&
|
||||||
(CORE.Input.Gamepad.currentState[gamepad][button] == 0)) result = true;
|
(CORE.Input.Gamepad.currentState[gamepad][button] == 0)) result = true;
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -3293,7 +3278,11 @@ static bool InitGraphicsDevice(int width, int height)
|
||||||
else glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_FALSE);
|
else glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (CORE.Window.flags & FLAG_MSAA_4X_HINT) glfwWindowHint(GLFW_SAMPLES, 4); // Tries to enable multisampling x4 (MSAA), default is 0
|
if (CORE.Window.flags & FLAG_MSAA_4X_HINT)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_INFO, "DISPLAY: Trying to enable MSAA x4");
|
||||||
|
glfwWindowHint(GLFW_SAMPLES, 4); // Tries to enable multisampling x4 (MSAA), default is 0
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: When asking for an OpenGL context version, most drivers provide highest supported version
|
// NOTE: When asking for an OpenGL context version, most drivers provide highest supported version
|
||||||
// with forward compatibility to older OpenGL versions.
|
// with forward compatibility to older OpenGL versions.
|
||||||
|
@ -4246,7 +4235,8 @@ static void Wait(float ms)
|
||||||
// Get gamepad button generic to all platforms
|
// Get gamepad button generic to all platforms
|
||||||
static int GetGamepadButton(int button)
|
static int GetGamepadButton(int button)
|
||||||
{
|
{
|
||||||
int btn = GAMEPAD_BUTTON_UNKNOWN;
|
int btn = -1;
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
|
@ -4335,6 +4325,16 @@ static void PollInputEvents(void)
|
||||||
CORE.Input.Mouse.previousButtonState[i] = CORE.Input.Mouse.currentButtonState[i];
|
CORE.Input.Mouse.previousButtonState[i] = CORE.Input.Mouse.currentButtonState[i];
|
||||||
CORE.Input.Mouse.currentButtonState[i] = CORE.Input.Mouse.currentButtonStateEvdev[i];
|
CORE.Input.Mouse.currentButtonState[i] = CORE.Input.Mouse.currentButtonStateEvdev[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Register gamepads buttons events
|
||||||
|
for (int i = 0; i < MAX_GAMEPADS; i++)
|
||||||
|
{
|
||||||
|
if (CORE.Input.Gamepad.ready[i]) // Check if gamepad is available
|
||||||
|
{
|
||||||
|
// Register previous gamepad states
|
||||||
|
for (int k = 0; k < MAX_GAMEPAD_BUTTONS; k++) CORE.Input.Gamepad.previousState[i][k] = CORE.Input.Gamepad.currentState[i][k];
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_UWP)
|
#if defined(PLATFORM_UWP)
|
||||||
|
@ -5904,7 +5904,7 @@ static void *GamepadThread(void *arg)
|
||||||
// Process gamepad events by type
|
// Process gamepad events by type
|
||||||
if (gamepadEvent.type == JS_EVENT_BUTTON)
|
if (gamepadEvent.type == JS_EVENT_BUTTON)
|
||||||
{
|
{
|
||||||
TRACELOGD("RPI: Gamepad button: %i, value: %i", gamepadEvent.number, gamepadEvent.value);
|
//TRACELOG(LOG_WARNING, "RPI: Gamepad button: %i, value: %i", gamepadEvent.number, gamepadEvent.value);
|
||||||
|
|
||||||
if (gamepadEvent.number < MAX_GAMEPAD_BUTTONS)
|
if (gamepadEvent.number < MAX_GAMEPAD_BUTTONS)
|
||||||
{
|
{
|
||||||
|
@ -5917,7 +5917,7 @@ static void *GamepadThread(void *arg)
|
||||||
}
|
}
|
||||||
else if (gamepadEvent.type == JS_EVENT_AXIS)
|
else if (gamepadEvent.type == JS_EVENT_AXIS)
|
||||||
{
|
{
|
||||||
TRACELOGD("RPI: Gamepad axis: %i, value: %i", gamepadEvent.number, gamepadEvent.value);
|
//TRACELOG(LOG_WARNING, "RPI: Gamepad axis: %i, value: %i", gamepadEvent.number, gamepadEvent.value);
|
||||||
|
|
||||||
if (gamepadEvent.number < MAX_GAMEPAD_AXIS)
|
if (gamepadEvent.number < MAX_GAMEPAD_AXIS)
|
||||||
{
|
{
|
||||||
|
|
|
@ -674,9 +674,9 @@ typedef enum {
|
||||||
GAMEPAD_BUTTON_RIGHT_TRIGGER_2,
|
GAMEPAD_BUTTON_RIGHT_TRIGGER_2,
|
||||||
|
|
||||||
// These are buttons in the center of the gamepad
|
// These are buttons in the center of the gamepad
|
||||||
GAMEPAD_BUTTON_MIDDLE_LEFT, //PS3 Select
|
GAMEPAD_BUTTON_MIDDLE_LEFT, // PS3 Select
|
||||||
GAMEPAD_BUTTON_MIDDLE, //PS Button/XBOX Button
|
GAMEPAD_BUTTON_MIDDLE, // PS Button/XBOX Button
|
||||||
GAMEPAD_BUTTON_MIDDLE_RIGHT, //PS3 Start
|
GAMEPAD_BUTTON_MIDDLE_RIGHT, // PS3 Start
|
||||||
|
|
||||||
// These are the joystick press in buttons
|
// These are the joystick press in buttons
|
||||||
GAMEPAD_BUTTON_LEFT_THUMB,
|
GAMEPAD_BUTTON_LEFT_THUMB,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue