Make the initialSpeed, acceleration, deceleratedSpeed, baseSpeed, and acceleratedSpeed kinetic properties uint8_t and multiply them by intMultiplier to provide a fixed set of steps to choose from.

This commit is contained in:
László Monda
2017-11-28 03:23:09 +01:00
parent 729e0be0ad
commit 2ac9ca5d67
2 changed files with 30 additions and 21 deletions

View File

@@ -29,11 +29,12 @@ static mouse_kinetic_state_t mouseMoveState = {
.downState = SerializedMouseAction_MoveDown, .downState = SerializedMouseAction_MoveDown,
.leftState = SerializedMouseAction_MoveLeft, .leftState = SerializedMouseAction_MoveLeft,
.rightState = SerializedMouseAction_MoveRight, .rightState = SerializedMouseAction_MoveRight,
.initialSpeed = 100, .intMultiplier = 31.25,
.acceleration = 300, .initialSpeed = 3,
.deceleratedSpeed = 250, .acceleration = 10,
.baseSpeed = 500, .deceleratedSpeed = 8,
.acceleratedSpeed = 1000, .baseSpeed = 16,
.acceleratedSpeed = 32,
}; };
static mouse_kinetic_state_t mouseScrollState = { static mouse_kinetic_state_t mouseScrollState = {
@@ -41,17 +42,24 @@ static mouse_kinetic_state_t mouseScrollState = {
.downState = SerializedMouseAction_ScrollUp, .downState = SerializedMouseAction_ScrollUp,
.leftState = SerializedMouseAction_ScrollLeft, .leftState = SerializedMouseAction_ScrollLeft,
.rightState = SerializedMouseAction_ScrollRight, .rightState = SerializedMouseAction_ScrollRight,
.initialSpeed = 6, .intMultiplier = 0.75,
.acceleration = 6, .initialSpeed = 8,
.deceleratedSpeed = 6, .acceleration = 8,
.baseSpeed = 12, .deceleratedSpeed = 8,
.acceleratedSpeed = 24, .baseSpeed = 16,
.acceleratedSpeed = 32,
}; };
void processMouseKineticState(mouse_kinetic_state_t *kineticState) void processMouseKineticState(mouse_kinetic_state_t *kineticState)
{ {
float initialSpeed = kineticState->intMultiplier * kineticState->initialSpeed;
float acceleration = kineticState->intMultiplier * kineticState->acceleration;
float deceleratedSpeed = kineticState->intMultiplier * kineticState->deceleratedSpeed;
float baseSpeed = kineticState->intMultiplier * kineticState->baseSpeed;
float acceleratedSpeed = kineticState->intMultiplier * kineticState->acceleratedSpeed;
if (!kineticState->wasMoveAction) { if (!kineticState->wasMoveAction) {
kineticState->currentSpeed = kineticState->initialSpeed; kineticState->currentSpeed = initialSpeed;
} }
bool isMoveAction = activeMouseStates[kineticState->upState] || bool isMoveAction = activeMouseStates[kineticState->upState] ||
@@ -61,13 +69,13 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
mouse_speed_t mouseSpeed = MouseSpeed_Normal; mouse_speed_t mouseSpeed = MouseSpeed_Normal;
if (activeMouseStates[SerializedMouseAction_Accelerate]) { if (activeMouseStates[SerializedMouseAction_Accelerate]) {
kineticState->targetSpeed = kineticState->acceleratedSpeed; kineticState->targetSpeed = acceleratedSpeed;
mouseSpeed = MouseSpeed_Accelerated; mouseSpeed = MouseSpeed_Accelerated;
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) { } else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
kineticState->targetSpeed = kineticState->deceleratedSpeed; kineticState->targetSpeed = deceleratedSpeed;
mouseSpeed = MouseSpeed_Decelerated; mouseSpeed = MouseSpeed_Decelerated;
} else if (isMoveAction) { } else if (isMoveAction) {
kineticState->targetSpeed = kineticState->baseSpeed; kineticState->targetSpeed = baseSpeed;
} }
if (mouseSpeed == MouseSpeed_Accelerated || (kineticState->wasMoveAction && isMoveAction && (kineticState->prevMouseSpeed != mouseSpeed))) { if (mouseSpeed == MouseSpeed_Accelerated || (kineticState->wasMoveAction && isMoveAction && (kineticState->prevMouseSpeed != mouseSpeed))) {
@@ -76,12 +84,12 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
if (isMoveAction) { if (isMoveAction) {
if (kineticState->currentSpeed < kineticState->targetSpeed) { if (kineticState->currentSpeed < kineticState->targetSpeed) {
kineticState->currentSpeed += kineticState->acceleration * elapsedTime / 1000; kineticState->currentSpeed += acceleration * elapsedTime / 1000;
if (kineticState->currentSpeed > kineticState->targetSpeed) { if (kineticState->currentSpeed > kineticState->targetSpeed) {
kineticState->currentSpeed = kineticState->targetSpeed; kineticState->currentSpeed = kineticState->targetSpeed;
} }
} else { } else {
kineticState->currentSpeed -= kineticState->acceleration * elapsedTime / 1000; kineticState->currentSpeed -= acceleration * elapsedTime / 1000;
if (kineticState->currentSpeed < kineticState->targetSpeed) { if (kineticState->currentSpeed < kineticState->targetSpeed) {
kineticState->currentSpeed = kineticState->targetSpeed; kineticState->currentSpeed = kineticState->targetSpeed;
} }

View File

@@ -49,14 +49,15 @@
serialized_mouse_action_t leftState; serialized_mouse_action_t leftState;
serialized_mouse_action_t rightState; serialized_mouse_action_t rightState;
mouse_speed_t prevMouseSpeed; mouse_speed_t prevMouseSpeed;
float intMultiplier;
float currentSpeed; float currentSpeed;
float distance; float distance;
float targetSpeed; float targetSpeed;
float initialSpeed; uint8_t initialSpeed;
float acceleration; uint8_t acceleration;
float deceleratedSpeed; uint8_t deceleratedSpeed;
float baseSpeed; uint8_t baseSpeed;
float acceleratedSpeed; uint8_t acceleratedSpeed;
float xSum; float xSum;
float ySum; float ySum;
int16_t xOut; int16_t xOut;