diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs index 69c85fec87..0a248658a8 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// The definitions for each stage in a . /// - public readonly List Stages; + public List Stages = new List(); /// /// Total number of columns represented by all stages in this . @@ -24,10 +24,10 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// Creates a new . /// - /// The initial stages. - public ManiaBeatmap(List stages) + /// The initial stages. + public ManiaBeatmap(StageDefinition defaultStage) { - Stages = stages; + Stages.Add(defaultStage); } } } diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index e5a444533d..557ce5eb1b 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -26,7 +26,6 @@ namespace osu.Game.Rulesets.Mania.Beatmaps protected override IEnumerable ValidConversionTypes { get; } = new[] { typeof(IHasXPosition) }; public int TargetColumns; - public List StageDefinitions; public readonly bool IsForCurrentRuleset; private Pattern lastPattern = new Pattern(); @@ -67,16 +66,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps return base.ConvertBeatmap(original); } - protected override Beatmap CreateBeatmap() - { - if (StageDefinitions == null) - StageDefinitions = new List - { - new StageDefinition { Columns = TargetColumns } - }; - - return beatmap = new ManiaBeatmap(StageDefinitions); - } + protected override Beatmap CreateBeatmap() => beatmap = new ManiaBeatmap(new StageDefinition { Columns = TargetColumns }); protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) { diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 01fe9863e9..5fbf59e5e6 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -1,15 +1,18 @@ // Copyright (c) 2007-2018 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.Beatmaps; using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter + public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer { public override string Name => "KeyCoop"; public override string ShortenedName => "2P"; @@ -25,16 +28,21 @@ namespace osu.Game.Rulesets.Mania.Mods if (mbc.IsForCurrentRuleset) return; - int originTargetColumns = mbc.TargetColumns; + mbc.TargetColumns *= 2; + } - var newStages = new List + public void ApplyToRulesetContainer(RulesetContainer rulesetContainer) + { + var mrc = (ManiaRulesetContainer)rulesetContainer; + + var newDefinitions = new List(); + foreach (var existing in mrc.Beatmap.Stages) { - new StageDefinition { Columns = originTargetColumns }, - new StageDefinition { Columns = originTargetColumns }, - }; + newDefinitions.Add(new StageDefinition { Columns = (int)Math.Ceiling(existing.Columns / 2f) }); + newDefinitions.Add(new StageDefinition { Columns = (int)Math.Floor(existing.Columns / 2f) }); + } - mbc.StageDefinitions = newStages; - mbc.TargetColumns = originTargetColumns * 2; + mrc.Beatmap.Stages = newDefinitions; } } }