From 8a7892b66a14cc0122ada526b9bf22a205fc323a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 19:29:51 +0900 Subject: [PATCH] Make variant keybindings work --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 38 +++++++++---------- .../Mods/IKeyBindingMod.cs | 13 +++++++ .../Mods/ManiaModKeyCoop.cs | 4 +- .../UI/ManiaRulesetContainer.cs | 7 +++- .../osu.Game.Rulesets.Mania.csproj | 1 + 5 files changed, 42 insertions(+), 21 deletions(-) create mode 100644 osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 04245534f5..befa657715 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -124,9 +124,9 @@ namespace osu.Game.Rulesets.Mania get { for (int i = 1; i <= 9; i++) - yield return (int)ManiaVariantType.Solo + i; + yield return (int)ManiaKeyBindingVariantType.Solo + i; for (int i = 2; i <= 18; i++) - yield return (int)ManiaVariantType.Coop + i; + yield return (int)ManiaKeyBindingVariantType.Coop + i; // Todo: Versus mode } } @@ -135,7 +135,7 @@ namespace osu.Game.Rulesets.Mania { switch (getVariantType(variant)) { - case ManiaVariantType.Solo: + case ManiaKeyBindingVariantType.Solo: return new VariantMappingGenerator { LeftKeys = new[] @@ -156,8 +156,8 @@ namespace osu.Game.Rulesets.Mania SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant); - case ManiaVariantType.Coop: - case ManiaVariantType.Versus: + case ManiaKeyBindingVariantType.Coop: + case ManiaKeyBindingVariantType.Versus: getMultiVariantKeyCounts(variant, out int p1K, out int p2K); var player1Bindings = new VariantMappingGenerator @@ -199,7 +199,7 @@ namespace osu.Game.Rulesets.Mania }, SpecialKey = InputKey.BackSlash, SpecialAction = ManiaAction.Special2, - NormalActionStart = ManiaAction.Key10 + NormalActionStart = ManiaAction.Key1 + p1K }.GenerateKeyBindingsFor(p2K); return player1Bindings.Concat(player2Bindings); @@ -213,14 +213,14 @@ namespace osu.Game.Rulesets.Mania switch (getVariantType(variant)) { default: - case ManiaVariantType.Solo: + case ManiaKeyBindingVariantType.Solo: return $"{variant}K"; - case ManiaVariantType.Coop: + case ManiaKeyBindingVariantType.Coop: { getMultiVariantKeyCounts(variant, out int p1K, out int p2K); return $"{p1K}K + {p2K}K"; } - case ManiaVariantType.Versus: + case ManiaKeyBindingVariantType.Versus: { getMultiVariantKeyCounts(variant, out int p1K, out int p2K); return $"{p1K}K Vs. {p2K}K"; @@ -229,7 +229,7 @@ namespace osu.Game.Rulesets.Mania } /// - /// Finds the number of keys for each player in or . + /// Finds the number of keys for each player in or . /// /// The variant. /// The number of keys for player 1. @@ -241,16 +241,16 @@ namespace osu.Game.Rulesets.Mania switch (getVariantType(variant)) { - case ManiaVariantType.Coop: + case ManiaKeyBindingVariantType.Coop: { - int totalKeys = variant - (int)ManiaVariantType.Coop; + int totalKeys = variant - (int)ManiaKeyBindingVariantType.Coop; player1Keys = (int)Math.Ceiling(totalKeys / 2f); player2Keys = (int)Math.Floor(totalKeys / 2f); break; } - case ManiaVariantType.Versus: + case ManiaKeyBindingVariantType.Versus: { - int totalKeys = variant - (int)ManiaVariantType.Versus; + int totalKeys = variant - (int)ManiaKeyBindingVariantType.Versus; player1Keys = totalKeys; player2Keys = totalKeys; break; @@ -259,13 +259,13 @@ namespace osu.Game.Rulesets.Mania } /// - /// Finds the that corresponds to a variant value. + /// Finds the that corresponds to a variant value. /// /// The variant value. - /// The that corresponds to . - private ManiaVariantType getVariantType(int variant) + /// The that corresponds to . + private ManiaKeyBindingVariantType getVariantType(int variant) { - return (ManiaVariantType)Enum.GetValues(typeof(ManiaVariantType)).Cast().OrderByDescending(i => i).First(v => variant > v); + return (ManiaKeyBindingVariantType)Enum.GetValues(typeof(ManiaKeyBindingVariantType)).Cast().OrderByDescending(i => i).First(v => variant >= v); } } @@ -320,7 +320,7 @@ namespace osu.Game.Rulesets.Mania } } - public enum ManiaVariantType + public enum ManiaKeyBindingVariantType { /// /// Solo play keybinding variant (single stage). diff --git a/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs b/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs new file mode 100644 index 0000000000..585db9e340 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs @@ -0,0 +1,13 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Rulesets.Mania.Mods +{ + public interface IKeyBindingMod + { + /// + /// The keybinding variant which this requires. + /// + ManiaKeyBindingVariantType Variant { get; } + } +} diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 5fbf59e5e6..382eea589c 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -12,7 +12,7 @@ using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer + public class ManiaModKeyCoop : Mod, IKeyBindingMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer { public override string Name => "KeyCoop"; public override string ShortenedName => "2P"; @@ -44,5 +44,7 @@ namespace osu.Game.Rulesets.Mania.Mods mrc.Beatmap.Stages = newDefinitions; } + + public ManiaKeyBindingVariantType Variant => ManiaKeyBindingVariantType.Coop; } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 3a3aaa0e03..db881c5ba2 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -11,6 +11,7 @@ using osu.Framework.MathUtils; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Mania.Beatmaps; +using osu.Game.Rulesets.Mania.Mods; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Mania.Replays; @@ -76,7 +77,11 @@ namespace osu.Game.Rulesets.Mania.UI public override ScoreProcessor CreateScoreProcessor() => new ManiaScoreProcessor(this); - public override PassThroughInputManager CreateInputManager() => new ManiaInputManager(Ruleset.RulesetInfo, Beatmap.TotalColumns); + public override PassThroughInputManager CreateInputManager() + { + var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? ManiaKeyBindingVariantType.Solo; + return new ManiaInputManager(Ruleset.RulesetInfo, (int)variantType + Beatmap.TotalColumns); + } protected override BeatmapConverter CreateBeatmapConverter() => new ManiaBeatmapConverter(IsForCurrentRuleset, WorkingBeatmap.Beatmap); diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index ae29484161..82202df923 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -64,6 +64,7 @@ +