diff --git a/code/init.cpp b/code/init.cpp index 28f052e..d67fe34 100644 --- a/code/init.cpp +++ b/code/init.cpp @@ -162,7 +162,7 @@ void initSystem() #endif /* Initialize the SDL library */ - if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0) { + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_JOYSTICK) < 0) { printf("Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } @@ -209,6 +209,9 @@ void initSystem() SDL_ShowCursor(SDL_DISABLE); SDL_EventState(SDL_MOUSEMOTION, SDL_DISABLE); + + SDL_JoystickEventState(SDL_ENABLE); + SDL_JoystickOpen(0); } /* diff --git a/code/player.cpp b/code/player.cpp index a12bb17..2b15502 100644 --- a/code/player.cpp +++ b/code/player.cpp @@ -308,7 +308,7 @@ void getPlayerInput() engine.cursor_y = y; } - if (SDL_PollEvent(&engine.event)) + while (SDL_PollEvent(&engine.event)) { switch (engine.event.type) { @@ -340,6 +340,42 @@ void getPlayerInput() engine.keyState[engine.event.key.keysym.sym] = 0; break; + case SDL_JOYBUTTONDOWN: + case SDL_JOYBUTTONUP: + switch (engine.event.jbutton.button) + { + case 0: + engine.keyState[SDLK_LCTRL] = engine.event.jbutton.state; + break; + case 1: + engine.keyState[SDLK_SPACE] = engine.event.jbutton.state; + break; + case 2: + engine.keyState[SDLK_LSHIFT] = engine.event.jbutton.state; + break; + case 3: + engine.keyState[SDLK_t] = engine.event.jbutton.state; + break; + } + break; + + case SDL_JOYHATMOTION: + engine.keyState[SDLK_UP] = engine.event.jhat.value & SDL_HAT_UP; + engine.keyState[SDLK_DOWN] = engine.event.jhat.value & SDL_HAT_DOWN; + engine.keyState[SDLK_LEFT] = engine.event.jhat.value & SDL_HAT_LEFT; + engine.keyState[SDLK_RIGHT] = engine.event.jhat.value & SDL_HAT_RIGHT; + break; + + case SDL_JOYAXISMOTION: + if (engine.event.jaxis.axis & 1) { + engine.keyState[SDLK_UP] = engine.event.jaxis.value < -16384; + engine.keyState[SDLK_DOWN] = engine.event.jaxis.value >= 16384; + } else { + engine.keyState[SDLK_LEFT] = engine.event.jaxis.value < -16384; + engine.keyState[SDLK_RIGHT] = engine.event.jaxis.value >= 16384; + } + break; + default: break; }