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))); } } }