You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
829 lines
25 KiB
829 lines
25 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "collection_crafting_panel.h" |
|
#include "cdll_client_int.h" |
|
#include "ienginevgui.h" |
|
#include "econ_item_tools.h" |
|
#include "econ_ui.h" |
|
#include <vgui_controls/AnimationController.h> |
|
#include "clientmode_tf.h" |
|
#include "softline.h" |
|
#include "drawing_panel.h" |
|
#include "tf_item_inventory.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CCollectionCraftingPanel::CCollectionCraftingPanel( vgui::Panel *parent, CItemModelPanelToolTip* pTooltip ) |
|
: BaseClass( parent, "CollectionCraftingPanel" ) |
|
, m_pKVItemPanels( NULL ) |
|
, m_pModelPanel( NULL ) |
|
, m_bWaitingForGCResponse( false ) |
|
, m_bEnvelopeReadyToSend( false ) |
|
, m_pMouseOverTooltip( pTooltip ) |
|
, m_bShowing( false ) |
|
, m_bShowImmediately( false ) |
|
{ |
|
ListenForGameEvent( "gameui_hidden" ); |
|
|
|
m_pSelectingItemModelPanel = NULL; |
|
|
|
m_pTradeUpContainer = new EditablePanel( this, "TradeUpContainer" ); |
|
m_pInspectPanel = new CTFItemInspectionPanel( this, "NewItemPanel" ); |
|
m_pCosmeticResultItemModelPanel = new CItemModelPanel( m_pInspectPanel, "CosmeticResultItemModelPanel" ); |
|
m_pStampPanel = new ImagePanel( this, "Stamp" ); |
|
m_pStampButton = new CExButton( this, "ApplyStampButton", "" ); |
|
|
|
EditablePanel* pPaperContainer = new EditablePanel( m_pTradeUpContainer, "PaperContainer" ); |
|
|
|
m_pOKButton = new CExButton( pPaperContainer, "OkButton", "" ); |
|
m_pNextItemButton = new CExButton( this, "NextItemButton", "" ); |
|
|
|
m_pDrawingPanel = new CDrawingPanel( this, "drawingpanel" ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CCollectionCraftingPanel::~CCollectionCraftingPanel( void ) |
|
{ |
|
if ( m_hSelectionPanel ) |
|
{ |
|
m_hSelectionPanel->MarkForDeletion(); |
|
} |
|
|
|
if ( m_pKVItemPanels ) |
|
{ |
|
m_pKVItemPanels->deleteThis(); |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::SetItemPanelCount( ) |
|
{ |
|
// only do this once |
|
if ( m_vecItemContainers.Count() != 0 ) |
|
return; |
|
|
|
const int nNumItems = GetInputItemCount(); |
|
const int nNumOutput = GetOutputItemCount(); |
|
|
|
EditablePanel* pPaperContainer = dynamic_cast<vgui::EditablePanel*>( m_pTradeUpContainer->FindChildByName( "PaperContainer" ) ); |
|
if ( pPaperContainer ) |
|
{ |
|
m_vecItemContainers.SetCount( nNumItems ); |
|
FOR_EACH_VEC( m_vecItemContainers, i ) |
|
{ |
|
m_vecItemContainers[i] = new EditablePanel( pPaperContainer, "itemcontainer" ); |
|
} |
|
|
|
m_vecOutputItemContainers.SetCount( nNumOutput ); |
|
FOR_EACH_VEC( m_vecOutputItemContainers, i ) |
|
{ |
|
m_vecOutputItemContainers[i] = new EditablePanel( pPaperContainer, "itemcontainer" ); |
|
} |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::CreateSelectionPanel() |
|
{ |
|
m_hSelectionPanel = new CCollectionCraftingSelectionPanel( this ); |
|
} |
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
LoadControlSettings( GetResFile() ); |
|
|
|
m_pModelPanel = FindControl< CBaseModelPanel >( "ReturnModel" ); |
|
if ( m_pModelPanel ) |
|
{ |
|
m_pModelPanel->SetLookAtCamera( false ); |
|
} |
|
|
|
if ( m_pDrawingPanel ) |
|
{ |
|
m_pDrawingPanel->SetType( DRAWING_PANEL_TYPE_CRAFTING ); |
|
} |
|
|
|
m_pItemNamePanel = m_pInspectPanel->FindControl< CItemModelPanel >( "ItemName" ); |
|
Assert( m_pItemNamePanel ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::ApplySettings( KeyValues *inResourceData ) |
|
{ |
|
BaseClass::ApplySettings( inResourceData ); |
|
|
|
KeyValues *pItemKV = inResourceData->FindKey( "ItemContainerKV" ); |
|
if ( pItemKV ) |
|
{ |
|
if ( m_pKVItemPanels ) |
|
{ |
|
m_pKVItemPanels->deleteThis(); |
|
} |
|
m_pKVItemPanels = new KeyValues("ItemContainerKV"); |
|
pItemKV->CopySubkeys( m_pKVItemPanels ); |
|
} |
|
|
|
m_vecImagePanels.Purge(); |
|
m_vecItemPanels.Purge(); |
|
|
|
KeyValues *pBoxTopsKV = inResourceData->FindKey( "BoxTops" ); |
|
if ( pBoxTopsKV ) |
|
{ |
|
m_vecBoxTopNames.Purge(); |
|
FOR_EACH_VALUE( pBoxTopsKV, pValue ) |
|
{ |
|
m_vecBoxTopNames.AddToTail( pValue->GetString() ); |
|
} |
|
} |
|
Assert( m_vecBoxTopNames.Count() ); |
|
|
|
KeyValues *pStampNames = inResourceData->FindKey( "stampimages" ); |
|
if ( pStampNames ) |
|
{ |
|
m_vecStampNames.Purge(); |
|
FOR_EACH_VALUE( pStampNames, pValue ) |
|
{ |
|
m_vecStampNames.AddToTail( pValue->GetString() ); |
|
} |
|
} |
|
Assert( m_vecStampNames.Count() ); |
|
|
|
KeyValues *pResulStrings = inResourceData->FindKey( "resultstring" ); |
|
if ( pResulStrings ) |
|
{ |
|
m_vecResultStrings.Purge(); |
|
FOR_EACH_VALUE( pResulStrings, pValue ) |
|
{ |
|
m_vecResultStrings.AddToTail( pValue->GetString() ); |
|
} |
|
} |
|
Assert( m_vecResultStrings.Count() ); |
|
|
|
KeyValues *pLocalizedPanelNames = inResourceData->FindKey( "localizedpanels" ); |
|
if ( pLocalizedPanelNames ) |
|
{ |
|
m_vecLocalizedPanels.Purge(); |
|
FOR_EACH_TRUE_SUBKEY( pLocalizedPanelNames, pValue ) |
|
{ |
|
m_vecLocalizedPanels.AddToTail( { pValue->GetString( "panelname" ), pValue->GetBool( "show_for_english", false ) } ); |
|
} |
|
} |
|
|
|
CreateItemPanels(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::PerformLayout() |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
if ( m_pModelPanel ) |
|
{ |
|
m_pModelPanel->SetMDL( "models/player/items/crafting/mannco_crate_tradeup.mdl" ); |
|
} |
|
|
|
FOR_EACH_VEC( m_vecItemContainers, i ) |
|
{ |
|
m_vecItemContainers[ i ]->SetPos( m_iButtonsStartX + m_iButtonsStepX * ( i % 5 ) |
|
, m_iButtonsStartY + m_iButtonsStepY * ( i / 5 ) ); |
|
} |
|
|
|
FOR_EACH_VEC( m_vecOutputItemContainers, i ) |
|
{ |
|
m_vecOutputItemContainers[i]->SetPos( m_iOutputItemStartX + m_iOutputItemStepX * ( i % 5 ) |
|
, m_iOutputItemStartY + m_iOutputItemStepY * ( i / 5 ) ); |
|
} |
|
|
|
if ( steamapicontext && steamapicontext->SteamApps() ) |
|
{ |
|
char uilanguage[ 64 ]; |
|
uilanguage[0] = 0; |
|
engine->GetUILanguage( uilanguage, sizeof( uilanguage ) ); |
|
ELanguage language = PchLanguageToELanguage( uilanguage ); |
|
|
|
FOR_EACH_VEC( m_vecLocalizedPanels, i ) |
|
{ |
|
bool bShow = language == k_Lang_English && m_vecLocalizedPanels[ i ].m_bShowForEnglish; |
|
Panel* pPanel = m_pTradeUpContainer->FindChildByName( m_vecLocalizedPanels[ i ].m_strPanel, true ); |
|
if ( pPanel ) |
|
{ |
|
pPanel->SetVisible( bShow ); |
|
} |
|
} |
|
} |
|
|
|
UpdateOKButton(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::CreateItemPanels() |
|
{ |
|
SetItemPanelCount(); |
|
|
|
m_vecImagePanels.SetCount( m_vecItemContainers.Count() ); |
|
m_vecItemPanels.SetCount( m_vecItemContainers.Count() ); |
|
|
|
FOR_EACH_VEC( m_vecItemContainers, i ) |
|
{ |
|
m_vecItemContainers[ i ]->ApplySettings( m_pKVItemPanels ); |
|
m_vecImagePanels[ i ] = m_vecItemContainers[ i ]->FindControl< ImagePanel >( "imagepanel" ); |
|
m_vecItemPanels[ i ] = m_vecItemContainers[ i ]->FindControl< CItemModelPanel >( "itempanel" ); |
|
m_vecItemPanels[ i ]->SetActAsButton( true, true ); |
|
m_vecItemPanels[ i ]->SetTooltip( m_pMouseOverTooltip, "" ); |
|
|
|
CExButton* pButton = m_vecItemContainers[ i ]->FindControl< CExButton >( "BackgroundButton" ); |
|
if ( pButton ) |
|
{ |
|
pButton->SetCommand( CFmtStr( "select%d", i ) ); |
|
pButton->AddActionSignalTarget( this ); |
|
} |
|
} |
|
|
|
m_vecOutputImagePanels.SetCount( m_vecOutputItemContainers.Count() ); |
|
m_vecOutputItemPanels.SetCount( m_vecOutputItemContainers.Count() ); |
|
|
|
FOR_EACH_VEC( m_vecOutputItemContainers, i ) |
|
{ |
|
m_vecOutputItemContainers[i]->ApplySettings( m_pKVItemPanels ); |
|
m_vecOutputImagePanels[i] = m_vecOutputItemContainers[i]->FindControl< ImagePanel >( "imagepanel" ); |
|
m_vecOutputItemPanels[i] = m_vecOutputItemContainers[i]->FindControl< CItemModelPanel >( "itempanel" ); |
|
m_vecOutputItemPanels[i]->SetTooltip( m_pMouseOverTooltip, "" ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::OnCommand( const char *command ) |
|
{ |
|
if ( !Q_stricmp( command, "reloadscheme" ) ) |
|
{ |
|
InvalidateLayout( false, true ); |
|
return; |
|
} |
|
|
|
|
|
if ( FStrEq( "doneselectingitems", command ) ) |
|
{ |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_LetterStart" ); |
|
m_bEnvelopeReadyToSend = false; |
|
|
|
if ( m_vecStampNames.Count() ) |
|
{ |
|
m_pStampPanel->SetImage( m_vecStampNames[ RandomInt( 0, m_vecStampNames.Count() - 1 ) ] ); |
|
} |
|
|
|
return; |
|
} |
|
else if ( FStrEq( "cancel", command ) ) |
|
{ |
|
SetVisible( false ); |
|
return; |
|
} |
|
else if ( Q_strnicmp( "select", command, 6 ) == 0 ) |
|
{ |
|
SelectPanel( atoi( command + 6 ) ); |
|
return; |
|
} |
|
else if ( FStrEq( "envelopesend", command ) ) |
|
{ |
|
GCSDK::CProtoBufMsg<CMsgCraftCollectionUpgrade> msg( k_EMsgGCCraftCollectionUpgrade ); |
|
|
|
// Construct message |
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
if ( m_vecItemPanels[ i ]->GetItem() == NULL ) |
|
return; |
|
|
|
msg.Body().add_item_id( m_vecItemPanels[ i ]->GetItem()->GetItemID() ); |
|
} |
|
// Send if off |
|
GCClientSystem()->BSendMessage( msg ); |
|
|
|
m_bWaitingForGCResponse = true; |
|
m_nFoundItemID.Purge(); |
|
m_timerResponse.Start( 5.f ); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_LetterSend" ); |
|
return; |
|
} |
|
else if ( FStrEq( "placestamp", command ) ) |
|
{ |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_PlaceStamp" ); |
|
return; |
|
} |
|
else if( Q_strnicmp( "playcratesequence", command, 17 ) == 0 ) |
|
{ |
|
m_pModelPanel->SetSequence( atoi( command + 17 ), true ); |
|
return; |
|
} |
|
else if( FStrEq( "itemget", command ) ) |
|
{ |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_ItemRecieved" ); |
|
wchar_t *pszLocalized = NULL; |
|
|
|
// |
|
if ( m_eEconItemOrigin == kEconItemOrigin_FoundInCrate ) |
|
{ |
|
pszLocalized = g_pVGuiLocalize->Find( "#NewItemMethod_FoundInCrate" ); |
|
} |
|
else if ( m_vecResultStrings.Count() ) |
|
{ |
|
pszLocalized = g_pVGuiLocalize->Find( m_vecResultStrings[ RandomInt( 0, m_vecResultStrings.Count() - 1 ) ] ); |
|
} |
|
|
|
m_pInspectPanel->SetDialogVariable( "resultstring", pszLocalized ); |
|
return; |
|
} |
|
else if( Q_strnicmp( "playsound", command, 9 ) == 0 ) |
|
{ |
|
vgui::surface()->PlaySound( command + 10 ); |
|
return; |
|
} |
|
else if( FStrEq( "startexplanation1", command ) ) |
|
{ |
|
CExplanationPopup *pPopup = dynamic_cast<CExplanationPopup*>( FindChildByName("StartExplanation") ); |
|
if ( pPopup ) |
|
{ |
|
pPopup->Popup(); |
|
} |
|
return; |
|
} |
|
else if( FStrEq( "startexplanation2", command ) ) |
|
{ |
|
CExplanationPopup *pPopup = dynamic_cast<CExplanationPopup*>( FindChildByName("SigningExplanation") ); |
|
if ( pPopup ) |
|
{ |
|
pPopup->Popup(); |
|
} |
|
return; |
|
} |
|
else if ( FStrEq( "nextitem", command ) ) |
|
{ |
|
if ( m_nFoundItemID.Count() > 1 ) |
|
{ |
|
// Remove head, reset timer to drop next item |
|
m_nFoundItemID.Remove( 0 ); |
|
m_timerResponse.Start( 5.f ); |
|
m_bShowImmediately = true; |
|
} |
|
} |
|
else if( FStrEq( "reload", command ) ) |
|
{ |
|
g_pVGuiLocalize->ReloadLocalizationFiles(); |
|
InvalidateLayout( false, true ); |
|
SetVisible( true ); |
|
return; |
|
} |
|
|
|
BaseClass::OnCommand( command ); |
|
} |
|
|
|
void CCollectionCraftingPanel::SelectPanel( int nPanel ) |
|
{ |
|
m_pSelectingItemModelPanel = m_vecItemPanels[ nPanel ]; |
|
|
|
CCopyableUtlVector< const CEconItemView* > vecCurrentItems; |
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
if ( m_vecItemPanels[ i ]->GetItem() ) |
|
{ |
|
vecCurrentItems.AddToTail( m_vecItemPanels[ i ]->GetItem() ); |
|
} |
|
} |
|
|
|
if ( !m_hSelectionPanel ) |
|
{ |
|
CreateSelectionPanel(); |
|
m_hSelectionPanel->SetAutoDelete( false ); |
|
} |
|
|
|
if ( m_hSelectionPanel ) |
|
{ |
|
// Clicked on an item in the crafting area. Open up the selection panel. |
|
m_hSelectionPanel->SetCorrespondingItems( vecCurrentItems ); |
|
m_hSelectionPanel->ShowDuplicateCounts( true ); |
|
m_hSelectionPanel->ShowPanel( 0, true ); |
|
m_hSelectionPanel->SetCaller( this ); |
|
m_hSelectionPanel->SetZPos( GetZPos() + 1 ); |
|
} |
|
} |
|
|
|
void CCollectionCraftingPanel::FireGameEvent( IGameEvent *event ) |
|
{ |
|
if ( FStrEq( event->GetName(), "gameui_hidden" ) ) |
|
{ |
|
SetVisible( false ); |
|
return; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::OnItemPanelMousePressed( vgui::Panel *panel ) |
|
{ |
|
CItemModelPanel *pItemPanel = dynamic_cast < CItemModelPanel * > ( panel ); |
|
|
|
if ( pItemPanel && IsVisible() && !pItemPanel->IsGreyedOut() ) |
|
{ |
|
auto idx = m_vecItemPanels.Find( pItemPanel ); |
|
if ( idx != m_vecItemPanels.InvalidIndex() ) |
|
{ |
|
OnCommand( CFmtStr( "select%d", idx ) ); |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::OnSelectionReturned( KeyValues *data ) |
|
{ |
|
Assert( m_pSelectingItemModelPanel ); |
|
|
|
m_hSelectionPanel->SetVisible( false ); |
|
|
|
if ( data && m_pSelectingItemModelPanel ) |
|
{ |
|
uint64 ulIndex = data->GetUint64( "itemindex", INVALID_ITEM_ID ); |
|
|
|
CEconItemView* pSelectedItem = InventoryManager()->GetLocalInventory()->GetInventoryItemByItemID( ulIndex ); |
|
|
|
if ( pSelectedItem ) |
|
{ |
|
vgui::surface()->PlaySound( "ui/trade_up_apply_sticker.wav" ); |
|
} |
|
|
|
auto idx = m_vecItemPanels.Find( m_pSelectingItemModelPanel ); |
|
SetItem( pSelectedItem, idx ); |
|
} |
|
|
|
m_pSelectingItemModelPanel = NULL; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::UpdateOKButton() |
|
{ |
|
bool bOKEnabled = true; |
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
bOKEnabled &= m_vecItemPanels[ i ]->GetItem() != NULL; |
|
} |
|
|
|
m_pOKButton->SetEnabled( bOKEnabled ); |
|
|
|
if ( bOKEnabled ) |
|
{ |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( m_pOKButton->GetParent(), "CollectionCrafting_OKBlink" ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::SetVisible( bool bVisible ) |
|
{ |
|
BaseClass::SetVisible( bVisible ); |
|
|
|
if ( bVisible ) |
|
{ |
|
m_pInspectPanel->SetVisible( false ); |
|
|
|
EditablePanel* pDimmer = FindControl< EditablePanel >( "Dimmer" ); |
|
if ( pDimmer ) |
|
{ |
|
pDimmer->SetAlpha( 0 ); |
|
} |
|
|
|
EditablePanel* pBG = FindControl< EditablePanel >( "BG" ); |
|
if ( pBG ) |
|
{ |
|
pBG->SetPos( pBG->GetXPos(), GetTall() ); |
|
} |
|
|
|
m_pTradeUpContainer->SetVisible( true ); |
|
m_pTradeUpContainer->SetPos( m_pTradeUpContainer->GetXPos(), -700 ); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_Intro" ); |
|
vgui::surface()->PlaySound( "ui/trade_up_panel_slide.wav" ); |
|
|
|
m_pDrawingPanel->ClearLines( GetLocalPlayerIndex() ); |
|
} |
|
else |
|
{ |
|
if ( m_hSelectionPanel ) |
|
{ |
|
m_hSelectionPanel->SetVisible( false ); |
|
} |
|
|
|
if ( m_bShowing ) |
|
{ |
|
EconUI()->SetPreventClosure( false ); |
|
} |
|
m_bShowing = false; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::SOCreated( const CSteamID & steamIDOwner, const GCSDK::CSharedObject *pObject, GCSDK::ESOCacheEvent eEvent ) |
|
{ |
|
tmZone( TELEMETRY_LEVEL0, TMZF_NONE, "%s", __FUNCTION__ ); |
|
if ( m_bWaitingForGCResponse ) |
|
{ |
|
if( pObject->GetTypeID() != CEconItem::k_nTypeID ) |
|
return; |
|
|
|
CEconItem *pItem = (CEconItem *)pObject; |
|
|
|
if ( IsUnacknowledged( pItem->GetInventoryToken() ) && ( pItem->GetOrigin() == m_eEconItemOrigin ) ) |
|
{ |
|
//Assert( m_nFoundItemID == INVALID_ITEM_ID ); |
|
//m_bWaitingForGCResponse = false; |
|
m_nFoundItemID.AddToTail( pItem->GetItemID() ); |
|
CEconItemView* pNewEconItemView = InventoryManager()->GetLocalInventory()->GetInventoryItemByItemID( pItem->GetItemID() ); |
|
if ( pNewEconItemView ) |
|
{ |
|
// Acknowledge the item |
|
InventoryManager()->AcknowledgeItem( pNewEconItemView, true ); |
|
InventoryManager()->SaveAckFile(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::Show( CUtlVector< const CEconItemView* >& vecStartingItems ) |
|
{ |
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
const CEconItemView* pItem = i < vecStartingItems.Count() ? vecStartingItems[ i ] : NULL; |
|
SetItem( pItem, i ); |
|
} |
|
|
|
m_bShowing = true; |
|
EconUI()->SetPreventClosure( true ); |
|
SetVisible( true ); |
|
|
|
m_eEconItemOrigin = kEconItemOrigin_TradeUp; |
|
} |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::SetWaitingForItem( eEconItemOrigin eOrigin ) |
|
{ |
|
// Clear Panels |
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
SetItem( NULL, i ); |
|
} |
|
|
|
m_bShowing = true; |
|
EconUI()->SetPreventClosure( true ); |
|
|
|
m_pInspectPanel->SetVisible( false ); |
|
EditablePanel* pDimmer = FindControl< EditablePanel >( "Dimmer" ); |
|
if ( pDimmer ) |
|
{ |
|
pDimmer->SetAlpha( 0 ); |
|
} |
|
|
|
EditablePanel* pBG = FindControl< EditablePanel >( "BG" ); |
|
if ( pBG ) |
|
{ |
|
pBG->SetPos( pBG->GetXPos(), GetTall() ); |
|
} |
|
|
|
m_pTradeUpContainer->SetVisible( false ); |
|
|
|
// reset |
|
m_pInspectPanel->SetItemCopy( NULL ); |
|
m_pCosmeticResultItemModelPanel->SetItem( NULL ); |
|
|
|
// Do not use Derived SetVisible since it does extra animations we do not want here |
|
BaseClass::SetVisible( true ); |
|
|
|
m_eEconItemOrigin = eOrigin; |
|
|
|
m_bWaitingForGCResponse = true; |
|
m_nFoundItemID.Purge(); |
|
m_timerResponse.Start( 5.f ); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_WaitForItemsOnly" ); |
|
return; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::SetItem( const CEconItemView* pItem, int nIndex ) |
|
{ |
|
if ( nIndex != m_vecItemPanels.InvalidIndex() ) |
|
{ |
|
m_vecImagePanels[ nIndex ]->SetVisible( pItem != NULL ); |
|
m_vecItemPanels[ nIndex ]->SetVisible( pItem != NULL ); |
|
m_vecItemPanels[ nIndex ]->SetItem( pItem ); |
|
|
|
if ( pItem && m_vecBoxTopNames.Count() ) |
|
{ |
|
CUniformRandomStream randomStream; |
|
randomStream.SetSeed( pItem->GetItemID() ); |
|
m_vecImagePanels[ nIndex ]->SetImage( m_vecBoxTopNames[ randomStream.RandomInt( 0, m_vecBoxTopNames.Count() - 1 ) ] ); |
|
} |
|
} |
|
|
|
UpdateOKButton(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCollectionCraftingPanel::OnThink() |
|
{ |
|
BaseClass::OnThink(); |
|
const float flSoonestAirDropTime = 2.f; |
|
|
|
if ( m_timerResponse.HasStarted() ) |
|
{ |
|
// Elapsed is bad. This means the item server didnt get back to us |
|
if ( m_timerResponse.IsElapsed() ) |
|
{ |
|
m_nFoundItemID.Purge(); |
|
m_bWaitingForGCResponse = false; |
|
m_timerResponse.Invalidate(); |
|
|
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_HideWaiting" ); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_ShowFailure" ); |
|
} |
|
else if ( m_timerResponse.GetElapsedTime() > flSoonestAirDropTime || m_bShowImmediately ) |
|
{ |
|
m_bShowImmediately = false; |
|
// At 2 seconds we want to either show that we're still waiting, or show the item |
|
if ( m_nFoundItemID.Count() > 0 ) |
|
{ |
|
OnCommand( "itemget" ); |
|
m_timerResponse.Invalidate(); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_HideWaiting" ); |
|
|
|
// Setup the item in the panel |
|
CEconItemView* pNewEconItemView = InventoryManager()->GetLocalInventory()->GetInventoryItemByItemID( m_nFoundItemID[0] ); |
|
if ( pNewEconItemView ) |
|
{ |
|
static CSchemaAttributeDefHandle pAttrib_WeaponAllowInspect( "weapon_allow_inspect" ); |
|
if ( pNewEconItemView->FindAttribute( pAttrib_WeaponAllowInspect ) ) |
|
{ |
|
m_pInspectPanel->SetItemCopy( pNewEconItemView ); |
|
m_pInspectPanel->SetSpecialAttributesOnly( true ); |
|
m_pCosmeticResultItemModelPanel->SetItem( NULL ); |
|
} |
|
else //( IsMiscSlot( pNewEconItemView->GetStaticData()->GetDefaultLoadoutSlot() ) ) |
|
{ |
|
m_pCosmeticResultItemModelPanel->SetItem( pNewEconItemView ); |
|
m_pCosmeticResultItemModelPanel->SetNameOnly( false ); |
|
m_pInspectPanel->SetSpecialAttributesOnly( true ); |
|
m_pInspectPanel->SetItemCopy( NULL ); |
|
} |
|
|
|
// Acknowledge the item |
|
InventoryManager()->AcknowledgeItem( pNewEconItemView, true ); |
|
InventoryManager()->SaveAckFile(); |
|
|
|
if ( m_pItemNamePanel ) |
|
{ |
|
m_pItemNamePanel->SetItem( pNewEconItemView ); |
|
} |
|
} |
|
|
|
m_bWaitingForGCResponse = false; |
|
|
|
// only show if more then 1 item in queue |
|
m_pNextItemButton->SetVisible( m_nFoundItemID.Count() > 1 ); |
|
} |
|
else |
|
{ |
|
// Say that we're waiting |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_ShowWaiting" ); |
|
} |
|
} |
|
} |
|
|
|
bool bEnvelopReadyToSendThisFrame = true; |
|
// They need to have drawn a little bit |
|
bEnvelopReadyToSendThisFrame &= m_pDrawingPanel->GetLines( GetLocalPlayerIndex() ).Count() > 10; |
|
// And placed a stamp |
|
bEnvelopReadyToSendThisFrame &= m_pStampPanel->IsVisible(); |
|
|
|
// Show the send button? |
|
if ( bEnvelopReadyToSendThisFrame && !m_bEnvelopeReadyToSend ) |
|
{ |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_ShowSendButton" ); |
|
} |
|
|
|
m_bEnvelopeReadyToSend = bEnvelopReadyToSendThisFrame; |
|
} |
|
|
|
//* ************************************************************************************************************************************** |
|
// Stat Clock Crafting |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CCraftCommonStatClockPanel::CCraftCommonStatClockPanel( vgui::Panel *parent, CItemModelPanelToolTip* pTooltip ) |
|
: BaseClass( parent, pTooltip ) |
|
{ |
|
|
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CCraftCommonStatClockPanel::~CCraftCommonStatClockPanel( void ) |
|
{ |
|
|
|
} |
|
//----------------------------------------------------------------------------- |
|
void CCraftCommonStatClockPanel::Show( CUtlVector< const CEconItemView* >& vecStartingItems ) |
|
{ |
|
BaseClass::Show( vecStartingItems ); |
|
|
|
// Create output |
|
static CSchemaItemDefHandle pItemDef_CommonStatClock( "Common Stat Clock" ); |
|
m_outputItem.SetItemDefIndex( pItemDef_CommonStatClock->GetDefinitionIndex() ); |
|
m_outputItem.SetItemQuality( AE_UNIQUE ); // Unique by default |
|
m_outputItem.SetItemLevel( 0 ); // Hide this? |
|
m_outputItem.SetItemID( 0 ); |
|
m_outputItem.SetInitialized( true ); |
|
|
|
m_vecOutputImagePanels[0]->SetVisible( true ); |
|
m_vecOutputItemPanels[0]->SetVisible( true ); |
|
m_vecOutputItemPanels[0]->SetItem( &m_outputItem ); |
|
|
|
if ( m_vecBoxTopNames.Count() ) |
|
{ |
|
CUniformRandomStream randomStream; |
|
randomStream.SetSeed( 0 ); |
|
m_vecOutputImagePanels[0]->SetImage( m_vecBoxTopNames[randomStream.RandomInt( 0, m_vecBoxTopNames.Count() - 1 )] ); |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
void CCraftCommonStatClockPanel::CreateSelectionPanel() |
|
{ |
|
CStatClockCraftingSelectionPanel *pSelectionPanel = new CStatClockCraftingSelectionPanel( this ); |
|
m_hSelectionPanel = (CCollectionCraftingSelectionPanel*)pSelectionPanel; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CCraftCommonStatClockPanel::OnCommand( const char *command ) |
|
{ |
|
if ( FStrEq( "envelopesend", command ) ) |
|
{ |
|
GCSDK::CProtoBufMsg<CMsgCraftCommonStatClock> msg( k_EMsgGCCraftCommonStatClock ); |
|
|
|
// Find out if the user owns this item or not and place in the proper bucket |
|
CPlayerInventory *pLocalInv = TFInventoryManager()->GetLocalInventory(); |
|
if ( !pLocalInv ) |
|
return; |
|
|
|
FOR_EACH_VEC( m_vecItemPanels, i ) |
|
{ |
|
if ( m_vecItemPanels[i]->GetItem() == NULL ) |
|
return; |
|
|
|
msg.Body().add_item_id( m_vecItemPanels[i]->GetItem()->GetItemID() ); |
|
} |
|
// Send if off |
|
GCClientSystem()->BSendMessage( msg ); |
|
|
|
m_bWaitingForGCResponse = true; |
|
m_nFoundItemID.Purge(); |
|
m_timerResponse.Start( 5.f ); |
|
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( this, "CollectionCrafting_LetterSend" ); |
|
return; |
|
} |
|
|
|
BaseClass::OnCommand( command ); |
|
} |