summaryrefslogtreecommitdiff
path: root/common/accel-linear.hpp
blob: 2bd57b80db6a57e9fc487c785004d1551998a255 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#pragma once

#include "accel-base.hpp"

namespace rawaccel {

	/// <summary> Struct to hold linear acceleration implementation. </summary>
	struct linear_impl { 
		double accel;
		double offset;
		double subtractive_const;
		double divisive_const;
		
		linear_impl(const accel_args& args) : accel(args.accel), offset(args.offset) {
			subtractive_const = 2 * accel * offset;
			divisive_const = accel * offset * offset;
		}

		inline double operator()(double speed) const {
			double base_speed = speed + offset;
			return accel * base_speed - subtractive_const + divisive_const / base_speed;
		}

		inline double legacy_offset(double speed) const {
			return accel * speed;
		}
	};

	using accel_linear = additive_accel<linear_impl>;

}