diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf2/c_tf2rootpanel.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf2/c_tf2rootpanel.cpp')
| -rw-r--r-- | game/client/tf2/c_tf2rootpanel.cpp | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/game/client/tf2/c_tf2rootpanel.cpp b/game/client/tf2/c_tf2rootpanel.cpp new file mode 100644 index 0000000..7e01f6f --- /dev/null +++ b/game/client/tf2/c_tf2rootpanel.cpp @@ -0,0 +1,194 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "c_tf2rootpanel.h" +#include <vgui_controls/Controls.h> +#include <vgui/IVGui.h> +#include "paneleffect.h" +#include "itfhintitem.h" +#include "clientmode_commander.h" +#include "commanderoverlaypanel.h" + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *parent - +//----------------------------------------------------------------------------- +C_TF2RootPanel::C_TF2RootPanel( vgui::VPANEL parent ) + : BaseClass( NULL, "TF2 Root Panel" ) +{ + SetParent( parent ); + SetPaintEnabled( false ); + SetPaintBorderEnabled( false ); + SetPaintBackgroundEnabled( false ); + + // This panel does post child painting + SetPostChildPaintEnabled( true ); + + // Make it screen sized + SetBounds( 0, 0, ScreenWidth(), ScreenHeight() ); + + // Ask for OnTick messages + vgui::ivgui()->AddTickSignal( GetVPanel() ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_TF2RootPanel::~C_TF2RootPanel( void ) +{ + ClearAllEffects(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_TF2RootPanel::PostChildPaint() +{ + BaseClass::PostChildPaint(); + + // Draw all panel effects + RenderPanelEffects(); +} + +//----------------------------------------------------------------------------- +// Purpose: For each panel effect, check if it wants to draw and draw it on +// this panel/surface if so +//----------------------------------------------------------------------------- +void C_TF2RootPanel::RenderPanelEffects( void ) +{ + for ( int i = 0; i < m_Effects.Size(); i++ ) + { + CPanelEffect *e = m_Effects[ i ]; + Assert( e ); + ITFHintItem *owner = e->GetOwner(); + if ( owner && !owner->ShouldRenderPanelEffects() ) + continue; + if ( e->GetVisible() ) + { + e->doPaint( this ); + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: Add effect to list +// Input : *effect - +//----------------------------------------------------------------------------- +EFFECT_HANDLE C_TF2RootPanel::AddEffect( CPanelEffect *effect ) +{ + Assert( effect ); + + m_Effects.AddToTail( effect ); + + return effect->GetHandle(); +} + +//----------------------------------------------------------------------------- +// Purpose: Remove effect from list +// Input : *effect - +//----------------------------------------------------------------------------- +void C_TF2RootPanel::RemoveEffect( EFFECT_HANDLE handle ) +{ + for ( int i = m_Effects.Size() - 1; i >= 0; i-- ) + { + CPanelEffect *e = m_Effects[ i ]; + if ( e->GetHandle() == handle ) + { + m_Effects.Remove( i ); + delete e; + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: Find effect by handle +// Input : handle - +// Output : CPanelEffect +//----------------------------------------------------------------------------- +CPanelEffect *C_TF2RootPanel::FindEffect( EFFECT_HANDLE handle ) +{ + for ( int i = 0; i < m_Effects.Size(); i++ ) + { + CPanelEffect *e = m_Effects[ i ]; + if ( e->GetHandle() == handle ) + { + return e; + } + } + return NULL; +} + +//----------------------------------------------------------------------------- +// Purpose: Delete all effects +//----------------------------------------------------------------------------- +void C_TF2RootPanel::ClearAllEffects( void ) +{ + while ( m_Effects.Size() > 0 ) + { + CPanelEffect *e = m_Effects[ 0 ]; + m_Effects.Remove( 0 ); + delete e; + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_TF2RootPanel::OnTick( void ) +{ + // Go backards + for ( int i = m_Effects.Size() - 1; i >= 0; i-- ) + { + CPanelEffect *e = m_Effects[ i ]; + Assert( e ); + + // Allow panel to think + e->Think(); + + // See if panel should disappear + if ( e->ShouldRemove() ) + { + m_Effects.Remove( i ); + delete e; + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: Reset effects on level load/shutdown +//----------------------------------------------------------------------------- +void C_TF2RootPanel::LevelInit( void ) +{ + ClearAllEffects(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_TF2RootPanel::LevelShutdown( void ) +{ + ClearAllEffects(); +} + +//----------------------------------------------------------------------------- +// Purpose: Delete any panel effects owned by owner +// Input : *owner - +//----------------------------------------------------------------------------- +void C_TF2RootPanel::DestroyPanelEffects( ITFHintItem *owner ) +{ + for ( int i = m_Effects.Size() - 1; i >= 0; i-- ) + { + CPanelEffect *e = m_Effects[ i ]; + if ( e->GetOwner() == owner ) + { + m_Effects.Remove( i ); + delete e; + } + } +} + |