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.

191 lines
5.0 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_HUD_FLAGSTATUS_H
#define TF_HUD_FLAGSTATUS_H
#ifdef _WIN32
#pragma once
#endif
#include "entity_capture_flag.h"
#include "tf_controls.h"
#include "tf_imagepanel.h"
#include "GameEventListener.h"
#include "hudelement.h"
class CCaptureFlag;
class CTFFlagCalloutPanel;
//-----------------------------------------------------------------------------
// Purpose: Draws the rotated arrow panels
//-----------------------------------------------------------------------------
class CTFArrowPanel : public vgui::Panel
{
public:
DECLARE_CLASS_SIMPLE( CTFArrowPanel, vgui::Panel );
CTFArrowPanel( vgui::Panel *parent, const char *name );
virtual void Paint();
virtual bool IsVisible( void );
void SetEntity( EHANDLE hEntity ){ m_hEntity = hEntity; }
float GetAngleRotation( void );
void OnTick( void );
private:
EHANDLE m_hEntity;
CMaterialReference m_RedMaterial;
CMaterialReference m_BlueMaterial;
CMaterialReference m_NeutralMaterial;
CMaterialReference m_NeutralRedMaterial;
CMaterialReference m_RedMaterialNoArrow;
CMaterialReference m_BlueMaterialNoArrow;
bool m_bUseRed;
float m_flNextColorSwitch;
IMaterial *m_pMaterial;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTFFlagStatus : public vgui::EditablePanel
{
public:
DECLARE_CLASS_SIMPLE( CTFFlagStatus, vgui::EditablePanel );
CTFFlagStatus( vgui::Panel *parent, const char *name );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual bool IsVisible( void );
void UpdateStatus( void );
void SetEntity( EHANDLE hEntity )
{
m_hEntity = hEntity;
if ( m_pArrow )
{
m_pArrow->SetEntity( hEntity );
}
UpdateStatus();
}
CBaseEntity *GetEntity( void ){ return m_hEntity.Get(); }
private:
EHANDLE m_hEntity;
CTFArrowPanel *m_pArrow;
CTFImagePanel *m_pStatusIcon;
CTFImagePanel *m_pBriefcase;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTFHudFlagObjectives : public vgui::EditablePanel, public CGameEventListener
{
DECLARE_CLASS_SIMPLE( CTFHudFlagObjectives, vgui::EditablePanel );
public:
CTFHudFlagObjectives( vgui::Panel *parent, const char *name );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual bool IsVisible( void );
virtual void Reset();
void OnTick();
public: // IGameEventListener:
virtual void FireGameEvent( IGameEvent *event );
private:
void UpdateStatus( C_BasePlayer *pNewOwner = NULL, C_BaseEntity *pFlagEntity = NULL );
void SetPlayingToLabelVisible( bool bVisible );
void SetCarriedImage( const char *pchIcon );
private:
vgui::ImagePanel *m_pCarriedImage;
CExLabel *m_pPlayingTo;
vgui::Panel *m_pPlayingToBG;
CTFFlagStatus *m_pRedFlag;
CTFFlagStatus *m_pBlueFlag;
CTFArrowPanel *m_pCapturePoint;
bool m_bFlagAnimationPlayed;
bool m_bCarryingFlag;
vgui::ImagePanel *m_pSpecCarriedImage;
vgui::ImagePanel *m_pPoisonImage;
CExLabel *m_pPoisonTimeLabel;
bool m_bPlayingHybrid_CTF_CP;
bool m_bPlayingSpecialDeliveryMode;
int m_nNumValidFlags;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTFFlagCalloutPanel : public CHudElement, public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CTFFlagCalloutPanel, vgui::EditablePanel );
public:
CTFFlagCalloutPanel( const char *pElementName );
~CTFFlagCalloutPanel( void );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void PerformLayout( void );
virtual void OnTick( void );
virtual void PaintBackground( void );
virtual void Paint( void );
void GetCalloutPosition( const Vector &vecDelta, float flRadius, float *xpos, float *ypos, float *flRotation );
void SetFlag( CCaptureFlag *pFlag, float flDuration, Vector &vecOffset );
static CTFFlagCalloutPanel *AddFlagCalloutIfNotFound( CCaptureFlag *pFlag, float flDuration, Vector &vecLocation );
bool ShouldShowFlagIconToLocalPlayer( void );
void ScaleAndPositionCallout( float flScale = 1.f );
CHandle< CCaptureFlag > m_hFlag;
private:
IMaterial *m_pArrowMaterial;
CTFImagePanel *m_pFlagCalloutPanel;
vgui::Label *m_pFlagValueLabel;
CTFImagePanel *m_pFlagStatusIcon;
float m_flRemoveTime;
float m_flFirstDisplayTime;
Vector m_vecOffset;
int m_iDrawArrow;
bool m_bFlagVisible; // LOS
float m_flPrevScale;
int m_nPanelWideOrig;
int m_nPanelTallOrig;
int m_nLabelWideOrig;
int m_nLabelTallOrig;
int m_nIconWideOrig;
int m_nIconTallOrig;
static CUtlVector< CTFFlagCalloutPanel* > m_FlagCalloutPanels;
};
#endif // TF_HUD_FLAGSTATUS_H