// Prediction CBaseEntity const *GetSuppressHost() { IPredictionSystem *sys = IPredictionSystem::g_pPredictionSystems; if( sys ) return sys->GetSuppressHost(); return NULL; }
void CRecipientFilter::AddRecipient( const CBasePlayer *player ) { Assert( player ); if ( !player ) return; int index = player->entindex(); // If we're predicting and this is not the first time we've predicted this sound // then don't send it to the local player again. if ( m_bUsingPredictionRules ) { // Only add local player if this is the first time doing prediction if ( g_RecipientFilterPredictionSystem.GetSuppressHost() == player ) { return; } } // Already in list if ( m_Recipients.Find( index ) != m_Recipients.InvalidIndex() ) return; m_Recipients.AddToTail( index ); }
void CRecipientFilter::UsePredictionRules( void ) { if ( m_bUsingPredictionRules ) return; m_bUsingPredictionRules = true; // Cull list now, if needed if ( GetRecipientCount() == 0 ) return; CBasePlayer *pPlayer = ToBasePlayer( (CBaseEntity*)g_RecipientFilterPredictionSystem.GetSuppressHost() ); if ( pPlayer) { RemoveRecipient( pPlayer ); if ( pPlayer->IsSplitScreenPlayer() ) { RemoveRecipient( pPlayer->GetSplitScreenPlayerOwner() ); } else { CUtlVector< CHandle< CBasePlayer > > &players = pPlayer->GetSplitScreenPlayers(); for ( int i = 0; i < players.Count(); ++i ) { RemoveRecipient( players[ i ].Get() ); } } } }
void C_RecipientFilter::AddRecipient( C_BasePlayer *player ) { Assert( player ); if ( !player ) return; int index = player->index; // If we're predicting and this is not the first time we've predicted this sound // then don't send it to the local player again. if ( m_bUsingPredictionRules ) { Assert( player == C_BasePlayer::GetLocalPlayer() ); Assert( prediction->InPrediction() ); // Only add local player if this is the first time doing prediction if ( !g_RecipientFilterPredictionSystem.CanPredict() ) { return; } } // Already in list if ( m_Recipients.Find( index ) != m_Recipients.InvalidIndex() ) return; // this is a client side filter, only add the local player if ( !player->IsLocalPlayer() ) return; m_Recipients.AddToTail( index ); }
void C_RecipientFilter::UsePredictionRules( void ) { if ( m_bUsingPredictionRules ) return; if ( !prediction->InPrediction() ) { Assert( 0 ); return; } C_BasePlayer *local = C_BasePlayer::GetLocalPlayer(); if ( !local ) { Assert( 0 ); return; } m_bUsingPredictionRules = true; // Cull list now, if needed int c = GetRecipientCount(); if ( c == 0 ) return; if ( !g_RecipientFilterPredictionSystem.CanPredict() ) { RemoveRecipient( local ); } }
void CRecipientFilter::UsePredictionRules( void ) { if ( m_bUsingPredictionRules ) return; m_bUsingPredictionRules = true; // Cull list now, if needed if ( GetRecipientCount() == 0 ) return; CBasePlayer *pPlayer = ToBasePlayer( (CBaseEntity*)g_RecipientFilterPredictionSystem.GetSuppressHost() ); if ( pPlayer) { RemoveRecipient( pPlayer ); } }