hl2_src-leak-2017/src/game/client/tf/tf_hud_mann_vs_machine_vict...

348 lines
9.2 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_HUD_MANN_VS_MACHINE_VICTORY_H
#define TF_HUD_MANN_VS_MACHINE_VICTORY_H
#ifdef _WIN32
#pragma once
#endif
#include "hudelement.h"
#include "tf_controls.h"
#include "hud.h"
#include <vgui/IScheme.h>
#include <vgui_controls/ProgressBar.h>
#include <vgui_controls/ScalableImagePanel.h>
#include <vgui_controls/EditablePanel.h>
#include <vgui/ISurface.h>
#include <vgui_controls/ImageList.h>
#include <vgui/KeyCode.h>
#include "vgui_controls/SectionedListPanel.h"
#include "c_tf_objective_resource.h"
#include "vgui_avatarimage.h"
#include "item_model_panel.h"
#include "c_playerresource.h"
#include "tf_gcmessages.h"
#include "tf_mann_vs_machine_stats.h"
#include "tf_gamerules.h"
#include "tf_hud_mann_vs_machine_stats.h"
#include "tf_gc_client.h"
class CTFParticlePanel;
//=========================================================
class CVictoryPanel : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CVictoryPanel, vgui::EditablePanel );
public:
CVictoryPanel( Panel *parent, const char *pName );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void OnTick( void );
void ResetVictoryPanel();
void SetMapAndPopFile ();
private:
enum
{
INITIAL_VICTORY = 0,
CREDITS_COLLECT,
CREDITS_MISSED,
CREDITS_BONUS,
YOUR_UPGRADES,
YOUR_BUYBACK,
YOUR_BOTTLES,
RATING_LABEL,
RATING_SCORE,
FINISHED,
};
void CaptureStats();
bool StateUpdateValue( vgui::EditablePanel *parent, char* field, float targetTime, float currentTime, int nextState, int endValue );
bool StateUpdateCreditText( vgui::EditablePanel *parent, char* field, float targetTime, float currentTime, int nextState, int useValue, int creditValue );
bool CheckState( float targetTime, float currentTime, int nextState );
void RatingLabelUpdate( void );
void RatingScoreUpdate( void );
float m_fPreviousTick;
float m_fStateRunningTime;
vgui::EditablePanel *m_pHeaderContainer;
vgui::EditablePanel *m_pCreditContainerPanel;
vgui::EditablePanel *m_pTeamStatsContainerPanel;
vgui::EditablePanel *m_pYourStatsContainerPanel;
vgui::EditablePanel *m_pRatingContainerPanel;
CExImageButton *m_pDoneButton;
CCreditSpendPanel *m_pTotalGameCreditSpendPanel;
int m_eState;
int m_nCreditsCollected;
int m_nCreditsMissed;
int m_nCreditBonus;
int m_nYourBuybacksCredits;
int m_nYourBottlesCredits;
int m_nYourUpgradeCredits;
};
//=========================================================
class CMvMVictoryMannUpLoot : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CMvMVictoryMannUpLoot, vgui::EditablePanel );
public:
CMvMVictoryMannUpLoot( Panel *parent, const char *pName );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
void SetEconItem( CEconItem *econItem );
void HideEconItem( );
void SetEconToolTip( CItemModelPanelToolTip *pToolTip );
private:
CItemModelPanel *m_pItemModelPanel;
};
//=========================================================
class CMvMVictoryMannUpEntry : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CMvMVictoryMannUpEntry, vgui::EditablePanel );
public:
CMvMVictoryMannUpEntry( Panel *parent, const char *pName );
~CMvMVictoryMannUpEntry();
virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void PerformLayout() OVERRIDE;
void SetActive( bool bActive );
void SetData( KeyValues *kv );
void ClearPlayerData();
#ifdef USE_MVM_TOUR
void SetPlayerData ( const CMsgMvMVictoryInfo_Player& player, int nMissionCount );
#else // new mm
void SetPlayerData ( const CMsgMvMVictoryInfo_Player& player, int nMissionIndex );
#endif // USE_MVM_TOUR
void SetItemsToolTip( CItemModelPanelToolTip *pToolTip );
bool AnimateProgressBar( void );
bool AnimateLoot( CTFParticlePanel* pParticlePanel );
void ForceFinishAllAnimation();
void SetLootAnimationPause( float flPause );
private:
void PlayVCD( const char * pszVCDName );
bool SetModelPanelInfo( C_TFPlayer* pPlayer );
void SetBadgeProgressBarProgress( float flPercent );
#ifdef USE_MVM_TOUR
int GetBadgeCompletionCount( uint32 iProgressBits );
#endif // USE_MVM_TOUR
vgui::EditablePanel* AddLootRow();
void CheckBadgeLevel ( const CMsgMvMVictoryInfo_Player& player );
void ClearEconItems ();
bool AnimTimePassed( float flTime ) const;
bool AnimateLoot_Internal( CTFParticlePanel* pParticlePanel );
void UpdatePlayerData();
CTFParticlePanel *m_pBehindItemParticlePanel;
vgui::EditablePanel *m_pTourProgress;
vgui::EditablePanel *m_pProgressBarBG;
vgui::EditablePanel *m_pProgressBarFGStatic;
vgui::EditablePanel *m_pHeader;
vgui::EditablePanel *m_pProgressBarFGAnim;
vgui::EditablePanel *m_pProgressCheckOnBackground;
vgui::ImagePanel *m_pProgressCheckOn;
vgui::EditablePanel *m_pSquadSurplusBackground;
vgui::ImagePanel *m_pSquadSurplus;
vgui::Label *m_pMissingVoucher;
CUtlVector< CEconItem* > m_MannUpEconItems;
vgui::HFont m_DividerLabelFont;
CMsgMvMVictoryInfo_Player m_playerData;
bool m_bHasData;
EHANDLE m_hPlayer;
bool m_bBadgeUpdated;
int m_iProgressWidthStart;
int m_iProgressWidthEnd;
int m_nBadgeLevel;
float m_flPBarCurrTime;
float m_flPBarPreviousTime;
int m_iLootAnimIndex;
float m_flLootAnimTime;
float m_flLastLootAnimTime;
#ifdef USE_MVM_TOUR
int m_nChallengeCount;
#else // new mm
int m_nMissionIndex;
#endif // USE_MVM_TOUR
int m_nItemColumns;
int m_nItemXSpacing;
int m_nItemYSpacing;
class CMvMLootItem : public CItemModelPanel
{
DECLARE_CLASS_SIMPLE( CMvMLootItem, CItemModelPanel );
public:
CMvMLootItem( vgui::Panel *parent, const char *name )
: CItemModelPanel( parent, name )
, m_nIndex( 0 )
, m_pUnopenedPanel( NULL )
{
m_pUnopenedPanel = new vgui::ImagePanel( parent, VarArgs( "unopened_%s", name ) );
}
~CMvMLootItem()
{}
vgui::ImagePanel *m_pUnopenedPanel;
CMsgMvMVictoryInfo_GrantReason m_eReason;
int m_nIndex;
};
CUtlVector< CMvMLootItem* > m_vecLootPanels;
CUtlVector< vgui::EditablePanel* > m_vecRows;
KeyValues *m_pItemModelPanelKVs;
KeyValues *m_pRowKVs;
KeyValues *m_pUnopenedLootKVs;
CUtlMap< int, CExLabel* > m_LootLables;
class CTFPlayerModelPanel *m_pPlayerModelPanel;
class vgui::PanelListPanel *m_pListPanel;
};
//=========================================================
class CMvMVictoryMannUpPlayerTab : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CMvMVictoryMannUpPlayerTab, vgui::EditablePanel );
public:
CMvMVictoryMannUpPlayerTab( Panel *parent, const char *pName );
void SetPlayer( const CSteamID& steamID );
void SetSelected( bool bState );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnCommand( const char *command ) OVERRIDE;
private:
CAvatarImagePanel *m_pAvatarImage;
vgui::EditablePanel *m_pActiveTab;
vgui::EditablePanel *m_pMouseoverHighlightPanel;
bool m_bIsActive;
};
//=========================================================
class CMvMVictoryMannUpPanel : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CMvMVictoryMannUpPanel, vgui::EditablePanel );
public:
CMvMVictoryMannUpPanel( Panel *parent, const char *pName );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnTick( void ) OVERRIDE;
virtual void SetVisible( bool bState ) OVERRIDE;
void ShowVictoryPanel();
void ClearData();
void MannUpServerResponse( CMsgMvMVictoryInfo &pData );
void ForceFinishAllAnimation();
bool HasData() { return m_hasData; }
virtual void OnCommand( const char *command ) OVERRIDE;
private:
void LoadVictoryData();
void UpdateHighlight();
void SetTabActive( int nIndex );
CTFParticlePanel *m_pParticlePanel;
CUtlVector< vgui::Button* > m_vecTabButtons;
CUtlVector< CMvMVictoryMannUpPlayerTab* > m_vecTabs;
CUtlVector< CMvMVictoryMannUpEntry* > m_PlayerEntryPanels;
CExImageButton *m_pDoneButton;
CItemModelPanel *m_pMouseOverItemPanel;
CItemModelPanelToolTip *m_pMouseOverTooltip;
vgui::EditablePanel *m_pNoItemServerContainer;
bool m_hasData;
int m_iMannUpLootIndex;
bool m_bAnimationComplete;
float m_flChangeTabPauseTime;
CMsgMvMVictoryInfo m_victoryInfo;
};
//=========================================================
class CMvMVictoryPanelContainer : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CMvMVictoryPanelContainer, vgui::EditablePanel );
public:
CMvMVictoryPanelContainer( Panel *parent, const char *pName );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void FireGameEvent( IGameEvent *event );
virtual void OnTick( void );
virtual void OnCommand( const char *command );
virtual void OnKeyCodePressed( vgui::KeyCode code );
void MannUpServerResponse( CMsgMvMVictoryInfo &pData )
{
m_pVictoryPanelMannUp->MannUpServerResponse( pData );
m_pObjective = TFObjectiveResource();
}
void ShowVictoryPanel( bool bIsReopening );
void CreateReOpenNotification();
bool IsVictoryPanelVisible()
{
return ( m_pVictoryPanelNormal && m_pVictoryPanelNormal->IsVisible() ) || ( m_pVictoryPanelMannUp && m_pVictoryPanelMannUp->IsVisible() );
}
private:
CVictoryPanel *m_pVictoryPanelNormal;
CMvMVictoryMannUpPanel *m_pVictoryPanelMannUp;
const C_TFObjectiveResource *m_pObjective;
};
#endif // TF_HUD_MANN_VS_MACHINE_VICTORY_H