Add helper method to add suffix to player name label

This commit is contained in:
Ivaylo Draganov
2020-05-18 17:53:04 +03:00
committed by Paul Chote
parent fb27a25e52
commit 7a213338a2
3 changed files with 21 additions and 29 deletions

View File

@@ -93,20 +93,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
LobbyUtils.SetupProfileWidget(item, client, orderManager, worldRenderer);
var nameLabel = item.Get<LabelWidget>("NAME");
var nameFont = Game.Renderer.Fonts[nameLabel.Font];
var suffixLength = new CachedTransform<string, int>(s => nameFont.Measure(s).X);
var name = new CachedTransform<Pair<string, string>, string>(c =>
WidgetUtils.TruncateText(c.First, nameLabel.Bounds.Width - suffixLength.Update(c.Second), nameFont) + c.Second);
nameLabel.GetText = () =>
{
var suffix = pp.WinState == WinState.Undefined ? "" : " (" + pp.WinState + ")";
if (client != null && client.State == Session.ClientState.Disconnected)
suffix = " (Gone)";
return name.Update(Pair.New(pp.PlayerName, suffix));
};
WidgetUtils.AddSuffixToPlayerNameLabel(nameLabel, pp);
nameLabel.GetColor = () => pp.Color;
var flag = item.Get<ImageWidget>("FACTIONFLAG");

View File

@@ -525,22 +525,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
flag.GetImageCollection = () => "flags";
flag.GetImageName = () => player.Faction.InternalName;
var client = player.World.LobbyInfo.ClientWithIndex(player.ClientIndex);
var playerName = template.Get<LabelWidget>("PLAYER");
var playerNameFont = Game.Renderer.Fonts[playerName.Font];
var suffixLength = new CachedTransform<string, int>(s => playerNameFont.Measure(s).X);
var name = new CachedTransform<Pair<string, int>, string>(c =>
WidgetUtils.TruncateText(c.First, playerName.Bounds.Width - c.Second, playerNameFont));
playerName.GetText = () =>
{
var suffix = player.WinState == WinState.Undefined ? "" : " (" + player.WinState + ")";
if (client != null && client.State == Session.ClientState.Disconnected)
suffix = " (Gone)";
var sl = suffixLength.Update(suffix);
return name.Update(Pair.New(player.PlayerName, sl)) + suffix;
};
WidgetUtils.AddSuffixToPlayerNameLabel(playerName, player);
playerName.GetColor = () => player.Color;
}

View File

@@ -12,6 +12,7 @@
using System;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Primitives;
namespace OpenRA.Mods.Common.Widgets
@@ -270,6 +271,24 @@ namespace OpenRA.Mods.Common.Widgets
else
button.GetTooltipText = null;
}
public static void AddSuffixToPlayerNameLabel(LabelWidget label, Player p)
{
var client = p.World.LobbyInfo.ClientWithIndex(p.ClientIndex);
var playerNameFont = Game.Renderer.Fonts[label.Font];
var suffixLength = new CachedTransform<string, int>(s => playerNameFont.Measure(s).X);
var name = new CachedTransform<Pair<string, string>, string>(c =>
WidgetUtils.TruncateText(c.First, label.Bounds.Width - suffixLength.Update(c.Second), playerNameFont));
label.GetText = () =>
{
var suffix = p.WinState == WinState.Undefined ? "" : " (" + p.WinState + ")";
if (client != null && client.State == Session.ClientState.Disconnected)
suffix = " (Gone)";
return name.Update(Pair.New(p.PlayerName, suffix)) + suffix;
};
}
}
public class CachedTransform<T, U>