diff options
Diffstat (limited to 'source/gameengine/GameLogic/Joystick')
3 files changed, 79 insertions, 80 deletions
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp index 092956e6489..b50cfe812a9 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp @@ -24,7 +24,9 @@ * * ***** END GPL LICENSE BLOCK ***** */ +#ifndef DISABLE_SDL #include <SDL.h> +#endif #include "SCA_Joystick.h" #include "SCA_JoystickPrivate.h" @@ -40,7 +42,10 @@ SCA_Joystick::SCA_Joystick(short int index) m_buttonnum(-2), m_hatdir(-2), m_isinit(0), - m_istrig(0) + m_istrig(0), + m_axismax(-1), + m_buttonmax(-1), + m_hatmax(-1) { #ifndef DISABLE_SDL m_private = new PrivateData(); @@ -116,12 +121,19 @@ void SCA_Joystick::cSetPrecision(int val) } +bool SCA_Joystick::aAnyAxisIsPositive(int axis) +{ + bool result; + int res = pAxisTest(axis); + res > m_prec? result = true: result = false; + return result; +} + bool SCA_Joystick::aRightAxisIsPositive(int axis) { bool result; int res = pGetAxis(axis,1); res > m_prec? result = true: result = false; - m_istrig = result; return result; } @@ -131,7 +143,6 @@ bool SCA_Joystick::aUpAxisIsPositive(int axis) bool result; int res = pGetAxis(axis,0); res < -m_prec? result = true : result = false; - m_istrig = result; return result; } @@ -141,7 +152,6 @@ bool SCA_Joystick::aLeftAxisIsPositive(int axis) bool result; int res = pGetAxis(axis,1); res < -m_prec ? result = true : result = false; - m_istrig = result; return result; } @@ -151,10 +161,18 @@ bool SCA_Joystick::aDownAxisIsPositive(int axis) bool result; int res = pGetAxis(axis,0); res > m_prec ? result = true:result = false; - m_istrig = result; return result; } +bool SCA_Joystick::aAnyButtonPressIsPositive(void) +{ + return (m_buttonnum==-2) ? false : true; +} + +bool SCA_Joystick::aAnyButtonReleaseIsPositive(void) +{ + return (m_buttonnum==-2) ? true : false; +} bool SCA_Joystick::aButtonPressIsPositive(int button) { @@ -163,7 +181,6 @@ bool SCA_Joystick::aButtonPressIsPositive(int button) #else bool result; SDL_JoystickGetButton(m_private->m_joystick, button)? result = true:result = false; - m_istrig = result; return result; #endif } @@ -176,7 +193,6 @@ bool SCA_Joystick::aButtonReleaseIsPositive(int button) #else bool result; SDL_JoystickGetButton(m_private->m_joystick, button)? result = false : result = true; - m_istrig = result; return result; #endif } @@ -187,27 +203,9 @@ bool SCA_Joystick::aHatIsPositive(int dir) bool result; int res = pGetHat(dir); res == dir? result = true : result = false; - m_istrig = result; return result; } - -int SCA_Joystick::pGetButtonPress(int button) -{ - if(button == m_buttonnum) - return m_buttonnum; - return -2; -} - - -int SCA_Joystick::pGetButtonRelease(int button) -{ - if(button == m_buttonnum) - return m_buttonnum; - return -2; -} - - int SCA_Joystick::pGetHat(int direction) { if(direction == m_hatdir){ @@ -218,52 +216,19 @@ int SCA_Joystick::pGetHat(int direction) int SCA_Joystick::GetNumberOfAxes() { -#ifdef DISABLE_SDL - return -1; -#else - int number; - if(m_isinit){ - if(m_private->m_joystick){ - number = SDL_JoystickNumAxes(m_private->m_joystick); - return number; - } - } - return -1; -#endif + return m_axismax; } int SCA_Joystick::GetNumberOfButtons() { -#ifdef DISABLE_SDL - return -1; -#else - int number; - if(m_isinit){ - if(m_private->m_joystick){ - number = SDL_JoystickNumButtons(m_private->m_joystick); - return number; - } - } - return -1; -#endif + return m_buttonmax; } int SCA_Joystick::GetNumberOfHats() { -#ifdef DISABLE_SDL - return -1; -#else - int number; - if(m_isinit){ - if(m_private->m_joystick){ - number = SDL_JoystickNumHats(m_private->m_joystick); - return number; - } - } - return -1; -#endif + return m_hatmax; } bool SCA_Joystick::CreateJoystickDevice(void) @@ -280,9 +245,14 @@ bool SCA_Joystick::CreateJoystickDevice(void) m_private->m_joystick = SDL_JoystickOpen(m_joyindex); SDL_JoystickEventState(SDL_ENABLE); - - echo("Joystick " << m_joyindex << " initialized"); m_isinit = true; + + echo("Joystick " << m_joyindex << " initialized"); + + /* must run after being initialized */ + m_axismax = SDL_JoystickNumAxes(m_private->m_joystick); + m_buttonmax = SDL_JoystickNumButtons(m_private->m_joystick); + m_hatmax = SDL_JoystickNumHats(m_private->m_joystick); } return true; #endif @@ -314,10 +284,10 @@ int SCA_Joystick::Connected(void) void SCA_Joystick::pFillAxes() { #ifndef DISABLE_SDL - if(GetNumberOfAxes() == 1){ + if(m_axismax == 1){ m_axis10 = SDL_JoystickGetAxis(m_private->m_joystick, 0); m_axis11 = SDL_JoystickGetAxis(m_private->m_joystick, 1); - }else if(GetNumberOfAxes() > 1){ + }else if(m_axismax > 1){ m_axis10 = SDL_JoystickGetAxis(m_private->m_joystick, 0); m_axis11 = SDL_JoystickGetAxis(m_private->m_joystick, 1); m_axis20 = SDL_JoystickGetAxis(m_private->m_joystick, 2); @@ -340,3 +310,13 @@ int SCA_Joystick::pGetAxis(int axisnum, int udlr) return 0; } +#define MAX2(x,y) ( (x)>(y) ? (x) : (y) ) +int SCA_Joystick::pAxisTest(int axisnum) +{ +#ifndef DISABLE_SDL + if(axisnum == 1)return MAX2(abs(m_axis10), abs(m_axis11)); + if(axisnum == 2)return MAX2(abs(m_axis20), abs(m_axis21)); +#endif + return 0; +} + diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h index ea7ecf7cefe..33cfbd74d05 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h @@ -29,7 +29,9 @@ #define _SCA_JOYSTICK_H_ #include "SCA_JoystickDefines.h" +#ifndef DISABLE_SDL #include "SDL.h" +#endif /* * Basic Joystick class @@ -83,8 +85,11 @@ class SCA_Joystick /* * max # of buttons avail */ - + + int m_axismax; int m_buttonmax; + int m_hatmax; + /* * hat values stored here */ @@ -134,18 +139,12 @@ class SCA_Joystick /* * returns m_axis10,m_axis11... */ - int pGetAxis(int axisnum, int udlr); - - /* - * gets the current button - */ - - int pGetButtonPress(int button); + int pAxisTest(int axisnum); /* - * returns if no button is pressed + * returns m_axis10,m_axis11... */ - int pGetButtonRelease(int button); + int pGetAxis(int axisnum, int udlr); /* * gets the current hat direction @@ -165,11 +164,14 @@ public: /* */ - + bool aAnyAxisIsPositive(int axis); bool aUpAxisIsPositive(int axis); bool aDownAxisIsPositive(int axis); bool aLeftAxisIsPositive(int axis); bool aRightAxisIsPositive(int axis); + + bool aAnyButtonPressIsPositive(void); + bool aAnyButtonReleaseIsPositive(void); bool aButtonPressIsPositive(int button); bool aButtonReleaseIsPositive(int button); bool aHatIsPositive(int dir); diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp index 0e2078265c9..7a2ec5b3dea 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp @@ -24,7 +24,10 @@ * * ***** END GPL LICENSE BLOCK ***** */ +#ifndef DISABLE_SDL #include <SDL.h> +#endif + #include "SCA_Joystick.h" #include "SCA_JoystickPrivate.h" @@ -46,17 +49,26 @@ void SCA_Joystick::OnHatMotion(SDL_Event* sdl_event) m_istrig = 1; } - void SCA_Joystick::OnButtonUp(SDL_Event* sdl_event) { + m_istrig = 1; + + /* this is needed for the "all events" option + * so we know if there are no buttons pressed */ + int i; + for (i=0; i<m_buttonmax; i++) { + if (SDL_JoystickGetButton(m_private->m_joystick, i)) { + m_buttonnum = i; + return; + } + } m_buttonnum = -2; } void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event) { - m_buttonmax = GetNumberOfButtons(); - if(sdl_event->jbutton.button >= 1 || sdl_event->jbutton.button <= m_buttonmax) + if(sdl_event->jbutton.button >= 0 || sdl_event->jbutton.button <= m_buttonmax) { m_istrig = 1; m_buttonnum = sdl_event->jbutton.button; @@ -74,7 +86,12 @@ void SCA_Joystick::OnNothing(SDL_Event* sdl_event) void SCA_Joystick::HandleEvents(void) { SDL_Event sdl_event; - + + int i; + for (i=0; i<JOYINDEX_MAX; i++) { + SCA_Joystick::m_instance[i]->OnNothing(&sdl_event); + } + if(SDL_PollEvent(&sdl_event)) { /* Note! m_instance[sdl_event.jaxis.which] |