本文整理汇总了C++中CVehicle::GetFirstOccupant方法的典型用法代码示例。如果您正苦于以下问题:C++ CVehicle::GetFirstOccupant方法的具体用法?C++ CVehicle::GetFirstOccupant怎么用?C++ CVehicle::GetFirstOccupant使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CVehicle
的用法示例。
在下文中一共展示了CVehicle::GetFirstOccupant方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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: 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 );
}