use crate::modifier::deadzone::{apply_deadzone, DeadzoneType};
use crate::modifier::sensitivity::{apply_sensitivity, SensitivityCurve};
impl Default for ModifierPipeline {
fn default() -> Self {
Self::new()
}
}
pub struct ModifierPipeline {
deadzone: f32,
sensitivity: f32,
curve_exponent: f32,
}
impl ModifierPipeline {
pub fn new() -> Self {
Self {
deadzone: 0.1,
sensitivity: 1.0,
curve_exponent: 1.0,
}
}
pub fn process(&self, x: f32, y: f32) -> (f32, f32) {
let (dx, dy) = apply_deadzone(x, y, self.deadzone, DeadzoneType::Radial);
let sx = apply_sensitivity(
dx,
self.sensitivity,
SensitivityCurve::Exponential(self.curve_exponent),
);
let sy = apply_sensitivity(
dy,
self.sensitivity,
SensitivityCurve::Exponential(self.curve_exponent),
);
(sx, sy)
}
}