From 50405cc3c3fb3ff215d27713ba136ee7bc5ed1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Gia=20Phong?= Date: Mon, 22 Aug 2022 05:09:18 +0900 Subject: [PATCH] Make controller aiming analog --- src/MenuActionBar.cpp | 9 +++++---- src/SDLInputState.cpp | 8 +++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/MenuActionBar.cpp b/src/MenuActionBar.cpp index 4bd1a5874..bce98cb7f 100644 --- a/src/MenuActionBar.cpp +++ b/src/MenuActionBar.cpp @@ -563,6 +563,7 @@ void MenuActionBar::checkAction(std::vector &action_queue) { for (unsigned i = 0; i < slots_count; i++) { ActionData action; action.hotkey = i; + bool have_analog_aim = inpt->mode == InputState::MODE_JOYSTICK || inpt->usingMouse(); bool have_aim = false; slot_activated[i] = false; @@ -605,7 +606,7 @@ void MenuActionBar::checkAction(std::vector &action_queue) { } // joystick/keyboard action button - else if (!inpt->usingMouse() && slots[i]->checkClick() == WidgetSlot::ACTIVATE) { + else if (!have_analog_aim && slots[i]->checkClick() == WidgetSlot::ACTIVATE) { have_aim = false; slot_activated[i] = true; action.power = hotkeys_mod[i]; @@ -614,17 +615,17 @@ void MenuActionBar::checkAction(std::vector &action_queue) { // pressing hotkey else if (i<10 && inpt->pressing[i + Input::BAR_1]) { - have_aim = inpt->usingMouse(); + have_aim = have_analog_aim; action.power = hotkeys_mod[i]; twostep_slot = -1; } else if (i==10 && inpt->pressing[Input::MAIN1] && !inpt->lock[Input::MAIN1] && !Utils::isWithinRect(window_area, inpt->mouse) && enable_main1) { - have_aim = inpt->usingMouse(); + have_aim = have_analog_aim; action.power = hotkeys_mod[10]; twostep_slot = -1; } else if (i==11 && inpt->pressing[Input::MAIN2] && !inpt->lock[Input::MAIN2] && !Utils::isWithinRect(window_area, inpt->mouse) && enable_main2) { - have_aim = inpt->usingMouse(); + have_aim = have_analog_aim; action.power = hotkeys_mod[11]; twostep_slot = -1; } diff --git a/src/SDLInputState.cpp b/src/SDLInputState.cpp index c50cb0bed..755bcd889 100644 --- a/src/SDLInputState.cpp +++ b/src/SDLInputState.cpp @@ -276,11 +276,6 @@ void SDLInputState::initBindings() { setBind(Input::PAUSE, InputBind::GAMEPAD, SDL_CONTROLLER_BUTTON_START, NULL); - setBind(Input::AIM_RIGHT, InputBind::GAMEPAD_AXIS, (SDL_CONTROLLER_AXIS_RIGHTX*2), NULL); - setBind(Input::AIM_DOWN, InputBind::GAMEPAD_AXIS, (SDL_CONTROLLER_AXIS_RIGHTY*2), NULL); - setBind(Input::AIM_LEFT, InputBind::GAMEPAD_AXIS, (SDL_CONTROLLER_AXIS_RIGHTX*2) + 1, NULL); - setBind(Input::AIM_UP, InputBind::GAMEPAD_AXIS, (SDL_CONTROLLER_AXIS_RIGHTY*2) + 1, NULL); - // Not user-modifiable setBind(Input::CTRL, InputBind::KEY, SDL_SCANCODE_LCTRL, NULL); setBind(Input::CTRL, InputBind::KEY, SDL_SCANCODE_RCTRL, NULL); @@ -511,6 +506,9 @@ void SDLInputState::handle() { SDL_JoystickID joy_id = SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(gamepad)); if (joy_id == event.jbutton.which) { + mouse.x = SDL_GameControllerGetAxis(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) + settings->view_w_half; + mouse.y = SDL_GameControllerGetAxis(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) + settings->view_h_half; + for (int key=0; key