mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-30 20:23:20 +02:00
66 lines
2.4 KiB
C++
66 lines
2.4 KiB
C++
//
|
|
// EntityTreeSendThread.h
|
|
// assignment-client/src/entities
|
|
//
|
|
// Created by Stephen Birarda on 2/15/17.
|
|
// Copyright 2017 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
#ifndef hifi_EntityTreeSendThread_h
|
|
#define hifi_EntityTreeSendThread_h
|
|
|
|
#include <unordered_set>
|
|
|
|
#include "../octree/OctreeSendThread.h"
|
|
|
|
#include <DiffTraversal.h>
|
|
#include <EntityPriorityQueue.h>
|
|
#include <shared/ConicalViewFrustum.h>
|
|
|
|
|
|
class EntityNodeData;
|
|
class EntityItem;
|
|
|
|
class EntityTreeSendThread : public OctreeSendThread {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
EntityTreeSendThread(OctreeServer* myServer, const SharedNodePointer& node);
|
|
|
|
protected:
|
|
void traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
|
|
bool viewFrustumChanged, bool isFullScene) override;
|
|
|
|
private slots:
|
|
void resetState(); // clears our known state forcing entities to appear unsent
|
|
|
|
private:
|
|
// the following two methods return booleans to indicate if any extra flagged entities were new additions to set
|
|
bool addAncestorsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
|
bool addDescendantsToExtraFlaggedEntities(const QUuid& filteredEntityID, EntityItem& entityItem, EntityNodeData& nodeData);
|
|
|
|
void startNewTraversal(const DiffTraversal::View& viewFrustum, EntityTreeElementPointer root);
|
|
bool traverseTreeAndBuildNextPacketPayload(EncodeBitstreamParams& params, const QJsonObject& jsonFilters) override;
|
|
|
|
void preDistributionProcessing() override;
|
|
bool hasSomethingToSend(OctreeQueryNode* nodeData) override { return !_sendQueue.empty(); }
|
|
bool shouldStartNewTraversal(OctreeQueryNode* nodeData, bool viewFrustumChanged) override { return viewFrustumChanged || _traversal.finished(); }
|
|
|
|
DiffTraversal _traversal;
|
|
EntityPriorityQueue _sendQueue;
|
|
std::unordered_map<EntityItem*, uint64_t> _knownState;
|
|
|
|
// packet construction stuff
|
|
EntityTreeElementExtraEncodeDataPointer _extraEncodeData { new EntityTreeElementExtraEncodeData() };
|
|
int32_t _numEntitiesOffset { 0 };
|
|
uint16_t _numEntities { 0 };
|
|
|
|
private slots:
|
|
void editingEntityPointer(const EntityItemPointer& entity);
|
|
void deletingEntityPointer(EntityItem* entity);
|
|
};
|
|
|
|
#endif // hifi_EntityTreeSendThread_h
|