summaryrefslogtreecommitdiffstats
path: root/source/Entity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Entity.cpp')
-rw-r--r--source/Entity.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/source/Entity.cpp b/source/Entity.cpp
index c2e6b1665..514777d18 100644
--- a/source/Entity.cpp
+++ b/source/Entity.cpp
@@ -225,12 +225,12 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk)
int RelBlockX = BlockX - (NextChunk->GetPosX() * cChunkDef::Width);
int RelBlockZ = BlockZ - (NextChunk->GetPosZ() * cChunkDef::Width);
BLOCKTYPE BlockIn = NextChunk->GetBlock( RelBlockX, BlockY, RelBlockZ );
- if( BlockIn == E_BLOCK_AIR || IsBlockWater(BlockIn) || BlockIn == E_BLOCK_FIRE || IsBlockLava(BlockIn) ) // If not in ground itself or in water or in fire or in lava
+ if(!g_BlockIsSolid[BlockIn]) // Making sure we are not inside a solid block
{
if( m_bOnGround ) // check if it's still on the ground
{
BLOCKTYPE BlockBelow = NextChunk->GetBlock( RelBlockX, BlockY - 1, RelBlockZ );
- if(BlockBelow == E_BLOCK_AIR || IsBlockWater(BlockBelow) || BlockBelow == E_BLOCK_FIRE || IsBlockLava(BlockBelow)) //Check if block below is air or water.
+ if(!g_BlockIsSolid[BlockBelow]) //Check if block below is air or water.
{
m_bOnGround = false;
}
@@ -238,19 +238,11 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk)
}
else
{
- if (BlockIn == E_BLOCK_COBWEB)
- {
- NextSpeed.x *= 0.25;
- NextSpeed.z *= 0.25;
- }
- else
- {
- //Push out entity.
- m_bOnGround = true;
- NextPos.y += 0.2;
- LOGD("Entity #%d (%s) is inside a block at {%d,%d,%d}",
- m_UniqueID, GetClass(), BlockX, BlockY, BlockZ);
- }
+ //Push out entity.
+ m_bOnGround = true;
+ NextPos.y += 0.2;
+ LOGD("Entity #%d (%s) is inside a block at {%d,%d,%d}",
+ m_UniqueID, GetClass(), BlockX, BlockY, BlockZ);
}
if (!m_bOnGround)
@@ -283,7 +275,15 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk)
if ( fabs(NextSpeed.z) < 0.05 ) NextSpeed.z = 0;
}
}
-
+
+ //Adjust X and Z speed for COBWEB temporary. This speed modification should be handled inside block handlers since we
+ //might have different speed modifiers according to terrain.
+ if (BlockIn == E_BLOCK_COBWEB)
+ {
+ NextSpeed.x *= 0.25;
+ NextSpeed.z *= 0.25;
+ }
+
//Get water direction
Direction WaterDir = m_World->GetWaterSimulator()->GetFlowingDirection(BlockX, BlockY, BlockZ);