From ffce5d143fe2b6224ee7ff29e40c9a73af0463e4 Mon Sep 17 00:00:00 2001 From: James Ravenscroft Date: Fri, 9 Aug 2013 08:50:33 +0100 Subject: Removed the need to recalculate whether player is under water in ApplyFoodExhaustion --- source/Player.cpp | 14 +++----------- source/Player.h | 12 +++++++----- 2 files changed, 10 insertions(+), 16 deletions(-) (limited to 'source') diff --git a/source/Player.cpp b/source/Player.cpp index eab6e08e5..ba165989a 100644 --- a/source/Player.cpp +++ b/source/Player.cpp @@ -192,7 +192,7 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk) if (m_bDirtyPosition) { // Apply food exhaustion from movement: - ApplyFoodExhaustionFromMovement(a_Chunk); + ApplyFoodExhaustionFromMovement(); cRoot::Get()->GetPluginManager()->CallHookPlayerMoving(*this); BroadcastMovementUpdate(m_ClientHandle); @@ -1445,7 +1445,7 @@ void cPlayer::HandleFood(void) -void cPlayer::ApplyFoodExhaustionFromMovement(cChunk & a_Chunk) +void cPlayer::ApplyFoodExhaustionFromMovement() { if (IsGameModeCreative()) { @@ -1463,14 +1463,6 @@ void cPlayer::ApplyFoodExhaustionFromMovement(cChunk & a_Chunk) return; } - // Get the type of block the player's standing in: - BLOCKTYPE BlockIn; - int RelX = (int)floor(m_LastPosX) - a_Chunk.GetPosX() * cChunkDef::Width; - int RelY = (int)floor(m_LastPosY + 0.1); - int RelZ = (int)floor(m_LastPosZ) - a_Chunk.GetPosZ() * cChunkDef::Width; - // Use Unbounded, because we're being called *after* processing super::Tick(), which could have changed our chunk - VERIFY(a_Chunk.UnboundedRelGetBlockType(RelX, RelY, RelZ, BlockIn)); - // Apply the exhaustion based on distance travelled: double BaseExhaustion = Movement.Length(); if (IsSprinting()) @@ -1478,7 +1470,7 @@ void cPlayer::ApplyFoodExhaustionFromMovement(cChunk & a_Chunk) // 0.1 pt per meter sprinted BaseExhaustion = BaseExhaustion * 0.1; } - else if (IsBlockWater(BlockIn)) + else if (IsSwimming()) { // 0.015 pt per meter swum BaseExhaustion = BaseExhaustion * 0.015; diff --git a/source/Player.h b/source/Player.h index ab9a17cf2..105e7d0a1 100644 --- a/source/Player.h +++ b/source/Player.h @@ -253,6 +253,12 @@ public: /// Starts or stops sprinting, sends the max speed update to the client, if needed void SetSprint(bool a_IsSprinting); + /// Returns whether the player is swimming or not + virtual bool IsSwimming(void) const{ return m_IsSwimming; } + + /// Return whether the player is under water or not + virtual bool IsSubmerged(void) const{ return m_IsSubmerged; } + // tolua_end // cEntity overrides: @@ -260,11 +266,7 @@ public: virtual bool IsSprinting(void) const { return m_IsSprinting; } virtual bool IsRclking (void) const { return IsEating(); } - /// Returns whether the player is swimming or not - virtual bool IsSwimming(void) const{ return m_IsSwimming; } - /// Return whether the player is under water or not - virtual bool IsSubmerged(void) const{ return m_IsSubmerged; } protected: typedef std::map< std::string, bool > PermissionMap; @@ -362,7 +364,7 @@ protected: void SetSwimState(cChunk & a_Chunk); /// Adds food exhaustion based on the difference between Pos and LastPos, sprinting status and swimming (in water block) - void ApplyFoodExhaustionFromMovement(cChunk & a_Chunk); + void ApplyFoodExhaustionFromMovement(); } ; // tolua_export -- cgit v1.2.3