forked from suyu/suyu
Merge pull request #5929 from german77/mousePanning
Improve mouse panning
This commit is contained in:
commit
723e038dba
1 changed files with 21 additions and 5 deletions
|
@ -33,11 +33,16 @@ void Mouse::UpdateThread() {
|
||||||
info.motion.UpdateOrientation(update_time * 1000);
|
info.motion.UpdateOrientation(update_time * 1000);
|
||||||
info.tilt_speed = 0;
|
info.tilt_speed = 0;
|
||||||
info.data.motion = info.motion.GetMotion();
|
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) {
|
if (configuring) {
|
||||||
UpdateYuzuSettings();
|
UpdateYuzuSettings();
|
||||||
}
|
}
|
||||||
if (mouse_panning_timout++ > 8) {
|
if (mouse_panning_timout++ > 20) {
|
||||||
StopPanning();
|
StopPanning();
|
||||||
}
|
}
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(update_time));
|
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) {
|
void Mouse::MouseMove(int x, int y, int center_x, int center_y) {
|
||||||
for (MouseInfo& info : mouse_info) {
|
for (MouseInfo& info : mouse_info) {
|
||||||
if (Settings::values.mouse_panning) {
|
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;
|
mouse_panning_timout = 0;
|
||||||
|
|
||||||
if (mouse_change.y == 0 && mouse_change.x == 0) {
|
if (mouse_change.y == 0 && mouse_change.x == 0) {
|
||||||
continue;
|
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_direction = info.last_mouse_change;
|
||||||
info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity;
|
info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity;
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in a new issue