mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 17:32:54 +08:00
Add a way to have ruleset-specific configs
This commit is contained in:
parent
18cdd1caac
commit
0b7e1ce667
9
osu.Game/Rulesets/Configuration/IRulesetConfigManager.cs
Normal file
9
osu.Game/Rulesets/Configuration/IRulesetConfigManager.cs
Normal file
@ -0,0 +1,9 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
namespace osu.Game.Rulesets.Configuration
|
||||
{
|
||||
public interface IRulesetConfigManager
|
||||
{
|
||||
}
|
||||
}
|
24
osu.Game/Rulesets/Configuration/RulesetConfigManager.cs
Normal file
24
osu.Game/Rulesets/Configuration/RulesetConfigManager.cs
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Framework.Configuration;
|
||||
using osu.Framework.Platform;
|
||||
|
||||
namespace osu.Game.Rulesets.Configuration
|
||||
{
|
||||
public abstract class RulesetConfigManager<T> : ConfigManager<T>, IRulesetConfigManager
|
||||
where T : struct
|
||||
{
|
||||
protected override string Filename => ruleset?.ShortName;
|
||||
private readonly Ruleset ruleset;
|
||||
|
||||
protected RulesetConfigManager(Ruleset ruleset, Storage storage)
|
||||
: base(storage)
|
||||
{
|
||||
this.ruleset = ruleset;
|
||||
|
||||
// Re-load with the ruleset
|
||||
Load();
|
||||
}
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@ using osu.Framework.Input.Bindings;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Overlays.Settings;
|
||||
using osu.Game.Rulesets.Configuration;
|
||||
using osu.Game.Rulesets.Edit;
|
||||
using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Rulesets.Scoring;
|
||||
@ -89,6 +90,11 @@ namespace osu.Game.Rulesets
|
||||
/// <returns>A descriptive name of the variant.</returns>
|
||||
public virtual string GetVariantName(int variant) => string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="ConfigManager{T}"/> that is used for settings specific to this <see cref="Ruleset"/>.
|
||||
/// </summary>
|
||||
public virtual IRulesetConfigManager CreateConfigManager() => null;
|
||||
|
||||
/// <summary>
|
||||
/// Create a ruleset info based on this ruleset.
|
||||
/// </summary>
|
||||
|
@ -24,6 +24,7 @@ using osu.Game.Rulesets.Scoring;
|
||||
using osu.Game.Screens.Ranking;
|
||||
using osu.Framework.Audio.Sample;
|
||||
using osu.Framework.Graphics.Cursor;
|
||||
using osu.Framework.Platform;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Graphics.Cursor;
|
||||
@ -88,8 +89,13 @@ namespace osu.Game.Screens.Play
|
||||
|
||||
private bool loadedSuccessfully => RulesetContainer?.Objects.Any() == true;
|
||||
|
||||
private DependencyContainer dependencies;
|
||||
|
||||
protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent)
|
||||
=> dependencies = new DependencyContainer(base.CreateLocalDependencies(parent));
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(AudioManager audio, OsuConfigManager config, APIAccess api)
|
||||
private void load(AudioManager audio, OsuConfigManager config, APIAccess api, Storage storage)
|
||||
{
|
||||
this.api = api;
|
||||
|
||||
@ -129,6 +135,10 @@ namespace osu.Game.Screens.Play
|
||||
|
||||
if (!RulesetContainer.Objects.Any())
|
||||
throw new InvalidOperationException("Beatmap contains no hit objects!");
|
||||
|
||||
var rulesetConfig = rulesetInstance.CreateConfigManager();
|
||||
if (rulesetConfig != null)
|
||||
dependencies.Cache(rulesetConfig);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -314,6 +314,8 @@
|
||||
<Compile Include="Overlays\Profile\Sections\Ranks\ScoreModsContainer.cs" />
|
||||
<Compile Include="Overlays\Settings\Sections\Gameplay\ScrollingSettings.cs" />
|
||||
<Compile Include="Overlays\Settings\Sections\Maintenance\DeleteAllBeatmapsDialog.cs" />
|
||||
<Compile Include="Rulesets\Configuration\IRulesetConfigManager.cs" />
|
||||
<Compile Include="Rulesets\Configuration\RulesetConfigManager.cs" />
|
||||
<Compile Include="Rulesets\Mods\IApplicableFailOverride.cs" />
|
||||
<Compile Include="Rulesets\Mods\IApplicableMod.cs" />
|
||||
<Compile Include="Rulesets\Mods\IApplicableToBeatmapConverter.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user