From 9191c4f3e3f4dc64e6d5151f2f3cc8e6df050703 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 19 May 2017 16:31:05 +0900 Subject: [PATCH] Remove LegacyBeatmapConverter. --- .../Beatmaps/LegacyBeatmapConverter.cs | 146 ------------------ .../Beatmaps/ManiaBeatmapConverter.cs | 118 ++++++++++++-- .../osu.Game.Rulesets.Mania.csproj | 1 - osu.Game/Screens/Play/Player.cs | 2 +- 4 files changed, 108 insertions(+), 159 deletions(-) delete mode 100644 osu.Game.Rulesets.Mania/Beatmaps/LegacyBeatmapConverter.cs diff --git a/osu.Game.Rulesets.Mania/Beatmaps/LegacyBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/LegacyBeatmapConverter.cs deleted file mode 100644 index e3045df185..0000000000 --- a/osu.Game.Rulesets.Mania/Beatmaps/LegacyBeatmapConverter.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2007-2017 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Collections.Generic; -using osu.Game.Beatmaps; -using osu.Game.Rulesets.Mania.Objects; -using osu.Game.Rulesets.Objects; -using osu.Game.Rulesets.Objects.Types; -using osu.Game.Rulesets.Mania.Beatmaps.Patterns; -using osu.Game.Rulesets.Mania.MathUtils; - -namespace osu.Game.Rulesets.Mania.Beatmaps -{ - /// - /// Special converter used for converting from osu!stable beatmaps. - /// - internal class LegacyBeatmapConverter - { - private Pattern lastPattern = new Pattern(); - - private readonly FastRandom random; - private readonly Beatmap beatmap; - - public LegacyBeatmapConverter(Beatmap beatmap) - { - this.beatmap = beatmap; - - int seed = (int)Math.Round(beatmap.BeatmapInfo.Difficulty.DrainRate + beatmap.BeatmapInfo.Difficulty.CircleSize) - * 20 + (int)(beatmap.BeatmapInfo.Difficulty.OverallDifficulty * 41.2) + (int)Math.Round(beatmap.BeatmapInfo.Difficulty.ApproachRate); - random = new FastRandom(seed); - } - - public IEnumerable Convert(HitObject original) - { - var maniaOriginal = original as ManiaHitObject; - if (maniaOriginal != null) - { - yield return maniaOriginal; - yield break; - } - - IEnumerable objects; - switch (beatmap.BeatmapInfo.RulesetID) - { - default: - objects = generateConverted(original); - break; - case 3: - objects = generateSpecific(original); - break; - } - - if (objects == null) - yield break; - - foreach (ManiaHitObject obj in objects) - yield return obj; - } - - private IEnumerable generateSpecific(HitObject original) - { - var generator = new SpecificPatternGenerator(random, original, beatmap, lastPattern); - - Pattern newPattern = generator.Generate(); - lastPattern = newPattern; - - return newPattern.HitObjects; - } - - private IEnumerable generateConverted(HitObject original) - { - var endTimeData = original as IHasEndTime; - var distanceData = original as IHasDistance; - var positionData = original as IHasPosition; - - // Following lines currently commented out to appease resharper - - //PatternGenerator conversion = null; - - if (distanceData != null) - { - // Slider - } - else if (endTimeData != null) - { - // Spinner - } - else if (positionData != null) - { - // Circle - } - - //if (conversion == null) - return null; - - //Pattern newPattern = conversion.Generate(); - //lastPattern = newPattern; - - //return newPattern.HitObjects; - } - - /// - /// A pattern generator for mania-specific beatmaps. - /// - private class SpecificPatternGenerator : Patterns.Legacy.PatternGenerator - { - public SpecificPatternGenerator(FastRandom random, HitObject hitObject, Beatmap beatmap, Pattern previousPattern) - : base(random, hitObject, beatmap, previousPattern) - { - } - - public override Pattern Generate() - { - var endTimeData = HitObject as IHasEndTime; - var positionData = HitObject as IHasXPosition; - - int column = GetColumn(positionData?.X ?? 0); - - var pattern = new Pattern(); - - if (endTimeData != null) - { - pattern.Add(new HoldNote - { - StartTime = HitObject.StartTime, - Samples = HitObject.Samples, - Duration = endTimeData.Duration, - Column = column, - }); - } - else if (positionData != null) - { - pattern.Add(new Note - { - StartTime = HitObject.StartTime, - Samples = HitObject.Samples, - Column = column - }); - } - - return pattern; - } - } - } -} diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index 9740c3279d..ed040bdc30 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -9,6 +9,9 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Types; using System.Linq; +using osu.Game.Rulesets.Mania.Beatmaps.Patterns; +using osu.Game.Rulesets.Mania.MathUtils; +using osu.Game.Database; namespace osu.Game.Rulesets.Mania.Beatmaps { @@ -16,19 +19,20 @@ namespace osu.Game.Rulesets.Mania.Beatmaps { protected override IEnumerable ValidConversionTypes { get; } = new[] { typeof(IHasXPosition) }; + private Pattern lastPattern = new Pattern(); + private FastRandom random; + private bool isForCurrentRuleset; + protected override Beatmap ConvertBeatmap(Beatmap original, bool isForCurrentRuleset) { + this.isForCurrentRuleset = isForCurrentRuleset; - // Todo: This should be cased when we get better conversion methods - var converter = new LegacyBeatmapConverter(original); + BeatmapDifficulty difficulty = original.BeatmapInfo.Difficulty; - return new Beatmap - { - BeatmapInfo = original.BeatmapInfo, - TimingInfo = original.TimingInfo, - // We need to sort here, because the converter generates patterns - HitObjects = original.HitObjects.SelectMany(converter.Convert).OrderBy(h => h.StartTime).ToList() - }; + int seed = (int)Math.Round(difficulty.DrainRate + difficulty.CircleSize) * 20 + (int)(difficulty.OverallDifficulty * 41.2) + (int)Math.Round(difficulty.ApproachRate); + random = new FastRandom(seed); + + return base.ConvertBeatmap(original, isForCurrentRuleset); } protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) @@ -40,10 +44,102 @@ namespace osu.Game.Rulesets.Mania.Beatmaps yield break; } + IEnumerable objects; + if (isForCurrentRuleset) + objects = generateSpecific(original, beatmap); + else + objects = generateConverted(original, beatmap); + if (objects == null) + yield break; - // Handled by the LegacyConvereter - yield return null; + foreach (ManiaHitObject obj in objects) + yield return obj; + } + + private IEnumerable generateSpecific(HitObject original, Beatmap beatmap) + { + var generator = new SpecificBeatmapPatternGenerator(random, original, beatmap, lastPattern); + + Pattern newPattern = generator.Generate(); + lastPattern = newPattern; + + return newPattern.HitObjects; + } + + private IEnumerable generateConverted(HitObject original, Beatmap beatmap) + { + var endTimeData = original as IHasEndTime; + var distanceData = original as IHasDistance; + var positionData = original as IHasPosition; + + // Following lines currently commented out to appease resharper + + //Patterns.PatternGenerator conversion = null; + + if (distanceData != null) + { + // Slider + } + else if (endTimeData != null) + { + // Spinner + } + else if (positionData != null) + { + // Circle + } + + //if (conversion == null) + return null; + + //Pattern newPattern = conversion.Generate(); + //lastPattern = newPattern; + + //return newPattern.HitObjects; + } + + /// + /// A pattern generator for mania-specific beatmaps. + /// + private class SpecificBeatmapPatternGenerator : Patterns.Legacy.PatternGenerator + { + public SpecificBeatmapPatternGenerator(FastRandom random, HitObject hitObject, Beatmap beatmap, Pattern previousPattern) + : base(random, hitObject, beatmap, previousPattern) + { + } + + public override Pattern Generate() + { + var endTimeData = HitObject as IHasEndTime; + var positionData = HitObject as IHasXPosition; + + int column = GetColumn(positionData?.X ?? 0); + + var pattern = new Pattern(); + + if (endTimeData != null) + { + pattern.Add(new HoldNote + { + StartTime = HitObject.StartTime, + Samples = HitObject.Samples, + Duration = endTimeData.Duration, + Column = column, + }); + } + else if (positionData != null) + { + pattern.Add(new Note + { + StartTime = HitObject.StartTime, + Samples = HitObject.Samples, + Column = column + }); + } + + return pattern; + } } } } diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index ea65588a81..ec426c895f 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -49,7 +49,6 @@ - diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index af6ac5fb33..e9536c7c00 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -89,7 +89,7 @@ namespace osu.Game.Screens.Play try { - HitRenderer = rulesetInstance.CreateHitRendererWith(Beatmap, false); + HitRenderer = rulesetInstance.CreateHitRendererWith(Beatmap, ruleset.ID == Beatmap.BeatmapInfo.Ruleset.ID); } catch (BeatmapInvalidForRulesetException) {