mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
151 lines
3.8 KiB
C++
151 lines
3.8 KiB
C++
|
//========= 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;
|
||
|
}
|