mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-21 02:39:17 +00:00
Changed game exporter to export from a full disc image using nod instead of a pre-extracted disc filesystem; also fixed issue with tabbing in/out with a file dialog open, and fixed a memory leak in CAnimSet
This commit is contained in:
@@ -81,18 +81,29 @@ class CAnimSet : public CResource
|
||||
std::vector<CAnimEventData*> mAnimEvents; // note: these are for MP2, where event data isn't a standalone resource; these are owned by the animset
|
||||
|
||||
public:
|
||||
CAnimSet(CResourceEntry *pEntry = 0) : CResource(pEntry) {}
|
||||
CAnimSet(CResourceEntry *pEntry = 0)
|
||||
: CResource(pEntry)
|
||||
, mpDefaultTransition(nullptr)
|
||||
{}
|
||||
|
||||
~CAnimSet()
|
||||
{
|
||||
for (u32 iAnim = 0; iAnim < mAnimations.size(); iAnim++)
|
||||
delete mAnimations[iAnim].pMetaAnim;
|
||||
|
||||
for (u32 iTrans = 0; iTrans < mTransitions.size(); iTrans++)
|
||||
delete mTransitions[iTrans].pMetaTrans;
|
||||
|
||||
for (u32 iHalf = 0; iHalf < mHalfTransitions.size(); iHalf++)
|
||||
delete mHalfTransitions[iHalf].pMetaTrans;
|
||||
|
||||
delete mpDefaultTransition;
|
||||
|
||||
// For MP2, anim events need to be cleaned up manually
|
||||
if (Game() >= eEchoesDemo)
|
||||
for (u32 iEvent = 0; iEvent < mAnimEvents.size(); iEvent++)
|
||||
{
|
||||
for (u32 iEvent = 0; iEvent < mAnimEvents.size(); iEvent++)
|
||||
{
|
||||
ASSERT(mAnimEvents[iEvent] && !mAnimEvents[iEvent]->Entry());
|
||||
delete mAnimEvents[iEvent];
|
||||
}
|
||||
ASSERT(mAnimEvents[iEvent] && !mAnimEvents[iEvent]->Entry());
|
||||
delete mAnimEvents[iEvent];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ void CTemplateWriter::SaveAllTemplates()
|
||||
{
|
||||
// Create directory
|
||||
std::list<CMasterTemplate*> MasterList = CMasterTemplate::MasterList();
|
||||
FileUtil::CreateDirectory(smTemplatesDir);
|
||||
FileUtil::MakeDirectory(smTemplatesDir);
|
||||
|
||||
// Resave property list
|
||||
SavePropertyList();
|
||||
@@ -95,7 +95,7 @@ void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster)
|
||||
// Create directory
|
||||
TString OutFile = smTemplatesDir + pMaster->mSourceFile;
|
||||
TString OutDir = OutFile.GetFileDirectory();
|
||||
FileUtil::CreateDirectory(OutDir);
|
||||
FileUtil::MakeDirectory(OutDir);
|
||||
|
||||
// Resave script templates
|
||||
for (auto it = pMaster->mTemplates.begin(); it != pMaster->mTemplates.end(); it++)
|
||||
@@ -226,7 +226,7 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp)
|
||||
// Create directory
|
||||
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
|
||||
TString OutDir = OutFile.GetFileDirectory();
|
||||
FileUtil::CreateDirectory(*OutDir);
|
||||
FileUtil::MakeDirectory(*OutDir);
|
||||
|
||||
// Create new document
|
||||
XMLDocument ScriptXML;
|
||||
@@ -432,7 +432,7 @@ void CTemplateWriter::SaveStructTemplate(CStructTemplate *pTemp)
|
||||
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
|
||||
TString OutDir = OutFile.GetFileDirectory();
|
||||
TString Name = OutFile.GetFileName(false);
|
||||
FileUtil::CreateDirectory(OutDir);
|
||||
FileUtil::MakeDirectory(OutDir);
|
||||
|
||||
// Create new document and write struct properties to it
|
||||
XMLDocument StructXML;
|
||||
@@ -456,7 +456,7 @@ void CTemplateWriter::SaveEnumTemplate(CEnumTemplate *pTemp)
|
||||
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
|
||||
TString OutDir = OutFile.GetFileDirectory();
|
||||
TString Name = OutFile.GetFileName(false);
|
||||
FileUtil::CreateDirectory(OutDir);
|
||||
FileUtil::MakeDirectory(OutDir);
|
||||
|
||||
// Create new document and write enumerators to it
|
||||
XMLDocument EnumXML;
|
||||
@@ -479,7 +479,7 @@ void CTemplateWriter::SaveBitfieldTemplate(CBitfieldTemplate *pTemp)
|
||||
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
|
||||
TString OutDir = OutFile.GetFileDirectory();
|
||||
TString Name = pTemp->mSourceFile.GetFileName(false);
|
||||
FileUtil::CreateDirectory(OutDir);
|
||||
FileUtil::MakeDirectory(OutDir);
|
||||
|
||||
// Create new document and write enumerators to it
|
||||
XMLDocument BitfieldXML;
|
||||
|
||||
@@ -162,7 +162,8 @@ void CAnimSetLoader::ProcessPrimitives()
|
||||
for (u32 iTrans = 0; iTrans < pSet->mTransitions.size(); iTrans++)
|
||||
pSet->mTransitions[iTrans].pMetaTrans->GetUniquePrimitives(UniquePrimitives);
|
||||
|
||||
pSet->mpDefaultTransition->GetUniquePrimitives(UniquePrimitives);
|
||||
if (pSet->mpDefaultTransition)
|
||||
pSet->mpDefaultTransition->GetUniquePrimitives(UniquePrimitives);
|
||||
|
||||
for (u32 iTrans = 0; iTrans < pSet->mHalfTransitions.size(); iTrans++)
|
||||
pSet->mHalfTransitions[iTrans].pMetaTrans->GetUniquePrimitives(UniquePrimitives);
|
||||
@@ -181,17 +182,20 @@ void CAnimSetLoader::ProcessPrimitives()
|
||||
}
|
||||
|
||||
// Add animations referenced by default transition
|
||||
std::set<CAnimPrimitive> DefaultTransPrimitives;
|
||||
pSet->mpDefaultTransition->GetUniquePrimitives(DefaultTransPrimitives);
|
||||
|
||||
for (u32 iChar = 0; iChar < pSet->mCharacters.size(); iChar++)
|
||||
if (pSet->mpDefaultTransition)
|
||||
{
|
||||
SSetCharacter& rChar = pSet->mCharacters[iChar];
|
||||
std::set<CAnimPrimitive> DefaultTransPrimitives;
|
||||
pSet->mpDefaultTransition->GetUniquePrimitives(DefaultTransPrimitives);
|
||||
|
||||
for (auto Iter = DefaultTransPrimitives.begin(); Iter != DefaultTransPrimitives.end(); Iter++)
|
||||
for (u32 iChar = 0; iChar < pSet->mCharacters.size(); iChar++)
|
||||
{
|
||||
const CAnimPrimitive& rkPrim = *Iter;
|
||||
rChar.UsedAnimationIndices.insert(rkPrim.ID());
|
||||
SSetCharacter& rChar = pSet->mCharacters[iChar];
|
||||
|
||||
for (auto Iter = DefaultTransPrimitives.begin(); Iter != DefaultTransPrimitives.end(); Iter++)
|
||||
{
|
||||
const CAnimPrimitive& rkPrim = *Iter;
|
||||
rChar.UsedAnimationIndices.insert(rkPrim.ID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user