diff options
Diffstat (limited to 'game/client/tf2/c_obj_resupply.cpp')
| -rw-r--r-- | game/client/tf2/c_obj_resupply.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/game/client/tf2/c_obj_resupply.cpp b/game/client/tf2/c_obj_resupply.cpp new file mode 100644 index 0000000..c0134dd --- /dev/null +++ b/game/client/tf2/c_obj_resupply.cpp @@ -0,0 +1,151 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Client's CObjectSentrygun +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "c_baseobject.h" +#include "c_basetfplayer.h" +#include "ObjectControlPanel.h" +#include "vgui_bitmapbutton.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + + +//----------------------------------------------------------------------------- +// Purpose: Resupply Station object +//----------------------------------------------------------------------------- +class C_ObjectResupply : public C_BaseObject +{ + DECLARE_CLASS( C_ObjectResupply, C_BaseObject ); +public: + DECLARE_CLIENTCLASS(); + + C_ObjectResupply(); + +private: + C_ObjectResupply( const C_ObjectResupply & ); // not defined, not accessible +}; + + +IMPLEMENT_CLIENTCLASS_DT(C_ObjectResupply, DT_ObjectResupply, CObjectResupply) +END_RECV_TABLE() + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_ObjectResupply::C_ObjectResupply() +{ +} + + +//----------------------------------------------------------------------------- +// Control screen +//----------------------------------------------------------------------------- +class CResupplyControlPanel : public CObjectControlPanel +{ + DECLARE_CLASS( CResupplyControlPanel, CObjectControlPanel ); + +public: + CResupplyControlPanel( vgui::Panel *parent, const char *panelName ); + virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ); + virtual void OnCommand( const char *command ); + +protected: + virtual void OnTickActive( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer ); + +private: + void Buy( ResupplyBuyType_t type ); + + vgui::Button *m_pBuyAmmoButton; + vgui::Button *m_pBuyGrenadesButton; + vgui::Button *m_pBuyHealthButton; + vgui::Button *m_pBuyAllButton; +}; + + +DECLARE_VGUI_SCREEN_FACTORY( CResupplyControlPanel, "resupply_control_panel" ); + + +//----------------------------------------------------------------------------- +// Constructor: +//----------------------------------------------------------------------------- +CResupplyControlPanel::CResupplyControlPanel( vgui::Panel *parent, const char *panelName ) + : BaseClass( parent, "CResupplyControlPanel" ) +{ +} + + +//----------------------------------------------------------------------------- +// Initialization +//----------------------------------------------------------------------------- +bool CResupplyControlPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ) +{ + // Grab ahold of certain well-known controls + m_pBuyAmmoButton = new CBitmapButton( GetActivePanel(), "BuyAmmoButton", "" ); + m_pBuyGrenadesButton = new CBitmapButton( GetActivePanel(), "BuyGrenadesButton", "" ); + m_pBuyHealthButton = new CBitmapButton( GetActivePanel(), "BuyHealthButton", "" ); + m_pBuyAllButton = new CBitmapButton( GetActivePanel(), "BuyAllButton", "" ); + + return BaseClass::Init( pKeyValues, pInitData ); +} + + +//----------------------------------------------------------------------------- +// Deactivates buttons we can't afford +//----------------------------------------------------------------------------- +void CResupplyControlPanel::OnTickActive( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer ) +{ + BaseClass::OnTickActive( pObj, pLocalPlayer ); + + int nBankResources = pLocalPlayer ? pLocalPlayer->GetBankResources() : 0; + m_pBuyAmmoButton->SetEnabled( nBankResources >= RESUPPLY_AMMO_COST ); + m_pBuyGrenadesButton->SetEnabled( nBankResources >= RESUPPLY_GRENADES_COST ); + m_pBuyHealthButton->SetEnabled( nBankResources >= RESUPPLY_HEALTH_COST ); + m_pBuyAllButton->SetEnabled( nBankResources >= RESUPPLY_ALL_COST ); +} + + +//----------------------------------------------------------------------------- +// Buys stuff +//----------------------------------------------------------------------------- +void CResupplyControlPanel::Buy( ResupplyBuyType_t type ) +{ + C_BaseObject *pObj = GetOwningObject(); + if (pObj) + { + char szbuf[48]; + Q_snprintf( szbuf, sizeof( szbuf ), "buy %d", type ); + pObj->SendClientCommand( szbuf ); + } +} + + +//----------------------------------------------------------------------------- +// Button click handlers +//----------------------------------------------------------------------------- +void CResupplyControlPanel::OnCommand( const char *command ) +{ + if (!Q_strnicmp(command, "BuyAmmo", 8)) + { + Buy(RESUPPLY_BUY_AMMO); + } + else if (!Q_strnicmp(command, "BuyHealth", 10)) + { + Buy(RESUPPLY_BUY_HEALTH); + } + else if (!Q_strnicmp(command, "BuyGrenades", 12)) + { + Buy(RESUPPLY_BUY_GRENADES); + } + else if (!Q_strnicmp(command, "BuyAll", 7)) + { + Buy(RESUPPLY_BUY_ALL); + } + else + { + BaseClass::OnCommand(command); + } +} |