本文整理汇总了C++中CVehicle::CallEvent方法的典型用法代码示例。如果您正苦于以下问题:C++ CVehicle::CallEvent方法的具体用法?C++ CVehicle::CallEvent怎么用?C++ CVehicle::CallEvent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CVehicle
的用法示例。
在下文中一共展示了CVehicle::CallEvent方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoVehicleRespawning
void CMapManager::DoVehicleRespawning ( void )
{
// TODO: needs speeding up (no good looping through thousands of vehicles each frame)
CVehicleSpawnPacket VehicleSpawnPacket;
CVehicle* pVehicle = NULL;
// Grab the current time
unsigned long ulTime = GetTime ();
bool bRespawn, bExploded;
unsigned long ulBlowTime, ulIdleTime;
// Loop through all the vehicles
list < CVehicle* > ::const_iterator iter = m_pVehicleManager->IterBegin ();
for ( ; iter != m_pVehicleManager->IterEnd (); iter++ )
{
pVehicle = *iter;
bRespawn = false, bExploded = false;
// It's been set to respawn
if ( pVehicle->GetRespawnEnabled () )
{
// Did we get deserted?
bool bDeserted = ( !pVehicle->GetFirstOccupant () );
// Grab when it blew and when it was last not touched
ulBlowTime = pVehicle->GetBlowTime ();
ulIdleTime = pVehicle->GetIdleTime ();
// Been blown long enough?
if ( ulBlowTime != 0 && ulTime >= ( ulBlowTime + pVehicle->GetRespawnTime () ) )
{
bRespawn = true;
bExploded = true;
}
// Been deserted long enough?
else if ( bDeserted && ulIdleTime != 0 &&
ulTime >= ( ulIdleTime + pVehicle->GetIdleRespawnTime () ) )
{
bRespawn = true;
}
}
// Need to respawn?
if ( bRespawn )
{
// Respawn it and add it to the packet
pVehicle->Respawn ();
VehicleSpawnPacket.Add ( pVehicle );
// Call the respawn event
CLuaArguments Arguments;
Arguments.PushBoolean ( bExploded );
pVehicle->CallEvent ( "onVehicleRespawn", Arguments );
}
}
// Send it
m_pPlayerManager->BroadcastOnlyJoined ( VehicleSpawnPacket );
}
示例2: Read
bool CVehiclePuresyncPacket::Read ( NetBitStreamInterface& BitStream )
{
// Got a player to read?
if ( m_pSourceElement )
{
CPlayer * pSourcePlayer = static_cast < CPlayer * > ( m_pSourceElement );
// Player is in a vehicle?
CVehicle* pVehicle = pSourcePlayer->GetOccupiedVehicle ();
if ( pVehicle )
{
// Read out the time context
unsigned char ucTimeContext = 0;
if ( !BitStream.Read ( ucTimeContext ) )
return false;
// Only read this packet if it matches the current time context that
// player is in.
if ( !pSourcePlayer->CanUpdateSync ( ucTimeContext ) )
{
return false;
}
// Read out the keysync data
CControllerState ControllerState;
if ( !ReadFullKeysync ( ControllerState, BitStream ) )
return false;
// Read out its position
SPositionSync position ( false );
if ( !BitStream.Read ( &position ) )
return false;
pSourcePlayer->SetPosition ( position.data.vecPosition );
// Jax: don't allow any outdated packets through
unsigned char ucSeat;
if ( !BitStream.Read ( ucSeat ) )
return false;
if ( ucSeat != pSourcePlayer->GetOccupiedVehicleSeat () )
{
// Mis-matching seats can happen when we warp into a different one,
// which will screw up the whole packet
return false;
}
// Read out the vehicle matrix only if he's the driver
unsigned int uiSeat = pSourcePlayer->GetOccupiedVehicleSeat ();
if ( uiSeat == 0 )
{
// Read out the vehicle rotation in degrees
SRotationDegreesSync rotation;
if( !BitStream.Read ( &rotation ) )
return false;
// Set it
pVehicle->SetPosition ( position.data.vecPosition );
pVehicle->SetRotationDegrees ( rotation.data.vecRotation );
// Move speed vector
SVelocitySync velocity;
if ( !BitStream.Read ( &velocity ) )
return false;
pVehicle->SetVelocity ( velocity.data.vecVelocity );
pSourcePlayer->SetVelocity ( velocity.data.vecVelocity );
// Turn speed vector
SVelocitySync turnSpeed;
if ( !BitStream.Read ( &turnSpeed ) )
return false;
pVehicle->SetTurnSpeed ( turnSpeed.data.vecVelocity );
// Health
SVehicleHealthSync health;
if ( !BitStream.Read ( &health ) )
return false;
float fPreviousHealth = pVehicle->GetHealth ();
float fHealth = health.data.fValue;
// Less than last time?
if ( fHealth < fPreviousHealth )
{
// Grab the delta health
float fDeltaHealth = fPreviousHealth - fHealth;
if ( fDeltaHealth > 0.0f )
{
// Call the onVehicleDamage event
CLuaArguments Arguments;
Arguments.PushNumber ( fDeltaHealth );
pVehicle->CallEvent ( "onVehicleDamage", Arguments );
}
}
pVehicle->SetHealth ( fHealth );
// Trailer chain
CVehicle* pTowedByVehicle = pVehicle;
CVehicle* pTrailer = NULL;
ElementID TrailerID;
//.........这里部分代码省略.........
示例3: DoVehicleRespawning
void CMapManager::DoVehicleRespawning ( void )
{
CVehicleSpawnPacket VehicleSpawnPacket;
// Loop through all vehicles with respawn enabled
list < CVehicle* >& respawnEnabledList = m_pVehicleManager->GetRespawnEnabledVehicles ( );
list < CVehicle* > ::const_iterator iter = respawnEnabledList.begin ( );
for ( ; iter != respawnEnabledList.end ( ); ++iter )
{
CVehicle* pVehicle = *iter;
// No need to respawn vehicles if they're being deleted anyway
if ( pVehicle->IsBeingDeleted ( ) )
continue;
// Did we get deserted?
bool bDeserted = ( !pVehicle->GetFirstOccupant ( ) );
bool bRespawn = false;
bool bExploded = false;
if ( bDeserted )
{
// If moved, or idle timer not running, restart idle timer
if ( !pVehicle->IsStationary ( ) || !pVehicle->IsIdleTimerRunning ( ) )
pVehicle->RestartIdleTimer ( );
}
else
{
// Stop idle timer if car is occupied
pVehicle->StopIdleTimer ( );
}
// Been blown long enough?
if ( pVehicle->IsBlowTimerFinished ( ) )
{
bRespawn = true;
bExploded = true;
}
// Been deserted long enough?
else if ( bDeserted && pVehicle->IsIdleTimerFinished ( ) )
{
// Check is far enough away from respawn point (Ignore first 20 units on z)
CVector vecDif = pVehicle->GetRespawnPosition ( ) - pVehicle->GetPosition ( );
vecDif.fZ = Max ( 0.f, fabsf ( vecDif.fZ ) - 20.f );
if ( vecDif.LengthSquared ( ) > 2 * 2 )
bRespawn = true;
pVehicle->StopIdleTimer ( );
}
// Need to respawn?
if ( bRespawn )
{
// Respawn it and add it to the packet
pVehicle->Respawn ( );
VehicleSpawnPacket.Add ( pVehicle );
// Call the respawn event
CLuaArguments Arguments;
Arguments.PushBoolean ( bExploded );
pVehicle->CallEvent ( "onVehicleRespawn", Arguments );
}
}
// Send it
m_pPlayerManager->BroadcastOnlyJoined ( VehicleSpawnPacket );
}