本文整理汇总了C++中CClientPed::SetCurrentRotation方法的典型用法代码示例。如果您正苦于以下问题:C++ CClientPed::SetCurrentRotation方法的具体用法?C++ CClientPed::SetCurrentRotation怎么用?C++ CClientPed::SetCurrentRotation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CClientPed
的用法示例。
在下文中一共展示了CClientPed::SetCurrentRotation方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetPedRotation
void CPedRPCs::SetPedRotation ( CClientEntity* pSource, NetBitStreamInterface& bitStream )
{
SPedRotationSync rotation;
unsigned char ucTimeContext;
if ( bitStream.Read ( &rotation ) &&
bitStream.Read ( ucTimeContext ) )
{
uchar ucNewWay = 0;
if ( bitStream.GetNumberOfBytesUsed () > 0 )
bitStream.Read ( ucNewWay );
CClientPed* pPed = m_pPedManager->Get ( pSource->GetID (), true );
if ( pPed )
{
if ( ucNewWay == 1 )
pPed->SetCurrentRotationNew ( rotation.data.fRotation );
else
pPed->SetCurrentRotation ( rotation.data.fRotation );
if ( !IS_PLAYER ( pPed ) )
pPed->SetCameraRotation ( rotation.data.fRotation );
pPed->SetSyncTimeContext ( ucTimeContext );
}
}
}
示例2: Packet_PedSync
void CPedSync::Packet_PedSync ( NetBitStreamInterface& BitStream )
{
// While we're not out of peds
while ( BitStream.GetNumberOfUnreadBits () > 32 )
{
// Read out the ped id
ElementID ID;
if ( BitStream.Read ( ID ) )
{
// Read out the sync time context. See CClientEntity for documentation on that.
unsigned char ucSyncTimeContext = 0;
BitStream.Read ( ucSyncTimeContext );
unsigned char ucFlags = 0;
BitStream.Read ( ucFlags );
CVector vecPosition, vecMoveSpeed;
float fRotation, fHealth, fArmor;
// Read out the position
if ( ucFlags & 0x01 )
{
BitStream.Read ( vecPosition.fX );
BitStream.Read ( vecPosition.fY );
BitStream.Read ( vecPosition.fZ );
}
// And rotation
if ( ucFlags & 0x02 ) BitStream.Read ( fRotation );
// And the move speed
if ( ucFlags & 0x04 )
{
BitStream.Read ( vecMoveSpeed.fX );
BitStream.Read ( vecMoveSpeed.fY );
BitStream.Read ( vecMoveSpeed.fZ );
}
// And health with armour
if ( ucFlags & 0x08 ) BitStream.Read ( fHealth );
if ( ucFlags & 0x10 ) BitStream.Read ( fArmor );
// Grab the ped. Only update the sync if this packet is from the same context.
CClientPed* pPed = m_pPedManager->Get ( ID );
if ( pPed && pPed->CanUpdateSync ( ucSyncTimeContext ) )
{
if ( ucFlags & 0x01 ) pPed->SetPosition ( vecPosition );
if ( ucFlags & 0x02 ) pPed->SetCurrentRotation ( fRotation );
if ( ucFlags & 0x04 ) pPed->SetMoveSpeed ( vecMoveSpeed );
if ( ucFlags & 0x08 ) pPed->LockHealth ( fHealth );
if ( ucFlags & 0x10 ) pPed->LockArmor ( fArmor );
}
}
}
}
示例3: UpdateContacting
//
// Apply object movement to contacting peds
//
void CDeathmatchObject::UpdateContacting(const CVector& vecCenterOfRotation, const CVector& vecFrameTranslation, const CVector& vecFrameRotation)
{
bool bHasRotation = (vecFrameRotation.fX != 0 || vecFrameRotation.fY != 0 || vecFrameRotation.fZ != 0);
bool bHasTranslation = (vecFrameTranslation.fX != 0 || vecFrameTranslation.fY != 0 || vecFrameTranslation.fZ != 0);
// Early out if no orientation change here
if (!bHasRotation && !bHasTranslation)
return;
// Step through each contacting ped
list<CClientPed*>::iterator iter = m_Contacts.begin();
for (; iter != m_Contacts.end(); ++iter)
{
CClientPed* pPed = *iter;
// Do not move the ped if it is frozen
if (pPed->IsFrozen())
continue;
// Get ped start position
CVector vecPlayerPosition;
pPed->GetPosition(vecPlayerPosition);
// Apply rotation effect on position
if (bHasRotation)
{
vecPlayerPosition -= vecCenterOfRotation;
RotateVector(vecPlayerPosition, CVector(-vecFrameRotation.fX, -vecFrameRotation.fY, -vecFrameRotation.fZ));
vecPlayerPosition += vecCenterOfRotation;
}
// Apply translation
vecPlayerPosition += vecFrameTranslation;
pPed->SetPosition(vecPlayerPosition);
// Also change ped facing direction
if (vecFrameRotation.fZ != 0)
{
float fRotationZ = pPed->GetCurrentRotation();
pPed->SetCurrentRotation(fRotationZ + vecFrameRotation.fZ);
}
}
// Look in attached objects for more ped contacts
for (uint i = 0; i < m_AttachedEntities.size(); ++i)
{
CClientEntity* pEntity = m_AttachedEntities[i];
if (IS_OBJECT(pEntity))
{
CDeathmatchObject* pObject = static_cast<CDeathmatchObject*>(pEntity);
pObject->UpdateContacting(vecCenterOfRotation, vecFrameTranslation, vecFrameRotation);
}
}
}
示例4: Packet_PedStartSync
void CPedSync::Packet_PedStartSync ( NetBitStreamInterface& BitStream )
{
// Read out the element id
ElementID ID;
if ( BitStream.Read ( ID ) )
{
// Grab the ped
CClientPed* pPed = static_cast < CClientPed* > ( m_pPedManager->Get ( ID ) );
if ( pPed )
{
// Read out the position
CVector vecPosition;
BitStream.Read ( vecPosition.fX );
BitStream.Read ( vecPosition.fY );
BitStream.Read ( vecPosition.fZ );
// And rotation
float fRotation;
BitStream.Read ( fRotation );
// And the velocity
CVector vecVelocity;
BitStream.Read ( vecVelocity.fX );
BitStream.Read ( vecVelocity.fY );
BitStream.Read ( vecVelocity.fZ );
// And health/armor
float fHealth, fArmor;
BitStream.Read ( fHealth );
BitStream.Read ( fArmor );
// Set data
pPed->SetPosition ( vecPosition );
pPed->SetCurrentRotation ( fRotation );
pPed->SetMoveSpeed ( vecVelocity );
// Set the new health
pPed->SetHealth ( fHealth );
pPed->SetArmor ( fArmor );
// Unlock health and armour for the syncer
pPed->UnlockHealth ();
pPed->UnlockArmor ();
AddPed ( pPed );
}
}
}