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.
295 lines
6.7 KiB
295 lines
6.7 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef TF_HUD_ESCORT_H
|
||
|
#define TF_HUD_ESCORT_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include <vgui_controls/EditablePanel.h>
|
||
|
#include <vgui_controls/ImagePanel.h>
|
||
|
#include "tf_controls.h"
|
||
|
#include "GameEventListener.h"
|
||
|
#include "c_tf_objective_resource.h"
|
||
|
#include "IconPanel.h"
|
||
|
#include "hud_controlpointicons.h"
|
||
|
#include "tf_gamerules.h"
|
||
|
#include "proxyentity.h"
|
||
|
#include "materialsystem/imaterial.h"
|
||
|
#include "materialsystem/imaterialvar.h"
|
||
|
|
||
|
class CEscortHillPanel : public vgui::Panel, public CGameEventListener
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CEscortHillPanel, vgui::Panel );
|
||
|
public:
|
||
|
CEscortHillPanel( vgui::Panel *parent, const char *name );
|
||
|
|
||
|
virtual void Paint( void );
|
||
|
virtual void PerformLayout( void );
|
||
|
|
||
|
void SetHillNumber( int nHill ){ m_nHill = nHill; }
|
||
|
void SetTeamNumber( int nTeam ){ m_nTeam = nTeam; }
|
||
|
|
||
|
virtual void OnTick( void );
|
||
|
|
||
|
public: // CGameEventListener:
|
||
|
virtual void FireGameEvent( IGameEvent *event );
|
||
|
|
||
|
private:
|
||
|
void UpdateHillAnimations( bool bOnHill );
|
||
|
|
||
|
private:
|
||
|
int m_iTexture;
|
||
|
int m_nHill; // hill number this panel represents
|
||
|
int m_nTeam;
|
||
|
|
||
|
bool m_bOnHill;
|
||
|
bool m_bFadingOut;
|
||
|
|
||
|
float m_flUVScroll;
|
||
|
float m_flUVW;
|
||
|
int m_nPanelWide;
|
||
|
int m_nPanelTall;
|
||
|
int m_bDownhill;
|
||
|
};
|
||
|
|
||
|
class CEscortStatusTeardrop : public vgui::EditablePanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CEscortStatusTeardrop, vgui::EditablePanel );
|
||
|
public:
|
||
|
CEscortStatusTeardrop(Panel *parent);
|
||
|
|
||
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||
|
virtual bool IsVisible( void );
|
||
|
|
||
|
void SetupForPoint( int iCPIndex );
|
||
|
void UpdateBarText( int iCPIndex );
|
||
|
|
||
|
private:
|
||
|
vgui::Label *m_pBarText;
|
||
|
CIconPanel *m_pTeardrop;
|
||
|
CIconPanel *m_pBlocked;
|
||
|
vgui::ImagePanel *m_pCapping;
|
||
|
int m_iOrgHeight;
|
||
|
int m_iMidGroupIndex;
|
||
|
};
|
||
|
|
||
|
class CTFHudEscortProgressBar : public vgui::ImagePanel
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS_SIMPLE( CTFHudEscortProgressBar, vgui::ImagePanel );
|
||
|
|
||
|
CTFHudEscortProgressBar( vgui::Panel *parent, const char *name );
|
||
|
|
||
|
virtual void Paint();
|
||
|
void SetPercentage( float flPercentage ){ m_flPercent = flPercentage; }
|
||
|
|
||
|
void SetTeam( int nTeam );
|
||
|
|
||
|
private:
|
||
|
|
||
|
float m_flPercent;
|
||
|
int m_iTexture;
|
||
|
int m_nTeam;
|
||
|
};
|
||
|
|
||
|
class CSimpleControlPoint : public vgui::ImagePanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CSimpleControlPoint, vgui::ImagePanel );
|
||
|
public:
|
||
|
|
||
|
CSimpleControlPoint(Panel *parent, const char *name, int index) : vgui::ImagePanel( parent, name )
|
||
|
{
|
||
|
SetShouldScaleImage( true );
|
||
|
m_iCPIndex = index;
|
||
|
m_bForceOpaque = false;
|
||
|
}
|
||
|
|
||
|
virtual bool IsVisible( void )
|
||
|
{
|
||
|
if ( IsInFreezeCam() == true )
|
||
|
return false;
|
||
|
|
||
|
return BaseClass::IsVisible();
|
||
|
}
|
||
|
|
||
|
void SetCPIndex( int index )
|
||
|
{
|
||
|
m_iCPIndex = index;
|
||
|
}
|
||
|
|
||
|
void UpdateImage( void )
|
||
|
{
|
||
|
int iOwner = ObjectiveResource()->GetOwningTeam( m_iCPIndex );
|
||
|
bool bMultipleTrains = ( TFGameRules() && TFGameRules()->HasMultipleTrains() ) ? true : false;
|
||
|
|
||
|
const char *szMatName = "";
|
||
|
switch ( iOwner )
|
||
|
{
|
||
|
case TF_TEAM_BLUE:
|
||
|
if ( !bMultipleTrains && !m_bForceOpaque )
|
||
|
{
|
||
|
szMatName = "hud/cart_point_blue";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
szMatName = "hud/cart_point_blue_opaque";
|
||
|
}
|
||
|
break;
|
||
|
case TF_TEAM_RED:
|
||
|
if ( !bMultipleTrains && !m_bForceOpaque )
|
||
|
{
|
||
|
szMatName = "hud/cart_point_red";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
szMatName = "hud/cart_point_red_opaque";
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
if ( !bMultipleTrains && !m_bForceOpaque )
|
||
|
{
|
||
|
szMatName = "hud/cart_point_neutral";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
szMatName = "hud/cart_point_neutral_opaque";
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
SetImage( VarArgs("..\\%s", szMatName ) );
|
||
|
}
|
||
|
|
||
|
int GetCapIndex( void ) { return m_iCPIndex; }
|
||
|
void SetForceOpaqueImages( bool state )
|
||
|
{
|
||
|
m_bForceOpaque = state;
|
||
|
UpdateImage();
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
int m_iCPIndex;
|
||
|
bool m_bForceOpaque;
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CTFHudEscort : public vgui::EditablePanel, public CGameEventListener
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CTFHudEscort, vgui::EditablePanel );
|
||
|
|
||
|
public:
|
||
|
|
||
|
CTFHudEscort( vgui::Panel *parent, const char *name );
|
||
|
~CTFHudEscort();
|
||
|
|
||
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||
|
virtual void PerformLayout();
|
||
|
virtual bool IsVisible( void );
|
||
|
virtual void Reset(){ m_iCurrentCP = -1; }
|
||
|
void OnTick();
|
||
|
|
||
|
void UpdateCPImages( void );
|
||
|
void UpdateStatusTeardropFor( int iIndex );
|
||
|
|
||
|
void SetTeam( int nTeam )
|
||
|
{
|
||
|
m_nTeam = nTeam;
|
||
|
if ( m_pProgressBar )
|
||
|
{
|
||
|
m_pProgressBar->SetTeam( m_nTeam );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SetTopPanel( bool bTopPanel )
|
||
|
{
|
||
|
m_bTopPanel = bTopPanel;
|
||
|
}
|
||
|
|
||
|
public: // CGameEventListener:
|
||
|
virtual void FireGameEvent( IGameEvent *event );
|
||
|
|
||
|
private:
|
||
|
void UpdateAlarmAnimations( void );
|
||
|
|
||
|
private:
|
||
|
int m_iSpeedLevel; // how fast is the escorted object moving
|
||
|
float m_flProgress; // left to right progress percent
|
||
|
CInterpolatedVar<float> m_flProgressHistory;
|
||
|
|
||
|
vgui::EditablePanel *m_pEscortItemPanel;
|
||
|
|
||
|
CUtlVector<CSimpleControlPoint *> m_Icons;
|
||
|
bool m_bHaveValidPointPositions;
|
||
|
|
||
|
vgui::ImagePanel *m_pSpeedBackwards;
|
||
|
|
||
|
vgui::ImagePanel *m_pCapPlayerImage;
|
||
|
CExLabel *m_pCapNumPlayers;
|
||
|
vgui::ImagePanel *m_pBlocked;
|
||
|
|
||
|
vgui::ImagePanel *m_pCPTemplate;
|
||
|
|
||
|
vgui::ImagePanel *m_pLevelBar;
|
||
|
|
||
|
CEscortStatusTeardrop *m_pStatus;
|
||
|
int m_iCurrentCP;
|
||
|
|
||
|
CControlPointIconSwoop *m_pHilightSwoop;
|
||
|
bool m_bShowSwoop;
|
||
|
|
||
|
float m_flRecedeTime;
|
||
|
|
||
|
vgui::ImagePanel *m_pEscortItemImage;
|
||
|
vgui::ImagePanel *m_pEscortItemImageBottom;
|
||
|
vgui::ImagePanel *m_pHomeCPIcon;
|
||
|
|
||
|
int m_nTeam;
|
||
|
|
||
|
bool m_bMultipleTrains; // stored to compare against what TFGamerules says...
|
||
|
|
||
|
int m_iBlueMaterialIndex; // blue material for multiple tracks colored overlay
|
||
|
int m_iRedMaterialIndex; // red material for multiple tracks colored overlay
|
||
|
|
||
|
CTFHudEscortProgressBar *m_pProgressBar;
|
||
|
CEscortHillPanel *m_pHillPanels[TEAM_TRAIN_MAX_HILLS];
|
||
|
|
||
|
vgui::ImagePanel *m_pEscortItemImageAlert;
|
||
|
bool m_bAlarm;
|
||
|
bool m_bTopPanel;
|
||
|
|
||
|
int m_nNumHills;
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CTFHudMultipleEscort : public vgui::EditablePanel, public CGameEventListener
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CTFHudMultipleEscort, vgui::EditablePanel );
|
||
|
|
||
|
public:
|
||
|
CTFHudMultipleEscort( vgui::Panel *parent, const char *name );
|
||
|
~CTFHudMultipleEscort();
|
||
|
|
||
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||
|
virtual void SetVisible( bool state );
|
||
|
virtual void Reset();
|
||
|
|
||
|
public: // IGameEventListener Interface
|
||
|
virtual void FireGameEvent( IGameEvent * event );
|
||
|
|
||
|
private:
|
||
|
CTFHudEscort *m_pBluePanel;
|
||
|
CTFHudEscort *m_pRedPanel;
|
||
|
};
|
||
|
|
||
|
#endif // TF_HUD_ESCORT_H
|