You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.4 KiB
138 lines
3.4 KiB
//========= 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 ); |
|
} |
|
} |
|
|
|
|