mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 06:36:54 +00:00
459 lines
12 KiB
C++
459 lines
12 KiB
C++
//========= 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
|