224 lines
5.7 KiB
C++
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;
|
|
}
|