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
|