mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-18 17:35:43 +00:00
Added dependency tree system, methods for generating dependency trees from resources, and saving/loading dependency trees to the project cache folder
This commit is contained in:
@@ -10,7 +10,7 @@ CGameArea::CGameArea(CResourceEntry *pEntry /*= 0*/)
|
||||
, mTerrainMerged(false)
|
||||
, mOriginalWorldMeshCount(0)
|
||||
, mUsesCompression(false)
|
||||
, mMaterialSet(nullptr)
|
||||
, mpMaterialSet(nullptr)
|
||||
, mpGeneratorLayer(nullptr)
|
||||
, mpCollision(nullptr)
|
||||
{
|
||||
@@ -31,6 +31,32 @@ CGameArea::~CGameArea()
|
||||
delete mLightLayers[iLyr][iLight];
|
||||
}
|
||||
|
||||
CDependencyTree* CGameArea::BuildDependencyTree() const
|
||||
{
|
||||
// Base dependencies
|
||||
CAreaDependencyTree *pTree = new CAreaDependencyTree(ResID());
|
||||
|
||||
for (u32 iMat = 0; iMat < mpMaterialSet->NumMaterials(); iMat++)
|
||||
{
|
||||
CMaterial *pMat = mpMaterialSet->MaterialByIndex(iMat);
|
||||
pTree->AddDependency(pMat->IndTexture());
|
||||
|
||||
for (u32 iPass = 0; iPass < pMat->PassCount(); iPass++)
|
||||
pTree->AddDependency(pMat->Pass(iPass)->Texture());
|
||||
}
|
||||
|
||||
pTree->AddDependency(mpPoiToWorldMap);
|
||||
Log::Warning("CGameArea::FindDependencies not handling PATH/PTLA");
|
||||
|
||||
// Layer dependencies
|
||||
for (u32 iLayer = 0; iLayer < mScriptLayers.size(); iLayer++)
|
||||
pTree->AddScriptLayer(mScriptLayers[iLayer]);
|
||||
|
||||
pTree->AddScriptLayer(mpGeneratorLayer);
|
||||
|
||||
return pTree;
|
||||
}
|
||||
|
||||
void CGameArea::AddWorldModel(CModel *pModel)
|
||||
{
|
||||
mWorldModels.push_back(pModel);
|
||||
@@ -52,7 +78,7 @@ void CGameArea::MergeTerrain()
|
||||
for (u32 iSurf = 0; iSurf < SubmeshCount; iSurf++)
|
||||
{
|
||||
SSurface *pSurf = pMdl->GetSurface(iSurf);
|
||||
CMaterial *pMat = mMaterialSet->MaterialByIndex(pSurf->MaterialID);
|
||||
CMaterial *pMat = mpMaterialSet->MaterialByIndex(pSurf->MaterialID);
|
||||
|
||||
bool NewMat = true;
|
||||
for (std::vector<CStaticModel*>::iterator it = mStaticWorldModels.begin(); it != mStaticWorldModels.end(); it++)
|
||||
@@ -93,7 +119,7 @@ void CGameArea::ClearTerrain()
|
||||
delete mStaticWorldModels[iStatic];
|
||||
mStaticWorldModels.clear();
|
||||
|
||||
if (mMaterialSet) delete mMaterialSet;
|
||||
if (mpMaterialSet) delete mpMaterialSet;
|
||||
|
||||
mVertexCount = 0;
|
||||
mTriangleCount = 0;
|
||||
|
||||
@@ -45,7 +45,7 @@ class CGameArea : public CResource
|
||||
std::vector<SSectionNumber> mSectionNumbers;
|
||||
|
||||
// Geometry
|
||||
CMaterialSet *mMaterialSet;
|
||||
CMaterialSet *mpMaterialSet;
|
||||
std::vector<CModel*> mWorldModels; // TerrainModels is the original version of each model; this is currently mainly used in the POI map editor
|
||||
std::vector<CStaticModel*> mStaticWorldModels; // StaticTerrainModels is the merged terrain for faster rendering in the world editor
|
||||
// Script
|
||||
@@ -62,6 +62,7 @@ class CGameArea : public CResource
|
||||
public:
|
||||
CGameArea(CResourceEntry *pEntry = 0);
|
||||
~CGameArea();
|
||||
CDependencyTree* BuildDependencyTree() const;
|
||||
|
||||
void AddWorldModel(CModel *pModel);
|
||||
void MergeTerrain();
|
||||
|
||||
Reference in New Issue
Block a user