summaryrefslogtreecommitdiff
path: root/wrapper/wrapper.cpp
blob: 6dabd7e27769b533ac143b017a228ea895138a96 (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#pragma once

#include "wrapper.hpp"

void replace(mouse_modifier* mod_ptr, const modifier_args& args) {
	*mod_ptr = mouse_modifier(args);
}

Tuple<double, double>^ ManagedAccel::Accelerate(int x, int y, double time)
{
	vec2d input_vec2d = {
		(double)x, 
		(double)y
	};
	vec2d output = modifier_instance->modify_with_accel(input_vec2d, time);

	return gcnew Tuple<double, double>(output.x, output.y);
}

void ManagedAccel::UpdateAccel(
	int mode,
	double rotation,
	double sensitivityX,
	double sensitivityY,
	double weightX,
	double weightY,
	double capX,
	double capY,
	double offset,
	double accel,
	double lim_exp,
	double midpoint,
	double gain_cap)
{
	modifier_args args{};
	args.acc_fn_args.accel_mode = mode;
	args.degrees = rotation;
	args.sens.x = sensitivityX;
	args.sens.y = sensitivityY;
	args.acc_fn_args.acc_args.weight.x = weightX;
	args.acc_fn_args.acc_args.weight.y = weightY;
	args.acc_fn_args.cap.x = capX;
	args.acc_fn_args.cap.y = capY;
	args.acc_fn_args.acc_args.offset = offset;
	args.acc_fn_args.acc_args.accel = accel;
	args.acc_fn_args.acc_args.limit = lim_exp;
	args.acc_fn_args.acc_args.exponent = lim_exp;
	args.acc_fn_args.acc_args.midpoint = midpoint;
	args.acc_fn_args.acc_args.gain_cap = gain_cap;

	replace(modifier_instance, args);
	WriteToDriver();
}

double ManagedAccel::SensitivityX::get() { return modifier_instance->sensitivity.x; }
double ManagedAccel::SensitivityY::get() { return modifier_instance->sensitivity.y; }
double ManagedAccel::Rotation::get() { return atan(modifier_instance->rotate.rot_vec.y / modifier_instance->rotate.rot_vec.x) * 180 / M_PI; }
int ManagedAccel::Type::get() { return modifier_instance->accel_fn.accel.tag; }
double ManagedAccel::Acceleration::get() { return modifier_instance->accel_fn.impl_args.accel; }
double ManagedAccel::CapX::get() { return modifier_instance->accel_fn.clamp.x.hi; }
double ManagedAccel::CapY::get() { return modifier_instance->accel_fn.clamp.y.hi; }
double ManagedAccel::GainCap::get() { return modifier_instance->accel_fn.gain_cap.threshold; }
bool ManagedAccel::GainCapEnabled::get() { return modifier_instance->accel_fn.gain_cap.cap_gain_enabled; }
double ManagedAccel::WeightX::get() { return modifier_instance->accel_fn.impl_args.weight.x; }
double ManagedAccel::WeightY::get() { return modifier_instance->accel_fn.impl_args.weight.y; }
double ManagedAccel::Offset::get() { return modifier_instance->accel_fn.speed_offset; }
double ManagedAccel::LimitExp::get() { return modifier_instance->accel_fn.impl_args.limit; }
double ManagedAccel::Midpoint::get() { return modifier_instance->accel_fn.impl_args.midpoint; }
double ManagedAccel::MinimumTime::get() { return modifier_instance->accel_fn.time_min; }
double ManagedAccel::PowerScale::get() { return modifier_instance->accel_fn.impl_args.power_scale; }

void ManagedAccel::WriteToDriver()
{
	wrapper_io::writeToDriver(*modifier_instance);
}

void ManagedAccel::ReadFromDriver()
{
	wrapper_io::readFromDriver(*modifier_instance);
}