mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-14 23:56:23 +00:00
Major refactor of serialization system
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user