diff --git a/libraries/render/src/render/DrawStatus.cpp b/libraries/render/src/render/DrawStatus.cpp index 0484c0c125..35e482483d 100644 --- a/libraries/render/src/render/DrawStatus.cpp +++ b/libraries/render/src/render/DrawStatus.cpp @@ -17,6 +17,8 @@ #include #include +#include "TransitionStage.h" + #include #include @@ -142,11 +144,39 @@ void DrawStatus::run(const RenderContextPointer& renderContext, const Input& inp auto& value = (vec4Num == 0 ? itemStatus[nbItems].first : itemStatus[nbItems].second); Item::Status::Value status; - status.setColor(Item::Status::Value::CYAN); - status.setIcon((unsigned char)Item::Status::Icon::SIMULATION_OWNER); - if (itemScene.getTransitionId() != INVALID_INDEX) { + auto transitionID = itemScene.getTransitionId(); + if (transitionID != INVALID_INDEX) { // We have a transition. Show this icon. status.setScale(1.0f); + // Is this a valid transition ID according to FadeJob? + auto& transitionStage = scene->getStage(TransitionStage::getName()); + if (transitionStage) { + if (transitionStage->isTransitionUsed(transitionID)) { + // Valid, active transition + status.setColor(Item::Status::Value::CYAN); + } else { + // Render item has a defined transition ID, but it's unallocated and isn't being processed + status.setColor(Item::Status::Value::RED); + } + // Set icon based on transition type + auto& transition = transitionStage->getTransition(transitionID); + switch (transition.eventType) { + case Transition::Type::USER_ENTER_DOMAIN: + case Transition::ELEMENT_ENTER_DOMAIN: + status.setIcon((unsigned char)Item::Status::Icon::PACKET_RECEIVED); + break; + case Transition::Type::USER_LEAVE_DOMAIN: + case Transition::ELEMENT_LEAVE_DOMAIN: + status.setIcon((unsigned char)Item::Status::Icon::PACKET_SENT); + break; + default: + status.setIcon((unsigned char)Item::Status::Icon::HAS_ACTIONS); + break; + } + } else { + // No way to determine transition + status.setScale(0.0f); + } } else { status.setScale(0.0f); } diff --git a/libraries/render/src/render/TransitionStage.h b/libraries/render/src/render/TransitionStage.h index 1d10a5dedb..abfdca9a06 100644 --- a/libraries/render/src/render/TransitionStage.h +++ b/libraries/render/src/render/TransitionStage.h @@ -30,7 +30,7 @@ namespace render { static bool isIndexInvalid(Index index) { return index == INVALID_INDEX; } - bool checkTransitionId(Index index) const { return _transitions.checkIndex(index); } + bool isTransitionUsed(Index index) const { return _transitions.checkIndex(index) && !_transitions.isElementFreed(index); } const Transition& getTransition(Index TransitionId) const { return _transitions.get(TransitionId); }