diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-10-08 07:16:19 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-10-08 07:16:19 +0400 |
commit | ce4162c9a13f8d147e898c625ffe1e10bca3b48d (patch) | |
tree | e178b605ed574fe8fcf24532f26ce13e24fe2144 /source/gameengine/GameLogic/Joystick | |
parent | b8c294d323551591a1140e3b73e03b996303eb81 (diff) |
* Joystick sensor is now only triggered from events of the selected type.
* Keyboard sensor - added (back?) support for qualifiers (Hold buttons in the UI)
Diffstat (limited to 'source/gameengine/GameLogic/Joystick')
3 files changed, 39 insertions, 15 deletions
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp index b50cfe812a9..f271baeed16 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp @@ -42,7 +42,9 @@ SCA_Joystick::SCA_Joystick(short int index) m_buttonnum(-2), m_hatdir(-2), m_isinit(0), - m_istrig(0), + m_istrig_axis(0), + m_istrig_button(0), + m_istrig_hat(0), m_axismax(-1), m_buttonmax(-1), m_hatmax(-1) @@ -310,13 +312,25 @@ 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 + short i1,i2; + if(axisnum == 1) { + i1 = m_axis10; i2 = m_axis11; + } + else if(axisnum == 2) { + i1 = m_axis20; i2 = m_axis21; + } + /* long winded way to do + * return MAX2(abs(i1), abs(i2)) + * avoid abs from math.h */ + if (i1 < 0) i1 = -i1; + if (i2 < 0) i2 = -i2; + if (i1 <i2) return i2; + else return i1; +#else return 0; +#endif } diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h index 33cfbd74d05..8335d5538ad 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h @@ -90,7 +90,7 @@ class SCA_Joystick int m_buttonmax; int m_hatmax; - /* + /* * hat values stored here */ int m_hatnum; @@ -106,8 +106,10 @@ class SCA_Joystick bool m_isinit; - /* is triggered */ - bool m_istrig; + /* is triggered for each event type */ + bool m_istrig_axis; + bool m_istrig_button; + bool m_istrig_hat; #ifndef DISABLE_SDL /* @@ -212,8 +214,16 @@ public: return m_prec; } - bool IsTrig(void){ - return m_istrig; + bool IsTrigAxis(void){ + return m_istrig_axis; + } + + bool IsTrigButton(void){ + return m_istrig_button; + } + + bool IsTrigHat(void){ + return m_istrig_hat; } /* diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp index 7a2ec5b3dea..89e2420f822 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp @@ -38,7 +38,7 @@ void SCA_Joystick::OnAxisMotion(SDL_Event* sdl_event) pFillAxes(); m_axisnum = sdl_event->jaxis.axis; m_axisvalue = sdl_event->jaxis.value; - m_istrig = 1; + m_istrig_axis = 1; } @@ -46,12 +46,12 @@ void SCA_Joystick::OnHatMotion(SDL_Event* sdl_event) { m_hatdir = sdl_event->jhat.value; m_hatnum = sdl_event->jhat.hat; - m_istrig = 1; + m_istrig_hat = 1; } void SCA_Joystick::OnButtonUp(SDL_Event* sdl_event) { - m_istrig = 1; + m_istrig_button = 1; /* this is needed for the "all events" option * so we know if there are no buttons pressed */ @@ -70,7 +70,7 @@ void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event) { if(sdl_event->jbutton.button >= 0 || sdl_event->jbutton.button <= m_buttonmax) { - m_istrig = 1; + m_istrig_button = 1; m_buttonnum = sdl_event->jbutton.button; } } @@ -78,7 +78,7 @@ void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event) void SCA_Joystick::OnNothing(SDL_Event* sdl_event) { - m_istrig = 0; + m_istrig_axis = m_istrig_button = m_istrig_hat = 0; } /* only handle events for 1 joystick */ |