mirror of
https://github.com/overte-org/overte.git
synced 2025-04-14 20:08:56 +02:00
Merge pull request #4174 from huffman/delete-entity
Update deleteEntity to obey entity locked property
This commit is contained in:
commit
a46fda3749
2 changed files with 53 additions and 6 deletions
|
@ -145,15 +145,26 @@ void EntityScriptingInterface::deleteEntity(EntityItemID entityID) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shouldDelete = true;
|
||||||
|
|
||||||
// If we have a local entity tree set, then also update it.
|
// If we have a local entity tree set, then also update it.
|
||||||
if (_entityTree) {
|
if (_entityTree) {
|
||||||
_entityTree->lockForWrite();
|
_entityTree->lockForWrite();
|
||||||
_entityTree->deleteEntity(entityID);
|
|
||||||
|
EntityItem* entity = const_cast<EntityItem*>(_entityTree->findEntityByEntityItemID(actualID));
|
||||||
|
if (entity) {
|
||||||
|
if (entity->getLocked()) {
|
||||||
|
shouldDelete = false;
|
||||||
|
} else {
|
||||||
|
_entityTree->deleteEntity(entityID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_entityTree->unlock();
|
_entityTree->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if at this point, we know the id, send the update to the entity server
|
// if at this point, we know the id, and we should still delete the entity, send the update to the entity server
|
||||||
if (entityID.isKnownID) {
|
if (shouldDelete && entityID.isKnownID) {
|
||||||
getEntityPacketSender()->queueEraseEntityMessage(entityID);
|
getEntityPacketSender()->queueEraseEntityMessage(entityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,6 +229,23 @@ void EntityTree::setSimulation(EntitySimulation* simulation) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTree::deleteEntity(const EntityItemID& entityID) {
|
void EntityTree::deleteEntity(const EntityItemID& entityID) {
|
||||||
|
EntityTreeElement* containingElement = getContainingElement(entityID);
|
||||||
|
if (!containingElement) {
|
||||||
|
qDebug() << "UNEXPECTED!!!! EntityTree::deleteEntity() entityID doesn't exist!!! entityID=" << entityID;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityItem* existingEntity = containingElement->getEntityWithEntityItemID(entityID);
|
||||||
|
if (!existingEntity) {
|
||||||
|
qDebug() << "UNEXPECTED!!!! don't call EntityTree::deleteEntity() on entity items that don't exist. entityID=" << entityID;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingEntity->getLocked()) {
|
||||||
|
qDebug() << "ERROR! EntityTree::deleteEntity() trying to delete locked entity. entityID=" << entityID;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
emit deletingEntity(entityID);
|
emit deletingEntity(entityID);
|
||||||
|
|
||||||
// NOTE: callers must lock the tree before using this method
|
// NOTE: callers must lock the tree before using this method
|
||||||
|
@ -242,14 +259,33 @@ void EntityTree::deleteEntities(QSet<EntityItemID> entityIDs) {
|
||||||
// NOTE: callers must lock the tree before using this method
|
// NOTE: callers must lock the tree before using this method
|
||||||
DeleteEntityOperator theOperator(this);
|
DeleteEntityOperator theOperator(this);
|
||||||
foreach(const EntityItemID& entityID, entityIDs) {
|
foreach(const EntityItemID& entityID, entityIDs) {
|
||||||
|
EntityTreeElement* containingElement = getContainingElement(entityID);
|
||||||
|
if (!containingElement) {
|
||||||
|
qDebug() << "UNEXPECTED!!!! EntityTree::deleteEntities() entityID doesn't exist!!! entityID=" << entityID;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityItem* existingEntity = containingElement->getEntityWithEntityItemID(entityID);
|
||||||
|
if (!existingEntity) {
|
||||||
|
qDebug() << "UNEXPECTED!!!! don't call EntityTree::deleteEntities() on entity items that don't exist. entityID=" << entityID;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingEntity->getLocked()) {
|
||||||
|
qDebug() << "ERROR! EntityTree::deleteEntities() trying to delete locked entity. entityID=" << entityID;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// tell our delete operator about this entityID
|
// tell our delete operator about this entityID
|
||||||
theOperator.addEntityIDToDeleteList(entityID);
|
theOperator.addEntityIDToDeleteList(entityID);
|
||||||
emit deletingEntity(entityID);
|
emit deletingEntity(entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
recurseTreeWithOperator(&theOperator);
|
if (theOperator.getEntities().size() > 0) {
|
||||||
processRemovedEntities(theOperator);
|
recurseTreeWithOperator(&theOperator);
|
||||||
_isDirty = true;
|
processRemovedEntities(theOperator);
|
||||||
|
_isDirty = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTree::processRemovedEntities(const DeleteEntityOperator& theOperator) {
|
void EntityTree::processRemovedEntities(const DeleteEntityOperator& theOperator) {
|
||||||
|
|
Loading…
Reference in a new issue