//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef CHARINFO_LOADOUT_SUBPANEL_H #define CHARINFO_LOADOUT_SUBPANEL_H #ifdef _WIN32 #pragma once #endif #include #include "vgui_controls/PropertyPage.h" #include #include "tf_controls.h" #include "tf_shareddefs.h" #include "item_pickup_panel.h" #include "backpack_panel.h" #include "class_loadout_panel.h" #include "crafting_panel.h" #include "charinfo_armory_subpanel.h" #define NUM_CLASSES_IN_LOADOUT_PANEL (TF_LAST_NORMAL_CLASS-1) // We don't allow unlockables for the civilian class CImageButton : public vgui::Button { private: DECLARE_CLASS_SIMPLE( CImageButton, vgui::Button ); public: CImageButton( vgui::Panel *parent, const char *panelName ); virtual void ApplySettings( KeyValues *inResourceData ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void OnSizeChanged( int newWide, int newTall ); void SetActiveImage( const char *imagename ); void SetInactiveImage( const char *imagename ); void SetActiveImage( vgui::IImage *image ); void SetInactiveImage( vgui::IImage *image ); public: virtual void Paint(); private: vgui::IImage *m_pActiveImage; char *m_pszActiveImageName; vgui::IImage *m_pInactiveImage; char *m_pszInactiveImageName; bool m_bScaleImage; Color m_ActiveDrawColor; Color m_InactiveDrawColor; }; enum charinfo_activepanels_t { CHAP_LOADOUT, CHAP_BACKPACK, CHAP_CRAFTING, CHAP_ARMORY, }; enum charinfosubbuttons_t { CHSB_BACKPACK, CHSB_CRAFTING, CHSB_ARMORY, CHSB_TRADING, CHSB_NUM_BUTTONS }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CCharInfoLoadoutSubPanel : public vgui::PropertyPage { DECLARE_CLASS_SIMPLE( CCharInfoLoadoutSubPanel, vgui::PropertyPage ); public: CCharInfoLoadoutSubPanel(Panel *parent); virtual ~CCharInfoLoadoutSubPanel(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void OnCommand( const char *command ); virtual void PerformLayout( void ); virtual void OnCursorMoved( int x, int y ); void SetClassIndex( int iClassIndex, bool bOpenClassLoadout ); void SetTeamIndex( int iTeamIndex ); void OpenToBackpack( void ) { OpenSubPanel( CHAP_BACKPACK ); } void OpenToCrafting( void ) { OpenSubPanel( CHAP_CRAFTING ); } void OpenToArmory( int iItemDef = 0 ) { m_iArmoryItemDef = iItemDef; OpenSubPanel( CHAP_ARMORY ); } void OpenSubPanel( charinfo_activepanels_t iPanel ); void UpdateModelPanels( bool bOpenClassLoadout = true ); CClassLoadoutPanel *GetClassLoadoutPanel( void ) { return m_pClassLoadoutPanel; } CBackpackPanel *GetBackpackPanel( void ) { return m_pBackpackPanel; } CCraftingPanel *GetCraftingPanel( void ) { return m_pCraftingPanel; } CArmoryPanel *GetArmoryPanel( void ) { return m_pArmoryPanel; } void UpdateLabelFromClass( int nClass ); void UpdateLabelFromSubButton( int nButton ); virtual void OnTick( void ); void RecalculateTargetClassLayout( void ); void RecalculateTargetClassLayoutAtPos( int x, int y ); void MoveCharacterSelection( int nDirection ); void OnKeyCodeTyped( vgui::KeyCode code ); void OnKeyCodePressed( vgui::KeyCode code ); bool ShouldShowExplanations( void ) { return (m_iShowingPanel == CHAP_LOADOUT && m_iCurrentClassIndex == TF_CLASS_UNDEFINED); } charinfo_activepanels_t GetShowingPanel() const { return m_iShowingPanel; } int GetCurrentClassIndex() const { return m_iCurrentClassIndex; } MESSAGE_FUNC( OnPageShow, "PageShow" ); MESSAGE_FUNC( OnSelectionStarted, "SelectionStarted" ); MESSAGE_FUNC( OnSelectionEnded, "SelectionEnded" ); MESSAGE_FUNC( OnCancelSelection, "CancelSelection" ); MESSAGE_FUNC( OnOpenCrafting, "OpenCrafting" ); MESSAGE_FUNC( OnCraftingClosed, "CraftingClosed" ); MESSAGE_FUNC( OnArmoryClosed, "ArmoryClosed" ); MESSAGE_FUNC( OnCharInfoClosing, "CharInfoClosing" ); private: void RequestInventoryRefresh(); CImageButton *m_pClassButtons[NUM_CLASSES_IN_LOADOUT_PANEL+1]; CImageButton *m_pSubButtons[CHSB_NUM_BUTTONS]; CExLabel *m_pButtonLabels[CHSB_NUM_BUTTONS]; int m_iOverSubButton; int m_iClassLayout[NUM_CLASSES_IN_LOADOUT_PANEL+1][4]; bool m_bClassLayoutDirty; bool m_bSnapClassLayout; bool m_bRequestingInventoryRefresh; int m_iCurrentClassIndex; int m_iCurrentTeamIndex; charinfo_activepanels_t m_iShowingPanel; charinfo_activepanels_t m_iPrevShowingPanel; CClassLoadoutPanel *m_pClassLoadoutPanel; CBackpackPanel *m_pBackpackPanel; CCraftingPanel *m_pCraftingPanel; CArmoryPanel *m_pArmoryPanel; vgui::Label *m_pSelectLabel; vgui::Label *m_pLoadoutChangesLabel; vgui::Label *m_pNoSteamLabel; vgui::Label *m_pNoGCLabel; vgui::Label *m_pClassLabel; CExLabel *m_pItemsLabel; int m_iMouseXPos; int m_iMouseYPos; int m_iLabelSetToClass; int m_iClassLabelYPos; int m_iItemLabelYPos; Color m_ItemColorNone; Color m_ItemColor; float m_flStartExplanationsAt; int m_iArmoryItemDef; CPanelAnimationVarAliasType( int, m_iSelectLabelY, "selectlabely_default", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iSelectLabelOnChangesY, "selectlabely_onchanges", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassYPos, "class_ypos", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassXDelta, "class_xdelta", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassWideMin, "class_wide_min", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassWideMax, "class_wide_max", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassTallMin, "class_tall_min", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassTallMax, "class_tall_max", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassDistanceMin, "class_distance_min", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iClassDistanceMax, "class_distance_max", "0", "proportional_int" ); }; #endif // CHARINFO_LOADOUT_SUBPANEL_H