source-engine/tools/toolutils/basestatusbar.cpp

151 lines
3.8 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#include "toolutils/basestatusbar.h"
#include "toolutils/ConsolePage.h"
#include "vgui_controls/Label.h"
#include "movieobjects/dmeclip.h"
#include "tier1/KeyValues.h"
#include "vgui/IVGui.h"
#include "toolutils/enginetools_int.h"
#include "toolframework/ienginetool.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CBaseStatusBar::CBaseStatusBar( vgui::Panel *parent, char const *panelName )
: BaseClass( parent, panelName ),
m_flLastFPSSnapShot( -1.0f )
{
SetVisible( true );
m_pConsole = new CConsolePage( this, true );
m_pLabel = new Label( this, "Console", "#BxConsole" );
m_pMemory = new Label( this, "Memory", "" );
m_pFPS = new Label( this, "FPS", "" );
m_pGameTime = new Label( this, "GameTime", "" );
MakePopup( false );
UpdateMemoryUsage( 9.999 );
}
//-----------------------------------------------------------------------------
// Purpose: Forces console to take up full area except right edge
// Input : -
//-----------------------------------------------------------------------------
void CBaseStatusBar::PerformLayout()
{
BaseClass::PerformLayout();
int w, h;
GetSize( w, h );
int oldw = w;
w *= 0.45f;
int x = 8;
int cw, ch;
m_pLabel->GetContentSize( cw, ch );
m_pLabel->SetBounds( x, 4, cw, h - 8 );
x += cw + 4;
int consoleWide = w - x - 8;
m_pConsole->SetBounds( x, 2, consoleWide, h - 4 );
x += consoleWide + 4;
int infoW = 85;
int rightx = oldw - infoW - 10;
m_pFPS->SetBounds( rightx, 2, infoW - 2 - 10, h - 8 );
rightx -= infoW;
m_pGameTime->SetBounds( rightx, 2, infoW - 2, h - 8 );
rightx -= infoW;
m_pMemory->SetBounds( rightx, 2, infoW - 2, h - 8 );
}
void CBaseStatusBar::UpdateMemoryUsage( float mbUsed )
{
char mem[ 256 ];
Q_snprintf( mem, sizeof( mem ), "[mem: %.2f Mb]", mbUsed );
m_pMemory->SetText( mem );
}
//-----------------------------------------------------------------------------
// Purpose: Message map
//-----------------------------------------------------------------------------
void CBaseStatusBar::ApplySchemeSettings(IScheme *pScheme)
{
BaseClass::ApplySchemeSettings(pScheme);
// get the borders we need
SetBorder(pScheme->GetBorder("ButtonBorder"));
// get the background color
SetBgColor(pScheme->GetColor( "StatusBar.BgColor", GetBgColor() ));
m_pLabel->SetFont( pScheme->GetFont( "DefaultVerySmall" ) );
m_pMemory->SetFont( pScheme->GetFont( "DefaultVerySmall" ) );
m_pFPS->SetFont( pScheme->GetFont( "DefaultVerySmall" ) );
m_pGameTime->SetFont( pScheme->GetFont( "DefaultVerySmall" ) );
}
static float GetMemoryUsage();
void CBaseStatusBar::OnThink()
{
BaseClass::OnThink();
float curtime = enginetools->GetRealTime();
char gt[ 32 ];
Q_snprintf( gt, sizeof( gt ), "[game: %.3f]", enginetools->ServerTime() );
m_pGameTime->SetText( gt );
float elapsed = curtime - m_flLastFPSSnapShot;
if ( elapsed < 0.4f )
return;
m_flLastFPSSnapShot = curtime;
float ft = enginetools->GetRealFrameTime();
if ( ft <= 0.0f )
{
m_pFPS->SetText( "[fps: ??]" );
}
else
{
char fps[ 32 ];
Q_snprintf( fps, sizeof( fps ), "[fps: %.1f]", 1.0f / ft );
m_pFPS->SetText( fps );
}
UpdateMemoryUsage( GetMemoryUsage() );
}
#include <windows.h>
#include <psapi.h>
static float GetMemoryUsage()
{
PROCESS_MEMORY_COUNTERS counters;
counters.cb = sizeof( counters );
if ( GetProcessMemoryInfo( GetCurrentProcess(), &counters, sizeof( counters ) ) )
{
return (float)counters.WorkingSetSize / ( 1024.0f * 1024.0f );
}
return 0;
}