diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/game/shared/voice_status.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/shared/voice_status.h')
| -rw-r--r-- | sp/src/game/shared/voice_status.h | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/sp/src/game/shared/voice_status.h b/sp/src/game/shared/voice_status.h new file mode 100644 index 00000000..0e659c33 --- /dev/null +++ b/sp/src/game/shared/voice_status.h @@ -0,0 +1,197 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef VOICE_STATUS_H
+#define VOICE_STATUS_H
+#pragma once
+
+
+#include <vgui_controls/Label.h>
+//#include "vgui_bitmap.h"
+#include <vgui_controls/Button.h>
+#include <vgui_controls/Image.h>
+#include "voice_common.h"
+#include "voice_banmgr.h"
+#include "hudelement.h"
+
+#ifdef VOICE_VOX_ENABLE
+extern ConVar voice_vox;
+#endif // VOICE_VOX_ENABLE
+
+class CVoiceStatus;
+class IMaterial;
+class BitmapImage;
+
+// Voice Panel
+class CVoicePanel : public vgui::Panel
+{
+public:
+ CVoicePanel( );
+ ~CVoicePanel();
+
+ virtual void Paint( void );
+ virtual void setImage( BitmapImage *pImage );
+
+private:
+ BitmapImage *m_pImage;
+};
+
+class CVoiceLabel
+{
+public:
+ vgui::Label *m_pLabel;
+ vgui::Label *m_pBackground;
+ CVoicePanel *m_pIcon; // Voice icon next to player name.
+ int m_clientindex; // Client index of the speaker. -1 if this label isn't being used.
+};
+
+// This is provided by each mod to access data that may not be the same across mods.
+abstract_class IVoiceStatusHelper
+{
+public:
+ virtual ~IVoiceStatusHelper() {}
+
+ // Get RGB color for voice status text about this player.
+ virtual void GetPlayerTextColor(int entindex, int color[3]) = 0;
+
+ // Force it to update the cursor state.
+ virtual void UpdateCursorState() = 0;
+
+ // Return true if the voice manager is allowed to show speaker labels
+ // (mods usually return false when the scoreboard is up).
+ virtual bool CanShowSpeakerLabels() = 0;
+};
+
+class CVoiceStatus /*: public vgui::CDefaultInputSignal*/
+{
+public:
+ CVoiceStatus();
+ virtual ~CVoiceStatus();
+
+// CHudBase overrides.
+public:
+
+ // Initialize the cl_dll's voice manager.
+ virtual int Init(
+ IVoiceStatusHelper *m_pHelper,
+ vgui::VPANEL pParentPanel);
+
+ // ackPosition is the bottom position of where CVoiceStatus will draw the voice acknowledgement labels.
+ virtual void VidInit();
+
+public:
+
+ // Call from HUD_Frame each frame.
+ void Frame(double frametime);
+
+ // Called when a player starts or stops talking.
+ // entindex is -1 to represent the local client talking (before the data comes back from the server).
+ // When the server acknowledges that the local client is talking, then entindex will be gEngfuncs.GetLocalPlayer().
+ // entindex is -2 to represent the local client's voice being acked by the server.
+ void UpdateSpeakerStatus(int entindex, bool bTalking);
+
+ // Call from the HUD_CreateEntities function so it can add sprites above player heads.
+ void DrawHeadLabels();
+ void SetHeadLabelOffset( float offset );
+ float GetHeadLabelOffset( void ) const;
+ void SetHeadLabelsDisabled( bool bDisabled ) { m_bHeadLabelsDisabled = bDisabled; }
+
+ // Called when the server registers a change to who this client can hear.
+ void HandleVoiceMaskMsg(bf_read &msg);
+
+ // The server sends this message initially to tell the client to send their state.
+ void HandleReqStateMsg(bf_read &msg);
+
+
+// Squelch mode functions.
+public:
+
+ // When you enter squelch mode, pass in
+ void StartSquelchMode();
+ void StopSquelchMode();
+ bool IsInSquelchMode();
+
+ // returns true if the target client has been banned
+ // playerIndex is of range 1..maxplayers
+ bool IsPlayerBlocked(int iPlayerIndex);
+
+ // returns false if the player can't hear the other client due to game rules (eg. the other team)
+ bool IsPlayerAudible(int iPlayerIndex);
+
+ // returns true if the player is currently speaking
+ bool IsPlayerSpeaking(int iPlayerIndex);
+
+ // returns true if the local player is attempting to speak
+ bool IsLocalPlayerSpeaking( void );
+
+ // blocks the target client from being heard
+ void SetPlayerBlockedState(int iPlayerIndex, bool blocked);
+
+ void SetHeadLabelMaterial( const char *pszMaterial );
+
+ IMaterial *GetHeadLabelMaterial( void ) { return m_pHeadLabelMaterial; }
+
+private:
+
+ void UpdateServerState(bool bForce);
+
+ // Update the button artwork to reflect the client's current state.
+ void UpdateBanButton(int iClient);
+
+
+private:
+ float m_LastUpdateServerState; // Last time we called this function.
+ int m_bServerModEnable; // What we've sent to the server about our "voice_modenable" cvar.
+
+ vgui::VPANEL m_pParentPanel;
+ CPlayerBitVec m_VoicePlayers; // Who is currently talking. Indexed by client index.
+
+ // This is the gamerules-defined list of players that you can hear. It is based on what teams people are on
+ // and is totally separate from the ban list. Indexed by client index.
+ CPlayerBitVec m_AudiblePlayers;
+
+ // Players who have spoken at least once in the game so far
+ CPlayerBitVec m_VoiceEnabledPlayers;
+
+ // This is who the server THINKS we have banned (it can become incorrect when a new player arrives on the server).
+ // It is checked periodically, and the server is told to squelch or unsquelch the appropriate players.
+ CPlayerBitVec m_ServerBannedPlayers;
+
+ IVoiceStatusHelper *m_pHelper; // Each mod provides an implementation of this.
+
+ // Squelch mode stuff.
+ bool m_bInSquelchMode;
+
+ bool m_bTalking; // Set to true when the client thinks it's talking.
+ bool m_bServerAcked; // Set to true when the server knows the client is talking.
+
+public:
+
+ CVoiceBanMgr m_BanMgr; // Tracks which users we have squelched and don't want to hear.
+
+private:
+
+ IMaterial *m_pHeadLabelMaterial; // For labels above players' heads.
+
+ bool m_bBanMgrInitialized;
+
+ int m_nControlSize;
+
+ bool m_bHeadLabelsDisabled;
+
+#ifdef VOICE_VOX_ENABLE
+ CountdownTimer m_bAboveThresholdTimer;
+#endif // VOICE_VOX_ENABLE
+};
+
+
+// Get the (global) voice manager.
+CVoiceStatus* GetClientVoiceMgr();
+void ClientVoiceMgr_Init();
+void ClientVoiceMgr_Shutdown();
+
+#endif // VOICE_STATUS_H
|