KF2-YetAnotherScoreboard/YAS/Classes/KFScoreBoard.uc

953 lines
28 KiB
Ucode
Raw Normal View History

2021-05-31 01:46:53 +00:00
class KFScoreBoard extends KFGUI_Page
dependson(Types);
2020-01-10 13:14:11 +00:00
2021-06-12 20:11:37 +00:00
`include(Build.uci)
`include(Logger.uci)
2021-07-05 03:02:30 +00:00
var transient float HealthXPos, ArmorXPos, RankXPos, PlayerXPos, LevelXPos, PerkXPos, DoshXPos, KillsXPos, AssistXPos, PingXPos;
var transient float HealthWBox, ArmorWBox, RankWBox, PlayerWBox, LevelWBox, PerkWBox, DoshWBox, KillsWBox, AssistWBox, PingWBox;
2020-01-10 13:14:11 +00:00
var transient float NextScoreboardRefresh;
2021-07-05 03:02:30 +00:00
var transient int NumPlayer;
2020-01-10 13:14:11 +00:00
var int PlayerIndex;
var KFGUI_List PlayersList;
var Texture2D DefaultAvatar;
var KFGameReplicationInfo KFGRI;
2021-06-13 03:17:40 +00:00
var array<KFPlayerReplicationInfo> KFPRIArray;
2020-01-10 13:14:11 +00:00
var KFPlayerController OwnerPC;
var Color PingColor;
2021-06-13 02:29:47 +00:00
var float PingBars;
2020-01-10 13:14:11 +00:00
// Cache
var array<String> PerkNames;
2021-07-05 03:02:30 +00:00
var array<String> StateVariants;
2021-06-08 21:21:28 +00:00
// Ranks
2021-06-13 03:17:40 +00:00
var array<RankInfo> CustomRanks;
var array<UIDRankRelation> RankRelations;
2021-05-31 01:46:53 +00:00
2021-06-20 20:09:12 +00:00
var YASSettings Settings;
2021-05-31 01:46:53 +00:00
2021-06-13 04:47:54 +00:00
// Localization
var localized string Players;
var localized string Spectators;
var localized string Rank;
var localized string State;
var localized string NoPerk;
var localized string Ready;
var localized string NotReady;
var localized string Unknown;
var localized string Dead;
2020-01-10 13:14:11 +00:00
function InitMenu()
{
`callstack();
Super.InitMenu();
PlayersList = KFGUI_List(FindComponentID('PlayerList'));
OwnerPC = KFPlayerController(GetPlayer());
2021-07-05 03:02:30 +00:00
// TODO: Remove this crunch
if (PerkNames.Length == 0)
{
PerkNames.AddItem(class'KFGFxMenu_Inventory'.default.PerkFilterString);
PerkNames.AddItem(class'KFPerk_Berserker'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Commando'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Support'.default.PerkName);
PerkNames.AddItem(class'KFPerk_FieldMedic'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Demolitionist'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Firebug'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Gunslinger'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Sharpshooter'.default.PerkName);
PerkNames.AddItem(class'KFPerk_SWAT'.default.PerkName);
PerkNames.AddItem(class'KFPerk_Survivalist'.default.PerkName);
}
2021-07-05 03:02:30 +00:00
if (StateVariants.Length == 0)
{
StateVariants.AddItem(State);
StateVariants.AddItem(Ready);
StateVariants.AddItem(NotReady);
StateVariants.AddItem(Unknown);
StateVariants.AddItem(Dead);
StateVariants.AddItem("ABCDABCD");
}
2020-01-10 13:14:11 +00:00
}
static function CheckAvatar(KFPlayerReplicationInfo KFPRI, KFPlayerController PC)
{
local Texture2D Avatar;
2021-06-13 02:53:33 +00:00
if (KFPRI.Avatar == None || KFPRI.Avatar == default.DefaultAvatar)
{
Avatar = FindAvatar(PC, KFPRI.UniqueId);
2021-06-13 02:53:33 +00:00
if (Avatar == None)
Avatar = default.DefaultAvatar;
KFPRI.Avatar = Avatar;
}
2020-01-10 13:14:11 +00:00
}
2021-06-13 03:00:19 +00:00
delegate bool InOrder(KFPlayerReplicationInfo P1, KFPlayerReplicationInfo P2)
2020-01-10 13:14:11 +00:00
{
2021-06-13 02:53:33 +00:00
if (P1 == None || P2 == None)
return true;
2021-06-13 02:53:33 +00:00
if (P1.GetTeamNum() < P2.GetTeamNum())
return false;
2021-06-13 02:53:33 +00:00
if (P1.Kills == P2.Kills)
{
2021-06-13 02:53:33 +00:00
if (P1.Assists == P2.Assists)
return true;
return P1.Assists < P2.Assists;
}
return P1.Kills < P2.Kills;
2020-01-10 13:14:11 +00:00
}
2021-06-07 01:30:04 +00:00
function string WaveText()
{
local int CurrentWaveNum;
CurrentWaveNum = KFGRI.WaveNum;
2021-06-13 02:53:33 +00:00
if (KFGRI.IsBossWave())
2021-06-07 01:30:04 +00:00
{
return class'KFGFxHUD_WaveInfo'.default.BossWaveString;
}
else if (KFGRI.IsFinalWave())
{
return class'KFGFxHUD_ScoreboardMapInfoContainer'.default.FinalString;
}
else
{
if (KFGRI.default.bEndlessMode)
{
return "" $ CurrentWaveNum;
}
else
{
return CurrentWaveNum $ " / " $ KFGRI.GetFinalWaveNum();
}
}
}
2020-01-10 13:14:11 +00:00
function DrawMenu()
{
local string S;
local PlayerController PC;
local KFPlayerReplicationInfo KFPRI;
local PlayerReplicationInfo PRI;
2021-07-05 03:02:30 +00:00
local float XPos, YPos, YL, XL, FontScalar, XPosCenter, BoxW, BoxX, BoxH, MinBoxW, DoshSize, ScrollBarWidth;
local int i, j, NumSpec, NumAlivePlayer, Width;
2021-06-07 01:30:04 +00:00
local float BorderSize;
2021-07-05 03:02:30 +00:00
local ColorRGBA ColorTmp;
PC = GetPlayer();
2021-06-13 02:53:33 +00:00
if (KFGRI == None)
{
KFGRI = KFGameReplicationInfo(PC.WorldInfo.GRI);
2021-06-13 02:53:33 +00:00
if (KFGRI == None)
return;
}
// Sort player list.
2021-06-13 02:53:33 +00:00
if (NextScoreboardRefresh < PC.WorldInfo.TimeSeconds)
{
NextScoreboardRefresh = PC.WorldInfo.TimeSeconds + 0.1;
2021-06-13 02:53:33 +00:00
for (i=(KFGRI.PRIArray.Length-1); i > 0; --i)
{
2021-06-13 02:53:33 +00:00
for (j=i-1; j >= 0; --j)
{
2021-06-13 02:54:35 +00:00
if (!InOrder(KFPlayerReplicationInfo(KFGRI.PRIArray[i]), KFPlayerReplicationInfo(KFGRI.PRIArray[j])))
{
PRI = KFGRI.PRIArray[i];
KFGRI.PRIArray[i] = KFGRI.PRIArray[j];
KFGRI.PRIArray[j] = PRI;
}
}
}
}
// Check players.
PlayerIndex = -1;
NumPlayer = 0;
2021-06-13 02:53:33 +00:00
for (i=(KFGRI.PRIArray.Length-1); i >= 0; --i)
{
KFPRI = KFPlayerReplicationInfo(KFGRI.PRIArray[i]);
2021-06-13 02:53:33 +00:00
if (KFPRI == None)
continue;
2021-06-13 02:53:33 +00:00
if (KFPRI.bOnlySpectator)
{
++NumSpec;
continue;
}
2021-06-13 02:53:33 +00:00
if (KFPRI.PlayerHealth > 0 && KFPRI.PlayerHealthPercent > 0 && KFPRI.GetTeamNum() == 0)
++NumAlivePlayer;
++NumPlayer;
}
KFPRIArray.Length = NumPlayer;
j = KFPRIArray.Length;
2021-06-13 02:53:33 +00:00
for (i=(KFGRI.PRIArray.Length-1); i >= 0; --i)
{
KFPRI = KFPlayerReplicationInfo(KFGRI.PRIArray[i]);
2021-06-13 02:53:33 +00:00
if (KFPRI != None && !KFPRI.bOnlySpectator)
{
KFPRIArray[--j] = KFPRI;
2021-06-13 02:53:33 +00:00
if (KFPRI == PC.PlayerReplicationInfo)
PlayerIndex = j;
}
}
Canvas.Font = Owner.CurrentStyle.PickFont(FontScalar);
2021-06-07 01:30:04 +00:00
Canvas.TextSize("ABC", XL, YL, FontScalar, FontScalar);
BorderSize = Owner.HUDOwner.ScaledBorderSize;
// Server Info
2021-06-23 17:45:32 +00:00
XPosCenter = Canvas.ClipX * 0.5;
2021-06-07 01:30:04 +00:00
Width = Canvas.ClipX * 0.4; // Full Box Width
2021-06-23 17:45:32 +00:00
XPos = XPosCenter - Width * 0.5;
2021-06-07 01:30:04 +00:00
YPos = YL;
BoxW = Width;
BoxX = XPos;
BoxH = YL + BorderSize;
// Top Rect (Server name)
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.ServerNameBoxColor);
2021-06-13 08:36:10 +00:00
Owner.CurrentStyle.DrawRectBox(BoxX, YPos, BoxW, BoxH, Settings.Style.EdgeSize, Settings.Style.ShapeServerNameBox);
2021-06-07 01:30:04 +00:00
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.ServerNameTextColor);
S = KFGRI.ServerName;
2021-06-07 01:30:04 +00:00
DrawTextShadowHVCenter(S, BoxX, YPos, BoxW, FontScalar);
2021-06-07 01:30:04 +00:00
YPos += BoxH;
// Mid Left Rect (Info)
BoxW = Width * 0.7;
BoxH = YL * 2 + BorderSize * 2;
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.GameInfoBoxColor);
2021-06-13 08:36:10 +00:00
Owner.CurrentStyle.DrawRectBox(BoxX, YPos, BoxW, BoxH, Settings.Style.EdgeSize, Settings.Style.ShapeGameInfoBox);
2021-06-07 01:30:04 +00:00
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.GameInfoTextColor);
2021-06-07 01:30:04 +00:00
S = class'KFCommon_LocalizedStrings'.static.GetFriendlyMapName(PC.WorldInfo.GetMapName(true));
2021-06-13 08:36:10 +00:00
DrawTextShadowHLeftVCenter(S, BoxX + Settings.Style.EdgeSize, YPos, FontScalar);
2021-06-07 01:30:04 +00:00
2021-06-09 02:47:15 +00:00
S = KFGRI.GameClass.default.GameName $ " - " $ class'KFCommon_LocalizedStrings'.Static.GetDifficultyString(KFGRI.GameDifficulty);
2021-06-13 08:36:10 +00:00
DrawTextShadowHLeftVCenter(S, BoxX + Settings.Style.EdgeSize, YPos + YL, FontScalar);
2021-06-07 01:30:04 +00:00
// Mid Right Rect (Wave)
BoxX = BoxX + BoxW;
BoxW = Width - BoxW;
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.WaveBoxColor);
2021-06-13 08:36:10 +00:00
Owner.CurrentStyle.DrawRectBox(BoxX, YPos, BoxW, BoxH, Settings.Style.EdgeSize, Settings.Style.ShapeWaveInfoBox);
2021-06-07 01:30:04 +00:00
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.WaveTextColor);
2021-06-07 01:30:04 +00:00
S = class'KFGFxHUD_ScoreboardMapInfoContainer'.default.WaveString;
DrawTextShadowHVCenter(S, BoxX, YPos, BoxW, FontScalar);
DrawTextShadowHVCenter(WaveText(), BoxX, YPos + YL, BoxW, FontScalar);
YPos += BoxH;
// Bottom Rect (Players count)
BoxX = XPos;
BoxW = Width;
BoxH = YL + BorderSize;
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.PlayerCountBoxColor);
2021-06-13 08:36:10 +00:00
Owner.CurrentStyle.DrawRectBox(BoxX, YPos, BoxW, BoxH, Settings.Style.EdgeSize, Settings.Style.ShapePlayersCountBox);
2021-06-07 01:30:04 +00:00
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.PlayerCountTextColor);
2021-06-13 04:47:54 +00:00
S = Players$": " $ NumPlayer $ " / " $ KFGRI.MaxHumanCount $ " " $ Spectators $ ": " $ NumSpec;
Canvas.TextSize(S, XL, YL, FontScalar, FontScalar);
2021-06-13 08:36:10 +00:00
DrawTextShadowHLeftVCenter(S, BoxX + Settings.Style.EdgeSize, YPos, FontScalar);
2021-06-07 01:30:04 +00:00
S = Owner.CurrentStyle.GetTimeString(KFGRI.ElapsedTime);
DrawTextShadowHVCenter(S, XPos + Width * 0.7, YPos, Width * 0.3, FontScalar);
// TODO: ranked / unranked
//if (KFGameInfo(PC.WorldInfo.Game).IsUnrankedGame())
// S = class'KFGFxMenu_ServerBrowser'.default.UnrankedString;
//else
// S = class'KFGFxMenu_ServerBrowser'.default.RankedString;
//DrawTextShadowHVCenter(S, XPos + XL, YPos, Width * 0.7 + XL, FontScalar);
YPos += BoxH;
2021-06-07 01:30:04 +00:00
// Header
2021-06-13 02:29:47 +00:00
Width = Canvas.ClipX * 0.7;
XPos = (Canvas.ClipX - Width) * 0.5;
2021-06-07 01:30:04 +00:00
YPos += YL;
BoxH = YL + BorderSize;
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.ListHeaderBoxColor);
2021-07-05 03:02:30 +00:00
Owner.CurrentStyle.DrawRectBox( XPos - BorderSize * 2,
2021-06-06 21:22:24 +00:00
YPos,
2021-06-07 01:30:04 +00:00
Width + BorderSize * 4,
2021-06-06 21:22:24 +00:00
BoxH,
2021-06-13 08:36:10 +00:00
Settings.Style.EdgeSize,
2021-06-13 07:00:31 +00:00
Settings.Style.ShapeHeaderBox);
// Calc X offsets
2021-06-13 05:38:44 +00:00
MinBoxW = Width * 0.07; // minimum width for column
2021-07-05 03:02:30 +00:00
// Health
HealthXPos = 0;
BoxW = 0;
foreach StateVariants(S)
{
Canvas.TextSize(S, XL, YL, FontScalar, FontScalar);
if (XL > BoxW) BoxW = XL;
}
HealthWBox = (BoxW < MinBoxW ? MinBoxW : BoxW) * 0.5 + BorderSize * 2;
// Armor
ArmorXPos = HealthXPos + HealthWBox;
ArmorWBox = HealthWBox;
2021-06-13 05:38:44 +00:00
2021-07-05 03:02:30 +00:00
RankXPos = ArmorXPos + ArmorWBox + Settings.Style.EdgeSize;
2021-06-13 05:38:44 +00:00
2021-07-05 03:02:30 +00:00
PlayerXPos = Width * 0.30; // TODO
Canvas.TextSize(class'KFGFxHUD_ScoreboardWidget'.default.PingString$" ", XL, YL, FontScalar, FontScalar);
PingWBox = XL < MinBoxW ? MinBoxW : XL;
if (NumPlayer <= 16) // TODO: Replace hardcoded 16
ScrollBarWidth = 0;
else
ScrollBarWidth = BorderSize * 8;
PingXPos = Width - PingWBox - ScrollBarWidth;
2021-06-13 05:38:44 +00:00
Canvas.TextSize(class'KFGFxHUD_ScoreboardWidget'.default.AssistsString$" ", XL, YL, FontScalar, FontScalar);
2021-07-05 03:02:30 +00:00
AssistWBox = XL < MinBoxW ? MinBoxW : XL;
AssistXPos = PingXPos - AssistWBox;
2021-06-13 05:38:44 +00:00
Canvas.TextSize(class'KFGFxHUD_ScoreboardWidget'.default.KillsString$" ", XL, YL, FontScalar, FontScalar);
2021-07-05 03:02:30 +00:00
KillsWBox = XL < MinBoxW ? MinBoxW : XL;
KillsXPos = AssistXPos - KillsWBox;
2021-06-13 05:38:44 +00:00
Canvas.TextSize(class'KFGFxHUD_ScoreboardWidget'.default.DoshString$" ", XL, YL, FontScalar, FontScalar);
2021-06-14 21:02:32 +00:00
Canvas.TextSize("999999", DoshSize, YL, FontScalar, FontScalar);
2021-07-05 03:02:30 +00:00
DoshWBox = XL < DoshSize ? DoshSize : XL;
DoshXPos = KillsXPos - DoshWBox;
BoxW = 0;
foreach PerkNames(S)
{
2021-06-14 21:02:32 +00:00
Canvas.TextSize(S$"A", XL, YL, FontScalar, FontScalar);
if (XL > BoxW) BoxW = XL;
}
2021-07-05 03:02:30 +00:00
PerkWBox = BoxW < MinBoxW ? MinBoxW : BoxW;
PerkXPos = DoshXPos - PerkWBox;
2021-06-13 05:38:44 +00:00
2021-06-14 21:02:32 +00:00
Canvas.TextSize("000", XL, YL, FontScalar, FontScalar);
2021-07-05 03:02:30 +00:00
LevelWBox = XL;
LevelXPos = PerkXPos - LevelWBox;
// Header texts
2021-06-09 00:58:31 +00:00
SetDrawColor(Canvas, Settings.Style.ListHeaderTextColor);
2021-06-13 04:47:54 +00:00
DrawTextShadowHLeftVCenter(Rank, XPos + RankXPos, YPos, FontScalar);
2021-05-25 00:45:49 +00:00
DrawTextShadowHLeftVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PlayerString, XPos + PlayerXPos, YPos, FontScalar);
DrawTextShadowHLeftVCenter(class'KFGFxMenu_Inventory'.default.PerkFilterString, XPos + PerkXPos, YPos, FontScalar);
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.KillsString, XPos + KillsXPos, YPos, KillsWBox, FontScalar);
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.AssistsString, XPos + AssistXPos, YPos, AssistWBox, FontScalar);
2021-07-05 03:02:30 +00:00
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.DoshString, XPos + DoshXPos, YPos, DoshWBox, FontScalar);
2021-05-25 00:45:49 +00:00
DrawTextShadowHVCenter(class'KFGFxHUD_ScoreboardWidget'.default.PingString, XPos + PingXPos, YPos, PingWBox, FontScalar);
2021-07-05 03:02:30 +00:00
ColorTmp = Settings.Style.ListHeaderTextColor;
ColorTmp.A = 150;
SetDrawColor(Canvas, ColorTmp);
DrawHealthIcon(XPos + HealthXPos, YPos, HealthWBox, BoxH);
DrawArmorIcon(XPos + ArmorXPos, YPos, ArmorWBox, BoxH);
PlayersList.XPosition = ((Canvas.ClipX - Width) * 0.5) / InputPos[2];
2021-06-07 01:30:04 +00:00
PlayersList.YPosition = (YPos + YL + BorderSize * 4) / InputPos[3];
PlayersList.YSize = (1.f - PlayersList.YPosition) - 0.15;
PlayersList.ChangeListSize(KFPRIArray.Length);
}
2021-07-05 03:02:30 +00:00
function DrawHealthIcon(float X, float Y, float W, float H)
{
local float XPos, YPos, Size, Part;
Size = H * 0.65;
Part = Size / 3;
XPos = X + (W * 0.5 - Part * 0.5);
YPos = Y + (H * 0.5 - Size * 0.5);
Owner.CurrentStyle.DrawRectBox(XPos, YPos, Part, Part, 4, 100);
XPos = X + (W * 0.5 - Size * 0.5);
YPos = Y + (H * 0.5 - Part * 0.5);
Owner.CurrentStyle.DrawRectBox(XPos, YPos, Size, Part, 4, 100);
XPos = X + (W * 0.5 - Part * 0.5);
YPos = Y + (H * 0.5 + Part * 0.5);
Owner.CurrentStyle.DrawRectBox(XPos, YPos, Part, Part, 4, 100);
}
function DrawArmorIcon(float X, float Y, float W, float H)
{
local float XPos, YPos, Size;
local int Edge;
Edge = 6;
Size = H * 0.65;
XPos = X + (W * 0.5 - Size * 0.5);
YPos = Y + (H * 0.5 - Size * 0.5);
Owner.CurrentStyle.DrawRectBox(XPos, YPos, Size, Size, Edge, 252);
}
2021-05-25 00:45:49 +00:00
function DrawTextShadowHVCenter(string Str, float XPos, float YPos, float BoxWidth, float FontScalar)
{
local float TextWidth;
local float TextHeight;
Canvas.TextSize(Str, TextWidth, TextHeight, FontScalar, FontScalar);
2021-05-16 20:29:34 +00:00
Owner.CurrentStyle.DrawTextShadow(Str, XPos + (BoxWidth - TextWidth)/2 , YPos, 1, FontScalar);
}
2021-05-25 00:45:49 +00:00
function DrawTextShadowHLeftVCenter(string Str, float XPos, float YPos, float FontScalar)
{
2021-05-16 20:28:37 +00:00
Owner.CurrentStyle.DrawTextShadow(Str, XPos, YPos, 1, FontScalar);
2020-01-10 13:14:11 +00:00
}
2021-06-07 01:30:04 +00:00
function DrawTextShadowHRightVCenter(string Str, float XPos, float YPos, float BoxWidth, float FontScalar)
{
local float TextWidth;
local float TextHeight;
Canvas.TextSize(Str, TextWidth, TextHeight, FontScalar, FontScalar);
Owner.CurrentStyle.DrawTextShadow(Str, XPos + BoxWidth - TextWidth, YPos, 1, FontScalar);
}
2021-06-08 23:43:00 +00:00
function SetDrawColor(Canvas C, ColorRGBA RGBA)
2021-06-08 23:22:35 +00:00
{
2021-06-08 23:43:00 +00:00
C.SetDrawColor(RGBA.R, RGBA.G, RGBA.B, RGBA.A);
2021-06-08 23:22:35 +00:00
}
2021-06-13 03:00:19 +00:00
function DrawPlayerEntry(Canvas C, int Index, float YOffset, float Height, float Width, bool bFocus)
2020-01-10 13:14:11 +00:00
{
local string S, StrValue;
local float FontScalar, TextYOffset, XL, YL, PerkIconPosX, PerkIconPosY, PerkIconSize, PrestigeIconScale;
2021-06-14 21:02:32 +00:00
local float XPos, BoxWidth, RealPlayerWBox;
local KFPlayerReplicationInfo KFPRI;
2021-07-05 03:02:30 +00:00
local KFPlayerController KFPC;
local KFPawn_Human KFPH;
local byte Level, PrestigeLevel;
local bool bIsZED;
local int Ping;
2021-05-31 01:46:53 +00:00
2021-06-08 21:21:28 +00:00
local RankInfo CurrentRank;
local bool HasRank;
local int PlayerInfoIndex, PlayerRankIndex;
2021-07-05 03:02:30 +00:00
local float BorderSize;
2021-07-11 19:36:55 +00:00
local int Shape, ShapeHealth, ShapeArmor;
local int Health, MaxHealth;
2021-07-05 03:02:30 +00:00
local int Armor, MaxArmor;
2021-07-11 19:36:55 +00:00
local string TextHealth, TextArmor, TextState;
2021-07-05 03:02:30 +00:00
2021-07-05 04:20:53 +00:00
local ColorRGBA HealthBoxColor, ArmorBoxColor, HealthTextColor, ArmorTextColor;
2021-07-05 03:02:30 +00:00
BorderSize = Owner.HUDOwner.ScaledBorderSize;
YOffset *= 1.05;
KFPRI = KFPRIArray[Index];
2021-05-31 01:46:53 +00:00
2021-06-08 21:21:28 +00:00
HasRank = false;
2021-06-13 01:57:20 +00:00
2021-06-12 18:44:20 +00:00
PlayerInfoIndex = RankRelations.Find('UID', KFPRI.UniqueId);
2021-06-13 01:57:20 +00:00
if (PlayerInfoIndex != INDEX_NONE && RankRelations[PlayerInfoIndex].RankID != INDEX_NONE)
2021-05-31 01:46:53 +00:00
{
2021-06-12 18:44:20 +00:00
PlayerRankIndex = CustomRanks.Find('ID', RankRelations[PlayerInfoIndex].RankID);
2021-06-08 21:21:28 +00:00
if (PlayerRankIndex != INDEX_NONE)
2021-05-31 01:46:53 +00:00
{
2021-06-08 21:21:28 +00:00
HasRank = true;
2021-06-08 21:48:03 +00:00
CurrentRank = CustomRanks[PlayerRankIndex];
2021-05-31 01:46:53 +00:00
}
}
if (KFPRI.bAdmin)
{
2021-06-08 21:21:28 +00:00
if (!HasRank || (HasRank && !CurrentRank.OverrideAdminRank))
2021-05-31 01:46:53 +00:00
{
2021-06-09 00:58:31 +00:00
CurrentRank.Rank = Settings.Admin.Rank;
CurrentRank.TextColor = Settings.Admin.TextColor;
CurrentRank.ApplyColorToFields = Settings.Admin.ApplyColorToFields;
2021-06-08 21:21:28 +00:00
HasRank = true;
2021-05-31 01:46:53 +00:00
}
}
else // Player
{
2021-06-08 21:21:28 +00:00
if (!HasRank)
2021-05-31 01:46:53 +00:00
{
2021-06-09 00:58:31 +00:00
CurrentRank.Rank = Settings.Player.Rank;
CurrentRank.TextColor = Settings.Player.TextColor;
CurrentRank.ApplyColorToFields = Settings.Player.ApplyColorToFields;
2021-06-08 21:21:28 +00:00
HasRank = true;
2021-05-31 01:46:53 +00:00
}
}
2021-06-13 02:53:33 +00:00
if (KFGRI.bVersusGame)
bIsZED = KFTeamInfo_Zeds(KFPRI.Team) != None;
2021-06-06 21:22:24 +00:00
XPos = 0.f;
C.Font = Owner.CurrentStyle.PickFont(FontScalar);
Canvas.TextSize("ABC", XL, YL, FontScalar, FontScalar);
2021-07-05 03:02:30 +00:00
TextYOffset = YOffset + (Height * 0.5f) - (YL * 0.5f);
2021-06-13 07:01:07 +00:00
if (KFPRIArray.Length > 1 && Index == 0)
2021-07-11 19:36:55 +00:00
{
ShapeHealth = Settings.Style.ShapeStateHealthBoxTopPlayer;
ShapeArmor = Settings.Style.ShapeStateArmorBoxTopPlayer;
}
2021-06-13 07:01:07 +00:00
else if (KFPRIArray.Length > 1 && Index == KFPRIArray.Length - 1)
2021-07-11 19:36:55 +00:00
{
ShapeHealth = Settings.Style.ShapeStateHealthBoxBottomPlayer;
ShapeArmor = Settings.Style.ShapeStateArmorBoxBottomPlayer;
}
2021-06-13 07:00:31 +00:00
else
2021-07-11 19:36:55 +00:00
{
ShapeHealth = Settings.Style.ShapeStateHealthBoxMidPlayer;
ShapeArmor = Settings.Style.ShapeStateArmorBoxMidPlayer;
}
2021-06-13 07:00:31 +00:00
2021-07-05 03:02:30 +00:00
if (!KFPRI.bReadyToPlay && KFGRI.bMatchHasBegun)
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateBoxColorLobby;
ArmorBoxColor = Settings.Style.StateBoxColorLobby;
HealthTextColor = Settings.Style.StateTextColorLobby;
ArmorTextColor = Settings.Style.StateTextColorLobby;
2021-07-11 19:36:55 +00:00
TextState = class'KFGFxMenu_ServerBrowser'.default.InLobbyString;;
2021-07-05 03:02:30 +00:00
}
else if (!KFGRI.bMatchHasBegun)
{
if (KFPRI.bReadyToPlay)
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateBoxColorReady;
ArmorBoxColor = Settings.Style.StateBoxColorReady;
HealthTextColor = Settings.Style.StateBoxColorReady;
ArmorTextColor = Settings.Style.StateBoxColorReady;
2021-07-11 19:36:55 +00:00
TextState = Ready;
2021-07-05 03:02:30 +00:00
}
else
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateBoxColorNotReady;
ArmorBoxColor = Settings.Style.StateBoxColorNotReady;
HealthTextColor = Settings.Style.StateBoxColorNotReady;
ArmorTextColor = Settings.Style.StateBoxColorNotReady;
2021-07-11 19:36:55 +00:00
TextState = NotReady;
2021-07-05 03:02:30 +00:00
}
}
else if (bIsZED && KFTeamInfo_Zeds(GetPlayer().PlayerReplicationInfo.Team) == None)
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateTextColorNone;
ArmorBoxColor = Settings.Style.StateTextColorNone;
HealthTextColor = Settings.Style.StateTextColorNone;
ArmorTextColor = Settings.Style.StateTextColorNone;
2021-07-11 19:36:55 +00:00
TextState = Unknown;
2021-07-05 03:02:30 +00:00
}
else if (KFPRI.PlayerHealth <= 0 || KFPRI.PlayerHealthPercent <= 0)
{
if (KFPRI.bOnlySpectator)
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateTextColorSpectator;
ArmorBoxColor = Settings.Style.StateTextColorSpectator;
HealthTextColor = Settings.Style.StateTextColorSpectator;
ArmorTextColor = Settings.Style.StateTextColorSpectator;
2021-07-11 19:36:55 +00:00
TextState = class'KFCommon_LocalizedStrings'.default.SpectatorString;
2021-07-05 03:02:30 +00:00
}
else
{
2021-07-05 04:20:53 +00:00
HealthBoxColor = Settings.Style.StateTextColorDead;
ArmorBoxColor = Settings.Style.StateTextColorDead;
HealthTextColor = Settings.Style.StateTextColorDead;
ArmorTextColor = Settings.Style.StateTextColorDead;
2021-07-11 19:36:55 +00:00
TextState = Dead;
2021-07-05 03:02:30 +00:00
}
}
else
{
2021-07-05 03:53:26 +00:00
if (ByteToFloat(KFPRI.PlayerHealthPercent) >= float(Settings.Health.High) / 100.0)
2021-07-11 19:36:55 +00:00
{
HealthBoxColor = Settings.Style.StateBoxColorHealthHigh;
HealthTextColor = Settings.Style.StateTextColorHealthHigh;
}
2021-07-05 03:53:26 +00:00
else if (ByteToFloat(KFPRI.PlayerHealthPercent) >= float(Settings.Health.Low) / 100.0)
2021-07-11 19:36:55 +00:00
{
HealthBoxColor = Settings.Style.StateBoxColorHealthMid;
HealthTextColor = Settings.Style.StateTextColorHealthMid;
}
2021-07-05 03:02:30 +00:00
else
2021-07-11 19:36:55 +00:00
{
HealthBoxColor = Settings.Style.StateBoxColorHealthLow;
HealthTextColor = Settings.Style.StateTextColorHealthLow;
}
TextHealth = String(KFPRI.PlayerHealth);
KFPC = KFPlayerController(KFPRI.Owner);
if (KFPC != None)
{
KFPH = KFPawn_Human(KFPC.Pawn);
if (KFPH != None)
{
TextArmor = String(KFPH.Armor);
if (ByteToFloat(KFPH.Armor / KFPH.MaxArmor) >= float(Settings.Armor.High) / 100.0)
{
ArmorBoxColor = Settings.Style.StateBoxColorArmorHigh;
ArmorTextColor = Settings.Style.StateTextColorArmorHigh;
}
else if (ByteToFloat(KFPH.Armor / KFPH.MaxArmor) >= float(Settings.Armor.Low) / 100.0)
{
ArmorBoxColor = Settings.Style.StateBoxColorArmorMid;
ArmorTextColor = Settings.Style.StateTextColorArmorMid;
}
else if (KFPH.Armor > 0)
{
ArmorBoxColor = Settings.Style.StateBoxColorArmorLow;
ArmorTextColor = Settings.Style.StateTextColorArmorLow;
}
else
{
ArmorBoxColor = Settings.Style.StateBoxColorArmorNone;
ArmorTextColor = Settings.Style.StateTextColorArmorNone;
}
}
}
2021-07-05 03:02:30 +00:00
}
2021-07-11 19:36:55 +00:00
// Health box
SetDrawColor(C, HealthBoxColor);
2021-07-05 03:02:30 +00:00
Owner.CurrentStyle.DrawRectBox(XPos,
2021-07-11 19:36:55 +00:00
YOffset,
HealthWBox,
Height,
Settings.Style.EdgeSize,
ShapeHealth);
// Armor box
SetDrawColor(C, ArmorBoxColor);
Owner.CurrentStyle.DrawRectBox(XPos + ArmorWBox,
2021-07-05 03:02:30 +00:00
YOffset,
ArmorWBox,
2021-06-06 21:22:24 +00:00
Height,
2021-06-13 08:36:10 +00:00
Settings.Style.EdgeSize,
2021-07-11 19:36:55 +00:00
ShapeArmor);
if (TextState != "")
{
SetDrawColor(C, HealthTextColor);
if (CurrentRank.ApplyColorToFields.Health)
SetDrawColor(C, CurrentRank.TextColor);
2021-06-06 21:22:24 +00:00
2021-07-11 19:36:55 +00:00
DrawTextShadowHVCenter(TextState, HealthXPos, TextYOffset, HealthWBox + ArmorWBox, FontScalar);
XPos += (HealthWBox + ArmorWBox);
}
else
2021-07-05 03:02:30 +00:00
{
2021-07-11 19:36:55 +00:00
if (CurrentRank.ApplyColorToFields.Health)
SetDrawColor(C, CurrentRank.TextColor);
else
SetDrawColor(C, HealthTextColor);
DrawTextShadowHVCenter(TextHealth, HealthXPos, TextYOffset, HealthWBox, FontScalar);
XPos += HealthWBox;
if (CurrentRank.ApplyColorToFields.Armor)
SetDrawColor(C, CurrentRank.TextColor);
else
SetDrawColor(C, ArmorTextColor);
DrawTextShadowHVCenter(TextArmor, ArmorXPos, TextYOffset, HealthWBox, FontScalar);
XPos += ArmorWBox;
2021-07-05 03:02:30 +00:00
}
2021-06-06 21:22:24 +00:00
2021-07-05 03:02:30 +00:00
// PlayerBox
if (PlayerIndex == Index)
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.PlayerOwnerBoxColor);
2021-06-06 21:22:24 +00:00
else
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.PlayerBoxColor);
2021-06-13 07:01:07 +00:00
if (KFPRIArray.Length > 1 && Index == 0)
2021-06-13 07:00:31 +00:00
Shape = Settings.Style.ShapePlayerBoxTopPlayer;
2021-06-13 07:01:07 +00:00
else if (KFPRIArray.Length > 1 && Index == KFPRIArray.Length - 1)
2021-06-13 07:00:31 +00:00
Shape = Settings.Style.ShapePlayerBoxBottomPlayer;
else
Shape = Settings.Style.ShapePlayerBoxMidPlayer;
2021-07-05 03:02:30 +00:00
BoxWidth = DoshXPos - (HealthWBox + ArmorWBox) - BorderSize * 2;
2021-06-13 08:36:10 +00:00
Owner.CurrentStyle.DrawRectBox(XPos, YOffset, BoxWidth, Height, Settings.Style.EdgeSize, Shape);
2021-06-06 21:22:24 +00:00
XPos += BoxWidth;
// Right stats box
2021-06-13 07:01:07 +00:00
if (KFPRIArray.Length > 1 && Index == 0)
2021-06-13 07:00:31 +00:00
Shape = Settings.Style.ShapeStatsBoxTopPlayer;
2021-06-13 07:01:07 +00:00
else if (KFPRIArray.Length > 1 && Index == KFPRIArray.Length - 1)
2021-06-13 07:00:31 +00:00
Shape = Settings.Style.ShapeStatsBoxBottomPlayer;
else
Shape = Settings.Style.ShapeStatsBoxMidPlayer;
2021-06-06 21:22:24 +00:00
BoxWidth = Width - XPos;
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.StatsBoxColor);
2021-06-13 03:00:19 +00:00
Owner.CurrentStyle.DrawRectBox( XPos,
2021-06-06 21:22:24 +00:00
YOffset,
BoxWidth,
Height,
2021-06-13 08:36:10 +00:00
Settings.Style.EdgeSize,
Shape);
2021-05-31 01:46:53 +00:00
// Rank
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Rank)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
else
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.RankTextColor);
2021-06-08 21:21:28 +00:00
S = CurrentRank.Rank;
2021-06-06 21:22:24 +00:00
DrawTextShadowHLeftVCenter(S, RankXPos, TextYOffset, FontScalar);
// Perk
2021-06-14 21:02:32 +00:00
RealPlayerWBox = PlayerWBox;
2021-06-13 02:53:33 +00:00
if (bIsZED)
{
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Perk)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
else
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.ZedTextColor);
C.SetPos (PerkXPos, YOffset - ((Height-5) * 0.5f));
C.DrawRect (Height-5, Height-5, Texture2D'UI_Widgets.MenuBarWidget_SWF_IF');
2021-06-13 04:47:54 +00:00
S = class'KFCommon_LocalizedStrings'.default.ZedString;
2021-05-25 00:45:49 +00:00
DrawTextShadowHLeftVCenter(S, PerkXPos + Height, TextYOffset, FontScalar);
2021-06-14 21:02:32 +00:00
RealPlayerWBox = PerkXPos + Height - PlayerXPos;
}
else
{
2021-06-13 02:53:33 +00:00
if (KFPRI.CurrentPerkClass != None)
{
2020-01-10 13:14:11 +00:00
PrestigeLevel = KFPRI.GetActivePerkPrestigeLevel();
Level = KFPRI.GetActivePerkLevel();
2021-07-05 03:02:30 +00:00
PerkIconPosY = YOffset + (BorderSize * 2);
PerkIconSize = Height-(BorderSize * 4);
PerkIconPosX = LevelXPos - PerkIconSize - (BorderSize*2);
2020-01-10 13:14:11 +00:00
PrestigeIconScale = 0.6625f;
2021-06-14 21:02:32 +00:00
RealPlayerWBox = PerkIconPosX - PlayerXPos;
C.DrawColor = HUDOwner.WhiteColor;
2020-01-10 13:14:11 +00:00
if (PrestigeLevel > 0)
{
C.SetPos(PerkIconPosX, PerkIconPosY);
C.DrawTile(KFPRI.CurrentPerkClass.default.PrestigeIcons[PrestigeLevel - 1], PerkIconSize, PerkIconSize, 0, 0, 256, 256);
2020-01-10 13:14:11 +00:00
C.SetPos(PerkIconPosX + ((PerkIconSize/2) - ((PerkIconSize*PrestigeIconScale)/2)), PerkIconPosY + ((PerkIconSize/2) - ((PerkIconSize*PrestigeIconScale)/1.75)));
C.DrawTile(KFPRI.CurrentPerkClass.default.PerkIcon, PerkIconSize * PrestigeIconScale, PerkIconSize * PrestigeIconScale, 0, 0, 256, 256);
}
else
{
C.SetPos(PerkIconPosX, PerkIconPosY);
C.DrawTile(KFPRI.CurrentPerkClass.default.PerkIcon, PerkIconSize, PerkIconSize, 0, 0, 256, 256);
2021-06-07 01:30:04 +00:00
}
2021-06-09 02:47:15 +00:00
if (CurrentRank.ApplyColorToFields.Level)
SetDrawColor(C, CurrentRank.TextColor);
else
{
if (Level < Settings.Level.Low[KFGRI.GameDifficulty])
SetDrawColor(C, Settings.Style.LevelTextColorLow);
else if (Level < Settings.Level.High[KFGRI.GameDifficulty])
SetDrawColor(C, Settings.Style.LevelTextColorMid);
else
SetDrawColor(C, Settings.Style.LevelTextColorHigh);
}
S = String(Level);
2021-06-14 21:02:32 +00:00
DrawTextShadowHLeftVCenter(S, LevelXPos, TextYOffset, FontScalar);
2021-06-14 21:29:00 +00:00
if (CurrentRank.ApplyColorToFields.Level)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
2021-06-09 02:47:15 +00:00
S = KFPRI.CurrentPerkClass.default.PerkName;
2021-06-14 21:02:32 +00:00
DrawTextShadowHLeftVCenter(S, PerkXPos, TextYOffset, FontScalar);
}
else
{
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Perk)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
2021-06-13 04:47:54 +00:00
S = NoPerk;
DrawTextShadowHLeftVCenter(S, PerkXPos, TextYOffset, FontScalar);
2021-06-14 21:02:32 +00:00
RealPlayerWBox = PerkXPos - PlayerXPos;
}
}
// Avatar
2021-06-13 02:53:33 +00:00
if (KFPRI.Avatar != None)
{
2021-06-13 02:53:33 +00:00
if (KFPRI.Avatar == default.DefaultAvatar)
CheckAvatar(KFPRI, OwnerPC);
2021-06-13 02:54:35 +00:00
C.SetDrawColor(255, 255, 255, 255);
C.SetPos(PlayerXPos - (Height * 1.075), YOffset + (Height * 0.5f) - ((Height - 6) * 0.5f));
2021-06-13 02:54:35 +00:00
C.DrawTile(KFPRI.Avatar, Height - 6, Height - 6, 0,0, KFPRI.Avatar.SizeX, KFPRI.Avatar.SizeY);
Owner.CurrentStyle.DrawBoxHollow(PlayerXPos - (Height * 1.075), YOffset + (Height * 0.5f) - ((Height - 6) * 0.5f), Height - 6, Height - 6, 1);
}
2021-06-13 02:53:33 +00:00
else if (!KFPRI.bBot)
CheckAvatar(KFPRI, OwnerPC);
// Player
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Player)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
else
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.PlayerNameTextColor);
2021-06-09 02:47:15 +00:00
S = KFPRI.PlayerName;
Canvas.TextSize(S, XL, YL, FontScalar, FontScalar);
2021-06-14 21:02:32 +00:00
while (XL > RealPlayerWBox)
{
S = Left(S, Len(S)-1);
Canvas.TextSize(S, XL, YL, FontScalar, FontScalar);
}
2021-05-25 00:45:49 +00:00
DrawTextShadowHLeftVCenter(S, PlayerXPos, TextYOffset, FontScalar);
// Kill
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Kills)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
2021-07-11 19:36:55 +00:00
else
SetDrawColor(C, Settings.Style.KillsTextColorMid); // TODO
2021-05-25 00:45:49 +00:00
DrawTextShadowHVCenter(string (KFPRI.Kills), KillsXPos, TextYOffset, KillsWBox, FontScalar);
// Assist
2021-06-08 21:21:28 +00:00
if (CurrentRank.ApplyColorToFields.Assists)
2021-06-08 23:22:35 +00:00
SetDrawColor(C, CurrentRank.TextColor);
2021-07-11 19:36:55 +00:00
else
SetDrawColor(C, Settings.Style.AssistsTextColorMid); // TODO
2021-05-25 00:45:49 +00:00
DrawTextShadowHVCenter(string (KFPRI.Assists), AssistXPos, TextYOffset, AssistWBox, FontScalar);
2021-06-08 23:22:35 +00:00
2021-07-05 03:02:30 +00:00
// Dosh
2021-06-13 02:53:33 +00:00
if (bIsZED)
{
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.ZedTextColor);
2021-06-13 04:47:54 +00:00
StrValue = "-";
}
else
{
2021-06-08 23:22:35 +00:00
if (CurrentRank.ApplyColorToFields.Dosh)
SetDrawColor(C, CurrentRank.TextColor);
2021-07-11 19:36:55 +00:00
else
SetDrawColor(C, Settings.Style.DoshTextColorMid); // TODO
StrValue = String(int(KFPRI.Score)); //StrValue = GetNiceSize(int(KFPRI.Score));
}
2021-07-05 03:02:30 +00:00
DrawTextShadowHVCenter(StrValue, DoshXPos, TextYOffset, DoshWBox, FontScalar);
// Ping
if (KFPRI.bBot)
2021-06-08 23:22:35 +00:00
{
2021-07-05 03:53:26 +00:00
SetDrawColor(C, Settings.Style.PingTextColorNone);
S = "-";
2021-06-08 23:22:35 +00:00
}
else
{
Ping = int(KFPRI.Ping * `PING_SCALE);
2021-06-08 23:22:35 +00:00
if (CurrentRank.ApplyColorToFields.Ping)
SetDrawColor(C, CurrentRank.TextColor);
2021-06-09 00:58:31 +00:00
else if (Ping <= Settings.Ping.Low)
SetDrawColor(C, Settings.Style.PingTextColorLow);
else if (Ping <= Settings.Ping.High)
SetDrawColor(C, Settings.Style.PingTextColorMid);
2021-06-08 23:22:35 +00:00
else
2021-06-09 00:58:31 +00:00
SetDrawColor(C, Settings.Style.PingTextColorHigh);
S = string(Ping);
}
2021-06-13 02:29:47 +00:00
C.TextSize(S, XL, YL, FontScalar, FontScalar);
2021-07-05 03:53:26 +00:00
DrawTextShadowHVCenter(S, PingXPos, TextYOffset, Settings.Style.ShowPingBars ? PingWBox/2 : PingWBox, FontScalar);
2021-06-13 02:54:35 +00:00
C.SetDrawColor(250, 250, 250, 255);
2021-07-05 03:53:26 +00:00
if (Settings.Style.ShowPingBars)
2021-07-05 03:02:30 +00:00
DrawPingBars(C, YOffset + (Height/2) - ((Height*0.5)/2), Width - (Height*0.5) - (BorderSize*2), Height*0.5, Height*0.5, float(Ping));
2020-01-10 13:14:11 +00:00
}
2021-06-13 03:00:19 +00:00
final function DrawPingBars(Canvas C, float YOffset, float XOffset, float W, float H, float Ping)
2020-01-10 13:14:11 +00:00
{
local float PingMul, BarW, BarH, BaseH, XPos, YPos;
local byte i;
2021-06-09 00:58:31 +00:00
PingMul = 1.f - FClamp(FMax(Ping - Settings.Ping.Low, 1.f) / Settings.Ping.High, 0.f, 1.f);
BarW = W / PingBars;
BaseH = H / PingBars;
PingColor.R = (1.f - PingMul) * 255;
PingColor.G = PingMul * 255;
2021-06-13 02:53:33 +00:00
for (i=1; i < PingBars; i++)
{
BarH = BaseH * i;
XPos = XOffset + ((i - 1) * BarW);
YPos = YOffset + (H - BarH);
2021-06-13 02:54:35 +00:00
C.SetPos(XPos, YPos);
C.SetDrawColor(20, 20, 20, 255);
2021-06-13 02:54:35 +00:00
Owner.CurrentStyle.DrawWhiteBox(BarW, BarH);
2021-06-13 02:53:33 +00:00
if (PingMul >= (i / PingBars))
{
2021-06-13 02:54:35 +00:00
C.SetPos(XPos, YPos);
C.DrawColor = PingColor;
2021-06-13 02:54:35 +00:00
Owner.CurrentStyle.DrawWhiteBox(BarW, BarH);
}
C.SetDrawColor(80, 80, 80, 255);
2021-06-13 02:54:35 +00:00
Owner.CurrentStyle.DrawBoxHollow(XPos, YPos, BarW, BarH, 1);
}
2020-01-10 13:14:11 +00:00
}
2021-06-13 03:00:19 +00:00
static final function Texture2D FindAvatar(KFPlayerController PC, UniqueNetId ClientID)
2020-01-10 13:14:11 +00:00
{
local string S;
S = PC.GetSteamAvatar(ClientID);
2021-06-13 02:53:33 +00:00
if (S == "")
return None;
2021-06-13 02:54:35 +00:00
return Texture2D(PC.FindObject(S, class'Texture2D'));
2020-01-10 13:14:11 +00:00
}
final static function string GetNiceSize(int Num)
{
2021-06-13 02:53:33 +00:00
if (Num < 1000 ) return string(Num);
else if (Num < 1000000 ) return (Num / 1000) $ "K";
else if (Num < 1000000000 ) return (Num / 1000000) $ "M";
2020-01-10 13:14:11 +00:00
return (Num / 1000000000) $ "B";
2020-01-10 13:14:11 +00:00
}
2021-06-13 03:00:19 +00:00
function ScrollMouseWheel(bool bUp)
2020-01-10 13:14:11 +00:00
{
PlayersList.ScrollMouseWheel(bUp);
2020-01-10 13:14:11 +00:00
}
defaultproperties
{
bEnableInputs=true
2021-06-13 02:54:35 +00:00
PingColor=(R=255, G=255, B=60, A=255)
PingBars=5.0
Begin Object Class=KFGUI_List Name=PlayerList
2021-06-13 02:29:47 +00:00
XSize=0.7
OnDrawItem=DrawPlayerEntry
ID="PlayerList"
bClickable=false
ListItemsPerPage=16
End Object
Components.Add(PlayerList)
DefaultAvatar=Texture2D'UI_HUD.ScoreBoard_Standard_SWF_I26'
2020-01-10 13:14:11 +00:00
}