summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_obj_mcv_selection_panel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/tf_obj_mcv_selection_panel.cpp')
-rw-r--r--game/server/tf2/tf_obj_mcv_selection_panel.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/game/server/tf2/tf_obj_mcv_selection_panel.cpp b/game/server/tf2/tf_obj_mcv_selection_panel.cpp
new file mode 100644
index 0000000..c293132
--- /dev/null
+++ b/game/server/tf2/tf_obj_mcv_selection_panel.cpp
@@ -0,0 +1,138 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "tf_obj.h"
+#include "tf_shareddefs.h"
+#include "vguiscreen.h"
+#include "tf_vehicle_teleport_station.h"
+
+
+#define MCV_SELECTION_MODEL "models/objects/obj_resupply.mdl"
+#define MCV_SELECTION_SCREEN_NAME "screen_mcv_selection_panel"
+
+
+class CObjMCVSelectionPanel : public CBaseObject
+{
+public:
+
+ DECLARE_CLASS( CObjMCVSelectionPanel, CBaseObject );
+ DECLARE_SERVERCLASS();
+
+ CObjMCVSelectionPanel();
+ ~CObjMCVSelectionPanel();
+
+
+public:
+
+ virtual void Spawn();
+ virtual void Precache();
+ virtual void GetControlPanelInfo( int nPanelIndex, const char *&pPanelName );
+ virtual bool ClientCommand( CBaseTFPlayer *pPlayer, const char *pCmd, ICommandArguments *pArg );
+
+ virtual void SetTransmit( CCheckTransmitInfo *pInfo, bool bAlways );
+};
+
+
+// This holds all the allocated CObjMCVSelectionPanels.
+CUtlLinkedList<CObjMCVSelectionPanel*,int> g_MCVSelectionPanels;
+
+
+LINK_ENTITY_TO_CLASS( obj_mcv_selection_panel, CObjMCVSelectionPanel );
+
+
+int SendProxy_TeleportStationCount( const void *pStruct, int objectID )
+{
+ return CVehicleTeleportStation::GetNumDeployedTeleportStations();
+}
+
+
+void SendProxy_TeleportStationElement( const SendProp *pProp, const void *pStructBase, const void *pData, DVariant *pOut, int iElement, int objectID )
+{
+ // Get the EHANDLE.
+ EHANDLE hEnt;
+ hEnt = CVehicleTeleportStation::GetDeployedTeleportStation( iElement );
+
+ // Use the standard ehandle-encoding SendProxy to encode it.
+ SendProxy_EHandleToInt( pProp, pStructBase, &hEnt, pOut, iElement, objectID );
+}
+
+
+void SignalChangeInMCVSelectionPanels()
+{
+}
+
+
+IMPLEMENT_SERVERCLASS_ST( CObjMCVSelectionPanel, DT_MCVSelectionPanel )
+ SendPropVirtualArray(
+ SendProxy_TeleportStationCount,
+ 32, // max # elements we'd ever send
+ SendPropEHandle( "teleport_station_element", 0, 0, 0, SendProxy_TeleportStationElement ),
+ "teleport_stations" )
+END_SEND_TABLE()
+
+
+CObjMCVSelectionPanel::CObjMCVSelectionPanel()
+{
+ g_MCVSelectionPanels.AddToTail( this );
+}
+
+
+CObjMCVSelectionPanel::~CObjMCVSelectionPanel()
+{
+ g_MCVSelectionPanels.FindAndRemove( this );
+}
+
+
+void CObjMCVSelectionPanel::Spawn()
+{
+ SetModel( MCV_SELECTION_MODEL );
+ m_takedamage = DAMAGE_NO;
+ SetType( OBJ_MCV_SELECTION_PANEL );
+
+ BaseClass::Spawn();
+}
+
+
+void CObjMCVSelectionPanel::Precache()
+{
+ PrecacheModel( MCV_SELECTION_MODEL );
+ PrecacheVGuiScreen( MCV_SELECTION_SCREEN_NAME );
+
+ BaseClass::Precache();
+}
+
+
+void CObjMCVSelectionPanel::GetControlPanelInfo( int nPanelIndex, const char *&pPanelName )
+{
+ pPanelName = MCV_SELECTION_SCREEN_NAME;
+}
+
+
+bool CObjMCVSelectionPanel::ClientCommand( CBaseTFPlayer *pPlayer, const char *pCmd, ICommandArguments *pArg )
+{
+ if ( stricmp( pCmd, "SelectMCV" ) == 0 )
+ {
+ int mcvID = atoi( pArg->Argv( 1 ) );
+ pPlayer->SetSelectedMCV( dynamic_cast< CVehicleTeleportStation* >( CBaseEntity::Instance( mcvID ) ) );
+ }
+
+ return BaseClass::ClientCommand( pPlayer, pCmd, pArg );
+}
+
+
+void CObjMCVSelectionPanel::SetTransmit( CCheckTransmitInfo *pInfo, bool bAlways )
+{
+ BaseClass::SetTransmit( pInfo, bAlways );
+
+ // Force deployed MCVs to be sent to the client too so the client can draw their position on its vgui screen.
+ int count = CVehicleTeleportStation::GetNumDeployedTeleportStations();
+ for ( int i=0; i < count; i++ )
+ {
+ CVehicleTeleportStation::GetDeployedTeleportStation( i )->SetTransmit( pInfo, bAlways );
+ }
+}
+