Support adding advanced joypad features
This commit is contained in:
@ -178,6 +178,7 @@ if env["builtin_sdl"]:
|
||||
"joystick/windows/SDL_xinputjoystick.c",
|
||||
"thread/generic/SDL_syscond.c",
|
||||
"thread/generic/SDL_sysrwlock.c",
|
||||
"sensor/windows/SDL_windowssensor.c",
|
||||
"thread/windows/SDL_syscond_cv.c",
|
||||
"thread/windows/SDL_sysmutex.c",
|
||||
"thread/windows/SDL_sysrwlock_srw.c",
|
||||
|
||||
@ -47,7 +47,6 @@
|
||||
#define SDL_DIALOG_DISABLED 1
|
||||
#define SDL_FILESYSTEM_DUMMY 1
|
||||
#define SDL_FSOPS_DUMMY 1
|
||||
#define SDL_SENSOR_DISABLED 1
|
||||
#define SDL_GPU_DISABLED 1
|
||||
#define SDL_RENDER_DISABLED 1
|
||||
#define SDL_POWER_DISABLED 1
|
||||
@ -73,6 +72,7 @@
|
||||
#define SDL_THREAD_GENERIC_RWLOCK_SUFFIX 1
|
||||
#define SDL_THREAD_WINDOWS 1
|
||||
#define SDL_TIMER_WINDOWS 1
|
||||
#define SDL_SENSOR_WINDOWS 1
|
||||
|
||||
// Linux defines
|
||||
#elif defined(SDL_PLATFORM_LINUX)
|
||||
@ -113,6 +113,7 @@
|
||||
#define SDL_HAPTIC_LINUX 1
|
||||
#define SDL_TIMER_UNIX 1
|
||||
#define SDL_JOYSTICK_LINUX 1
|
||||
#define SDL_JOYSTICK_HIDAPI 1
|
||||
#define SDL_INPUT_LINUXEV 1
|
||||
#define SDL_THREAD_PTHREAD 1
|
||||
|
||||
@ -126,8 +127,10 @@
|
||||
#define SDL_HAPTIC_IOKIT 1
|
||||
#define SDL_JOYSTICK_IOKIT 1
|
||||
#define SDL_JOYSTICK_MFI 1
|
||||
#define SDL_JOYSTICK_HIDAPI 1
|
||||
#define SDL_TIMER_UNIX 1
|
||||
#define SDL_THREAD_PTHREAD 1
|
||||
#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1
|
||||
|
||||
// Other platforms are not supported (for now)
|
||||
#else
|
||||
|
||||
@ -208,6 +208,8 @@ void JoypadSDL::process_events() {
|
||||
device_name,
|
||||
joypads[joy_id].guid,
|
||||
joypad_info);
|
||||
|
||||
Input::get_singleton()->set_joy_features(joy_id, &joypads[joy_id]);
|
||||
}
|
||||
// An event for an attached joypad
|
||||
} else if (sdl_event.type >= SDL_EVENT_JOYSTICK_AXIS_MOTION && sdl_event.type < SDL_EVENT_FINGER_DOWN && sdl_instance_id_to_joypad_id.has(sdl_event.jdevice.which)) {
|
||||
@ -299,4 +301,12 @@ void JoypadSDL::close_joypad(int p_pad_idx) {
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Joystick *JoypadSDL::Joypad::get_sdl_joystick() const {
|
||||
return SDL_GetJoystickFromID(sdl_instance_idx);
|
||||
}
|
||||
|
||||
SDL_Gamepad *JoypadSDL::Joypad::get_sdl_gamepad() const {
|
||||
return SDL_GetGamepadFromID(sdl_instance_idx);
|
||||
}
|
||||
|
||||
#endif // SDL_ENABLED
|
||||
|
||||
@ -35,6 +35,8 @@
|
||||
|
||||
typedef uint32_t SDL_JoystickID;
|
||||
typedef struct HWND__ *HWND;
|
||||
typedef struct SDL_Joystick SDL_Joystick;
|
||||
typedef struct SDL_Gamepad SDL_Gamepad;
|
||||
|
||||
class JoypadSDL {
|
||||
public:
|
||||
@ -50,7 +52,8 @@ public:
|
||||
void process_events();
|
||||
|
||||
private:
|
||||
struct Joypad {
|
||||
class Joypad : public Input::JoypadFeatures {
|
||||
public:
|
||||
bool attached = false;
|
||||
StringName guid;
|
||||
|
||||
@ -58,6 +61,9 @@ private:
|
||||
|
||||
bool supports_force_feedback = false;
|
||||
uint64_t ff_effect_timestamp = 0;
|
||||
|
||||
SDL_Joystick *get_sdl_joystick() const;
|
||||
SDL_Gamepad *get_sdl_gamepad() const;
|
||||
};
|
||||
|
||||
static JoypadSDL *singleton;
|
||||
|
||||
Reference in New Issue
Block a user