This commit is contained in:
aozhiwei 2022-09-07 19:27:59 +08:00
parent 76383b40e9
commit 55bdf053c9
3 changed files with 116 additions and 4 deletions

View File

@ -0,0 +1,25 @@
#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)
{
return true;
}

View File

@ -0,0 +1,12 @@
#pragma once
class AttrHelper
{
public:
static float* GetAttrAbsPtr(std::array<float, kHAT_End>& attr, int attr_id);
static float* GetAttrRatePtr(std::array<float, kHAT_End>& attr, int attr_id);
static bool ParseAttr(std::shared_ptr<a8::XObject> xobj, std::array<float, kHAT_End>& attr);
};

View File

@ -11,6 +11,8 @@
#include "bullet.h"
#include "app.h"
#include "attrhelper.h"
class HeroAbility
{
public:
@ -77,9 +79,50 @@ private:
void DtoInit()
{
std::array<float, kHAT_End> base_attr_abs = {0};
std::array<float, kHAT_End> base_attr_rate = {0};
std::array<float, kHAT_End> pro_attr_abs = {0};
std::array<float, kHAT_End> pro_attr_rate = {0};
std::array<float, kHAT_End> skill_attr_abs = {0};
std::array<float, kHAT_End> skill_attr_rate = {0};
std::array<float, kHAT_End> chip_attr_abs = {0};
std::array<float, kHAT_End> chip_attr_rate = {0};
{
std::shared_ptr<a8::XObject> attr_base_xobj = hero_dto->At("attr_base");
if (attr_base_xobj && attr_base_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs);
base_attr_rate = base_attr_abs;
}
}
{
std::shared_ptr<a8::XObject> attr_pro_xobj = hero_dto->At("attr_pro");
if (attr_pro_xobj && attr_pro_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs);
pro_attr_rate = pro_attr_abs;
}
}
{
std::shared_ptr<a8::XObject> attr_skill_xobj = hero_dto->At("attr_skill");
if (attr_skill_xobj && attr_skill_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_skill_xobj, skill_attr_abs);
skill_attr_rate = skill_attr_abs;
}
}
{
std::shared_ptr<a8::XObject> attr_chip_xobj = hero_dto->At("attr_chip");
if (attr_chip_xobj && attr_chip_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs);
chip_attr_rate = chip_attr_abs;
}
}
}
private:
float hp_ = 0.0f;
@ -101,17 +144,17 @@ public:
float GetAtk()
{
return weapon_meta->i->atk();
return atk_;
}
float GetCritAtk()
{
return weapon_meta->i->critical();
return crit_atk_;
}
float GetCritAtkRatio()
{
return weapon_meta->i->cri_damage();
return crit_atk_ratio_;
}
void Init()
@ -127,11 +170,43 @@ private:
void DefaultInit()
{
atk_ = weapon_meta->i->atk();
crit_atk_ = weapon_meta->i->critical();
crit_atk_ratio_ = weapon_meta->i->cri_damage();
}
void DtoInit()
{
std::array<float, kHAT_End> base_attr_abs = {0};
std::array<float, kHAT_End> base_attr_rate = {0};
std::array<float, kHAT_End> pro_attr_abs = {0};
std::array<float, kHAT_End> pro_attr_rate = {0};
std::array<float, kHAT_End> chip_attr_abs = {0};
std::array<float, kHAT_End> chip_attr_rate = {0};
{
std::shared_ptr<a8::XObject> attr_base_xobj = weapon_dto->At("attr_base");
if (attr_base_xobj && attr_base_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_base_xobj, base_attr_abs);
base_attr_rate = base_attr_abs;
}
}
{
std::shared_ptr<a8::XObject> attr_pro_xobj = weapon_dto->At("attr_pro");
if (attr_pro_xobj && attr_pro_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_pro_xobj, pro_attr_abs);
pro_attr_rate = pro_attr_abs;
}
}
{
std::shared_ptr<a8::XObject> attr_chip_xobj = weapon_dto->At("attr_chip");
if (attr_chip_xobj && attr_chip_xobj->IsArray()) {
AttrHelper::ParseAttr(attr_chip_xobj, chip_attr_abs);
chip_attr_rate = chip_attr_abs;
}
}
}