From 0dd172b80ffc949cf87119ad2003589d7eb82c46 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 22 Nov 2017 14:47:52 +0100 Subject: Store Health as a float (#4073) * Fix #4024 * Fix clang error * Add comment * Fix behaviour * Save Health as float * Changed m_Health to float * Remove redundant static_cast * Fix casts --- src/Entities/Entity.cpp | 10 +++++----- src/Entities/Entity.h | 12 ++++++------ src/Entities/Minecart.cpp | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/Entities') diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 90aefd082..11405d2fd 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -528,9 +528,9 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) Player->GetStatManager().AddValue(statDamageDealt, static_cast(floor(a_TDI.FinalDamage * 10 + 0.5))); } - m_Health -= static_cast(a_TDI.FinalDamage); + m_Health -= static_cast(a_TDI.FinalDamage); - m_Health = std::max(m_Health, 0); + m_Health = std::max(m_Health, 0.0f); // Add knockback: if ((IsMob() || IsPlayer()) && (a_TDI.Attacker != nullptr)) @@ -810,9 +810,9 @@ void cEntity::Heal(int a_HitPoints) -void cEntity::SetHealth(int a_Health) +void cEntity::SetHealth(float a_Health) { - m_Health = Clamp(a_Health, 0, m_MaxHealth); + m_Health = Clamp(a_Health, 0.0f, m_MaxHealth); } @@ -1782,7 +1782,7 @@ void cEntity::OnFinishedBurning(void) -void cEntity::SetMaxHealth(int a_MaxHealth) +void cEntity::SetMaxHealth(float a_MaxHealth) { m_MaxHealth = a_MaxHealth; diff --git a/src/Entities/Entity.h b/src/Entities/Entity.h index 4174160bf..fae296ab4 100644 --- a/src/Entities/Entity.h +++ b/src/Entities/Entity.h @@ -368,10 +368,10 @@ public: virtual void Heal(int a_HitPoints); /** Returns the health of this entity */ - int GetHealth(void) const { return m_Health; } + float GetHealth(void) const { return m_Health; } /** Sets the health of this entity; doesn't broadcast any hurt animation */ - void SetHealth(int a_Health); + void SetHealth(float a_Health); // tolua_end @@ -403,9 +403,9 @@ public: // tolua_begin /** Sets the maximum value for the health */ - void SetMaxHealth(int a_MaxHealth); + void SetMaxHealth(float a_MaxHealth); - int GetMaxHealth(void) const { return m_MaxHealth; } + float GetMaxHealth(void) const { return m_MaxHealth; } /** Sets whether the entity is fireproof */ void SetIsFireproof(bool a_IsFireproof); @@ -556,8 +556,8 @@ protected: Note that the UniqueID is not persisted through storage. */ UInt32 m_UniqueID; - int m_Health; - int m_MaxHealth; + float m_Health; + float m_MaxHealth; /** The entity to which this entity is attached (vehicle), nullptr if none */ cEntity * m_AttachedTo; diff --git a/src/Entities/Minecart.cpp b/src/Entities/Minecart.cpp index 7c5ca49ce..4de53d716 100644 --- a/src/Entities/Minecart.cpp +++ b/src/Entities/Minecart.cpp @@ -1035,7 +1035,7 @@ bool cMinecart::DoTakeDamage(TakeDamageInfo & TDI) if ((TDI.Attacker != nullptr) && TDI.Attacker->IsPlayer() && static_cast(TDI.Attacker)->IsGameModeCreative()) { Destroy(); - TDI.FinalDamage = GetMaxHealth(); // Instant hit for creative + TDI.FinalDamage = static_cast(GetMaxHealth()); // Instant hit for creative SetInvulnerableTicks(0); return super::DoTakeDamage(TDI); // No drops for creative } -- cgit v1.2.3