diff options
Diffstat (limited to 'src/input_common/mouse/mouse_input.cpp')
| -rw-r--r-- | src/input_common/mouse/mouse_input.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/input_common/mouse/mouse_input.cpp b/src/input_common/mouse/mouse_input.cpp index 67a584d53..b864d26f2 100644 --- a/src/input_common/mouse/mouse_input.cpp +++ b/src/input_common/mouse/mouse_input.cpp | |||
| @@ -33,11 +33,16 @@ void Mouse::UpdateThread() { | |||
| 33 | info.motion.UpdateOrientation(update_time * 1000); | 33 | info.motion.UpdateOrientation(update_time * 1000); |
| 34 | info.tilt_speed = 0; | 34 | info.tilt_speed = 0; |
| 35 | info.data.motion = info.motion.GetMotion(); | 35 | info.data.motion = info.motion.GetMotion(); |
| 36 | if (Settings::values.mouse_panning) { | ||
| 37 | info.last_mouse_change *= 0.96f; | ||
| 38 | info.data.axis = {static_cast<int>(16 * info.last_mouse_change.x), | ||
| 39 | static_cast<int>(16 * -info.last_mouse_change.y)}; | ||
| 40 | } | ||
| 36 | } | 41 | } |
| 37 | if (configuring) { | 42 | if (configuring) { |
| 38 | UpdateYuzuSettings(); | 43 | UpdateYuzuSettings(); |
| 39 | } | 44 | } |
| 40 | if (mouse_panning_timout++ > 8) { | 45 | if (mouse_panning_timout++ > 20) { |
| 41 | StopPanning(); | 46 | StopPanning(); |
| 42 | } | 47 | } |
| 43 | std::this_thread::sleep_for(std::chrono::milliseconds(update_time)); | 48 | std::this_thread::sleep_for(std::chrono::milliseconds(update_time)); |
| @@ -82,16 +87,27 @@ void Mouse::StopPanning() { | |||
| 82 | void Mouse::MouseMove(int x, int y, int center_x, int center_y) { | 87 | void Mouse::MouseMove(int x, int y, int center_x, int center_y) { |
| 83 | for (MouseInfo& info : mouse_info) { | 88 | for (MouseInfo& info : mouse_info) { |
| 84 | if (Settings::values.mouse_panning) { | 89 | if (Settings::values.mouse_panning) { |
| 85 | const auto mouse_change = Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y); | 90 | auto mouse_change = |
| 91 | (Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y)).Cast<float>(); | ||
| 86 | mouse_panning_timout = 0; | 92 | mouse_panning_timout = 0; |
| 87 | 93 | ||
| 88 | if (mouse_change.y == 0 && mouse_change.x == 0) { | 94 | if (mouse_change.y == 0 && mouse_change.x == 0) { |
| 89 | continue; | 95 | continue; |
| 90 | } | 96 | } |
| 97 | const auto mouse_change_length = mouse_change.Length(); | ||
| 98 | if (mouse_change_length < 3.0f) { | ||
| 99 | mouse_change /= mouse_change_length / 3.0f; | ||
| 100 | } | ||
| 101 | |||
| 102 | info.last_mouse_change = (info.last_mouse_change * 0.91f) + (mouse_change * 0.09f); | ||
| 103 | |||
| 104 | const auto last_mouse_change_length = info.last_mouse_change.Length(); | ||
| 105 | if (last_mouse_change_length > 8.0f) { | ||
| 106 | info.last_mouse_change /= last_mouse_change_length / 8.0f; | ||
| 107 | } else if (last_mouse_change_length < 1.0f) { | ||
| 108 | info.last_mouse_change = mouse_change / mouse_change.Length(); | ||
| 109 | } | ||
| 91 | 110 | ||
| 92 | info.last_mouse_change = (info.last_mouse_change * 0.8f) + (mouse_change * 0.2f); | ||
| 93 | info.data.axis = {static_cast<int>(16 * info.last_mouse_change.x), | ||
| 94 | static_cast<int>(16 * -info.last_mouse_change.y)}; | ||
| 95 | info.tilt_direction = info.last_mouse_change; | 111 | info.tilt_direction = info.last_mouse_change; |
| 96 | info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity; | 112 | info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity; |
| 97 | continue; | 113 | continue; |