9 #ifndef hifi_ParabolaPointer_h
10 #define hifi_ParabolaPointer_h
12 #include "PathPointer.h"
14 #include <EntityItemProperties.h>
16 #include <render/Item.h>
18 class ParabolaPointer :
public PathPointer {
19 using Parent = PathPointer;
21 class RenderState :
public StartEndRenderState {
23 class ParabolaRenderItem {
25 using Payload = render::Payload<ParabolaRenderItem>;
26 using Pointer = Payload::DataPointer;
28 ParabolaRenderItem(
const glm::vec3& color,
float alpha,
float width,
29 bool isVisibleInSecondaryCamera,
bool drawInFront,
bool enabled);
30 ~ParabolaRenderItem() {}
32 static std::map<std::pair<bool, bool>, gpu::PipelinePointer> _parabolaPipelines;
33 gpu::PipelinePointer getParabolaPipeline(
bool forward)
const;
35 void render(RenderArgs* args);
36 render::Item::Bound& editBound() {
return _bound; }
37 const render::Item::Bound& getBound(RenderArgs* args) {
return _bound; }
38 render::ItemKey getKey()
const {
return _key; }
40 void setVisible(
bool visible);
42 void updateUniformBuffer() { _uniformBuffer->setSubData(0, _parabolaData); }
45 void setColor(
const glm::vec3& color) { _parabolaData.color = glm::vec4(color, _parabolaData.color.a); }
46 void setAlpha(
const float& alpha) { _parabolaData.color.a = alpha; }
47 void setWidth(
const float& width) { _parabolaData.width = width; }
48 void setParabolicDistance(
const float& parabolicDistance) { _parabolaData.parabolicDistance = parabolicDistance; }
49 void setVelocity(
const glm::vec3& velocity) { _parabolaData.velocity = velocity; }
50 void setAcceleration(
const glm::vec3& acceleration) { _parabolaData.acceleration = acceleration; }
51 void setOrigin(
const glm::vec3& origin) { _origin = origin; }
52 void setIsVisibleInSecondaryCamera(
const bool& isVisibleInSecondaryCamera) { _isVisibleInSecondaryCamera = isVisibleInSecondaryCamera; }
53 void setDrawInFront(
const bool& drawInFront) { _drawInFront = drawInFront; }
54 void setEnabled(
const bool& enabled) { _enabled = enabled; }
56 static const glm::vec4 DEFAULT_PARABOLA_COLOR;
57 static const float DEFAULT_PARABOLA_WIDTH;
58 static const bool DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA;
59 static const bool DEFAULT_PARABOLA_DRAWINFRONT;
62 render::Item::Bound _bound;
65 glm::vec3 _origin { 0.0f };
66 Transform _prevRenderTransform;
67 bool _isVisibleInSecondaryCamera { DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA };
68 bool _drawInFront { DEFAULT_PARABOLA_DRAWINFRONT };
69 bool _visible {
false };
70 bool _enabled {
false };
73 glm::vec3 velocity { 0.0f };
74 float parabolicDistance { 0.0f };
75 vec3 acceleration { 0.0f };
76 float width { DEFAULT_PARABOLA_WIDTH };
77 vec4 color { vec4(DEFAULT_PARABOLA_COLOR)};
78 int numSections { 0 };
82 ParabolaData _parabolaData;
83 gpu::BufferPointer _uniformBuffer { std::make_shared<gpu::Buffer>(gpu::Buffer::UniformBuffer) };
87 RenderState(
const QUuid& startID,
const QUuid& endID,
const glm::vec3& pathColor,
float pathAlpha,
float parentScale,
88 bool isVisibleInSecondaryCamera,
bool drawInFront,
bool pathEnabled);
90 void setPathWidth(
float width) { _pathWidth = width; }
91 float getPathWidth()
const {
return _pathWidth; }
93 void cleanup()
override;
94 void disable()
override;
95 void update(
const glm::vec3& origin,
const glm::vec3& end,
const glm::vec3& surfaceNormal,
float parentScale,
bool distanceScaleEnd,
bool centerEndY,
96 bool faceAvatar,
bool followNormal,
float followNormalStrength,
float distance,
const PickResultPointer& pickResult)
override;
98 void editParabola(
const glm::vec3& color,
float alpha,
float width,
bool isVisibleInSecondaryCamera,
bool drawInFront,
bool enabled);
105 ParabolaPointer(
const QVariant& rayProps,
const RenderStateMap& renderStates,
const DefaultRenderStateMap& defaultRenderStates,
bool hover,
const PointerTriggers& triggers,
106 bool faceAvatar,
bool followNormal,
float followNormalStrength,
bool centerEndY,
bool lockEnd,
bool distanceScaleEnd,
bool scaleWithAvatar,
bool enabled);
108 PickQuery::PickType getType()
const override;
110 QVariantMap toVariantMap()
const override;
112 static std::shared_ptr<StartEndRenderState> buildRenderState(
const QVariantMap& propMap,
const QList<EntityItemProperties> &entityProperties);
115 virtual PickResultPointer getPickResultCopy(
const PickResultPointer& pickResult)
const override;
117 void editRenderStatePath(
const std::string& state,
const QVariant& pathProps)
override;
119 glm::vec3 getPickOrigin(
const PickResultPointer& pickResult)
const override;
120 glm::vec3 getPickEnd(
const PickResultPointer& pickResult,
float distance)
const override;
121 glm::vec3 getPickedObjectNormal(
const PickResultPointer& pickResult)
const override;
122 IntersectionType getPickedObjectType(
const PickResultPointer& pickResult)
const override;
123 QUuid getPickedObjectID(
const PickResultPointer& pickResult)
const override;
124 void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type,
const QUuid&
id,
125 const glm::vec3& intersection,
float distance,
const glm::vec3& surfaceNormal)
override;
127 PointerEvent buildPointerEvent(
const PickedObject& target,
const PickResultPointer& pickResult,
const std::string& button =
"",
bool hover =
true)
override;
130 static glm::vec3 findIntersection(
const PickedObject& pickedObject,
const glm::vec3& origin,
const glm::vec3& velocity,
const glm::vec3& acceleration);
134 template <>
const ItemKey payloadGetKey(
const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload);
135 template <>
const Item::Bound payloadGetBound(
const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload, RenderArgs* args);
136 template <>
void payloadRender(
const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload, RenderArgs* args);
137 template <>
const ShapeKey shapeGetShapeKey(
const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload);
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:32