Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

141 lines
4.8 KiB

5 years ago
//========= 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