diff --git a/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.cpp b/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.cpp index 6e31267f..232821aa 100644 --- a/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.cpp +++ b/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.cpp @@ -85,21 +85,21 @@ void plPageTreeMgr::AddNode(plSceneNode* node) node->Init(); - fNodes.Append(node); + fNodes.push_back(node); } void plPageTreeMgr::RemoveNode(plSceneNode* node) { ITrashSpaceTree(); - int idx = fNodes.Find(node); - if( idx != fNodes.kMissingIndex ) - fNodes.Remove(idx); + auto it = std::find(fNodes.begin(), fNodes.end(), node); + if (it != fNodes.end()) + fNodes.erase(it); } void plPageTreeMgr::Reset() { - fNodes.Reset(); + fNodes.clear(); ITrashSpaceTree(); } @@ -474,16 +474,13 @@ bool plPageTreeMgr::IRenderSortingSpans(plPipeline* pipe, hsTArrayGetSpaceTree()->GetWorldBounds(), fNodes[i]->GetSpaceTree()->IsEmpty()); - } + for (plSceneNode* node : fNodes) + maker.AddLeaf(node->GetSpaceTree()->GetWorldBounds(), node->GetSpaceTree()->IsEmpty()); fSpaceTree = maker.MakeTree(); return true; @@ -491,18 +488,17 @@ bool plPageTreeMgr::IBuildSpaceTree() bool plPageTreeMgr::IRefreshTree(plPipeline* pipe) { - int i; - for( i = 0; i < fNodes.GetCount(); i++ ) + for (size_t i = 0; i < fNodes.size(); ++i) { - if( fNodes[i]->GetSpaceTree()->IsDirty() ) + plSceneNode* node = fNodes[i]; + if (node->GetSpaceTree()->IsDirty()) { - fNodes[i]->GetSpaceTree()->Refresh(); - - GetSpaceTree()->MoveLeaf(i, fNodes[i]->GetSpaceTree()->GetWorldBounds()); + node->GetSpaceTree()->Refresh(); - if( !fNodes[i]->GetSpaceTree()->IsEmpty() && fSpaceTree->HasLeafFlag(i, plSpaceTreeNode::kDisabled) ) + GetSpaceTree()->MoveLeaf(i, node->GetSpaceTree()->GetWorldBounds()); + + if (!node->GetSpaceTree()->IsEmpty() && fSpaceTree->HasLeafFlag(i, plSpaceTreeNode::kDisabled) ) fSpaceTree->SetLeafFlag(i, plSpaceTreeNode::kDisabled, false); - } } @@ -679,11 +675,8 @@ bool plPageTreeMgr::IGetOcclusion(plPipeline* pipe, hsTArray& list) fCullPolys.SetCount(0); fOccluders.SetCount(0); - int i; - for( i = 0; i < fNodes.GetCount(); i++ ) - { - fNodes[i]->SubmitOccluders(this); - } + for (plSceneNode* node : fNodes) + node->SubmitOccluders(this); if( !IGetCullPolys(pipe) ) { diff --git a/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.h b/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.h index 2c8775a3..2edcb28e 100644 --- a/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.h +++ b/Sources/Plasma/PubUtilLib/plScene/plPageTreeMgr.h @@ -44,6 +44,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #define plPageTreeMgr_inc #include "hsTemplates.h" +#include class plSceneNode; class plSpaceTree; @@ -79,7 +80,7 @@ public: class plPageTreeMgr { protected: - hsTArray fNodes; + std::vector fNodes; plSpaceTree* fSpaceTree; plVisMgr* fVisMgr; @@ -108,12 +109,12 @@ public: plPageTreeMgr(); virtual ~plPageTreeMgr(); - const hsTArray& GetNodes() const { return fNodes; } + const std::vector& GetNodes() const { return fNodes; } void AddNode(plSceneNode* node); void RemoveNode(plSceneNode* node); virtual void Reset(); // remove all nodes, nuke the space tree - virtual bool Empty() const { return !fNodes.GetCount(); } + virtual bool Empty() const { return fNodes.empty(); } virtual int Render(plPipeline* pipe);