diff options
Diffstat (limited to 'game/client/tf/player_vs_environment/c_tf_upgrades.h')
| -rw-r--r-- | game/client/tf/player_vs_environment/c_tf_upgrades.h | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/game/client/tf/player_vs_environment/c_tf_upgrades.h b/game/client/tf/player_vs_environment/c_tf_upgrades.h new file mode 100644 index 0000000..6adc07b --- /dev/null +++ b/game/client/tf/player_vs_environment/c_tf_upgrades.h @@ -0,0 +1,267 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Load item upgrade data from KeyValues +// +// $NoKeywords: $ +//============================================================================= + +#ifndef C_TF_UPGRADES_H +#define C_TF_UPGRADES_H + + +#include "c_baseentity.h" +#include "networkvar.h" +#include "econ_item_constants.h" +#include "tf_shareddefs.h" +#include "c_tf_player.h" +#include "hudelement.h" +#include "vgui_controls/EditablePanel.h" +#include "tf_controls.h" + +#define MAX_ITEM_SLOT_BUY_PANELS 6 + +class CItemModelPanel; +class CImageButton; + +namespace vgui +{ + class ImagePanel; + class Button; +} + +enum costlabel_chache_t +{ + CLCACHE_DIRTY, + CLCACHE_NOT_AFFORDABLE_1, + CLCACHE_NOT_AFFORDABLE_2, + CLCACHE_NOT_AFFORDABLE_3, + CLCACHE_NOT_AFFORDABLE_4, + CLCACHE_NOT_AFFORDABLE_5, + CLCACHE_NOT_AFFORDABLE_6, + CLCACHE_NOT_AFFORDABLE_7, + CLCACHE_NOT_AFFORDABLE_8, + CLCACHE_NOT_AFFORDABLE_9, + CLCACHE_AFFORDABLE, +}; + + +//----------------------------------------------------------------------------- +// Purpose: HUD Element that provides the interface to the upgrade options +//----------------------------------------------------------------------------- +class CUpgradeBuyPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CUpgradeBuyPanel, vgui::EditablePanel ); + +public: + + enum ColorSet + { + COLOR_SET_DEFAULT, + COLOR_SET_OWNED, + COLOR_SET_PURCHASED, + COLOR_SET_DISABLED, + }; + +public: + CUpgradeBuyPanel( Panel *parent, const char *panelName ); + virtual ~CUpgradeBuyPanel(); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void ApplySettings( KeyValues *inResourceData ); + virtual void PerformLayout( void ); + virtual void OnCommand( const char *command ); + + bool ValidateUpgradeStepData( void ); + + void SetNumLevelImages( int nValues ); + void SetSkillTreeButtonColors( int nButton, ColorSet nColorSet ); + void SetInspectMode( bool bValue ) { m_bInspectMode = bValue; } + void SetPlayer( C_TFPlayer *pPlayer ) { m_hPlayer = pPlayer; } + + void UpdateImages( int nCurrentMoney ); + +public: + + KeyValues *m_pSkillTreeButtonKVs; + + vgui::ImagePanel *m_pIcon; + vgui::Label *m_pPriceLabel; + vgui::Label *m_pShortDescriptionLabel; + CImageButton *m_pIncrementButton; + CImageButton *m_pDecrementButton; + CUtlVector< vgui::ImagePanel* > m_SkillTreeImages; + + int m_nWeaponSlot; + int m_nUpgradeIndex; + int m_nPrice; + + int m_nGridPositionX; + int m_nGridPositionY; + + int m_nCurrentStep; + int m_nPurchases; + + bool m_bOverCap; + char m_szAttribName[MAX_ATTRIBUTE_DESCRIPTION_LENGTH]; + + bool m_bInspectMode; + + CPanelAnimationVarAliasType( int, m_iUpgradeButtonXPos, "upgradebutton_xpos", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iUpgradeButtonYPos, "upgradebutton_ypos", "0", "proportional_int" ); + + static Color m_rgbaDefaultFG; + static Color m_rgbaDefaultBG; + static Color m_rgbaArmedFG; + static Color m_rgbaArmedBG; + static Color m_rgbaDepressedFG; + static Color m_rgbaDepressedBG; + static Color m_rgbaSelectedFG; + static Color m_rgbaSelectedBG; + static Color m_rgbaDisabledFG; + static Color m_rgbaDisabledBG; + +private: + CHandle< C_TFPlayer > m_hPlayer; +}; + + +struct ItemSlotBuyPanels +{ + static const int CHARACTER_UPGRADE = -1; + static const int INVALID_SLOT = -2; + + typedef CUpgradeBuyPanel *UPGRADEPTR; + class CUpgradeBuyPanelLess + { + public: + bool Less( const UPGRADEPTR &src1, const UPGRADEPTR &src2, void *pCtx ) + { + if ( src1->m_nPrice > src2->m_nPrice ) + return true; + + if ( src1->m_nPrice == src2->m_nPrice && src1->m_nUpgradeIndex < src2->m_nUpgradeIndex ) + return true; + + return false; + } + }; + + ItemSlotBuyPanels() + { + nSlot = INVALID_SLOT; + m_iItemID = INVALID_ITEM_ID; + } + + void SetItemID( int iIndex ) { m_iItemID = iIndex; } + itemid_t GetItemID( void ) { return m_iItemID; } + + int nSlot; + CUtlSortVector< CUpgradeBuyPanel*, CUpgradeBuyPanelLess > upgradeBuyPanels; + itemid_t m_iItemID; +}; + + +//----------------------------------------------------------------------------- +// Purpose: HUD Element that provides the interface to the upgrade options +//----------------------------------------------------------------------------- +class CHudUpgradePanel : public CHudElement, public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CHudUpgradePanel, vgui::EditablePanel ); + +public: + CHudUpgradePanel( const char *pElementName ); + virtual ~CHudUpgradePanel(); + + virtual void ApplySchemeSettings( vgui::IScheme *scheme ); + virtual void ApplySettings( KeyValues *inResourceData ); + virtual void PerformLayout( void ); + virtual bool ShouldDraw( void ); + virtual void SetVisible( bool bVisible ); + virtual void SetActive( bool bActive ); + virtual int GetRenderGroupPriority( void ) { return 35; } // less than statpanel + virtual void OnCommand( const char *command ); + virtual void OnTick( void ); + virtual void FireGameEvent( IGameEvent *event ); + void InspectUpgradesForPlayer( C_TFPlayer *pPlayer ) { m_hPlayer = pPlayer; m_bInspectMode = true; m_bShowUpgradeMenu = true; } + C_TFPlayer *GetPlayer( void ) { return m_hPlayer; } + void PlayerInventoryChanged( C_TFPlayer *pPlayer ); + + MESSAGE_FUNC_PTR( OnItemPanelEntered, "ItemPanelEntered", panel ); + MESSAGE_FUNC_PTR( OnItemPanelExited, "ItemPanelExited", panel ); + MESSAGE_FUNC_PTR( OnItemPanelMousePressed, "ItemPanelMousePressed", panel ); + + virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_MENUCONTROLS; } + +protected: + void CreateItemModelPanel( int iLoadoutSlot ); + void UpdateModelPanels( void ); + virtual void SetBorderForItem( CItemModelPanel *pItemPanel, bool bMouseOver ); + void UpgradeItemInSlot( int iSlot ); + void UpdateUpgradeButtons( void ); + void UpdateButtonStates( int nCurrentCurrency, int nUpgrade = 0, int nNumPurchased = 0 ); + void UpdateJoystickControls( void ); + void UpdateHighlights( void ); + void UpdateMouseOverHighlight( void ); + + void UpdateItemStatsLabel( void ); + void CancelUpgrades( void ); + void AddItemStatText( const locchar_t *loc_AttrDescText, attrib_colors_t eColor, wchar_t *out_wszAttribDesc, int iAttribDescSize ); + CEconItemView* GetLocalPlayerBottleFromInventory( void ); + bool QuickEquipBottle( void ); + +protected: + vgui::EditablePanel *m_pTipPanel; + vgui::EditablePanel *m_pSelectWeaponPanel; + CExLabel *m_pUpgradeItemStatsLabel; + + vgui::Panel *m_pPlayerUpgradeButton; + vgui::Panel *m_pActiveTabPanel; + vgui::Panel *m_pMouseOverTabPanel; + vgui::Panel *m_pMouseOverUpgradePanel; + CUpgradeBuyPanel *m_pActiveUpgradeBuyPanel; + vgui::Panel *m_pPlayerRespecButton; + + CUtlVector< CItemModelPanel* > m_pItemPanels; + KeyValues *m_pItemModelPanelKVs; + int m_iVisibleItemPanels; + + int m_iWeaponSlotBeingUpgraded; + bool m_bShowUpgradeMenu; + bool m_bCancelUpgrades; + bool m_bOpenLoadout; + bool m_bWasInZone; + bool m_bHighlightedTab; + bool m_bInspectMode; + + int m_nCurrency; + int m_nUpgradeActivity; + + bool m_bAwardMaxSlotAchievement; + bool m_bAwardMaxResistAchievement; + + ItemSlotBuyPanels m_ItemSlotBuyPanels[ MAX_ITEM_SLOT_BUY_PANELS ]; + + CPanelAnimationVarAliasType( int, m_iItemPanelXPos, "itempanel_xpos", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iItemPanelYPos, "itempanel_ypos", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iItemPanelXDelta, "itempanel_xdelta", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iItemPanelYDelta, "itempanel_ydelta", "0", "proportional_int" ); + + CPanelAnimationVarAliasType( int, m_iUpgradeBuyPanelXPos, "upgradebuypanel_xpos", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iUpgradeBuyPanelYPos, "upgradebuypanel_ypos", "0", "proportional_int" ); + CPanelAnimationVarAliasType( int, m_iUpgradeBuyPanelDelta, "upgradebuypanel_delta", "0", "proportional_int" ); + + bool m_bNavUpDownPressed; + bool m_bNavLeftRightPressed; + bool m_bNavButtonPressed; + bool m_bUsingController; + +private: + void UpdateTip(); + CHandle< C_TFPlayer > m_hPlayer; +}; + + +extern bool MannVsMachine_GetUpgradeInfo( int iAttribute, int iQuality, float &flValue ); + + +#endif // C_TF_UPGRADES_H |