1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef HUD_BASEDEATHNOTICE_H
#define HUD_BASEDEATHNOTICE_H
#ifdef _WIN32
#pragma once
#endif
// Player entries in a death notice
struct DeathNoticePlayer
{
DeathNoticePlayer()
{
szName[0] = 0;
iTeam = TEAM_UNASSIGNED;
}
char szName[MAX_PLAYER_NAME_LENGTH*2]; // big enough for player name and additional information
int iTeam; // team #
};
// Contents of each entry in our list of death notices
struct DeathNoticeItem
{
DeathNoticeItem()
{
szIcon[0]=0;
wzInfoText[0]=0;
wzInfoTextEnd[0]=0;
iconDeath = NULL;
iconCritDeath = NULL;
bSelfInflicted = false;
bLocalPlayerInvolved = false;
bCrit = false;
flCreationTime = 0;
iCount = 0;
iWeaponID = -1;
iKillerID = -1;
iVictimID = -1;
iconPreKillerName = NULL;
iconPostKillerName = NULL;
wzPreKillerText[0] = 0;
iconPostVictimName = NULL;
}
float GetExpiryTime();
DeathNoticePlayer Killer;
DeathNoticePlayer Victim;
char szIcon[32]; // name of icon to display
wchar_t wzInfoText[32]; // any additional text to display next to icon
wchar_t wzInfoTextEnd[32]; // any additional text to display next to victim name
CHudTexture *iconDeath;
CHudTexture *iconCritDeath; // crit background icon
CHudTexture *iconPreKillerName;
CHudTexture *iconPostKillerName;
wchar_t wzPreKillerText[32];
CHudTexture *iconPostVictimName;
bool bSelfInflicted;
bool bLocalPlayerInvolved;
bool bCrit;
float flCreationTime;
int iWeaponID;
int iKillerID;
int iVictimID;
int iCount;
};
#define NUM_CORNER_COORD 10
#define NUM_BACKGROUND_COORD NUM_CORNER_COORD*4
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CHudBaseDeathNotice : public CHudElement, public vgui::Panel
{
DECLARE_CLASS_SIMPLE( CHudBaseDeathNotice, vgui::Panel );
public:
CHudBaseDeathNotice( const char *pElementName );
void VidInit( void );
virtual void Init( void );
virtual bool ShouldDraw( void );
virtual void Paint( void );
virtual void ApplySchemeSettings( vgui::IScheme *scheme );
void RetireExpiredDeathNotices( void );
virtual void FireGameEvent( IGameEvent *event );
virtual bool ShouldShowDeathNotice( IGameEvent *event ){ return true; }
protected:
virtual Color GetTeamColor( int iTeamNumber, bool bLocalPlayerInvolved = false );
virtual void OnGameEvent( IGameEvent *event, int iDeathNoticeMsg ) {};
void DrawText( int x, int y, vgui::HFont hFont, Color clr, const wchar_t *szText );
int AddDeathNoticeItem();
void GetBackgroundPolygonVerts( int x0, int y0, int x1, int y1, int iVerts, vgui::Vertex_t vert[] );
void CalcRoundedCorners();
enum EDeathNoticeIconFormat
{
kDeathNoticeIcon_Standard,
kDeathNoticeIcon_Inverted, // used for display on lighter background when kill involved the local player
};
CHudTexture *GetIcon( const char *szIcon, EDeathNoticeIconFormat eIconFormat );
virtual bool EventIsPlayerDeath( const char *eventName );
virtual int UseExistingNotice( IGameEvent *event ) { return -1; }
void GetLocalizedControlPointName( IGameEvent *event, char *namebuf, int namelen );
virtual Color GetInfoTextColor( int iDeathNoticeMsg ){ return Color( 255, 255, 255, 255 ); }
virtual Color GetBackgroundColor ( int iDeathNoticeMsg ) { return m_DeathNotices[iDeathNoticeMsg].bLocalPlayerInvolved ? m_clrLocalBGColor : m_clrBaseBGColor; }
CPanelAnimationVarAliasType( float, m_flLineHeight, "LineHeight", "16", "proportional_float" );
CPanelAnimationVarAliasType( float, m_flLineSpacing, "LineSpacing", "4", "proportional_float" );
CPanelAnimationVarAliasType( float, m_flCornerRadius, "CornerRadius", "3", "proportional_float" );
CPanelAnimationVar( float, m_flMaxDeathNotices, "MaxDeathNotices", "4" );
CPanelAnimationVar( bool, m_bRightJustify, "RightJustify", "1" );
CPanelAnimationVar( vgui::HFont, m_hTextFont, "TextFont", "Default" );
CPanelAnimationVar( Color, m_clrIcon, "IconColor", "255 80 0 255" );
CPanelAnimationVar( Color, m_clrBaseBGColor, "BaseBackgroundColor", "46 43 42 220" );
CPanelAnimationVar( Color, m_clrLocalBGColor, "LocalBackgroundColor", "245 229 196 200" );
CPanelAnimationVar( Color, m_clrKillStreakBg, "KillStreakBackgroundColor", "224 223 219 200" );
CUtlVector<DeathNoticeItem> m_DeathNotices;
Vector2D m_CornerCoord[NUM_CORNER_COORD];
};
#endif // HUD_BASEDEATHNOTICE_H
|