11 #ifndef hifi_LaserPointer_h
12 #define hifi_LaserPointer_h
14 #include "PathPointer.h"
16 #include <EntityItemProperties.h>
18 class LaserPointer :
public PathPointer {
19 using Parent = PathPointer;
21 class RenderState :
public StartEndRenderState {
24 RenderState(
const QUuid& startID,
const QUuid& pathID,
const QUuid& endID);
26 const QUuid& getPathID()
const {
return _pathID; }
28 void setLineWidth(
float width) { _lineWidth = width; }
29 float getLineWidth()
const {
return _lineWidth; }
31 void setNumPoints(
size_t numPoints) { _numPoints = std::max(numPoints, (
size_t)2); }
32 size_t getNumPoints()
const {
return _numPoints; }
34 const bool& doesPathIgnorePicks()
const {
return _pathIgnorePicks; }
36 void cleanup()
override;
37 void disable()
override;
38 void update(
const glm::vec3& origin,
const glm::vec3& end,
const glm::vec3& surfaceNormal,
float parentScale,
bool distanceScaleEnd,
39 bool centerEndY,
bool faceAvatar,
bool followNormal,
float followNormalStrength,
float distance,
40 const PickResultPointer& pickResult)
override;
45 float _lineWidth { 0.0f };
46 size_t _numPoints { 0 };
47 bool _pathIgnorePicks {
false };
49 bool _hasSetLinePoints {
false };
52 LaserPointer(
const QVariant& rayProps,
const RenderStateMap& renderStates,
const DefaultRenderStateMap& defaultRenderStates,
bool hover,
const PointerTriggers& triggers,
53 bool faceAvatar,
bool followNormal,
float followNormalStrength,
bool centerEndY,
bool lockEnd,
bool distanceScaleEnd,
bool scaleWithParent,
bool enabled);
55 PickQuery::PickType getType()
const override;
57 QVariantMap toVariantMap()
const override;
59 static std::shared_ptr<StartEndRenderState> buildRenderState(
const QVariantMap& propMap,
const QList<EntityItemProperties> &entityProperties);
62 PickResultPointer getPickResultCopy(
const PickResultPointer& pickResult)
const override;
64 void editRenderStatePath(
const std::string& state,
const QVariant& pathProps)
override;
66 glm::vec3 getPickOrigin(
const PickResultPointer& pickResult)
const override;
67 glm::vec3 getPickEnd(
const PickResultPointer& pickResult,
float distance)
const override;
68 glm::vec3 getPickedObjectNormal(
const PickResultPointer& pickResult)
const override;
69 IntersectionType getPickedObjectType(
const PickResultPointer& pickResult)
const override;
70 QUuid getPickedObjectID(
const PickResultPointer& pickResult)
const override;
71 void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type,
const QUuid&
id,
72 const glm::vec3& intersection,
float distance,
const glm::vec3& surfaceNormal)
override;
74 PointerEvent buildPointerEvent(
const PickedObject& target,
const PickResultPointer& pickResult,
const std::string& button =
"",
bool hover =
true)
override;
77 static glm::vec3 findIntersection(
const PickedObject& pickedObject,
const glm::vec3& origin,
const glm::vec3& direction);
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:32