metaforce/Runtime/World/CDamageInfo.cpp

61 lines
1.7 KiB
C++
Raw Normal View History

2016-05-20 09:17:51 +00:00
#include "CDamageInfo.hpp"
#include "CDamageVulnerability.hpp"
#include "DataSpec/DNACommon/Tweaks/ITweakPlayerGun.hpp"
2016-05-20 09:17:51 +00:00
namespace urde
{
CDamageInfo::CDamageInfo(const DataSpec::SShotParam& other)
2017-09-05 03:00:19 +00:00
: x0_weaponMode(CWeaponMode(EWeaponType(other.weaponType), other.charged, other.combo, other.instaKill))
, x8_damage(other.damage)
, xc_radiusDamage(other.radiusDamage)
, x10_radius(other.radius)
, x14_knockback(other.knockback)
2017-09-05 03:00:19 +00:00
, x18_noImmunity(other.noImmunity)
2016-05-20 09:17:51 +00:00
{
}
CDamageInfo& CDamageInfo::operator=(const DataSpec::SShotParam& other)
{
2017-09-05 03:00:19 +00:00
x0_weaponMode = CWeaponMode(EWeaponType(other.weaponType), other.charged, other.combo, other.instaKill);
x8_damage = other.damage;
2017-09-05 03:00:19 +00:00
xc_radiusDamage = other.radiusDamage;
x10_radius = other.radius;
x14_knockback = other.knockback;
2017-09-05 03:00:19 +00:00
x18_noImmunity = other.noImmunity;
return *this;
}
2017-03-29 02:51:12 +00:00
float CDamageInfo::GetDamage(const CDamageVulnerability& dVuln) const
{
EVulnerability vuln = dVuln.GetVulnerability(x0_weaponMode, false);
2018-02-12 05:30:21 +00:00
if (vuln == EVulnerability::Deflect)
return 0.f;
2018-11-19 01:19:44 +00:00
else if (vuln == EVulnerability::Weak)
return 2.f * x8_damage;
return x8_damage;
}
2017-03-29 02:51:12 +00:00
float CDamageInfo::GetRadiusDamage(const CDamageVulnerability& dVuln) const
{
EVulnerability vuln = dVuln.GetVulnerability(x0_weaponMode, false);
2018-02-12 05:30:21 +00:00
if (vuln == EVulnerability::Deflect)
return 0.f;
2018-11-19 01:19:44 +00:00
else if (vuln == EVulnerability::Weak)
return 2.f * xc_radiusDamage;
return xc_radiusDamage;
}
2018-11-14 04:16:11 +00:00
CDamageInfo::CDamageInfo(const CDamageInfo& other, float dt)
{
x0_weaponMode = other.x0_weaponMode;
x8_damage = other.x8_damage * (60.f * dt);
xc_radiusDamage = x8_damage;
x10_radius = other.x10_radius;
x14_knockback = other.x14_knockback;
x18_noImmunity = true;
}
2016-05-20 09:17:51 +00:00
}