void JoystickKeyboardController::process_hat_event(const SDL_JoyHatEvent& jhat) { Uint8 changed = hat_state ^ jhat.value; if (wait_for_joystick >= 0) { if (changed & SDL_HAT_UP && jhat.value & SDL_HAT_UP) bind_joyhat(jhat.which, SDL_HAT_UP, Control(wait_for_joystick)); if (changed & SDL_HAT_DOWN && jhat.value & SDL_HAT_DOWN) bind_joyhat(jhat.which, SDL_HAT_DOWN, Control(wait_for_joystick)); if (changed & SDL_HAT_LEFT && jhat.value & SDL_HAT_LEFT) bind_joyhat(jhat.which, SDL_HAT_LEFT, Control(wait_for_joystick)); if (changed & SDL_HAT_RIGHT && jhat.value & SDL_HAT_RIGHT) bind_joyhat(jhat.which, SDL_HAT_RIGHT, Control(wait_for_joystick)); MenuStorage::get_joystick_options_menu()->update(); wait_for_joystick = -1; } else { if (changed & SDL_HAT_UP) { HatMap::iterator it = joy_hat_map.find(std::make_pair(jhat.which, SDL_HAT_UP)); if (it != joy_hat_map.end()) set_joy_controls(it->second, jhat.value & SDL_HAT_UP); } if (changed & SDL_HAT_DOWN) { HatMap::iterator it = joy_hat_map.find(std::make_pair(jhat.which, SDL_HAT_DOWN)); if (it != joy_hat_map.end()) set_joy_controls(it->second, jhat.value & SDL_HAT_DOWN); } if (changed & SDL_HAT_LEFT) { HatMap::iterator it = joy_hat_map.find(std::make_pair(jhat.which, SDL_HAT_LEFT)); if (it != joy_hat_map.end()) set_joy_controls(it->second, jhat.value & SDL_HAT_LEFT); } if (changed & SDL_HAT_RIGHT) { HatMap::iterator it = joy_hat_map.find(std::make_pair(jhat.which, SDL_HAT_RIGHT)); if (it != joy_hat_map.end()) set_joy_controls(it->second, jhat.value & SDL_HAT_RIGHT); } } hat_state = jhat.value; }
void JoystickConfig::read(const lisp::Lisp& joystick_lisp) { joystick_lisp.get("dead-zone", dead_zone); joystick_lisp.get("jump-with-up", jump_with_up_joy); lisp::ListIterator iter(&joystick_lisp); while(iter.next()) { if (iter.item() == "map") { int button = -1; int axis = 0; int hat = -1; std::string control; const lisp::Lisp* map = iter.lisp(); map->get("control", control); int i = 0; for(i = 0; Controller::controlNames[i] != 0; ++i) { if (control == Controller::controlNames[i]) break; } if (Controller::controlNames[i] == 0) { log_info << "Invalid control '" << control << "' in buttonmap" << std::endl; } else { if (map->get("button", button)) { bind_joybutton(0, button, Controller::Control(i)); } else if (map->get("axis", axis)) { bind_joyaxis(0, axis, Controller::Control(i)); } else if (map->get("hat", hat)) { if (hat != SDL_HAT_UP && hat != SDL_HAT_DOWN && hat != SDL_HAT_LEFT && hat != SDL_HAT_RIGHT) { log_info << "Invalid axis '" << axis << "' in axismap" << std::endl; } else { bind_joyhat(0, hat, Controller::Control(i)); } } } } } }
void JoystickConfig::read(const ReaderMapping& joystick_lisp) { joystick_lisp.get("dead-zone", dead_zone); joystick_lisp.get("jump-with-up", jump_with_up_joy); joystick_lisp.get("use-game-controller", use_game_controller); auto iter = joystick_lisp.get_iter(); while(iter.next()) { if (iter.get_key() == "map") { int button = -1; int axis = 0; int hat = -1; std::string control; auto map = iter.as_mapping(); map.get("control", control); int i = 0; for(i = 0; Controller::controlNames[i] != 0; ++i) { if (control == Controller::controlNames[i]) break; } if (Controller::controlNames[i] == 0) { log_info << "Invalid control '" << control << "' in buttonmap" << std::endl; } else { if (map.get("button", button)) { bind_joybutton(0, button, Controller::Control(i)); } else if (map.get("axis", axis)) { bind_joyaxis(0, axis, Controller::Control(i)); } else if (map.get("hat", hat)) { if (hat != SDL_HAT_UP && hat != SDL_HAT_DOWN && hat != SDL_HAT_LEFT && hat != SDL_HAT_RIGHT) { log_info << "Invalid axis '" << axis << "' in axismap" << std::endl; } else { bind_joyhat(0, hat, Controller::Control(i)); } } } } } }
void JoystickKeyboardController::read(const Reader& lisp) { const lisp::Lisp* keymap_lisp = lisp.get_lisp("keymap"); if(keymap_lisp) { keymap.clear(); keymap_lisp->get("jump-with-up", jump_with_up_kbd); lisp::ListIterator iter(keymap_lisp); while(iter.next()) { if(iter.item() == "map") { int key = -1; std::string control; const lisp::Lisp* map = iter.lisp(); map->get("key", key); map->get("control", control); if(key < SDLK_FIRST || key >= SDLK_LAST) { log_info << "Invalid key '" << key << "' in keymap" << std::endl; continue; } int i = 0; for(i = 0; Controller::controlNames[i] != 0; ++i) { if(control == Controller::controlNames[i]) break; } if(Controller::controlNames[i] == 0) { log_info << "Invalid control '" << control << "' in keymap" << std::endl; continue; } keymap[SDLKey(key)] = Control(i); } } } const lisp::Lisp* joystick_lisp = lisp.get_lisp("joystick"); if(joystick_lisp) { joystick_lisp->get("dead-zone", dead_zone); joystick_lisp->get("jump-with-up", jump_with_up_joy); lisp::ListIterator iter(joystick_lisp); while(iter.next()) { if(iter.item() == "map") { int button = -1; int axis = 0; int hat = -1; std::string control; const lisp::Lisp* map = iter.lisp(); map->get("control", control); int i = 0; for(i = 0; Controller::controlNames[i] != 0; ++i) { if(control == Controller::controlNames[i]) break; } if(Controller::controlNames[i] == 0) { log_info << "Invalid control '" << control << "' in buttonmap" << std::endl; continue; } if (map->get("button", button)) { if(button < 0 || button >= max_joybuttons) { log_info << "Invalid button '" << button << "' in buttonmap" << std::endl; continue; } bind_joybutton(0, button, Control(i)); } if (map->get("axis", axis)) { if (axis == 0 || abs(axis) > max_joyaxis) { log_info << "Invalid axis '" << axis << "' in axismap" << std::endl; continue; } bind_joyaxis(0, axis, Control(i)); } if (map->get("hat", hat)) { if (hat != SDL_HAT_UP && hat != SDL_HAT_DOWN && hat != SDL_HAT_LEFT && hat != SDL_HAT_RIGHT) { log_info << "Invalid axis '" << axis << "' in axismap" << std::endl; continue; } else { bind_joyhat(0, hat, Control(i)); } } } } } }