mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
Add resort for scene item keys
This commit is contained in:
parent
452b6f4e59
commit
01309ffd5f
2 changed files with 25 additions and 1 deletions
|
@ -62,6 +62,12 @@ void PendingChanges::resetItem(ItemID id, const PayloadPointer& payload) {
|
||||||
_resetPayloads.push_back(payload);
|
_resetPayloads.push_back(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PendingChanges::resortItem(ItemID id, ItemKey oldKey, ItemKey newKey) {
|
||||||
|
_resortItems.push_back(id);
|
||||||
|
_resortOldKeys.push_back(oldKey);
|
||||||
|
_resortNewKeys.push_back(newKey);
|
||||||
|
}
|
||||||
|
|
||||||
void PendingChanges::removeItem(ItemID id) {
|
void PendingChanges::removeItem(ItemID id) {
|
||||||
_removedItems.push_back(id);
|
_removedItems.push_back(id);
|
||||||
}
|
}
|
||||||
|
@ -74,6 +80,9 @@ void PendingChanges::updateItem(ItemID id, const UpdateFunctorPointer& functor)
|
||||||
void PendingChanges::merge(PendingChanges& changes) {
|
void PendingChanges::merge(PendingChanges& changes) {
|
||||||
_resetItems.insert(_resetItems.end(), changes._resetItems.begin(), changes._resetItems.end());
|
_resetItems.insert(_resetItems.end(), changes._resetItems.begin(), changes._resetItems.end());
|
||||||
_resetPayloads.insert(_resetPayloads.end(), changes._resetPayloads.begin(), changes._resetPayloads.end());
|
_resetPayloads.insert(_resetPayloads.end(), changes._resetPayloads.begin(), changes._resetPayloads.end());
|
||||||
|
_resortItems.insert(_resortItems.end(), changes._resortItems.begin(), changes._resortItems.end());
|
||||||
|
_resortOldKeys.insert(_resortOldKeys.end(), changes._resortOldKeys.begin(), changes._resortOldKeys.end());
|
||||||
|
_resortNewKeys.insert(_resortNewKeys.end(), changes._resortNewKeys.begin(), changes._resortNewKeys.end());
|
||||||
_removedItems.insert(_removedItems.end(), changes._removedItems.begin(), changes._removedItems.end());
|
_removedItems.insert(_removedItems.end(), changes._removedItems.begin(), changes._removedItems.end());
|
||||||
_updatedItems.insert(_updatedItems.end(), changes._updatedItems.begin(), changes._updatedItems.end());
|
_updatedItems.insert(_updatedItems.end(), changes._updatedItems.begin(), changes._updatedItems.end());
|
||||||
_updateFunctors.insert(_updateFunctors.end(), changes._updateFunctors.begin(), changes._updateFunctors.end());
|
_updateFunctors.insert(_updateFunctors.end(), changes._updateFunctors.begin(), changes._updateFunctors.end());
|
||||||
|
@ -124,6 +133,7 @@ void Scene::processPendingChangesQueue() {
|
||||||
// capture anything coming from the pendingChanges
|
// capture anything coming from the pendingChanges
|
||||||
resetItems(consolidatedPendingChanges._resetItems, consolidatedPendingChanges._resetPayloads);
|
resetItems(consolidatedPendingChanges._resetItems, consolidatedPendingChanges._resetPayloads);
|
||||||
updateItems(consolidatedPendingChanges._updatedItems, consolidatedPendingChanges._updateFunctors);
|
updateItems(consolidatedPendingChanges._updatedItems, consolidatedPendingChanges._updateFunctors);
|
||||||
|
resortItems(consolidatedPendingChanges._resortItems, consolidatedPendingChanges._resortOldKeys, consolidatedPendingChanges._resortNewKeys);
|
||||||
removeItems(consolidatedPendingChanges._removedItems);
|
removeItems(consolidatedPendingChanges._removedItems);
|
||||||
|
|
||||||
// ready to go back to rendering activities
|
// ready to go back to rendering activities
|
||||||
|
@ -156,6 +166,15 @@ void Scene::resetItems(const ItemIDs& ids, Payloads& payloads) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scene::resortItems(const ItemIDs& ids, ItemKeys& oldKeys, ItemKeys& newKeys) {
|
||||||
|
auto resortID = ids.begin();
|
||||||
|
auto oldKey = oldKeys.begin();
|
||||||
|
auto newKey = newKeys.begin();
|
||||||
|
for (; resortID != ids.end(); resortID++, oldKey++, newKey++) {
|
||||||
|
_masterBucketMap.reset(*resortID, *oldKey, *newKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Scene::removeItems(const ItemIDs& ids) {
|
void Scene::removeItems(const ItemIDs& ids) {
|
||||||
for (auto removedID :ids) {
|
for (auto removedID :ids) {
|
||||||
// Access the true item
|
// Access the true item
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
~PendingChanges() {}
|
~PendingChanges() {}
|
||||||
|
|
||||||
void resetItem(ItemID id, const PayloadPointer& payload);
|
void resetItem(ItemID id, const PayloadPointer& payload);
|
||||||
|
void resortItem(ItemID id, ItemKey oldKey, ItemKey newKey);
|
||||||
void removeItem(ItemID id);
|
void removeItem(ItemID id);
|
||||||
|
|
||||||
template <class T> void updateItem(ItemID id, std::function<void(T&)> func) {
|
template <class T> void updateItem(ItemID id, std::function<void(T&)> func) {
|
||||||
|
@ -50,8 +51,11 @@ public:
|
||||||
|
|
||||||
void merge(PendingChanges& changes);
|
void merge(PendingChanges& changes);
|
||||||
|
|
||||||
Payloads _resetPayloads;
|
|
||||||
ItemIDs _resetItems;
|
ItemIDs _resetItems;
|
||||||
|
Payloads _resetPayloads;
|
||||||
|
ItemIDs _resortItems;
|
||||||
|
ItemKeys _resortOldKeys;
|
||||||
|
ItemKeys _resortNewKeys;
|
||||||
ItemIDs _removedItems;
|
ItemIDs _removedItems;
|
||||||
ItemIDs _updatedItems;
|
ItemIDs _updatedItems;
|
||||||
UpdateFunctors _updateFunctors;
|
UpdateFunctors _updateFunctors;
|
||||||
|
@ -107,6 +111,7 @@ protected:
|
||||||
|
|
||||||
|
|
||||||
void resetItems(const ItemIDs& ids, Payloads& payloads);
|
void resetItems(const ItemIDs& ids, Payloads& payloads);
|
||||||
|
void resortItems(const ItemIDs& ids, ItemKeys& oldKeys, ItemKeys& newKeys);
|
||||||
void removeItems(const ItemIDs& ids);
|
void removeItems(const ItemIDs& ids);
|
||||||
void updateItems(const ItemIDs& ids, UpdateFunctors& functors);
|
void updateItems(const ItemIDs& ids, UpdateFunctors& functors);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue