From 3bc9e7d2e46687f7f394d9ed8440410b6fa66249 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Sat, 23 Feb 2013 00:12:20 +1300 Subject: [PATCH] Fix some playerstatistics related crashes for other mods --- OpenRA.Game/Widgets/LineGraphWidget.cs | 2 +- .../Widgets/Logic/ObserverStatsLogic.cs | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/OpenRA.Game/Widgets/LineGraphWidget.cs b/OpenRA.Game/Widgets/LineGraphWidget.cs index 91846d240f..37e5c94192 100644 --- a/OpenRA.Game/Widgets/LineGraphWidget.cs +++ b/OpenRA.Game/Widgets/LineGraphWidget.cs @@ -101,7 +101,7 @@ namespace OpenRA.Widgets var xAxisSize = GetXAxisSize(); var yAxisSize = GetYAxisSize(); - var maxValue = GetSeries().Select(p => p.Points).SelectMany(d => d).Max(); + var maxValue = GetSeries().Select(p => p.Points).SelectMany(d => d).Concat(new[] { 0f }).Max(); var scale = 200 / Math.Max(5000, (float)Math.Ceiling(maxValue / 1000) * 1000); var xStep = width / xAxisSize; diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs index 0cd5eb5d78..5b7ca6436f 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs @@ -156,7 +156,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic players.Select(p => new LineGraphSeries( p.PlayerName, p.ColorRamp.GetColor(0), - p.PlayerActor.Trait().EarnedSamples.Select(s => (float)s) + (p.PlayerActor.TraitOrDefault() ?? new PlayerStatistics(p.PlayerActor)).EarnedSamples.Select(s => (float)s) )); playerStatsPanel.AddChild(template); @@ -187,10 +187,11 @@ namespace OpenRA.Mods.RA.Widgets.Logic AddPlayerFlagAndName(template, player); - var stats = player.PlayerActor.Trait(); + var stats = player.PlayerActor.TraitOrDefault(); + if (stats == null) return template; template.Get("CONTROL").GetText = () => MapControl(stats.MapControl); - template.Get("KILLS_COST").GetText = () => "$" + stats.KillsCost.ToString(); - template.Get("DEATHS_COST").GetText = () => "$" + stats.DeathsCost.ToString(); + template.Get("KILLS_COST").GetText = () => "$" + stats.KillsCost; + template.Get("DEATHS_COST").GetText = () => "$" + stats.DeathsCost; template.Get("UNITS_KILLED").GetText = () => stats.UnitsKilled.ToString(); template.Get("UNITS_DEAD").GetText = () => stats.UnitsDead.ToString(); template.Get("BUILDINGS_KILLED").GetText = () => stats.BuildingsKilled.ToString(); @@ -220,7 +221,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic AddPlayerFlagAndName(template, player); var res = player.PlayerActor.Trait(); - var stats = player.PlayerActor.Trait(); + var stats = player.PlayerActor.TraitOrDefault(); + if (stats == null) return template; template.Get("CASH").GetText = () => "$" + (res.DisplayCash + res.DisplayOre); template.Get("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned); @@ -258,7 +260,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic template.Get("KILLS").GetText = () => player.Kills.ToString(); template.Get("DEATHS").GetText = () => player.Deaths.ToString(); - var stats = player.PlayerActor.Trait(); + var stats = player.PlayerActor.TraitOrDefault(); + if (stats == null) return template; template.Get("ACTIONS_MIN").GetText = () => AverageOrdersPerMinute(stats.OrderCount); return template;