summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-10-20 00:40:22 -0400
committera1xd <[email protected]>2020-10-20 00:40:22 -0400
commit57be3fadb777f185454361270c1a8076417ed6a5 (patch)
tree4ee498e409350da01c936307458407b7bc51edd3
parentMerge pull request #37 from JacobPalecki/GUI (diff)
downloadrawaccel-57be3fadb777f185454361270c1a8076417ed6a5.tar.xz
rawaccel-57be3fadb777f185454361270c1a8076417ed6a5.zip
add speed cap
-rw-r--r--common/rawaccel-settings.h1
-rw-r--r--common/rawaccel.hpp28
-rw-r--r--grapher/Models/AccelGUI.cs3
-rw-r--r--wrapper/wrapper.cpp3
4 files changed, 28 insertions, 7 deletions
diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h
index aeb89e8..02f0a8a 100644
--- a/common/rawaccel-settings.h
+++ b/common/rawaccel-settings.h
@@ -18,6 +18,7 @@ namespace rawaccel {
bool combine_mags = true;
vec2<accel_mode> modes = { accel_mode::noaccel, accel_mode::noaccel };
vec2<accel_args> argsv;
+ double speed_cap = 0;
vec2d sens = { 1, 1 };
milliseconds time_min = DEFAULT_TIME_MIN;
};
diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp
index ecd3850..3a49aa6 100644
--- a/common/rawaccel.hpp
+++ b/common/rawaccel.hpp
@@ -200,11 +200,25 @@ namespace rawaccel {
accel(args, mode, lut), gain_cap(args.gain_cap, accel), clamp(args.scale_cap)
{}
- inline double apply(double speed) const {
+ inline double apply(double speed, double output_speed_cap) const {
+ double scale;
+
if (gain_cap.should_apply(speed)) {
- return clamp(gain_cap.apply(speed));
+ scale = gain_cap.apply(speed);
+ }
+ else {
+ scale = accel.apply(speed);
+ }
+
+ scale = clamp(scale);
+
+ double output_speed = scale * speed;
+
+ if (output_speed_cap > 0 && output_speed > output_speed_cap) {
+ scale = output_speed_cap / speed;
}
- else return clamp(accel.apply(speed));
+
+ return scale;
}
accelerator() = default;
@@ -216,6 +230,7 @@ namespace rawaccel {
bool apply_accel = false;
bool combine_magnitudes = true;
rotator rotate;
+ double output_speed_cap = 0;
vec2<accelerator> accels;
vec2d sensitivity = { 1, 1 };
@@ -236,6 +251,7 @@ namespace rawaccel {
return;
}
+ output_speed_cap = maxsd(args.speed_cap, 0);
accels.x = accelerator(args.argsv.x, args.modes.x, luts.x);
accels.y = accelerator(args.argsv.y, args.modes.y, luts.y);
apply_accel = true;
@@ -259,13 +275,13 @@ namespace rawaccel {
if (combine_magnitudes) {
double mag = sqrtsd(movement.x * movement.x + movement.y * movement.y);
double speed = mag / time;
- double scale = accels.x.apply(speed);
+ double scale = accels.x.apply(speed, output_speed_cap);
movement.x *= scale;
movement.y *= scale;
}
else {
- movement.x *= accels.x.apply(fabs(movement.x) / time);
- movement.y *= accels.y.apply(fabs(movement.y) / time);
+ movement.x *= accels.x.apply(fabs(movement.x) / time, output_speed_cap);
+ movement.y *= accels.y.apply(fabs(movement.y) / time, output_speed_cap);
}
}
}
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs
index dd1e37d..902b135 100644
--- a/grapher/Models/AccelGUI.cs
+++ b/grapher/Models/AccelGUI.cs
@@ -120,7 +120,8 @@ namespace grapher
combineMagnitudes = ApplyOptions.IsWhole,
modes = ApplyOptions.GetModes(),
args = ApplyOptions.GetArgs(),
- minimumTime = driverSettings.minimumTime
+ minimumTime = driverSettings.minimumTime,
+ speedCap = driverSettings.speedCap
};
WriteButtonDelay();
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp
index a921801..1bfb251 100644
--- a/wrapper/wrapper.cpp
+++ b/wrapper/wrapper.cpp
@@ -63,6 +63,9 @@ public ref struct DriverSettings
[JsonProperty("Accel parameters")]
Vec2<AccelArgs> args;
+ [JsonProperty("Output Speed Cap", Required = Required::Default)]
+ double speedCap;
+
[JsonProperty("Sensitivity multipliers")]
Vec2<double> sensitivity;