PrimeWorldEditor/src/Core/Tweaks/CTweakData.h

63 lines
1.4 KiB
C++

#ifndef CTWEAKDATA_H
#define CTWEAKDATA_H
#include "Core/Resource/CResource.h"
#include "Core/Resource/Script/CScriptTemplate.h"
#include "Core/Resource/Script/Property/TPropertyRef.h"
/** Tweak data assets for MP1 */
class CTweakData : public CResource
{
DECLARE_RESOURCE_TYPE(Tweaks)
/** Script template specifying tweak data layout */
CScriptTemplate* mpTemplate;
/** Tweak ID for MP2+ */
uint mTweakID;
/** Tweak data */
std::vector<uint8> mTweakData;
public:
CTweakData(CScriptTemplate* pTemplate, uint TweakID, CResourceEntry* pEntry = 0)
: mpTemplate(pTemplate)
, mTweakID(TweakID)
, CResource(pEntry)
{
CStructProperty* pProperties = pTemplate->Properties();
mTweakData.resize(pProperties->DataSize());
pProperties->Construct(mTweakData.data());
}
TString TweakName()
{
if (Entry() != nullptr)
{
return Entry()->Name();
}
else
{
IProperty* pNameProperty = mpTemplate->Properties()->ChildByID(0x7FDA1466);
return CStringRef(mTweakData.data(), pNameProperty);
}
}
inline CScriptTemplate* TweakTemplate() const
{
return mpTemplate;
}
inline uint32 TweakID() const
{
return mTweakID;
}
inline CStructRef TweakData() const
{
return CStructRef((void*) mTweakData.data(), mpTemplate->Properties());
}
};
#endif // CTWEAKDATA_H