mirror of
https://github.com/ppy/osu.git
synced 2025-02-21 18:42:56 +08:00
Privatise game ruleset and access via DI
Also decouples the bindable at SongSelect, where it is debounced in line with the carousel being updated.
This commit is contained in:
parent
a8579c49f9
commit
b0a1b25983
@ -85,7 +85,7 @@ namespace osu.Game
|
|||||||
private OnScreenDisplay onscreenDisplay;
|
private OnScreenDisplay onscreenDisplay;
|
||||||
|
|
||||||
private Bindable<int> configRuleset;
|
private Bindable<int> configRuleset;
|
||||||
public Bindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
private readonly Bindable<RulesetInfo> ruleset = new Bindable<RulesetInfo>();
|
||||||
|
|
||||||
private Bindable<int> configSkin;
|
private Bindable<int> configSkin;
|
||||||
|
|
||||||
@ -146,11 +146,12 @@ namespace osu.Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies.CacheAs(this);
|
dependencies.CacheAs(this);
|
||||||
|
dependencies.CacheAs(ruleset);
|
||||||
|
|
||||||
// bind config int to database RulesetInfo
|
// bind config int to database RulesetInfo
|
||||||
configRuleset = LocalConfig.GetBindable<int>(OsuSetting.Ruleset);
|
configRuleset = LocalConfig.GetBindable<int>(OsuSetting.Ruleset);
|
||||||
Ruleset.Value = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First();
|
ruleset.Value = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First();
|
||||||
Ruleset.ValueChanged += r => configRuleset.Value = r.ID ?? 0;
|
ruleset.ValueChanged += r => configRuleset.Value = r.ID ?? 0;
|
||||||
|
|
||||||
// bind config int to database SkinInfo
|
// bind config int to database SkinInfo
|
||||||
configSkin = LocalConfig.GetBindable<int>(OsuSetting.Skin);
|
configSkin = LocalConfig.GetBindable<int>(OsuSetting.Skin);
|
||||||
@ -216,7 +217,7 @@ namespace osu.Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ruleset.Value = s.Ruleset;
|
ruleset.Value = s.Ruleset;
|
||||||
|
|
||||||
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(s.Beatmap);
|
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(s.Beatmap);
|
||||||
Beatmap.Value.Mods.Value = s.Mods;
|
Beatmap.Value.Mods.Value = s.Mods;
|
||||||
@ -550,7 +551,7 @@ namespace osu.Game
|
|||||||
// the use case for not applying is in visual/unit tests.
|
// the use case for not applying is in visual/unit tests.
|
||||||
bool applyRestrictions = !currentScreen?.AllowBeatmapRulesetChange ?? false;
|
bool applyRestrictions = !currentScreen?.AllowBeatmapRulesetChange ?? false;
|
||||||
|
|
||||||
Ruleset.Disabled = applyRestrictions;
|
ruleset.Disabled = applyRestrictions;
|
||||||
Beatmap.Disabled = applyRestrictions;
|
Beatmap.Disabled = applyRestrictions;
|
||||||
|
|
||||||
mainContent.Padding = new MarginPadding { Top = ToolbarOffset };
|
mainContent.Padding = new MarginPadding { Top = ToolbarOffset };
|
||||||
|
@ -35,15 +35,13 @@ namespace osu.Game.Overlays.Direct
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(OsuGame game, RulesetStore rulesets, OsuColour colours)
|
private void load(RulesetStore rulesets, OsuColour colours, Bindable<RulesetInfo> ruleset)
|
||||||
{
|
{
|
||||||
DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark;
|
DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark;
|
||||||
|
|
||||||
Ruleset.Value = game?.Ruleset.Value ?? rulesets.GetRuleset(0);
|
Ruleset.Value = ruleset ?? rulesets.GetRuleset(0);
|
||||||
foreach (var r in rulesets.AvailableRulesets)
|
foreach (var r in rulesets.AvailableRulesets)
|
||||||
{
|
|
||||||
modeButtons.Add(new RulesetToggleButton(Ruleset, r));
|
modeButtons.Add(new RulesetToggleButton(Ruleset, r));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RulesetToggleButton : OsuClickableContainer
|
private class RulesetToggleButton : OsuClickableContainer
|
||||||
|
@ -52,7 +52,7 @@ namespace osu.Game.Overlays.Mods
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(permitNulls: true)]
|
[BackgroundDependencyLoader(permitNulls: true)]
|
||||||
private void load(OsuColour colours, OsuGame osu, RulesetStore rulesets, AudioManager audio)
|
private void load(OsuColour colours, Bindable<RulesetInfo> ruleset, RulesetStore rulesets, AudioManager audio)
|
||||||
{
|
{
|
||||||
SelectedMods.ValueChanged += selectedModsChanged;
|
SelectedMods.ValueChanged += selectedModsChanged;
|
||||||
|
|
||||||
@ -60,8 +60,8 @@ namespace osu.Game.Overlays.Mods
|
|||||||
HighMultiplierColour = colours.Green;
|
HighMultiplierColour = colours.Green;
|
||||||
UnrankedLabel.Colour = colours.Blue;
|
UnrankedLabel.Colour = colours.Blue;
|
||||||
|
|
||||||
if (osu != null)
|
if (ruleset != null)
|
||||||
Ruleset.BindTo(osu.Ruleset);
|
Ruleset.BindTo(ruleset);
|
||||||
else
|
else
|
||||||
Ruleset.Value = rulesets.AvailableRulesets.First();
|
Ruleset.Value = rulesets.AvailableRulesets.First();
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ namespace osu.Game.Overlays.Toolbar
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(RulesetStore rulesets, OsuGame game)
|
private void load(RulesetStore rulesets, Bindable<RulesetInfo> parentRuleset)
|
||||||
{
|
{
|
||||||
this.rulesets = rulesets;
|
this.rulesets = rulesets;
|
||||||
foreach (var r in rulesets.AvailableRulesets)
|
foreach (var r in rulesets.AvailableRulesets)
|
||||||
@ -83,8 +83,8 @@ namespace osu.Game.Overlays.Toolbar
|
|||||||
ruleset.ValueChanged += rulesetChanged;
|
ruleset.ValueChanged += rulesetChanged;
|
||||||
ruleset.DisabledChanged += disabledChanged;
|
ruleset.DisabledChanged += disabledChanged;
|
||||||
|
|
||||||
if (game != null)
|
if (ruleset != null)
|
||||||
ruleset.BindTo(game.Ruleset);
|
ruleset.BindTo(parentRuleset);
|
||||||
else
|
else
|
||||||
ruleset.Value = rulesets.AvailableRulesets.FirstOrDefault();
|
ruleset.Value = rulesets.AvailableRulesets.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
@ -82,22 +82,24 @@ namespace osu.Game.Screens
|
|||||||
private SampleChannel sampleExit;
|
private SampleChannel sampleExit;
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(BindableBeatmap beatmap, OsuGame osuGame, AudioManager audio)
|
private void load(BindableBeatmap beatmap, OsuGame osu, AudioManager audio, Bindable<RulesetInfo> ruleset)
|
||||||
{
|
{
|
||||||
if (beatmap != null)
|
if (beatmap != null)
|
||||||
Beatmap.BindTo(beatmap);
|
Beatmap.BindTo(beatmap);
|
||||||
|
|
||||||
if (osuGame != null)
|
if (ruleset != null)
|
||||||
|
Ruleset.BindTo(ruleset);
|
||||||
|
|
||||||
|
if (osu != null)
|
||||||
{
|
{
|
||||||
Ruleset.BindTo(osuGame.Ruleset);
|
OverlayActivationMode.BindTo(osu.OverlayActivationMode);
|
||||||
OverlayActivationMode.BindTo(osuGame.OverlayActivationMode);
|
|
||||||
|
|
||||||
updateOverlayStates = () =>
|
updateOverlayStates = () =>
|
||||||
{
|
{
|
||||||
if (HideOverlaysOnEnter)
|
if (HideOverlaysOnEnter)
|
||||||
osuGame.CloseAllOverlays();
|
osu.CloseAllOverlays();
|
||||||
else
|
else
|
||||||
osuGame.Toolbar.State = Visibility.Visible;
|
osu.Toolbar.State = Visibility.Visible;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,10 +53,10 @@ namespace osu.Game.Screens.Select
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load([CanBeNull] OsuGame osuGame)
|
private void load([CanBeNull] Bindable<RulesetInfo> parentRuleset)
|
||||||
{
|
{
|
||||||
if (osuGame != null)
|
if (parentRuleset != null)
|
||||||
ruleset.BindTo(osuGame.Ruleset);
|
ruleset.BindTo(parentRuleset);
|
||||||
ruleset.ValueChanged += _ => updateDisplay();
|
ruleset.ValueChanged += _ => updateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,15 +170,15 @@ namespace osu.Game.Screens.Select
|
|||||||
public readonly Box Background;
|
public readonly Box Background;
|
||||||
|
|
||||||
[BackgroundDependencyLoader(permitNulls: true)]
|
[BackgroundDependencyLoader(permitNulls: true)]
|
||||||
private void load(OsuColour colours, OsuGame osu, OsuConfigManager config)
|
private void load(OsuColour colours, Bindable<RulesetInfo> parentRuleset, OsuConfigManager config)
|
||||||
{
|
{
|
||||||
sortTabs.AccentColour = colours.GreenLight;
|
sortTabs.AccentColour = colours.GreenLight;
|
||||||
|
|
||||||
showConverted = config.GetBindable<bool>(OsuSetting.ShowConvertedBeatmaps);
|
showConverted = config.GetBindable<bool>(OsuSetting.ShowConvertedBeatmaps);
|
||||||
showConverted.ValueChanged += val => updateCriteria();
|
showConverted.ValueChanged += val => updateCriteria();
|
||||||
|
|
||||||
if (osu != null)
|
if (parentRuleset != null)
|
||||||
ruleset.BindTo(osu.Ruleset);
|
ruleset.BindTo(parentRuleset);
|
||||||
ruleset.ValueChanged += val => updateCriteria();
|
ruleset.ValueChanged += val => updateCriteria();
|
||||||
ruleset.TriggerChange();
|
ruleset.TriggerChange();
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,6 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
|
|
||||||
private APIAccess api;
|
private APIAccess api;
|
||||||
private BeatmapInfo beatmap;
|
private BeatmapInfo beatmap;
|
||||||
private OsuGame osuGame;
|
|
||||||
|
|
||||||
private ScheduledDelegate pendingBeatmapSwitch;
|
private ScheduledDelegate pendingBeatmapSwitch;
|
||||||
|
|
||||||
@ -195,15 +194,14 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(permitNulls: true)]
|
[BackgroundDependencyLoader(permitNulls: true)]
|
||||||
private void load(APIAccess api, OsuGame osuGame)
|
private void load(APIAccess api, Bindable<RulesetInfo> parentRuleset)
|
||||||
{
|
{
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.osuGame = osuGame;
|
|
||||||
|
|
||||||
if (osuGame != null)
|
if (parentRuleset != null)
|
||||||
ruleset.BindTo(osuGame.Ruleset);
|
ruleset.BindTo(parentRuleset);
|
||||||
|
|
||||||
ruleset.ValueChanged += r => updateScores();
|
ruleset.ValueChanged += _ => updateScores();
|
||||||
|
|
||||||
if (api != null)
|
if (api != null)
|
||||||
api.OnStateChange += handleApiStateChange;
|
api.OnStateChange += handleApiStateChange;
|
||||||
|
@ -8,6 +8,7 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Audio;
|
using osu.Framework.Audio;
|
||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
using osu.Framework.Audio.Track;
|
using osu.Framework.Audio.Track;
|
||||||
|
using osu.Framework.Configuration;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
@ -17,6 +18,7 @@ using osu.Game.Beatmaps;
|
|||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Screens.Backgrounds;
|
using osu.Game.Screens.Backgrounds;
|
||||||
using osu.Game.Screens.Edit;
|
using osu.Game.Screens.Edit;
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
@ -62,6 +64,8 @@ namespace osu.Game.Screens.Select
|
|||||||
private SampleChannel sampleChangeDifficulty;
|
private SampleChannel sampleChangeDifficulty;
|
||||||
private SampleChannel sampleChangeBeatmap;
|
private SampleChannel sampleChangeBeatmap;
|
||||||
|
|
||||||
|
protected new readonly Bindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
||||||
|
|
||||||
private DependencyContainer dependencies;
|
private DependencyContainer dependencies;
|
||||||
protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent)
|
protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent)
|
||||||
=> dependencies = new DependencyContainer(base.CreateLocalDependencies(parent));
|
=> dependencies = new DependencyContainer(base.CreateLocalDependencies(parent));
|
||||||
@ -176,8 +180,9 @@ namespace osu.Game.Screens.Select
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours)
|
private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuColour colours)
|
||||||
{
|
{
|
||||||
dependencies.CacheAs(this);
|
dependencies.CacheAs(this);
|
||||||
|
|
||||||
@ -192,9 +197,6 @@ namespace osu.Game.Screens.Select
|
|||||||
if (this.beatmaps == null)
|
if (this.beatmaps == null)
|
||||||
this.beatmaps = beatmaps;
|
this.beatmaps = beatmaps;
|
||||||
|
|
||||||
if (osu != null)
|
|
||||||
Ruleset.BindTo(osu.Ruleset);
|
|
||||||
|
|
||||||
this.beatmaps.ItemAdded += onBeatmapSetAdded;
|
this.beatmaps.ItemAdded += onBeatmapSetAdded;
|
||||||
this.beatmaps.ItemRemoved += onBeatmapSetRemoved;
|
this.beatmaps.ItemRemoved += onBeatmapSetRemoved;
|
||||||
this.beatmaps.BeatmapHidden += onBeatmapHidden;
|
this.beatmaps.BeatmapHidden += onBeatmapHidden;
|
||||||
@ -280,6 +282,7 @@ namespace osu.Game.Screens.Select
|
|||||||
bool preview = beatmap?.BeatmapSetInfoID != Beatmap.Value?.BeatmapInfo.BeatmapSetInfoID;
|
bool preview = beatmap?.BeatmapSetInfoID != Beatmap.Value?.BeatmapInfo.BeatmapSetInfoID;
|
||||||
|
|
||||||
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap, Beatmap.Value);
|
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap, Beatmap.Value);
|
||||||
|
Ruleset.Value = base.Ruleset.Value;
|
||||||
ensurePlayingSelected(preview);
|
ensurePlayingSelected(preview);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user