[Scummvm-cvs-logs] CVS: scummvm/backends/sdl sdl-common.cpp,1.31,1.32
Jonathan Gray
khalek at users.sourceforge.net
Mon Jan 27 22:07:08 CET 2003
Update of /cvsroot/scummvm/scummvm/backends/sdl
In directory sc8-pr-cvs1:/tmp/cvs-serv11321
Modified Files:
sdl-common.cpp
Log Message:
more joystick stuff based on patch by ge0rg, also added defines for axis settings and mappings for common keys, these defines will hopefully be removed and replaced with config file options at some point
Index: sdl-common.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/sdl-common.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- sdl-common.cpp 22 Jan 2003 13:15:03 -0000 1.31
+++ sdl-common.cpp 28 Jan 2003 06:06:47 -0000 1.32
@@ -26,6 +26,20 @@
#include "scummvm.xpm"
+// FIXME move joystick defines out and replace with confile file options
+// we should really allow users to map any key to a joystick button
+#define JOY_DEADZONE 3200
+#define JOY_ANALOG
+// #define JOY_INVERT_Y
+#define JOY_XAXIS 0
+#define JOY_YAXIS 1
+// buttons
+#define JOY_BUT_LMOUSE 0
+#define JOY_BUT_RMOUSE 2
+#define JOY_BUT_ESCAPE 3
+#define JOY_BUT_PERIOD 1
+#define JOY_BUT_SPACE 4
+#define JOY_BUT_F5 5
bool atexit_proc_installed = false;
void atexit_proc() {
@@ -461,6 +475,7 @@
bool OSystem_SDL_Common::poll_event(Event *event) {
SDL_Event ev;
+ int axis;
kbd_mouse();
for(;;) {
@@ -648,50 +663,102 @@
return true;
case SDL_JOYBUTTONDOWN:
- if (ev.jbutton.button == 0) {
+ if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event->event_code = EVENT_LBUTTONDOWN;
- }
- if (ev.jbutton.button == 1) {
+ } else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event->event_code = EVENT_RBUTTONDOWN;
+ } else {
+ event->event_code = EVENT_KEYDOWN;
+ switch (ev.jbutton.button) {
+ case JOY_BUT_ESCAPE:
+ event->kbd.keycode = SDLK_ESCAPE;
+ event->kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_PERIOD:
+ event->kbd.keycode = SDLK_PERIOD;
+ event->kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_SPACE:
+ event->kbd.keycode = SDLK_SPACE;
+ event->kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_F5:
+ event->kbd.keycode = SDLK_F5;
+ event->kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ break;
+ }
}
return true;
case SDL_JOYBUTTONUP:
- if (ev.jbutton.button == 0) {
+ if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event->event_code = EVENT_LBUTTONUP;
- }
- if (ev.jbutton.button == 1) {
+ } else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event->event_code = EVENT_RBUTTONUP;
+ } else {
+ event->event_code = EVENT_KEYUP;
+ switch (ev.jbutton.button) {
+ case JOY_BUT_ESCAPE:
+ event->kbd.keycode = SDLK_ESCAPE;
+ event->kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_PERIOD:
+ event->kbd.keycode = SDLK_PERIOD;
+ event->kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_SPACE:
+ event->kbd.keycode = SDLK_SPACE;
+ event->kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ break;
+ case JOY_BUT_F5:
+ event->kbd.keycode = SDLK_F5;
+ event->kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ break;
+ }
}
return true;
case SDL_JOYAXISMOTION:
- event->event_code = EVENT_MOUSEMOVE;
+ axis = ev.jaxis.value;
+ if ( axis > JOY_DEADZONE) {
+ axis -= JOY_DEADZONE;
+ event->event_code = EVENT_MOUSEMOVE;
+ } else if ( axis < -JOY_DEADZONE ) {
+ axis += JOY_DEADZONE;
+ event->event_code = EVENT_MOUSEMOVE;
+ } else
+ axis = 0;
- if ( ev.jaxis.axis == 0) {
- if (ev.jaxis.value < -3200) { // left
- km.x_vel = -1;
- km.x_down_count = 1;
- } else if (ev.jaxis.value > 3200) { // right
- km.x_vel = 1;
+ if ( ev.jaxis.axis == JOY_XAXIS) {
+#ifdef JOY_ANALOG
+ km.x_vel = axis/2000;
+ km.x_down_count = 0;
+#else
+ if (axis != 0) {
+ km.x_vel = (axis > 0) ? 1:-1;
km.x_down_count = 1;
- } else { // neither
+ } else {
km.x_vel = 0;
km.x_down_count = 0;
}
+#endif
-
- } else if (ev.jaxis.axis == 1) {
- if (ev.jaxis.value < -3200) { // up
- km.y_vel = -1;
- km.y_down_count = 1;
- } else if (ev.jaxis.value > 3200) { // down
- km.y_vel = 1;
+ } else if (ev.jaxis.axis == JOY_YAXIS) {
+#ifndef JOY_INVERT_Y
+ axis = -axis;
+#endif
+#ifdef JOY_ANALOG
+ km.y_vel = -axis/2000;
+ km.y_down_count = 0;
+#else
+ if (axis != 0) {
+ km.y_vel = (-axis > 0) ? 1:-1;
km.y_down_count = 1;
} else {
km.y_vel = 0;
km.y_down_count = 0;
}
+#endif
}
return true;
More information about the Scummvm-git-logs
mailing list