summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/gokz-hud/spectate_text.sp
blob: 9700c38f71948b0f91c8b340d84088920b065526 (plain)
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
/*	
	Responsible for spectator list on the HUD.
*/

#define SPECATATOR_LIST_MAX_COUNT 5

// =====[ PUBLIC ]=====

char[] FormatSpectatorTextForMenu(KZPlayer player, HUDInfo info)
{
	int specCount;
	char spectatorTextString[224];
	if (player.GetHUDOption(HUDOption_ShowSpectators) >= ShowSpecs_Number)
	{
		for (int i = 1; i <= MaxClients; i++)
		{
			if (gI_ObserverTarget[i] == info.ID)
			{
				specCount++;
				if (player.GetHUDOption(HUDOption_ShowSpectators) == ShowSpecs_Full)
				{
					char buffer[64];
					if (specCount < SPECATATOR_LIST_MAX_COUNT)
					{
						GetClientName(i, buffer, sizeof(buffer));
						Format(spectatorTextString, sizeof(spectatorTextString), "%s\n%s", spectatorTextString, buffer);
					}
					else if (specCount == SPECATATOR_LIST_MAX_COUNT)
					{
						StrCat(spectatorTextString, sizeof(spectatorTextString), "\n...");
					}
				}
			}
		}
		if (specCount > 0)
		{			
			if (player.GetHUDOption(HUDOption_ShowSpectators) == ShowSpecs_Full)
			{
				Format(spectatorTextString, sizeof(spectatorTextString), "%t\n ", "Spectator List - Menu (Full)", specCount, spectatorTextString);
			}
			else
			{
				Format(spectatorTextString, sizeof(spectatorTextString), "%t\n ", "Spectator List - Menu (Number)", specCount);
			}
		}
		else
		{
			FormatEx(spectatorTextString, sizeof(spectatorTextString), "");
		}
	}
	return spectatorTextString;
}

char[] FormatSpectatorTextForInfoPanel(KZPlayer player, KZPlayer targetPlayer)
{
	int specCount;
	char spectatorTextString[160];
	if (player.GetHUDOption(HUDOption_ShowSpectators) >= ShowSpecs_Number)
	{
		for (int i = 1; i <= MaxClients; i++)
		{
			if (gI_ObserverTarget[i] == targetPlayer.ID)
			{
				specCount++;
				if (player.GetHUDOption(HUDOption_ShowSpectators) == ShowSpecs_Full)
				{
					char buffer[64];
					if (specCount < SPECATATOR_LIST_MAX_COUNT)
					{
						GetClientName(i, buffer, sizeof(buffer));
						if (specCount == 1)
						{
							Format(spectatorTextString, sizeof(spectatorTextString), "%s", buffer);
						}
						else
						{
							Format(spectatorTextString, sizeof(spectatorTextString), "%s, %s", spectatorTextString, buffer);
						}
					}
					else if (specCount == SPECATATOR_LIST_MAX_COUNT)
					{
						Format(spectatorTextString, sizeof(spectatorTextString), " ...");
					}
				}
			}
		}
		if (specCount > 0)
		{
			if (player.GetHUDOption(HUDOption_ShowSpectators) == ShowSpecs_Full)
			{
				Format(spectatorTextString, sizeof(spectatorTextString), "%t\n", "Spectator List - Info Panel (Full)", specCount, spectatorTextString);
			}
			else
			{
				Format(spectatorTextString, sizeof(spectatorTextString), "%t\n", "Spectator List - Info Panel (Number)", specCount);
			}
		}
		else
		{
			FormatEx(spectatorTextString, sizeof(spectatorTextString), "");
		}
	}
	return spectatorTextString;
}

void UpdateSpecList()
{
	for (int client = 1; client <= MaxClients; client++)
	{
		if (IsValidClient(client) && !IsFakeClient(client))
		{
			gI_ObserverTarget[client] = GetObserverTarget(client);
		}
		else
		{
			gI_ObserverTarget[client] = -1;
		}
	}
}