diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoStatsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoStatsLogic.cs index c123d78f65a9..b71e0ebac599 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoStatsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoStatsLogic.cs @@ -77,7 +77,9 @@ public GameInfoStatsLogic(Widget widget, World world, OrderManager orderManager, var teamHeader = ScrollItemWidget.Setup(teamTemplate, () => true, () => { }); teamHeader.Get("TEAM").GetText = () => t.Key == 0 ? "No Team" : "Team {0}".F(t.Key); var teamRating = teamHeader.Get("TEAM_SCORE"); - teamRating.GetText = () => t.Sum(gg => gg.Second != null ? gg.Second.Experience : 0).ToString(); + var scoreCache = new CachedTransform(s => s.ToString()); + var teamMemberScores = t.Select(tt => tt.Second).Where(s => s != null).ToArray().Select(s => s.Experience); + teamRating.GetText = () => scoreCache.Update(teamMemberScores.Sum()); playerPanel.AddChild(teamHeader); } @@ -93,8 +95,8 @@ public GameInfoStatsLogic(Widget widget, World world, OrderManager orderManager, var nameFont = Game.Renderer.Fonts[nameLabel.Font]; var suffixLength = new CachedTransform(s => nameFont.Measure(s).X); - var name = new CachedTransform, string>(c => - WidgetUtils.TruncateText(c.First, nameLabel.Bounds.Width - c.Second, nameFont)); + var name = new CachedTransform, string>(c => + WidgetUtils.TruncateText(c.First, nameLabel.Bounds.Width - suffixLength.Update(c.Second), nameFont) + c.Second); nameLabel.GetText = () => { @@ -102,8 +104,7 @@ public GameInfoStatsLogic(Widget widget, World world, OrderManager orderManager, if (client != null && client.State == Session.ClientState.Disconnected) suffix = " (Gone)"; - var sl = suffixLength.Update(suffix); - return name.Update(Pair.New(pp.PlayerName, sl)) + suffix; + return name.Update(Pair.New(pp.PlayerName, suffix)); }; nameLabel.GetColor = () => pp.Color.RGB; @@ -120,8 +121,8 @@ public GameInfoStatsLogic(Widget widget, World world, OrderManager orderManager, item.Get("FACTION").GetText = () => pp.DisplayFaction.Name; } - var experience = p.Second != null ? p.Second.Experience : 0; - item.Get("SCORE").GetText = () => experience.ToString(); + var scoreCache = new CachedTransform(s => s.ToString()); + item.Get("SCORE").GetText = () => scoreCache.Update(p.Second != null ? p.Second.Experience : 0); playerPanel.AddChild(item); } @@ -144,14 +145,13 @@ public GameInfoStatsLogic(Widget widget, World world, OrderManager orderManager, var nameFont = Game.Renderer.Fonts[nameLabel.Font]; var suffixLength = new CachedTransform(s => nameFont.Measure(s).X); - var name = new CachedTransform, string>(c => - WidgetUtils.TruncateText(c.First, nameLabel.Bounds.Width - c.Second, nameFont)); + var name = new CachedTransform, string>(c => + WidgetUtils.TruncateText(c.First, nameLabel.Bounds.Width - suffixLength.Update(c.Second), nameFont) + c.Second); nameLabel.GetText = () => { var suffix = client.State == Session.ClientState.Disconnected ? " (Gone)" : ""; - var sl = suffixLength.Update(suffix); - return name.Update(Pair.New(client.Name, sl)) + suffix; + return name.Update(Pair.New(client.Name, suffix)); }; item.Get("FACTIONFLAG").IsVisible = () => false;