diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 61dbbda698..21df5498ec 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1069,6 +1069,24 @@ void EntityTree::dumpTree() { recurseTreeWithOperator(&theOperator); } +class PruneOperator : public RecurseOctreeOperator { +public: + virtual bool preRecursion(OctreeElement* element) { return true; } + virtual bool postRecursion(OctreeElement* element); +}; + +bool PruneOperator::postRecursion(OctreeElement* element) { + EntityTreeElement* entityTreeElement = static_cast(element); + entityTreeElement->pruneChildren(); + return true; +} + +void EntityTree::pruneTree() { + // First, look for the existing entity in the tree.. + PruneOperator theOperator; + recurseTreeWithOperator(&theOperator); +} + void EntityTree::sendEntities(EntityEditPacketSender* packetSender, EntityTree* localTree, float x, float y, float z) { SendEntitiesOperationArgs args; args.packetSender = packetSender; diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 634a04a688..53b407c7f5 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -131,6 +131,7 @@ public: void resetContainingElement(const EntityItemID& entityItemID, EntityTreeElement* element); void debugDumpMap(); virtual void dumpTree(); + virtual void pruneTree(); void sendEntities(EntityEditPacketSender* packetSender, EntityTree* localTree, float x, float y, float z); diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index da7d5db226..59dce80ecc 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -812,11 +812,20 @@ bool EntityTreeElement::pruneChildren() { void EntityTreeElement::debugDump() { qDebug() << "EntityTreeElement..."; - qDebug() << "entity count:" << _entityItems->size(); - qDebug() << "cube:" << getAACube(); - for (uint16_t i = 0; i < _entityItems->size(); i++) { - EntityItem* entity = (*_entityItems)[i]; - entity->debugDump(); + AACube temp = getAACube(); + temp.scale((float)TREE_SCALE); + qDebug() << " cube:" << temp; + qDebug() << " has child elements:" << getChildCount(); + if (_entityItems->size()) { + qDebug() << " has entities:" << _entityItems->size(); + qDebug() << "--------------------------------------------------"; + for (uint16_t i = 0; i < _entityItems->size(); i++) { + EntityItem* entity = (*_entityItems)[i]; + entity->debugDump(); + } + qDebug() << "--------------------------------------------------"; + } else { + qDebug() << " NO entities!"; } } diff --git a/libraries/octree/src/Octree.h b/libraries/octree/src/Octree.h index da0e483e1e..42cbb3c38d 100644 --- a/libraries/octree/src/Octree.h +++ b/libraries/octree/src/Octree.h @@ -352,6 +352,7 @@ public: void setIsClient(bool isClient) { _isServer = !isClient; } virtual void dumpTree() { }; + virtual void pruneTree() { }; signals: void importSize(float x, float y, float z); diff --git a/libraries/octree/src/OctreePersistThread.cpp b/libraries/octree/src/OctreePersistThread.cpp index 7613e2332b..406681c2c5 100644 --- a/libraries/octree/src/OctreePersistThread.cpp +++ b/libraries/octree/src/OctreePersistThread.cpp @@ -36,6 +36,7 @@ bool OctreePersistThread::process() { { PerformanceWarning warn(true, "Loading Octree File", true); persistantFileRead = _tree->readFromSVOFile(_filename.toLocal8Bit().constData()); + _tree->pruneTree(); } _tree->unlock(); @@ -80,10 +81,14 @@ bool OctreePersistThread::process() { // check the dirty bit and persist here... _lastCheck = usecTimestampNow(); if (_tree->isDirty()) { - qDebug() << "saving Octrees to file " << _filename << "..."; + qDebug() << "pruning Octree before saving..."; + _tree->pruneTree(); + qDebug() << "DONE pruning Octree before saving..."; + + qDebug() << "saving Octree to file " << _filename << "..."; _tree->writeToSVOFile(_filename.toLocal8Bit().constData()); _tree->clearDirtyBit(); // tree is clean after saving - qDebug("DONE saving Octrees to file..."); + qDebug("DONE saving Octree to file..."); } } }