1
0

Change TakeDamageInfo::FinalDamage from int to float (#4359)

Closes #4357
This commit is contained in:
Aplaus228 2019-08-08 13:51:38 +03:00 committed by peterbell10
parent f0cd34357e
commit 466d986e5e
3 changed files with 9 additions and 9 deletions

View File

@ -319,7 +319,7 @@ void cEntity::TakeDamage(eDamageType a_DamageType, UInt32 a_AttackerID, int a_Ra
void cEntity::TakeDamage(eDamageType a_DamageType, cEntity * a_Attacker, int a_RawDamage, int a_FinalDamage, double a_KnockbackAmount) void cEntity::TakeDamage(eDamageType a_DamageType, cEntity * a_Attacker, int a_RawDamage, float a_FinalDamage, double a_KnockbackAmount)
{ {
TakeDamageInfo TDI; TakeDamageInfo TDI;
TDI.DamageType = a_DamageType; TDI.DamageType = a_DamageType;
@ -427,7 +427,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
if (SharpnessLevel > 0) if (SharpnessLevel > 0)
{ {
a_TDI.FinalDamage += static_cast<int>(ceil(1.25 * SharpnessLevel)); a_TDI.FinalDamage += 1.25 * SharpnessLevel;
} }
else if (SmiteLevel > 0) else if (SmiteLevel > 0)
{ {
@ -441,7 +441,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
case mtWither: case mtWither:
case mtZombiePigman: case mtZombiePigman:
{ {
a_TDI.FinalDamage += static_cast<int>(ceil(2.5 * SmiteLevel)); a_TDI.FinalDamage += 2.5 * SmiteLevel;
break; break;
} }
default: break; default: break;
@ -459,7 +459,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
case mtCaveSpider: case mtCaveSpider:
case mtSilverfish: case mtSilverfish:
{ {
a_TDI.FinalDamage += static_cast<int>(ceil(2.5 * BaneOfArthropodsLevel)); a_TDI.FinalDamage += 2.5 * BaneOfArthropodsLevel;
// The duration of the effect is a random value between 1 and 1.5 seconds at level I, // The duration of the effect is a random value between 1 and 1.5 seconds at level I,
// increasing the max duration by 0.5 seconds each level // increasing the max duration by 0.5 seconds each level
// Ref: https://minecraft.gamepedia.com/Enchanting#Bane_of_Arthropods // Ref: https://minecraft.gamepedia.com/Enchanting#Bane_of_Arthropods
@ -525,7 +525,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
Player->GetStatManager().AddValue(statDamageDealt, static_cast<StatValue>(floor(a_TDI.FinalDamage * 10 + 0.5))); Player->GetStatManager().AddValue(statDamageDealt, static_cast<StatValue>(floor(a_TDI.FinalDamage * 10 + 0.5)));
} }
m_Health -= static_cast<float>(a_TDI.FinalDamage); m_Health -= a_TDI.FinalDamage;
m_Health = std::max(m_Health, 0.0f); m_Health = std::max(m_Health, 0.0f);
// Add knockback: // Add knockback:

View File

@ -57,7 +57,7 @@ struct TakeDamageInfo
eDamageType DamageType; // Where does the damage come from? Being hit / on fire / contact with cactus / ... eDamageType DamageType; // Where does the damage come from? Being hit / on fire / contact with cactus / ...
cEntity * Attacker; // The attacking entity; valid only for dtAttack cEntity * Attacker; // The attacking entity; valid only for dtAttack
int RawDamage; // What damage would the receiver get without any armor. Usually: attacker mob type + weapons int RawDamage; // What damage would the receiver get without any armor. Usually: attacker mob type + weapons
int FinalDamage; // What actual damage will be received. Usually: m_RawDamage minus armor float FinalDamage; // What actual damage will be received. Usually: m_RawDamage minus armor
Vector3d Knockback; // The amount and direction of knockback received from the damage Vector3d Knockback; // The amount and direction of knockback received from the damage
// TODO: Effects - list of effects that the hit is causing. Unknown representation yet // TODO: Effects - list of effects that the hit is causing. Unknown representation yet
} ; } ;
@ -279,7 +279,7 @@ public:
void TakeDamage(eDamageType a_DamageType, UInt32 a_Attacker, int a_RawDamage, double a_KnockbackAmount); void TakeDamage(eDamageType a_DamageType, UInt32 a_Attacker, int a_RawDamage, double a_KnockbackAmount);
/** Makes this entity take the specified damage. The values are packed into a TDI, knockback calculated, then sent through DoTakeDamage() */ /** Makes this entity take the specified damage. The values are packed into a TDI, knockback calculated, then sent through DoTakeDamage() */
void TakeDamage(eDamageType a_DamageType, cEntity * a_Attacker, int a_RawDamage, int a_FinalDamage, double a_KnockbackAmount); void TakeDamage(eDamageType a_DamageType, cEntity * a_Attacker, int a_RawDamage, float a_FinalDamage, double a_KnockbackAmount);
float GetGravity(void) const { return m_Gravity; } float GetGravity(void) const { return m_Gravity; }

View File

@ -1039,12 +1039,12 @@ bool cMinecart::DoTakeDamage(TakeDamageInfo & TDI)
if ((TDI.Attacker != nullptr) && TDI.Attacker->IsPlayer() && static_cast<cPlayer *>(TDI.Attacker)->IsGameModeCreative()) if ((TDI.Attacker != nullptr) && TDI.Attacker->IsPlayer() && static_cast<cPlayer *>(TDI.Attacker)->IsGameModeCreative())
{ {
Destroy(); Destroy();
TDI.FinalDamage = static_cast<int>(GetMaxHealth()); // Instant hit for creative TDI.FinalDamage = GetMaxHealth(); // Instant hit for creative
SetInvulnerableTicks(0); SetInvulnerableTicks(0);
return super::DoTakeDamage(TDI); // No drops for creative return super::DoTakeDamage(TDI); // No drops for creative
} }
m_LastDamage = TDI.FinalDamage; m_LastDamage = static_cast<int>(TDI.FinalDamage);
if (!super::DoTakeDamage(TDI)) if (!super::DoTakeDamage(TDI))
{ {
return false; return false;