//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ // // Purpose: // // $NoKeywords: $ //============================================================================= #ifndef VOICE_GAMEMGR_H #define VOICE_GAMEMGR_H #pragma once #include "voice_common.h" class CGameRules; class CBasePlayer; class IVoiceGameMgrHelper { public: virtual ~IVoiceGameMgrHelper() {} // Called each frame to determine which players are allowed to hear each other. This overrides // whatever squelch settings players have. virtual bool CanPlayerHearPlayer( CBasePlayer *pListener, CBasePlayer *pTalker ) = 0; }; // CVoiceGameMgr manages which clients can hear which other clients. class CVoiceGameMgr { public: CVoiceGameMgr(); virtual ~CVoiceGameMgr(); bool Init( IVoiceGameMgrHelper *m_pHelper, int maxClients ); void SetHelper( IVoiceGameMgrHelper *pHelper ); // Updates which players can hear which other players. // If gameplay mode is DM, then only players within the PVS can hear each other. // If gameplay mode is teamplay, then only players on the same team can hear each other. // Player masks are always applied. void Update( double frametime ); // Called when a new client connects (unsquelches its entity for everyone). void ClientConnected( struct edict_s *pEdict ); // Called on ClientCommand. Checks for the squelch and unsquelch commands. // Returns true if it handled the command. bool ClientCommand( CBasePlayer *pPlayer, const char *cmd ); // Called to determine if the Receiver has muted (blocked) the Sender // Returns true if the receiver has blocked the sender bool PlayerHasBlockedPlayer( CBasePlayer *pReceiver, CBasePlayer *pSender ); private: // Force it to update the client masks. void UpdateMasks(); private: int m_msgPlayerVoiceMask; int m_msgRequestState; IVoiceGameMgrHelper *m_pHelper; int m_nMaxPlayers; double m_UpdateInterval; // How long since the last update. }; #endif // VOICE_GAMEMGR_H