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

View File

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