summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/ObjectControlPanel.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/vgui/ObjectControlPanel.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/vgui/ObjectControlPanel.cpp')
-rw-r--r--game/client/tf/vgui/ObjectControlPanel.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/game/client/tf/vgui/ObjectControlPanel.cpp b/game/client/tf/vgui/ObjectControlPanel.cpp
new file mode 100644
index 0000000..da24fd2
--- /dev/null
+++ b/game/client/tf/vgui/ObjectControlPanel.cpp
@@ -0,0 +1,183 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "ObjectControlPanel.h"
+#include <vgui_controls/Controls.h>
+#include <vgui_controls/Label.h>
+#include "vgui_bitmapbutton.h"
+#include <vgui/ISurface.h>
+#include <vgui/IVGui.h>
+#include "c_tf_player.h"
+#include "clientmode_tf.h"
+#include <vgui/IScheme.h>
+#include <vgui_controls/Slider.h>
+#include "vgui_rotation_slider.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+
+#define DISMANTLE_WAIT_TIME 5.0
+
+
+//-----------------------------------------------------------------------------
+// Standard VGUI panel for objects
+//-----------------------------------------------------------------------------
+DECLARE_VGUI_SCREEN_FACTORY( CObjectControlPanel, "object_control_panel" );
+
+
+//-----------------------------------------------------------------------------
+// Constructor:
+//-----------------------------------------------------------------------------
+CObjectControlPanel::CObjectControlPanel( vgui::Panel *parent, const char *panelName )
+ : BaseClass( parent, panelName, NULL )
+{
+ // Make some high-level panels to group stuff we want to activate/deactivate
+ m_pActivePanel = new CCommandChainingPanel( this, "ActivePanel" );
+
+ SetCursor( vgui::dc_none ); // don't draw a VGUI cursor for this panel, and for its children
+
+ // Make sure these are behind everything
+ m_pActivePanel->SetZPos( -1 );
+}
+
+
+//-----------------------------------------------------------------------------
+// Initialization
+//-----------------------------------------------------------------------------
+bool CObjectControlPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData )
+{
+ // Make sure we get ticked...
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+
+ if (!BaseClass::Init(pKeyValues, pInitData))
+ return false;
+
+ SetCursor( vgui::dc_none ); // don't draw a VGUI cursor for this panel, and for its children
+
+ // Make the bounds of the sub-panels match
+ int x, y, w, h;
+ GetBounds( x, y, w, h );
+ m_pActivePanel->SetBounds( x, y, w, h );
+
+ // Make em all invisible
+ m_pActivePanel->SetVisible( false );
+ m_pCurrentPanel = m_pActivePanel;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// Returns the object it's attached to
+//-----------------------------------------------------------------------------
+C_BaseObject *CObjectControlPanel::GetOwningObject() const
+{
+ C_BaseEntity *pScreenEnt = GetEntity();
+ if (!pScreenEnt)
+ return NULL;
+
+ C_BaseEntity *pObj = pScreenEnt->GetOwnerEntity();
+ if (!pObj)
+ return NULL;
+
+ Assert( dynamic_cast<C_BaseObject*>(pObj) );
+ return static_cast<C_BaseObject*>(pObj);
+}
+
+
+//-----------------------------------------------------------------------------
+// Ticks the panel when its in its various states
+//-----------------------------------------------------------------------------
+void CObjectControlPanel::OnTickActive( C_BaseObject *pObj, C_TFPlayer *pLocalPlayer )
+{
+ //ShowDismantleButton( !(pObj->GetFlags() & OF_CANNOT_BE_DISMANTLED) && pObj->GetOwner() == pLocalPlayer );
+}
+
+vgui::Panel* CObjectControlPanel::TickCurrentPanel()
+{
+ C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
+ C_BaseObject *pObj = GetOwningObject();
+
+ m_pCurrentPanel = GetActivePanel();
+ OnTickActive(pObj, pLocalPlayer);
+
+ return m_pCurrentPanel;
+}
+
+void CObjectControlPanel::SendToServerObject( const char *pMsg )
+{
+ C_BaseObject *pObj = GetOwningObject();
+ if (pObj)
+ {
+ pObj->SendClientCommand( pMsg );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Frame-based update
+//-----------------------------------------------------------------------------
+void CObjectControlPanel::OnTick()
+{
+ BaseClass::OnTick();
+
+ C_BaseObject *pObj = GetOwningObject();
+ if (!pObj)
+ return;
+
+ if ( IsVisible() )
+ {
+ // Update the current subpanel
+ m_pCurrentPanel->SetVisible( false );
+
+ m_pCurrentPanel = TickCurrentPanel();
+
+ m_pCurrentPanel->SetVisible( true );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Button click handlers
+//-----------------------------------------------------------------------------
+void CObjectControlPanel::OnCommand( const char *command )
+{
+ BaseClass::OnCommand(command);
+}
+
+DECLARE_VGUI_SCREEN_FACTORY( CRotatingObjectControlPanel, "rotating_object_control_panel" );
+
+
+//-----------------------------------------------------------------------------
+// This is a panel for an object that has rotational controls
+//-----------------------------------------------------------------------------
+CRotatingObjectControlPanel::CRotatingObjectControlPanel( vgui::Panel *parent, const char *panelName )
+ : BaseClass( parent, panelName )
+{
+}
+
+bool CRotatingObjectControlPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData )
+{
+ // Grab ahold of certain well-known controls
+ m_pRotationSlider = new CRotationSlider( GetActivePanel(), "RotationSlider" );
+ m_pRotationLabel = new vgui::Label( GetActivePanel(), "RotationLabel", "Rotation Control" );
+
+ if (!BaseClass::Init(pKeyValues, pInitData))
+ return false;
+
+ m_pRotationSlider->SetControlledObject( GetOwningObject() );
+
+ return true;
+}
+
+void CRotatingObjectControlPanel::OnTickActive( C_BaseObject *pObj, C_TFPlayer *pLocalPlayer )
+{
+ BaseClass::OnTickActive( pObj, pLocalPlayer );
+ bool bEnable = (pObj->GetOwner() == pLocalPlayer);
+ m_pRotationSlider->SetVisible( bEnable );
+ m_pRotationLabel->SetVisible( bEnable );
+}
+