8 #ifndef hifi_ParabolaPick_h
9 #define hifi_ParabolaPick_h
11 #include <RegisteredMetaTypes.h>
16 class ParabolaPickResult :
public PickResult {
18 ParabolaPickResult() {}
19 ParabolaPickResult(
const QVariantMap& pickVariant) : PickResult(pickVariant) {}
20 ParabolaPickResult(
const IntersectionType type,
const QUuid& objectID,
float distance,
float parabolicDistance,
const glm::vec3& intersection,
const PickParabola& parabola,
21 const glm::vec3& surfaceNormal = glm::vec3(NAN),
const QVariantMap& extraInfo = QVariantMap()) :
22 PickResult(parabola.toVariantMap()), extraInfo(extraInfo), objectID(objectID), intersection(intersection), surfaceNormal(surfaceNormal), type(type), distance(distance), parabolicDistance(parabolicDistance), intersects(type != NONE) {
25 ParabolaPickResult(
const ParabolaPickResult& parabolaPickResult) : PickResult(parabolaPickResult.pickVariant) {
26 type = parabolaPickResult.type;
27 intersects = parabolaPickResult.intersects;
28 objectID = parabolaPickResult.objectID;
29 distance = parabolaPickResult.distance;
30 parabolicDistance = parabolaPickResult.parabolicDistance;
31 intersection = parabolaPickResult.intersection;
32 surfaceNormal = parabolaPickResult.surfaceNormal;
33 extraInfo = parabolaPickResult.extraInfo;
36 QVariantMap extraInfo;
38 glm::vec3 intersection { NAN };
39 glm::vec3 surfaceNormal { NAN };
40 IntersectionType type { NONE };
41 float distance { FLT_MAX };
42 float parabolicDistance { FLT_MAX };
43 bool intersects {
false };
62 virtual QVariantMap toVariantMap()
const override {
64 toReturn[
"type"] = type;
65 toReturn[
"intersects"] = intersects;
66 toReturn[
"objectID"] = objectID;
67 toReturn[
"distance"] = distance;
68 toReturn[
"parabolicDistance"] = parabolicDistance;
69 toReturn[
"intersection"] = vec3toVariant(intersection);
70 toReturn[
"surfaceNormal"] = vec3toVariant(surfaceNormal);
71 toReturn[
"parabola"] = PickResult::toVariantMap();
72 toReturn[
"extraInfo"] = extraInfo;
76 bool doesIntersect()
const override {
return intersects; }
77 bool checkOrFilterAgainstMaxDistance(
float maxDistance)
override {
return parabolicDistance < maxDistance; }
79 PickResultPointer compareAndProcessNewResult(
const PickResultPointer& newRes)
override {
80 auto newParabolaRes = std::static_pointer_cast<ParabolaPickResult>(newRes);
81 if (newParabolaRes->parabolicDistance < parabolicDistance) {
82 return std::make_shared<ParabolaPickResult>(*newParabolaRes);
84 return std::make_shared<ParabolaPickResult>(*
this);
90 class ParabolaPick :
public Pick<PickParabola> {
93 ParabolaPick(
const glm::vec3& position,
const glm::vec3& direction,
float speed,
const glm::vec3& acceleration,
bool rotateAccelerationWithAvatar,
bool rotateAccelerationWithParent,
bool scaleWithParent,
const PickFilter& filter,
float maxDistance,
bool enabled);
95 PickType getType()
const override {
return PickType::Parabola; }
97 PickParabola getMathematicalPick()
const override;
99 PickResultPointer getDefaultResult(
const QVariantMap& pickVariant)
const override {
return std::make_shared<ParabolaPickResult>(pickVariant); }
100 PickResultPointer getEntityIntersection(
const PickParabola& pick)
override;
101 PickResultPointer getAvatarIntersection(
const PickParabola& pick)
override;
102 PickResultPointer getHUDIntersection(
const PickParabola& pick)
override;
103 Transform getResultTransform()
const override;
106 bool _rotateAccelerationWithAvatar;
107 bool _rotateAccelerationWithParent;
108 bool _scaleWithParent;
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28