You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
714 lines
18 KiB
714 lines
18 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//===========================================================================//
|
||
|
|
||
|
#include "client_pch.h"
|
||
|
|
||
|
#include <vgui_controls/Frame.h>
|
||
|
#include <vgui/ISystem.h>
|
||
|
#include <vgui/ISurface.h>
|
||
|
#include <vgui_controls/BuildGroup.h>
|
||
|
#include <vgui_controls/Tooltip.h>
|
||
|
#include <vgui_controls/TextImage.h>
|
||
|
#include <vgui_controls/CheckButton.h>
|
||
|
#include <vgui_controls/Label.h>
|
||
|
#include <vgui_controls/PropertySheet.h>
|
||
|
#include <vgui_controls/FileOpenDialog.h>
|
||
|
#include <vgui_controls/ProgressBar.h>
|
||
|
#include <vgui_controls/Slider.h>
|
||
|
#include <vgui_controls/ComboBox.h>
|
||
|
#include <vgui_controls/Controls.h>
|
||
|
#include <vgui_controls/TextEntry.h>
|
||
|
#include <vgui/IInput.h>
|
||
|
#include "engineperftools.h"
|
||
|
#include "vgui_baseui_interface.h"
|
||
|
#include "ivideomode.h"
|
||
|
#include "gl_cvars.h"
|
||
|
|
||
|
#include "utlsymbol.h"
|
||
|
#include "utldict.h"
|
||
|
#include "filesystem.h"
|
||
|
#include "filesystem_engine.h"
|
||
|
#include "icliententitylist.h"
|
||
|
#include "icliententity.h"
|
||
|
#include "ModelInfo.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
using namespace vgui;
|
||
|
extern ConVar r_staticpropinfo;
|
||
|
extern ConVar r_DrawPortals;
|
||
|
extern ConVar r_visocclusion;
|
||
|
extern ConVar r_occlusion;
|
||
|
extern ConVar r_occluderminarea;
|
||
|
extern ConVar r_occludeemaxarea;
|
||
|
extern ConVar mat_wireframe;
|
||
|
extern ConVar sv_cheats;
|
||
|
|
||
|
// If you add a tool, add it to the string list and instance the panel in the constructor below
|
||
|
enum PerformanceTool_t
|
||
|
{
|
||
|
PERF_TOOL_NONE = 0,
|
||
|
PERF_TOOL_PROP_FADES,
|
||
|
PERF_TOOL_AREA_PORTALS,
|
||
|
PERF_TOOL_OCCLUSION,
|
||
|
|
||
|
PERF_TOOL_COUNT,
|
||
|
|
||
|
DEFAULT_PERF_TOOL = PERF_TOOL_NONE,
|
||
|
};
|
||
|
|
||
|
static const char *s_pPerfToolNames[PERF_TOOL_COUNT] =
|
||
|
{
|
||
|
"No Tool Active",
|
||
|
"Prop Fade Distance Tool",
|
||
|
"Area Portal Tool",
|
||
|
"Occlusion Tool",
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Base class for all perf tool panels
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CPerfUIChildPanel : public vgui::EditablePanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CPerfUIChildPanel, vgui::EditablePanel );
|
||
|
|
||
|
public:
|
||
|
CPerfUIChildPanel( vgui::Panel *parent, const char *pName ) : BaseClass( parent, pName )
|
||
|
{
|
||
|
SetVisible( false );
|
||
|
}
|
||
|
virtual void Activate() {}
|
||
|
virtual void Deactivate() {}
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
//
|
||
|
// The prop fade distance helper tool
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CPropFadeUIPanel : public CPerfUIChildPanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CPropFadeUIPanel, CPerfUIChildPanel );
|
||
|
|
||
|
public:
|
||
|
CPropFadeUIPanel( vgui::Panel *parent );
|
||
|
~CPropFadeUIPanel() {}
|
||
|
void Activate();
|
||
|
void Deactivate();
|
||
|
|
||
|
protected:
|
||
|
enum
|
||
|
{
|
||
|
VISUALIZE_NONE = 0,
|
||
|
VISUALIZE_FADE_DISTANCE,
|
||
|
VISUALIZE_FADE_SCREEN_WIDTH,
|
||
|
|
||
|
VISUALIZE_TYPE_COUNT
|
||
|
};
|
||
|
|
||
|
void OnVisualizationSelected();
|
||
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data );
|
||
|
|
||
|
vgui::ComboBox *m_pVisualization;
|
||
|
vgui::TextEntry *m_pMinScreenArea;
|
||
|
vgui::TextEntry *m_pMaxScreenArea;
|
||
|
|
||
|
static const char *s_pFadeVisualizeLabel[VISUALIZE_TYPE_COUNT];
|
||
|
};
|
||
|
|
||
|
const char *CPropFadeUIPanel::s_pFadeVisualizeLabel[CPropFadeUIPanel::VISUALIZE_TYPE_COUNT] =
|
||
|
{
|
||
|
"No visualization",
|
||
|
"Show Fade Distance",
|
||
|
"Show Fade Screen Width"
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CPropFadeUIPanel::CPropFadeUIPanel( vgui::Panel *parent ) : BaseClass( parent, "PropFadeUIPanel")
|
||
|
{
|
||
|
m_pVisualization = new ComboBox(this, "VisualizeMode", VISUALIZE_TYPE_COUNT, false);
|
||
|
int i;
|
||
|
for ( i = 0; i < ARRAYSIZE(s_pFadeVisualizeLabel); i++ )
|
||
|
{
|
||
|
m_pVisualization->AddItem( s_pFadeVisualizeLabel[i], NULL );
|
||
|
}
|
||
|
m_pVisualization->AddActionSignalTarget( this );
|
||
|
m_pVisualization->ActivateItem( 0 );
|
||
|
|
||
|
m_pMinScreenArea = new vgui::TextEntry( this, "MinFadeSize" );
|
||
|
m_pMaxScreenArea = new vgui::TextEntry( this, "MaxFadeSize" );
|
||
|
|
||
|
LoadControlSettings("Resource\\PerfPropFadeUIPanel.res");
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Visualization changed
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPropFadeUIPanel::OnTextChanged( KeyValues *data )
|
||
|
{
|
||
|
Panel *pPanel = reinterpret_cast<vgui::Panel *>( data->GetPtr("panel") );
|
||
|
vgui::ComboBox *pBox = dynamic_cast<vgui::ComboBox *>( pPanel );
|
||
|
|
||
|
if( pBox == m_pVisualization )
|
||
|
{
|
||
|
OnVisualizationSelected();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
vgui::TextEntry *pText = dynamic_cast<vgui::TextEntry *>( pPanel );
|
||
|
if (( pText == m_pMinScreenArea ) || ( pText == m_pMaxScreenArea ))
|
||
|
{
|
||
|
char buf[256];
|
||
|
float flMinArea, flMaxArea;
|
||
|
|
||
|
m_pMinScreenArea->GetText( buf, 256 );
|
||
|
int nReadMin = sscanf( buf, "%f", &flMinArea );
|
||
|
|
||
|
m_pMaxScreenArea->GetText( buf, 256 );
|
||
|
int nReadMax = sscanf( buf, "%f", &flMaxArea );
|
||
|
|
||
|
if ( nReadMin && nReadMax )
|
||
|
{
|
||
|
modelinfoclient->SetLevelScreenFadeRange( flMinArea, flMaxArea );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPropFadeUIPanel::OnVisualizationSelected()
|
||
|
{
|
||
|
int tool = m_pVisualization->GetActiveItem();
|
||
|
switch( tool )
|
||
|
{
|
||
|
case VISUALIZE_NONE:
|
||
|
r_staticpropinfo.SetValue( 0 );
|
||
|
break;
|
||
|
|
||
|
case VISUALIZE_FADE_DISTANCE:
|
||
|
r_staticpropinfo.SetValue( 3 );
|
||
|
break;
|
||
|
|
||
|
case VISUALIZE_FADE_SCREEN_WIDTH:
|
||
|
r_staticpropinfo.SetValue( 4 );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPropFadeUIPanel::Activate()
|
||
|
{
|
||
|
float flMinArea, flMaxArea;
|
||
|
modelinfoclient->GetLevelScreenFadeRange( &flMinArea, &flMaxArea );
|
||
|
|
||
|
char buf[256];
|
||
|
Q_snprintf( buf, 256, "%.2f", flMinArea );
|
||
|
m_pMinScreenArea->SetText( buf );
|
||
|
Q_snprintf( buf, 256, "%.2f", flMaxArea );
|
||
|
m_pMaxScreenArea->SetText( buf );
|
||
|
|
||
|
OnVisualizationSelected();
|
||
|
}
|
||
|
|
||
|
void CPropFadeUIPanel::Deactivate()
|
||
|
{
|
||
|
r_staticpropinfo.SetValue( 0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// The areaportals helper tool
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CAreaPortalsUIPanel : public CPerfUIChildPanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CAreaPortalsUIPanel, CPerfUIChildPanel );
|
||
|
|
||
|
public:
|
||
|
CAreaPortalsUIPanel( vgui::Panel *parent );
|
||
|
~CAreaPortalsUIPanel() {}
|
||
|
void Activate();
|
||
|
void Deactivate();
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CAreaPortalsUIPanel::CAreaPortalsUIPanel( vgui::Panel *parent ) : BaseClass( parent, "AreaPortalUIPanel")
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CAreaPortalsUIPanel::Activate()
|
||
|
{
|
||
|
r_DrawPortals.SetValue( 1 );
|
||
|
mat_wireframe.SetValue( 3 );
|
||
|
}
|
||
|
|
||
|
void CAreaPortalsUIPanel::Deactivate()
|
||
|
{
|
||
|
r_DrawPortals.SetValue( 0 );
|
||
|
mat_wireframe.SetValue( 0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// The occlusion helper tool
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class COcclusionUIPanel : public CPerfUIChildPanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( COcclusionUIPanel, CPerfUIChildPanel );
|
||
|
|
||
|
public:
|
||
|
COcclusionUIPanel( vgui::Panel *parent );
|
||
|
~COcclusionUIPanel() {}
|
||
|
void Activate();
|
||
|
void Deactivate();
|
||
|
|
||
|
protected:
|
||
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data );
|
||
|
MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel );
|
||
|
|
||
|
private:
|
||
|
enum
|
||
|
{
|
||
|
VISUALIZE_NONE = 0,
|
||
|
VISUALIZE_ON,
|
||
|
|
||
|
VISUALIZE_TYPE_COUNT
|
||
|
};
|
||
|
|
||
|
void OnVisualizationSelected();
|
||
|
void OnDeactivateOcclusion();
|
||
|
|
||
|
vgui::ComboBox *m_pVisualization;
|
||
|
vgui::TextEntry *m_pMinOccluderArea;
|
||
|
vgui::TextEntry *m_pMaxOccludeeArea;
|
||
|
vgui::CheckButton *m_pDeactivateOcclusion;
|
||
|
|
||
|
static const char *s_pOccVisualizeLabel[VISUALIZE_TYPE_COUNT];
|
||
|
};
|
||
|
|
||
|
|
||
|
const char *COcclusionUIPanel::s_pOccVisualizeLabel[COcclusionUIPanel::VISUALIZE_TYPE_COUNT] =
|
||
|
{
|
||
|
"No visualization",
|
||
|
"View occluders",
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
COcclusionUIPanel::COcclusionUIPanel( vgui::Panel *parent ) : BaseClass( parent, "AreaPortalUIPanel")
|
||
|
{
|
||
|
m_pVisualization = new ComboBox(this, "VisualizeMode", VISUALIZE_TYPE_COUNT, false);
|
||
|
int i;
|
||
|
for ( i = 0; i < VISUALIZE_TYPE_COUNT; i++ )
|
||
|
{
|
||
|
m_pVisualization->AddItem( s_pOccVisualizeLabel[i], NULL );
|
||
|
}
|
||
|
m_pVisualization->AddActionSignalTarget( this );
|
||
|
m_pVisualization->ActivateItem( 0 );
|
||
|
|
||
|
m_pMinOccluderArea = new vgui::TextEntry( this, "MinOccluderSize" );
|
||
|
m_pMaxOccludeeArea = new vgui::TextEntry( this, "MaxOccludeeSize" );
|
||
|
|
||
|
m_pDeactivateOcclusion = new vgui::CheckButton( this, "DeactivateOcclusion", "" );
|
||
|
m_pDeactivateOcclusion->AddActionSignalTarget( this );
|
||
|
|
||
|
LoadControlSettings("Resource\\PerfOcclusionUIPanel.res");
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void COcclusionUIPanel::Activate()
|
||
|
{
|
||
|
OnVisualizationSelected();
|
||
|
OnDeactivateOcclusion();
|
||
|
|
||
|
char buf[256];
|
||
|
Q_snprintf( buf, 256, "%.2f", r_occluderminarea.GetFloat() );
|
||
|
m_pMinOccluderArea->SetText( buf );
|
||
|
Q_snprintf( buf, 256, "%.2f", r_occludeemaxarea.GetFloat() );
|
||
|
m_pMaxOccludeeArea->SetText( buf );
|
||
|
}
|
||
|
|
||
|
void COcclusionUIPanel::Deactivate()
|
||
|
{
|
||
|
r_visocclusion.SetValue( 0 );
|
||
|
mat_wireframe.SetValue( 0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Visualization changed
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void COcclusionUIPanel::OnTextChanged( KeyValues *data )
|
||
|
{
|
||
|
Panel *pPanel = reinterpret_cast<vgui::Panel *>( data->GetPtr("panel") );
|
||
|
vgui::ComboBox *pBox = dynamic_cast<vgui::ComboBox *>( pPanel );
|
||
|
|
||
|
if( pBox == m_pVisualization )
|
||
|
{
|
||
|
OnVisualizationSelected();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
vgui::TextEntry *pText = dynamic_cast<vgui::TextEntry *>( pPanel );
|
||
|
if (( pText == m_pMinOccluderArea ) || ( pText == m_pMaxOccludeeArea ))
|
||
|
{
|
||
|
char buf[256];
|
||
|
float flMinArea, flMaxArea;
|
||
|
|
||
|
m_pMinOccluderArea->GetText( buf, 256 );
|
||
|
int nReadMin = sscanf( buf, "%f", &flMinArea );
|
||
|
if ( nReadMin )
|
||
|
{
|
||
|
r_occluderminarea.SetValue( flMinArea );
|
||
|
}
|
||
|
|
||
|
m_pMaxOccludeeArea->GetText( buf, 256 );
|
||
|
int nReadMax = sscanf( buf, "%f", &flMaxArea );
|
||
|
if ( nReadMax )
|
||
|
{
|
||
|
r_occludeemaxarea.SetValue( flMaxArea );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void COcclusionUIPanel::OnVisualizationSelected()
|
||
|
{
|
||
|
int tool = m_pVisualization->GetActiveItem();
|
||
|
switch( tool )
|
||
|
{
|
||
|
case VISUALIZE_NONE:
|
||
|
r_visocclusion.SetValue( 0 );
|
||
|
mat_wireframe.SetValue( 0 );
|
||
|
break;
|
||
|
|
||
|
case VISUALIZE_ON:
|
||
|
r_visocclusion.SetValue( 1 );
|
||
|
mat_wireframe.SetValue( 3 );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Activate, deactivate:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void COcclusionUIPanel::OnDeactivateOcclusion()
|
||
|
{
|
||
|
r_occlusion.SetValue( m_pDeactivateOcclusion->IsSelected() ? 0 : 1 );
|
||
|
}
|
||
|
|
||
|
void COcclusionUIPanel::OnCheckButtonChecked(Panel *panel)
|
||
|
{
|
||
|
if ( panel == m_pDeactivateOcclusion )
|
||
|
{
|
||
|
OnDeactivateOcclusion();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CPerfUIPanel : public vgui::Frame
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CPerfUIPanel, vgui::Frame );
|
||
|
|
||
|
public:
|
||
|
CPerfUIPanel( vgui::Panel *parent );
|
||
|
~CPerfUIPanel();
|
||
|
|
||
|
// Command issued
|
||
|
virtual void OnCommand(const char *command);
|
||
|
|
||
|
virtual void Activate();
|
||
|
|
||
|
void Init();
|
||
|
void Shutdown();
|
||
|
|
||
|
virtual void OnKeyCodeTyped(KeyCode code);
|
||
|
|
||
|
virtual void OnTick();
|
||
|
|
||
|
protected:
|
||
|
vgui::ComboBox *m_pPerformanceTool;
|
||
|
|
||
|
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data );
|
||
|
|
||
|
private:
|
||
|
void PopulateControls();
|
||
|
void OnPerfToolSelected();
|
||
|
|
||
|
PerformanceTool_t m_nPerfTool;
|
||
|
CPerfUIChildPanel *m_pToolPanel[PERF_TOOL_COUNT];
|
||
|
CPerfUIChildPanel *m_pCurrentToolPanel;
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Basic help dialog
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CPerfUIPanel::CPerfUIPanel( vgui::Panel *parent ) : BaseClass( parent, "PerfUIPanel")
|
||
|
{
|
||
|
SetTitle("Level Performance Tools", true);
|
||
|
|
||
|
m_pPerformanceTool = new ComboBox(this, "PerformanceTool", 10, false);
|
||
|
|
||
|
vgui::ivgui()->AddTickSignal( GetVPanel(), 0 );
|
||
|
|
||
|
LoadControlSettings("Resource\\PerfUIPanel.res");
|
||
|
|
||
|
// Hidden by default
|
||
|
SetVisible( false );
|
||
|
|
||
|
SetSizeable( false );
|
||
|
SetMoveable( true );
|
||
|
|
||
|
int w = 250;
|
||
|
int h = 400;
|
||
|
|
||
|
int x = videomode->GetModeStereoWidth() - w - 10;
|
||
|
int y = ( videomode->GetModeStereoHeight() - h ) / 2 + videomode->GetModeStereoHeight() * 0.2;
|
||
|
SetBounds( x, y, w, h );
|
||
|
|
||
|
// Create the child tool panels
|
||
|
m_pToolPanel[PERF_TOOL_NONE] = new CPerfUIChildPanel( this, "PerfNone" );
|
||
|
m_pToolPanel[PERF_TOOL_PROP_FADES] = new CPropFadeUIPanel( this );
|
||
|
m_pToolPanel[PERF_TOOL_AREA_PORTALS] = new CAreaPortalsUIPanel( this );
|
||
|
m_pToolPanel[PERF_TOOL_OCCLUSION] = new COcclusionUIPanel( this );
|
||
|
|
||
|
for ( int i = 0; i < PERF_TOOL_COUNT; ++i )
|
||
|
{
|
||
|
m_pToolPanel[i]->SetBounds( 0, 75, w, h - 75 );
|
||
|
}
|
||
|
|
||
|
m_nPerfTool = PERF_TOOL_COUNT;
|
||
|
m_pCurrentToolPanel = NULL;
|
||
|
PopulateControls();
|
||
|
}
|
||
|
|
||
|
CPerfUIPanel::~CPerfUIPanel()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Init, shutdown
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPerfUIPanel::Init()
|
||
|
{
|
||
|
// Center the cursor on the panel
|
||
|
int x, y, w, h;
|
||
|
GetBounds( x, y, w, h );
|
||
|
vgui::input()->SetCursorPos( x + w/2, y + h/2 );
|
||
|
}
|
||
|
|
||
|
void CPerfUIPanel::Shutdown()
|
||
|
{
|
||
|
if ( m_pCurrentToolPanel )
|
||
|
{
|
||
|
m_pCurrentToolPanel->Deactivate();
|
||
|
m_pCurrentToolPanel->SetVisible( false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CPerfUIPanel::PopulateControls()
|
||
|
{
|
||
|
m_pPerformanceTool->DeleteAllItems();
|
||
|
int i;
|
||
|
for ( i = 0; i < PERF_TOOL_COUNT; i++ )
|
||
|
{
|
||
|
m_pPerformanceTool->AddItem( s_pPerfToolNames[i], NULL );
|
||
|
}
|
||
|
m_pPerformanceTool->AddActionSignalTarget( this );
|
||
|
m_pPerformanceTool->ActivateItem( 0 );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Don't allow this to be enabled without cheats turned on.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPerfUIPanel::OnTick()
|
||
|
{
|
||
|
// Go away if we were on and sv_cheats is now on.
|
||
|
if ( !CanCheat() )
|
||
|
{
|
||
|
Shutdown();
|
||
|
}
|
||
|
|
||
|
BaseClass::OnTick();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// A new performance tool was selected
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPerfUIPanel::OnTextChanged( KeyValues *data )
|
||
|
{
|
||
|
Panel *pPanel = reinterpret_cast<vgui::Panel *>( data->GetPtr("panel") );
|
||
|
vgui::ComboBox *pBox = dynamic_cast<vgui::ComboBox *>( pPanel );
|
||
|
|
||
|
if( pBox == m_pPerformanceTool ) // don't change the text in the config setting combo
|
||
|
{
|
||
|
OnPerfToolSelected();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CPerfUIPanel::OnPerfToolSelected()
|
||
|
{
|
||
|
int tool = m_pPerformanceTool->GetActiveItem();
|
||
|
if ( tool == m_nPerfTool )
|
||
|
return;
|
||
|
|
||
|
if ( m_pCurrentToolPanel )
|
||
|
{
|
||
|
m_pCurrentToolPanel->Deactivate();
|
||
|
m_pCurrentToolPanel->SetVisible( false );
|
||
|
}
|
||
|
m_nPerfTool = (PerformanceTool_t)tool;
|
||
|
m_pCurrentToolPanel = m_pToolPanel[tool];
|
||
|
m_pCurrentToolPanel->SetVisible( true );
|
||
|
m_pCurrentToolPanel->Activate();
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Shows the panel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPerfUIPanel::Activate()
|
||
|
{
|
||
|
if ( !CanCheat() )
|
||
|
return;
|
||
|
|
||
|
Init();
|
||
|
BaseClass::Activate();
|
||
|
}
|
||
|
|
||
|
void CPerfUIPanel::OnCommand( char const *command )
|
||
|
{
|
||
|
if ( !Q_strcasecmp( command, "submit" ) )
|
||
|
{
|
||
|
// OnSubmit();
|
||
|
}
|
||
|
else if ( !Q_strcasecmp( command, "cancel" ) )
|
||
|
{
|
||
|
// Close();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BaseClass::OnCommand( command );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CPerfUIPanel::OnKeyCodeTyped(KeyCode code)
|
||
|
{
|
||
|
switch( code )
|
||
|
{
|
||
|
case KEY_ESCAPE:
|
||
|
Close();
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
BaseClass::OnKeyCodeTyped( code );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Main interface to the performance tools
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static CPerfUIPanel *g_pPerfUI = NULL;
|
||
|
|
||
|
class CEnginePerfTools : public IEnginePerfTools
|
||
|
{
|
||
|
public:
|
||
|
virtual void Init( void );
|
||
|
virtual void Shutdown( void );
|
||
|
|
||
|
virtual void InstallPerformanceToolsUI( vgui::Panel *parent );
|
||
|
virtual bool ShouldPause() const;
|
||
|
};
|
||
|
|
||
|
static CEnginePerfTools g_PerfTools;
|
||
|
IEnginePerfTools *perftools = &g_PerfTools;
|
||
|
|
||
|
void CEnginePerfTools::Init( void )
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CEnginePerfTools::Shutdown( void )
|
||
|
{
|
||
|
if ( g_pPerfUI )
|
||
|
{
|
||
|
g_pPerfUI->Shutdown();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CEnginePerfTools::InstallPerformanceToolsUI( vgui::Panel *parent )
|
||
|
{
|
||
|
if ( g_pPerfUI )
|
||
|
return;
|
||
|
|
||
|
g_pPerfUI = new CPerfUIPanel( parent );
|
||
|
Assert( g_pPerfUI );
|
||
|
}
|
||
|
|
||
|
bool CEnginePerfTools::ShouldPause() const
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void ShowHidePerfUI()
|
||
|
{
|
||
|
if ( !g_pPerfUI )
|
||
|
return;
|
||
|
|
||
|
bool wasvisible = g_pPerfUI->IsVisible();
|
||
|
|
||
|
if ( wasvisible )
|
||
|
{
|
||
|
// hide
|
||
|
g_pPerfUI->Close();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
g_pPerfUI->Activate();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
static ConCommand perfui( "perfui", ShowHidePerfUI, "Show/hide the level performance tools UI.", FCVAR_CHEAT );
|