From e77189fb1bbfc6324c3ac42daf519be5b9ea2e8a Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 20 Jan 2016 17:09:37 -0800 Subject: [PATCH 1/3] keep reference to removed entity until next frame --- libraries/physics/src/PhysicalEntitySimulation.cpp | 4 +++- libraries/physics/src/PhysicalEntitySimulation.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index 9ef27aaf53..a677cfae4d 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -142,6 +142,7 @@ void PhysicalEntitySimulation::clearEntitiesInternal() { // finally clear all lists maintained by this class _physicalObjects.clear(); _entitiesToRemoveFromPhysics.clear(); + _entitiesToRelease.clear(); _entitiesToAddToPhysics.clear(); _pendingChanges.clear(); _outgoingChanges.clear(); @@ -157,6 +158,7 @@ void PhysicalEntitySimulation::prepareEntityForDelete(EntityItemPointer entity) // end EntitySimulation overrides void PhysicalEntitySimulation::getObjectsToRemoveFromPhysics(VectorOfMotionStates& result) { + _entitiesToRelease.clear(); result.clear(); QMutexLocker lock(&_mutex); for (auto entity: _entitiesToRemoveFromPhysics) { @@ -171,7 +173,7 @@ void PhysicalEntitySimulation::getObjectsToRemoveFromPhysics(VectorOfMotionState _entitiesToDelete.insert(entity); } } - _entitiesToRemoveFromPhysics.clear(); + _entitiesToRemoveFromPhysics.swap(_entitiesToRelease); } void PhysicalEntitySimulation::getObjectsToAddToPhysics(VectorOfMotionStates& result) { diff --git a/libraries/physics/src/PhysicalEntitySimulation.h b/libraries/physics/src/PhysicalEntitySimulation.h index bc80d50d0a..1c783d2f31 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.h +++ b/libraries/physics/src/PhysicalEntitySimulation.h @@ -60,6 +60,7 @@ public: private: SetOfEntities _entitiesToRemoveFromPhysics; + SetOfEntities _entitiesToRelease; SetOfEntities _entitiesToAddToPhysics; SetOfEntityMotionStates _pendingChanges; // EntityMotionStates already in PhysicsEngine that need their physics changed @@ -70,7 +71,7 @@ private: PhysicsEnginePointer _physicsEngine = nullptr; EntityEditPacketSender* _entityPacketSender = nullptr; - uint32_t _lastStepSendPackets = 0; + uint32_t _lastStepSendPackets { 0 }; }; From e63ac0312376e63ba724ae01d828e4883b808686 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 21 Jan 2016 15:26:52 -0800 Subject: [PATCH 2/3] Fix asset server data migration --- assignment-client/src/assets/AssetServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-client/src/assets/AssetServer.cpp b/assignment-client/src/assets/AssetServer.cpp index c0862e3f63..4416281ab4 100644 --- a/assignment-client/src/assets/AssetServer.cpp +++ b/assignment-client/src/assets/AssetServer.cpp @@ -56,7 +56,7 @@ void AssetServer::run() { if (!_resourcesDirectory.exists()) { qDebug() << "Asset resources directory not found, searching for existing asset resources"; QString oldDataDirectory = QCoreApplication::applicationDirPath(); - auto oldResourcesDirectory = QDir(oldDataDirectory).filePath(RESOURCES_PATH); + auto oldResourcesDirectory = QDir(oldDataDirectory).filePath("resources/" + RESOURCES_PATH); if (QDir(oldResourcesDirectory).exists()) { qDebug() << "Existing assets found in " << oldResourcesDirectory << ", copying to " << _resourcesDirectory; From 996f3f5df75d079e010a3c9797094adce5dbcd11 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 21 Jan 2016 15:43:38 -0800 Subject: [PATCH 3/3] Fix entity server data migration to work with default persist filename --- assignment-client/src/octree/OctreeServer.cpp | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 331a6cbe5b..d63e8e6620 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -1145,13 +1145,35 @@ void OctreeServer::domainSettingsRequestComplete() { if (_wantPersist) { // If persist filename does not exist, let's see if there is one beside the application binary // If there is, let's copy it over to our target persist directory - QString oldResourcesDirectory = QCoreApplication::applicationDirPath(); - auto oldPersistPath = QDir(oldResourcesDirectory).absoluteFilePath(_persistFilename); auto persistPath = ServerPathUtils::getDataFilePath("entities/" + QString(_persistFilename)); - if (oldPersistPath != persistPath && !QFile::exists(persistPath)) { + if (!QFile::exists(persistPath)) { qDebug() << "Persist file does not exist, checking for existence of persist file next to application"; + + static const QString OLD_DEFAULT_PERSIST_FILENAME = "resources/models.json.gz"; + QString oldResourcesDirectory = QCoreApplication::applicationDirPath(); + + // This is the old persist path, based on the current persist filename, which could + // be a custom filename set by the user. + auto oldPersistPath = QDir(oldResourcesDirectory).absoluteFilePath(_persistFilename); + + // This is the old default persist path. + auto oldDefaultPersistPath = QDir(oldResourcesDirectory).absoluteFilePath(OLD_DEFAULT_PERSIST_FILENAME); + + qDebug() << "Checking for existing persist file at " << oldPersistPath << " and " << oldDefaultPersistPath; + + QString pathToCopyFrom; + bool shouldCopy = false; + if (QFile::exists(oldPersistPath)) { - qDebug() << "Old persist file found, copying from " << oldPersistPath << " to " << persistPath; + shouldCopy = true; + pathToCopyFrom = oldPersistPath; + } else if (QFile::exists(oldDefaultPersistPath)) { + shouldCopy = true; + pathToCopyFrom = oldDefaultPersistPath; + } + + if (shouldCopy) { + qDebug() << "Old persist file found, copying from " << pathToCopyFrom << " to " << persistPath; QDir persistFileDirectory = QDir(persistPath).filePath(".."); @@ -1159,7 +1181,7 @@ void OctreeServer::domainSettingsRequestComplete() { qDebug() << "Creating data directory " << persistFileDirectory.path(); persistFileDirectory.mkpath("."); } - QFile::copy(oldPersistPath, persistPath); + QFile::copy(pathToCopyFrom, persistPath); } else { qDebug() << "No existing persist file found"; }