66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
#include "precompile.h"
|
|
|
|
#include <a8/magicenum.h>
|
|
|
|
#include "attrhelper.h"
|
|
|
|
float* AttrHelper::GetAttrAbsPtr(std::array<float, kHAT_End>& attr, int attr_id)
|
|
{
|
|
if (!IsValidHumanAttr(attr_id)) {
|
|
return nullptr;
|
|
}
|
|
return &attr[attr_id];
|
|
}
|
|
|
|
|
|
float* AttrHelper::GetAttrRatePtr(std::array<float, kHAT_End>& attr, int attr_id)
|
|
{
|
|
if (!IsValidHumanAttr(attr_id)) {
|
|
return nullptr;
|
|
}
|
|
return &attr[attr_id];
|
|
}
|
|
|
|
bool AttrHelper::ParseAttr(std::shared_ptr<a8::XObject> xobj,
|
|
std::array<float, kHAT_End>& attr_abs,
|
|
std::array<float, kHAT_End>& attr_rate)
|
|
{
|
|
if (xobj->IsArray()) {
|
|
for (int i = 0; i < xobj->Size(); ++i) {
|
|
std::shared_ptr<a8::XObject> obj = xobj->At(i);
|
|
if (obj->IsObject()) {
|
|
int attr_id = obj->Get("attr_id", 0);
|
|
float val = obj->Get("val", 0).GetDouble();
|
|
{
|
|
float* p = GetAttrAbsPtr(attr_abs, attr_id);
|
|
if (p) {
|
|
*p = val;
|
|
}
|
|
}
|
|
{
|
|
float* p = GetAttrRatePtr(attr_rate, attr_id);
|
|
if (p) {
|
|
*p = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
std::string AttrHelper::GetAttrName(int attr_id)
|
|
{
|
|
if (IsValidHumanAttr(attr_id)) {
|
|
std::string name = a8::GetEnumName<HumanAttrType_e>(attr_id);
|
|
a8::ReplaceString(name, "kHAT_", "");
|
|
return name;
|
|
} else if (IsValidHumanVirtualAttr(attr_id)) {
|
|
std::string name = a8::GetEnumName<HumanVirtualAttrType_e>(attr_id);
|
|
a8::ReplaceString(name, "kHVAT_", "Virtual_");
|
|
return name;
|
|
} else {
|
|
return "None";
|
|
}
|
|
}
|