summaryrefslogtreecommitdiff
path: root/game/client/econ/econ_sample_rootui.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/econ/econ_sample_rootui.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/econ/econ_sample_rootui.cpp')
-rw-r--r--game/client/econ/econ_sample_rootui.cpp458
1 files changed, 458 insertions, 0 deletions
diff --git a/game/client/econ/econ_sample_rootui.cpp b/game/client/econ/econ_sample_rootui.cpp
new file mode 100644
index 0000000..8b751eb
--- /dev/null
+++ b/game/client/econ/econ_sample_rootui.cpp
@@ -0,0 +1,458 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+
+#include "cbase.h"
+#include "econ_sample_rootui.h"
+#include "vgui/IInput.h"
+#include <vgui/ILocalize.h>
+#include "ienginevgui.h"
+#include "econ_item_inventory.h"
+#include "backpack_panel.h"
+#include "item_pickup_panel.h"
+#include "store/store_panel.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+static vgui::DHANDLE<CEconSampleRootUI> g_EconSampleRootUIPanel;
+
+#if !defined (TF_CLIENT_DLL)
+IEconRootUI *EconUI( void )
+{
+ if (!g_EconSampleRootUIPanel.Get())
+ {
+ g_EconSampleRootUIPanel = vgui::SETUP_PANEL( new CEconSampleRootUI( NULL ) );
+ g_EconSampleRootUIPanel->InvalidateLayout( false, true );
+ }
+ return g_EconSampleRootUIPanel;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Basic help dialog
+//-----------------------------------------------------------------------------
+CEconSampleRootUI::CEconSampleRootUI( vgui::Panel *parent ) : vgui::Frame(parent, "econ_sample_rootui")
+{
+ // Econ UI is parented to the game UI panel (not the client DLL panel).
+ vgui::VPANEL gameuiPanel = enginevgui->GetPanel( PANEL_GAMEUIDLL );
+ SetParent( gameuiPanel );
+
+ // We don't want the gameui to delete us, or things get messy
+ SetAutoDelete( false );
+
+ SetMoveable( false );
+ SetSizeable( false );
+ SetCloseButtonVisible( false );
+
+ vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/ClientScheme.res", "ClientScheme");
+ SetScheme(scheme);
+ SetProportional( true );
+
+ ListenForGameEvent( "gameui_hidden" );
+
+ // Create our subpanels
+ m_pBackpackPanel = new CBackpackPanel( this, "backpack_panel" );
+
+ // Start with just the base UI visible
+ m_nVisiblePanel = ECONUI_BASEUI;
+ UpdateSubPanelVisibility();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CEconSampleRootUI::~CEconSampleRootUI()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ LoadControlSettings( "Resource/UI/Econ/RootUI.res" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::PerformLayout( void )
+{
+ if ( GetVParent() )
+ {
+ int w,h;
+ vgui::ipanel()->GetSize( GetVParent(), w, h );
+ SetBounds(0,0,w,h);
+ }
+
+ BaseClass::PerformLayout();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::ShowPanel(bool bShow)
+{
+ m_bPreventClosure = false;
+ SetVisible( bShow );
+
+ if ( bShow )
+ {
+ MoveToFront();
+ m_nVisiblePanel = ECONUI_BASEUI;
+ UpdateSubPanelVisibility();
+
+ InventoryManager()->ShowItemsPickedUp( true, false );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::FireGameEvent( IGameEvent *event )
+{
+ const char * type = event->GetName();
+
+ if ( Q_strcmp(type, "gameui_hidden") == 0 )
+ {
+ if ( m_bPreventClosure )
+ {
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+ }
+ else
+ {
+ ShowPanel( false );
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::OnCommand( const char *command )
+{
+ if ( !Q_stricmp( command, "close" ) )
+ {
+ ShowPanel( false );
+
+ // If we're connected to a game server, we also close the game UI.
+ if ( engine->IsInGame() )
+ {
+ bool bClose = true;
+ if ( m_bCheckForRoomOnExit )
+ {
+ // Check to make sure the player has room for all his items. If not, bring up the discard panel. Otherwise, go away.
+ // We need to do this to catch players who used the "Change Loadout" button in the pickup panel, and may be out of room.
+ bClose = !InventoryManager()->CheckForRoomAndForceDiscard();
+ }
+
+ if ( bClose )
+ {
+ engine->ClientCmd_Unrestricted( "gameui_hide" );
+ }
+ }
+ }
+ else if ( !Q_stricmp( command, "back" ) )
+ {
+ ShowPanel( true );
+ }
+ else if ( !Q_stricmp( command, "loadout" ) )
+ {
+ // Ignore selection while we don't have a steam connection
+ if ( !InventoryManager()->GetLocalInventory()->RetrievedInventoryFromSteam() )
+ return;
+
+ OpenSubPanel( ECONUI_LOADOUT );
+ }
+ else if ( !Q_strnicmp( command, "backpack", 8 ) )
+ {
+ OpenSubPanel( ECONUI_BACKPACK );
+ }
+ else if ( !Q_strnicmp( command, "crafting", 8 ) )
+ {
+ OpenSubPanel( ECONUI_CRAFTING );
+ }
+ else if ( !Q_strnicmp( command, "armory", 6 ) )
+ {
+ OpenSubPanel( ECONUI_ARMORY );
+ }
+ else if ( !Q_strnicmp( command, "store", 5 ) )
+ {
+ EconUI()->OpenStorePanel( 0, false );
+ }
+ else if ( !Q_strnicmp( command, "trading", 7 ) )
+ {
+// if ( IsFreeTrialAccount() )
+// {
+// ShowMessageBox( "#TF_Trial_CannotTrade_Title", "#TF_Trial_CannotTrade_Text", "#GameUI_OK" );
+// return;
+// }
+
+ OpenTradingStartDialog();
+ }
+ else
+ {
+ engine->ClientCmd( const_cast<char *>( command ) );
+ }
+
+ BaseClass::OnCommand( command );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::OnKeyCodeTyped(vgui::KeyCode code)
+{
+ if ( code == KEY_ESCAPE )
+ {
+ if ( !m_bPreventClosure )
+ {
+ ShowPanel( false );
+ }
+ }
+ else
+ {
+ BaseClass::OnKeyCodeTyped( code );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+IEconRootUI *CEconSampleRootUI::OpenEconUI( int iDirectToPage, bool bCheckForInventorySpaceOnExit )
+{
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+ ShowPanel( true );
+
+ if ( iDirectToPage == ECONUI_BACKPACK )
+ {
+ }
+ else if ( iDirectToPage == ECONUI_CRAFTING )
+ {
+ }
+ else if ( iDirectToPage == ECONUI_ARMORY )
+ {
+ }
+
+ SetCheckForRoomOnExit( bCheckForInventorySpaceOnExit );
+
+ return this;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::CloseEconUI( void )
+{
+ if ( IsVisible() )
+ {
+ ShowPanel( false );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CEconSampleRootUI::IsUIPanelVisible( EconBaseUIPanels_t iPanel )
+{
+ if ( !IsVisible() )
+ return false;
+
+ switch ( iPanel )
+ {
+ case ECONUI_BASEUI:
+ return true;
+
+ case ECONUI_BACKPACK:
+ return (GetBackpackPanel() && GetBackpackPanel()->IsVisible());
+
+ case ECONUI_CRAFTING:
+ //return (GetCraftingPanel() && GetCraftingPanel()->IsVisible());
+ break;
+
+ case ECONUI_ARMORY:
+ break;
+
+ case ECONUI_TRADING:
+ break;
+ case ECONUI_LOADOUT:
+ break;
+
+ default:
+ Assert(0);
+ break;
+ }
+
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::OpenSubPanel( EconBaseUIPanels_t nPanel )
+{
+ m_nVisiblePanel = nPanel;
+ UpdateSubPanelVisibility();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::OpenTradingStartDialog( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::UpdateSubPanelVisibility( void )
+{
+ bool bBackpackVisible = (m_nVisiblePanel == ECONUI_BACKPACK);
+ if ( m_pBackpackPanel->IsVisible() != bBackpackVisible )
+ {
+ m_pBackpackPanel->ShowPanel( false, bBackpackVisible );
+ }
+
+ //m_pClassLoadoutPanel->SetVisible( false );
+ //m_pArmoryPanel->SetVisible( false );
+ //m_pCraftingPanel->ShowPanel( m_iCurrentClassIndex, true, (m_iPrevShowingPanel == CHAP_ARMORY) );
+}
+
+static vgui::DHANDLE<CItemPickupPanel> g_ItemPickupPanel;
+static vgui::DHANDLE<CItemDiscardPanel> g_ItemDiscardPanel;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CItemPickupPanel *CEconSampleRootUI::OpenItemPickupPanel( void )
+{
+ if (!g_ItemPickupPanel.Get())
+ {
+ g_ItemPickupPanel = vgui::SETUP_PANEL( new CItemPickupPanel( NULL ) );
+ g_ItemPickupPanel->InvalidateLayout( false, true );
+ }
+
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+ g_ItemPickupPanel->ShowPanel( true );
+
+ return g_ItemPickupPanel;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CItemDiscardPanel *CEconSampleRootUI::OpenItemDiscardPanel( void )
+{
+ if (!g_ItemDiscardPanel.Get())
+ {
+ g_ItemDiscardPanel = vgui::SETUP_PANEL( new CItemDiscardPanel( NULL ) );
+ g_ItemDiscardPanel->InvalidateLayout( false, true );
+ }
+
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+ g_ItemDiscardPanel->ShowPanel( true );
+
+ return g_ItemDiscardPanel;
+}
+
+static vgui::DHANDLE<CStorePanel> g_StorePanel;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEconSampleRootUI::CreateStorePanel( void )
+{
+ // Clean up previous store panel?
+ if ( g_StorePanel.Get() != NULL )
+ {
+ g_StorePanel->MarkForDeletion();
+ }
+
+ // Create the store panel
+ g_StorePanel = vgui::SETUP_PANEL( new CStorePanel( NULL ) );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CStorePanel *CEconSampleRootUI::OpenStorePanel( int iItemDef, bool bAddToCart )
+{
+ // Make sure we've got the appropriate connections to Steam
+ if ( !steamapicontext || !steamapicontext->SteamUtils() )
+ {
+ OpenStoreStatusDialog( NULL, "#StoreUpdate_SteamRequired", true, false );
+ return NULL;
+ }
+
+ if ( !steamapicontext->SteamUtils()->IsOverlayEnabled() )
+ {
+ OpenStoreStatusDialog( NULL, "#StoreUpdate_OverlayRequired", true, false );
+ return NULL;
+ }
+
+ if ( !CStorePanel::IsPricesheetLoaded() )
+ {
+ OpenStoreStatusDialog( NULL, "#StoreUpdate_Loading", false, false );
+
+ CStorePanel::SetShouldShowWarnings( true );
+ CStorePanel::RequestPricesheet();
+ return NULL;
+ }
+
+ if ( !g_StorePanel )
+ return NULL;
+
+ engine->ClientCmd_Unrestricted( "gameui_activate" );
+
+ if ( iItemDef )
+ {
+ g_StorePanel->StartAtItemDef( iItemDef, bAddToCart );
+ }
+
+ g_StorePanel->ShowPanel( true );
+
+ return g_StorePanel;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CStorePanel *CEconSampleRootUI::GetStorePanel( void )
+{
+ return g_StorePanel;
+}
+
+#ifdef _DEBUG
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void Open_EconUI( const CCommand &args )
+{
+ EconUI()->OpenEconUI();
+}
+ConCommand open_econui( "open_econui", Open_EconUI );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void Open_EconUIBackpack( const CCommand &args )
+{
+ EconUI()->OpenEconUI( ECONUI_BACKPACK );
+}
+ConCommand open_econui_backpack( "open_econui_backpack", Open_EconUIBackpack, "Open the backpack.", FCVAR_NONE );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void Open_EconUICrafting( const CCommand &args )
+{
+ EconUI()->OpenEconUI( ECONUI_CRAFTING );
+}
+ConCommand open_econui_crafting( "open_econui_crafting", Open_EconUICrafting, "Open the crafting screen.", FCVAR_NONE );
+#endif // _DEBUG