You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.0 KiB
189 lines
5.0 KiB
//========= 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
|
|
|