summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2021-01-11 00:34:56 -0800
committerJacob Palecki <[email protected]>2021-01-11 00:34:56 -0800
commit6196cee980c7b8021b752b684cbe14bf7c41b657 (patch)
tree2d54af5c0d9ae994892c68fb48725d043e09b932 /common
parentImplement direcitonality UI (diff)
downloadrawaccel-6196cee980c7b8021b752b684cbe14bf7c41b657.tar.xz
rawaccel-6196cee980c7b8021b752b684cbe14bf7c41b657.zip
Some fixes
Diffstat (limited to 'common')
-rw-r--r--common/accel-base.hpp4
-rw-r--r--common/rawaccel-settings.h4
-rw-r--r--common/rawaccel.hpp30
3 files changed, 23 insertions, 15 deletions
diff --git a/common/accel-base.hpp b/common/accel-base.hpp
index f98a36d..42b3bb1 100644
--- a/common/accel-base.hpp
+++ b/common/accel-base.hpp
@@ -17,8 +17,8 @@ namespace rawaccel {
double speed_cap = 0;
};
- struct stigma_args {
- vec2d sigmas = { 1, 1 };
+ struct domain_args {
+ vec2d domain_weights = { 1, 1 };
double lp_norm = 2;
};
diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h
index 8dd446f..755fa2c 100644
--- a/common/rawaccel-settings.h
+++ b/common/rawaccel-settings.h
@@ -22,8 +22,8 @@ namespace rawaccel {
vec2<accel_args> argsv;
vec2d sens = { 1, 1 };
vec2d dir_multipliers = {};
- vec2d directional_weights = { 1, 1 };
- stigma_args args_stigma = stigma_args();
+ domain_args domain_args = {};
+ vec2d range_weights = { 1, 1 };
milliseconds time_min = DEFAULT_TIME_MIN;
};
diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp
index d1cafdd..c617bed 100644
--- a/common/rawaccel.hpp
+++ b/common/rawaccel.hpp
@@ -225,17 +225,17 @@ namespace rawaccel {
accelerator() = default;
};
- struct stigma_distance {
+ struct weighted_distance {
double p = 2.0;
double p_inverse = 0.5;
bool lp_norm_infinity = false;
double sigma_x = 1.0;
double sigma_y = 1.0;
- stigma_distance(stigma_args args)
+ weighted_distance(domain_args args)
{
- sigma_x = args.sigmas.x;
- sigma_y = args.sigmas.y;
+ sigma_x = args.domain_weights.x;
+ sigma_y = args.domain_weights.y;
if (args.lp_norm <= 0)
{
lp_norm_infinity = true;
@@ -252,12 +252,20 @@ namespace rawaccel {
double calculate(double x, double y)
{
- double x_scaled = x * sigma_x;
- double y_scaled = y * sigma_y;
+ double abs_x = fabs(x);
+ double abs_y = fabs(y);
+
+ if (lp_norm_infinity)
+ {
+ return abs_x > abs_y ? abs_x : abs_y;
+ }
+
+ double x_scaled = abs_x * sigma_x;
+ double y_scaled = abs_y * sigma_y;
return pow(pow(x_scaled, p) + pow(y_scaled, p), p_inverse);
}
- stigma_distance() = default;
+ weighted_distance() = default;
};
struct direction_weight {
@@ -299,7 +307,7 @@ namespace rawaccel {
bool apply_accel = false;
bool combine_magnitudes = true;
rotator rotate;
- stigma_distance stigma;
+ weighted_distance distance;
direction_weight directional;
vec2<accelerator> accels;
vec2d sensitivity = { 1, 1 };
@@ -328,8 +336,8 @@ namespace rawaccel {
accels.x = accelerator(args.argsv.x, args.modes.x, luts.x);
accels.y = accelerator(args.argsv.y, args.modes.y, luts.y);
- stigma = stigma_distance(args.args_stigma);
- directional = direction_weight(args.directional_weights);
+ distance = weighted_distance(args.domain_args);
+ directional = direction_weight(args.range_weights);
apply_accel = true;
}
@@ -350,7 +358,7 @@ namespace rawaccel {
milliseconds time = time_supp();
if (combine_magnitudes) {
- double mag = stigma.calculate(movement.x, movement.y);
+ double mag = distance.calculate(movement.x, movement.y);
double speed = mag / time;
double scale = accels.x.apply(speed);