diff options
| author | Jacob Palecki <[email protected]> | 2020-07-31 12:20:11 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-07-31 12:20:11 -0700 |
| commit | 6537db04f7e717eda2f21e007cdba7e13b7f559e (patch) | |
| tree | efb65bf3f305f376ea75f4f687b08bf8998c020f /common/accel-power.hpp | |
| parent | Add class for storing settings from file (diff) | |
| parent | Merge pull request #6 from a1xd/st-refactor (diff) | |
| download | rawaccel-6537db04f7e717eda2f21e007cdba7e13b7f559e.tar.xz rawaccel-6537db04f7e717eda2f21e007cdba7e13b7f559e.zip | |
Show no settings for off, remove unused class for PR
Diffstat (limited to 'common/accel-power.hpp')
| -rw-r--r-- | common/accel-power.hpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/common/accel-power.hpp b/common/accel-power.hpp new file mode 100644 index 0000000..7f4c220 --- /dev/null +++ b/common/accel-power.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include <math.h> + +#include "accel-base.hpp" + +namespace rawaccel { + + /// <summary> Struct to hold power (non-additive) acceleration implementation. </summary> + struct accel_power : accel_base { + double exponent; + double offset; + + accel_power(const accel_args& args) { + verify(args); + + weight = args.weight; + speed_coeff = args.power_scale; + exponent = args.exponent; + offset = args.offset; + } + + inline double accelerate(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) error("scale must be positive"); + if (args.exponent <= 0) error("exponent must be greater than 0"); + } + }; + +} |