mirror of
https://github.com/osukey/osukey.git
synced 2025-04-29 02:37:25 +09:00
Refactor exposed mod retrieval methods for better safety
This commit is contained in:
parent
ce6b022a90
commit
cf633973a9
@ -38,25 +38,25 @@ namespace osu.Game.Benchmarks
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void BenchmarkGetAllMods()
|
public void BenchmarkGetAllMods()
|
||||||
{
|
{
|
||||||
ruleset.GetAllMods().Consume(new Consumer());
|
ruleset.CreateAllMods().Consume(new Consumer());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void BenchmarkGetAllModsForReference()
|
public void BenchmarkGetAllModsForReference()
|
||||||
{
|
{
|
||||||
ruleset.GetAllModsForReference().Consume(new Consumer());
|
ruleset.AllMods.Consume(new Consumer());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void BenchmarkGetForAcronym()
|
public void BenchmarkGetForAcronym()
|
||||||
{
|
{
|
||||||
ruleset.GetModForAcronym("DT");
|
ruleset.CreateModFromAcronym("DT");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void BenchmarkGetForType()
|
public void BenchmarkGetForType()
|
||||||
{
|
{
|
||||||
ruleset.GetMod<ModDoubleTime>();
|
ruleset.CreateMod<ModDoubleTime>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
var working = CreateWorkingBeatmap(rulesetInfo);
|
var working = CreateWorkingBeatmap(rulesetInfo);
|
||||||
|
|
||||||
Beatmap.Value = working;
|
Beatmap.Value = working;
|
||||||
SelectedMods.Value = new[] { ruleset.GetAllMods().First(m => m is ModNoFail) };
|
SelectedMods.Value = new[] { ruleset.CreateAllMods().First(m => m is ModNoFail) };
|
||||||
|
|
||||||
Player = CreatePlayer(ruleset);
|
Player = CreatePlayer(ruleset);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
AddStep("select EZ mod", () =>
|
AddStep("select EZ mod", () =>
|
||||||
{
|
{
|
||||||
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
||||||
SelectedMods.Value = new[] { ruleset.GetAllMods().OfType<ModEasy>().Single() };
|
SelectedMods.Value = new[] { ruleset.CreateAllMods().OfType<ModEasy>().Single() };
|
||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("circle size bar is blue", () => barIsBlue(advancedStats.FirstValue));
|
AddAssert("circle size bar is blue", () => barIsBlue(advancedStats.FirstValue));
|
||||||
@ -106,7 +106,7 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
AddStep("select HR mod", () =>
|
AddStep("select HR mod", () =>
|
||||||
{
|
{
|
||||||
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
||||||
SelectedMods.Value = new[] { ruleset.GetAllMods().OfType<ModHardRock>().Single() };
|
SelectedMods.Value = new[] { ruleset.CreateAllMods().OfType<ModHardRock>().Single() };
|
||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("circle size bar is red", () => barIsRed(advancedStats.FirstValue));
|
AddAssert("circle size bar is red", () => barIsRed(advancedStats.FirstValue));
|
||||||
@ -123,7 +123,7 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
AddStep("select unchanged Difficulty Adjust mod", () =>
|
AddStep("select unchanged Difficulty Adjust mod", () =>
|
||||||
{
|
{
|
||||||
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
||||||
var difficultyAdjustMod = ruleset.GetAllMods().OfType<ModDifficultyAdjust>().Single();
|
var difficultyAdjustMod = ruleset.CreateAllMods().OfType<ModDifficultyAdjust>().Single();
|
||||||
difficultyAdjustMod.ReadFromDifficulty(advancedStats.Beatmap.BaseDifficulty);
|
difficultyAdjustMod.ReadFromDifficulty(advancedStats.Beatmap.BaseDifficulty);
|
||||||
SelectedMods.Value = new[] { difficultyAdjustMod };
|
SelectedMods.Value = new[] { difficultyAdjustMod };
|
||||||
});
|
});
|
||||||
@ -142,7 +142,7 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
AddStep("select changed Difficulty Adjust mod", () =>
|
AddStep("select changed Difficulty Adjust mod", () =>
|
||||||
{
|
{
|
||||||
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
var ruleset = advancedStats.Beatmap.Ruleset.CreateInstance();
|
||||||
var difficultyAdjustMod = ruleset.GetAllMods().OfType<OsuModDifficultyAdjust>().Single();
|
var difficultyAdjustMod = ruleset.CreateAllMods().OfType<OsuModDifficultyAdjust>().Single();
|
||||||
var originalDifficulty = advancedStats.Beatmap.BaseDifficulty;
|
var originalDifficulty = advancedStats.Beatmap.BaseDifficulty;
|
||||||
|
|
||||||
difficultyAdjustMod.ReadFromDifficulty(originalDifficulty);
|
difficultyAdjustMod.ReadFromDifficulty(originalDifficulty);
|
||||||
|
@ -92,7 +92,7 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
{
|
{
|
||||||
AddStep("setup display", () =>
|
AddStep("setup display", () =>
|
||||||
{
|
{
|
||||||
var randomMods = Ruleset.Value.CreateInstance().GetAllMods().OrderBy(_ => RNG.Next()).Take(5).ToList();
|
var randomMods = Ruleset.Value.CreateInstance().CreateAllMods().OrderBy(_ => RNG.Next()).Take(5).ToList();
|
||||||
|
|
||||||
OsuLogo logo = new OsuLogo { Scale = new Vector2(0.15f) };
|
OsuLogo logo = new OsuLogo { Scale = new Vector2(0.15f) };
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
Width = 200,
|
Width = 200,
|
||||||
Current =
|
Current =
|
||||||
{
|
{
|
||||||
Value = new OsuRuleset().GetAllMods().ToArray(),
|
Value = new OsuRuleset().CreateAllMods().ToArray(),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -158,8 +158,8 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
var mania = new ManiaRuleset();
|
var mania = new ManiaRuleset();
|
||||||
|
|
||||||
testModsWithSameBaseType(
|
testModsWithSameBaseType(
|
||||||
mania.GetAllMods().Single(m => m.GetType() == typeof(ManiaModFadeIn)),
|
mania.CreateAllMods().Single(m => m.GetType() == typeof(ManiaModFadeIn)),
|
||||||
mania.GetAllMods().Single(m => m.GetType() == typeof(ManiaModHidden)));
|
mania.CreateAllMods().Single(m => m.GetType() == typeof(ManiaModHidden)));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -45,7 +45,7 @@ namespace osu.Game.Tournament.Tests.Components
|
|||||||
private void success(APIBeatmap apiBeatmap)
|
private void success(APIBeatmap apiBeatmap)
|
||||||
{
|
{
|
||||||
beatmap = apiBeatmap.ToBeatmap(rulesets);
|
beatmap = apiBeatmap.ToBeatmap(rulesets);
|
||||||
var mods = rulesets.GetRuleset(Ladder.Ruleset.Value.ID ?? 0).CreateInstance().GetAllMods();
|
var mods = rulesets.GetRuleset(Ladder.Ruleset.Value.ID ?? 0).CreateInstance().CreateAllMods();
|
||||||
|
|
||||||
foreach (var mod in mods)
|
foreach (var mod in mods)
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ namespace osu.Game.Tournament.Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ruleset = rulesets.GetRuleset(ladderInfo.Ruleset.Value?.ID ?? 0);
|
var ruleset = rulesets.GetRuleset(ladderInfo.Ruleset.Value?.ID ?? 0);
|
||||||
var modIcon = ruleset?.CreateInstance().GetModForAcronym(modAcronym);
|
var modIcon = ruleset?.CreateInstance().CreateModFromAcronym(modAcronym);
|
||||||
|
|
||||||
if (modIcon == null)
|
if (modIcon == null)
|
||||||
return;
|
return;
|
||||||
|
@ -48,7 +48,7 @@ namespace osu.Game.Online.API
|
|||||||
|
|
||||||
public Mod ToMod(Ruleset ruleset)
|
public Mod ToMod(Ruleset ruleset)
|
||||||
{
|
{
|
||||||
Mod resultMod = ruleset.GetModForAcronym(Acronym);
|
Mod resultMod = ruleset.CreateModFromAcronym(Acronym);
|
||||||
|
|
||||||
if (resultMod == null)
|
if (resultMod == null)
|
||||||
throw new InvalidOperationException($"There is no mod in the ruleset ({ruleset.ShortName}) matching the acronym {Acronym}.");
|
throw new InvalidOperationException($"There is no mod in the ruleset ({ruleset.ShortName}) matching the acronym {Acronym}.");
|
||||||
|
@ -23,10 +23,10 @@ namespace osu.Game.Online.API.Requests.Responses
|
|||||||
|
|
||||||
var rulesetInstance = ruleset.CreateInstance();
|
var rulesetInstance = ruleset.CreateInstance();
|
||||||
|
|
||||||
var mods = Mods != null ? Mods.Select(acronym => rulesetInstance.GetModForAcronym(acronym)).Where(m => m != null).ToArray() : Array.Empty<Mod>();
|
var mods = Mods != null ? Mods.Select(acronym => rulesetInstance.CreateModFromAcronym(acronym)).Where(m => m != null).ToArray() : Array.Empty<Mod>();
|
||||||
|
|
||||||
// all API scores provided by this class are considered to be legacy.
|
// all API scores provided by this class are considered to be legacy.
|
||||||
mods = mods.Append(rulesetInstance.GetMod<ModClassic>()).ToArray();
|
mods = mods.Append(rulesetInstance.CreateMod<ModClassic>()).ToArray();
|
||||||
|
|
||||||
var scoreInfo = new ScoreInfo
|
var scoreInfo = new ScoreInfo
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
modsContainer.Add(new ModButton(new ModNoMod()));
|
modsContainer.Add(new ModButton(new ModNoMod()));
|
||||||
modsContainer.AddRange(ruleset.NewValue.CreateInstance().GetAllModsForReference().Where(m => m.UserPlayable).Select(m => new ModButton(m)));
|
modsContainer.AddRange(ruleset.NewValue.CreateInstance().AllMods.Where(m => m.UserPlayable).Select(m => new ModButton(m.CreateInstance())));
|
||||||
|
|
||||||
modsContainer.ForEach(button =>
|
modsContainer.ForEach(button =>
|
||||||
{
|
{
|
||||||
|
@ -107,9 +107,9 @@ namespace osu.Game.Overlays.Mods
|
|||||||
|
|
||||||
var incompatibleTypes = mod.IncompatibleMods;
|
var incompatibleTypes = mod.IncompatibleMods;
|
||||||
|
|
||||||
var allMods = ruleset.Value.CreateInstance().GetAllModsForReference();
|
var allMods = ruleset.Value.CreateInstance().AllMods;
|
||||||
|
|
||||||
incompatibleMods.Value = allMods.Where(m => m.GetType() != mod.GetType() && incompatibleTypes.Any(t => t.IsInstanceOfType(m))).ToList();
|
incompatibleMods.Value = allMods.Where(m => m.GetType() != mod.GetType() && incompatibleTypes.Any(t => t.IsInstanceOfType(m))).Select(m => m.CreateInstance()).ToList();
|
||||||
incompatibleText.Text = incompatibleMods.Value.Any() ? "Incompatible with:" : "Compatible with all mods";
|
incompatibleText.Text = incompatibleMods.Value.Any() ? "Incompatible with:" : "Compatible with all mods";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Newtonsoft.Json;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mods
|
namespace osu.Game.Rulesets.Mods
|
||||||
{
|
{
|
||||||
@ -11,7 +11,22 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The shortened name of this mod.
|
/// The shortened name of this mod.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonProperty("acronym")]
|
|
||||||
string Acronym { get; }
|
string Acronym { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The icon of this mod.
|
||||||
|
/// </summary>
|
||||||
|
IconUsage? Icon { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether this mod is playable by an end user.
|
||||||
|
/// Should be <c>false</c> for cases where the user is not interacting with the game (so it can be excluded from multiplayer selection, for example).
|
||||||
|
/// </summary>
|
||||||
|
bool UserPlayable { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a fresh <see cref="Mod"/> instance based on this mod.
|
||||||
|
/// </summary>
|
||||||
|
Mod CreateInstance() => ((Mod)this).DeepClone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,9 +33,6 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract string Acronym { get; }
|
public abstract string Acronym { get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The icon of this mod.
|
|
||||||
/// </summary>
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public virtual IconUsage? Icon => null;
|
public virtual IconUsage? Icon => null;
|
||||||
|
|
||||||
@ -106,10 +103,6 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public virtual bool HasImplementation => this is IApplicableMod;
|
public virtual bool HasImplementation => this is IApplicableMod;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether this mod is playable by an end user.
|
|
||||||
/// Should be <c>false</c> for cases where the user is not interacting with the game (so it can be excluded from mutliplayer selection, for example).
|
|
||||||
/// </summary>
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public virtual bool UserPlayable => true;
|
public virtual bool UserPlayable => true;
|
||||||
|
|
||||||
|
@ -39,45 +39,48 @@ namespace osu.Game.Rulesets
|
|||||||
{
|
{
|
||||||
public RulesetInfo RulesetInfo { get; internal set; }
|
public RulesetInfo RulesetInfo { get; internal set; }
|
||||||
|
|
||||||
|
private static readonly ConcurrentDictionary<int, IMod[]> mod_reference_cache = new ConcurrentDictionary<int, IMod[]>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A queryable source containing all available mods.
|
||||||
|
/// Call <see cref="IMod.CreateInstance"/> for consumption purposes.
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<IMod> AllMods
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!(RulesetInfo.ID is int id))
|
||||||
|
return CreateAllMods();
|
||||||
|
|
||||||
|
if (!mod_reference_cache.TryGetValue(id, out var mods))
|
||||||
|
mod_reference_cache[id] = mods = CreateAllMods().Cast<IMod>().ToArray();
|
||||||
|
|
||||||
|
return mods;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns fresh instances of all mods.
|
/// Returns fresh instances of all mods.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// This comes with considerable allocation overhead. If only accessing for reference purposes (ie. not changing bindables / settings)
|
/// This comes with considerable allocation overhead. If only accessing for reference purposes (ie. not changing bindables / settings)
|
||||||
/// use <see cref="GetAllModsForReference"/> instead.
|
/// use <see cref="AllMods"/> instead.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public IEnumerable<Mod> GetAllMods() => Enum.GetValues(typeof(ModType)).Cast<ModType>()
|
public IEnumerable<Mod> CreateAllMods() => Enum.GetValues(typeof(ModType)).Cast<ModType>()
|
||||||
// Confine all mods of each mod type into a single IEnumerable<Mod>
|
// Confine all mods of each mod type into a single IEnumerable<Mod>
|
||||||
.SelectMany(GetModsFor)
|
.SelectMany(GetModsFor)
|
||||||
// Filter out all null mods
|
// Filter out all null mods
|
||||||
.Where(mod => mod != null)
|
.Where(mod => mod != null)
|
||||||
// Resolve MultiMods as their .Mods property
|
// Resolve MultiMods as their .Mods property
|
||||||
.SelectMany(mod => (mod as MultiMod)?.Mods ?? new[] { mod });
|
.SelectMany(mod => (mod as MultiMod)?.Mods ?? new[] { mod });
|
||||||
|
|
||||||
private static readonly ConcurrentDictionary<int, Mod[]> mod_reference_cache = new ConcurrentDictionary<int, Mod[]>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns all mods for a query-only purpose.
|
|
||||||
/// Bindables should not be considered usable when retrieving via this method (use <see cref="GetAllMods"/> instead).
|
|
||||||
/// </summary>
|
|
||||||
public IEnumerable<Mod> GetAllModsForReference()
|
|
||||||
{
|
|
||||||
if (!(RulesetInfo.ID is int id))
|
|
||||||
return GetAllMods();
|
|
||||||
|
|
||||||
if (!mod_reference_cache.TryGetValue(id, out var mods))
|
|
||||||
mod_reference_cache[id] = mods = GetAllMods().ToArray();
|
|
||||||
|
|
||||||
return mods;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a fresh instance of the mod matching the specified acronym.
|
/// Returns a fresh instance of the mod matching the specified acronym.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="acronym">The acronym to query for .</param>
|
/// <param name="acronym">The acronym to query for .</param>
|
||||||
public Mod GetModForAcronym(string acronym)
|
public Mod CreateModFromAcronym(string acronym)
|
||||||
{
|
{
|
||||||
var type = GetAllModsForReference().FirstOrDefault(m => m.Acronym == acronym)?.GetType();
|
var type = AllMods.FirstOrDefault(m => m.Acronym == acronym)?.GetType();
|
||||||
|
|
||||||
if (type != null)
|
if (type != null)
|
||||||
return (Mod)Activator.CreateInstance(type);
|
return (Mod)Activator.CreateInstance(type);
|
||||||
@ -88,10 +91,10 @@ namespace osu.Game.Rulesets
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a fresh instance of the mod matching the specified type.
|
/// Returns a fresh instance of the mod matching the specified type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public T GetMod<T>()
|
public T CreateMod<T>()
|
||||||
where T : Mod
|
where T : Mod
|
||||||
{
|
{
|
||||||
var type = GetAllModsForReference().FirstOrDefault(m => m is T)?.GetType();
|
var type = AllMods.FirstOrDefault(m => m is T)?.GetType();
|
||||||
|
|
||||||
if (type != null)
|
if (type != null)
|
||||||
return (T)Activator.CreateInstance(type);
|
return (T)Activator.CreateInstance(type);
|
||||||
@ -179,7 +182,7 @@ namespace osu.Game.Rulesets
|
|||||||
}
|
}
|
||||||
|
|
||||||
[CanBeNull]
|
[CanBeNull]
|
||||||
public ModAutoplay GetAutoplayMod() => GetMod<ModAutoplay>();
|
public ModAutoplay GetAutoplayMod() => CreateMod<ModAutoplay>();
|
||||||
|
|
||||||
public virtual ISkin CreateLegacySkinProvider([NotNull] ISkin skin, IBeatmap beatmap) => null;
|
public virtual ISkin CreateLegacySkinProvider([NotNull] ISkin skin, IBeatmap beatmap) => null;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ namespace osu.Game.Scoring.Legacy
|
|||||||
|
|
||||||
// lazer replays get a really high version number.
|
// lazer replays get a really high version number.
|
||||||
if (version < LegacyScoreEncoder.FIRST_LAZER_VERSION)
|
if (version < LegacyScoreEncoder.FIRST_LAZER_VERSION)
|
||||||
scoreInfo.Mods = scoreInfo.Mods.Append(currentRuleset.GetMod<ModClassic>()).ToArray();
|
scoreInfo.Mods = scoreInfo.Mods.Append(currentRuleset.CreateMod<ModClassic>()).ToArray();
|
||||||
|
|
||||||
currentBeatmap = workingBeatmap.GetPlayableBeatmap(currentRuleset.RulesetInfo, scoreInfo.Mods);
|
currentBeatmap = workingBeatmap.GetPlayableBeatmap(currentRuleset.RulesetInfo, scoreInfo.Mods);
|
||||||
scoreInfo.Beatmap = currentBeatmap.BeatmapInfo;
|
scoreInfo.Beatmap = currentBeatmap.BeatmapInfo;
|
||||||
|
@ -34,7 +34,7 @@ namespace osu.Game.Tests.Beatmaps
|
|||||||
protected void TestToLegacy(LegacyMods expectedLegacyMods, Type[] providedModTypes)
|
protected void TestToLegacy(LegacyMods expectedLegacyMods, Type[] providedModTypes)
|
||||||
{
|
{
|
||||||
var ruleset = CreateRuleset();
|
var ruleset = CreateRuleset();
|
||||||
var modInstances = ruleset.GetAllMods()
|
var modInstances = ruleset.CreateAllMods()
|
||||||
.Where(mod => providedModTypes.Contains(mod.GetType()))
|
.Where(mod => providedModTypes.Contains(mod.GetType()))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
var actualLegacyMods = ruleset.ConvertToLegacyMods(modInstances);
|
var actualLegacyMods = ruleset.ConvertToLegacyMods(modInstances);
|
||||||
|
@ -28,7 +28,7 @@ namespace osu.Game.Tests
|
|||||||
RulesetID = ruleset.ID ?? 0;
|
RulesetID = ruleset.ID ?? 0;
|
||||||
|
|
||||||
Mods = excessMods
|
Mods = excessMods
|
||||||
? ruleset.CreateInstance().GetAllMods().ToArray()
|
? ruleset.CreateInstance().CreateAllMods().ToArray()
|
||||||
: new Mod[] { new TestModHardRock(), new TestModDoubleTime() };
|
: new Mod[] { new TestModHardRock(), new TestModDoubleTime() };
|
||||||
|
|
||||||
TotalScore = 2845370;
|
TotalScore = 2845370;
|
||||||
|
@ -67,7 +67,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
if (!AllowFail)
|
if (!AllowFail)
|
||||||
{
|
{
|
||||||
var noFailMod = ruleset.GetMod<ModNoFail>();
|
var noFailMod = ruleset.CreateMod<ModNoFail>();
|
||||||
if (noFailMod != null)
|
if (noFailMod != null)
|
||||||
SelectedMods.Value = new[] { noFailMod };
|
SelectedMods.Value = new[] { noFailMod };
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user