public void TestModSettingChangeTracker() { ModSettingChangeTracker tracker = null; Queue <Mod> settingsChangedQueue = null; setBeatmapWithDifficultyParameters(5); AddStep("add mod settings change tracker", () => { settingsChangedQueue = new Queue <Mod>(); tracker = new ModSettingChangeTracker(modDifficultyAdjust.Yield()) { SettingChanged = settingsChangedQueue.Enqueue }; }); AddAssert("no settings changed", () => settingsChangedQueue.Count == 0); setSliderValue("Circle Size", 3); settingsChangedFired(); setSliderValue("Circle Size", 5); checkBindableAtValue("Circle Size", 5); settingsChangedFired(); AddStep("reset mod settings", () => modDifficultyAdjust.CircleSize.SetDefault()); checkBindableAtValue("Circle Size", null); settingsChangedFired(); setExtendedLimits(true); settingsChangedFired(); AddStep("dispose tracker", () => { tracker.Dispose(); tracker = null; }); void settingsChangedFired() { AddAssert("setting changed event fired", () => { settingsChangedQueue.Dequeue(); return(settingsChangedQueue.Count == 0); }); } }
private void onUserModsChanged(ValueChangedEvent <IReadOnlyList <Mod> > mods) { modSettingChangeTracker?.Dispose(); if (client.Room == null) { return; } client.ChangeUserMods(mods.NewValue); modSettingChangeTracker = new ModSettingChangeTracker(mods.NewValue); modSettingChangeTracker.SettingChanged += onModSettingsChanged; }
protected override void LoadComplete() { base.LoadComplete(); currentRuleset.BindValueChanged(_ => updateTrackedBindables()); currentMods.BindValueChanged(mods => { modSettingChangeTracker?.Dispose(); updateTrackedBindables(); modSettingChangeTracker = new ModSettingChangeTracker(mods.NewValue); modSettingChangeTracker.SettingChanged += _ => { debouncedModSettingsChange?.Cancel(); debouncedModSettingsChange = Scheduler.AddDelayed(updateTrackedBindables, 100); }; }, true); }