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.

199 lines
6.3 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_HUD_PASSTIME_H
#define TF_HUD_PASSTIME_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_controls.h"
#include "GameEventListener.h"
namespace vgui { class ContinuousProgressBar; }
class CTFHudPasstimePlayerOffscreenArrow;
//-----------------------------------------------------------------------------
class CTFHudPasstimePanel : public vgui::EditablePanel
{
public:
DECLARE_CLASS_SIMPLE( CTFHudPasstimePanel, vgui::EditablePanel );
CTFHudPasstimePanel( vgui::Panel *pParent, const char *name );
virtual bool IsVisible() OVERRIDE;
};
//-----------------------------------------------------------------------------
class CTFHudTeamScore : public CTFHudPasstimePanel
{
public:
DECLARE_CLASS_SIMPLE( CTFHudTeamScore, CTFHudPasstimePanel );
CTFHudTeamScore( vgui::Panel *pParent );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnTick() OVERRIDE;
private:
int GetTeamScore( int iTeam );
vgui::EditablePanel *m_pPlayingToCluster;
};
//-----------------------------------------------------------------------------
class CTFHudPasstimePassNotify : public CTFHudPasstimePanel
{
public:
DECLARE_CLASS_SIMPLE( CTFHudPasstimePassNotify, CTFHudPasstimePanel );
CTFHudPasstimePassNotify( vgui::Panel *pParent );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnTick() OVERRIDE;
private:
vgui::EditablePanel *m_pTextBox;
vgui::Label *m_pTextInPassRange;
vgui::Label *m_pTextLockedOn;
vgui::Label *m_pTextPassIncoming;
vgui::Label *m_pTextPlayerName;
vgui::ImagePanel *m_pSpeechIndicator;
vgui::ImagePanel *m_pPassLockIndicator;
vgui::IBorder *m_pTextBoxBorderNormal;
vgui::IBorder *m_pTextBoxBorderIncomingRed;
vgui::IBorder *m_pTextBoxBorderIncomingBlu;
};
//-----------------------------------------------------------------------------
class CTFHudPasstimeEventText
{
public:
CTFHudPasstimeEventText();
~CTFHudPasstimeEventText();
void Tick();
void Clear();
void SetControls( vgui::Label *pTitleLabel, vgui::Label *pDetailLabel, vgui::Label *pBonusLabel );
void EnqueueSteal( C_TFPlayer *pAttacker, C_TFPlayer *pVictim );
void EnqueuePass( C_TFPlayer *pThrower, C_TFPlayer *pCatcher );
void EnqueueInterception( C_TFPlayer *pThrower, C_TFPlayer *pCatcher );
void EnqueueScore( C_TFPlayer *pThrower, C_TFPlayer *pAssister );
void EnqueueGeneric( const char *pTitle, const char *pDetail, const char *pBonus );
private:
// this would make more sense as a vgui animation but I need more control than that can reliably give me
enum class State { Idle, In, Show, Out, Pause };
struct QueueElement
{
static const size_t STRLEN_MAX = 128;
QueueElement();
wchar_t title[STRLEN_MAX];
wchar_t detail[STRLEN_MAX];
wchar_t bonus[STRLEN_MAX];
};
void SetPlayerName( C_TFPlayer *pPlayer, const char *pKey );
void SetTeam( C_TFPlayer *pPlayer );
void EnterState( State state, float duration );
void SetAlpha( int ia );
static void SetLabelText( vgui::Label *pLabel, const wchar_t *pText );
void Enqueue( C_TFPlayer *pSource, C_TFPlayer *pSubject, const char *pTitle, const char *pDetail, const char *pBonus );
template< int TArraySize >
void ConstructNewString( const char *pLocTag, wchar_t (&out)[TArraySize] );
bool m_bValid;
CountdownTimer m_displayTimer;
KeyValuesAD m_localizeKeys;
vgui::Label *m_pTitleLabel;
vgui::Label *m_pDetailLabel;
vgui::Label *m_pBonusLabel;
State m_state;
typedef CUtlQueue<QueueElement> Queue;
Queue m_queue;
wchar_t m_pwcsBuf[32];
};
//-----------------------------------------------------------------------------
class CTFArrowPanel;
class C_TFPlayer;
class C_PasstimeBall;
class CTFHudPasstimeOffscreenArrow;
class C_FuncPasstimeGoal;
class CTFHudPasstimeBallStatus : public CTFHudPasstimePanel, public CGameEventListener
{
public:
DECLARE_CLASS_SIMPLE( CTFHudPasstimeBallStatus, CTFHudPasstimePanel );
CTFHudPasstimeBallStatus( vgui::Panel *pParent );
~CTFHudPasstimeBallStatus();
void Reset();
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
virtual void OnTick() OVERRIDE;
private:
static const int NumGoalIcons = 3;
bool m_bInitialized;
bool m_bReset;
bool m_bGoalsFound;
int m_iXBlueProgress;
int m_iXRedProgress;
int m_iYBlueProgress;
int m_iYRedProgress;
vgui::ImagePanel *m_pGoalIconsBlue[NumGoalIcons];
vgui::ImagePanel *m_pGoalIconsRed[NumGoalIcons];
CHandle<C_FuncPasstimeGoal> m_hGoalsBlue[NumGoalIcons];
CHandle<C_FuncPasstimeGoal> m_hGoalsRed[NumGoalIcons];
vgui::ImagePanel *m_pPlayerIcons[MAX_PLAYERS];
vgui::ImagePanel *m_pProgressBall;
vgui::Label *m_pProgressBallCarrierName;
vgui::Panel *m_pProgressLevelBar;
vgui::ImagePanel *m_pSelfPlayerIcon;
CTFHudPasstimeEventText *m_pEventText;
vgui::EditablePanel *m_pPowerCluster;
vgui::Panel *m_pBallPowerMeterFillContainer;
vgui::ImagePanel *m_pBallPowerMeterFill;
vgui::Panel *m_pBallPowerMeterFrame;
vgui::Panel *m_pBallPowerMeterFinalSection;
int m_iBallPowerMeterFillWidth;
int m_iPrevBallPower;
void OnBallFreeSelf( C_TFPlayer *pOwner, C_TFPlayer *pAttacker );
void OnBallFreeOther( C_TFPlayer *pOwner, C_TFPlayer *pAttacker );
void OnBallGetOther( int iPlayer );
void OnBallGetSelf( int iPlayer );
void OnBallScore();
bool TryForceBallFree();
bool TryForceBallGet();
void OnBallGet( int getterIndex );
void UpdateGoalIcon( vgui::ImagePanel *pIcon, C_FuncPasstimeGoal *pGoal );
bool BShouldDraw() const;
void OnTickVisible( C_TFPlayer *pLocalPlayer, C_PasstimeBall *pBall);
void OnTickHidden();
void HideGoalIcons();
};
//-----------------------------------------------------------------------------
class CTFHudPasstime : public CTFHudPasstimePanel
{
public:
DECLARE_CLASS_SIMPLE( CTFHudPasstime, CTFHudPasstimePanel );
CTFHudPasstime( vgui::Panel *pParent );
~CTFHudPasstime();
void Reset();
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnTick() OVERRIDE;
private:
CTFHudPasstimeBallStatus *m_pBallStatus;
CTFHudTeamScore *m_pTeamScore;
CTFHudPasstimeOffscreenArrow *m_pBallOffscreenArrow;
CTFHudPasstimePassNotify *m_pPassNotify;
CTFHudPasstimePlayerOffscreenArrow *m_pPlayerArrows[MAX_PLAYERS];
};
#endif // TF_HUD_PASSTIME_H