Made IPropertyTemplate::CookPreference non-virtual and replaced it with IProperty::ShouldCook
This commit is contained in:
parent
6e9f2e9037
commit
baeb898f22
|
@ -140,11 +140,9 @@ void CScriptCooker::WriteProperty(IProperty *pProp, bool InSingleStruct)
|
||||||
|
|
||||||
for (u32 iProp = 0; iProp < pStruct->Count(); iProp++)
|
for (u32 iProp = 0; iProp < pStruct->Count(); iProp++)
|
||||||
{
|
{
|
||||||
IProperty *pSubProp = pStruct->PropertyByIndex(iProp);
|
IProperty *pSubProp = pStruct->PropertyByIndex(iProp);\
|
||||||
ECookPreference Pref = pSubProp->Template()->CookPreference();
|
|
||||||
if (Pref == eNeverCook) continue;
|
|
||||||
|
|
||||||
if (mVersion < eReturns || pTemp->IsSingleProperty() || Pref == eAlwaysCook || !pSubProp->MatchesDefault())
|
if (pTemp->IsSingleProperty() || pSubProp->ShouldCook())
|
||||||
PropertiesToWrite.push_back(pSubProp);
|
PropertiesToWrite.push_back(pSubProp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,20 @@ TIDString IProperty::IDString(bool FullPath) const
|
||||||
return mpTemplate->IDString(FullPath);
|
return mpTemplate->IDString(FullPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IProperty::ShouldCook()
|
||||||
|
{
|
||||||
|
if (mpTemplate->CookPreference() == eNeverCook) return false;
|
||||||
|
else if (mpTemplate->CookPreference() == eAlwaysCook) return true;
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mpTemplate->Game() == eReturns)
|
||||||
|
return !MatchesDefault();
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool IProperty::MatchesDefault()
|
bool IProperty::MatchesDefault()
|
||||||
{
|
{
|
||||||
const IPropertyValue *pkValue = RawValue();
|
const IPropertyValue *pkValue = RawValue();
|
||||||
|
@ -63,6 +77,19 @@ void CPropertyStruct::Copy(const IProperty *pkProp)
|
||||||
mProperties[iSub] = pkSource->mProperties[iSub]->Clone(this);
|
mProperties[iSub] = pkSource->mProperties[iSub]->Clone(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CPropertyStruct::ShouldCook()
|
||||||
|
{
|
||||||
|
if (mpTemplate->CookPreference() == eNeverCook) return false;
|
||||||
|
|
||||||
|
for (u32 iProp = 0; iProp < mProperties.size(); iProp++)
|
||||||
|
{
|
||||||
|
if (mProperties[iProp]->ShouldCook())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
IProperty* CPropertyStruct::PropertyByIndex(u32 index) const
|
IProperty* CPropertyStruct::PropertyByIndex(u32 index) const
|
||||||
{
|
{
|
||||||
return mProperties[index];
|
return mProperties[index];
|
||||||
|
@ -138,6 +165,11 @@ CPropertyStruct* CPropertyStruct::StructByIDString(const TIDString& rkStr) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// ************ CArrayProperty ************
|
// ************ CArrayProperty ************
|
||||||
|
bool CArrayProperty::ShouldCook()
|
||||||
|
{
|
||||||
|
return (mpTemplate->CookPreference() == eNeverCook ? false : true);
|
||||||
|
}
|
||||||
|
|
||||||
void CArrayProperty::Resize(int Size)
|
void CArrayProperty::Resize(int Size)
|
||||||
{
|
{
|
||||||
int OldSize = mProperties.size();
|
int OldSize = mProperties.size();
|
||||||
|
|
|
@ -45,6 +45,9 @@ public:
|
||||||
virtual IProperty* Clone(CPropertyStruct *pParent = 0) const = 0;
|
virtual IProperty* Clone(CPropertyStruct *pParent = 0) const = 0;
|
||||||
virtual bool Matches(const IProperty *pkProp) const = 0;
|
virtual bool Matches(const IProperty *pkProp) const = 0;
|
||||||
|
|
||||||
|
virtual bool ShouldCook(); // Can't be const because it calls MatchesDefault()
|
||||||
|
virtual bool MatchesDefault(); // Can't be const because RawValue() isn't const
|
||||||
|
|
||||||
inline CPropertyStruct* Parent() const { return mpParent; }
|
inline CPropertyStruct* Parent() const { return mpParent; }
|
||||||
inline void SetParent(CPropertyStruct *pParent) { mpParent = pParent; }
|
inline void SetParent(CPropertyStruct *pParent) { mpParent = pParent; }
|
||||||
|
|
||||||
|
@ -56,13 +59,12 @@ public:
|
||||||
TString Name() const;
|
TString Name() const;
|
||||||
u32 ID() const;
|
u32 ID() const;
|
||||||
TIDString IDString(bool FullPath) const;
|
TIDString IDString(bool FullPath) const;
|
||||||
virtual bool MatchesDefault();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TTypedProperty is a template subclass for actual properties.
|
* TTypedProperty is a template subclass for actual properties.
|
||||||
*/
|
*/
|
||||||
template <typename PropType, EPropertyType TypeEnum, class ValueClass>
|
template <typename ValueType, EPropertyType TypeEnum, class ValueClass>
|
||||||
class TTypedProperty : public IProperty
|
class TTypedProperty : public IProperty
|
||||||
{
|
{
|
||||||
friend class CScriptLoader;
|
friend class CScriptLoader;
|
||||||
|
@ -71,7 +73,7 @@ public:
|
||||||
TTypedProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
TTypedProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
||||||
: IProperty(pTemp, pParent) {}
|
: IProperty(pTemp, pParent) {}
|
||||||
|
|
||||||
TTypedProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent, PropType v)
|
TTypedProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent, ValueType v)
|
||||||
: IProperty(pTemp, pParent), mValue(v) {}
|
: IProperty(pTemp, pParent), mValue(v) {}
|
||||||
|
|
||||||
~TTypedProperty() {}
|
~TTypedProperty() {}
|
||||||
|
@ -103,8 +105,8 @@ public:
|
||||||
mValue.Matches(&pkTyped->mValue) );
|
mValue.Matches(&pkTyped->mValue) );
|
||||||
}
|
}
|
||||||
|
|
||||||
inline PropType Get() const { return mValue.Get(); }
|
inline ValueType Get() const { return mValue.Get(); }
|
||||||
inline void Set(PropType v) { mValue.Set(v); }
|
inline void Set(ValueType v) { mValue.Set(v); }
|
||||||
};
|
};
|
||||||
typedef TTypedProperty<bool, eBoolProperty, CBoolValue> TBoolProperty;
|
typedef TTypedProperty<bool, eBoolProperty, CBoolValue> TBoolProperty;
|
||||||
typedef TTypedProperty<char, eByteProperty, CByteValue> TByteProperty;
|
typedef TTypedProperty<char, eByteProperty, CByteValue> TByteProperty;
|
||||||
|
@ -113,53 +115,48 @@ typedef TTypedProperty<long, eLongProperty, CLongValue>
|
||||||
typedef TTypedProperty<long, eEnumProperty, CLongValue> TEnumProperty;
|
typedef TTypedProperty<long, eEnumProperty, CLongValue> TEnumProperty;
|
||||||
typedef TTypedProperty<long, eBitfieldProperty, CHexLongValue> TBitfieldProperty;
|
typedef TTypedProperty<long, eBitfieldProperty, CHexLongValue> TBitfieldProperty;
|
||||||
typedef TTypedProperty<float, eFloatProperty, CFloatValue> TFloatProperty;
|
typedef TTypedProperty<float, eFloatProperty, CFloatValue> TFloatProperty;
|
||||||
typedef TTypedProperty<TString, eStringProperty, CStringValue> TStringProperty;
|
|
||||||
typedef TTypedProperty<CVector3f, eVector3Property, CVector3Value> TVector3Property;
|
typedef TTypedProperty<CVector3f, eVector3Property, CVector3Value> TVector3Property;
|
||||||
typedef TTypedProperty<CColor, eColorProperty, CColorValue> TColorProperty;
|
typedef TTypedProperty<CColor, eColorProperty, CColorValue> TColorProperty;
|
||||||
typedef TTypedProperty<std::vector<u8>, eUnknownProperty, CUnknownValue> TUnknownProperty;
|
typedef TTypedProperty<std::vector<u8>, eUnknownProperty, CUnknownValue> TUnknownProperty;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TFileProperty and TCharacterProperty get little subclasses in order to override MatchesDefault.
|
* TStringProperty, TFileProperty, and TCharacterProperty get little subclasses in order to override some virtual functions.
|
||||||
*/
|
*/
|
||||||
|
#define IMPLEMENT_PROPERTY_CTORS(ClassName, ValueType) \
|
||||||
|
ClassName(IPropertyTemplate *pTemp, CPropertyStruct *pParent) \
|
||||||
|
: TTypedProperty(pTemp, pParent) {} \
|
||||||
|
\
|
||||||
|
ClassName(IPropertyTemplate *pTemp, CPropertyStruct *pParent, ValueType v) \
|
||||||
|
: TTypedProperty(pTemp, pParent, v) {}
|
||||||
|
|
||||||
|
class TStringProperty : public TTypedProperty<TString, eStringProperty, CStringValue>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IMPLEMENT_PROPERTY_CTORS(TStringProperty, TString)
|
||||||
|
virtual bool MatchesDefault() { return Get().IsEmpty(); }
|
||||||
|
virtual bool ShouldCook() { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
class TFileProperty : public TTypedProperty<CResourceInfo, eFileProperty, CFileValue>
|
class TFileProperty : public TTypedProperty<CResourceInfo, eFileProperty, CFileValue>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TFileProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
IMPLEMENT_PROPERTY_CTORS(TFileProperty, CResourceInfo)
|
||||||
: TTypedProperty(pTemp, pParent) {}
|
virtual bool MatchesDefault() { return !Get().IsValid(); }
|
||||||
|
virtual bool ShouldCook() { return true; }
|
||||||
TFileProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent, CResourceInfo v)
|
|
||||||
: TTypedProperty(pTemp, pParent, v) {}
|
|
||||||
|
|
||||||
virtual bool MatchesDefault()
|
|
||||||
{
|
|
||||||
return !Get().IsValid();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TCharacterProperty : public TTypedProperty<CAnimationParameters, eCharacterProperty, CCharacterValue>
|
class TCharacterProperty : public TTypedProperty<CAnimationParameters, eCharacterProperty, CCharacterValue>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TCharacterProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
IMPLEMENT_PROPERTY_CTORS(TCharacterProperty, CAnimationParameters)
|
||||||
: TTypedProperty(pTemp, pParent) {}
|
virtual bool MatchesDefault() { return Get().AnimSet() == nullptr; }
|
||||||
|
virtual bool ShouldCook() { return true; }
|
||||||
TCharacterProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent, CAnimationParameters v)
|
|
||||||
: TTypedProperty(pTemp, pParent, v) {}
|
|
||||||
|
|
||||||
virtual bool MatchesDefault()
|
|
||||||
{
|
|
||||||
return Get().AnimSet() == nullptr;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TMayaSplineProperty : public TTypedProperty<std::vector<u8>, eMayaSplineProperty, CMayaSplineValue>
|
class TMayaSplineProperty : public TTypedProperty<std::vector<u8>, eMayaSplineProperty, CMayaSplineValue>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TMayaSplineProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
IMPLEMENT_PROPERTY_CTORS(TMayaSplineProperty, std::vector<u8>)
|
||||||
: TTypedProperty(pTemp, pParent) {}
|
|
||||||
|
|
||||||
TMayaSplineProperty(IPropertyTemplate *pTemp, CPropertyStruct *pParent, const std::vector<u8>& v)
|
|
||||||
: TTypedProperty(pTemp, pParent, v) {}
|
|
||||||
|
|
||||||
virtual bool MatchesDefault() { return Get().empty(); }
|
virtual bool MatchesDefault() { return Get().empty(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -175,7 +172,8 @@ public:
|
||||||
CPropertyStruct(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
CPropertyStruct(IPropertyTemplate *pTemp, CPropertyStruct *pParent)
|
||||||
: IProperty(pTemp, pParent) {}
|
: IProperty(pTemp, pParent) {}
|
||||||
|
|
||||||
~CPropertyStruct() {
|
~CPropertyStruct()
|
||||||
|
{
|
||||||
for (auto it = mProperties.begin(); it != mProperties.end(); it++)
|
for (auto it = mProperties.begin(); it != mProperties.end(); it++)
|
||||||
delete *it;
|
delete *it;
|
||||||
}
|
}
|
||||||
|
@ -223,6 +221,8 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool ShouldCook();
|
||||||
|
|
||||||
// Inline
|
// Inline
|
||||||
inline u32 Count() const { return mProperties.size(); }
|
inline u32 Count() const { return mProperties.size(); }
|
||||||
inline void AddSubProperty(IProperty *pProp) { mProperties.push_back(pProp); }
|
inline void AddSubProperty(IProperty *pProp) { mProperties.push_back(pProp); }
|
||||||
|
@ -260,6 +260,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool MatchesDefault() { return mProperties.empty(); }
|
virtual bool MatchesDefault() { return mProperties.empty(); }
|
||||||
|
virtual bool ShouldCook();
|
||||||
|
|
||||||
// Inline
|
// Inline
|
||||||
inline void Reserve(u32 amount) { mProperties.reserve(amount); }
|
inline void Reserve(u32 amount) { mProperties.reserve(amount); }
|
||||||
|
|
|
@ -92,7 +92,6 @@ public:
|
||||||
virtual bool HasValidRange() const { return false; }
|
virtual bool HasValidRange() const { return false; }
|
||||||
virtual TString RangeToString() const { return ""; }
|
virtual TString RangeToString() const { return ""; }
|
||||||
virtual TString Suffix() const { return ""; }
|
virtual TString Suffix() const { return ""; }
|
||||||
virtual ECookPreference CookPreference() const { return mCookPreference; }
|
|
||||||
|
|
||||||
virtual void SetParam(const TString& rkParamName, const TString& rkValue)
|
virtual void SetParam(const TString& rkParamName, const TString& rkValue)
|
||||||
{
|
{
|
||||||
|
@ -124,6 +123,7 @@ public:
|
||||||
inline TString Name() const { return mName; }
|
inline TString Name() const { return mName; }
|
||||||
inline TString Description() const { return mDescription; }
|
inline TString Description() const { return mDescription; }
|
||||||
inline u32 PropertyID() const { return mID; }
|
inline u32 PropertyID() const { return mID; }
|
||||||
|
inline ECookPreference CookPreference() const { return mCookPreference; }
|
||||||
inline CStructTemplate* Parent() const { return mpParent; }
|
inline CStructTemplate* Parent() const { return mpParent; }
|
||||||
inline CScriptTemplate* ScriptTemplate() const { return mpScriptTemplate; }
|
inline CScriptTemplate* ScriptTemplate() const { return mpScriptTemplate; }
|
||||||
inline CMasterTemplate* MasterTemplate() const { return mpMasterTemplate; }
|
inline CMasterTemplate* MasterTemplate() const { return mpMasterTemplate; }
|
||||||
|
@ -167,9 +167,7 @@ public:
|
||||||
virtual IProperty* InstantiateProperty(CPropertyStruct *pParent)
|
virtual IProperty* InstantiateProperty(CPropertyStruct *pParent)
|
||||||
{
|
{
|
||||||
typedef TTypedProperty<PropType, PropTypeEnum, ValueClass> TPropertyType;
|
typedef TTypedProperty<PropType, PropTypeEnum, ValueClass> TPropertyType;
|
||||||
|
TPropertyType *pOut = new TPropertyType(this, pParent, GetDefaultValue());
|
||||||
TPropertyType *pOut = new TPropertyType(this, pParent);
|
|
||||||
pOut->Set(GetDefaultValue());
|
|
||||||
return pOut;
|
return pOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,14 +325,6 @@ public:
|
||||||
{
|
{
|
||||||
return new TCharacterProperty(this, pParent, CAnimationParameters(Game()));
|
return new TCharacterProperty(this, pParent, CAnimationParameters(Game()));
|
||||||
}
|
}
|
||||||
|
|
||||||
ECookPreference CookPreference() const
|
|
||||||
{
|
|
||||||
if (mCookPreference != eNoCookPreference)
|
|
||||||
return mCookPreference;
|
|
||||||
else
|
|
||||||
return eAlwaysCook;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TStringTemplate : public TTypedPropertyTemplate<TString, eStringProperty, CStringValue, false>
|
class TStringTemplate : public TTypedPropertyTemplate<TString, eStringProperty, CStringValue, false>
|
||||||
|
@ -353,14 +343,6 @@ public:
|
||||||
{
|
{
|
||||||
return new TStringProperty(this, pParent);
|
return new TStringProperty(this, pParent);
|
||||||
}
|
}
|
||||||
|
|
||||||
ECookPreference CookPreference() const
|
|
||||||
{
|
|
||||||
if (mCookPreference != eNoCookPreference)
|
|
||||||
return mCookPreference;
|
|
||||||
else
|
|
||||||
return eAlwaysCook;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TMayaSplineTemplate : public TTypedPropertyTemplate<std::vector<u8>, eMayaSplineProperty, CMayaSplineValue, false>
|
class TMayaSplineTemplate : public TTypedPropertyTemplate<std::vector<u8>, eMayaSplineProperty, CMayaSplineValue, false>
|
||||||
|
@ -421,14 +403,6 @@ public:
|
||||||
(mAcceptedExtensions == pkFile->mAcceptedExtensions) );
|
(mAcceptedExtensions == pkFile->mAcceptedExtensions) );
|
||||||
}
|
}
|
||||||
|
|
||||||
ECookPreference CookPreference() const
|
|
||||||
{
|
|
||||||
if (mCookPreference != eNoCookPreference)
|
|
||||||
return mCookPreference;
|
|
||||||
else
|
|
||||||
return eAlwaysCook;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AcceptsExtension(const TString& rkExtension)
|
bool AcceptsExtension(const TString& rkExtension)
|
||||||
{
|
{
|
||||||
for (auto it = mAcceptedExtensions.begin(); it != mAcceptedExtensions.end(); it++)
|
for (auto it = mAcceptedExtensions.begin(); it != mAcceptedExtensions.end(); it++)
|
||||||
|
@ -694,20 +668,12 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ECookPreference CookPreference() const
|
|
||||||
{
|
{
|
||||||
if (mCookPreference != eNoCookPreference) return mCookPreference;
|
|
||||||
bool SubsNeverCook = true;
|
|
||||||
|
|
||||||
for (u32 iProp = 0; iProp < mSubProperties.size(); iProp++)
|
for (u32 iProp = 0; iProp < mSubProperties.size(); iProp++)
|
||||||
{
|
{
|
||||||
IPropertyTemplate *pProp = mSubProperties[iProp];
|
IPropertyTemplate *pProp = mSubProperties[iProp];
|
||||||
ECookPreference Pref = pProp->CookPreference();
|
|
||||||
if (Pref != eNeverCook) SubsNeverCook = false;
|
|
||||||
if (Pref == eAlwaysCook) return eAlwaysCook;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (SubsNeverCook ? eNeverCook : eNoCookPreference);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline TString SourceFile() const { return mSourceFile; }
|
inline TString SourceFile() const { return mSourceFile; }
|
||||||
|
@ -771,14 +737,6 @@ public:
|
||||||
(CStructTemplate::Matches(pkTemp)) );
|
(CStructTemplate::Matches(pkTemp)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
ECookPreference CookPreference()
|
|
||||||
{
|
|
||||||
if (mCookPreference != eNoCookPreference)
|
|
||||||
return mCookPreference;
|
|
||||||
else
|
|
||||||
return eAlwaysCook;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetParam(const TString& rkParamName, const TString& rkValue)
|
void SetParam(const TString& rkParamName, const TString& rkValue)
|
||||||
{
|
{
|
||||||
if (rkParamName == "element_name")
|
if (rkParamName == "element_name")
|
||||||
|
|
Loading…
Reference in New Issue