mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 07:03:41 +02:00
provide an overlay property to control if the overlay is visible in the secondary camera view
This commit is contained in:
parent
3ee41c71e4
commit
271badfa62
5 changed files with 27 additions and 3 deletions
|
@ -37,7 +37,8 @@ Base3DOverlay::Base3DOverlay(const Base3DOverlay* base3DOverlay) :
|
||||||
_ignoreRayIntersection(base3DOverlay->_ignoreRayIntersection),
|
_ignoreRayIntersection(base3DOverlay->_ignoreRayIntersection),
|
||||||
_drawInFront(base3DOverlay->_drawInFront),
|
_drawInFront(base3DOverlay->_drawInFront),
|
||||||
_drawHUDLayer(base3DOverlay->_drawHUDLayer),
|
_drawHUDLayer(base3DOverlay->_drawHUDLayer),
|
||||||
_isGrabbable(base3DOverlay->_isGrabbable)
|
_isGrabbable(base3DOverlay->_isGrabbable),
|
||||||
|
_isVisibleInSecondaryCamera(base3DOverlay->_isVisibleInSecondaryCamera)
|
||||||
{
|
{
|
||||||
setTransform(base3DOverlay->getTransform());
|
setTransform(base3DOverlay->getTransform());
|
||||||
}
|
}
|
||||||
|
@ -142,6 +143,13 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) {
|
||||||
setIsGrabbable(isGrabbable.toBool());
|
setIsGrabbable(isGrabbable.toBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto isVisibleInSecondaryCamera = properties["isVisibleInSecondaryCamera"];
|
||||||
|
if (isVisibleInSecondaryCamera.isValid()) {
|
||||||
|
bool value = isVisibleInSecondaryCamera.toBool();
|
||||||
|
setIsVisibleInSecondaryCamera(value);
|
||||||
|
needRenderItemUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (properties["position"].isValid()) {
|
if (properties["position"].isValid()) {
|
||||||
setLocalPosition(vec3FromVariant(properties["position"]));
|
setLocalPosition(vec3FromVariant(properties["position"]));
|
||||||
needRenderItemUpdate = true;
|
needRenderItemUpdate = true;
|
||||||
|
@ -221,6 +229,8 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) {
|
||||||
* @property {boolean} drawInFront=false - If <code>true</code>, the overlay is rendered in front of other overlays that don't
|
* @property {boolean} drawInFront=false - If <code>true</code>, the overlay is rendered in front of other overlays that don't
|
||||||
* have <code>drawInFront</code> set to <code>true</code>, and in front of entities.
|
* have <code>drawInFront</code> set to <code>true</code>, and in front of entities.
|
||||||
* @property {boolean} grabbable=false - Signal to grabbing scripts whether or not this overlay can be grabbed.
|
* @property {boolean} grabbable=false - Signal to grabbing scripts whether or not this overlay can be grabbed.
|
||||||
|
* @property {boolean} isVisibleInSecondaryCamera=false - If <code>true</code>, the overlay is rendered in secondary
|
||||||
|
* camera views.
|
||||||
* @property {Uuid} parentID=null - The avatar, entity, or overlay that the overlay is parented to.
|
* @property {Uuid} parentID=null - The avatar, entity, or overlay that the overlay is parented to.
|
||||||
* @property {number} parentJointIndex=65535 - Integer value specifying the skeleton joint that the overlay is attached to if
|
* @property {number} parentJointIndex=65535 - Integer value specifying the skeleton joint that the overlay is attached to if
|
||||||
* <code>parentID</code> is an avatar skeleton. A value of <code>65535</code> means "no joint".
|
* <code>parentID</code> is an avatar skeleton. A value of <code>65535</code> means "no joint".
|
||||||
|
@ -259,6 +269,9 @@ QVariant Base3DOverlay::getProperty(const QString& property) {
|
||||||
if (property == "grabbable") {
|
if (property == "grabbable") {
|
||||||
return _isGrabbable;
|
return _isGrabbable;
|
||||||
}
|
}
|
||||||
|
if (property == "isVisibleInSecondaryCamera") {
|
||||||
|
return _isVisibleInSecondaryCamera;
|
||||||
|
}
|
||||||
if (property == "parentID") {
|
if (property == "parentID") {
|
||||||
return getParentID();
|
return getParentID();
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ public:
|
||||||
bool getDrawInFront() const { return _drawInFront; }
|
bool getDrawInFront() const { return _drawInFront; }
|
||||||
bool getDrawHUDLayer() const { return _drawHUDLayer; }
|
bool getDrawHUDLayer() const { return _drawHUDLayer; }
|
||||||
bool getIsGrabbable() const { return _isGrabbable; }
|
bool getIsGrabbable() const { return _isGrabbable; }
|
||||||
|
virtual bool getIsVisibleInSecondaryCamera() const override { return _isVisibleInSecondaryCamera; }
|
||||||
|
|
||||||
void setIsSolid(bool isSolid) { _isSolid = isSolid; }
|
void setIsSolid(bool isSolid) { _isSolid = isSolid; }
|
||||||
void setIsDashedLine(bool isDashedLine) { _isDashedLine = isDashedLine; }
|
void setIsDashedLine(bool isDashedLine) { _isDashedLine = isDashedLine; }
|
||||||
|
@ -55,6 +56,7 @@ public:
|
||||||
virtual void setDrawInFront(bool value) { _drawInFront = value; }
|
virtual void setDrawInFront(bool value) { _drawInFront = value; }
|
||||||
virtual void setDrawHUDLayer(bool value) { _drawHUDLayer = value; }
|
virtual void setDrawHUDLayer(bool value) { _drawHUDLayer = value; }
|
||||||
void setIsGrabbable(bool value) { _isGrabbable = value; }
|
void setIsGrabbable(bool value) { _isGrabbable = value; }
|
||||||
|
void setIsVisibleInSecondaryCamera(bool value) { _isVisibleInSecondaryCamera = value; }
|
||||||
|
|
||||||
virtual AABox getBounds() const override = 0;
|
virtual AABox getBounds() const override = 0;
|
||||||
|
|
||||||
|
@ -92,6 +94,7 @@ protected:
|
||||||
bool _drawInFront;
|
bool _drawInFront;
|
||||||
bool _drawHUDLayer;
|
bool _drawHUDLayer;
|
||||||
bool _isGrabbable { false };
|
bool _isGrabbable { false };
|
||||||
|
bool _isVisibleInSecondaryCamera { false };
|
||||||
mutable bool _renderVariableDirty { true };
|
mutable bool _renderVariableDirty { true };
|
||||||
|
|
||||||
QString _name;
|
QString _name;
|
||||||
|
|
|
@ -90,7 +90,9 @@ void ModelOverlay::update(float deltatime) {
|
||||||
if (_visibleDirty) {
|
if (_visibleDirty) {
|
||||||
_visibleDirty = false;
|
_visibleDirty = false;
|
||||||
// don't show overlays in mirrors
|
// don't show overlays in mirrors
|
||||||
_model->setVisibleInScene(getVisible(), scene, render::ItemKey::TAG_BITS_0, false);
|
_model->setVisibleInScene(getVisible(), scene,
|
||||||
|
_isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_ALL : render::ItemKey::TAG_BITS_0,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
if (_drawInFrontDirty) {
|
if (_drawInFrontDirty) {
|
||||||
_drawInFrontDirty = false;
|
_drawInFrontDirty = false;
|
||||||
|
|
|
@ -56,6 +56,8 @@ public:
|
||||||
bool isLoaded() { return _isLoaded; }
|
bool isLoaded() { return _isLoaded; }
|
||||||
bool getVisible() const { return _visible; }
|
bool getVisible() const { return _visible; }
|
||||||
virtual bool isTransparent() { return getAlphaPulse() != 0.0f || getAlpha() != 1.0f; };
|
virtual bool isTransparent() { return getAlphaPulse() != 0.0f || getAlpha() != 1.0f; };
|
||||||
|
virtual bool getIsVisibleInSecondaryCamera() const { return false; }
|
||||||
|
|
||||||
xColor getColor();
|
xColor getColor();
|
||||||
float getAlpha();
|
float getAlpha();
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,11 @@ namespace render {
|
||||||
builder.withInvisible();
|
builder.withInvisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.withTagBits(render::ItemKey::TAG_BITS_0); // Only draw overlays in main view
|
uint32_t viewTaskBits = overlay->isVisibleInSecondaryCamera() ?
|
||||||
|
render::ItemKey::TAG_BITS_ALL : // draw in all views
|
||||||
|
render::ItemKey::TAG_BITS_0; // only the main view
|
||||||
|
|
||||||
|
builder.withTagBits(viewTaskBits);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue