mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 17:54:00 +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) {
|
||||
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::PendingChanges pendingChanges;
|
||||
|
||||
overlay->addToScene(overlay, scene, pendingChanges);
|
||||
|
||||
scene->enqueuePendingChanges(pendingChanges);
|
||||
}
|
||||
} else {
|
||||
|
@ -244,18 +242,35 @@ bool Overlays::editOverlay(unsigned int id, const QScriptValue& properties) {
|
|||
auto overlay3D = std::static_pointer_cast<Base3DOverlay>(thisOverlay);
|
||||
|
||||
bool oldDrawOnHUD = overlay3D->getDrawOnHUD();
|
||||
thisOverlay->setProperties(properties);
|
||||
bool drawOnHUD = overlay3D->getDrawOnHUD();
|
||||
render::ItemKey oldItemKey = render::payloadGetKey(thisOverlay);
|
||||
|
||||
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) {
|
||||
_overlaysWorld.remove(id);
|
||||
_overlaysHUD[id] = thisOverlay;
|
||||
if (itemID != render::Item::INVALID_ITEM_ID) {
|
||||
thisOverlay->removeFromScene(thisOverlay, scene, pendingChanges);
|
||||
}
|
||||
} else {
|
||||
_overlaysHUD.remove(id);
|
||||
_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 {
|
||||
thisOverlay->setProperties(properties);
|
||||
}
|
||||
|
|
|
@ -117,7 +117,10 @@ public:
|
|||
bool isSmall() const { return _flags[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) {
|
||||
debug << "[ItemKey: isOpaque:" << itemKey.isOpaque()
|
||||
|
|
Loading…
Reference in a new issue