summaryrefslogtreecommitdiff
path: root/common/accel-power.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/accel-power.hpp')
-rw-r--r--common/accel-power.hpp33
1 files changed, 9 insertions, 24 deletions
diff --git a/common/accel-power.hpp b/common/accel-power.hpp
index 0d5e265..1abfdd1 100644
--- a/common/accel-power.hpp
+++ b/common/accel-power.hpp
@@ -7,35 +7,20 @@
namespace rawaccel {
/// <summary> Struct to hold power (non-additive) acceleration implementation. </summary>
- struct accel_power : accel_base {
+ struct power_impl {
+ double scale;
double exponent;
- double offset;
- accel_power(const accel_args& args) {
- verify(args);
+ power_impl(const accel_args& args) :
+ scale(args.power_scale), exponent(args.power_exp)
+ {}
- weight = args.weight;
- speed_coeff = args.power_scale;
- exponent = args.exponent;
- offset = args.offset;
- }
-
- inline double accelerate(double speed) const {
+ inline double operator()(double speed) const {
// f(x) = (mx)^k
- return (offset > 0 && speed < 1) ? 1 : pow(speed * speed_coeff, exponent);
- }
-
- inline vec2d scale(double accel_val) const {
- return {
- weight.x * accel_val,
- weight.y * accel_val
- };
- }
-
- void verify(const accel_args& args) const {
- if (args.power_scale <= 0) bad_arg("scale must be positive");
- if (args.exponent <= 0) bad_arg("exponent must be greater than 0");
+ return pow(speed * scale, exponent);
}
};
+ using accel_power = nonadditive_accel<power_impl>;
+
}