private double CalculateSpeed(double speed, double acceleration, double deceleration, double maxSpeed, GestureKeys positiveKey, GestureKeys negativeKey) { if (IsAcceleratingInPositiveDirection(speed, positiveKey, negativeKey)) { speed += acceleration; } else if (IsAcceleratingInNegativeDirection(speed, positiveKey, negativeKey)) { speed -= acceleration; } else if (speed < 0) { speed += CalculateDeceleration(speed, deceleration); } else if (speed > 0) { speed -= CalculateDeceleration(speed, deceleration); } speed = Math.Min(maxSpeed, speed); speed = Math.Max(-maxSpeed, speed); return(speed); }
private bool IsAcceleratingInNegativeDirection(double speed, GestureKeys positiveKey, GestureKeys negativeKey) { return(_isKeyDown[(int)negativeKey] && !_isKeyDown[(int)positiveKey] && speed <= 0); }