mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-15 16:16:14 +00:00
Major refactor of serialization system
This commit is contained in:
@@ -133,7 +133,7 @@ void CAssetNameMap::CopyFromStore(CResourceStore *pStore /*= gpResourceStore*/)
|
||||
// ************ PRIVATE ************
|
||||
void CAssetNameMap::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_CONTAINER("AssetNameMap", mMap, "Asset");
|
||||
rArc << SerialParameter("AssetNameMap", mMap);
|
||||
|
||||
if (rArc.IsReader())
|
||||
PostLoadValidate();
|
||||
|
||||
@@ -28,7 +28,11 @@ class CAssetNameMap
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_AUTO(Name) << SERIAL_AUTO(Directory) << SERIAL_AUTO(Type) << SERIAL_AUTO(AutoGenName) << SERIAL_AUTO(AutoGenDir);
|
||||
rArc << SerialParameter("Name", Name)
|
||||
<< SerialParameter("Directory", Directory)
|
||||
<< SerialParameter("Type", Type)
|
||||
<< SerialParameter("AutoGenName", AutoGenName)
|
||||
<< SerialParameter("AutoGenDir", AutoGenDir);
|
||||
}
|
||||
|
||||
bool operator<(const SAssetNameInfo& rkOther) const
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
#include "Core/Resource/Script/CScriptLayer.h"
|
||||
#include "Core/Resource/Script/CScriptObject.h"
|
||||
|
||||
CDependencyNodeFactory gDependencyNodeFactory;
|
||||
|
||||
// ************ IDependencyNode ************
|
||||
IDependencyNode::~IDependencyNode()
|
||||
{
|
||||
@@ -31,6 +29,24 @@ void IDependencyNode::GetAllResourceReferences(std::set<CAssetID>& rOutSet) cons
|
||||
mChildren[iChild]->GetAllResourceReferences(rOutSet);
|
||||
}
|
||||
|
||||
// Serialization constructor
|
||||
IDependencyNode* IDependencyNode::ArchiveConstructor(EDependencyNodeType Type)
|
||||
{
|
||||
switch (Type)
|
||||
{
|
||||
case eDNT_DependencyTree: return new CDependencyTree;
|
||||
case eDNT_ResourceDependency: return new CResourceDependency;
|
||||
case eDNT_ScriptInstance: return new CScriptInstanceDependency;
|
||||
case eDNT_ScriptProperty: return new CPropertyDependency;
|
||||
case eDNT_CharacterProperty: return new CCharPropertyDependency;
|
||||
case eDNT_SetCharacter: return new CSetCharacterDependency;
|
||||
case eDNT_SetAnimation: return new CSetAnimationDependency;
|
||||
case eDNT_AnimEvent: return new CAnimEventDependency;
|
||||
case eDNT_Area: return new CAreaDependencyTree;
|
||||
default: ASSERT(false); return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// ************ CDependencyTree ************
|
||||
EDependencyNodeType CDependencyTree::Type() const
|
||||
{
|
||||
@@ -39,7 +55,7 @@ EDependencyNodeType CDependencyTree::Type() const
|
||||
|
||||
void CDependencyTree::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_ABSTRACT_CONTAINER("Children", mChildren, "Child", &gDependencyNodeFactory);
|
||||
rArc << SerialParameter("Children", mChildren);
|
||||
}
|
||||
|
||||
void CDependencyTree::AddChild(IDependencyNode *pNode)
|
||||
@@ -78,7 +94,7 @@ EDependencyNodeType CResourceDependency::Type() const
|
||||
|
||||
void CResourceDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("ID", mID);
|
||||
rArc << SerialParameter("ID", mID);
|
||||
}
|
||||
|
||||
void CResourceDependency::GetAllResourceReferences(std::set<CAssetID>& rOutSet) const
|
||||
@@ -99,7 +115,7 @@ EDependencyNodeType CPropertyDependency::Type() const
|
||||
|
||||
void CPropertyDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("PropertyID", mIDString);
|
||||
rArc << SerialParameter("PropertyID", mIDString);
|
||||
CResourceDependency::Serialize(rArc);
|
||||
}
|
||||
|
||||
@@ -112,7 +128,7 @@ EDependencyNodeType CCharPropertyDependency::Type() const
|
||||
void CCharPropertyDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
CPropertyDependency::Serialize(rArc);
|
||||
rArc << SERIAL("CharIndex", mUsedChar);
|
||||
rArc << SerialParameter("CharIndex", mUsedChar);
|
||||
}
|
||||
|
||||
// ************ CScriptInstanceDependency ************
|
||||
@@ -123,8 +139,8 @@ EDependencyNodeType CScriptInstanceDependency::Type() const
|
||||
|
||||
void CScriptInstanceDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("ObjectType", mObjectType)
|
||||
<< SERIAL_ABSTRACT_CONTAINER("Properties", mChildren, "Property", &gDependencyNodeFactory);
|
||||
rArc << SerialParameter("ObjectType", mObjectType)
|
||||
<< SerialParameter("Properties", mChildren);
|
||||
}
|
||||
|
||||
// Static
|
||||
@@ -210,8 +226,8 @@ EDependencyNodeType CSetCharacterDependency::Type() const
|
||||
|
||||
void CSetCharacterDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("CharSetIndex", mCharSetIndex)
|
||||
<< SERIAL_ABSTRACT_CONTAINER("Children", mChildren, "Child", &gDependencyNodeFactory);
|
||||
rArc << SerialParameter("CharSetIndex", mCharSetIndex)
|
||||
<< SerialParameter("Children", mChildren);
|
||||
}
|
||||
|
||||
CSetCharacterDependency* CSetCharacterDependency::BuildTree(const SSetCharacter& rkChar)
|
||||
@@ -255,8 +271,8 @@ EDependencyNodeType CSetAnimationDependency::Type() const
|
||||
|
||||
void CSetAnimationDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_CONTAINER("CharacterIndices", mCharacterIndices, "Index")
|
||||
<< SERIAL_ABSTRACT_CONTAINER("Children", mChildren, "Child", &gDependencyNodeFactory);
|
||||
rArc << SerialParameter("CharacterIndices", mCharacterIndices)
|
||||
<< SerialParameter("Children", mChildren);
|
||||
}
|
||||
|
||||
CSetAnimationDependency* CSetAnimationDependency::BuildTree(const CAnimSet *pkOwnerSet, u32 AnimIndex)
|
||||
@@ -302,7 +318,7 @@ EDependencyNodeType CAnimEventDependency::Type() const
|
||||
void CAnimEventDependency::Serialize(IArchive& rArc)
|
||||
{
|
||||
CResourceDependency::Serialize(rArc);
|
||||
rArc << SERIAL("CharacterIndex", mCharIndex);
|
||||
rArc << SerialParameter("CharacterIndex", mCharIndex);
|
||||
}
|
||||
|
||||
// ************ CAreaDependencyTree ************
|
||||
@@ -314,7 +330,7 @@ EDependencyNodeType CAreaDependencyTree::Type() const
|
||||
void CAreaDependencyTree::Serialize(IArchive& rArc)
|
||||
{
|
||||
CDependencyTree::Serialize(rArc);
|
||||
rArc << SERIAL_CONTAINER("LayerOffsets", mLayerOffsets, "Offset");
|
||||
rArc << SerialParameter("LayerOffsets", mLayerOffsets);
|
||||
}
|
||||
|
||||
void CAreaDependencyTree::AddScriptLayer(CScriptLayer *pLayer, const std::vector<CAssetID>& rkExtraDeps)
|
||||
|
||||
@@ -40,6 +40,9 @@ public:
|
||||
virtual void GetAllResourceReferences(std::set<CAssetID>& rOutSet) const;
|
||||
virtual bool HasDependency(const CAssetID& rkID) const;
|
||||
|
||||
// Serialization constructor
|
||||
static IDependencyNode* ArchiveConstructor(EDependencyNodeType Type);
|
||||
|
||||
// Accessors
|
||||
inline u32 NumChildren() const { return mChildren.size(); }
|
||||
inline IDependencyNode* ChildByIndex(u32 Index) const { return mChildren[Index]; }
|
||||
@@ -223,28 +226,5 @@ public:
|
||||
inline u32 ScriptLayerOffset(u32 LayerIdx) const { return mLayerOffsets[LayerIdx]; }
|
||||
};
|
||||
|
||||
// Dependency node factory for serialization
|
||||
class CDependencyNodeFactory
|
||||
{
|
||||
public:
|
||||
IDependencyNode* SpawnObject(u32 NodeID)
|
||||
{
|
||||
switch (NodeID)
|
||||
{
|
||||
case eDNT_DependencyTree: return new CDependencyTree;
|
||||
case eDNT_ResourceDependency: return new CResourceDependency;
|
||||
case eDNT_ScriptInstance: return new CScriptInstanceDependency;
|
||||
case eDNT_ScriptProperty: return new CPropertyDependency;
|
||||
case eDNT_CharacterProperty: return new CCharPropertyDependency;
|
||||
case eDNT_SetCharacter: return new CSetCharacterDependency;
|
||||
case eDNT_SetAnimation: return new CSetAnimationDependency;
|
||||
case eDNT_AnimEvent: return new CAnimEventDependency;
|
||||
case eDNT_Area: return new CAreaDependencyTree;
|
||||
default: ASSERT(false); return nullptr;
|
||||
}
|
||||
}
|
||||
};
|
||||
extern CDependencyNodeFactory gDependencyNodeFactory;
|
||||
|
||||
#endif // CDEPENDENCYTREE
|
||||
|
||||
|
||||
@@ -41,10 +41,10 @@ void CGameInfo::Serialize(IArchive& rArc)
|
||||
}
|
||||
|
||||
// Serialize data
|
||||
rArc << SERIAL_CONTAINER("GameBuilds", mBuilds, "Build");
|
||||
rArc << SerialParameter("GameBuilds", mBuilds);
|
||||
|
||||
if (mGame <= ePrime)
|
||||
rArc << SERIAL_CONTAINER("AreaNameMap", mAreaNameMap, "AreaName");
|
||||
rArc << SerialParameter("AreaNameMap", mAreaNameMap);
|
||||
}
|
||||
|
||||
TString CGameInfo::GetBuildName(float BuildVer, ERegion Region) const
|
||||
|
||||
@@ -24,7 +24,9 @@ class CGameInfo
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_AUTO(Version) << SERIAL_AUTO(Region) << SERIAL_AUTO(Name);
|
||||
rArc << SerialParameter("Version", Version)
|
||||
<< SerialParameter("Region", Region)
|
||||
<< SerialParameter("Name", Name);
|
||||
}
|
||||
};
|
||||
std::vector<SBuildInfo> mBuilds;
|
||||
|
||||
@@ -36,10 +36,10 @@ bool CGameProject::Save()
|
||||
|
||||
bool CGameProject::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("Name", mProjectName)
|
||||
<< SERIAL("Region", mRegion)
|
||||
<< SERIAL("GameID", mGameID)
|
||||
<< SERIAL("BuildVersion", mBuildVersion);
|
||||
rArc << SerialParameter("Name", mProjectName)
|
||||
<< SerialParameter("Region", mRegion)
|
||||
<< SerialParameter("GameID", mGameID)
|
||||
<< SerialParameter("BuildVersion", mBuildVersion);
|
||||
|
||||
// Serialize package list
|
||||
std::vector<TString> PackageList;
|
||||
@@ -50,7 +50,7 @@ bool CGameProject::Serialize(IArchive& rArc)
|
||||
PackageList.push_back( mPackages[iPkg]->DefinitionPath(true) );
|
||||
}
|
||||
|
||||
rArc << SERIAL_CONTAINER("Packages", PackageList, "Package");
|
||||
rArc << SerialParameter("Packages", PackageList);
|
||||
|
||||
// Load packages
|
||||
if (rArc.IsReader())
|
||||
|
||||
@@ -36,8 +36,8 @@ bool CPackage::Save()
|
||||
|
||||
void CPackage::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("NeedsRecook", mNeedsRecook)
|
||||
<< SERIAL_CONTAINER("NamedResources", mResources, "Resource");
|
||||
rArc << SerialParameter("NeedsRecook", mNeedsRecook)
|
||||
<< SerialParameter("NamedResources", mResources);
|
||||
}
|
||||
|
||||
void CPackage::AddResource(const TString& rkName, const CAssetID& rkID, const CFourCC& rkType)
|
||||
|
||||
@@ -17,7 +17,9 @@ struct SNamedResource
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_AUTO(Name) << SERIAL_AUTO(ID) << SERIAL_AUTO(Type);
|
||||
rArc << SerialParameter("Name", Name)
|
||||
<< SerialParameter("ID", ID)
|
||||
<< SerialParameter("Type", Type);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -127,9 +127,9 @@ void CResourceEntry::SerializeEntryInfo(IArchive& rArc, bool MetadataOnly)
|
||||
{
|
||||
CAssetID ID = mID;
|
||||
|
||||
rArc << SERIAL("AssetID", ID)
|
||||
<< SERIAL("Type", mpTypeInfo)
|
||||
<< SERIAL("Flags", mFlags);
|
||||
rArc << SerialParameter("AssetID", ID)
|
||||
<< SerialParameter("Type", mpTypeInfo)
|
||||
<< SerialParameter("Flags", mFlags);
|
||||
|
||||
// Don't allow the file to override our asset ID if we already have a valid one.
|
||||
if (rArc.IsReader() && !mID.IsValid())
|
||||
@@ -140,9 +140,9 @@ void CResourceEntry::SerializeEntryInfo(IArchive& rArc, bool MetadataOnly)
|
||||
{
|
||||
TString Dir = (mpDirectory ? mpDirectory->FullPath() : "");
|
||||
|
||||
rArc << SERIAL("Name", mName)
|
||||
<< SERIAL("Directory", Dir)
|
||||
<< SERIAL_ABSTRACT("Dependencies", mpDependencies, &gDependencyNodeFactory);
|
||||
rArc << SerialParameter("Name", mName)
|
||||
<< SerialParameter("Directory", Dir)
|
||||
<< SerialParameter("Dependencies", mpDependencies);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
|
||||
@@ -62,17 +62,17 @@ void RecursiveGetListOfEmptyDirectories(CVirtualDirectory *pDir, TStringList& rO
|
||||
bool CResourceStore::SerializeDatabaseCache(IArchive& rArc)
|
||||
{
|
||||
// Serialize resources
|
||||
if (rArc.ParamBegin("Resources"))
|
||||
if (rArc.ParamBegin("Resources", 0))
|
||||
{
|
||||
// Serialize resources
|
||||
u32 ResourceCount = mResourceEntries.size();
|
||||
rArc << SERIAL_AUTO(ResourceCount);
|
||||
rArc << SerialParameter("ResourceCount", ResourceCount);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
for (u32 ResIdx = 0; ResIdx < ResourceCount; ResIdx++)
|
||||
{
|
||||
if (rArc.ParamBegin("Resource"))
|
||||
if (rArc.ParamBegin("Resource", 0))
|
||||
{
|
||||
CResourceEntry *pEntry = CResourceEntry::BuildFromArchive(this, rArc);
|
||||
ASSERT( FindEntry(pEntry->ID()) == nullptr );
|
||||
@@ -85,7 +85,7 @@ bool CResourceStore::SerializeDatabaseCache(IArchive& rArc)
|
||||
{
|
||||
for (CResourceIterator It(this); It; ++It)
|
||||
{
|
||||
if (rArc.ParamBegin("Resource"))
|
||||
if (rArc.ParamBegin("Resource", 0))
|
||||
{
|
||||
It->SerializeEntryInfo(rArc, false);
|
||||
rArc.ParamEnd();
|
||||
@@ -101,7 +101,7 @@ bool CResourceStore::SerializeDatabaseCache(IArchive& rArc)
|
||||
if (!rArc.IsReader())
|
||||
RecursiveGetListOfEmptyDirectories(mpDatabaseRoot, EmptyDirectories);
|
||||
|
||||
rArc << SERIAL_CONTAINER_AUTO(EmptyDirectories, "Directory");
|
||||
rArc << SerialParameter("EmptyDirectories", EmptyDirectories);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
|
||||
@@ -15,6 +15,7 @@ CAnimationParameters::CAnimationParameters()
|
||||
|
||||
CAnimationParameters::CAnimationParameters(EGame Game)
|
||||
: mGame(Game)
|
||||
, mCharacterID( CAssetID::InvalidID(Game) )
|
||||
, mCharIndex(0)
|
||||
, mAnimIndex(0)
|
||||
, mUnknown2(0)
|
||||
@@ -141,17 +142,17 @@ void CAnimationParameters::Serialize(IArchive& rArc)
|
||||
if (rArc.IsReader())
|
||||
mGame = rArc.Game();
|
||||
|
||||
rArc << SERIAL("AnimationSetAsset", mCharacterID);
|
||||
rArc << SerialParameter("AnimationSetAsset", mCharacterID);
|
||||
|
||||
if (mGame <= eEchoes)
|
||||
rArc << SERIAL("CharacterID", mCharIndex);
|
||||
rArc << SerialParameter("CharacterID", mCharIndex);
|
||||
|
||||
rArc << SERIAL("AnimationID", mAnimIndex);
|
||||
rArc << SerialParameter("AnimationID", mAnimIndex);
|
||||
|
||||
if (mGame >= eReturns)
|
||||
{
|
||||
rArc << SERIAL("Unknown0", mUnknown2)
|
||||
<< SERIAL("Unknown1", mUnknown3);
|
||||
rArc << SerialParameter("Unknown0", mUnknown2)
|
||||
<< SerialParameter("Unknown1", mUnknown3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,11 +35,36 @@ public:
|
||||
inline void SetCharIndex(u32 Index) { mCharIndex = Index; }
|
||||
inline void SetAnimIndex(u32 Index) { mAnimIndex = Index; }
|
||||
|
||||
inline void SetGame(EGame Game)
|
||||
{
|
||||
mGame = Game;
|
||||
|
||||
if (!mCharacterID.IsValid())
|
||||
{
|
||||
mCharacterID = CAssetID::InvalidID(mGame);
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT( mCharacterID.Length() == CAssetID::GameIDLength(mGame) );
|
||||
}
|
||||
}
|
||||
|
||||
u32 Unknown(u32 Index);
|
||||
void SetResource(const CAssetID& rkID);
|
||||
void SetUnknown(u32 Index, u32 Value);
|
||||
|
||||
// Operators
|
||||
inline CAnimationParameters& operator=(const CAnimationParameters& rkOther)
|
||||
{
|
||||
mGame = rkOther.mGame;
|
||||
mCharacterID = rkOther.mCharacterID;
|
||||
mCharIndex = rkOther.mCharIndex;
|
||||
mAnimIndex = rkOther.mAnimIndex;
|
||||
mUnknown2 = rkOther.mUnknown2;
|
||||
mUnknown3 = rkOther.mUnknown3;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline bool operator==(const CAnimationParameters& rkOther) const
|
||||
{
|
||||
return ( (mGame == rkOther.mGame) &&
|
||||
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
if (rArc.IsReader()) mGame = rArc.Game();
|
||||
rArc << SERIAL_CONTAINER("AcceptedTypes", mAcceptedTypes, "Type");
|
||||
rArc << SerialParameter("AcceptedTypes", mAcceptedTypes);
|
||||
}
|
||||
|
||||
inline bool Accepts(EResType Type) const
|
||||
|
||||
@@ -114,7 +114,7 @@ void Serialize(IArchive& rArc, CResTypeInfo*& rpType)
|
||||
Ext = rpType->CookedExtension(rArc.Game());
|
||||
}
|
||||
|
||||
rArc.SerializePrimitive(Ext);
|
||||
rArc.SerializePrimitive(Ext, 0);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
@@ -134,7 +134,7 @@ void Serialize(IArchive& rArc, EResType& rType)
|
||||
Extension = pTypeInfo->CookedExtension(rArc.Game());
|
||||
}
|
||||
|
||||
rArc.SerializePrimitive(Extension);
|
||||
rArc.SerializePrimitive(Extension, 0);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
|
||||
@@ -46,10 +46,18 @@ public:
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
TString Str;
|
||||
if (rArc.IsWriter()) Str = ToString();
|
||||
rArc.SerializePrimitive(Str);
|
||||
if (rArc.IsReader()) *this = FromString(Str);
|
||||
if (rArc.IsBinaryFormat())
|
||||
{
|
||||
rArc.SerializePrimitive(m[0], 0);
|
||||
rArc.SerializePrimitive(m[1], 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
TString Str;
|
||||
if (rArc.IsWriter()) Str = ToString();
|
||||
rArc.SerializePrimitive(Str, 0);
|
||||
if (rArc.IsReader()) *this = FromString(Str);
|
||||
}
|
||||
}
|
||||
|
||||
// Operators
|
||||
|
||||
@@ -92,87 +92,87 @@ u32 CWorld::AreaIndex(CAssetID AreaID) const
|
||||
// ************ SERIALIZATION ************
|
||||
void CWorld::Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("Name", mName)
|
||||
<< SERIAL("NameString", mpWorldName);
|
||||
rArc << SerialParameter("Name", mName)
|
||||
<< SerialParameter("NameString", mpWorldName);
|
||||
|
||||
if (rArc.Game() == eEchoesDemo || rArc.Game() == eEchoes)
|
||||
rArc << SERIAL("DarkNameString", mpDarkWorldName);
|
||||
rArc << SerialParameter("DarkNameString", mpDarkWorldName);
|
||||
|
||||
rArc << SERIAL("WorldSaveInfo", mpSaveWorld)
|
||||
<< SERIAL("WorldMap", mpMapWorld)
|
||||
<< SERIAL("DefaultSkyModel", mpDefaultSkybox);
|
||||
rArc << SerialParameter("WorldSaveInfo", mpSaveWorld)
|
||||
<< SerialParameter("WorldMap", mpMapWorld)
|
||||
<< SerialParameter("DefaultSkyModel", mpDefaultSkybox);
|
||||
|
||||
if (rArc.Game() >= eEchoesDemo && rArc.Game() <= eCorruption)
|
||||
rArc << SERIAL("TempleKeyWorldIndex", mTempleKeyWorldIndex);
|
||||
rArc << SerialParameter("TempleKeyWorldIndex", mTempleKeyWorldIndex);
|
||||
|
||||
if (rArc.Game() == eReturns)
|
||||
rArc << SERIAL("TimeAttackData", mTimeAttackData);
|
||||
rArc << SerialParameter("TimeAttackData", mTimeAttackData);
|
||||
|
||||
if (rArc.Game() == ePrime)
|
||||
rArc << SERIAL_CONTAINER("MemoryRelays", mMemoryRelays, "MemoryRelay");
|
||||
rArc << SerialParameter("MemoryRelays", mMemoryRelays);
|
||||
|
||||
rArc << SERIAL_CONTAINER("Areas", mAreas, "Area");
|
||||
rArc << SerialParameter("Areas", mAreas);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::STimeAttackData& rData)
|
||||
{
|
||||
rArc << SERIAL("HasTimeAttack", rData.HasTimeAttack)
|
||||
<< SERIAL("ActNumber", rData.ActNumber)
|
||||
<< SERIAL("BronzeTime", rData.BronzeTime)
|
||||
<< SERIAL("SilverTime", rData.SilverTime)
|
||||
<< SERIAL("GoldTime", rData.GoldTime)
|
||||
<< SERIAL("ShinyGoldTime", rData.ShinyGoldTime);
|
||||
rArc << SerialParameter("HasTimeAttack", rData.HasTimeAttack)
|
||||
<< SerialParameter("ActNumber", rData.ActNumber)
|
||||
<< SerialParameter("BronzeTime", rData.BronzeTime)
|
||||
<< SerialParameter("SilverTime", rData.SilverTime)
|
||||
<< SerialParameter("GoldTime", rData.GoldTime)
|
||||
<< SerialParameter("ShinyGoldTime", rData.ShinyGoldTime);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SMemoryRelay& rMemRelay)
|
||||
{
|
||||
rArc << SERIAL_HEX("MemoryRelayID", rMemRelay.InstanceID)
|
||||
<< SERIAL_HEX("TargetID", rMemRelay.TargetID)
|
||||
<< SERIAL("Message", rMemRelay.Message)
|
||||
<< SERIAL("Active", rMemRelay.Active);
|
||||
rArc << SerialParameter("MemoryRelayID", rMemRelay.InstanceID, SH_HexDisplay)
|
||||
<< SerialParameter("TargetID", rMemRelay.TargetID, SH_HexDisplay)
|
||||
<< SerialParameter("Message", rMemRelay.Message)
|
||||
<< SerialParameter("Active", rMemRelay.Active);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SArea& rArea)
|
||||
{
|
||||
rArc << SERIAL("Name", rArea.InternalName)
|
||||
<< SERIAL("NameString", rArea.pAreaName)
|
||||
<< SERIAL("MREA", rArea.AreaResID)
|
||||
<< SERIAL("ID", rArea.AreaID)
|
||||
<< SERIAL("Transform", rArea.Transform)
|
||||
<< SERIAL("BoundingBox", rArea.AetherBox)
|
||||
<< SERIAL("AllowPakDuplicates", rArea.AllowPakDuplicates)
|
||||
<< SERIAL_CONTAINER("AttachedAreas", rArea.AttachedAreaIDs, "AreaIndex")
|
||||
<< SERIAL_CONTAINER("RelModules", rArea.RelFilenames, "Module")
|
||||
<< SERIAL_CONTAINER("RelOffsets", rArea.RelOffsets, "Offset")
|
||||
<< SERIAL_CONTAINER("Docks", rArea.Docks, "Dock")
|
||||
<< SERIAL_CONTAINER("Layers", rArea.Layers, "Layer");
|
||||
rArc << SerialParameter("Name", rArea.InternalName)
|
||||
<< SerialParameter("NameString", rArea.pAreaName)
|
||||
<< SerialParameter("MREA", rArea.AreaResID)
|
||||
<< SerialParameter("ID", rArea.AreaID)
|
||||
<< SerialParameter("Transform", rArea.Transform)
|
||||
<< SerialParameter("BoundingBox", rArea.AetherBox)
|
||||
<< SerialParameter("AllowPakDuplicates", rArea.AllowPakDuplicates)
|
||||
<< SerialParameter("AttachedAreas", rArea.AttachedAreaIDs)
|
||||
<< SerialParameter("RelModules", rArea.RelFilenames)
|
||||
<< SerialParameter("RelOffsets", rArea.RelOffsets)
|
||||
<< SerialParameter("Docks", rArea.Docks)
|
||||
<< SerialParameter("Layers", rArea.Layers);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SArea::SDock& rDock)
|
||||
{
|
||||
rArc << SERIAL_CONTAINER("ConnectingDocks", rDock.ConnectingDocks, "ConnectingDock")
|
||||
<< SERIAL_CONTAINER("DockCoords", rDock.DockCoordinates, "Coord");
|
||||
rArc << SerialParameter("ConnectingDocks", rDock.ConnectingDocks)
|
||||
<< SerialParameter("DockCoords", rDock.DockCoordinates);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SArea::SDock::SConnectingDock& rDock)
|
||||
{
|
||||
rArc << SERIAL("AreaIndex", rDock.AreaIndex)
|
||||
<< SERIAL("DockIndex", rDock.DockIndex);
|
||||
rArc << SerialParameter("AreaIndex", rDock.AreaIndex)
|
||||
<< SerialParameter("DockIndex", rDock.DockIndex);
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SArea::SLayer& rLayer)
|
||||
{
|
||||
rArc << SERIAL("Name", rLayer.LayerName)
|
||||
<< SERIAL("Active", rLayer.Active);
|
||||
rArc << SerialParameter("Name", rLayer.LayerName)
|
||||
<< SerialParameter("Active", rLayer.Active);
|
||||
|
||||
if (rArc.Game() >= eCorruption)
|
||||
{
|
||||
rArc << SERIAL("StateID", rLayer.LayerStateID);
|
||||
rArc << SerialParameter("StateID", rLayer.LayerStateID);
|
||||
}
|
||||
}
|
||||
|
||||
void Serialize(IArchive& rArc, CWorld::SAudioGrp& rAudioGrp)
|
||||
{
|
||||
rArc << SERIAL("GroupID", rAudioGrp.GroupID)
|
||||
<< SERIAL("AGSC", rAudioGrp.ResID);
|
||||
rArc << SerialParameter("GroupID", rAudioGrp.GroupID)
|
||||
<< SerialParameter("AGSC", rAudioGrp.ResID);
|
||||
}
|
||||
|
||||
@@ -95,14 +95,14 @@ void IPropertyNew::Serialize(IArchive& rArc)
|
||||
{
|
||||
if (rArc.Game() <= ePrime)
|
||||
{
|
||||
rArc << SERIAL("Name", mName);
|
||||
rArc << SerialParameter("Name", mName);
|
||||
}
|
||||
|
||||
rArc << SERIAL_HEX("ID", mID)
|
||||
<< SERIAL("Description", mDescription)
|
||||
<< SERIAL("CookPref", mCookPreference)
|
||||
<< SERIAL("MinVersion", mMinVersion)
|
||||
<< SERIAL("MaxVersion", mMaxVersion);
|
||||
rArc << SerialParameter("ID", mID, SH_HexDisplay | SH_Optional, (u32) 0xFFFFFFFF)
|
||||
<< SerialParameter("Description", mDescription, SH_Optional)
|
||||
<< SerialParameter("CookPref", mCookPreference, SH_Optional, ECookPreferenceNew::Default)
|
||||
<< SerialParameter("MinVersion", mMinVersion, SH_Optional, 0.f)
|
||||
<< SerialParameter("MaxVersion", mMaxVersion, SH_Optional, FLT_MAX);
|
||||
|
||||
// Children don't get serialized for most property types
|
||||
}
|
||||
@@ -359,3 +359,12 @@ IPropertyNew* IPropertyNew::CreateIntrinsic(EPropertyTypeNew Type,
|
||||
pOut->PostInitialize();
|
||||
return pOut;
|
||||
}
|
||||
|
||||
IPropertyNew* IPropertyNew::ArchiveConstructor(EPropertyTypeNew Type,
|
||||
const IArchive& Arc)
|
||||
{
|
||||
IPropertyNew* pParent = Arc.FindParentObject<IPropertyNew>();
|
||||
CScriptTemplate* pTemplate = (pParent ? pParent->ScriptTemplate() : Arc.FindParentObject<CScriptTemplate>());
|
||||
EGame Game = Arc.Game();
|
||||
return Create(Type, pParent, Game, pTemplate);
|
||||
}
|
||||
|
||||
@@ -230,6 +230,9 @@ public:
|
||||
IPropertyNew* pParent,
|
||||
u32 Offset,
|
||||
const TString& rkName);
|
||||
|
||||
static IPropertyNew* ArchiveConstructor(EPropertyTypeNew Type,
|
||||
const IArchive& Arc);
|
||||
};
|
||||
|
||||
inline ECookPreferenceNew IPropertyNew::CookPreference() const
|
||||
@@ -374,7 +377,43 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
IPropertyNew::Serialize(rArc);
|
||||
rArc << SERIAL("DefaultValue", mDefaultValue);
|
||||
|
||||
// Determine if default value should be serialized as optional.
|
||||
// All MP1 properties should be optional. For MP2 and on, we set optional
|
||||
// on property types that don't have default values in the game executable.
|
||||
bool MakeOptional = false;
|
||||
|
||||
if (Game() <= ePrime)
|
||||
{
|
||||
MakeOptional = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type())
|
||||
{
|
||||
case EPropertyTypeNew::String:
|
||||
case EPropertyTypeNew::Asset:
|
||||
case EPropertyTypeNew::Animation:
|
||||
case EPropertyTypeNew::AnimationSet:
|
||||
case EPropertyTypeNew::Sequence:
|
||||
case EPropertyTypeNew::Spline:
|
||||
case EPropertyTypeNew::Guid:
|
||||
MakeOptional = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Branch here to avoid constructing a default value if we don't need to.
|
||||
if (MakeOptional)
|
||||
rArc << SerialParameter("DefaultValue", mDefaultValue, SH_Optional, GetSerializationDefaultValue());
|
||||
else
|
||||
rArc << SerialParameter("DefaultValue", mDefaultValue);
|
||||
}
|
||||
|
||||
/** Return default value for serialization - can be customized per type */
|
||||
virtual PropType GetSerializationDefaultValue()
|
||||
{
|
||||
return PropType();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -398,8 +437,8 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
TTypedPropertyNew::Serialize(rArc);
|
||||
rArc << SERIAL("Min", mMinValue)
|
||||
<< SERIAL("Max", mMaxValue);
|
||||
rArc << SerialParameter("Min", mMinValue, SH_Optional, (PropType) -1)
|
||||
<< SerialParameter("Max", mMaxValue, SH_Optional, (PropType) -1);
|
||||
}
|
||||
|
||||
virtual void InitFromArchetype(IPropertyNew* pOther)
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& rArc) const
|
||||
{
|
||||
rArc.SerializeHexPrimitive( (u32&) ValueRef(pData) );
|
||||
rArc.SerializePrimitive( (u32&) ValueRef(pData), SH_HexDisplay );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -13,6 +13,11 @@ protected:
|
||||
{}
|
||||
|
||||
public:
|
||||
virtual void PostInitialize()
|
||||
{
|
||||
mDefaultValue.SetGame(Game());
|
||||
}
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Value(pData).Serialize(Arc);
|
||||
@@ -22,6 +27,11 @@ public:
|
||||
{
|
||||
return (Game() <= eEchoes ? "AnimationSet" : "CharacterAnimationSet");
|
||||
}
|
||||
|
||||
virtual CAnimationParameters GetSerializationDefaultValue()
|
||||
{
|
||||
return CAnimationParameters( Game() );
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CANIMATIONSETPROPERTY_H
|
||||
|
||||
@@ -108,20 +108,20 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
TTypedPropertyNew::Serialize(rArc);
|
||||
//rArc << SERIAL("ItemArchetype", mpItemArchetype);
|
||||
rArc << SerialParameter("ItemArchetype", mpItemArchetype);
|
||||
}
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
u32 Count = ArrayCount(pData);
|
||||
Arc.SerializeContainerSize(Count, "ArrayElement");
|
||||
Arc.SerializeArraySize(Count);
|
||||
|
||||
if (Arc.IsReader())
|
||||
Resize(pData, Count);
|
||||
|
||||
for (u32 ItemIdx = 0; ItemIdx < Count; ItemIdx++)
|
||||
{
|
||||
if (Arc.ParamBegin("ArrayElement"))
|
||||
if (Arc.ParamBegin("ArrayElement", 0))
|
||||
{
|
||||
void* pItemData = ItemPointer(pData, ItemIdx);
|
||||
mpItemArchetype->SerializeValue(pItemData, Arc);
|
||||
|
||||
@@ -10,10 +10,19 @@ class CAssetProperty : public TSerializeableTypedProperty<CAssetID, EPropertyTyp
|
||||
CResTypeFilter mTypeFilter;
|
||||
|
||||
public:
|
||||
virtual void PostInitialize()
|
||||
{
|
||||
// Init default value to an invalid ID depending on the game
|
||||
if (!mDefaultValue.IsValid())
|
||||
{
|
||||
mDefaultValue = CAssetID::InvalidID( mGame );
|
||||
}
|
||||
}
|
||||
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
TSerializeableTypedProperty::Serialize(rArc);
|
||||
rArc << SERIAL("AcceptedTypes", mTypeFilter);
|
||||
rArc << SerialParameter("TypeFilter", mTypeFilter);
|
||||
}
|
||||
|
||||
virtual void InitFromArchetype(IPropertyNew* pOther)
|
||||
@@ -24,7 +33,7 @@ public:
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
@@ -32,6 +41,11 @@ public:
|
||||
return Value(pData).ToString();
|
||||
}
|
||||
|
||||
virtual CAssetID GetSerializationDefaultValue()
|
||||
{
|
||||
return CAssetID::InvalidID(Game());
|
||||
}
|
||||
|
||||
void SetTypeFilter(const TStringList& rkExtensions)
|
||||
{
|
||||
mTypeFilter.SetAcceptedTypes(Game(), rkExtensions);
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData)
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (u8&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( (u8&) ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -34,8 +34,8 @@ class TEnumPropertyBase : public TSerializeableTypedProperty<s32, TypeEnum>
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL_AUTO(Name)
|
||||
<< SERIAL_HEX_AUTO(ID);
|
||||
rArc << SerialParameter("Name", Name)
|
||||
<< SerialParameter("ID", ID, SH_HexDisplay);
|
||||
}
|
||||
};
|
||||
std::vector<SEnumValue> mValues;
|
||||
@@ -55,12 +55,12 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
TSerializeableTypedProperty::Serialize(rArc);
|
||||
rArc << SERIAL_CONTAINER("Values", mValues, "Values");
|
||||
rArc << SerialParameter("Values", mValues);
|
||||
}
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (u32&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( (u32&) ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual void InitFromArchetype(IPropertyNew* pOther)
|
||||
|
||||
@@ -28,8 +28,8 @@ class CFlagsProperty : public TSerializeableTypedProperty<u32, EPropertyTypeNew:
|
||||
|
||||
void Serialize(IArchive& rArc)
|
||||
{
|
||||
rArc << SERIAL("FlagName", Name)
|
||||
<< SERIAL_HEX("FlagMask", Mask);
|
||||
rArc << SerialParameter("Name", Name)
|
||||
<< SerialParameter("Mask", Mask, SH_HexDisplay);
|
||||
}
|
||||
};
|
||||
std::vector<SBitFlag> mBitFlags;
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
TSerializeableTypedProperty::Serialize(rArc);
|
||||
rArc << SERIAL_CONTAINER("Flags", mBitFlags, "Flag");
|
||||
rArc << SerialParameter("Flags", mBitFlags);
|
||||
}
|
||||
|
||||
virtual void PostInitialize()
|
||||
@@ -80,7 +80,7 @@ public:
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& rArc) const
|
||||
{
|
||||
rArc.SerializeHexPrimitive( (u32&) ValueRef(pData) );
|
||||
rArc.SerializePrimitive( (u32&) ValueRef(pData), SH_HexDisplay );
|
||||
}
|
||||
|
||||
virtual void InitFromArchetype(IPropertyNew* pOther)
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (float&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( (float&) ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializeBulkData( ValueRef(pData) );
|
||||
Arc << SerialParameter("Data", ValueRef(pData));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (u32&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (u16&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( (u32&) ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData)
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializeBulkData( ValueRef(pData) );
|
||||
Arc << SerialParameter("Data", ValueRef(pData));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ protected:
|
||||
public:
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
Arc.SerializePrimitive( ValueRef(pData) );
|
||||
Arc.SerializePrimitive( ValueRef(pData), 0 );
|
||||
}
|
||||
|
||||
virtual TString ValueAsString(void* pData) const
|
||||
|
||||
@@ -90,43 +90,14 @@ public:
|
||||
virtual void Serialize(IArchive& rArc)
|
||||
{
|
||||
IPropertyNew::Serialize(rArc);
|
||||
|
||||
if (rArc.ParamBegin("SubProperties"))
|
||||
{
|
||||
u32 NumChildren = mChildren.size();
|
||||
rArc.SerializeContainerSize(NumChildren, "Property");
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
mChildren.resize(NumChildren);
|
||||
}
|
||||
|
||||
for (u32 ChildIdx = 0; ChildIdx < NumChildren; ChildIdx++)
|
||||
{
|
||||
if (rArc.ParamBegin("Property"))
|
||||
{
|
||||
EPropertyTypeNew Type = (rArc.IsWriter() ? mChildren[ChildIdx]->Type() : EPropertyTypeNew::Invalid);
|
||||
rArc << SERIAL_AUTO(Type);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
mChildren[ChildIdx] = Create(Type, this, mGame, mpScriptTemplate);
|
||||
}
|
||||
|
||||
mChildren[ChildIdx]->Serialize(rArc);
|
||||
rArc.ParamEnd();
|
||||
}
|
||||
}
|
||||
|
||||
rArc.ParamEnd();
|
||||
}
|
||||
rArc << SerialParameter("SubProperties", mChildren);
|
||||
}
|
||||
|
||||
virtual void SerializeValue(void* pData, IArchive& Arc) const
|
||||
{
|
||||
for (u32 ChildIdx = 0; ChildIdx < mChildren.size(); ChildIdx++)
|
||||
{
|
||||
if (Arc.ParamBegin("Property"))
|
||||
if (Arc.ParamBegin("Property", 0))
|
||||
{
|
||||
mChildren[ChildIdx]->SerializeValue(pData, Arc);
|
||||
Arc.ParamEnd();
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
inline void Serialize(IArchive& rArc)
|
||||
{
|
||||
CAssetID ID = (mpRes && !rArc.IsReader() ? mpRes->ID() : CAssetID::InvalidID(rArc.Game()));
|
||||
rArc.SerializePrimitive(ID);
|
||||
rArc.SerializePrimitive(ID, 0);
|
||||
|
||||
if (rArc.IsReader())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user