mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-18 17:35:43 +00:00
Added support for tracking extra dependencies in Corruption areas (necessary to avoid crashes)
This commit is contained in:
@@ -48,9 +48,18 @@ CDependencyTree* CGameArea::BuildDependencyTree() const
|
||||
pTree->AddDependency(mpPoiToWorldMap);
|
||||
}
|
||||
|
||||
// Extra deps
|
||||
for (u32 iDep = 0; iDep < mExtraAreaDeps.size(); iDep++)
|
||||
pTree->AddDependency(mExtraAreaDeps[iDep]);
|
||||
|
||||
// Layer dependencies
|
||||
std::vector<CAssetID> DummyDeps;
|
||||
|
||||
for (u32 iLayer = 0; iLayer < mScriptLayers.size(); iLayer++)
|
||||
pTree->AddScriptLayer(mScriptLayers[iLayer]);
|
||||
{
|
||||
const std::vector<CAssetID>& rkExtras = (mExtraLayerDeps.size() > iLayer ? mExtraLayerDeps[iLayer] : DummyDeps);
|
||||
pTree->AddScriptLayer(mScriptLayers[iLayer], rkExtras);
|
||||
}
|
||||
|
||||
return pTree;
|
||||
}
|
||||
@@ -242,3 +251,13 @@ void CGameArea::DeleteInstance(CScriptObject *pInstance)
|
||||
|
||||
delete pInstance;
|
||||
}
|
||||
|
||||
void CGameArea::ClearExtraDependencies()
|
||||
{
|
||||
if (mExtraAreaDeps.empty() || !mExtraLayerDeps.empty())
|
||||
{
|
||||
mExtraAreaDeps.clear();
|
||||
mExtraLayerDeps.clear();
|
||||
Entry()->UpdateDependencies();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,9 @@ class CGameArea : public CResource
|
||||
CAssetID mPortalAreaID;
|
||||
// Object to Static Geometry Map
|
||||
TResPtr<CPoiToWorld> mpPoiToWorldMap;
|
||||
// Dependencies
|
||||
std::vector<CAssetID> mExtraAreaDeps;
|
||||
std::vector< std::vector<CAssetID> > mExtraLayerDeps;
|
||||
|
||||
public:
|
||||
CGameArea(CResourceEntry *pEntry = 0);
|
||||
@@ -80,6 +83,7 @@ public:
|
||||
u32 SuggestedID = -1, u32 SuggestedLayerIndex = -1);
|
||||
void AddInstanceToArea(CScriptObject *pInstance);
|
||||
void DeleteInstance(CScriptObject *pInstance);
|
||||
void ClearExtraDependencies();
|
||||
|
||||
// Inline Accessors
|
||||
inline u32 WorldIndex() const { return mWorldIndex; }
|
||||
|
||||
Reference in New Issue
Block a user