1
0

Use named constants instead of magic values - block digging direction and torch placement

git-svn-id: http://mc-server.googlecode.com/svn/trunk@724 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com 2012-08-10 20:42:59 +00:00
parent e6ac77a2c1
commit 897733a58e
3 changed files with 98 additions and 109 deletions

View File

@ -500,6 +500,13 @@ enum
E_META_WOOL_RED = 14,
E_META_WOOL_BLACK = 15,
// E_BLOCK_TORCH, E_BLOCK_REDSTONE_TORCH_OFF, E_BLOCK_REDSTONE_TORCH_ON metas:
E_META_TORCH_EAST = 1, // east face of the block, pointing east
E_META_TORCH_WEST = 2,
E_META_TORCH_SOUTH = 3,
E_META_TORCH_NORTH = 4,
E_META_TORCH_FLOOR = 5,
// E_BLOCK_DOUBLE_STEP metas:
E_META_DOUBLE_STEP_STONE = 0,
E_META_DOUBLE_STEP_SANDSTONE = 1,

View File

@ -19,6 +19,20 @@ extern bool g_BlockOneHitDig[];
enum
{
BLOCK_FACE_BOTTOM = 0, // Interacting with the bottom face of the block
BLOCK_FACE_TOP = 1, // Interacting with the top face of the block
BLOCK_FACE_EAST = 2, // Interacting with the eastern face of the block
BLOCK_FACE_WEST = 3, // Interacting with the western face of the block
BLOCK_FACE_NORTH = 4, // Interacting with the northern face of the block
BLOCK_FACE_SOUTH = 5, // Interacting with the southern face of the block
} ;
inline bool IsValidBlock( int a_BlockID ) //tolua_export
{ //tolua_export
if( a_BlockID > -1 &&
@ -94,53 +108,39 @@ inline bool IsBlockTypeOfDirt(char a_BlockID)
inline void AddDirection( int & a_X, int & a_Y, int & a_Z, char a_Direction, bool a_bInverse = false )
{
if( !a_bInverse )
if (!a_bInverse)
{
switch( a_Direction )
switch (a_Direction)
{
case 0:
a_Y--;
break;
case 1:
a_Y++;
break;
case 2:
a_Z--;
break;
case 3:
a_Z++;
break;
case 4:
a_X--;
break;
case 5:
a_X++;
break;
};
case BLOCK_FACE_BOTTOM: a_Y--; break;
case BLOCK_FACE_TOP: a_Y++; break;
case BLOCK_FACE_EAST: a_Z--; break;
case BLOCK_FACE_WEST: a_Z++; break;
case BLOCK_FACE_NORTH: a_X--; break;
case BLOCK_FACE_SOUTH: a_X++; break;
default:
{
ASSERT(!"Unknown direction");
break;
}
}
}
else
{
switch( a_Direction ) // other way around
{
case 0:
a_Y++;
break;
case 1:
a_Y--;
break;
case 2:
a_Z++;
break;
case 3:
a_Z--;
break;
case 4:
a_X++;
break;
case 5:
a_X--;
break;
};
case BLOCK_FACE_BOTTOM: a_Y++; break;
case BLOCK_FACE_TOP: a_Y--; break;
case BLOCK_FACE_EAST: a_Z++; break;
case BLOCK_FACE_WEST: a_Z--; break;
case BLOCK_FACE_NORTH: a_X++; break;
case BLOCK_FACE_SOUTH: a_X--; break;
default:
{
ASSERT(!"Unknown direction");
break;
}
}
}
}

View File

@ -1,6 +1,11 @@
#pragma once
#pragma once
#include "Vector3i.h"
#include "Defines.h"
class cTorch //tolua_export
{ //tolua_export
@ -8,87 +13,64 @@ public:
static char DirectionToMetaData( char a_Direction ) //tolua_export
{ //tolua_export
switch( a_Direction )
switch (a_Direction)
{
case 0x0:
return 0x0;
case 0x1:
return 0x5; //standing on floor
case 0x2:
return 0x4; // south
case 0x3:
return 0x3; // north
case 0x4:
return 0x2; // west
case 0x5:
return 0x1; // east
default:
break;
case BLOCK_FACE_BOTTOM: ASSERT(!"Shouldn't be getting this direction"); return 0;
case BLOCK_FACE_TOP: return E_META_TORCH_FLOOR;
case BLOCK_FACE_EAST: return E_META_TORCH_EAST;
case BLOCK_FACE_WEST: return E_META_TORCH_WEST;
case BLOCK_FACE_NORTH: return E_META_TORCH_NORTH;
case BLOCK_FACE_SOUTH: return E_META_TORCH_SOUTH;
default:
{
ASSERT(!"Unhandled torch direction!");
break;
}
};
return 0x0;
} //tolua_export
static char MetaDataToDirection( char a_MetaData ) //tolua_export
static char MetaDataToDirection(char a_MetaData) //tolua_export
{ //tolua_export
switch( a_MetaData )
switch (a_MetaData)
{
case 0x0:
return 0x0;
case 0x1:
return 0x5;
case 0x2:
return 0x4;
case 0x3:
return 0x3;
case 0x4:
return 0x2;
case 0x5:
return 0x1;
default:
break;
};
return 0x0;
case E_META_TORCH_FLOOR: return BLOCK_FACE_TOP;
case E_META_TORCH_EAST: return BLOCK_FACE_EAST;
case E_META_TORCH_WEST: return BLOCK_FACE_WEST;
case E_META_TORCH_NORTH: return BLOCK_FACE_NORTH;
case E_META_TORCH_SOUTH: return BLOCK_FACE_SOUTH;
default:
{
ASSERT(!"Unhandled torch metadata");
break;
}
}
return 0;
} //tolua_export
static bool IsAttachedTo( const Vector3i & a_TorchPos, char a_TorchMeta, const Vector3i & a_BlockPos )
static bool IsAttachedTo(const Vector3i & a_TorchPos, char a_TorchMeta, const Vector3i & a_BlockPos)
{
switch( a_TorchMeta )
switch (a_TorchMeta)
{
case 0x0:
case 0x5: // On floor
if( (a_TorchPos - a_BlockPos).Equals( Vector3i(0, 1, 0 ) ) )
case 0x0:
case E_META_TORCH_FLOOR: return ((a_TorchPos - a_BlockPos).Equals(Vector3i(0, 1, 0)));
case E_META_TORCH_EAST: return ((a_TorchPos - a_BlockPos).Equals(Vector3i(0, 0, -1)));
case E_META_TORCH_WEST: return ((a_TorchPos - a_BlockPos).Equals(Vector3i(0, 0, 1)));
case E_META_TORCH_NORTH: return ((a_TorchPos - a_BlockPos).Equals(Vector3i(-1, 0, 0)));
case E_META_TORCH_SOUTH: return ((a_TorchPos - a_BlockPos).Equals(Vector3i(1, 0, 0)));
default:
{
return true;
ASSERT(!"Unhandled torch meta!");
break;
}
break;
case 0x4: // South -Z
if( (a_TorchPos - a_BlockPos).Equals( Vector3i(0, 0, -1 ) ) )
{
return true;
}
break;
case 0x3: // North +Z
if( (a_TorchPos - a_BlockPos).Equals( Vector3i(0, 0, 1 ) ) )
{
return true;
}
break;
case 0x2: // West -X
if( (a_TorchPos - a_BlockPos).Equals( Vector3i(-1, 0, 0 ) ) )
{
return true;
}
break;
case 0x1: // East +X
if( (a_TorchPos - a_BlockPos).Equals( Vector3i( 1, 0, 0 ) ) )
{
return true;
}
break;
default:
break;
};
}
return false;
}
}; //tolua_export
} ; //tolua_export