50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#include "precompile.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);
|
|
int type = obj->Get("type", 0);
|
|
int val = obj->Get("val", 0);
|
|
{
|
|
float* p = GetAttrAbsPtr(attr_abs, attr_id);
|
|
if (p) {
|
|
*p = val;
|
|
}
|
|
}
|
|
{
|
|
float* p = GetAttrRatePtr(attr_rate, attr_id);
|
|
if (p) {
|
|
*p = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|