Fixed player heads always pointing north (new EntityHeadLook packet)
git-svn-id: http://mc-server.googlecode.com/svn/trunk@424 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
8d9e539f33
commit
2786ad306a
@ -33,6 +33,7 @@ enum ENUM_PACKET_ID
|
|||||||
E_ENT_LOOK = 0x20,
|
E_ENT_LOOK = 0x20,
|
||||||
E_REL_ENT_MOVE_LOOK = 0x21,
|
E_REL_ENT_MOVE_LOOK = 0x21,
|
||||||
E_ENT_TELEPORT = 0x22,
|
E_ENT_TELEPORT = 0x22,
|
||||||
|
E_ENT_HEAD_LOOK = 0x23,
|
||||||
E_ENT_STATUS = 0x26,
|
E_ENT_STATUS = 0x26,
|
||||||
E_METADATA = 0x28,
|
E_METADATA = 0x28,
|
||||||
E_PRE_CHUNK = 0x32,
|
E_PRE_CHUNK = 0x32,
|
||||||
|
@ -207,7 +207,7 @@ void cMonster::ReplicateMovement()
|
|||||||
{
|
{
|
||||||
if(m_bDirtyOrientation && !m_bDirtyPosition)
|
if(m_bDirtyOrientation && !m_bDirtyPosition)
|
||||||
{
|
{
|
||||||
cPacket_EntityLook EntityLook( this );
|
cPacket_EntityLook EntityLook(*this);
|
||||||
m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, EntityLook );
|
m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, EntityLook );
|
||||||
m_bDirtyOrientation = false;
|
m_bDirtyOrientation = false;
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,10 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName)
|
|||||||
, m_Color('-')
|
, m_Color('-')
|
||||||
, m_ClientHandle( a_Client )
|
, m_ClientHandle( a_Client )
|
||||||
{
|
{
|
||||||
|
LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d",
|
||||||
|
a_PlayerName.c_str(), a_Client->GetSocket().GetIPString().c_str(),
|
||||||
|
this, GetUniqueID()
|
||||||
|
);
|
||||||
m_EntityType = eEntityType_Player;
|
m_EntityType = eEntityType_Player;
|
||||||
SetMaxHealth(20);
|
SetMaxHealth(20);
|
||||||
SetMaxFoodLevel(125);
|
SetMaxFoodLevel(125);
|
||||||
@ -113,7 +117,7 @@ void cPlayer::Initialize( cWorld* a_World )
|
|||||||
|
|
||||||
cPlayer::~cPlayer(void)
|
cPlayer::~cPlayer(void)
|
||||||
{
|
{
|
||||||
LOG("Deleting cPlayer \"%s\" @ %p", m_PlayerName.c_str(), this);
|
LOG("Deleting cPlayer \"%s\" at %p, ID %d", m_PlayerName.c_str(), this, GetUniqueID());
|
||||||
|
|
||||||
SaveToDisk();
|
SaveToDisk();
|
||||||
|
|
||||||
@ -183,8 +187,10 @@ void cPlayer::Tick(float a_Dt)
|
|||||||
|
|
||||||
if (m_bDirtyOrientation && !m_bDirtyPosition)
|
if (m_bDirtyOrientation && !m_bDirtyPosition)
|
||||||
{
|
{
|
||||||
cPacket_EntityLook EntityLook( this );
|
cPacket_EntityLook EntityLook(*this);
|
||||||
m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, EntityLook, m_ClientHandle );
|
m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, EntityLook, m_ClientHandle );
|
||||||
|
cPacket_EntityHeadLook EntityHeadLook(*this);
|
||||||
|
m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, EntityHeadLook, m_ClientHandle);
|
||||||
m_bDirtyOrientation = false;
|
m_bDirtyOrientation = false;
|
||||||
}
|
}
|
||||||
else if (m_bDirtyPosition )
|
else if (m_bDirtyPosition )
|
||||||
|
@ -269,13 +269,17 @@ cServer::cServer()
|
|||||||
|
|
||||||
cServer::~cServer()
|
cServer::~cServer()
|
||||||
{
|
{
|
||||||
if( m_pState->SListenClient ) m_pState->SListenClient.CloseSocket();
|
// TODO: Shut down the server gracefully
|
||||||
|
if ( m_pState->SListenClient )
|
||||||
|
{
|
||||||
|
m_pState->SListenClient.CloseSocket();
|
||||||
|
}
|
||||||
m_pState->SListenClient = 0;
|
m_pState->SListenClient = 0;
|
||||||
|
|
||||||
m_pState->bStopListenThread = true;
|
m_pState->bStopListenThread = true;
|
||||||
delete m_pState->pListenThread; m_pState->pListenThread = 0;
|
delete m_pState->pListenThread; m_pState->pListenThread = NULL;
|
||||||
m_pState->bStopTickThread = true;
|
m_pState->bStopTickThread = true;
|
||||||
delete m_pState->pTickThread; m_pState->pTickThread = 0;
|
delete m_pState->pTickThread; m_pState->pTickThread = NULL;
|
||||||
|
|
||||||
delete m_pState;
|
delete m_pState;
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,16 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cPacket_EntityLook::cPacket_EntityLook(cEntity* a_Entity)
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cPacket_EntityLook:
|
||||||
|
|
||||||
|
cPacket_EntityLook::cPacket_EntityLook(const cEntity & a_Entity)
|
||||||
{
|
{
|
||||||
m_PacketID = E_ENT_LOOK;
|
m_PacketID = E_ENT_LOOK;
|
||||||
|
|
||||||
m_UniqueID = a_Entity->GetUniqueID();
|
m_UniqueID = a_Entity.GetUniqueID();
|
||||||
m_Rotation = (char)((a_Entity->GetRotation() / 360.f) * 256);
|
m_Rotation = (char)((a_Entity.GetRotation() / 360.f) * 256);
|
||||||
m_Pitch = (char)((a_Entity->GetPitch() / 360.f) * 256);
|
m_Pitch = (char)((a_Entity.GetPitch() / 360.f) * 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -33,3 +36,29 @@ void cPacket_EntityLook::Serialize(AString & a_Data) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cPacket_EntityHeadLook:
|
||||||
|
|
||||||
|
cPacket_EntityHeadLook::cPacket_EntityHeadLook(const cEntity & a_Entity)
|
||||||
|
{
|
||||||
|
m_PacketID = E_ENT_HEAD_LOOK;
|
||||||
|
|
||||||
|
m_UniqueID = a_Entity.GetUniqueID();
|
||||||
|
m_HeadYaw = (char)((a_Entity.GetRotation() / 360.f) * 256);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cPacket_EntityHeadLook::Serialize(AString & a_Data) const
|
||||||
|
{
|
||||||
|
AppendByte (a_Data, m_PacketID);
|
||||||
|
AppendInteger(a_Data, m_UniqueID);
|
||||||
|
AppendByte (a_Data, m_HeadYaw);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,24 +8,50 @@
|
|||||||
|
|
||||||
|
|
||||||
class cEntity;
|
class cEntity;
|
||||||
class cPacket_EntityLook : public cPacket
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cPacket_EntityLook :
|
||||||
|
public cPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cPacket_EntityLook()
|
cPacket_EntityLook(void)
|
||||||
: m_UniqueID( 0 )
|
: m_UniqueID( 0 )
|
||||||
, m_Rotation( 0 )
|
, m_Rotation( 0 )
|
||||||
, m_Pitch( 0 )
|
, m_Pitch( 0 )
|
||||||
{ m_PacketID = E_ENT_LOOK; }
|
{ m_PacketID = E_ENT_LOOK; }
|
||||||
cPacket_EntityLook(cEntity* a_Entity);
|
cPacket_EntityLook(const cEntity & a_Entity);
|
||||||
virtual cPacket* Clone() const { return new cPacket_EntityLook(*this); }
|
virtual cPacket* Clone(void) const { return new cPacket_EntityLook(*this); }
|
||||||
|
|
||||||
virtual void Serialize(AString & a_Data) const override;
|
virtual void Serialize(AString & a_Data) const override;
|
||||||
|
|
||||||
int m_UniqueID;
|
int m_UniqueID;
|
||||||
char m_Rotation;
|
char m_Rotation;
|
||||||
char m_Pitch;
|
char m_Pitch;
|
||||||
|
};
|
||||||
static const unsigned int c_Size = 1 + 4 + 1 + 1;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cPacket_EntityHeadLook :
|
||||||
|
public cPacket
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cPacket_EntityHeadLook(void)
|
||||||
|
: m_UniqueID( 0 )
|
||||||
|
, m_HeadYaw( 0 )
|
||||||
|
{ m_PacketID = E_ENT_LOOK; }
|
||||||
|
cPacket_EntityHeadLook(const cEntity & a_Entity);
|
||||||
|
|
||||||
|
virtual cPacket * Clone(void) const { return new cPacket_EntityHeadLook(*this); }
|
||||||
|
|
||||||
|
virtual void Serialize(AString & a_Data) const override;
|
||||||
|
|
||||||
|
int m_UniqueID;
|
||||||
|
char m_HeadYaw;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user