From ba5a87ca048bfcf78c82071cf1eda951e31d0048 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 17 Feb 2023 15:02:42 +0900 Subject: [PATCH] Add basic target layer selection in skin editor --- osu.Game/Overlays/SkinEditor/SkinEditor.cs | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinEditor.cs b/osu.Game/Overlays/SkinEditor/SkinEditor.cs index 133ec10202..fccddac84f 100644 --- a/osu.Game/Overlays/SkinEditor/SkinEditor.cs +++ b/osu.Game/Overlays/SkinEditor/SkinEditor.cs @@ -24,6 +24,7 @@ using osu.Game.Graphics.Cursor; using osu.Game.Graphics.UserInterface; using osu.Game.Localisation; using osu.Game.Overlays.OSD; +using osu.Game.Overlays.Settings; using osu.Game.Screens.Edit; using osu.Game.Screens.Edit.Components; using osu.Game.Screens.Edit.Components.Menus; @@ -66,6 +67,8 @@ namespace osu.Game.Overlays.SkinEditor [Cached] private readonly OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Blue); + private readonly Bindable selectedTarget = new Bindable(); + private bool hasBegunMutating; private Container? content; @@ -271,9 +274,27 @@ namespace osu.Game.Overlays.SkinEditor content.Child = new SkinBlueprintContainer(targetScreen); - componentsSidebar.Child = new SkinComponentToolbox(getFirstTarget() as CompositeDrawable) + selectedTarget.Default = getFirstTarget()?.Lookup; + if (!availableTargets.Any(t => t.Lookup.Equals(selectedTarget.Value))) + selectedTarget.Value = getFirstTarget()?.Lookup; + + componentsSidebar.Children = new[] { - RequestPlacement = placeComponent + new EditorSidebarSection("Current working layer") + { + Children = new Drawable[] + { + new SettingsDropdown + { + Items = availableTargets.Select(t => t.Lookup), + Current = selectedTarget, + } + } + }, + new SkinComponentToolbox(getFirstTarget()) + { + RequestPlacement = placeComponent + } }; } } @@ -341,9 +362,9 @@ namespace osu.Game.Overlays.SkinEditor private IEnumerable availableTargets => targetScreen.ChildrenOfType(); - private ISerialisableDrawableContainer? getFirstTarget() => availableTargets.FirstOrDefault(); + private SkinComponentsContainer? getFirstTarget() => availableTargets.FirstOrDefault(); - private ISerialisableDrawableContainer? getTarget(SkinComponentsContainerLookup.TargetArea target) + private SkinComponentsContainer? getTarget(SkinComponentsContainerLookup.TargetArea target) { return availableTargets.FirstOrDefault(c => c.Lookup.Target == target); }