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.
275 lines
7.3 KiB
275 lines
7.3 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#include "cbase.h"
|
||
|
|
||
|
#include "inputsystem/iinputsystem.h"
|
||
|
#include "input.h"
|
||
|
|
||
|
#include "tf_textwindow.h"
|
||
|
#include <cdll_client_int.h>
|
||
|
|
||
|
#include <vgui/IScheme.h>
|
||
|
#include <vgui/ILocalize.h>
|
||
|
#include <vgui/ISurface.h>
|
||
|
#include <filesystem.h>
|
||
|
#include <KeyValues.h>
|
||
|
#include <convar.h>
|
||
|
#include <vgui_controls/ImageList.h>
|
||
|
|
||
|
#include <vgui_controls/Panel.h>
|
||
|
#include <vgui_controls/TextEntry.h>
|
||
|
#include <vgui_controls/Button.h>
|
||
|
#include <vgui_controls/BuildGroup.h>
|
||
|
#include <vgui_controls/ImagePanel.h>
|
||
|
|
||
|
#include "tf_controls.h"
|
||
|
#include "tf_shareddefs.h"
|
||
|
|
||
|
#include "IGameUIFuncs.h" // for key bindings
|
||
|
#include <igameresources.h>
|
||
|
extern IGameUIFuncs *gameuifuncs; // for key binding details
|
||
|
|
||
|
#include <game/client/iviewport.h>
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Constructor
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CTFTextWindow::CTFTextWindow( IViewPort *pViewPort ) : CTextWindow( pViewPort )
|
||
|
{
|
||
|
m_pTFTextMessage = new CExRichText( this, "TFTextMessage" );
|
||
|
|
||
|
SetProportional( true );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Destructor
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CTFTextWindow::~CTFTextWindow()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ApplySchemeSettings( IScheme *pScheme )
|
||
|
{
|
||
|
Frame::ApplySchemeSettings( pScheme ); // purposely skipping the CTextWindow version
|
||
|
|
||
|
if ( ::input->IsSteamControllerActive() )
|
||
|
{
|
||
|
if ( m_bCustomSvrPage )
|
||
|
{
|
||
|
LoadControlSettings( "Resource/UI/TextWindowCustomServer_SC.res" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LoadControlSettings( "Resource/UI/TextWindow_SC.res" );
|
||
|
}
|
||
|
|
||
|
SetMouseInputEnabled( false );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( m_bCustomSvrPage )
|
||
|
{
|
||
|
LoadControlSettings( "Resource/UI/TextWindowCustomServer.res" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LoadControlSettings( "Resource/UI/TextWindow.res" );
|
||
|
}
|
||
|
SetMouseInputEnabled( true );
|
||
|
}
|
||
|
|
||
|
|
||
|
if ( m_pHTMLMessage )
|
||
|
{
|
||
|
m_pHTMLMessage->SetBgColor( pScheme->GetColor( "HTMLBackground", Color( 255, 0, 0, 255 ) ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::Reset( void )
|
||
|
{
|
||
|
Update();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::OnThink()
|
||
|
{
|
||
|
//Always hide the health... this needs to be done every frame because a message from the server keeps resetting this.
|
||
|
C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer();
|
||
|
if ( pLocalPlayer )
|
||
|
{
|
||
|
pLocalPlayer->m_Local.m_iHideHUD |= HIDEHUD_HEALTH;
|
||
|
}
|
||
|
|
||
|
BaseClass::OnThink();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::SetData(KeyValues *data)
|
||
|
{
|
||
|
m_bCustomSvrPage = data->GetBool( "customsvr" );
|
||
|
InvalidateLayout( false, true );
|
||
|
BaseClass::SetData( data );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::Update()
|
||
|
{
|
||
|
CExLabel *pTitle = dynamic_cast<CExLabel *>( FindChildByName( "TFMessageTitle" ) );
|
||
|
if ( pTitle )
|
||
|
{
|
||
|
pTitle->SetText( m_szTitle );
|
||
|
}
|
||
|
|
||
|
if ( m_pTFTextMessage )
|
||
|
{
|
||
|
m_pTFTextMessage->SetVisible( false );
|
||
|
}
|
||
|
|
||
|
BaseClass::Update();
|
||
|
|
||
|
Panel *pOK = FindChildByName( "ok" );
|
||
|
if ( pOK )
|
||
|
{
|
||
|
pOK->RequestFocus();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//---------------------------------------------------------------------------
|
||
|
void CTFTextWindow::SetVisible( bool state )
|
||
|
{
|
||
|
BaseClass::SetVisible( state );
|
||
|
|
||
|
if ( state )
|
||
|
{
|
||
|
Panel *pOK = FindChildByName( "ok" );
|
||
|
if ( pOK )
|
||
|
{
|
||
|
pOK->RequestFocus();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: shows the text window
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ShowPanel( bool bShow )
|
||
|
{
|
||
|
if ( IsVisible() == bShow )
|
||
|
return;
|
||
|
|
||
|
// Force use to reevaluate our scheme, in case Steam Controller stuff has changed.
|
||
|
InvalidateLayout( true, true );
|
||
|
|
||
|
BaseClass::ShowPanel( bShow );
|
||
|
|
||
|
if ( m_pViewPort )
|
||
|
{
|
||
|
m_pViewPort->ShowBackGround( false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::OnKeyCodePressed( KeyCode code )
|
||
|
{
|
||
|
if ( code == KEY_XBUTTON_A || code == STEAMCONTROLLER_A )
|
||
|
{
|
||
|
OnCommand( "okay" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BaseClass::OnKeyCodePressed( code );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: The background is painted elsewhere, so we should do nothing
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::PaintBackground()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::OnCommand( const char *command )
|
||
|
{
|
||
|
BaseClass::OnCommand( command );
|
||
|
|
||
|
// Don't open up the mapinfo if it was a custom server html page
|
||
|
if ( !Q_strcmp( command, "okay" ) && !m_bCustomSvrPage )
|
||
|
{
|
||
|
m_pViewPort->ShowPanel( PANEL_MAPINFO, true );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ShowText( const char *text )
|
||
|
{
|
||
|
ShowTitleLabel( true );
|
||
|
|
||
|
if ( m_pTFTextMessage )
|
||
|
{
|
||
|
m_pTFTextMessage->SetVisible( true );
|
||
|
m_pTFTextMessage->SetText( text );
|
||
|
m_pTFTextMessage->GotoTextStart();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ShowURL( const char *URL, bool bAllowUserToDisable )
|
||
|
{
|
||
|
ShowTitleLabel( false );
|
||
|
BaseClass::ShowURL( URL, bAllowUserToDisable );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ShowFile( const char *filename )
|
||
|
{
|
||
|
ShowTitleLabel( false ) ;
|
||
|
BaseClass::ShowFile( filename );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFTextWindow::ShowTitleLabel( bool show )
|
||
|
{
|
||
|
CExLabel *pTitle = dynamic_cast<CExLabel *>( FindChildByName( "TFMessageTitle" ) );
|
||
|
if ( pTitle )
|
||
|
{
|
||
|
pTitle->SetVisible( show );
|
||
|
}
|
||
|
}
|