11 #ifndef hifi_LeapMotionPlugin_h
12 #define hifi_LeapMotionPlugin_h
14 #include <controllers/InputDevice.h>
15 #include <plugins/InputPlugin.h>
20 class LeapMotionPlugin :
public InputPlugin {
25 virtual void pluginFocusOutEvent()
override { _inputDevice->focusOutEvent(); }
26 virtual void pluginUpdate(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override;
28 bool isHandController()
const override {
return true; }
31 virtual const QString getName()
const override {
return NAME; }
32 const QString getID()
const override {
return LEAPMOTION_ID_STRING; }
33 bool isRunning()
const override {
return _active && _enabled; }
34 virtual void init()
override;
36 virtual bool activate()
override;
37 virtual void deactivate()
override;
39 virtual void saveSettings()
const override;
40 virtual void loadSettings()
override;
43 static const char* NAME;
44 static const char* LEAPMOTION_ID_STRING;
45 const float DEFAULT_DESKTOP_HEIGHT_OFFSET = 0.2f;
46 QString _sensorLocation;
47 float _desktopHeightOffset { DEFAULT_DESKTOP_HEIGHT_OFFSET };
49 struct LeapMotionJoint {
51 glm::quat orientation;
54 std::vector<LeapMotionJoint> _joints;
55 std::vector<LeapMotionJoint> _prevJoints;
57 class InputDevice :
public controller::InputDevice {
59 friend class LeapMotionPlugin;
61 InputDevice() : controller::InputDevice(
"LeapMotion") {}
64 virtual controller::Input::NamedVector getAvailableInputs()
const override;
65 virtual QString getDefaultMappingConfig()
const override;
66 virtual void update(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override {};
67 virtual void focusOutEvent()
override {};
69 void update(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData,
70 const std::vector<LeapMotionPlugin::LeapMotionJoint>& joints,
71 const std::vector<LeapMotionPlugin::LeapMotionJoint>& prevJoints);
75 void setDektopHeightOffset(
float desktopHeightOffset) { _desktopHeightOffset = desktopHeightOffset; };
76 void setIsLeapOnHMD(
bool isLeapOnHMD) { _isLeapOnHMD = isLeapOnHMD; };
79 float _desktopHeightOffset { 0.0f };
80 bool _isLeapOnHMD {
false };
83 std::shared_ptr<InputDevice> _inputDevice { std::make_shared<InputDevice>() };
86 void applySensorLocation();
87 void applyDesktopHeightOffset();
89 void processFrame(
const Leap::Frame& frame);
91 Leap::Controller _controller;
93 bool _hasLeapMotionBeenConnected {
false };
94 int64_t _lastFrameID { -1 };