mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 16:41:02 +02:00
Merge pull request #7503 from sethalves/lock-tree-before-moving-av-children
lock entity-tree before moving entity-children of avatars
This commit is contained in:
commit
92981a6660
1 changed files with 25 additions and 23 deletions
|
@ -373,32 +373,34 @@ void MyAvatar::simulate(float deltaTime) {
|
||||||
EntityTreeRenderer* entityTreeRenderer = qApp->getEntities();
|
EntityTreeRenderer* entityTreeRenderer = qApp->getEntities();
|
||||||
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
||||||
if (entityTree) {
|
if (entityTree) {
|
||||||
auto now = usecTimestampNow();
|
entityTree->withWriteLock([&] {
|
||||||
EntityEditPacketSender* packetSender = qApp->getEntityEditPacketSender();
|
auto now = usecTimestampNow();
|
||||||
MovingEntitiesOperator moveOperator(entityTree);
|
EntityEditPacketSender* packetSender = qApp->getEntityEditPacketSender();
|
||||||
forEachDescendant([&](SpatiallyNestablePointer object) {
|
MovingEntitiesOperator moveOperator(entityTree);
|
||||||
// if the queryBox has changed, tell the entity-server
|
forEachDescendant([&](SpatiallyNestablePointer object) {
|
||||||
if (object->computePuffedQueryAACube() && object->getNestableType() == NestableType::Entity) {
|
// if the queryBox has changed, tell the entity-server
|
||||||
EntityItemPointer entity = std::static_pointer_cast<EntityItem>(object);
|
if (object->computePuffedQueryAACube() && object->getNestableType() == NestableType::Entity) {
|
||||||
bool success;
|
EntityItemPointer entity = std::static_pointer_cast<EntityItem>(object);
|
||||||
AACube newCube = entity->getQueryAACube(success);
|
bool success;
|
||||||
if (success) {
|
AACube newCube = entity->getQueryAACube(success);
|
||||||
moveOperator.addEntityToMoveList(entity, newCube);
|
if (success) {
|
||||||
}
|
moveOperator.addEntityToMoveList(entity, newCube);
|
||||||
if (packetSender) {
|
}
|
||||||
EntityItemProperties properties = entity->getProperties();
|
if (packetSender) {
|
||||||
properties.setQueryAACubeDirty();
|
EntityItemProperties properties = entity->getProperties();
|
||||||
properties.setLastEdited(now);
|
properties.setQueryAACubeDirty();
|
||||||
packetSender->queueEditEntityMessage(PacketType::EntityEdit, entity->getID(), properties);
|
properties.setLastEdited(now);
|
||||||
entity->setLastBroadcast(usecTimestampNow());
|
packetSender->queueEditEntityMessage(PacketType::EntityEdit, entity->getID(), properties);
|
||||||
|
entity->setLastBroadcast(usecTimestampNow());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
// also update the position of children in our local octree
|
||||||
|
if (moveOperator.hasMovingEntities()) {
|
||||||
|
PerformanceTimer perfTimer("recurseTreeWithOperator");
|
||||||
|
entityTree->recurseTreeWithOperator(&moveOperator);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// also update the position of children in our local octree
|
|
||||||
if (moveOperator.hasMovingEntities()) {
|
|
||||||
PerformanceTimer perfTimer("recurseTreeWithOperator");
|
|
||||||
entityTree->recurseTreeWithOperator(&moveOperator);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue