diff options
Diffstat (limited to 'game/client/tf/vgui/collection_crafting_panel.cpp')
| -rw-r--r-- | game/client/tf/vgui/collection_crafting_panel.cpp | 829 |
1 files changed, 829 insertions, 0 deletions
diff --git a/game/client/tf/vgui/collection_crafting_panel.cpp b/game/client/tf/vgui/collection_crafting_panel.cpp new file mode 100644 index 0000000..4794a4c --- /dev/null +++ b/game/client/tf/vgui/collection_crafting_panel.cpp @@ -0,0 +1,829 @@ +//========= 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 ); +}
\ No newline at end of file |