Overte C++ Documentation
PointerManager.h
1 //
2 // Created by Bradley Austin Davis on 2017/10/16
3 // Copyright 2013-2017 High Fidelity, Inc.
4 //
5 // Distributed under the Apache License, Version 2.0.
6 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
7 //
8 #ifndef hifi_pointers_PointerManager_h
9 #define hifi_pointers_PointerManager_h
10 
11 #include <DependencyManager.h>
12 #include <PointerEvent.h>
13 
14 #include <memory>
15 
16 #include <shared/ReadWriteLockable.h>
17 
18 #include "Pointer.h"
19 
20 class PointerManager : public QObject, public Dependency, protected ReadWriteLockable {
21  Q_OBJECT
22  SINGLETON_DEPENDENCY
23 public:
24  PointerManager() {}
25 
26  unsigned int addPointer(std::shared_ptr<Pointer> pointer);
27  void removePointer(unsigned int uid);
28  void enablePointer(unsigned int uid) const;
29  void disablePointer(unsigned int uid) const;
30  bool isPointerEnabled(unsigned int uid) const;
31  QVector<unsigned int> getPointers() const;
32 
33  void setRenderState(unsigned int uid, const std::string& renderState) const;
34  void editRenderState(unsigned int uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) const;
35 
36  PickResultPointer getPrevPickResult(unsigned int uid) const;
37  // The actual current properties of the pointer
38  QVariantMap getPointerProperties(unsigned int uid) const;
39  // The properties that were passed in to create the pointer (may be empty if the pointer was created by invoking the constructor)
40  QVariantMap getPointerScriptParameters(unsigned int uid) const;
41 
42  void setPrecisionPicking(unsigned int uid, bool precisionPicking) const;
43  void setIgnoreItems(unsigned int uid, const QVector<QUuid>& ignoreEntities) const;
44  void setIncludeItems(unsigned int uid, const QVector<QUuid>& includeEntities) const;
45 
46  void setLength(unsigned int uid, float length) const;
47  void setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isAvatar, const glm::mat4& offsetMat = glm::mat4()) const;
48 
49  void update();
50 
51  bool isLeftHand(unsigned int uid);
52  bool isRightHand(unsigned int uid);
53  bool isMouse(unsigned int uid);
54 
55  static const unsigned int MOUSE_POINTER_ID { PointerEvent::INVALID_POINTER_ID + 1 };
56 
57 private:
58  std::shared_ptr<Pointer> find(unsigned int uid) const;
59  std::unordered_map<unsigned int, std::shared_ptr<Pointer>> _pointers;
60  unsigned int _nextPointerID { MOUSE_POINTER_ID + 1 };
61 
62 signals:
63  void triggerBeginOverlay(const QUuid& id, const PointerEvent& pointerEvent);
64  void triggerContinueOverlay(const QUuid& id, const PointerEvent& pointerEvent);
65  void triggerEndOverlay(const QUuid& id, const PointerEvent& pointerEvent);
66  void hoverBeginOverlay(const QUuid& id, const PointerEvent& pointerEvent);
67  void hoverContinueOverlay(const QUuid& id, const PointerEvent& pointerEvent);
68  void hoverEndOverlay(const QUuid& id, const PointerEvent& pointerEvent);
69 
70  void triggerBeginEntity(const QUuid& id, const PointerEvent& pointerEvent);
71  void triggerContinueEntity(const QUuid& id, const PointerEvent& pointerEvent);
72  void triggerEndEntity(const QUuid& id, const PointerEvent& pointerEvent);
73  void hoverBeginEntity(const QUuid& id, const PointerEvent& pointerEvent);
74  void hoverContinueEntity(const QUuid& id, const PointerEvent& pointerEvent);
75  void hoverEndEntity(const QUuid& id, const PointerEvent& pointerEvent);
76 
77  void triggerBeginHUD(const PointerEvent& pointerEvent);
78  void triggerContinueHUD(const PointerEvent& pointerEvent);
79  void triggerEndHUD(const PointerEvent& pointerEvent);
80  void hoverBeginHUD(const PointerEvent& pointerEvent);
81  void hoverContinueHUD(const PointerEvent& pointerEvent);
82  void hoverEndHUD(const PointerEvent& pointerEvent);
83 };
84 
85 #endif // hifi_pointers_PointerManager_h
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:30