Change TakeDamageInfo::FinalDamage from int to float (#4359)
Closes #4357
This commit is contained in:
parent
f0cd34357e
commit
466d986e5e
@ -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:
|
||||||
|
@ -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; }
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user