From 8163ca954910d615b260d62881a06b45c9b7d05c Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Thu, 12 Sep 2013 10:25:13 +0100 Subject: Implemented xoft's suggestions again --- source/Entities/Entity.cpp | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/source/Entities/Entity.cpp b/source/Entities/Entity.cpp index 3cb53a6c6..4d7206965 100644 --- a/source/Entities/Entity.cpp +++ b/source/Entities/Entity.cpp @@ -1,4 +1,3 @@ - #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "Entity.h" @@ -520,27 +519,25 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk) // Push out entity. BLOCKTYPE GotBlock; - static const struct - { - int x, y, z; - } gCrossCoords[] = + static const Vector3i CrossCoords[] = { - { 1, 0, 0}, - {-1, 0, 0}, - { 0, 0, 1}, - { 0, 0, -1}, + Vector3i(1, 0, 0), + Vector3i(-1, 0, 0), + Vector3i(0, 0, 1), + Vector3i(0, 0, -1), } ; - - for (int i = 0; i < ARRAYCOUNT(gCrossCoords); i++) + Vector3i PushDirection(0, 1, 0); + + for (int i = 0; i < ARRAYCOUNT(CrossCoords); i++) { - NextChunk->UnboundedRelGetBlockType(RelBlockX + gCrossCoords[i].x, BlockY, RelBlockZ + gCrossCoords[i].z, GotBlock); - if (GotBlock == E_BLOCK_AIR) - { - NextPos.x += gCrossCoords[i].x; - NextPos.z += gCrossCoords[i].z; - } - else { NextPos.y += 0.2; } - } // for i - gCrossCoords[] + NextChunk->UnboundedRelGetBlockType(RelBlockX + CrossCoords[i].x, BlockY, RelBlockZ + CrossCoords[i].z, GotBlock); + if (!g_BlockIsSolid[GotBlock]) + { + PushDirection = CrossCoords[i]; + break; + } + } // for i - CrossCoords[] + NextPos += Vector3d(PushDirection) * 0.2; m_bOnGround = true; -- cgit v1.2.3