blob: 4b8093d8c571a5e6b05e2e2fc4d83315e6934d7e (
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
|
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include "common/common_types.h"
#include "common/quaternion.h"
#include "common/vector_math.h"
namespace InputCommon {
class MotionInput {
public:
MotionInput(f32 new_kp, f32 new_ki, f32 new_kd);
void SetAcceleration(Common::Vec3f acceleration);
void SetGyroscope(Common::Vec3f acceleration);
void SetQuaternion(Common::Quaternion<f32> quaternion);
void SetGyroDrift(Common::Vec3f drift);
void SetGyroThreshold(f32 threshold);
void EnableReset(bool reset);
void ResetRotations();
void UpdateRotation(u64 elapsed_time);
void UpdateOrientation(u64 elapsed_time);
std::array<Common::Vec3f, 3> GetOrientation();
Common::Vec3f GetAcceleration();
Common::Vec3f GetGyroscope();
Common::Vec3f GetRotations();
Common::Quaternion<f32> GetQuaternion();
bool IsMoving(f32 sensitivity);
bool IsCalibrated(f32 sensitivity);
// PID constants
const f32 kp;
const f32 ki;
const f32 kd;
private:
void resetOrientation();
// PID errors
Common::Vec3f real_error;
Common::Vec3f integral_error;
Common::Vec3f derivative_error;
Common::Quaternion<f32> quat;
Common::Vec3f rotations;
Common::Vec3f accel;
Common::Vec3f gyro;
Common::Vec3f gyro_drift;
f32 gyro_threshold;
f32 reset_counter;
bool reset_enabled;
};
} // namespace InputCommon
|