Showing the changes to assignment-client/src/entities/EntityTreeSendThread.cpp (1 of 4 files). Show all
Unified · Split
| @@ -96,7 +96,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O · 95 unmodified lines | ||
| 96 | 96 | nodeData->copyCurrentViewFrustum(viewFrustum); |
| 97 | 97 | EntityTreeElementPointer root = std::dynamic_pointer_cast<EntityTreeElement>(_myServer->getOctree()->getRoot()); |
| 98 | 98 | int32_t lodLevelOffset = nodeData->getBoundaryLevelAdjust() + (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST); |
| 99 | − startNewTraversal(viewFrustum, root, lodLevelOffset, nodeData->getUsesFrustum()); | |
| 99 | + startNewTraversal(viewFrustum, root, lodLevelOffset, nodeData->getUsesFrustum(), isFullScene); | |
| 100 | 100 | |
| 101 | 101 | // When the viewFrustum changed the sort order may be incorrect, so we re-sort |
| 102 | 102 | // and also use the opportunity to cull anything no longer in view |
| @@ -175,7 +175,7 @@ bool EntityTreeSendThread::addAncestorsToExtraFlaggedEntities(const QUuid& filte · 72 unmodified lines | ||
| 175 | 175 | return parentWasNew || ancestorsWereNew; |
| 176 | 176 | } |
| 177 | 177 | |
| 178 | − // since we didn't have a parent niether of our parents or ancestors could be new additions | |
| 178 | + // since we didn't have a parent, neither of our parents or ancestors could be new additions | |
| 179 | 179 | return false; |
| 180 | 180 | } |
| 181 | 181 | |
| @@ -204,8 +204,10 @@ bool EntityTreeSendThread::addDescendantsToExtraFlaggedEntities(const QUuid& fil · 22 unmodified lines | ||
| 204 | 204 | return hasNewChild || hasNewDescendants; |
| 205 | 205 | } |
| 206 | 206 | |
| 207 | −void EntityTreeSendThread::startNewTraversal(const ViewFrustum& view, EntityTreeElementPointer root, int32_t lodLevelOffset, bool usesViewFrustum) { | |
| 208 | − DiffTraversal::Type type = _traversal.prepareNewTraversal(view, root, lodLevelOffset, usesViewFrustum); | |
| 207 | +void EntityTreeSendThread::startNewTraversal(const ViewFrustum& view, EntityTreeElementPointer root, int32_t lodLevelOffset, | |
| 208 | + bool usesViewFrustum, bool isFullScene) { | |
| 209 | + | |
| 210 | + DiffTraversal::Type type = _traversal.prepareNewTraversal(view, root, lodLevelOffset, usesViewFrustum, isFullScene); | |
| 209 | 211 | // there are three types of traversal: |
| 210 | 212 | // |
| 211 | 213 | // (1) FirstTime = at login --> find everything in view |
| @@ -423,12 +425,14 @@ bool EntityTreeSendThread::traverseTreeAndBuildNextPacketPayload(EncodeBitstream · 211 unmodified lines | ||
| 423 | 425 | uint64_t sendTime = usecTimestampNow(); |
| 424 | 426 | auto nodeData = static_cast<OctreeQueryNode*>(params.nodeData); |
| 425 | 427 | nodeData->stats.encodeStarted(); |
| 428 | + auto entityNodeData = static_cast<EntityNodeData*>(_node.toStrongRef()->getLinkedData()); | |
| 426 | 429 | while(!_sendQueue.empty()) { |
| 427 | 430 | PrioritizedEntity queuedItem = _sendQueue.top(); |
| 428 | 431 | EntityItemPointer entity = queuedItem.getEntity(); |
| 429 | 432 | if (entity) { |
| 430 | 433 | // Only send entities that match the jsonFilters, but keep track of everything we've tried to send so we don't try to send it again |
| 431 | − if (entity->matchesJSONFilters(jsonFilters)) { | |
| 434 | + if (entity->matchesJSONFilters(jsonFilters) || entityNodeData->isEntityFlaggedAsExtra(entity->getID())) { | |
| 435 | + entityNodeData->insertSentFilteredEntity(entity->getID()); | |
| 432 | 436 | OctreeElement::AppendState appendEntityState = entity->appendEntityData(&_packetData, params, _extraEncodeData); |
| 433 | 437 | |
| 434 | 438 | if (appendEntityState != OctreeElement::COMPLETED) { |