summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/vgui_pda_panel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/vgui/vgui_pda_panel.cpp')
-rw-r--r--game/client/tf/vgui/vgui_pda_panel.cpp336
1 files changed, 336 insertions, 0 deletions
diff --git a/game/client/tf/vgui/vgui_pda_panel.cpp b/game/client/tf/vgui/vgui_pda_panel.cpp
new file mode 100644
index 0000000..28ae408
--- /dev/null
+++ b/game/client/tf/vgui/vgui_pda_panel.cpp
@@ -0,0 +1,336 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+#include "cbase.h"
+#include "c_vguiscreen.h"
+#include <vgui/IVGui.h>
+#include "ienginevgui.h"
+#include "vgui_bitmapimage.h"
+#include "vgui_bitmappanel.h"
+#include "vgui_controls/Label.h"
+#include "tf_weapon_pda.h"
+#include "vgui/ISurface.h"
+#include "tf_controls.h"
+#include "c_tf_player.h"
+#include "tf_weapon_invis.h"
+#include <vgui_controls/RadioButton.h>
+#include "clientmode.h"
+#include <vgui_controls/ProgressBar.h>
+#include <vgui_controls/CircularProgressBar.h>
+
+using namespace vgui;
+
+//-----------------------------------------------------------------------------
+// Control screen
+//-----------------------------------------------------------------------------
+class CPDAPanel : public CVGuiScreenPanel
+{
+ DECLARE_CLASS( CPDAPanel, CVGuiScreenPanel );
+
+public:
+ CPDAPanel( vgui::Panel *parent, const char *panelName );
+ ~CPDAPanel();
+ virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData );
+ virtual void OnTick();
+
+protected:
+ C_BaseCombatWeapon *GetOwningWeapon();
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel, "pda_panel" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel::CPDAPanel( vgui::Panel *parent, const char *panelName )
+: BaseClass( parent, "CPDAPanel", vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/PDAControlPanelScheme.res", "TFBase" ) )
+{
+}
+
+CPDAPanel::~CPDAPanel()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Initialization
+//-----------------------------------------------------------------------------
+bool CPDAPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData )
+{
+ // Make sure we get ticked...
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+
+ if (!BaseClass::Init(pKeyValues, pInitData))
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+// Returns the object it's attached to
+//-----------------------------------------------------------------------------
+C_BaseCombatWeapon *CPDAPanel::GetOwningWeapon()
+{
+ C_BaseEntity *pScreenEnt = GetEntity();
+ if (!pScreenEnt)
+ return NULL;
+
+ C_BaseEntity *pOwner = pScreenEnt->GetOwnerEntity();
+ if (!pOwner)
+ return NULL;
+
+ C_BaseViewModel *pViewModel = dynamic_cast< C_BaseViewModel * >( pOwner );
+ if ( !pViewModel )
+ return NULL;
+
+ return pViewModel->GetOwningWeapon();
+}
+
+//-----------------------------------------------------------------------------
+// Frame-based update
+//-----------------------------------------------------------------------------
+void CPDAPanel::OnTick()
+{
+ BaseClass::OnTick();
+
+ SetVisible( true );
+}
+
+//-----------------------------------------------------------------------------
+// Engineer Destroy PDA
+//-----------------------------------------------------------------------------
+
+class CPDAPanel_Engineer_Destroy : public CPDAPanel
+{
+ DECLARE_CLASS( CPDAPanel_Engineer_Destroy, CPDAPanel );
+
+public:
+ CPDAPanel_Engineer_Destroy( vgui::Panel *parent, const char *panelName );
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Engineer_Destroy, "pda_panel_engineer_destroy" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Engineer_Destroy::CPDAPanel_Engineer_Destroy( vgui::Panel *parent, const char *panelName )
+: CPDAPanel( parent, "CPDAPanel_Engineer_Destroy" )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Engineer Build PDA
+//-----------------------------------------------------------------------------
+
+class CPDAPanel_Engineer_Build : public CPDAPanel
+{
+ DECLARE_CLASS( CPDAPanel_Engineer_Build, CPDAPanel );
+
+public:
+ CPDAPanel_Engineer_Build( vgui::Panel *parent, const char *panelName );
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Engineer_Build, "pda_panel_engineer_build" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Engineer_Build::CPDAPanel_Engineer_Build( vgui::Panel *parent, const char *panelName )
+: CPDAPanel( parent, "CPDAPanel_Engineer" )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Spy PDA
+//-----------------------------------------------------------------------------
+
+class CPDAPanel_Spy : public CPDAPanel
+{
+ DECLARE_CLASS( CPDAPanel_Spy, CPDAPanel );
+
+public:
+ CPDAPanel_Spy( vgui::Panel *parent, const char *panelName );
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Spy, "pda_panel_spy" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Spy::CPDAPanel_Spy( vgui::Panel *parent, const char *panelName )
+: CPDAPanel( parent, "CPDAPanel_Spy" )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Spy Invis PDA
+//-----------------------------------------------------------------------------
+
+class CPDAPanel_Spy_Invis : public CPDAPanel
+{
+ DECLARE_CLASS( CPDAPanel_Spy_Invis, CPDAPanel );
+
+public:
+ CPDAPanel_Spy_Invis( vgui::Panel *parent, const char *panelName );
+
+ virtual void OnTick();
+
+private:
+
+ ProgressBar *m_pInvisProgress;
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Spy_Invis, "pda_panel_spy_invis" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Spy_Invis::CPDAPanel_Spy_Invis( vgui::Panel *parent, const char *panelName )
+: CPDAPanel( parent, "CPDAPanel_Spy_Invis" )
+{
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+
+ m_pInvisProgress = new ProgressBar( this, "InvisProgress" );
+}
+
+//-----------------------------------------------------------------------------
+// Update the progress bar with how much invis we have left
+//-----------------------------------------------------------------------------
+void CPDAPanel_Spy_Invis::OnTick( void )
+{
+ C_BaseCombatWeapon *pInvisWeapon = GetOwningWeapon();
+
+ if ( !pInvisWeapon )
+ return;
+
+ C_TFPlayer *pPlayer = ToTFPlayer( pInvisWeapon->GetOwner() );
+
+ if ( pPlayer && !pPlayer->IsDormant() )
+ {
+ if ( m_pInvisProgress )
+ {
+ float flMeter = pPlayer->m_Shared.GetSpyCloakMeter();
+ m_pInvisProgress->SetProgress( flMeter / 100.0f );
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Spy Invis PDA panel for the pocketwatch
+//-----------------------------------------------------------------------------
+class CPDAPanel_Spy_Invis_Pocket : public CPDAPanel
+{
+ DECLARE_CLASS( CPDAPanel_Spy_Invis_Pocket, CPDAPanel );
+
+public:
+ CPDAPanel_Spy_Invis_Pocket( vgui::Panel *parent, const char *panelName );
+
+ virtual void OnTick();
+
+protected:
+ ProgressBar *m_pInvisProgress;
+ float m_flPrevProgress;
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Spy_Invis_Pocket, "pda_panel_spy_invis_pocket" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Spy_Invis_Pocket::CPDAPanel_Spy_Invis_Pocket( vgui::Panel *parent, const char *panelName )
+ : CPDAPanel( parent, "CPDAPanel_Spy_Invis_Pocket" )
+{
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+
+ CircularProgressBar* pCircularProgressBar = new CircularProgressBar( this, "InvisProgress" );
+ pCircularProgressBar->SetReverseProgress( true );
+ m_pInvisProgress = pCircularProgressBar;
+ m_flPrevProgress = -1;
+}
+
+//-----------------------------------------------------------------------------
+// Update the progress bar with how much invis we have left
+//-----------------------------------------------------------------------------
+void CPDAPanel_Spy_Invis_Pocket::OnTick( void )
+{
+ C_BaseCombatWeapon *pInvisWeapon = GetOwningWeapon();
+
+ if ( !pInvisWeapon )
+ return;
+
+ C_TFPlayer *pPlayer = ToTFPlayer( pInvisWeapon->GetOwner() );
+
+ if ( pPlayer && !pPlayer->IsDormant() )
+ {
+ if ( m_pInvisProgress )
+ {
+ float flMeter = pPlayer->m_Shared.GetSpyCloakMeter();
+ if ( m_flPrevProgress != flMeter )
+ {
+ m_flPrevProgress = flMeter;
+
+ if ( flMeter == 100.f )
+ {
+ m_pInvisProgress->SetFgColor( COLOR_GREEN );
+ }
+ else if ( flMeter < 40.f )
+ {
+ m_pInvisProgress->SetFgColor( COLOR_RED );
+ }
+ else
+ {
+ m_pInvisProgress->SetFgColor( COLOR_YELLOW );
+ }
+
+ m_pInvisProgress->SetProgress( flMeter / 100.0f );
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Spy Invis PDA panel for the TTG pocketwatch
+//-----------------------------------------------------------------------------
+class CPDAPanel_Spy_Invis_Pocket_TTG : public CPDAPanel_Spy_Invis_Pocket
+{
+ DECLARE_CLASS( CPDAPanel_Spy_Invis_Pocket_TTG, CPDAPanel_Spy_Invis_Pocket );
+
+public:
+ CPDAPanel_Spy_Invis_Pocket_TTG( vgui::Panel *parent, const char *panelName );
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Spy_Invis_Pocket_TTG, "pda_panel_spy_invis_pocket_ttg" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Spy_Invis_Pocket_TTG::CPDAPanel_Spy_Invis_Pocket_TTG( vgui::Panel *parent, const char *panelName )
+: CPDAPanel_Spy_Invis_Pocket( parent, "CPDAPanel_Spy_Invis_Pocket_TTG" )
+{
+ dynamic_cast<CircularProgressBar*>(m_pInvisProgress)->SetStartSegment( 7 ); // Do the pellet first.
+}
+
+//-----------------------------------------------------------------------------
+// Spy Invis PDA panel for the Hitman pocketwatch
+//-----------------------------------------------------------------------------
+
+class CPDAPanel_Spy_Invis_Pocket_HM : public CPDAPanel_Spy_Invis_Pocket
+{
+ DECLARE_CLASS( CPDAPanel_Spy_Invis_Pocket_HM, CPDAPanel_Spy_Invis_Pocket );
+
+public:
+ CPDAPanel_Spy_Invis_Pocket_HM( vgui::Panel *parent, const char *panelName );
+};
+
+DECLARE_VGUI_SCREEN_FACTORY( CPDAPanel_Spy_Invis_Pocket_HM, "pda_panel_spy_invis_pocket_hm" );
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CPDAPanel_Spy_Invis_Pocket_HM::CPDAPanel_Spy_Invis_Pocket_HM( vgui::Panel *parent, const char *panelName )
+ : CPDAPanel_Spy_Invis_Pocket( parent, "CPDAPanel_Spy_Invis_Pocket_HM" )
+{
+}