Gamepad rumble support with SDL2 (#3819)
* Added gamepad rumble to rcore_desktop.c and rcore_desktop_sdl.c Still need to add to the rest of the platforms. * Add SetGamepadVibration warnings to unimplemented platforms. * Added MAX_GAMEPAD_VIBRATION_TIME The rumble in SDL2 will continue for MAX_GAMEPAD_VIBRATION_TIME unless the user cancels it with a call to SetGamepadVibration(0.0f,0.0f,0.0f) * Cast float duration value to Uint 32 * Changed defines from int to float and fixed typo --------- Co-authored-by: Gideon Serfontein <gse@newspacesystems.com>
This commit is contained in:
parent
bda919033d
commit
371d25c8c9
8 changed files with 54 additions and 10 deletions
|
@ -81,6 +81,7 @@
|
||||||
#define MAX_GAMEPADS 4 // Maximum number of gamepads supported
|
#define MAX_GAMEPADS 4 // Maximum number of gamepads supported
|
||||||
#define MAX_GAMEPAD_AXIS 8 // Maximum number of axis supported (per gamepad)
|
#define MAX_GAMEPAD_AXIS 8 // Maximum number of axis supported (per gamepad)
|
||||||
#define MAX_GAMEPAD_BUTTONS 32 // Maximum number of buttons supported (per gamepad)
|
#define MAX_GAMEPAD_BUTTONS 32 // Maximum number of buttons supported (per gamepad)
|
||||||
|
#define MAX_GAMEPAD_VIBRATION_TIME 2.0f // Maximum vibration time in seconds
|
||||||
#define MAX_TOUCH_POINTS 8 // Maximum number of touch points supported
|
#define MAX_TOUCH_POINTS 8 // Maximum number of touch points supported
|
||||||
#define MAX_KEY_PRESSED_QUEUE 16 // Maximum number of keys in the key input queue
|
#define MAX_KEY_PRESSED_QUEUE 16 // Maximum number of keys in the key input queue
|
||||||
#define MAX_CHAR_PRESSED_QUEUE 16 // Maximum number of characters in the char input queue
|
#define MAX_CHAR_PRESSED_QUEUE 16 // Maximum number of characters in the char input queue
|
||||||
|
|
|
@ -613,6 +613,12 @@ int SetGamepadMappings(const char *mappings)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set gamepad vibration
|
||||||
|
void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "GamepadSetVibration() not implemented on target platform");
|
||||||
|
}
|
||||||
|
|
||||||
// Set mouse position XY
|
// Set mouse position XY
|
||||||
void SetMousePosition(int x, int y)
|
void SetMousePosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1050,6 +1050,12 @@ int SetGamepadMappings(const char *mappings)
|
||||||
return glfwUpdateGamepadMappings(mappings);
|
return glfwUpdateGamepadMappings(mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set gamepad vibration
|
||||||
|
void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "GamepadSetVibration() not available on target platform");
|
||||||
|
}
|
||||||
|
|
||||||
// Set mouse position XY
|
// Set mouse position XY
|
||||||
void SetMousePosition(int x, int y)
|
void SetMousePosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -938,6 +938,21 @@ int SetGamepadMappings(const char *mappings)
|
||||||
return SDL_GameControllerAddMapping(mappings);
|
return SDL_GameControllerAddMapping(mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set gamepad vibration
|
||||||
|
void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor)
|
||||||
|
{
|
||||||
|
//Limit input values to between 0.0f and 1.0f
|
||||||
|
leftMotor = (0.0f > leftMotor) ? 0.0f : leftMotor;
|
||||||
|
rightMotor = (0.0f > rightMotor) ? 0.0f : rightMotor;
|
||||||
|
leftMotor = (1.0f < leftMotor) ? 1.0f : leftMotor;
|
||||||
|
rightMotor = (1.0f < rightMotor) ? 1.0f : rightMotor;
|
||||||
|
|
||||||
|
if (IsGamepadAvailable(gamepad))
|
||||||
|
{
|
||||||
|
SDL_JoystickRumble(platform.gamepad[gamepad], (Uint16)(leftMotor*65535.0f), (Uint16)(rightMotor*65535.0f), (Uint32)(MAX_GAMEPAD_VIBRATION_TIME*1000.0f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set mouse position XY
|
// Set mouse position XY
|
||||||
void SetMousePosition(int x, int y)
|
void SetMousePosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -519,6 +519,12 @@ int SetGamepadMappings(const char *mappings)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set gamepad vibration
|
||||||
|
void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "GamepadSetVibration() not implemented on target platform");
|
||||||
|
}
|
||||||
|
|
||||||
// Set mouse position XY
|
// Set mouse position XY
|
||||||
void SetMousePosition(int x, int y)
|
void SetMousePosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -850,6 +850,12 @@ int SetGamepadMappings(const char *mappings)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set gamepad vibration
|
||||||
|
void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "GamepadSetVibration() not implemented on target platform");
|
||||||
|
}
|
||||||
|
|
||||||
// Set mouse position XY
|
// Set mouse position XY
|
||||||
void SetMousePosition(int x, int y)
|
void SetMousePosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
21
src/raylib.h
21
src/raylib.h
|
@ -1162,16 +1162,17 @@ RLAPI int GetCharPressed(void); // Get char presse
|
||||||
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
||||||
|
|
||||||
// Input-related functions: gamepads
|
// Input-related functions: gamepads
|
||||||
RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available
|
RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available
|
||||||
RLAPI const char *GetGamepadName(int gamepad); // Get gamepad internal name id
|
RLAPI const char *GetGamepadName(int gamepad); // Get gamepad internal name id
|
||||||
RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once
|
RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once
|
||||||
RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed
|
RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed
|
||||||
RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once
|
RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once
|
||||||
RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed
|
RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed
|
||||||
RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed
|
RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed
|
||||||
RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad
|
RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad
|
||||||
RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis
|
RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis
|
||||||
RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB)
|
RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB)
|
||||||
|
RLAPI void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor); // Set gamepad vibration for both motors
|
||||||
|
|
||||||
// Input-related functions: mouse
|
// Input-related functions: mouse
|
||||||
RLAPI bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once
|
RLAPI bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once
|
||||||
|
|
|
@ -224,6 +224,9 @@ __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigne
|
||||||
#ifndef MAX_GAMEPAD_BUTTONS
|
#ifndef MAX_GAMEPAD_BUTTONS
|
||||||
#define MAX_GAMEPAD_BUTTONS 32 // Maximum number of buttons supported (per gamepad)
|
#define MAX_GAMEPAD_BUTTONS 32 // Maximum number of buttons supported (per gamepad)
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef MAX_GAMEPAD_VIBRATION_TIME
|
||||||
|
#define MAX_GAMEPAD_VIBRATION_TIME 2.0f // Maximum vibration time in seconds
|
||||||
|
#endif
|
||||||
#ifndef MAX_TOUCH_POINTS
|
#ifndef MAX_TOUCH_POINTS
|
||||||
#define MAX_TOUCH_POINTS 8 // Maximum number of touch points supported
|
#define MAX_TOUCH_POINTS 8 // Maximum number of touch points supported
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue