189 lines
4.8 KiB
C++
189 lines
4.8 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $Workfile: $
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include "idebugoverlaypanel.h"
|
||
|
#include "overlaytext.h"
|
||
|
#include <vgui/IVGui.h>
|
||
|
#include "engine/ivdebugoverlay.h"
|
||
|
#include "VGuiMatSurface/IMatSystemSurface.h"
|
||
|
#include <vgui_controls/Panel.h>
|
||
|
#include <vgui_controls/Controls.h>
|
||
|
#include <vgui/IScheme.h>
|
||
|
#include "ienginevgui.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
class CDebugOverlay : public vgui::Panel
|
||
|
{
|
||
|
typedef vgui::Panel BaseClass;
|
||
|
|
||
|
public:
|
||
|
CDebugOverlay( vgui::VPANEL parent );
|
||
|
virtual ~CDebugOverlay( void );
|
||
|
|
||
|
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
|
||
|
virtual void Paint();
|
||
|
virtual void OnTick( void );
|
||
|
|
||
|
virtual bool ShouldDraw( void );
|
||
|
|
||
|
private:
|
||
|
vgui::HFont m_hFont;
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Instances the overlay object
|
||
|
// Input : *parent -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CDebugOverlay::CDebugOverlay( vgui::VPANEL parent ) :
|
||
|
BaseClass( NULL, "CDebugOverlay" )
|
||
|
{
|
||
|
int w, h;
|
||
|
vgui::surface()->GetScreenSize( w, h );
|
||
|
SetParent( parent );
|
||
|
SetSize( w, h );
|
||
|
SetPos( 0, 0 );
|
||
|
SetVisible( false );
|
||
|
SetCursor( null );
|
||
|
|
||
|
m_hFont = 0;
|
||
|
SetFgColor( Color( 0, 0, 0, 0 ) );
|
||
|
SetPaintBackgroundEnabled( false );
|
||
|
|
||
|
// set the scheme before any child control is created
|
||
|
vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL_TOOLS ), "resource/ClientScheme.res", "Client");
|
||
|
SetScheme( scheme );
|
||
|
|
||
|
vgui::ivgui()->AddTickSignal( GetVPanel(), 250 );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CDebugOverlay::~CDebugOverlay( void )
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDebugOverlay::ApplySchemeSettings(vgui::IScheme *pScheme)
|
||
|
{
|
||
|
BaseClass::ApplySchemeSettings(pScheme);
|
||
|
|
||
|
// Use a large font
|
||
|
// m_hFont = pScheme->GetFont( "Default" );
|
||
|
m_hFont = pScheme->GetFont( "DebugOverlay" );
|
||
|
assert( m_hFont );
|
||
|
|
||
|
int w, h;
|
||
|
vgui::surface()->GetScreenSize( w, h );
|
||
|
SetSize( w, h );
|
||
|
SetPos( 0, 0 );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDebugOverlay::OnTick( void )
|
||
|
{
|
||
|
bool bVisible = ShouldDraw();
|
||
|
if ( IsVisible() != bVisible )
|
||
|
{
|
||
|
SetVisible( bVisible );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool CDebugOverlay::ShouldDraw( void )
|
||
|
{
|
||
|
if ( debugoverlay && debugoverlay->GetFirst() )
|
||
|
return true;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Paints the 2D overlay items to the screen
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDebugOverlay::Paint()
|
||
|
{
|
||
|
if (!debugoverlay)
|
||
|
return;
|
||
|
|
||
|
OverlayText_t* pCurrText = debugoverlay->GetFirst();
|
||
|
while (pCurrText)
|
||
|
{
|
||
|
if ( pCurrText->text != NULL )
|
||
|
{
|
||
|
// --------------
|
||
|
// Draw the text
|
||
|
// --------------
|
||
|
int r = pCurrText->r;
|
||
|
int g = pCurrText->g;
|
||
|
int b = pCurrText->b;
|
||
|
int a = pCurrText->a;
|
||
|
Vector screenPos;
|
||
|
|
||
|
if (pCurrText->bUseOrigin)
|
||
|
{
|
||
|
if (!debugoverlay->ScreenPosition( pCurrText->origin, screenPos ))
|
||
|
{
|
||
|
float xPos = screenPos[0];
|
||
|
float yPos = screenPos[1]+ (pCurrText->lineOffset*13); // Line spacing;
|
||
|
g_pMatSystemSurface->DrawColoredText( m_hFont, xPos, yPos, r, g, b, a, "%s", pCurrText->text );
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!debugoverlay->ScreenPosition( pCurrText->flXPos,pCurrText->flYPos, screenPos ))
|
||
|
{
|
||
|
float xPos = screenPos[0];
|
||
|
float yPos = screenPos[1]+ (pCurrText->lineOffset*13); // Line spacing;
|
||
|
g_pMatSystemSurface->DrawColoredText( m_hFont, xPos, yPos, r, g, b, a, "%s", pCurrText->text );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
pCurrText = debugoverlay->GetNext( pCurrText );
|
||
|
}
|
||
|
|
||
|
debugoverlay->ClearDeadOverlays();
|
||
|
}
|
||
|
|
||
|
class CDebugOverlayPanel : public IDebugOverlayPanel
|
||
|
{
|
||
|
private:
|
||
|
CDebugOverlay *debugOverlayPanel;
|
||
|
public:
|
||
|
CDebugOverlayPanel( void )
|
||
|
{
|
||
|
debugOverlayPanel = NULL;
|
||
|
}
|
||
|
void Create( vgui::VPANEL parent )
|
||
|
{
|
||
|
debugOverlayPanel = new CDebugOverlay( parent );
|
||
|
}
|
||
|
void Destroy( void )
|
||
|
{
|
||
|
if ( debugOverlayPanel )
|
||
|
{
|
||
|
debugOverlayPanel->SetParent( (vgui::Panel *)NULL );
|
||
|
debugOverlayPanel->MarkForDeletion();
|
||
|
debugOverlayPanel = NULL;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
static CDebugOverlayPanel g_DebugOverlay;
|
||
|
IDebugOverlayPanel *debugoverlaypanel = ( IDebugOverlayPanel * )&g_DebugOverlay;
|
||
|
|
||
|
|
||
|
void DebugDrawLine( const Vector& vecAbsStart, const Vector& vecAbsEnd, int r, int g, int b, bool test, float duration )
|
||
|
{
|
||
|
if ( debugoverlay )
|
||
|
{
|
||
|
debugoverlay->AddLineOverlay( vecAbsStart + Vector( 0,0,0.1), vecAbsEnd + Vector( 0,0,0.1), r,g,b, test, duration );
|
||
|
}
|
||
|
}
|