aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorJonathan Gray2003-01-20 16:29:26 +0000
committerJonathan Gray2003-01-20 16:29:26 +0000
commit473cbb843749e2e373ab0dd48aba2498d3fa56f6 (patch)
tree8100a0624b074d4984982dddbb0b19527206ef26 /backends
parent1043ec1df97cc0f6184a1ecd0960732d3b76e05a (diff)
downloadscummvm-rg350-473cbb843749e2e373ab0dd48aba2498d3fa56f6.tar.gz
scummvm-rg350-473cbb843749e2e373ab0dd48aba2498d3fa56f6.tar.bz2
scummvm-rg350-473cbb843749e2e373ab0dd48aba2498d3fa56f6.zip
start of joystick support, just selects first joystick for now and only maps first two buttons to first two mouse buttons. Will add more button mappings and a -j options to specify joystick in future
svn-id: r6528
Diffstat (limited to 'backends')
-rw-r--r--backends/sdl/sdl-common.cpp55
-rw-r--r--backends/sdl/sdl-common.h4
2 files changed, 58 insertions, 1 deletions
diff --git a/backends/sdl/sdl-common.cpp b/backends/sdl/sdl-common.cpp
index a4cb7ba341..6e7882db7e 100644
--- a/backends/sdl/sdl-common.cpp
+++ b/backends/sdl/sdl-common.cpp
@@ -42,7 +42,7 @@ OSystem *OSystem_SDL_Common::create(int gfx_mode, bool full_screen) {
syst->_mode = gfx_mode;
syst->_full_screen = full_screen;
- if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) ==-1) {
+ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK) ==-1) {
error("Could not initialize SDL: %s.\n", SDL_GetError());
}
@@ -62,6 +62,12 @@ OSystem *OSystem_SDL_Common::create(int gfx_mode, bool full_screen) {
atexit(atexit_proc);
#endif
+ // enable joystick
+ if (SDL_NumJoysticks() > 0) {
+ printf("Using joystick: %s\n", SDL_JoystickName(0));
+ syst->init_joystick();
+ }
+
return syst;
}
@@ -85,6 +91,7 @@ OSystem_SDL_Common::OSystem_SDL_Common()
// reset mouse state
memset(&km, 0, sizeof(km));
+
}
OSystem_SDL_Common::~OSystem_SDL_Common()
@@ -640,6 +647,52 @@ bool OSystem_SDL_Common::poll_event(Event *event) {
event->mouse.y /= _scaleFactor;
return true;
+ case SDL_JOYBUTTONDOWN:
+ if (ev.jbutton.button == 0) {
+ event->event_code = EVENT_LBUTTONDOWN;
+ }
+ if (ev.jbutton.button == 1) {
+ event->event_code = EVENT_RBUTTONDOWN;
+ }
+ return true;
+
+ case SDL_JOYBUTTONUP:
+ if (ev.jbutton.button == 0) {
+ event->event_code = EVENT_LBUTTONUP;
+ }
+ if (ev.jbutton.button == 1) {
+ event->event_code = EVENT_RBUTTONUP;
+ }
+ return true;
+
+ case SDL_JOYAXISMOTION:
+ 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;
+ km.x_down_count = 1;
+ } else { // neither
+ km.x_vel = 0;
+ km.x_down_count = 0;
+ }
+
+
+ } 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;
+ km.y_down_count = 1;
+ } else {
+ km.y_vel = 0;
+ km.y_down_count = 0;
+ }
+ }
+ return true;
+
case SDL_QUIT:
quit();
}
diff --git a/backends/sdl/sdl-common.h b/backends/sdl/sdl-common.h
index b4e2b324db..e0d4d37a28 100644
--- a/backends/sdl/sdl-common.h
+++ b/backends/sdl/sdl-common.h
@@ -181,6 +181,9 @@ protected:
MousePos() : x(0), y(0), w(0), h(0) {}
};
+ // joystick
+ SDL_Joystick *_joystick;
+
bool _mouseVisible;
bool _mouseDrawn;
byte *_mouseData;
@@ -214,6 +217,7 @@ protected:
void setup_icon();
void kbd_mouse();
+ void init_joystick() { _joystick = SDL_JoystickOpen(0); }
static OSystem_SDL_Common *create();
};