diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs index 0e2d3e3636..aec095c18e 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs @@ -35,21 +35,22 @@ namespace OpenRA.Mods.RA.Widgets.Logic } } + static string LabelForPlayer(Player p) + { + return p != null ? "{0}'s view".F(p.PlayerName) : "World view"; + } + [ObjectCreator.UseCtor] public ObserverShroudSelectorLogic(Widget widget, World world) { - var views = world.Players.Where(p => !p.NonCombatant).ToDictionary(p => p.PlayerName, - p => new CameraOption("{0}'s view".F(p.PlayerName), + var views = world.Players.Where(p => !p.NonCombatant).Concat(new[] { (Player)null }).Select( + p => new CameraOption(LabelForPlayer(p), () => world.RenderPlayer == p, () => world.RenderPlayer = p - )); - views.Add("", new CameraOption("World view", - () => world.RenderPlayer == null, - () => world.RenderPlayer = null - )); + )).ToArray(); var shroudSelector = widget.Get("SHROUD_SELECTOR"); - shroudSelector.GetText = () => views[world.RenderPlayer == null ? "" : world.RenderPlayer.PlayerName].Label; + shroudSelector.GetText = () => LabelForPlayer(world.RenderPlayer); shroudSelector.OnMouseDown = _ => { Func setupItem = (option, template) => @@ -58,7 +59,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic item.Get("LABEL").GetText = () => option.Label; return item; }; - shroudSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", views.Count() * 30, views.Values, setupItem); + shroudSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", views.Length * 30, views, setupItem); }; } }