mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-10 14:07:56 +00:00
Added support for bitfield properties
This commit is contained in:
@@ -101,6 +101,7 @@ CPropertyStruct* CPropertyStruct::CopyFromTemplate(CStructTemplate *pTemp)
|
||||
case eShortProperty: pProp = new CShortProperty(0); break;
|
||||
case eLongProperty: pProp = new CLongProperty(0); break;
|
||||
case eEnumProperty: pProp = new CEnumProperty(0); break;
|
||||
case eBitfieldProperty: pProp = new CBitfieldProperty(0); break;
|
||||
case eFloatProperty: pProp = new CFloatProperty(0.f); break;
|
||||
case eStringProperty: pProp = new CStringProperty(""); break;
|
||||
case eVector3Property: pProp = new CVector3Property(CVector3f::skZero); break;
|
||||
|
||||
@@ -60,6 +60,7 @@ typedef __CProperty<char, eByteProperty> CByteProperty;
|
||||
typedef __CProperty<short, eShortProperty> CShortProperty;
|
||||
typedef __CProperty<long, eLongProperty> CLongProperty;
|
||||
typedef __CProperty<long, eEnumProperty> CEnumProperty;
|
||||
typedef __CProperty<long, eBitfieldProperty> CBitfieldProperty;
|
||||
typedef __CProperty<float, eFloatProperty> CFloatProperty;
|
||||
typedef __CProperty<std::string, eStringProperty> CStringProperty;
|
||||
typedef __CProperty<CVector3f, eVector3Property> CVector3Property;
|
||||
|
||||
@@ -8,6 +8,7 @@ EPropertyType PropStringToPropEnum(std::string prop)
|
||||
if (prop == "short") return eShortProperty;
|
||||
if (prop == "long") return eLongProperty;
|
||||
if (prop == "enum") return eEnumProperty;
|
||||
if (prop == "bitfield") return eBitfieldProperty;
|
||||
if (prop == "float") return eFloatProperty;
|
||||
if (prop == "string") return eStringProperty;
|
||||
if (prop == "color") return eColorProperty;
|
||||
@@ -29,6 +30,7 @@ std::string PropEnumToPropString(EPropertyType prop)
|
||||
case eShortProperty: return "short";
|
||||
case eLongProperty: return "long";
|
||||
case eEnumProperty: return "enum";
|
||||
case eBitfieldProperty: return "bitfield";
|
||||
case eFloatProperty: return "float";
|
||||
case eStringProperty: return "string";
|
||||
case eColorProperty: return "color";
|
||||
|
||||
@@ -142,6 +142,54 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class CBitfieldTemplate : public CPropertyTemplate
|
||||
{
|
||||
friend class CTemplateLoader;
|
||||
friend class CTemplateWriter;
|
||||
|
||||
struct SBitFlag
|
||||
{
|
||||
std::string Name;
|
||||
u32 Mask;
|
||||
|
||||
SBitFlag(const std::string& _name, u32 _mask)
|
||||
: Name(_name), Mask(_mask) {}
|
||||
};
|
||||
std::vector<SBitFlag> mBitFlags;
|
||||
std::string mSourceFile;
|
||||
|
||||
public:
|
||||
CBitfieldTemplate(u32 ID)
|
||||
: CPropertyTemplate(ID)
|
||||
{
|
||||
mPropType = eBitfieldProperty;
|
||||
}
|
||||
|
||||
CBitfieldTemplate(const std::string& name, u32 ID)
|
||||
: CPropertyTemplate(eBitfieldProperty, name, ID)
|
||||
{}
|
||||
|
||||
EPropertyType Type() const
|
||||
{
|
||||
return eBitfieldProperty;
|
||||
}
|
||||
|
||||
u32 NumFlags()
|
||||
{
|
||||
return mBitFlags.size();
|
||||
}
|
||||
|
||||
std::string FlagName(u32 index)
|
||||
{
|
||||
return mBitFlags[index].Name;
|
||||
}
|
||||
|
||||
u32 FlagMask(u32 index)
|
||||
{
|
||||
return mBitFlags[index].Mask;
|
||||
}
|
||||
};
|
||||
|
||||
class CStructTemplate : public CPropertyTemplate
|
||||
{
|
||||
friend class CTemplateLoader;
|
||||
|
||||
@@ -9,11 +9,12 @@ enum EPropertyType
|
||||
eByteProperty,
|
||||
eShortProperty,
|
||||
eLongProperty,
|
||||
eEnumProperty,
|
||||
eBitfieldProperty,
|
||||
eFloatProperty,
|
||||
eStringProperty,
|
||||
eVector3Property,
|
||||
eColorProperty,
|
||||
eEnumProperty,
|
||||
eFileProperty,
|
||||
eStructProperty,
|
||||
eArrayProperty,
|
||||
|
||||
Reference in New Issue
Block a user