Update scene items on overlay3d edits

This commit is contained in:
Zach Pomerantz 2016-02-11 14:09:06 -08:00
parent 01309ffd5f
commit 5d1aedf707
3 changed files with 23 additions and 4 deletions

View file

@ -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;
}

View file

@ -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);
}

View file

@ -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()