11 #include <unordered_set>
12 #include <unordered_map>
14 #include <QtCore/QUuid>
18 #include <shared/ReadWriteLockable.h>
21 #include <controllers/impl/Endpoint.h>
22 #include "PointerEvent.h"
26 class PointerTrigger {
28 PointerTrigger(controller::Endpoint::Pointer endpoint,
const std::string& button) : _endpoint(endpoint), _button(button) {}
30 controller::Endpoint::Pointer getEndpoint()
const {
return _endpoint; }
31 const std::string& getButton()
const {
return _button; }
34 controller::Endpoint::Pointer _endpoint;
35 std::string _button {
"" };
38 using PointerTriggers = std::vector<PointerTrigger>;
40 class Pointer :
protected ReadWriteLockable {
42 Pointer(
unsigned int uid,
bool enabled,
bool hover) : _pickUID(uid), _enabled(enabled), _hover(hover) {}
46 virtual void enable();
47 virtual void disable();
48 virtual bool isEnabled();
49 virtual PickQuery::PickType getType()
const = 0;
50 virtual PickResultPointer getPrevPickResult();
52 virtual void setRenderState(
const std::string& state) = 0;
53 virtual void editRenderState(
const std::string& state,
const QVariant& startProps,
const QVariant& pathProps,
const QVariant& endProps) = 0;
55 virtual QVariantMap toVariantMap()
const;
56 virtual void setScriptParameters(
const QVariantMap& scriptParameters);
57 virtual QVariantMap getScriptParameters()
const;
59 virtual void setPrecisionPicking(
bool precisionPicking);
60 virtual void setIgnoreItems(
const QVector<QUuid>& ignoreItems)
const;
61 virtual void setIncludeItems(
const QVector<QUuid>& includeItems)
const;
63 bool isLeftHand()
const;
64 bool isRightHand()
const;
68 virtual void setLength(
float length) {}
69 virtual void setLockEndUUID(
const QUuid& objectID,
bool isAvatar,
const glm::mat4& offsetMat = glm::mat4()) {}
71 void update(
unsigned int pointerID);
72 virtual void updateVisuals(
const PickResultPointer& pickResult) = 0;
73 void generatePointerEvents(
unsigned int pointerID,
const PickResultPointer& pickResult);
76 PickedObject(
const QUuid& objectID = QUuid(), IntersectionType type = IntersectionType::NONE) : objectID(objectID), type(type) {}
79 IntersectionType type;
80 }
typedef PickedObject;
82 using Buttons = std::unordered_set<std::string>;
84 unsigned int getRayUID() {
return _pickUID; }
87 const unsigned int _pickUID;
92 QVariantMap _scriptParameters;
94 virtual PointerEvent buildPointerEvent(
const PickedObject& target,
const PickResultPointer& pickResult,
const std::string& button =
"",
bool hover =
true) = 0;
96 virtual PickedObject getHoveredObject(
const PickResultPointer& pickResult) = 0;
97 virtual Buttons getPressedButtons(
const PickResultPointer& pickResult) = 0;
99 virtual bool shouldHover(
const PickResultPointer& pickResult) {
return true; }
100 virtual bool shouldTrigger(
const PickResultPointer& pickResult) {
return true; }
101 virtual PickResultPointer getPickResultCopy(
const PickResultPointer& pickResult)
const = 0;
102 virtual PickResultPointer getVisualPickResult(
const PickResultPointer& pickResult) {
return pickResult; };
104 static const float POINTER_MOVE_DELAY;
105 static const float TOUCH_PRESS_TO_MOVE_DEADSPOT_SQUARED;
108 PickedObject _prevHoveredObject;
109 Buttons _prevButtons;
110 bool _prevEnabled {
false };
111 bool _prevDoHover {
false };
112 std::unordered_map<std::string, PickedObject> _triggeredObjects;
114 PointerEvent::Button chooseButton(
const std::string& button);
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:30