//=========== (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; }