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.
140 lines
4.8 KiB
140 lines
4.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef TF_SPECTATORGUI_H |
|
#define TF_SPECTATORGUI_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <spectatorgui.h> |
|
#include "hudelement.h" |
|
#include "tf_hud_playerstatus.h" |
|
#include "item_model_panel.h" |
|
#include "tf_gamerules.h" |
|
#include <vgui_controls/EditablePanel.h> |
|
|
|
extern ConVar cl_use_tournament_specgui; |
|
class CAvatarImagePanel; |
|
class CTFPlayerPanel; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Custom health panel used to show spectator target's health |
|
//----------------------------------------------------------------------------- |
|
class CTFSpectatorGUIHealth : public CTFHudPlayerHealth |
|
{ |
|
public: |
|
CTFSpectatorGUIHealth( Panel *parent, const char *name ) : CTFHudPlayerHealth( parent, name ) |
|
{ |
|
} |
|
|
|
virtual const char *GetResFilename( void ) |
|
{ |
|
return "resource/UI/SpectatorGUIHealth.res"; |
|
} |
|
virtual void OnThink() |
|
{ |
|
// Do nothing. We're just preventing the base health panel from updating. |
|
} |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: TF Spectator UI |
|
//----------------------------------------------------------------------------- |
|
class CTFSpectatorGUI : public CSpectatorGUI, public CGameEventListener |
|
{ |
|
private: |
|
DECLARE_CLASS_SIMPLE( CTFSpectatorGUI, CSpectatorGUI ); |
|
|
|
public: |
|
CTFSpectatorGUI( IViewPort *pViewPort ); |
|
~CTFSpectatorGUI( void ); |
|
|
|
virtual void Reset( void ); |
|
virtual void PerformLayout( void ); |
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
virtual void ApplySettings( KeyValues *inResourceData ); |
|
|
|
virtual void Update( void ); |
|
virtual bool NeedsUpdate( void ); |
|
virtual bool ShouldShowPlayerLabel( int specmode ) { return false; } |
|
void UpdateReinforcements( void ); |
|
virtual void ShowPanel(bool bShow); |
|
virtual Color GetBlackBarColor( void ) { return Color(52,48,45, 255); } |
|
|
|
void UpdateKeyLabels( void ); |
|
|
|
virtual void FireGameEvent( IGameEvent *event ); |
|
void UpdateItemPanel( bool bForce = false ); |
|
void ForceItemPanelCycle( void ); |
|
virtual const char *GetResFile( void ); |
|
|
|
// Tournament mode handling |
|
bool InTournamentGUI( void ); |
|
void RecalculatePlayerPanels( void ); |
|
void UpdatePlayerPanels( void ); |
|
void SelectSpec( int iSlot ); |
|
|
|
virtual int GetTopBarHeight(); |
|
|
|
virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_SPECTATOR; } |
|
|
|
protected: |
|
int m_nLastSpecMode; |
|
float m_flNextTipChangeTime; // time at which to next change the tip |
|
int m_iTipClass; // class that current tip is for |
|
|
|
// used to store the x and y position of the Engy and Spy build panels so we can reset them when the spec panel goes away |
|
int m_nEngBuilds_xpos; |
|
int m_nEngBuilds_ypos; |
|
int m_nSpyBuilds_xpos; |
|
int m_nSpyBuilds_ypos; |
|
|
|
int m_nMannVsMachineStatus_xpos; |
|
int m_nMannVsMachineStatus_ypos; |
|
|
|
vgui::Label *m_pReinforcementsLabel; |
|
CExLabel *m_pBuyBackLabel; |
|
vgui::Label *m_pClassOrTeamLabel; |
|
CExLabel *m_pClassOrTeamKeyLabel; |
|
vgui::Label *m_pSwitchCamModeKeyLabel; |
|
vgui::Label *m_pCycleTargetFwdKeyLabel; |
|
vgui::Label *m_pCycleTargetRevKeyLabel; |
|
vgui::Label *m_pMapLabel; |
|
CItemModelPanel *m_pItemPanel; |
|
|
|
float m_flNextItemPanelUpdate; |
|
EHANDLE m_hPrevItemPlayer; |
|
int m_iPrevItemShown; |
|
int m_iFirstItemShown; |
|
bool m_bShownItems; |
|
|
|
// Tournament mode player panel handling |
|
CUtlVector<CTFPlayerPanel*> m_PlayerPanels; |
|
KeyValues *m_pPlayerPanelKVs; |
|
bool m_bReapplyPlayerPanelKVs; |
|
bool m_bPrevTournamentMode; |
|
float m_flNextPlayerPanelUpdate; |
|
|
|
// Coaching |
|
bool m_bCoaching; |
|
CAvatarImagePanel *m_pAvatar; |
|
CTFSpectatorGUIHealth *m_pStudentHealth; |
|
|
|
CPanelAnimationVarAliasType( int, m_iTeam1PlayerBaseOffsetX, "team1_player_base_offset_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam1PlayerBaseX, "team1_player_base_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam1PlayerBaseY, "team1_player_base_y", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam2PlayerBaseX, "team2_player_base_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam2PlayerBaseOffsetX, "team2_player_base_offset_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam2PlayerBaseY, "team2_player_base_y", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam1PlayerDeltaX, "team1_player_delta_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam1PlayerDeltaY, "team1_player_delta_y", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam2PlayerDeltaX, "team2_player_delta_x", "0", "proportional_int" ); |
|
CPanelAnimationVarAliasType( int, m_iTeam2PlayerDeltaY, "team2_player_delta_y", "0", "proportional_int" ); |
|
}; |
|
|
|
#endif // TF_SPECTATORGUI_H
|
|
|