X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcontrol%2Fjoystickkeyboardcontroller.cpp;h=6bebf6b3d0dd493e0b5a9c96d42160d152db5a62;hb=aeec9baba33ec63d2d0fdd97d961a53ec5c1541d;hp=d314dae778299e97e954078b5a8e94a95e7524c6;hpb=717f10b21efba0b9b3dcd844df219c652a18797a;p=supertux.git diff --git a/src/control/joystickkeyboardcontroller.cpp b/src/control/joystickkeyboardcontroller.cpp index d314dae77..6bebf6b3d 100644 --- a/src/control/joystickkeyboardcontroller.cpp +++ b/src/control/joystickkeyboardcontroller.cpp @@ -17,13 +17,12 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. - #include #include #include "joystickkeyboardcontroller.h" #include "gui/menu.h" -#include "app/gettext.h" +#include "gettext.h" #include "lisp/lisp.h" #include "lisp/list_iterator.h" #include "game_session.h" @@ -53,7 +52,8 @@ public: }; JoystickKeyboardController::JoystickKeyboardController() - : wait_for_key(-1), wait_for_joybutton(-1) + : wait_for_key(-1), wait_for_joybutton(-1), key_options_menu(0), + joystick_options_menu(0) { memset(last_keys, 0, sizeof(last_keys)); @@ -71,12 +71,9 @@ JoystickKeyboardController::JoystickKeyboardController() keymap.insert(std::make_pair(SDLK_RETURN, MENU_SELECT)); keymap.insert(std::make_pair(SDLK_KP_ENTER, MENU_SELECT)); - joystick_count = SDL_NumJoysticks(); + int joystick_count = SDL_NumJoysticks(); min_joybuttons = -1; max_joybuttons = -1; -#ifdef DEBUG - std::cout << "Found " << joystick_count << " joysticks.\n"; -#endif for(int i = 0; i < joystick_count; ++i) { SDL_Joystick* joystick = SDL_JoystickOpen(i); bool good = true; @@ -91,8 +88,6 @@ JoystickKeyboardController::JoystickKeyboardController() } if(!good) { SDL_JoystickClose(joystick); - joysticks.push_back(0); - joystick_names.push_back(""); continue; } @@ -102,7 +97,6 @@ JoystickKeyboardController::JoystickKeyboardController() max_joybuttons = SDL_JoystickNumButtons(joystick); } - joystick_names.push_back(SDL_JoystickName(i)); joysticks.push_back(joystick); } @@ -122,6 +116,13 @@ JoystickKeyboardController::JoystickKeyboardController() if(i != min_joybuttons-1) joy_button_map.insert(std::make_pair(i, MENU_SELECT)); } + + // some joysticks or SDL seem to produce some bogus events after being opened + Uint32 ticks = SDL_GetTicks(); + while(SDL_GetTicks() - ticks < 200) { + SDL_Event event; + SDL_PollEvent(&event); + } } JoystickKeyboardController::~JoystickKeyboardController() @@ -234,6 +235,14 @@ JoystickKeyboardController::write(lisp::Writer& writer) } void +JoystickKeyboardController::reset() +{ + Controller::reset(); + for(size_t i = 0; i < sizeof(last_keys); ++i) + last_keys[i] = 0; +} + +void JoystickKeyboardController::process_event(const SDL_Event& event) { switch(event.type) { @@ -618,9 +627,13 @@ JoystickKeyboardController::JoystickMenu::JoystickMenu( { add_label(_("Joystick Setup")); add_hl(); - add_controlfield(Controller::JUMP, _("Jump")); - add_controlfield(Controller::ACTION, _("Shoot/Run")); - add_controlfield(Controller::PAUSE_MENU, _("Pause/Menu")); + if(controller->joysticks.size() > 0) { + add_controlfield(Controller::JUMP, _("Jump")); + add_controlfield(Controller::ACTION, _("Shoot/Run")); + add_controlfield(Controller::PAUSE_MENU, _("Pause/Menu")); + } else { + add_deactive(-1, _("No Joysticks found")); + } add_hl(); add_back(_("Back")); update(); @@ -651,6 +664,9 @@ JoystickKeyboardController::JoystickMenu::menu_action(MenuItem* item) void JoystickKeyboardController::JoystickMenu::update() { + if(controller->joysticks.size() == 0) + return; + // update menu get_item_by_id((int) Controller::JUMP).change_input(get_button_name( controller->reversemap_joybutton(Controller::JUMP)));