2014-03-14 21:45:25 -04:00
# include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
# include "HangingEntity.h"
# include "ClientHandle.h"
# include "Player.h"
cHangingEntity : : cHangingEntity ( eEntityType a_EntityType , eBlockFace a_BlockFace , double a_X , double a_Y , double a_Z )
2014-07-17 17:15:53 -04:00
: cEntity ( a_EntityType , a_X , a_Y , a_Z , 0.8 , 0.8 )
2014-03-14 21:45:25 -04:00
, m_BlockFace ( a_BlockFace )
{
SetMaxHealth ( 1 ) ;
SetHealth ( 1 ) ;
}
void cHangingEntity : : SpawnOn ( cClientHandle & a_ClientHandle )
{
int Dir = 0 ;
2014-08-04 07:20:16 -04:00
2014-03-14 21:45:25 -04:00
// The client uses different values for item frame directions and block faces. Our constants are for the block faces, so we convert them here to item frame faces
switch ( m_BlockFace )
{
2014-07-17 16:15:34 -04:00
case BLOCK_FACE_ZP : break ; // Initialised to zero
2014-03-14 21:45:25 -04:00
case BLOCK_FACE_ZM : Dir = 2 ; break ;
case BLOCK_FACE_XM : Dir = 1 ; break ;
case BLOCK_FACE_XP : Dir = 3 ; break ;
default : ASSERT ( ! " Unhandled block face when trying to spawn item frame! " ) ; return ;
}
2014-07-17 16:15:34 -04:00
if ( ( Dir = = 0 ) | | ( Dir = = 2 ) ) // Probably a client bug, but two directions are flipped and contrary to the norm, so we do -180
2014-03-14 21:45:25 -04:00
{
SetYaw ( ( Dir * 90 ) - 180 ) ;
}
else
{
SetYaw ( Dir * 90 ) ;
}
a_ClientHandle . SendSpawnObject ( * this , 71 , Dir , ( Byte ) GetYaw ( ) , ( Byte ) GetPitch ( ) ) ;
a_ClientHandle . SendEntityMetadata ( * this ) ;
}