From b68e8a736eb7e964968757f4ff8461b81c483473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 23 Nov 2017 01:54:54 +0100 Subject: [PATCH] Make processMouseAction() handle acceleration and deceleration, even though I can't yet trigger these actions for some reason. --- right/src/usb_report_updater.c | 47 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 6480867..9b3c700 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -18,19 +18,17 @@ uint32_t UsbReportUpdateTime = 0; static uint32_t elapsedTime; -static float mouseMoveSpeed = 0.4; static float mouseMoveInitialSpeed = 1; -static float mouseMoveAcceleration = 4; -static float mouseMoveMaxSpeed = 5; +static float mouseMoveBaseAcceleration = 3; +static float mouseMoveBaseSpeed = 5; +static float mouseMoveAcceleratedSpeed = 10; +static float mouseMoveDeceleratedSpeed = 2.5; static float mouseScrollSpeed = 0.1; -static float mouseScrollMaxSpeed = 0.1; - -static float mouseAccelerateFactor = 2; -static float mouseDecelerateFactor = 0.5; static bool isMouseMoving; static bool wasMouseMoving; + void processMouseAction(key_action_t *action) { static float mouseMoveCurrentSpeed; @@ -39,23 +37,28 @@ void processMouseAction(key_action_t *action) mouseMoveCurrentSpeed = mouseMoveInitialSpeed; } - if (action->mouse.speedActions) { - if (action->mouse.speedActions & MouseSpeed_Accelerate) { - if (mouseMoveSpeed < mouseMoveMaxSpeed) { - mouseMoveSpeed++; - } - } else if (action->mouse.speedActions & MouseSpeed_Decelerate) { - if (mouseMoveSpeed > 1) { - mouseMoveSpeed--; - } - } - } - if (action->mouse.moveActions) { isMouseMoving = true; - mouseMoveCurrentSpeed += mouseMoveAcceleration * elapsedTime / 1000; - if (mouseMoveCurrentSpeed > mouseMoveMaxSpeed) { - mouseMoveCurrentSpeed = mouseMoveMaxSpeed; + + float targetSpeed; + if (action->mouse.speedActions & MouseSpeed_Accelerate) { + targetSpeed = mouseMoveAcceleratedSpeed; + } else if (action->mouse.speedActions & MouseSpeed_Decelerate) { + targetSpeed = mouseMoveDeceleratedSpeed; + } else { + targetSpeed = mouseMoveBaseSpeed; + } + + if (mouseMoveCurrentSpeed < targetSpeed) { + mouseMoveCurrentSpeed += mouseMoveBaseAcceleration * elapsedTime / 1000; + if (mouseMoveCurrentSpeed > targetSpeed) { + mouseMoveCurrentSpeed = targetSpeed; + } + } else { + mouseMoveCurrentSpeed -= mouseMoveBaseAcceleration * elapsedTime / 1000; + if (mouseMoveCurrentSpeed < targetSpeed) { + mouseMoveCurrentSpeed = targetSpeed; + } } uint16_t distance = mouseMoveCurrentSpeed * elapsedTime / 10;