12 #ifndef hifi_SixenseManager_h
13 #define hifi_SixenseManager_h
15 #include <SimpleMovingAverage.h>
17 #include <controllers/InputDevice.h>
18 #include <controllers/StandardControls.h>
20 #include <plugins/InputPlugin.h>
22 struct _sixenseControllerData;
23 using SixenseControllerData = _sixenseControllerData;
26 class SixenseManager :
public InputPlugin {
30 virtual bool isSupported()
const override;
31 virtual const QString getName()
const override {
return NAME; }
32 virtual const QString getID()
const override {
return SIXENSE_ID_STRING; }
38 virtual void init()
override;
40 virtual bool activate()
override;
41 virtual void deactivate()
override;
43 virtual void pluginFocusOutEvent()
override { _inputDevice->focusOutEvent(); }
44 virtual void pluginUpdate(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override;
46 virtual void saveSettings()
const override;
47 virtual void loadSettings()
override;
50 void setSixenseFilter(
bool filter);
53 static const int MAX_NUM_AVERAGING_SAMPLES = 50;
54 static const int CALIBRATION_STATE_IDLE = 0;
55 static const int CALIBRATION_STATE_IN_PROGRESS = 1;
56 static const int CALIBRATION_STATE_COMPLETE = 2;
57 static const glm::vec3 DEFAULT_AVATAR_POSITION;
58 static const float CONTROLLER_THRESHOLD;
60 class InputDevice :
public controller::InputDevice {
62 InputDevice() : controller::InputDevice(
"Hydra") {}
63 void setDebugDrawRaw(
bool flag);
64 void setDebugDrawCalibrated(
bool flag);
67 virtual controller::Input::NamedVector getAvailableInputs()
const override;
68 virtual QString getDefaultMappingConfig()
const override;
69 virtual void update(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override;
70 virtual void focusOutEvent()
override;
72 void handleButtonEvent(
unsigned int buttons,
bool left);
73 void handlePoseEvent(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData,
const glm::vec3& position,
const glm::quat& rotation,
bool left);
74 void updateCalibration(SixenseControllerData* controllers);
76 friend class SixenseManager;
78 int _calibrationState { CALIBRATION_STATE_IDLE };
80 glm::vec3 _avatarPosition { DEFAULT_AVATAR_POSITION };
81 glm::quat _avatarRotation;
84 bool _requestReset {
false };
85 bool _debugDrawRaw {
false };
86 bool _debugDrawCalibrated {
false };
89 glm::vec3 _averageLeft;
90 glm::vec3 _averageRight;
92 glm::vec3 _reachRight;
95 std::shared_ptr<InputDevice> _inputDevice { std::make_shared<InputDevice>() };
97 static const char* NAME;
98 static const char* SIXENSE_ID_STRING;
100 static bool _isEnabled;
101 static bool _sixenseLoaded;