diff options
Diffstat (limited to 'source/gameengine/GameLogic/Joystick')
-rw-r--r-- | source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp | 37 | ||||
-rw-r--r-- | source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp | 6 |
2 files changed, 30 insertions, 13 deletions
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp index 6e379c91d0c..228adbb942e 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp @@ -41,6 +41,8 @@ #include "BLI_path_util.h" +#define SDL_CHECK(x) ((x) != (void*)0) + SCA_Joystick::SCA_Joystick(short int index) : m_joyindex(index), @@ -82,6 +84,9 @@ SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex ) #ifndef WITH_SDL return NULL; #else /* WITH_SDL */ + if (!SDL_CHECK(SDL_InitSubSystem)) { + return NULL; + } if (joyindex < 0 || joyindex >= JOYINDEX_MAX) { JOYSTICK_ECHO("Error-invalid joystick index: " << joyindex); return NULL; @@ -135,8 +140,10 @@ void SCA_Joystick::ReleaseInstance() if (--m_refCount == 0) { #ifdef WITH_SDL - int i; - for (i=0; i<JOYINDEX_MAX; i++) { + if (!SDL_CHECK(SDL_QuitSubSystem)) { + return; + } + for (int i=0; i<JOYINDEX_MAX; i++) { if (m_instance[i]) { m_instance[i]->DestroyJoystickDevice(); delete m_instance[i]; @@ -191,6 +198,9 @@ bool SCA_Joystick::aAxisIsPositive(int axis_single) bool SCA_Joystick::aAnyButtonPressIsPositive(void) { #ifdef WITH_SDL + if (!SDL_CHECK(SDL_JoystickGetButton)) { + return false; + } /* this is needed for the "all events" option * so we know if there are no buttons pressed */ for (int i=0; i<m_buttonmax; i++) @@ -206,7 +216,7 @@ bool SCA_Joystick::aButtonPressIsPositive(int button) return false; #else bool result; - SDL_JoystickGetButton(m_private->m_joystick, button)? result = true:result = false; + result = SDL_CHECK(SDL_JoystickGetButton) && SDL_JoystickGetButton(m_private->m_joystick, button); return result; #endif } @@ -218,7 +228,7 @@ bool SCA_Joystick::aButtonReleaseIsPositive(int button) return false; #else bool result; - SDL_JoystickGetButton(m_private->m_joystick, button)? result = false : result = true; + result = !(SDL_CHECK(SDL_JoystickGetButton) && SDL_JoystickGetButton(m_private->m_joystick, button)); return result; #endif } @@ -253,7 +263,7 @@ bool SCA_Joystick::CreateJoystickDevice(void) m_axismax = m_buttonmax = m_hatmax = 0; return false; #else /* WITH_SDL */ - if (m_isinit == false) { + if (m_isinit == false && SDL_CHECK(SDL_JoystickOpen)) { if (m_joyindex>=m_joynum) { /* don't print a message, because this is done anyway */ //JOYSTICK_ECHO("Joystick-Error: " << SDL_NumJoysticks() << " avaiable joystick(s)"); @@ -293,9 +303,9 @@ void SCA_Joystick::DestroyJoystickDevice(void) #ifdef WITH_SDL if (m_isinit) { #if SDL_VERSION_ATLEAST(2, 0, 0) - if (SDL_JoystickGetAttached(m_private->m_joystick)) + if (SDL_CHECK(SDL_JoystickGetAttached) && SDL_JoystickGetAttached(m_private->m_joystick)) #else - if (SDL_JoystickOpened(m_joyindex)) + if (SDL_CHECK(SDL_JoystickOpened) && SDL_JoystickOpened(m_joyindex)) #endif { JOYSTICK_ECHO("Closing-joystick " << m_joyindex); @@ -309,13 +319,16 @@ void SCA_Joystick::DestroyJoystickDevice(void) int SCA_Joystick::Connected(void) { #ifdef WITH_SDL - if (m_isinit + if (m_isinit && #if SDL_VERSION_ATLEAST(2, 0, 0) - && SDL_JoystickGetAttached(m_private->m_joystick)) + SDL_CHECK(SDL_JoystickGetAttached) && SDL_JoystickGetAttached(m_private->m_joystick) #else - && SDL_JoystickOpened(m_joyindex)) + SDL_CHECK(SDL_JoystickOpened) && SDL_JoystickOpened(m_joyindex) #endif + ) + { return 1; + } #endif return 0; } @@ -353,9 +366,9 @@ const char *SCA_Joystick::GetName() { #ifdef WITH_SDL #if SDL_VERSION_ATLEAST(2, 0, 0) - return SDL_JoystickName(m_private->m_joystick); + return (SDL_CHECK(SDL_JoystickName)) ? SDL_JoystickName(m_private->m_joystick) : ""; #else - return SDL_JoystickName(m_joyindex); + return (SDL_CHECK(SDL_JoystickName)) ? SDL_JoystickName(m_joyindex) : ""; #endif #else /* WITH_SDL */ return ""; diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp index 38baeaab35e..08f4d97ed1b 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp @@ -85,7 +85,11 @@ void SCA_Joystick::OnNothing(SDL_Event* sdl_event) void SCA_Joystick::HandleEvents(void) { SDL_Event sdl_event; - + + if (SDL_PollEvent == (void*)0) { + return; + } + int i; for (i=0; i<m_joynum; i++) { /* could use JOYINDEX_MAX but no reason to */ if (SCA_Joystick::m_instance[i]) |