mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 05:00:20 +02:00
Change semantic for removing transitions
This commit is contained in:
parent
833946ceb3
commit
faf5db5476
2 changed files with 25 additions and 10 deletions
|
@ -36,7 +36,7 @@ void Transaction::resetTransitionOnItem(ItemID id, Transition::Type transition,
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transaction::removeTransitionFromItem(ItemID id) {
|
void Transaction::removeTransitionFromItem(ItemID id) {
|
||||||
_resetTransitions.emplace_back(id, Transition::NONE, render::Item::INVALID_ITEM_ID);
|
_removeTransitions.emplace_back(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transaction::queryTransitionOnItem(ItemID id, TransitionQueryFunc func) {
|
void Transaction::queryTransitionOnItem(ItemID id, TransitionQueryFunc func) {
|
||||||
|
@ -73,6 +73,7 @@ void Transaction::reserve(const std::vector<Transaction>& transactionContainer)
|
||||||
size_t updatedItemsCount = 0;
|
size_t updatedItemsCount = 0;
|
||||||
size_t resetSelectionsCount = 0;
|
size_t resetSelectionsCount = 0;
|
||||||
size_t resetTransitionsCount = 0;
|
size_t resetTransitionsCount = 0;
|
||||||
|
size_t removeTransitionsCount = 0;
|
||||||
size_t queriedTransitionsCount = 0;
|
size_t queriedTransitionsCount = 0;
|
||||||
size_t transitionFinishedOperatorsCount = 0;
|
size_t transitionFinishedOperatorsCount = 0;
|
||||||
size_t highlightResetsCount = 0;
|
size_t highlightResetsCount = 0;
|
||||||
|
@ -85,6 +86,7 @@ void Transaction::reserve(const std::vector<Transaction>& transactionContainer)
|
||||||
updatedItemsCount += transaction._updatedItems.size();
|
updatedItemsCount += transaction._updatedItems.size();
|
||||||
resetSelectionsCount += transaction._resetSelections.size();
|
resetSelectionsCount += transaction._resetSelections.size();
|
||||||
resetTransitionsCount += transaction._resetTransitions.size();
|
resetTransitionsCount += transaction._resetTransitions.size();
|
||||||
|
removeTransitionsCount += transaction._removeTransitions.size();
|
||||||
queriedTransitionsCount += transaction._queriedTransitions.size();
|
queriedTransitionsCount += transaction._queriedTransitions.size();
|
||||||
transitionFinishedOperatorsCount += transaction._transitionFinishedOperators.size();
|
transitionFinishedOperatorsCount += transaction._transitionFinishedOperators.size();
|
||||||
highlightResetsCount += transaction._highlightResets.size();
|
highlightResetsCount += transaction._highlightResets.size();
|
||||||
|
@ -97,6 +99,7 @@ void Transaction::reserve(const std::vector<Transaction>& transactionContainer)
|
||||||
_updatedItems.reserve(updatedItemsCount);
|
_updatedItems.reserve(updatedItemsCount);
|
||||||
_resetSelections.reserve(resetSelectionsCount);
|
_resetSelections.reserve(resetSelectionsCount);
|
||||||
_resetTransitions.reserve(resetTransitionsCount);
|
_resetTransitions.reserve(resetTransitionsCount);
|
||||||
|
_removeTransitions.reserve(removeTransitionsCount);
|
||||||
_queriedTransitions.reserve(queriedTransitionsCount);
|
_queriedTransitions.reserve(queriedTransitionsCount);
|
||||||
_transitionFinishedOperators.reserve(transitionFinishedOperatorsCount);
|
_transitionFinishedOperators.reserve(transitionFinishedOperatorsCount);
|
||||||
_highlightResets.reserve(highlightResetsCount);
|
_highlightResets.reserve(highlightResetsCount);
|
||||||
|
@ -141,6 +144,7 @@ void Transaction::merge(Transaction&& transaction) {
|
||||||
moveElements(_updatedItems, transaction._updatedItems);
|
moveElements(_updatedItems, transaction._updatedItems);
|
||||||
moveElements(_resetSelections, transaction._resetSelections);
|
moveElements(_resetSelections, transaction._resetSelections);
|
||||||
moveElements(_resetTransitions, transaction._resetTransitions);
|
moveElements(_resetTransitions, transaction._resetTransitions);
|
||||||
|
moveElements(_removeTransitions, transaction._removeTransitions);
|
||||||
moveElements(_queriedTransitions, transaction._queriedTransitions);
|
moveElements(_queriedTransitions, transaction._queriedTransitions);
|
||||||
moveElements(_transitionFinishedOperators, transaction._transitionFinishedOperators);
|
moveElements(_transitionFinishedOperators, transaction._transitionFinishedOperators);
|
||||||
moveElements(_highlightResets, transaction._highlightResets);
|
moveElements(_highlightResets, transaction._highlightResets);
|
||||||
|
@ -154,6 +158,7 @@ void Transaction::merge(const Transaction& transaction) {
|
||||||
copyElements(_updatedItems, transaction._updatedItems);
|
copyElements(_updatedItems, transaction._updatedItems);
|
||||||
copyElements(_resetSelections, transaction._resetSelections);
|
copyElements(_resetSelections, transaction._resetSelections);
|
||||||
copyElements(_resetTransitions, transaction._resetTransitions);
|
copyElements(_resetTransitions, transaction._resetTransitions);
|
||||||
|
copyElements(_removeTransitions, transaction._removeTransitions);
|
||||||
copyElements(_queriedTransitions, transaction._queriedTransitions);
|
copyElements(_queriedTransitions, transaction._queriedTransitions);
|
||||||
copyElements(_transitionFinishedOperators, transaction._transitionFinishedOperators);
|
copyElements(_transitionFinishedOperators, transaction._transitionFinishedOperators);
|
||||||
copyElements(_highlightResets, transaction._highlightResets);
|
copyElements(_highlightResets, transaction._highlightResets);
|
||||||
|
@ -167,6 +172,7 @@ void Transaction::clear() {
|
||||||
_updatedItems.clear();
|
_updatedItems.clear();
|
||||||
_resetSelections.clear();
|
_resetSelections.clear();
|
||||||
_resetTransitions.clear();
|
_resetTransitions.clear();
|
||||||
|
_removeTransitions.clear();
|
||||||
_queriedTransitions.clear();
|
_queriedTransitions.clear();
|
||||||
_transitionFinishedOperators.clear();
|
_transitionFinishedOperators.clear();
|
||||||
_highlightResets.clear();
|
_highlightResets.clear();
|
||||||
|
@ -269,6 +275,7 @@ void Scene::processTransactionFrame(const Transaction& transaction) {
|
||||||
|
|
||||||
// add transitions
|
// add transitions
|
||||||
resetTransitionItems(transaction._resetTransitions);
|
resetTransitionItems(transaction._resetTransitions);
|
||||||
|
removeTransitionItems(transaction._removeTransitions);
|
||||||
queryTransitionItems(transaction._queriedTransitions);
|
queryTransitionItems(transaction._queriedTransitions);
|
||||||
resetTransitionFinishedOperator(transaction._transitionFinishedOperators);
|
resetTransitionFinishedOperator(transaction._transitionFinishedOperators);
|
||||||
|
|
||||||
|
@ -321,7 +328,7 @@ void Scene::removeItems(const Transaction::Removes& transactions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the transition to prevent updating it for nothing
|
// Remove the transition to prevent updating it for nothing
|
||||||
resetItemTransition(removedID);
|
removeItemTransition(removedID);
|
||||||
|
|
||||||
// Kill it
|
// Kill it
|
||||||
item.kill();
|
item.kill();
|
||||||
|
@ -390,12 +397,7 @@ void Scene::resetTransitionItems(const Transaction::TransitionResets& transactio
|
||||||
|
|
||||||
// Remove pre-existing transition, if need be
|
// Remove pre-existing transition, if need be
|
||||||
if (!TransitionStage::isIndexInvalid(transitionId)) {
|
if (!TransitionStage::isIndexInvalid(transitionId)) {
|
||||||
// Only remove if:
|
removeItemTransition(itemId);
|
||||||
// transitioning to something other than none or we're transitioning to none from ELEMENT_LEAVE_DOMAIN or USER_LEAVE_DOMAIN
|
|
||||||
const auto& oldTransitionType = transitionStage->getTransition(transitionId).eventType;
|
|
||||||
if (transitionType != oldTransitionType) {
|
|
||||||
resetItemTransition(itemId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a new one.
|
// Add a new one.
|
||||||
|
@ -409,6 +411,18 @@ void Scene::resetTransitionItems(const Transaction::TransitionResets& transactio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scene::removeTransitionItems(const Transaction::TransitionRemoves& transactions) {
|
||||||
|
for (auto& itemId : transactions) {
|
||||||
|
// Access the true item
|
||||||
|
const auto& item = _items[itemId];
|
||||||
|
auto transitionId = item.getTransitionId();
|
||||||
|
|
||||||
|
if (!TransitionStage::isIndexInvalid(transitionId)) {
|
||||||
|
removeItemTransition(itemId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Scene::queryTransitionItems(const Transaction::TransitionQueries& transactions) {
|
void Scene::queryTransitionItems(const Transaction::TransitionQueries& transactions) {
|
||||||
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
||||||
|
|
||||||
|
@ -535,7 +549,7 @@ void Scene::setItemTransition(ItemID itemId, Index transitionId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scene::resetItemTransition(ItemID itemId) {
|
void Scene::removeItemTransition(ItemID itemId) {
|
||||||
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
||||||
if (!transitionStage) {
|
if (!transitionStage) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -192,7 +192,7 @@ public:
|
||||||
void resetStage(const Stage::Name& name, const StagePointer& stage);
|
void resetStage(const Stage::Name& name, const StagePointer& stage);
|
||||||
|
|
||||||
void setItemTransition(ItemID id, Index transitionId);
|
void setItemTransition(ItemID id, Index transitionId);
|
||||||
void resetItemTransition(ItemID id);
|
void removeItemTransition(ItemID id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -224,6 +224,7 @@ protected:
|
||||||
void updateItems(const Transaction::Updates& transactions);
|
void updateItems(const Transaction::Updates& transactions);
|
||||||
|
|
||||||
void resetTransitionItems(const Transaction::TransitionResets& transactions);
|
void resetTransitionItems(const Transaction::TransitionResets& transactions);
|
||||||
|
void removeTransitionItems(const Transaction::TransitionRemoves& transactions);
|
||||||
void queryTransitionItems(const Transaction::TransitionQueries& transactions);
|
void queryTransitionItems(const Transaction::TransitionQueries& transactions);
|
||||||
|
|
||||||
void resetHighlights(const Transaction::HighlightResets& transactions);
|
void resetHighlights(const Transaction::HighlightResets& transactions);
|
||||||
|
|
Loading…
Reference in a new issue