mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 12:17:45 +02:00
Make path pointers use scaleWithParent behind the scenes instead of scaleWithAvatar
This commit is contained in:
parent
74937a1979
commit
bc861c1368
8 changed files with 50 additions and 40 deletions
|
@ -14,13 +14,14 @@
|
||||||
#include "avatar/AvatarManager.h"
|
#include "avatar/AvatarManager.h"
|
||||||
|
|
||||||
#include <DependencyManager.h>
|
#include <DependencyManager.h>
|
||||||
|
#include "PickManager.h"
|
||||||
#include "RayPick.h"
|
#include "RayPick.h"
|
||||||
|
|
||||||
LaserPointer::LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover,
|
LaserPointer::LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover,
|
||||||
const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalTime, bool centerEndY, bool lockEnd,
|
const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalTime, bool centerEndY, bool lockEnd,
|
||||||
bool distanceScaleEnd, bool scaleWithAvatar, bool enabled) :
|
bool distanceScaleEnd, bool scaleWithParent, bool enabled) :
|
||||||
PathPointer(PickQuery::Ray, rayProps, renderStates, defaultRenderStates, hover, triggers, faceAvatar, followNormal, followNormalTime,
|
PathPointer(PickQuery::Ray, rayProps, renderStates, defaultRenderStates, hover, triggers, faceAvatar, followNormal, followNormalTime,
|
||||||
centerEndY, lockEnd, distanceScaleEnd, scaleWithAvatar, enabled)
|
centerEndY, lockEnd, distanceScaleEnd, scaleWithParent, enabled)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +29,9 @@ void LaserPointer::editRenderStatePath(const std::string& state, const QVariant&
|
||||||
auto renderState = std::static_pointer_cast<RenderState>(_renderStates[state]);
|
auto renderState = std::static_pointer_cast<RenderState>(_renderStates[state]);
|
||||||
if (renderState) {
|
if (renderState) {
|
||||||
updateRenderStateOverlay(renderState->getPathID(), pathProps);
|
updateRenderStateOverlay(renderState->getPathID(), pathProps);
|
||||||
QVariant lineWidth = pathProps.toMap()["lineWidth"];
|
QVariant pathWidth = pathProps.toMap()["lineWidth"];
|
||||||
if (lineWidth.isValid()) {
|
if (pathWidth.isValid()) {
|
||||||
renderState->setLineWidth(lineWidth.toFloat());
|
renderState->setPathWidth(pathWidth.toFloat());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,7 +118,7 @@ LaserPointer::RenderState::RenderState(const OverlayID& startID, const OverlayID
|
||||||
{
|
{
|
||||||
if (!_pathID.isNull()) {
|
if (!_pathID.isNull()) {
|
||||||
_pathIgnoreRays = qApp->getOverlays().getProperty(_pathID, "ignoreRayIntersection").value.toBool();
|
_pathIgnoreRays = qApp->getOverlays().getProperty(_pathID, "ignoreRayIntersection").value.toBool();
|
||||||
_lineWidth = qApp->getOverlays().getProperty(_pathID, "lineWidth").value.toFloat();
|
_pathWidth = qApp->getOverlays().getProperty(_pathID, "lineWidth").value.toFloat();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,9 +139,9 @@ void LaserPointer::RenderState::disable() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaserPointer::RenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
void LaserPointer::RenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
||||||
StartEndRenderState::update(origin, end, surfaceNormal, scaleWithAvatar, distanceScaleEnd, centerEndY, faceAvatar, followNormal, followNormalStrength, distance, pickResult);
|
StartEndRenderState::update(origin, end, surfaceNormal, parentScale, distanceScaleEnd, centerEndY, faceAvatar, followNormal, followNormalStrength, distance, pickResult);
|
||||||
QVariant endVariant = vec3toVariant(end);
|
QVariant endVariant = vec3toVariant(end);
|
||||||
if (!getPathID().isNull()) {
|
if (!getPathID().isNull()) {
|
||||||
QVariantMap pathProps;
|
QVariantMap pathProps;
|
||||||
|
@ -148,9 +149,7 @@ void LaserPointer::RenderState::update(const glm::vec3& origin, const glm::vec3&
|
||||||
pathProps.insert("end", endVariant);
|
pathProps.insert("end", endVariant);
|
||||||
pathProps.insert("visible", true);
|
pathProps.insert("visible", true);
|
||||||
pathProps.insert("ignoreRayIntersection", doesPathIgnoreRays());
|
pathProps.insert("ignoreRayIntersection", doesPathIgnoreRays());
|
||||||
if (scaleWithAvatar) {
|
pathProps.insert("lineWidth", getPathWidth() * parentScale);
|
||||||
pathProps.insert("lineWidth", getLineWidth() * DependencyManager::get<AvatarManager>()->getMyAvatar()->getSensorToWorldScale());
|
|
||||||
}
|
|
||||||
qApp->getOverlays().editOverlay(getPathID(), pathProps);
|
qApp->getOverlays().editOverlay(getPathID(), pathProps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,23 +24,18 @@ public:
|
||||||
const OverlayID& getPathID() const { return _pathID; }
|
const OverlayID& getPathID() const { return _pathID; }
|
||||||
const bool& doesPathIgnoreRays() const { return _pathIgnoreRays; }
|
const bool& doesPathIgnoreRays() const { return _pathIgnoreRays; }
|
||||||
|
|
||||||
void setLineWidth(const float& lineWidth) { _lineWidth = lineWidth; }
|
|
||||||
const float& getLineWidth() const { return _lineWidth; }
|
|
||||||
|
|
||||||
void cleanup() override;
|
void cleanup() override;
|
||||||
void disable() override;
|
void disable() override;
|
||||||
void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override;
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OverlayID _pathID;
|
OverlayID _pathID;
|
||||||
bool _pathIgnoreRays;
|
bool _pathIgnoreRays;
|
||||||
|
|
||||||
float _lineWidth;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
|
LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd, bool distanceScaleEnd, bool scaleWithAvatar, bool enabled);
|
bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd, bool distanceScaleEnd, bool scaleWithParent, bool enabled);
|
||||||
|
|
||||||
QVariantMap toVariantMap() const override;
|
QVariantMap toVariantMap() const override;
|
||||||
|
|
||||||
|
|
|
@ -190,9 +190,9 @@ void ParabolaPointer::RenderState::editParabola(const glm::vec3& color, float al
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParabolaPointer::RenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
void ParabolaPointer::RenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
||||||
StartEndRenderState::update(origin, end, surfaceNormal, scaleWithAvatar, distanceScaleEnd, centerEndY, faceAvatar, followNormal, followNormalStrength, distance, pickResult);
|
StartEndRenderState::update(origin, end, surfaceNormal, parentScale, distanceScaleEnd, centerEndY, faceAvatar, followNormal, followNormalStrength, distance, pickResult);
|
||||||
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
|
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
|
||||||
if (parabolaPickResult && render::Item::isValidID(_pathID)) {
|
if (parabolaPickResult && render::Item::isValidID(_pathID)) {
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
|
@ -202,7 +202,7 @@ void ParabolaPointer::RenderState::update(const glm::vec3& origin, const glm::ve
|
||||||
glm::vec3 velocity = parabola.velocity;
|
glm::vec3 velocity = parabola.velocity;
|
||||||
glm::vec3 acceleration = parabola.acceleration;
|
glm::vec3 acceleration = parabola.acceleration;
|
||||||
float parabolicDistance = distance > 0.0f ? distance : parabolaPickResult->parabolicDistance;
|
float parabolicDistance = distance > 0.0f ? distance : parabolaPickResult->parabolicDistance;
|
||||||
float width = scaleWithAvatar ? getPathWidth() * DependencyManager::get<AvatarManager>()->getMyAvatar()->getSensorToWorldScale() : getPathWidth();
|
float width = getPathWidth() * parentScale;
|
||||||
transaction.updateItem<ParabolaRenderItem>(_pathID, [origin, velocity, acceleration, parabolicDistance, width](ParabolaRenderItem& item) {
|
transaction.updateItem<ParabolaRenderItem>(_pathID, [origin, velocity, acceleration, parabolicDistance, width](ParabolaRenderItem& item) {
|
||||||
item.setVisible(true);
|
item.setVisible(true);
|
||||||
item.setOrigin(origin);
|
item.setOrigin(origin);
|
||||||
|
|
|
@ -76,22 +76,18 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
RenderState() {}
|
RenderState() {}
|
||||||
RenderState(const OverlayID& startID, const OverlayID& endID, const glm::vec3& pathColor, float pathAlpha, float pathWidth,
|
RenderState(const OverlayID& startID, const OverlayID& endID, const glm::vec3& pathColor, float pathAlpha, float parentScale,
|
||||||
bool isVisibleInSecondaryCamera, bool pathEnabled);
|
bool isVisibleInSecondaryCamera, bool pathEnabled);
|
||||||
|
|
||||||
void setPathWidth(float width) { _pathWidth = width; }
|
|
||||||
float getPathWidth() const { return _pathWidth; }
|
|
||||||
|
|
||||||
void cleanup() override;
|
void cleanup() override;
|
||||||
void disable() override;
|
void disable() override;
|
||||||
void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override;
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override;
|
||||||
|
|
||||||
void editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool enabled);
|
void editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool enabled);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _pathID;
|
int _pathID;
|
||||||
float _pathWidth;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ParabolaPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
|
ParabolaPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
PathPointer::PathPointer(PickQuery::PickType type, const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
|
PathPointer::PathPointer(PickQuery::PickType type, const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
|
||||||
bool hover, const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd,
|
bool hover, const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd,
|
||||||
bool distanceScaleEnd, bool scaleWithAvatar, bool enabled) :
|
bool distanceScaleEnd, bool scaleWithParent, bool enabled) :
|
||||||
Pointer(DependencyManager::get<PickScriptingInterface>()->createPick(type, rayProps), enabled, hover),
|
Pointer(DependencyManager::get<PickScriptingInterface>()->createPick(type, rayProps), enabled, hover),
|
||||||
_renderStates(renderStates),
|
_renderStates(renderStates),
|
||||||
_defaultRenderStates(defaultRenderStates),
|
_defaultRenderStates(defaultRenderStates),
|
||||||
|
@ -28,7 +28,7 @@ PathPointer::PathPointer(PickQuery::PickType type, const QVariant& rayProps, con
|
||||||
_centerEndY(centerEndY),
|
_centerEndY(centerEndY),
|
||||||
_lockEnd(lockEnd),
|
_lockEnd(lockEnd),
|
||||||
_distanceScaleEnd(distanceScaleEnd),
|
_distanceScaleEnd(distanceScaleEnd),
|
||||||
_scaleWithAvatar(scaleWithAvatar)
|
_scaleWithParent(scaleWithParent)
|
||||||
{
|
{
|
||||||
for (auto& state : _renderStates) {
|
for (auto& state : _renderStates) {
|
||||||
if (!enabled || state.first != _currentRenderState) {
|
if (!enabled || state.first != _currentRenderState) {
|
||||||
|
@ -146,12 +146,18 @@ void PathPointer::updateVisuals(const PickResultPointer& pickResult) {
|
||||||
IntersectionType type = getPickedObjectType(pickResult);
|
IntersectionType type = getPickedObjectType(pickResult);
|
||||||
auto renderState = _renderStates.find(_currentRenderState);
|
auto renderState = _renderStates.find(_currentRenderState);
|
||||||
auto defaultRenderState = _defaultRenderStates.find(_currentRenderState);
|
auto defaultRenderState = _defaultRenderStates.find(_currentRenderState);
|
||||||
|
float parentScale = 1;
|
||||||
|
if (_enabled && _scaleWithParent) {
|
||||||
|
glm::vec3 dimensions = DependencyManager::get<PickManager>()->getParentTransform(_pickUID).getScale();
|
||||||
|
parentScale = glm::max(glm::max(dimensions.x, dimensions.y), dimensions.z);
|
||||||
|
}
|
||||||
|
|
||||||
if (_enabled && !_currentRenderState.empty() && renderState != _renderStates.end() &&
|
if (_enabled && !_currentRenderState.empty() && renderState != _renderStates.end() &&
|
||||||
(type != IntersectionType::NONE || _pathLength > 0.0f)) {
|
(type != IntersectionType::NONE || _pathLength > 0.0f)) {
|
||||||
glm::vec3 origin = getPickOrigin(pickResult);
|
glm::vec3 origin = getPickOrigin(pickResult);
|
||||||
glm::vec3 end = getPickEnd(pickResult, _pathLength);
|
glm::vec3 end = getPickEnd(pickResult, _pathLength);
|
||||||
glm::vec3 surfaceNormal = getPickedObjectNormal(pickResult);
|
glm::vec3 surfaceNormal = getPickedObjectNormal(pickResult);
|
||||||
renderState->second->update(origin, end, surfaceNormal, _scaleWithAvatar, _distanceScaleEnd, _centerEndY, _faceAvatar,
|
renderState->second->update(origin, end, surfaceNormal, parentScale, _distanceScaleEnd, _centerEndY, _faceAvatar,
|
||||||
_followNormal, _followNormalStrength, _pathLength, pickResult);
|
_followNormal, _followNormalStrength, _pathLength, pickResult);
|
||||||
if (defaultRenderState != _defaultRenderStates.end() && defaultRenderState->second.second->isEnabled()) {
|
if (defaultRenderState != _defaultRenderStates.end() && defaultRenderState->second.second->isEnabled()) {
|
||||||
defaultRenderState->second.second->disable();
|
defaultRenderState->second.second->disable();
|
||||||
|
@ -162,7 +168,7 @@ void PathPointer::updateVisuals(const PickResultPointer& pickResult) {
|
||||||
}
|
}
|
||||||
glm::vec3 origin = getPickOrigin(pickResult);
|
glm::vec3 origin = getPickOrigin(pickResult);
|
||||||
glm::vec3 end = getPickEnd(pickResult, defaultRenderState->second.first);
|
glm::vec3 end = getPickEnd(pickResult, defaultRenderState->second.first);
|
||||||
defaultRenderState->second.second->update(origin, end, Vectors::UP, _scaleWithAvatar, _distanceScaleEnd, _centerEndY,
|
defaultRenderState->second.second->update(origin, end, Vectors::UP, parentScale, _distanceScaleEnd, _centerEndY,
|
||||||
_faceAvatar, _followNormal, _followNormalStrength, defaultRenderState->second.first, pickResult);
|
_faceAvatar, _followNormal, _followNormalStrength, defaultRenderState->second.first, pickResult);
|
||||||
} else if (!_currentRenderState.empty()) {
|
} else if (!_currentRenderState.empty()) {
|
||||||
if (renderState != _renderStates.end() && renderState->second->isEnabled()) {
|
if (renderState != _renderStates.end() && renderState->second->isEnabled()) {
|
||||||
|
@ -281,15 +287,13 @@ void StartEndRenderState::disable() {
|
||||||
_enabled = false;
|
_enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartEndRenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
void StartEndRenderState::update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) {
|
||||||
if (!getStartID().isNull()) {
|
if (!getStartID().isNull()) {
|
||||||
QVariantMap startProps;
|
QVariantMap startProps;
|
||||||
startProps.insert("position", vec3toVariant(origin));
|
startProps.insert("position", vec3toVariant(origin));
|
||||||
startProps.insert("visible", true);
|
startProps.insert("visible", true);
|
||||||
if (scaleWithAvatar) {
|
startProps.insert("dimensions", vec3toVariant(getStartDim() * parentScale));
|
||||||
startProps.insert("dimensions", vec3toVariant(getStartDim() * DependencyManager::get<AvatarManager>()->getMyAvatar()->getSensorToWorldScale()));
|
|
||||||
}
|
|
||||||
startProps.insert("ignoreRayIntersection", doesStartIgnoreRays());
|
startProps.insert("ignoreRayIntersection", doesStartIgnoreRays());
|
||||||
qApp->getOverlays().editOverlay(getStartID(), startProps);
|
qApp->getOverlays().editOverlay(getStartID(), startProps);
|
||||||
}
|
}
|
||||||
|
@ -300,8 +304,8 @@ void StartEndRenderState::update(const glm::vec3& origin, const glm::vec3& end,
|
||||||
if (distanceScaleEnd) {
|
if (distanceScaleEnd) {
|
||||||
dim = getEndDim() * glm::distance(origin, end);
|
dim = getEndDim() * glm::distance(origin, end);
|
||||||
endProps.insert("dimensions", vec3toVariant(dim));
|
endProps.insert("dimensions", vec3toVariant(dim));
|
||||||
} else if (scaleWithAvatar) {
|
} else {
|
||||||
dim = getEndDim() * DependencyManager::get<AvatarManager>()->getMyAvatar()->getSensorToWorldScale();
|
dim = getEndDim() * parentScale;
|
||||||
endProps.insert("dimensions", vec3toVariant(dim));
|
endProps.insert("dimensions", vec3toVariant(dim));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,9 +42,12 @@ public:
|
||||||
void setEndRot(const glm::quat& endRot) { _endRot = endRot; }
|
void setEndRot(const glm::quat& endRot) { _endRot = endRot; }
|
||||||
const glm::quat& getEndRot() const { return _endRot; }
|
const glm::quat& getEndRot() const { return _endRot; }
|
||||||
|
|
||||||
|
void setPathWidth(float width) { _pathWidth = width; }
|
||||||
|
float getPathWidth() const { return _pathWidth; }
|
||||||
|
|
||||||
virtual void cleanup();
|
virtual void cleanup();
|
||||||
virtual void disable();
|
virtual void disable();
|
||||||
virtual void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY,
|
virtual void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
|
||||||
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult);
|
bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult);
|
||||||
|
|
||||||
bool isEnabled() const { return _enabled; }
|
bool isEnabled() const { return _enabled; }
|
||||||
|
@ -58,6 +61,7 @@ protected:
|
||||||
glm::vec3 _startDim;
|
glm::vec3 _startDim;
|
||||||
glm::vec3 _endDim;
|
glm::vec3 _endDim;
|
||||||
glm::quat _endRot;
|
glm::quat _endRot;
|
||||||
|
float _pathWidth;
|
||||||
|
|
||||||
glm::quat _avgEndRot;
|
glm::quat _avgEndRot;
|
||||||
bool _avgEndRotInitialized { false };
|
bool _avgEndRotInitialized { false };
|
||||||
|
@ -73,7 +77,7 @@ class PathPointer : public Pointer {
|
||||||
public:
|
public:
|
||||||
PathPointer(PickQuery::PickType type, const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
|
PathPointer(PickQuery::PickType type, const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates,
|
||||||
bool hover, const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd,
|
bool hover, const PointerTriggers& triggers, bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd,
|
||||||
bool distanceScaleEnd, bool scaleWithAvatar, bool enabled);
|
bool distanceScaleEnd, bool scaleWithParent, bool enabled);
|
||||||
virtual ~PathPointer();
|
virtual ~PathPointer();
|
||||||
|
|
||||||
void setRenderState(const std::string& state) override;
|
void setRenderState(const std::string& state) override;
|
||||||
|
@ -97,7 +101,7 @@ protected:
|
||||||
bool _centerEndY;
|
bool _centerEndY;
|
||||||
bool _lockEnd;
|
bool _lockEnd;
|
||||||
bool _distanceScaleEnd;
|
bool _distanceScaleEnd;
|
||||||
bool _scaleWithAvatar;
|
bool _scaleWithParent;
|
||||||
LockEndObject _lockEndObject;
|
LockEndObject _lockEndObject;
|
||||||
|
|
||||||
struct TriggerState {
|
struct TriggerState {
|
||||||
|
|
|
@ -90,6 +90,17 @@ void PickManager::setIncludeItems(unsigned int uid, const QVector<QUuid>& includ
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Transform PickManager::getParentTransform(unsigned int uid) const {
|
||||||
|
auto pick = findPick(uid);
|
||||||
|
if (pick) {
|
||||||
|
auto parentTransform = pick->parentTransform;
|
||||||
|
if (parentTransform) {
|
||||||
|
return parentTransform->getTransform();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Transform();
|
||||||
|
}
|
||||||
|
|
||||||
Transform PickManager::getResultTransform(unsigned int uid) const {
|
Transform PickManager::getResultTransform(unsigned int uid) const {
|
||||||
auto pick = findPick(uid);
|
auto pick = findPick(uid);
|
||||||
if (pick) {
|
if (pick) {
|
||||||
|
|
|
@ -43,6 +43,7 @@ public:
|
||||||
void setIgnoreItems(unsigned int uid, const QVector<QUuid>& ignore) const;
|
void setIgnoreItems(unsigned int uid, const QVector<QUuid>& ignore) const;
|
||||||
void setIncludeItems(unsigned int uid, const QVector<QUuid>& include) const;
|
void setIncludeItems(unsigned int uid, const QVector<QUuid>& include) const;
|
||||||
|
|
||||||
|
Transform getParentTransform(unsigned int uid) const;
|
||||||
Transform getResultTransform(unsigned int uid) const;
|
Transform getResultTransform(unsigned int uid) const;
|
||||||
|
|
||||||
bool isLeftHand(unsigned int uid);
|
bool isLeftHand(unsigned int uid);
|
||||||
|
|
Loading…
Reference in a new issue