mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-17 08:57:09 +00:00
Added support for CHAR, SAND, and SCAN dependencies in MP3
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "Core/Resource/CFont.h"
|
||||
#include "Core/Resource/CScan.h"
|
||||
#include "Core/Resource/CWorld.h"
|
||||
#include "Core/Resource/Animation/CAnimSet.h"
|
||||
#include "Core/Resource/Script/CScriptLayer.h"
|
||||
#include <Math/MathUtil.h>
|
||||
|
||||
@@ -398,19 +399,44 @@ void GenerateAssetNames(CGameProject *pProj)
|
||||
if (pkChar->pSkeleton) ApplyGeneratedName(pkChar->pSkeleton->Entry(), SetDir, CharName);
|
||||
if (pkChar->pSkin) ApplyGeneratedName(pkChar->pSkin->Entry(), SetDir, CharName);
|
||||
|
||||
if (pkChar->IceModel.IsValid() || pkChar->IceSkin.IsValid())
|
||||
if (pProj->Game() >= eCorruptionProto && pProj->Game() <= eCorruption && pkChar->ID == 0)
|
||||
{
|
||||
TWideString IceName = TWideString::Format(L"%s_frozen", *CharName);
|
||||
CResourceEntry *pAnimDataEntry = gpResourceStore->FindEntry( pkChar->AnimDataID );
|
||||
|
||||
if (pkChar->IceModel.IsValid())
|
||||
if (pAnimDataEntry)
|
||||
{
|
||||
CResourceEntry *pIceModelEntry = pStore->FindEntry(pkChar->IceModel);
|
||||
ApplyGeneratedName(pIceModelEntry, SetDir, IceName);
|
||||
TWideString AnimDataName = TString::Format(L"%s_animdata", *CharName);
|
||||
ApplyGeneratedName(pAnimDataEntry, SetDir, AnimDataName);
|
||||
}
|
||||
if (pkChar->IceSkin.IsValid())
|
||||
}
|
||||
|
||||
for (u32 iOverlay = 0; iOverlay < pkChar->OverlayModels.size(); iOverlay++)
|
||||
{
|
||||
const SOverlayModel& rkOverlay = pkChar->OverlayModels[iOverlay];
|
||||
|
||||
if (rkOverlay.ModelID.IsValid() || rkOverlay.SkinID.IsValid())
|
||||
{
|
||||
CResourceEntry *pIceSkinEntry = pStore->FindEntry(pkChar->IceSkin);
|
||||
ApplyGeneratedName(pIceSkinEntry, SetDir, IceName);
|
||||
TWideString TypeName = (
|
||||
rkOverlay.Type == eOT_Frozen ? L"frozen" :
|
||||
rkOverlay.Type == eOT_Acid ? L"acid" :
|
||||
rkOverlay.Type == eOT_Hypermode ? L"hypermode" :
|
||||
rkOverlay.Type == eOT_XRay ? L"xray" :
|
||||
L""
|
||||
);
|
||||
ASSERT(TypeName != L"");
|
||||
|
||||
TWideString OverlayName = TWideString::Format(L"%s_%s", *CharName, *TypeName);
|
||||
|
||||
if (rkOverlay.ModelID.IsValid())
|
||||
{
|
||||
CResourceEntry *pModelEntry = pStore->FindEntry(rkOverlay.ModelID);
|
||||
ApplyGeneratedName(pModelEntry, SetDir, OverlayName);
|
||||
}
|
||||
if (rkOverlay.SkinID.IsValid())
|
||||
{
|
||||
CResourceEntry *pSkinEntry = pStore->FindEntry(rkOverlay.SkinID);
|
||||
ApplyGeneratedName(pSkinEntry, SetDir, OverlayName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "CDependencyTree.h"
|
||||
#include "Core/GameProject/CGameProject.h"
|
||||
#include "Core/Resource/Animation/CAnimSet.h"
|
||||
#include "Core/Resource/Script/CMasterTemplate.h"
|
||||
#include "Core/Resource/Script/CScriptLayer.h"
|
||||
#include "Core/Resource/Script/CScriptObject.h"
|
||||
@@ -199,34 +200,35 @@ void CSetCharacterDependency::Serialize(IArchive& rArc)
|
||||
<< SERIAL_ABSTRACT_CONTAINER("Children", mChildren, "Child", &gDependencyNodeFactory);
|
||||
}
|
||||
|
||||
CSetCharacterDependency* CSetCharacterDependency::BuildTree(const CAnimSet *pkOwnerSet, u32 CharIndex)
|
||||
CSetCharacterDependency* CSetCharacterDependency::BuildTree(const SSetCharacter& rkChar)
|
||||
{
|
||||
CSetCharacterDependency *pTree = new CSetCharacterDependency(CharIndex);
|
||||
const SSetCharacter *pkChar = pkOwnerSet->Character(CharIndex);
|
||||
CSetCharacterDependency *pTree = new CSetCharacterDependency(rkChar.ID);
|
||||
pTree->AddDependency(rkChar.pModel);
|
||||
pTree->AddDependency(rkChar.pSkeleton);
|
||||
pTree->AddDependency(rkChar.pSkin);
|
||||
pTree->AddDependency(rkChar.AnimDataID);
|
||||
|
||||
if (pkChar)
|
||||
const std::vector<CAssetID> *pkParticleVectors[5] = {
|
||||
&rkChar.GenericParticles, &rkChar.ElectricParticles,
|
||||
&rkChar.SwooshParticles, &rkChar.SpawnParticles,
|
||||
&rkChar.EffectParticles
|
||||
};
|
||||
|
||||
for (u32 iVec = 0; iVec < 5; iVec++)
|
||||
{
|
||||
pTree->AddDependency(pkChar->pModel);
|
||||
pTree->AddDependency(pkChar->pSkeleton);
|
||||
pTree->AddDependency(pkChar->pSkin);
|
||||
|
||||
const std::vector<CAssetID> *pkParticleVectors[5] = {
|
||||
&pkChar->GenericParticles, &pkChar->ElectricParticles,
|
||||
&pkChar->SwooshParticles, &pkChar->SpawnParticles,
|
||||
&pkChar->EffectParticles
|
||||
};
|
||||
|
||||
for (u32 iVec = 0; iVec < 5; iVec++)
|
||||
{
|
||||
for (u32 iPart = 0; iPart < pkParticleVectors[iVec]->size(); iPart++)
|
||||
pTree->AddDependency(pkParticleVectors[iVec]->at(iPart));
|
||||
}
|
||||
|
||||
pTree->AddDependency(pkChar->IceModel);
|
||||
pTree->AddDependency(pkChar->IceSkin);
|
||||
pTree->AddDependency(pkChar->SpatialPrimitives);
|
||||
for (u32 iPart = 0; iPart < pkParticleVectors[iVec]->size(); iPart++)
|
||||
pTree->AddDependency(pkParticleVectors[iVec]->at(iPart));
|
||||
}
|
||||
|
||||
for (u32 iOverlay = 0; iOverlay < rkChar.OverlayModels.size(); iOverlay++)
|
||||
{
|
||||
const SOverlayModel& rkOverlay = rkChar.OverlayModels[iOverlay];
|
||||
pTree->AddDependency(rkOverlay.ModelID);
|
||||
pTree->AddDependency(rkOverlay.SkinID);
|
||||
}
|
||||
|
||||
pTree->AddDependency(rkChar.SpatialPrimitives);
|
||||
|
||||
return pTree;
|
||||
}
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ public:
|
||||
inline u32 CharSetIndex() const { return mCharSetIndex; }
|
||||
|
||||
// Static
|
||||
static CSetCharacterDependency* BuildTree(const CAnimSet *pkOwnerSet, u32 CharIndex);
|
||||
static CSetCharacterDependency* BuildTree(const SSetCharacter& rkChar);
|
||||
};
|
||||
|
||||
// Node representing a character animation. Indicates which character indices use this animation.
|
||||
|
||||
@@ -154,12 +154,9 @@ void CCharacterUsageMap::ParseDependencyNode(IDependencyNode *pNode)
|
||||
CResourceDependency *pDep = static_cast<CResourceDependency*>(pNode);
|
||||
CResourceEntry *pEntry = mpStore->FindEntry(pDep->ID());
|
||||
|
||||
if (pEntry)
|
||||
if (pEntry && pEntry->ResourceType() == eScan)
|
||||
{
|
||||
EResType ResType = pEntry->ResourceType();
|
||||
|
||||
if (ResType == eScan)
|
||||
ParseDependencyNode(pEntry->Dependencies());
|
||||
ParseDependencyNode(pEntry->Dependencies());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user