|
|
//========= 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
|