Fix mod overlay and footer not updating multiplayer on settings change

This commit is contained in:
Salman Ahmed
2022-07-18 07:38:56 +03:00
parent 32ba58109b
commit eddae7b143
2 changed files with 21 additions and 1 deletions

View File

@ -222,6 +222,8 @@ namespace osu.Game.Overlays.Mods
globalAvailableMods.BindTo(game.AvailableMods); globalAvailableMods.BindTo(game.AvailableMods);
} }
private ModSettingChangeTracker? modSettingChangeTracker;
protected override void LoadComplete() protected override void LoadComplete()
{ {
// this is called before base call so that the mod state is populated early, and the transition in `PopIn()` can play out properly. // this is called before base call so that the mod state is populated early, and the transition in `PopIn()` can play out properly.
@ -238,9 +240,14 @@ namespace osu.Game.Overlays.Mods
SelectedMods.BindValueChanged(val => SelectedMods.BindValueChanged(val =>
{ {
modSettingChangeTracker?.Dispose();
updateMultiplier(); updateMultiplier();
updateCustomisation(val); updateCustomisation(val);
updateFromExternalSelection(); updateFromExternalSelection();
modSettingChangeTracker = new ModSettingChangeTracker(val.NewValue);
modSettingChangeTracker.SettingChanged += _ => updateMultiplier();
}, true); }, true);
customisationVisible.BindValueChanged(_ => updateCustomisationVisualState(), true); customisationVisible.BindValueChanged(_ => updateCustomisationVisualState(), true);

View File

@ -9,9 +9,11 @@ using osu.Game.Screens.Play.HUD;
using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Mods;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using JetBrains.Annotations;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Game.Configuration;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osuTK; using osuTK;
@ -61,11 +63,22 @@ namespace osu.Game.Screens.Select
Hotkey = GlobalAction.ToggleModSelection; Hotkey = GlobalAction.ToggleModSelection;
} }
[CanBeNull]
private ModSettingChangeTracker modSettingChangeTracker;
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
Current.BindValueChanged(_ => updateMultiplierText(), true); Current.BindValueChanged(mods =>
{
modSettingChangeTracker?.Dispose();
updateMultiplierText();
modSettingChangeTracker = new ModSettingChangeTracker(mods.NewValue);
modSettingChangeTracker.SettingChanged += _ => updateMultiplierText();
}, true);
} }
private void updateMultiplierText() => Schedule(() => private void updateMultiplierText() => Schedule(() =>