mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-11 03:09:36 +00:00
1
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user