diff --git a/rpcs3/Emu/Io/pad_types.h b/rpcs3/Emu/Io/pad_types.h index 685d5ba59f..238e03ff1a 100644 --- a/rpcs3/Emu/Io/pad_types.h +++ b/rpcs3/Emu/Io/pad_types.h @@ -441,6 +441,9 @@ struct AnalogStick std::map m_pressed_keys_max; // only used in keyboard_pad_handler std::map m_pressed_combos_min; // only used in keyboard_pad_handler std::map m_pressed_combos_max; // only used in keyboard_pad_handler + u8 m_stick_min = 0; // only used in keyboard_pad_handler + u8 m_stick_max = 128; // only used in keyboard_pad_handler + u8 m_stick_val = 128; // only used in keyboard_pad_handler AnalogStick() {} AnalogStick(u32 offset, std::vector> key_combos_min, std::vector> key_combos_max) diff --git a/rpcs3/Input/keyboard_pad_handler.cpp b/rpcs3/Input/keyboard_pad_handler.cpp index 1a07b30b69..b95e3dc5c1 100644 --- a/rpcs3/Input/keyboard_pad_handler.cpp +++ b/rpcs3/Input/keyboard_pad_handler.cpp @@ -262,8 +262,8 @@ void keyboard_pad_handler::Key(const u32 code, bool pressed, u16 value) const u16 actual_max_value = is_max_pressed ? MultipliedInput(255, stick_multiplier) : 255; const u16 normalized_max_value = std::ceil(actual_max_value / 2.0); - m_stick_min[i] = is_min_pressed ? std::min(normalized_min_value, 128) : 0; - m_stick_max[i] = is_max_pressed ? std::min(128 + normalized_max_value, 255) : 128; + stick.m_stick_min = is_min_pressed ? std::min(normalized_min_value, 128) : 0; + stick.m_stick_max = is_max_pressed ? std::min(128 + normalized_max_value, 255) : 128; } else { @@ -345,25 +345,25 @@ void keyboard_pad_handler::Key(const u32 code, bool pressed, u16 value) { const std::pair stick_value = register_new_stick_value(true); - m_stick_max[i] = stick_value.first ? std::min(128 + stick_value.second, 255) : 128; + stick.m_stick_max = stick_value.first ? std::min(128 + stick_value.second, 255) : 128; } if (is_min) { const std::pair stick_value = register_new_stick_value(false); - m_stick_min[i] = stick_value.first ? std::min(stick_value.second, 128) : 0; + stick.m_stick_min = stick_value.first ? std::min(stick_value.second, 128) : 0; } } - m_stick_val[i] = m_stick_max[i] - m_stick_min[i]; + stick.m_stick_val = stick.m_stick_max - stick.m_stick_min; const f32 stick_lerp_factor = is_left_stick ? m_l_stick_lerp_factor : m_r_stick_lerp_factor; // to get the fastest response time possible we don't wanna use any lerp with factor 1 if (stick_lerp_factor >= 1.0f) { - stick.m_value = m_stick_val[i]; + stick.m_value = stick.m_stick_val; } } } @@ -380,12 +380,16 @@ void keyboard_pad_handler::release_all_keys() button.m_actual_value = 0; } - for (usz i = 0; i < pad.m_sticks.size(); i++) + for (AnalogStick& stick : pad.m_sticks) { - m_stick_min[i] = 0; - m_stick_max[i] = 128; - m_stick_val[i] = 128; - pad.m_sticks[i].m_value = 128; + stick.m_value = 128; + stick.m_stick_min = 0; + stick.m_stick_max = 128; + stick.m_stick_val = 128; + stick.m_pressed_keys_min.clear(); + stick.m_pressed_keys_max.clear(); + stick.m_pressed_combos_min.clear(); + stick.m_pressed_combos_max.clear(); } } @@ -1261,11 +1265,13 @@ void keyboard_pad_handler::process() // we already applied the following values on keypress if we used factor 1 if (stick_lerp_factor < 1.0f) { - const f32 v0 = static_cast(pad.m_sticks[j].m_value); - const f32 v1 = static_cast(m_stick_val[j]); + AnalogStick& stick = pad.m_sticks[j]; + + const f32 v0 = static_cast(stick.m_value); + const f32 v1 = static_cast(stick.m_stick_val); const f32 res = get_lerped(v0, v1, stick_lerp_factor); - pad.m_sticks[j].m_value = static_cast(res); + stick.m_value = static_cast(res); } } } diff --git a/rpcs3/Input/keyboard_pad_handler.h b/rpcs3/Input/keyboard_pad_handler.h index df9b7f5756..904085abfc 100644 --- a/rpcs3/Input/keyboard_pad_handler.h +++ b/rpcs3/Input/keyboard_pad_handler.h @@ -129,11 +129,6 @@ private: u32 m_l_stick_multiplier = 100; u32 m_r_stick_multiplier = 100; - static constexpr usz max_sticks = 4; - std::array m_stick_min{ 0, 0, 0, 0 }; - std::array m_stick_max{ 128, 128, 128, 128 }; - std::array m_stick_val{ 128, 128, 128, 128 }; - // Mouse Movements steady_clock::time_point m_last_mouse_move_left; steady_clock::time_point m_last_mouse_move_right;