11 #ifndef hifi_KinectPlugin_h
12 #define hifi_KinectPlugin_h
15 #ifndef WIN32_LEAN_AND_MEAN
16 #define WIN32_LEAN_AND_MEAN
26 #include <SimpleMovingAverage.h>
29 template<
class Interface>
inline void SafeRelease(Interface *& pInterfaceToRelease) {
30 if (pInterfaceToRelease != NULL) {
31 pInterfaceToRelease->Release();
32 pInterfaceToRelease = NULL;
37 #include <controllers/InputDevice.h>
38 #include <controllers/StandardControls.h>
39 #include <plugins/InputPlugin.h>
42 class KinectPlugin :
public InputPlugin {
45 bool isHandController()
const override;
46 bool isHeadController()
const override;
49 virtual void init()
override;
50 virtual bool isSupported()
const override;
51 virtual const QString getName()
const override {
return NAME; }
52 const QString getID()
const override {
return KINECT_ID_STRING; }
54 virtual bool activate()
override;
55 virtual void deactivate()
override;
57 virtual void pluginFocusOutEvent()
override { _inputDevice->focusOutEvent(); }
58 virtual void pluginUpdate(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override;
60 virtual void saveSettings()
const override;
61 virtual void loadSettings()
override;
65 ThreadSafeMovingAverage<glm::quat, 2> _LeftHandOrientationAverage;
66 ThreadSafeMovingAverage<glm::quat, 2> _RightHandOrientationAverage;
72 glm::quat orientation;
75 class InputDevice :
public controller::InputDevice {
77 friend class KinectPlugin;
79 InputDevice() : controller::InputDevice(
"Kinect") {}
82 virtual controller::Input::NamedVector getAvailableInputs()
const override;
83 virtual QString getDefaultMappingConfig()
const override;
84 virtual void update(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData)
override {};
85 virtual void focusOutEvent()
override {};
87 void update(
float deltaTime,
const controller::InputCalibrationData& inputCalibrationData,
88 const std::vector<KinectPlugin::KinectJoint>& joints,
const std::vector<KinectPlugin::KinectJoint>& prevJoints);
93 std::shared_ptr<InputDevice> _inputDevice { std::make_shared<InputDevice>() };
95 static const char* NAME;
96 static const char* KINECT_ID_STRING;
98 bool _enabled {
false };
99 bool _debug {
false };
100 mutable bool _initialized {
false };
103 std::vector<KinectJoint> _joints;
106 std::vector<KinectJoint> _prevJoints;
111 bool KinectPlugin::initializeDefaultSensor()
const;
115 void ProcessBody(INT64 time,
int bodyCount, IBody** bodies);
118 mutable IKinectSensor* _kinectSensor {
nullptr };
119 mutable ICoordinateMapper* _coordinateMapper {
nullptr };
122 mutable IBodyFrameReader* _bodyFrameReader {
nullptr };