mirror of
https://github.com/overte-org/overte.git
synced 2025-04-30 00:42:46 +02:00
Fix serverScripts not being able to see entities in parent/child tree
This commit is contained in:
parent
be74b5c9ed
commit
328fc29bc5
4 changed files with 16 additions and 9 deletions
|
@ -96,7 +96,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
|
||||||
nodeData->copyCurrentViewFrustum(viewFrustum);
|
nodeData->copyCurrentViewFrustum(viewFrustum);
|
||||||
EntityTreeElementPointer root = std::dynamic_pointer_cast<EntityTreeElement>(_myServer->getOctree()->getRoot());
|
EntityTreeElementPointer root = std::dynamic_pointer_cast<EntityTreeElement>(_myServer->getOctree()->getRoot());
|
||||||
int32_t lodLevelOffset = nodeData->getBoundaryLevelAdjust() + (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST);
|
int32_t lodLevelOffset = nodeData->getBoundaryLevelAdjust() + (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST);
|
||||||
startNewTraversal(viewFrustum, root, lodLevelOffset, nodeData->getUsesFrustum());
|
startNewTraversal(viewFrustum, root, lodLevelOffset, nodeData->getUsesFrustum(), isFullScene);
|
||||||
|
|
||||||
// When the viewFrustum changed the sort order may be incorrect, so we re-sort
|
// When the viewFrustum changed the sort order may be incorrect, so we re-sort
|
||||||
// and also use the opportunity to cull anything no longer in view
|
// and also use the opportunity to cull anything no longer in view
|
||||||
|
@ -175,7 +175,7 @@ bool EntityTreeSendThread::addAncestorsToExtraFlaggedEntities(const QUuid& filte
|
||||||
return parentWasNew || ancestorsWereNew;
|
return parentWasNew || ancestorsWereNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
// since we didn't have a parent niether of our parents or ancestors could be new additions
|
// since we didn't have a parent, neither of our parents or ancestors could be new additions
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,8 +204,10 @@ bool EntityTreeSendThread::addDescendantsToExtraFlaggedEntities(const QUuid& fil
|
||||||
return hasNewChild || hasNewDescendants;
|
return hasNewChild || hasNewDescendants;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeSendThread::startNewTraversal(const ViewFrustum& view, EntityTreeElementPointer root, int32_t lodLevelOffset, bool usesViewFrustum) {
|
void EntityTreeSendThread::startNewTraversal(const ViewFrustum& view, EntityTreeElementPointer root, int32_t lodLevelOffset,
|
||||||
DiffTraversal::Type type = _traversal.prepareNewTraversal(view, root, lodLevelOffset, usesViewFrustum);
|
bool usesViewFrustum, bool isFullScene) {
|
||||||
|
|
||||||
|
DiffTraversal::Type type = _traversal.prepareNewTraversal(view, root, lodLevelOffset, usesViewFrustum, isFullScene);
|
||||||
// there are three types of traversal:
|
// there are three types of traversal:
|
||||||
//
|
//
|
||||||
// (1) FirstTime = at login --> find everything in view
|
// (1) FirstTime = at login --> find everything in view
|
||||||
|
@ -423,12 +425,14 @@ bool EntityTreeSendThread::traverseTreeAndBuildNextPacketPayload(EncodeBitstream
|
||||||
uint64_t sendTime = usecTimestampNow();
|
uint64_t sendTime = usecTimestampNow();
|
||||||
auto nodeData = static_cast<OctreeQueryNode*>(params.nodeData);
|
auto nodeData = static_cast<OctreeQueryNode*>(params.nodeData);
|
||||||
nodeData->stats.encodeStarted();
|
nodeData->stats.encodeStarted();
|
||||||
|
auto entityNodeData = static_cast<EntityNodeData*>(_node.toStrongRef()->getLinkedData());
|
||||||
while(!_sendQueue.empty()) {
|
while(!_sendQueue.empty()) {
|
||||||
PrioritizedEntity queuedItem = _sendQueue.top();
|
PrioritizedEntity queuedItem = _sendQueue.top();
|
||||||
EntityItemPointer entity = queuedItem.getEntity();
|
EntityItemPointer entity = queuedItem.getEntity();
|
||||||
if (entity) {
|
if (entity) {
|
||||||
// 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
|
// 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
|
||||||
if (entity->matchesJSONFilters(jsonFilters)) {
|
if (entity->matchesJSONFilters(jsonFilters) || entityNodeData->isEntityFlaggedAsExtra(entity->getID())) {
|
||||||
|
entityNodeData->insertSentFilteredEntity(entity->getID());
|
||||||
OctreeElement::AppendState appendEntityState = entity->appendEntityData(&_packetData, params, _extraEncodeData);
|
OctreeElement::AppendState appendEntityState = entity->appendEntityData(&_packetData, params, _extraEncodeData);
|
||||||
|
|
||||||
if (appendEntityState != OctreeElement::COMPLETED) {
|
if (appendEntityState != OctreeElement::COMPLETED) {
|
||||||
|
|
|
@ -38,7 +38,8 @@ private:
|
||||||
bool addAncestorsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
bool addAncestorsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
||||||
bool addDescendantsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
bool addDescendantsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
||||||
|
|
||||||
void startNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root, int32_t lodLevelOffset, bool usesViewFrustum);
|
void startNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root, int32_t lodLevelOffset,
|
||||||
|
bool usesViewFrustum, bool isFullScene);
|
||||||
bool traverseTreeAndBuildNextPacketPayload(EncodeBitstreamParams& params, const QJsonObject& jsonFilters) override;
|
bool traverseTreeAndBuildNextPacketPayload(EncodeBitstreamParams& params, const QJsonObject& jsonFilters) override;
|
||||||
|
|
||||||
void preDistributionProcessing() override;
|
void preDistributionProcessing() override;
|
||||||
|
|
|
@ -142,7 +142,8 @@ DiffTraversal::DiffTraversal() {
|
||||||
_path.reserve(MIN_PATH_DEPTH);
|
_path.reserve(MIN_PATH_DEPTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiffTraversal::Type DiffTraversal::prepareNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root, int32_t lodLevelOffset, bool usesViewFrustum) {
|
DiffTraversal::Type DiffTraversal::prepareNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root,
|
||||||
|
int32_t lodLevelOffset, bool usesViewFrustum, bool isFullScene) {
|
||||||
assert(root);
|
assert(root);
|
||||||
// there are three types of traversal:
|
// there are three types of traversal:
|
||||||
//
|
//
|
||||||
|
@ -163,7 +164,7 @@ DiffTraversal::Type DiffTraversal::prepareNewTraversal(const ViewFrustum& viewFr
|
||||||
|
|
||||||
Type type;
|
Type type;
|
||||||
// If usesViewFrustum changes, treat it as a First traversal
|
// If usesViewFrustum changes, treat it as a First traversal
|
||||||
if (_completedView.startTime == 0 || _currentView.usesViewFrustum != _completedView.usesViewFrustum) {
|
if (_completedView.startTime == 0 || _currentView.usesViewFrustum != _completedView.usesViewFrustum || isFullScene) {
|
||||||
type = Type::First;
|
type = Type::First;
|
||||||
_currentView.viewFrustum = viewFrustum;
|
_currentView.viewFrustum = viewFrustum;
|
||||||
_currentView.lodScaleFactor = lodScaleFactor;
|
_currentView.lodScaleFactor = lodScaleFactor;
|
||||||
|
|
|
@ -57,7 +57,8 @@ public:
|
||||||
|
|
||||||
DiffTraversal();
|
DiffTraversal();
|
||||||
|
|
||||||
Type prepareNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root, int32_t lodLevelOffset, bool usesViewFrustum);
|
Type prepareNewTraversal(const ViewFrustum& viewFrustum, EntityTreeElementPointer root, int32_t lodLevelOffset,
|
||||||
|
bool usesViewFrustum, bool isFullScene);
|
||||||
|
|
||||||
const ViewFrustum& getCurrentView() const { return _currentView.viewFrustum; }
|
const ViewFrustum& getCurrentView() const { return _currentView.viewFrustum; }
|
||||||
const ViewFrustum& getCompletedView() const { return _completedView.viewFrustum; }
|
const ViewFrustum& getCompletedView() const { return _completedView.viewFrustum; }
|
||||||
|
|
Loading…
Reference in a new issue