csgo-2018-source/vgui2/game_controls/textdisplay.cpp
2021-07-24 21:11:47 -07:00

224 lines
5.7 KiB
C++

//=========== (C) Copyright 1999 Valve, L.L.C. All rights reserved. ===========
//
// The copyright to the contents herein is the property of Valve, L.L.C.
// The contents may be used and/or copied only with the written permission of
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// $Header: $
// $NoKeywords: $
//
//=============================================================================
#include "textdisplay.h"
#include "gameuisystemmgr.h"
#include "gameuisystem.h"
#include "gametext.h"
#include "tier1/utlbuffer.h"
#define VERTICAL_SPACING 20
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
CTextDisplay::CTextDisplay()
{
m_nXOffset = 10;
m_nYOffset = 10;
m_nXStaticOffset = 10;
m_nYStaticOffset = 10;
m_bIsInitialized = false;
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::Init( IGameUISystem *pMenu )
{
if ( m_bIsInitialized )
return;
Vector2D stageSize(0, 0);
m_pMenu = ( CGameUISystem * ) pMenu;
Assert( m_pMenu );
m_pMenu->GetStageSize( stageSize );
m_nXOffset = (-stageSize.x/2) + 10;
m_nYOffset = (-stageSize.y/2) + 10;
m_nXStaticOffset = (-stageSize.x/2) + 500;
m_nYStaticOffset = (-stageSize.y/2) + 10;
m_bIsInitialized = true;
}
//-----------------------------------------------------------------------------
// Text that doesn't change every frame.
//-----------------------------------------------------------------------------
void CTextDisplay::AddStaticText( const char* pFmt, ... )
{
va_list args;
CUtlBuffer message;
va_start( args, pFmt );
message.VaPrintf( pFmt, args );
va_end( args );
char strMessage[255];
message.GetString( strMessage, 255 );
CGameText *pNewInfo = new CGameText( "staticText" );
pNewInfo->SetFont( "Default" );
pNewInfo->SetText( strMessage );
pNewInfo->SetCenter( m_nXStaticOffset, m_nYStaticOffset );
m_nYStaticOffset += VERTICAL_SPACING;
m_pStaticText.AddToTail( pNewInfo );
if ( m_pMenu )
{
m_pMenu->Definition().AddGraphicToLayer( pNewInfo, SUBLAYER_FONT );
}
}
//-----------------------------------------------------------------------------
// Text that doesn't change every frame.
//-----------------------------------------------------------------------------
void CTextDisplay::AddStaticText( int xPos, int yPos, const char* pFmt, ... )
{
va_list args;
CUtlBuffer message;
va_start( args, pFmt );
message.VaPrintf( pFmt, args );
va_end( args );
char strMessage[255];
message.GetString( strMessage, 255 );
CGameText *pNewInfo = new CGameText( "staticText" );
pNewInfo->SetFont( "Default" );
pNewInfo->SetText( strMessage );
pNewInfo->SetCenter( xPos, yPos );
m_pStaticText.AddToTail( pNewInfo );
if ( m_pMenu )
{
m_pMenu->Definition().AddGraphicToLayer( pNewInfo, SUBLAYER_FONT );
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::PrintMsg( const char* pFmt, ... )
{
va_list args;
CUtlBuffer message;
va_start( args, pFmt );
message.VaPrintf( pFmt, args );
va_end( args );
char strMessage[255];
message.GetString( strMessage, 255 );
CGameText *pNewInfo = new CGameText( "msgText" );
pNewInfo->SetFont( "Default" );
pNewInfo->SetText( strMessage );
pNewInfo->SetCenter( m_nXOffset, m_nYOffset );
m_nYOffset += VERTICAL_SPACING;
m_pStatsText.AddToTail( pNewInfo );
if ( m_pMenu )
{
m_pMenu->Definition().AddGraphicToLayer( pNewInfo, SUBLAYER_FONT );
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::PrintMsg( int xPos, int yPos, const char* pFmt, ... )
{
va_list args;
CUtlBuffer message;
va_start( args, pFmt );
message.VaPrintf( pFmt, args );
va_end( args );
char strMessage[255];
message.GetString( strMessage, 255 );
CGameText *pNewInfo = new CGameText( "msgText" );
pNewInfo->SetFont( "Default" );
pNewInfo->SetText( strMessage );
pNewInfo->SetCenter( xPos, yPos );
m_pStatsText.AddToTail( pNewInfo );
if ( m_pMenu )
{
m_pMenu->Definition().AddGraphicToLayer( pNewInfo, SUBLAYER_FONT );
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::ClearStaticText()
{
if ( m_pMenu )
{
for ( int i = 0; i < m_pStaticText.Count(); ++i )
{
m_pMenu->Definition().RemoveGraphic( m_pStaticText[i] );
}
m_pStaticText.RemoveAll();
Vector2D stageSize(0, 0);
m_pMenu->GetStageSize( stageSize );
m_nYStaticOffset = (-stageSize.y/2) + 10;
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::FinishFrame()
{
if ( m_pMenu )
{
for ( int i = 0; i < m_pStatsText.Count(); ++i )
{
m_pMenu->Definition().RemoveGraphic( m_pStatsText[i] );
delete m_pStatsText[i];
m_pStatsText[i] = NULL;
}
m_pStatsText.RemoveAll();
Vector2D stageSize(0, 0);
m_pMenu->GetStageSize( stageSize );
m_nYOffset = (-stageSize.y/2) + 10;
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CTextDisplay::Shutdown()
{
FinishFrame();
ClearStaticText();
m_bIsInitialized = false;
}