hl2_src-leak-2017/src/game/client/c_recipientfilter.h

190 lines
5.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef C_RECIPIENTFILTER_H
#define C_RECIPIENTFILTER_H
#ifdef _WIN32
#pragma once
#endif
#include "irecipientfilter.h"
#include "utlvector.h"
#include "c_baseentity.h"
#include "soundflags.h"
#include "bitvec.h"
class C_BasePlayer;
class C_Team;
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class C_RecipientFilter : public IRecipientFilter
{
public:
C_RecipientFilter();
virtual ~C_RecipientFilter();
virtual bool IsReliable( void ) const;
virtual int GetRecipientCount( void ) const;
virtual int GetRecipientIndex( int slot ) const;
virtual bool IsInitMessage( void ) const { return false; };
public:
void CopyFrom( const C_RecipientFilter& src );
void Reset( void );
void MakeReliable( void );
void AddAllPlayers( void );
void AddRecipientsByPVS( const Vector& origin );
void AddRecipientsByPAS( const Vector& origin );
void AddRecipient( C_BasePlayer *player );
void RemoveRecipient( C_BasePlayer *player );
void AddRecipientsByTeam( C_Team *team );
void RemoveRecipientsByTeam( C_Team *team );
void UsePredictionRules( void );
bool IsUsingPredictionRules( void ) const;
bool IgnorePredictionCull( void ) const;
void SetIgnorePredictionCull( bool ignore );
void AddPlayersFromBitMask( CBitVec< ABSOLUTE_PLAYER_LIMIT >& playerbits );
//private:
bool m_bReliable;
bool m_bInitMessage;
CUtlVector< int > m_Recipients;
// If using prediction rules, the filter itself suppresses local player
bool m_bUsingPredictionRules;
// If ignoring prediction cull, then external systems can determine
// whether this is a special case where culling should not occur
bool m_bIgnorePredictionCull;
};
//-----------------------------------------------------------------------------
// Purpose: Simple class to create a filter for a single player
//-----------------------------------------------------------------------------
class CSingleUserRecipientFilter : public C_RecipientFilter
{
public:
CSingleUserRecipientFilter( C_BasePlayer *player )
{
AddRecipient( player );
}
};
//-----------------------------------------------------------------------------
// Purpose: Simple class to create a filter for all players, unreliable
//-----------------------------------------------------------------------------
class CBroadcastRecipientFilter : public C_RecipientFilter
{
public:
CBroadcastRecipientFilter( void )
{
AddAllPlayers();
}
};
//-----------------------------------------------------------------------------
// Purpose: Simple class to create a filter for all players, reliable
//-----------------------------------------------------------------------------
class CReliableBroadcastRecipientFilter : public CBroadcastRecipientFilter
{
public:
CReliableBroadcastRecipientFilter( void )
{
MakeReliable();
}
};
//-----------------------------------------------------------------------------
// Purpose: Simple class to create a filter for a single player
//-----------------------------------------------------------------------------
class CPASFilter : public C_RecipientFilter
{
public:
CPASFilter( const Vector& origin )
{
AddRecipientsByPAS( origin );
}
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CPASAttenuationFilter : public CPASFilter
{
public:
CPASAttenuationFilter( C_BaseEntity *entity, float attenuation = ATTN_NORM ) :
CPASFilter( entity->GetAbsOrigin() )
{
}
CPASAttenuationFilter( const Vector& origin, float attenuation = ATTN_NORM ) :
CPASFilter( origin )
{
}
CPASAttenuationFilter( C_BaseEntity *entity, const char *lookupSound ) :
CPASFilter( entity->GetAbsOrigin() )
{
}
CPASAttenuationFilter( const Vector& origin, const char *lookupSound ) :
CPASFilter( origin )
{
}
CPASAttenuationFilter( C_BaseEntity *entity, const char *lookupSound, HSOUNDSCRIPTHANDLE& handle ) :
CPASFilter( entity->GetAbsOrigin() )
{
}
CPASAttenuationFilter( const Vector& origin, const char *lookupSound, HSOUNDSCRIPTHANDLE& handle ) :
CPASFilter( origin )
{
}
};
//-----------------------------------------------------------------------------
// Purpose: Simple class to create a filter for a single player
//-----------------------------------------------------------------------------
class CPVSFilter : public C_RecipientFilter
{
public:
CPVSFilter( const Vector& origin )
{
AddRecipientsByPVS( origin );
}
};
class CLocalPlayerFilter : public C_RecipientFilter
{
public:
CLocalPlayerFilter( void );
};
class CUIFilter : public C_RecipientFilter
{
public:
CUIFilter( void )
{
m_Recipients.AddToTail( 1 );
// AddRecipient( 0 );
}
};
#endif // C_RECIPIENTFILTER_H