scorll container and save mod after popover hidden

Requires manual handling of many visual effects
This commit is contained in:
cdwcgt
2023-03-11 12:31:33 +09:00
parent 1cd565193e
commit 15f11bb1e8
4 changed files with 95 additions and 18 deletions

View File

@ -18,10 +18,12 @@ using osu.Game.Rulesets.Mods;
namespace osu.Game.Overlays.Mods
{
public partial class ModPresetPanel : ModSelectPanel, IHasCustomTooltip<ModPreset>, IHasContextMenu, IHasPopover
public partial class ModPresetPanel : ModSelectPanel, IHasCustomTooltip<List<Mod>>, IHasContextMenu, IHasPopover
{
public readonly Live<ModPreset> Preset;
public readonly Bindable<List<Mod>> Mods = new Bindable<List<Mod>>();
public override BindableBool Active { get; } = new BindableBool();
[Resolved]
@ -35,6 +37,7 @@ namespace osu.Game.Overlays.Mods
public ModPresetPanel(Live<ModPreset> preset)
{
Preset = preset;
Mods.Value = preset.Value.Mods.ToList();
Title = preset.Value.Name;
Description = preset.Value.Description;
@ -51,6 +54,7 @@ namespace osu.Game.Overlays.Mods
base.LoadComplete();
selectedMods.BindValueChanged(_ => selectedModsChanged(), true);
Mods.BindValueChanged(_ => updateActiveState(), true);
}
protected override void Select()
@ -78,13 +82,13 @@ namespace osu.Game.Overlays.Mods
private void updateActiveState()
{
Active.Value = new HashSet<Mod>(Preset.Value.Mods).SetEquals(selectedMods.Value);
Active.Value = new HashSet<Mod>(Mods.Value).SetEquals(selectedMods.Value);
}
#region IHasCustomTooltip
public ModPreset TooltipContent => Preset.Value;
public ITooltip<ModPreset> GetCustomTooltip() => new ModPresetTooltip(ColourProvider);
public List<Mod> TooltipContent => Mods.Value;
public ITooltip<List<Mod>> GetCustomTooltip() => new ModPresetTooltip(ColourProvider);
#endregion