From c71f97e2c6a4aec87a9a6a1145f06f0fcf433413 Mon Sep 17 00:00:00 2001 From: Noam Date: Thu, 4 Oct 2018 00:12:33 +0300 Subject: [PATCH] Update editor sidebar when a player is removed. --- .../Traits/World/EditorActorLayer.cs | 5 ++++ .../Logic/Editor/ActorSelectorLogic.cs | 25 ++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs index 9df811f49a..70dd975754 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs @@ -172,7 +172,10 @@ namespace OpenRA.Mods.Common.Traits var index = int.Parse(name.Substring(5)); if (index >= newCount) + { Players.Players.Remove(name); + OnPlayerRemoved(); + } } for (var index = 0; index < newCount; index++) @@ -249,6 +252,8 @@ namespace OpenRA.Mods.Common.Traits return screenMap.At(worldPx); } + public Action OnPlayerRemoved = () => { }; + string NextActorName() { var id = previews.Count(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs index 851b78fa56..664a25a7a9 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs @@ -72,15 +72,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic selectedOwner = editorLayer.Players.Players.Values.First(); Func setupItem = (option, template) => { - var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () => - { - selectedOwner = option; - - ownersDropDown.Text = selectedOwner.Name; - ownersDropDown.TextColor = selectedOwner.Color.RGB; - - InitializeActorPreviews(); - }); + var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () => SelectOwner(option)); item.Get("LABEL").GetText = () => option.Name; item.GetColor = () => option.Color.RGB; @@ -88,6 +80,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic return item; }; + editorLayer.OnPlayerRemoved = () => + { + if (editorLayer.Players.Players.Values.Any(p => p.Name == selectedOwner.Name)) + return; + SelectOwner(editorLayer.Players.Players.Values.First()); + }; + ownersDropDown.OnClick = () => { var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name); @@ -202,6 +201,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic InitializeActorPreviews(); } + void SelectOwner(PlayerReference option) + { + selectedOwner = option; + ownersDropDown.Text = option.Name; + ownersDropDown.TextColor = option.Color.RGB; + InitializeActorPreviews(); + } + Widget CreateCategoriesPanel() { var categoriesPanel = Ui.LoadWidget("ACTOR_CATEGORY_FILTER_PANEL", null, new WidgetArgs());