mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 19:21:16 +02:00
Update scene items on overlay3d edits
This commit is contained in:
parent
01309ffd5f
commit
5d1aedf707
3 changed files with 23 additions and 4 deletions
|
@ -229,5 +229,6 @@ bool Overlay::addToScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene
|
||||||
|
|
||||||
void Overlay::removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
void Overlay::removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||||
pendingChanges.removeItem(_renderItemID);
|
pendingChanges.removeItem(_renderItemID);
|
||||||
|
_renderItemID = render::Item::INVALID_ITEM_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -208,9 +208,7 @@ unsigned int Overlays::addOverlay(Overlay::Pointer overlay) {
|
||||||
|
|
||||||
render::ScenePointer scene = qApp->getMain3DScene();
|
render::ScenePointer scene = qApp->getMain3DScene();
|
||||||
render::PendingChanges pendingChanges;
|
render::PendingChanges pendingChanges;
|
||||||
|
|
||||||
overlay->addToScene(overlay, scene, pendingChanges);
|
overlay->addToScene(overlay, scene, pendingChanges);
|
||||||
|
|
||||||
scene->enqueuePendingChanges(pendingChanges);
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -244,18 +242,35 @@ bool Overlays::editOverlay(unsigned int id, const QScriptValue& properties) {
|
||||||
auto overlay3D = std::static_pointer_cast<Base3DOverlay>(thisOverlay);
|
auto overlay3D = std::static_pointer_cast<Base3DOverlay>(thisOverlay);
|
||||||
|
|
||||||
bool oldDrawOnHUD = overlay3D->getDrawOnHUD();
|
bool oldDrawOnHUD = overlay3D->getDrawOnHUD();
|
||||||
thisOverlay->setProperties(properties);
|
render::ItemKey oldItemKey = render::payloadGetKey(thisOverlay);
|
||||||
bool drawOnHUD = overlay3D->getDrawOnHUD();
|
|
||||||
|
|
||||||
|
thisOverlay->setProperties(properties);
|
||||||
|
|
||||||
|
render::ScenePointer scene = qApp->getMain3DScene();
|
||||||
|
render::PendingChanges pendingChanges;
|
||||||
|
auto itemID = thisOverlay->getRenderItemID();
|
||||||
|
|
||||||
|
bool drawOnHUD = overlay3D->getDrawOnHUD();
|
||||||
|
render::ItemKey itemKey = render::payloadGetKey(thisOverlay);
|
||||||
if (drawOnHUD != oldDrawOnHUD) {
|
if (drawOnHUD != oldDrawOnHUD) {
|
||||||
if (drawOnHUD) {
|
if (drawOnHUD) {
|
||||||
_overlaysWorld.remove(id);
|
_overlaysWorld.remove(id);
|
||||||
_overlaysHUD[id] = thisOverlay;
|
_overlaysHUD[id] = thisOverlay;
|
||||||
|
if (itemID != render::Item::INVALID_ITEM_ID) {
|
||||||
|
thisOverlay->removeFromScene(thisOverlay, scene, pendingChanges);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_overlaysHUD.remove(id);
|
_overlaysHUD.remove(id);
|
||||||
_overlaysWorld[id] = thisOverlay;
|
_overlaysWorld[id] = thisOverlay;
|
||||||
|
thisOverlay->addToScene(thisOverlay, scene, pendingChanges);
|
||||||
|
}
|
||||||
|
} else if (itemKey != oldItemKey && !drawOnHUD) {
|
||||||
|
if (itemID != render::Item::INVALID_ITEM_ID) {
|
||||||
|
pendingChanges.resortItem(itemID, oldItemKey, itemKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
} else {
|
} else {
|
||||||
thisOverlay->setProperties(properties);
|
thisOverlay->setProperties(properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,10 @@ public:
|
||||||
bool isSmall() const { return _flags[SMALLER]; }
|
bool isSmall() const { return _flags[SMALLER]; }
|
||||||
void setSmaller(bool smaller) { (smaller ? _flags.set(SMALLER) : _flags.reset(SMALLER)); }
|
void setSmaller(bool smaller) { (smaller ? _flags.set(SMALLER) : _flags.reset(SMALLER)); }
|
||||||
|
|
||||||
|
bool operator==(const ItemKey& key) { return (_flags == key._flags); }
|
||||||
|
bool operator!=(const ItemKey& key) { return (_flags != key._flags); }
|
||||||
};
|
};
|
||||||
|
using ItemKeys = std::vector<ItemKey>;
|
||||||
|
|
||||||
inline QDebug operator<<(QDebug debug, const ItemKey& itemKey) {
|
inline QDebug operator<<(QDebug debug, const ItemKey& itemKey) {
|
||||||
debug << "[ItemKey: isOpaque:" << itemKey.isOpaque()
|
debug << "[ItemKey: isOpaque:" << itemKey.isOpaque()
|
||||||
|
|
Loading…
Reference in a new issue