Reduce string allocations in ObserverStatsLogic
This commit is contained in:
@@ -233,7 +233,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
tt.IgnoreMouseOver = true;
|
tt.IgnoreMouseOver = true;
|
||||||
|
|
||||||
var teamLabel = tt.Get<LabelWidget>("TEAM");
|
var teamLabel = tt.Get<LabelWidget>("TEAM");
|
||||||
teamLabel.GetText = () => team.Key == 0 ? "No Team" : "Team " + team.Key;
|
var teamText = team.Key == 0 ? "No Team" : "Team " + team.Key;
|
||||||
|
teamLabel.GetText = () => teamText;
|
||||||
tt.Bounds.Width = teamLabel.Bounds.Width = Game.Renderer.Fonts[tt.Font].Measure(tt.Get<LabelWidget>("TEAM").GetText()).X;
|
tt.Bounds.Width = teamLabel.Bounds.Width = Game.Renderer.Fonts[tt.Font].Measure(tt.Get<LabelWidget>("TEAM").GetText()).X;
|
||||||
|
|
||||||
var colorBlockWidget = tt.Get<ColorBlockWidget>("TEAM_COLOR");
|
var colorBlockWidget = tt.Get<ColorBlockWidget>("TEAM_COLOR");
|
||||||
@@ -273,14 +274,29 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
SetupPlayerColor(player, template, playerColor, playerGradient);
|
SetupPlayerColor(player, template, playerColor, playerGradient);
|
||||||
|
|
||||||
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
|
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
|
||||||
if (stats == null) return template;
|
if (stats == null)
|
||||||
template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost;
|
return template;
|
||||||
template.Get<LabelWidget>("ASSETS_LOST").GetText = () => "$" + stats.DeathsCost;
|
|
||||||
template.Get<LabelWidget>("UNITS_KILLED").GetText = () => stats.UnitsKilled.ToString();
|
var destroyedText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
template.Get<LabelWidget>("UNITS_DEAD").GetText = () => stats.UnitsDead.ToString();
|
template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => destroyedText.Update(stats.KillsCost);
|
||||||
template.Get<LabelWidget>("BUILDINGS_KILLED").GetText = () => stats.BuildingsKilled.ToString();
|
|
||||||
template.Get<LabelWidget>("BUILDINGS_DEAD").GetText = () => stats.BuildingsDead.ToString();
|
var lostText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
template.Get<LabelWidget>("ARMY_VALUE").GetText = () => "$" + stats.ArmyValue.ToString();
|
template.Get<LabelWidget>("ASSETS_LOST").GetText = () => lostText.Update(stats.DeathsCost);
|
||||||
|
|
||||||
|
var unitsKilledText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
|
template.Get<LabelWidget>("UNITS_KILLED").GetText = () => unitsKilledText.Update(stats.UnitsKilled);
|
||||||
|
|
||||||
|
var unitsDeadText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
|
template.Get<LabelWidget>("UNITS_DEAD").GetText = () => unitsDeadText.Update(stats.UnitsDead);
|
||||||
|
|
||||||
|
var buildingsKilledText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
|
template.Get<LabelWidget>("BUILDINGS_KILLED").GetText = () => buildingsKilledText.Update(stats.BuildingsKilled);
|
||||||
|
|
||||||
|
var buildingsDeadText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
|
template.Get<LabelWidget>("BUILDINGS_DEAD").GetText = () => buildingsDeadText.Update(stats.BuildingsDead);
|
||||||
|
|
||||||
|
var armyText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("ARMY_VALUE").GetText = () => armyText.Update(stats.ArmyValue);
|
||||||
|
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
@@ -347,15 +363,23 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
if (stats == null)
|
if (stats == null)
|
||||||
return template;
|
return template;
|
||||||
|
|
||||||
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.Cash + res.Resources);
|
var cashText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
template.Get<LabelWidget>("INCOME").GetText = () => "$" + stats.DisplayIncome;
|
template.Get<LabelWidget>("CASH").GetText = () => cashText.Update(res.Cash + res.Resources);
|
||||||
template.Get<LabelWidget>("EARNED").GetText = () => "$" + res.Earned;
|
|
||||||
template.Get<LabelWidget>("SPENT").GetText = () => "$" + res.Spent;
|
|
||||||
|
|
||||||
|
var incomeText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("INCOME").GetText = () => incomeText.Update(stats.DisplayIncome);
|
||||||
|
|
||||||
|
var earnedText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("EARNED").GetText = () => earnedText.Update(res.Earned);
|
||||||
|
|
||||||
|
var spentText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("SPENT").GetText = () => spentText.Update(res.Spent);
|
||||||
|
|
||||||
|
var assetsText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
var assets = template.Get<LabelWidget>("ASSETS");
|
var assets = template.Get<LabelWidget>("ASSETS");
|
||||||
assets.GetText = () => "$" + world.ActorsHavingTrait<Valued>()
|
assets.GetText = () => assetsText.Update(world.ActorsHavingTrait<Valued>()
|
||||||
.Where(a => a.Owner == player && !a.IsDead)
|
.Where(a => a.Owner == player && !a.IsDead)
|
||||||
.Sum(a => a.Info.TraitInfos<ValuedInfo>().First().Cost);
|
.Sum(a => a.Info.TraitInfos<ValuedInfo>().First().Cost));
|
||||||
|
|
||||||
var harvesters = template.Get<LabelWidget>("HARVESTERS");
|
var harvesters = template.Get<LabelWidget>("HARVESTERS");
|
||||||
harvesters.GetText = () => world.ActorsHavingTrait<Harvester>().Count(a => a.Owner == player && !a.IsDead).ToString();
|
harvesters.GetText = () => world.ActorsHavingTrait<Harvester>().Count(a => a.Owner == player && !a.IsDead).ToString();
|
||||||
@@ -383,13 +407,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
SetupPlayerColor(player, template, playerColor, playerGradient);
|
SetupPlayerColor(player, template, playerColor, playerGradient);
|
||||||
|
|
||||||
var res = player.PlayerActor.Trait<PlayerResources>();
|
var res = player.PlayerActor.Trait<PlayerResources>();
|
||||||
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.Cash + res.Resources);
|
var cashText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("CASH").GetText = () => cashText.Update(res.Cash + res.Resources);
|
||||||
|
|
||||||
var powerRes = player.PlayerActor.TraitOrDefault<PowerManager>();
|
var powerRes = player.PlayerActor.TraitOrDefault<PowerManager>();
|
||||||
if (powerRes != null)
|
if (powerRes != null)
|
||||||
{
|
{
|
||||||
var power = template.Get<LabelWidget>("POWER");
|
var power = template.Get<LabelWidget>("POWER");
|
||||||
power.GetText = () => powerRes.PowerDrained + "/" + powerRes.PowerProvided;
|
var powerText = new CachedTransform<Pair<int, int>, string>(p => p.First + "/" + p.Second);
|
||||||
|
power.GetText = () => powerText.Update(new Pair<int, int>(powerRes.PowerDrained, powerRes.PowerProvided));
|
||||||
power.GetColor = () => GetPowerColor(powerRes.PowerState);
|
power.GetColor = () => GetPowerColor(powerRes.PowerState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,12 +423,23 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
if (stats == null)
|
if (stats == null)
|
||||||
return template;
|
return template;
|
||||||
|
|
||||||
template.Get<LabelWidget>("KILLS").GetText = () => (stats.UnitsKilled + stats.BuildingsKilled).ToString();
|
var killsText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
template.Get<LabelWidget>("DEATHS").GetText = () => (stats.UnitsDead + stats.BuildingsDead).ToString();
|
template.Get<LabelWidget>("KILLS").GetText = () => killsText.Update(stats.UnitsKilled + stats.BuildingsKilled);
|
||||||
template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost;
|
|
||||||
template.Get<LabelWidget>("ASSETS_LOST").GetText = () => "$" + stats.DeathsCost;
|
var deathsText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
template.Get<LabelWidget>("EXPERIENCE").GetText = () => stats.Experience.ToString();
|
template.Get<LabelWidget>("DEATHS").GetText = () => deathsText.Update(stats.UnitsDead + stats.BuildingsDead);
|
||||||
template.Get<LabelWidget>("ACTIONS_MIN").GetText = () => AverageOrdersPerMinute(stats.OrderCount);
|
|
||||||
|
var destroyedText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("ASSETS_DESTROYED").GetText = () => destroyedText.Update(stats.KillsCost);
|
||||||
|
|
||||||
|
var lostText = new CachedTransform<int, string>(i => "$" + i);
|
||||||
|
template.Get<LabelWidget>("ASSETS_LOST").GetText = () => lostText.Update(stats.DeathsCost);
|
||||||
|
|
||||||
|
var experienceText = new CachedTransform<int, string>(i => i.ToString());
|
||||||
|
template.Get<LabelWidget>("EXPERIENCE").GetText = () => experienceText.Update(stats.Experience);
|
||||||
|
|
||||||
|
var actionsText = new CachedTransform<double, string>(d => AverageOrdersPerMinute(d));
|
||||||
|
template.Get<LabelWidget>("ACTIONS_MIN").GetText = () => actionsText.Update(stats.OrderCount);
|
||||||
|
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user