summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_chat.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/tf_hud_chat.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/tf_hud_chat.cpp')
-rw-r--r--game/client/tf/tf_hud_chat.cpp301
1 files changed, 301 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_chat.cpp b/game/client/tf/tf_hud_chat.cpp
new file mode 100644
index 0000000..1dfc181
--- /dev/null
+++ b/game/client/tf/tf_hud_chat.cpp
@@ -0,0 +1,301 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "tf_hud_chat.h"
+#include "hud_macros.h"
+#include "text_message.h"
+#include "vguicenterprint.h"
+#include "vgui/ILocalize.h"
+#include "engine/IEngineSound.h"
+#include "c_tf_team.h"
+#include "c_playerresource.h"
+#include "c_tf_player.h"
+#include "tf_gamerules.h"
+#include "ihudlcd.h"
+#include "tf_hud_freezepanel.h"
+#if defined( REPLAY_ENABLED )
+#include "replay/ienginereplay.h"
+#endif
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+DECLARE_HUDELEMENT( CHudChat );
+DECLARE_HUD_MESSAGE( CHudChat, SayText );
+DECLARE_HUD_MESSAGE( CHudChat, SayText2 );
+DECLARE_HUD_MESSAGE( CHudChat, TextMsg );
+DECLARE_HUD_MESSAGE( CHudChat, VoiceSubtitle );
+
+
+//=====================
+//CHudChatLine
+//=====================
+
+void CHudChatLine::ApplySchemeSettings(vgui::IScheme *pScheme)
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ m_hFont = pScheme->GetFont( "ChatFont" );
+ SetBorder( NULL );
+ SetBgColor( Color( 0, 0, 0, 0 ) );
+ SetFgColor( Color( 0, 0, 0, 0 ) );
+
+ SetFont( m_hFont );
+}
+
+CHudChatLine::CHudChatLine( vgui::Panel *parent, const char *panelName ) : CBaseHudChatLine( parent, panelName )
+{
+ m_text = NULL;
+}
+
+
+//=====================
+//CHudChatInputLine
+//=====================
+
+void CHudChatInputLine::ApplySchemeSettings(vgui::IScheme *pScheme)
+{
+ BaseClass::ApplySchemeSettings(pScheme);
+}
+
+
+
+//=====================
+//CHudChat
+//=====================
+
+CHudChat::CHudChat( const char *pElementName ) : BaseClass( pElementName )
+{
+#if defined ( _X360 )
+ RegisterForRenderGroup( "mid" );
+#endif
+}
+
+void CHudChat::CreateChatInputLine( void )
+{
+ m_pChatInput = new CHudChatInputLine( this, "ChatInputLine" );
+ m_pChatInput->SetVisible( false );
+}
+
+void CHudChat::CreateChatLines( void )
+{
+#ifndef _XBOX
+ m_ChatLine = new CHudChatLine( this, "ChatLine1" );
+ m_ChatLine->SetVisible( false );
+
+#endif
+}
+
+void CHudChat::Init( void )
+{
+ BaseClass::Init();
+
+ HOOK_HUD_MESSAGE( CHudChat, SayText );
+ HOOK_HUD_MESSAGE( CHudChat, SayText2 );
+ HOOK_HUD_MESSAGE( CHudChat, TextMsg );
+ HOOK_HUD_MESSAGE( CHudChat, VoiceSubtitle );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Hides us when our render group is hidden
+// move render group to base chat when its safer
+//-----------------------------------------------------------------------------
+bool CHudChat::ShouldDraw( void )
+{
+#if defined( REPLAY_ENABLED )
+ extern IEngineClientReplay *g_pEngineClientReplay;
+ if ( g_pEngineClientReplay->IsPlayingReplayDemo() )
+ return false;
+#endif
+
+ return CHudElement::ShouldDraw();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Overrides base reset to not cancel chat at round restart
+//-----------------------------------------------------------------------------
+void CHudChat::Reset( void )
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CHudChat::GetChatInputOffset( void )
+{
+ if ( m_pChatInput->IsVisible() )
+ {
+ return m_iFontHeight;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int CHudChat::GetFilterForString( const char *pString )
+{
+ int iFilter = BaseClass::GetFilterForString( pString );
+
+ if ( iFilter == CHAT_FILTER_NONE )
+ {
+ if ( !Q_stricmp( pString, "#TF_Name_Change" ) )
+ {
+ return CHAT_FILTER_NAMECHANGE;
+ }
+ }
+
+ return iFilter;
+}
+
+//-----------------------------------------------------------------------------
+Color CHudChat::GetClientColor( int clientIndex )
+{
+ IScheme *pScheme = scheme()->GetIScheme( GetScheme() );
+
+ if ( pScheme == NULL )
+ return Color( 255, 255, 255, 255 );
+
+ if ( clientIndex == 0 ) // console msg
+ {
+ return g_ColorGreen;
+ }
+ else if( g_PR )
+ {
+ int iTeam = g_PR->GetTeam( clientIndex );
+
+ C_TFPlayer *pPlayer = ToTFPlayer( UTIL_PlayerByIndex( clientIndex ) );
+ C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
+
+ if ( IsVoiceSubtitle() == true )
+ {
+ // if this player is on the other team, disguised as my team, show disguised color
+ if ( pPlayer && pLocalPlayer && pPlayer->m_Shared.InCond( TF_COND_DISGUISED ) &&
+ pPlayer->m_Shared.GetDisguiseTeam() == pLocalPlayer->GetTeamNumber() )
+ {
+ iTeam = pPlayer->m_Shared.GetDisguiseTeam();
+ }
+ }
+
+ switch ( iTeam )
+ {
+ case TF_TEAM_RED : return pScheme->GetColor( "TFColors.ChatTextRed", g_ColorRed );
+ case TF_TEAM_BLUE : return pScheme->GetColor( "TFColors.ChatTextBlue", g_ColorBlue );
+ default : return g_ColorGrey;
+ }
+ }
+
+ return g_ColorYellow;
+}
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CHudChat::IsVisible( void )
+{
+ if ( IsTakingAFreezecamScreenshot() )
+ return false;
+
+ return BaseClass::IsVisible();
+}
+
+const char *CHudChat::GetDisplayedSubtitlePlayerName( int clientIndex )
+{
+ C_TFPlayer *pPlayer = ToTFPlayer( UTIL_PlayerByIndex( clientIndex ) );
+ C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
+
+ if ( !pPlayer || !pLocalPlayer )
+ return BaseClass::GetDisplayedSubtitlePlayerName( clientIndex );
+
+ // If they are disguised as the enemy, and not on our team
+ if ( pPlayer->m_Shared.InCond( TF_COND_DISGUISED ) &&
+ pPlayer->m_Shared.GetDisguiseTeam() != pPlayer->GetTeamNumber() &&
+ !pLocalPlayer->InSameTeam( pPlayer ) )
+ {
+ C_TFPlayer *pDisguiseTarget = ToTFPlayer( pPlayer->m_Shared.GetDisguiseTarget() );
+
+ Assert( pDisguiseTarget );
+
+ if ( !pDisguiseTarget )
+ {
+ return BaseClass::GetDisplayedSubtitlePlayerName( clientIndex );
+ }
+
+ return pDisguiseTarget->GetPlayerName();
+ }
+
+ return BaseClass::GetDisplayedSubtitlePlayerName( clientIndex );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+Color CHudChat::GetTextColorForClient( TextColor colorNum, int clientIndex )
+{
+ IScheme *pScheme = scheme()->GetIScheme( GetScheme() );
+
+ if ( pScheme == NULL )
+ return Color( 255, 255, 255, 255 );
+
+ Color c;
+ switch ( colorNum )
+ {
+ case COLOR_CUSTOM:
+ c = m_ColorCustom;
+ break;
+
+ case COLOR_PLAYERNAME:
+ c = GetClientColor( clientIndex );
+ break;
+
+ case COLOR_LOCATION:
+ c = g_ColorDarkGreen;
+ break;
+
+ case COLOR_ACHIEVEMENT:
+ {
+ IScheme *pSourceScheme = scheme()->GetIScheme( scheme()->GetScheme( "SourceScheme" ) );
+ if ( pSourceScheme )
+ {
+ c = pSourceScheme->GetColor( "SteamLightGreen", GetBgColor() );
+ }
+ else
+ {
+ c = pScheme->GetColor( "TFColors.ChatTextYellow", GetBgColor() );
+ }
+ }
+ break;
+
+ default:
+ c = pScheme->GetColor( "TFColors.ChatTextYellow", GetBgColor() );
+ }
+
+ return Color( c[0], c[1], c[2], 255 );
+}
+
+int CHudChat::GetFilterFlags( void )
+{
+//=============================================================================
+// HPE_BEGIN:
+// [msmith] We don't want to be displaying these chat messages when we're in training.
+// This is because we don't want the player seeing when bots join etc.
+//=============================================================================
+ if ( TFGameRules() && TFGameRules()->IsInTraining() )
+ return CHAT_FILTER_PUBLICCHAT;
+//=============================================================================
+// HPE_END
+//=============================================================================
+
+ int iFlags = BaseClass::GetFilterFlags();
+
+ if ( TFGameRules() && TFGameRules()->IsInArenaMode() == true )
+ {
+ return iFlags &= ~CHAT_FILTER_TEAMCHANGE;
+ }
+
+ return iFlags;
+}