From a882735deb3769b19e6f23316b05e373d1cad34e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 26 Aug 2010 23:47:03 +1200 Subject: [PATCH] Fix build tab selection --- .../World/ChooseBuildTabOnSelect.cs | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/OpenRA.Mods.RA/World/ChooseBuildTabOnSelect.cs b/OpenRA.Mods.RA/World/ChooseBuildTabOnSelect.cs index 356d6ffcd8..02bae43bfd 100644 --- a/OpenRA.Mods.RA/World/ChooseBuildTabOnSelect.cs +++ b/OpenRA.Mods.RA/World/ChooseBuildTabOnSelect.cs @@ -30,18 +30,27 @@ namespace OpenRA.Mods.RA.Widgets public void SelectionChanged() { - var firstItem = world.Selection.Actors.FirstOrDefault( - a => a.World.LocalPlayer == a.Owner && a.HasTrait()); - - if (firstItem == null) + // Queue-per-structure + var perqueue = world.Selection.Actors.FirstOrDefault( + a => a.World.LocalPlayer == a.Owner && a.HasTrait()); + + if (perqueue != null) + { + Widget.RootWidget.GetWidget("INGAME_BUILD_PALETTE") + .SetCurrentTab(perqueue.TraitsImplementing().First()); return; + } + + // Queue-per-player + var types = world.Selection.Actors.SelectMany(a => a.TraitsImplementing()) + .SelectMany(t => t.Info.Produces) + .Distinct(); + + if (types.Count() == 0) + return; - var produces = firstItem.Info.Traits.Get().Produces.FirstOrDefault(); - if (produces == null) - return; - - //Widget.RootWidget.GetWidget("INGAME_BUILD_PALETTE") - // .SetCurrentTab(produces); + Widget.RootWidget.GetWidget("INGAME_BUILD_PALETTE") + .SetCurrentTab(world.LocalPlayer.PlayerActor.TraitsImplementing().FirstOrDefault(t => types.Contains(t.Info.Type))); } } }