wrap around joystick buttons. Makes playing joystick games more fun on my Gravis Exterminator.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2649
This commit is contained in:
parent
af5bb6abf3
commit
b9ad197d85
1 changed files with 25 additions and 14 deletions
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: sdl_mapper.cpp,v 1.23 2006-04-08 19:41:49 qbix79 Exp $ */
|
||||
/* $Id: sdl_mapper.cpp,v 1.24 2006-06-12 08:04:48 qbix79 Exp $ */
|
||||
|
||||
#define OLD_JOYSTICK 1
|
||||
|
||||
|
@ -486,6 +486,7 @@ public:
|
|||
neg_axis_lists=new CBindList[axes];
|
||||
button_lists=new CBindList[buttons];
|
||||
hat_lists=new CBindList[hats];
|
||||
emulated_buttons = 2;
|
||||
#if OLD_JOYSTICK
|
||||
LOG_MSG("Using joystick %s with %d axes and %d buttons",SDL_JoystickName(stick),axes,buttons);
|
||||
//if the first stick is set, we must be the second
|
||||
|
@ -528,6 +529,7 @@ public:
|
|||
#if OLD_JOYSTICK
|
||||
SDL_JoyAxisEvent * jaxis = NULL;
|
||||
SDL_JoyButtonEvent * jbutton = NULL;
|
||||
Bitu but = 0;
|
||||
|
||||
switch(event->type) {
|
||||
case SDL_JOYAXISMOTION:
|
||||
|
@ -543,8 +545,9 @@ public:
|
|||
jbutton = &event->jbutton;
|
||||
bool state;
|
||||
state=jbutton->type==SDL_JOYBUTTONDOWN;
|
||||
if ((jbutton->which == stick) && (jbutton->button<2)) {
|
||||
JOYSTICK_Button(emustick,jbutton->button,state);
|
||||
but = jbutton->button % emulated_buttons;
|
||||
if (jbutton->which == stick) {
|
||||
JOYSTICK_Button(emustick,but,state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -572,7 +575,7 @@ protected:
|
|||
CBindList * neg_axis_lists;
|
||||
CBindList * button_lists;
|
||||
CBindList * hat_lists;
|
||||
Bitu stick,emustick,axes,buttons,hats;
|
||||
Bitu stick,emustick,axes,buttons,hats,emulated_buttons;
|
||||
SDL_Joystick * sdl_joystick;
|
||||
char configname[10];
|
||||
};
|
||||
|
@ -580,6 +583,7 @@ protected:
|
|||
class C4AxisBindGroup : public CStickBindGroup {
|
||||
public:
|
||||
C4AxisBindGroup(Bitu _stick) : CStickBindGroup (_stick){
|
||||
emulated_buttons = 4;
|
||||
#if OLD_JOYSTICK
|
||||
JOYSTICK_Enable(1,true);
|
||||
#endif
|
||||
|
@ -588,6 +592,7 @@ public:
|
|||
#if OLD_JOYSTICK
|
||||
SDL_JoyAxisEvent * jaxis = NULL;
|
||||
SDL_JoyButtonEvent * jbutton = NULL;
|
||||
Bitu but = 0;
|
||||
|
||||
switch(event->type) {
|
||||
case SDL_JOYAXISMOTION:
|
||||
|
@ -603,9 +608,9 @@ public:
|
|||
jbutton = &event->jbutton;
|
||||
bool state;
|
||||
state=jbutton->type==SDL_JOYBUTTONDOWN;
|
||||
if ((jbutton->which == stick) && (jbutton->button<4)) {
|
||||
JOYSTICK_Button((jbutton->button >> 1),
|
||||
(jbutton->button & 1),state);
|
||||
but = jbutton->button % emulated_buttons;
|
||||
if (jbutton->which == stick) {
|
||||
JOYSTICK_Button((but >> 1),(but & 1),state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -617,6 +622,7 @@ public:
|
|||
class CFCSBindGroup : public CStickBindGroup {
|
||||
public:
|
||||
CFCSBindGroup(Bitu _stick) : CStickBindGroup (_stick){
|
||||
emulated_buttons = 4;
|
||||
#if OLD_JOYSTICK
|
||||
JOYSTICK_Enable(1,true);
|
||||
JOYSTICK_Move_Y(1,1.0);
|
||||
|
@ -627,6 +633,7 @@ public:
|
|||
SDL_JoyAxisEvent * jaxis = NULL;
|
||||
SDL_JoyButtonEvent * jbutton = NULL;
|
||||
SDL_JoyHatEvent * jhat = NULL;
|
||||
Bitu but = 0;
|
||||
|
||||
switch(event->type) {
|
||||
case SDL_JOYAXISMOTION:
|
||||
|
@ -690,9 +697,9 @@ public:
|
|||
jbutton = &event->jbutton;
|
||||
bool state;
|
||||
state=jbutton->type==SDL_JOYBUTTONDOWN;
|
||||
if ((jbutton->which == stick) && (jbutton->button<4)) {
|
||||
JOYSTICK_Button((jbutton->button >> 1),
|
||||
(jbutton->button & 1),state);
|
||||
but = jbutton->button % emulated_buttons;
|
||||
if (jbutton->which == stick) {
|
||||
JOYSTICK_Button((but >> 1),(but & 1),state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -704,6 +711,7 @@ public:
|
|||
class CCHBindGroup : public CStickBindGroup {
|
||||
public:
|
||||
CCHBindGroup(Bitu _stick) : CStickBindGroup (_stick){
|
||||
emulated_buttons = 6;
|
||||
#if OLD_JOYSTICK
|
||||
JOYSTICK_Enable(1,true);
|
||||
button_state=0;
|
||||
|
@ -714,6 +722,7 @@ public:
|
|||
SDL_JoyAxisEvent * jaxis = NULL;
|
||||
SDL_JoyButtonEvent * jbutton = NULL;
|
||||
SDL_JoyHatEvent * jhat = NULL;
|
||||
Bitu but = 0;
|
||||
static unsigned const button_magic[6]={0x02,0x04,0x10,0x100,0x20,0x200};
|
||||
static unsigned const hat_magic[2][5]={{0x8888,0x8000,0x800,0x80,0x08},
|
||||
{0x5440,0x4000,0x400,0x40,0x1000}};
|
||||
|
@ -743,13 +752,15 @@ public:
|
|||
break;
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
jbutton = &event->jbutton;
|
||||
if ((jbutton->which == stick) && (jbutton->button<6))
|
||||
button_state|=button_magic[jbutton->button];
|
||||
but = jbutton->button % emulated_buttons;
|
||||
if (jbutton->which == stick)
|
||||
button_state|=button_magic[but];
|
||||
break;
|
||||
case SDL_JOYBUTTONUP:
|
||||
jbutton = &event->jbutton;
|
||||
if ((jbutton->which == stick) && (jbutton->button<6))
|
||||
button_state&=~button_magic[jbutton->button];
|
||||
but = jbutton->button % emulated_buttons;
|
||||
if (jbutton->which == stick)
|
||||
button_state&=~button_magic[but];
|
||||
break;
|
||||
}
|
||||
unsigned i;
|
||||
|
|
Loading…
Add table
Reference in a new issue