gdle/Source/Moves.cpp

100 lines
2.1 KiB
C++
Raw Permalink Normal View History

2018-03-29 17:01:57 -04:00
2019-07-07 20:56:15 +00:00
#include <StdAfx.h>
2018-03-29 17:01:57 -04:00
#include "WeenieObject.h"
#include "PhysicsObj.h"
#include "World.h"
#include "ObjectMsgs.h"
void CPhysicsObj::Movement_Init()
{
m_fMoveThink = g_pGlobals->Time();
}
void CPhysicsObj::Movement_Shutdown()
{
}
void CPhysicsObj::Movement_Think()
{
2018-07-12 14:41:21 -07:00
if (parent)
2018-03-29 17:01:57 -04:00
return;
if ((m_fMoveThink + 1.0f) < Timer::cur_time)
{
if (m_Position.objcell_id != m_LastMovePosition.objcell_id || !m_Position.frame.is_vector_equal(m_LastMovePosition.frame))
{
Movement_UpdatePos();
// Animation_Update();
}
else if (!m_Position.frame.is_quaternion_equal(m_LastMovePosition.frame))
{
Movement_UpdatePos();
}
m_fMoveThink = Timer::cur_time;
}
}
2019-07-07 20:56:15 +00:00
void CPhysicsObj::Movement_SendUpdate(uint32_t dwCell)
2018-03-29 17:01:57 -04:00
{
2018-07-12 14:41:21 -07:00
if (CWeenieObject *pWeenie = GetWeenie())
2018-03-29 17:01:57 -04:00
{
BinaryWriter* poo = MoveUpdate(pWeenie);
2019-05-12 09:21:34 -07:00
g_pWorld->BroadcastPVS(dwCell, poo->GetData(), poo->GetSize(), OBJECT_MSG, false, false, true);
2018-03-29 17:01:57 -04:00
delete poo;
}
}
void CPhysicsObj::Movement_UpdatePos()
{
2018-07-12 14:41:21 -07:00
if (parent)
2018-03-29 17:01:57 -04:00
return;
//QUICKFIX: Broadcast to the old landblock that we've moved from.
//This sends duplicates if the block is near the other.
_position_timestamp++;
_last_update_pos = Timer::cur_time;
2019-07-07 20:56:15 +00:00
uint32_t dwNewCell = GetLandcell();
uint32_t dwOldCell = m_LastMovePosition.objcell_id;
2018-03-29 17:01:57 -04:00
if (BLOCK_WORD(dwOldCell) != BLOCK_WORD(dwNewCell))
{
Movement_SendUpdate(dwOldCell);
}
Movement_SendUpdate(dwNewCell);
m_LastMovePosition = m_Position;
/*
GetWeenie()->EmoteLocal(csprintf("Sending position update. Pos: %.1f %.1f %.1f v: %.1f %.1f %.1f",
m_Position.frame.m_origin.x, m_Position.frame.m_origin.y, m_Position.frame.m_origin.z,
m_velocityVector.x, m_velocityVector.y, m_velocityVector.z));
*/
}
void CPhysicsObj::Movement_UpdateVector()
{
2018-07-12 14:41:21 -07:00
if (parent)
2018-03-29 17:01:57 -04:00
return;
BinaryWriter moveMsg;
2019-07-07 20:56:15 +00:00
moveMsg.Write<uint32_t>(0xF74E);
moveMsg.Write<uint32_t>(id);
2018-03-29 17:01:57 -04:00
// velocity
Vector localVel = m_velocityVector;
localVel.Pack(&moveMsg);
// omega
m_Omega.Pack(&moveMsg);
moveMsg.Write<WORD>(_instance_timestamp);
moveMsg.Write<WORD>(++_vector_timestamp);
2019-05-12 09:21:34 -07:00
g_pWorld->BroadcastPVS(this, moveMsg.GetData(), moveMsg.GetSize(), OBJECT_MSG, false, false, true);
2018-07-12 14:41:21 -07:00
}