summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2021-02-16 15:52:35 +0100
committerGitHub <noreply@github.com>2021-02-16 15:52:35 +0100
commit723e038dba6633c382e7617e8bbf28cc5ee9282f (patch)
treeba05ab81c3934f2d2e9617dca6f9c5f059a2ed44
parentMerge pull request #4298 from FearlessTobi/remove-cache-setting (diff)
parentImprove mouse panning (diff)
downloadyuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar.gz
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar.bz2
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar.lz
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar.xz
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.tar.zst
yuzu-723e038dba6633c382e7617e8bbf28cc5ee9282f.zip
-rw-r--r--src/input_common/mouse/mouse_input.cpp26
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() {
info.motion.UpdateOrientation(update_time * 1000);
info.tilt_speed = 0;
info.data.motion = info.motion.GetMotion();
+ if (Settings::values.mouse_panning) {
+ info.last_mouse_change *= 0.96f;
+ info.data.axis = {static_cast<int>(16 * info.last_mouse_change.x),
+ static_cast<int>(16 * -info.last_mouse_change.y)};
+ }
}
if (configuring) {
UpdateYuzuSettings();
}
- if (mouse_panning_timout++ > 8) {
+ if (mouse_panning_timout++ > 20) {
StopPanning();
}
std::this_thread::sleep_for(std::chrono::milliseconds(update_time));
@@ -82,16 +87,27 @@ void Mouse::StopPanning() {
void Mouse::MouseMove(int x, int y, int center_x, int center_y) {
for (MouseInfo& info : mouse_info) {
if (Settings::values.mouse_panning) {
- const auto mouse_change = Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y);
+ auto mouse_change =
+ (Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y)).Cast<float>();
mouse_panning_timout = 0;
if (mouse_change.y == 0 && mouse_change.x == 0) {
continue;
}
+ const auto mouse_change_length = mouse_change.Length();
+ if (mouse_change_length < 3.0f) {
+ mouse_change /= mouse_change_length / 3.0f;
+ }
+
+ info.last_mouse_change = (info.last_mouse_change * 0.91f) + (mouse_change * 0.09f);
+
+ const auto last_mouse_change_length = info.last_mouse_change.Length();
+ if (last_mouse_change_length > 8.0f) {
+ info.last_mouse_change /= last_mouse_change_length / 8.0f;
+ } else if (last_mouse_change_length < 1.0f) {
+ info.last_mouse_change = mouse_change / mouse_change.Length();
+ }
- info.last_mouse_change = (info.last_mouse_change * 0.8f) + (mouse_change * 0.2f);
- info.data.axis = {static_cast<int>(16 * info.last_mouse_change.x),
- static_cast<int>(16 * -info.last_mouse_change.y)};
info.tilt_direction = info.last_mouse_change;
info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity;
continue;