From cc4e1683697d9545337eace26a3c1e0054c023ed Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Mon, 10 Jul 2017 16:45:13 +0200 Subject: [PATCH] Working fade again --- .../src/RenderableModelEntityItem.cpp | 22 ++++-------------- .../src/RenderableModelEntityItem.h | 8 +------ libraries/render/src/render/Scene.cpp | 23 ++++++++++++------- 3 files changed, 20 insertions(+), 33 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index b65c8ee49c..320ff1342d 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -242,6 +242,8 @@ bool RenderableModelEntityItem::addToScene(const EntityItemPointer& self, const // note: we don't mind if the model fails to add, we'll retry (in render()) until it succeeds _model->addToScene(scene, transaction, statusGetters); + + transaction.transitionItem(_myMetaItem, render::Transition::ELEMENT_ENTER_LEAVE_DOMAIN); } // we've successfully added _myMetaItem so we always return true @@ -475,6 +477,8 @@ void RenderableModelEntityItem::render(RenderArgs* args) { makeEntityItemStatusGetters(getThisPointer(), statusGetters); _model->addToScene(scene, transaction, statusGetters); + transaction.transitionItem(_myMetaItem, render::Transition::ELEMENT_ENTER_LEAVE_DOMAIN); + scene->enqueueTransaction(transaction); } @@ -490,23 +494,6 @@ ModelPointer RenderableModelEntityItem::getModelNotSafe() { return _model; } -void RenderableModelEntityItem::setModelURLFinished(bool success) { - if (success) { - const render::ScenePointer& scene = AbstractViewStateInterface::instance()->getMain3DScene(); - - if (scene->isAllocatedID(_myMetaItem)) { - render::Transaction transaction; - - const auto& item = scene->getItem(_myMetaItem); - if (!item.exist()) { - qWarning() << "Starting transition on item without payload"; - } - transaction.transitionItem(_myMetaItem, render::Transition::ELEMENT_ENTER_LEAVE_DOMAIN); - scene->enqueueTransaction(transaction); - } - } -} - ModelPointer RenderableModelEntityItem::getModel() { // make sure our renderer is setup if (!_myRenderer) { @@ -524,7 +511,6 @@ ModelPointer RenderableModelEntityItem::getModel() { // If we don't have a model, allocate one *immediately* if (!_model) { _model = _myRenderer->allocateModel(getModelURL(), _myRenderer->getEntityLoadingPriority(*this), this); - QObject::connect(_model.get(), &Model::setURLFinished, this, &RenderableModelEntityItem::setModelURLFinished); _needsInitialSimulation = true; // If we need to change URLs, update it *after rendering* (to avoid access violations) } else if (QUrl(getModelURL()) != _model->getURL()) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 6586678906..37d08a044a 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -12,7 +12,6 @@ #ifndef hifi_RenderableModelEntityItem_h #define hifi_RenderableModelEntityItem_h -#include #include #include @@ -25,8 +24,7 @@ class Model; class EntityTreeRenderer; -class RenderableModelEntityItem : public QObject, public ModelEntityItem, RenderableEntityInterface { - Q_OBJECT +class RenderableModelEntityItem : public ModelEntityItem, RenderableEntityInterface { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); @@ -121,10 +119,6 @@ public: return _animation; } -public slots: - - void setModelURLFinished(bool success); - private: QVariantMap parseTexturesToMap(QString textures); void remapTextures(); diff --git a/libraries/render/src/render/Scene.cpp b/libraries/render/src/render/Scene.cpp index 2c55658657..d6606bcd68 100644 --- a/libraries/render/src/render/Scene.cpp +++ b/libraries/render/src/render/Scene.cpp @@ -238,17 +238,24 @@ void Scene::transitionItems(const ItemIDs& ids, const TransitionTypes& types) { auto transitionStage = getStage(TransitionStage::getName()); for (auto itemId : ids) { - auto transitionId = INVALID_INDEX; - - if (*transitionType != Transition::NONE) { - transitionId = transitionStage->addTransition(itemId, *transitionType); - } - else { + // Access the true item + const auto& item = _items[itemId]; + if (item.exist()) { + auto transitionId = INVALID_INDEX; const auto& item = _items[itemId]; - transitionStage->removeTransition(item.getTransitionId()); + + // Remove pre-existing transition, if need be + if (item.getTransitionId() == render::TransitionStage::INVALID_INDEX) { + transitionStage->removeTransition(item.getTransitionId()); + } + // Add a new one. + if (*transitionType != Transition::NONE) { + transitionId = transitionStage->addTransition(itemId, *transitionType); + } + + setItemTransition(itemId, transitionId); } - setItemTransition(itemId, transitionId); // next loop transitionType++; }