80 lines
1.8 KiB
C++
80 lines
1.8 KiB
C++
#include "precompile.h"
|
|
|
|
#include "weapon.h"
|
|
#include "cs_proto.pb.h"
|
|
#include "metamgr.h"
|
|
|
|
void Weapon::Clear()
|
|
{
|
|
weapon_id = 0;
|
|
weapon_lv = 0;
|
|
ammo = 0;
|
|
meta = 0;
|
|
bullet_meta = nullptr;
|
|
upgrade_meta = nullptr;
|
|
}
|
|
|
|
void Weapon::ToPB(cs::MFWeapon* pb_obj)
|
|
{
|
|
pb_obj->set_weapon_id(weapon_id);
|
|
pb_obj->set_weapon_lv(weapon_lv);
|
|
pb_obj->set_ammo(ammo);
|
|
}
|
|
|
|
void Weapon::Recalc()
|
|
{
|
|
upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id);
|
|
bullet_meta = MetaMgr::Instance()->GetEquip(meta->i->use_bullet());
|
|
}
|
|
|
|
int Weapon::GetClipVolume()
|
|
{
|
|
if (upgrade_meta) {
|
|
return meta->i->clip_volume() +
|
|
upgrade_meta->GetAttrValue(weapon_lv, kHAT_Volume);
|
|
} else {
|
|
return meta->i->clip_volume();
|
|
}
|
|
}
|
|
|
|
float Weapon::GetAttrValue(HumanAttrType_e attr_type)
|
|
{
|
|
if (!meta) {
|
|
return 0;
|
|
}
|
|
switch (attr_type) {
|
|
case kHAT_Atk:
|
|
{
|
|
return meta->i->atk() +
|
|
(upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0);
|
|
}
|
|
break;
|
|
case kHAT_FireRate:
|
|
{
|
|
return meta->i->fire_rate() -
|
|
(upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0);
|
|
}
|
|
break;
|
|
case kHAT_Volume:
|
|
{
|
|
return meta->i->clip_volume() +
|
|
(upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0);
|
|
}
|
|
break;
|
|
case kHAT_MaxHp:
|
|
{
|
|
return meta->i->max_hp() +
|
|
(upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0);
|
|
}
|
|
break;
|
|
case kHAT_ReloadTime:
|
|
{
|
|
return meta->i->reload_time() -
|
|
(upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0);
|
|
}
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|