From 45f500920cd2338aef0f0b3158753d026e36100f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 6 Mar 2017 18:16:21 +0900 Subject: [PATCH 1/5] Don't use Mods enum for handling incompatible mods. --- osu.Game.Modes.Catch/CatchMod.cs | 6 ++++-- osu.Game.Modes.Mania/ManiaMod.cs | 13 ++++++------ osu.Game.Modes.Osu/OsuMod.cs | 24 ++++++++++++++-------- osu.Game.Modes.Osu/OsuRuleset.cs | 2 +- osu.Game.Modes.Taiko/TaikoMod.cs | 6 ++++-- osu.Game/Modes/Mod.cs | 20 +++++++++--------- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 10 ++++----- 7 files changed, 46 insertions(+), 35 deletions(-) diff --git a/osu.Game.Modes.Catch/CatchMod.cs b/osu.Game.Modes.Catch/CatchMod.cs index f8edd1845f..49b6f8a2a9 100644 --- a/osu.Game.Modes.Catch/CatchMod.cs +++ b/osu.Game.Modes.Catch/CatchMod.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; + namespace osu.Game.Modes.Catch { public class CatchModNoFail : ModNoFail @@ -17,7 +19,7 @@ namespace osu.Game.Modes.Catch { public override string Description => @"Play with no approach circles and fading notes for a slight score advantage."; public override double ScoreMultiplier => 1.06; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class CatchModHardRock : ModHardRock @@ -54,7 +56,7 @@ namespace osu.Game.Modes.Catch public class CatchModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class CatchModPerfect : ModPerfect diff --git a/osu.Game.Modes.Mania/ManiaMod.cs b/osu.Game.Modes.Mania/ManiaMod.cs index 7cd1ee2e79..743887cbb7 100644 --- a/osu.Game.Modes.Mania/ManiaMod.cs +++ b/osu.Game.Modes.Mania/ManiaMod.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Game.Graphics; namespace osu.Game.Modes.Mania @@ -19,7 +20,7 @@ namespace osu.Game.Modes.Mania { public override string Description => @"The notes fade out before you hit them!"; public override double ScoreMultiplier => 1.0; - public override Mods[] DisablesMods => new Mods[] { Mods.Flashlight }; + public override Type[] IncompatibleMods => new[] { typeof(ModFlashlight) }; } public class ManiaModHardRock : ModHardRock @@ -51,7 +52,7 @@ namespace osu.Game.Modes.Mania public class ManiaModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.0; - public override Mods[] DisablesMods => new Mods[] { Mods.Hidden }; + public override Type[] IncompatibleMods => new[] { typeof(ModHidden) }; } public class ManiaModPerfect : ModPerfect @@ -66,7 +67,7 @@ namespace osu.Game.Modes.Mania public override string Description => @""; public override double ScoreMultiplier => 1; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.Flashlight }; + public override Type[] IncompatibleMods => new[] { typeof(ModFlashlight) }; } public class ManiaModRandom : Mod @@ -76,7 +77,7 @@ namespace osu.Game.Modes.Mania public override string Description => @"Shuffle around the notes!"; public override double ScoreMultiplier => 1; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public abstract class ManiaKeyMod : Mod @@ -86,7 +87,7 @@ namespace osu.Game.Modes.Mania public override string Description => @""; public override double ScoreMultiplier => 1; // TODO: Implement the mania key mod score multiplier public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class ManiaModKey1 : ManiaKeyMod @@ -150,6 +151,6 @@ namespace osu.Game.Modes.Mania public override string Description => @"Double the key amount, double the fun!"; public override double ScoreMultiplier => 1; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } } diff --git a/osu.Game.Modes.Osu/OsuMod.cs b/osu.Game.Modes.Osu/OsuMod.cs index 790b87204f..0b23ebc9ed 100644 --- a/osu.Game.Modes.Osu/OsuMod.cs +++ b/osu.Game.Modes.Osu/OsuMod.cs @@ -1,13 +1,15 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; +using System.Linq; using osu.Game.Graphics; namespace osu.Game.Modes.Osu { public class OsuModNoFail : ModNoFail { - + public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } public class OsuModEasy : ModEasy @@ -19,7 +21,7 @@ namespace osu.Game.Modes.Osu { public override string Description => @"Play with no approach circles and fading notes for a slight score advantage."; public override double ScoreMultiplier => 1.06; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class OsuModHardRock : ModHardRock @@ -30,7 +32,7 @@ namespace osu.Game.Modes.Osu public class OsuModSuddenDeath : ModSuddenDeath { - + public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } public class OsuModDoubleTime : ModDoubleTime @@ -41,6 +43,7 @@ namespace osu.Game.Modes.Osu public class OsuModRelax : ModRelax { public override string Description => "You don't need to click.\nGive your clicking/tapping finger a break from the heat of things."; + public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } public class OsuModHalfTime : ModHalfTime @@ -56,12 +59,12 @@ namespace osu.Game.Modes.Osu public class OsuModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class OsuModPerfect : ModPerfect { - + } public class OsuModSpunOut : Mod @@ -71,7 +74,7 @@ namespace osu.Game.Modes.Osu public override string Description => @"Spinners will be automatically completed"; public override double ScoreMultiplier => 0.9; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.Autoplay, Mods.Cinema, Mods.Autopilot }; + public override Type[] IncompatibleMods => new[] { typeof(ModAutoplay), typeof(ModCinema), typeof(OsuModAutopilot) }; } public class OsuModAutopilot : Mod @@ -81,7 +84,12 @@ namespace osu.Game.Modes.Osu public override string Description => @"Automatic cursor movement - just follow the rhythm."; public override double ScoreMultiplier => 0; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { Mods.SpunOut, Mods.Relax, Mods.SuddenDeath, Mods.Perfect, Mods.NoFail, Mods.Autoplay, Mods.Cinema }; + public override Type[] IncompatibleMods => new[] { typeof(OsuModSpunOut), typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect), typeof(ModNoFail), typeof(ModAutoplay), typeof(ModCinema) }; + } + + public class OsuModeAutoplay : ModAutoplay + { + public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } public class OsuModTarget : Mod @@ -91,6 +99,6 @@ namespace osu.Game.Modes.Osu public override string Description => @""; public override double ScoreMultiplier => 1; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } } diff --git a/osu.Game.Modes.Osu/OsuRuleset.cs b/osu.Game.Modes.Osu/OsuRuleset.cs index 21554154c1..b7036cc044 100644 --- a/osu.Game.Modes.Osu/OsuRuleset.cs +++ b/osu.Game.Modes.Osu/OsuRuleset.cs @@ -81,7 +81,7 @@ namespace osu.Game.Modes.Osu { Mods = new Mod[] { - new ModAutoplay(), + new OsuModeAutoplay(), new ModCinema(), }, }, diff --git a/osu.Game.Modes.Taiko/TaikoMod.cs b/osu.Game.Modes.Taiko/TaikoMod.cs index 104c3fe1e2..fdf46834f6 100644 --- a/osu.Game.Modes.Taiko/TaikoMod.cs +++ b/osu.Game.Modes.Taiko/TaikoMod.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; + namespace osu.Game.Modes.Taiko { public class TaikoModNoFail : ModNoFail @@ -17,7 +19,7 @@ namespace osu.Game.Modes.Taiko { public override string Description => @"The notes fade out before you hit them!"; public override double ScoreMultiplier => 1.06; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class TaikoModHardRock : ModHardRock @@ -54,7 +56,7 @@ namespace osu.Game.Modes.Taiko public class TaikoModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; } public class TaikoModPerfect : ModPerfect diff --git a/osu.Game/Modes/Mod.cs b/osu.Game/Modes/Mod.cs index e8d36b0aef..b914f7d73a 100644 --- a/osu.Game/Modes/Mod.cs +++ b/osu.Game/Modes/Mod.cs @@ -40,7 +40,7 @@ namespace osu.Game.Modes /// /// The mods this mod cannot be enabled with. /// - public abstract Mods[] DisablesMods { get; } + public abstract Type[] IncompatibleMods { get; } } public class MultiMod : Mod @@ -50,7 +50,7 @@ namespace osu.Game.Modes public override string Description => @""; public override double ScoreMultiplier => 0.0; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { }; + public override Type[] IncompatibleMods => new Type[] { }; public Mod[] Mods; } @@ -62,7 +62,7 @@ namespace osu.Game.Modes public override string Description => @"You can't fail, no matter what."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.Relax, Mods.Autopilot, Mods.SuddenDeath, Mods.Perfect }; + public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect) }; } public abstract class ModEasy : Mod @@ -72,7 +72,7 @@ namespace osu.Game.Modes public override string Description => @"Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.HardRock }; + public override Type[] IncompatibleMods => new[] { typeof(ModHardRock) }; } public abstract class ModHidden : Mod @@ -87,7 +87,7 @@ namespace osu.Game.Modes public override Mods Name => Mods.HardRock; public override FontAwesome Icon => FontAwesome.fa_osu_mod_hardrock; public override string Description => @"Everything just got a bit harder..."; - public override Mods[] DisablesMods => new Mods[] { Mods.Easy }; + public override Type[] IncompatibleMods => new[] { typeof(ModEasy) }; } public abstract class ModSuddenDeath : Mod @@ -97,7 +97,7 @@ namespace osu.Game.Modes public override string Description => @"Miss a note and fail."; public override double ScoreMultiplier => 1; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.NoFail, Mods.Relax, Mods.Autopilot, Mods.Autoplay, Mods.Cinema }; + public override Type[] IncompatibleMods => new[] { typeof(ModNoFail), typeof(ModRelax), typeof(ModAutoplay), typeof(ModCinema) }; } public abstract class ModDoubleTime : Mod @@ -106,7 +106,7 @@ namespace osu.Game.Modes public override FontAwesome Icon => FontAwesome.fa_osu_mod_doubletime; public override string Description => @"Zoooooooooom"; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.HalfTime }; + public override Type[] IncompatibleMods => new[] { typeof(ModHalfTime) }; } public abstract class ModRelax : Mod @@ -115,7 +115,7 @@ namespace osu.Game.Modes public override FontAwesome Icon => FontAwesome.fa_osu_mod_relax; public override double ScoreMultiplier => 0; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { Mods.Autopilot, Mods.Autoplay, Mods.Cinema, Mods.NoFail, Mods.SuddenDeath, Mods.Perfect }; + public override Type[] IncompatibleMods => new[] { typeof(ModAutoplay), typeof(ModCinema), typeof(ModNoFail), typeof(ModSuddenDeath), typeof(ModPerfect) }; } public abstract class ModHalfTime : Mod @@ -124,7 +124,7 @@ namespace osu.Game.Modes public override FontAwesome Icon => FontAwesome.fa_osu_mod_halftime; public override string Description => @"Less zoom"; public override bool Ranked => true; - public override Mods[] DisablesMods => new Mods[] { Mods.DoubleTime, Mods.Nightcore }; + public override Type[] IncompatibleMods => new[] { typeof(ModDoubleTime), typeof(ModNightcore) }; } public abstract class ModNightcore : ModDoubleTime @@ -149,7 +149,7 @@ namespace osu.Game.Modes public override string Description => @"Watch a perfect automated play through the song"; public override double ScoreMultiplier => 0; public override bool Ranked => false; - public override Mods[] DisablesMods => new Mods[] { Mods.Relax, Mods.Autopilot, Mods.SpunOut, Mods.SuddenDeath, Mods.Perfect }; + public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect) }; } public abstract class ModPerfect : ModSuddenDeath diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index 03b3091066..80af1e70e5 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -124,7 +124,7 @@ namespace osu.Game.Overlays.Mods } } - public void DeselectMod(Modes.Mods modName) + public void DeselectType(Type modType) { foreach (ModSection section in modSectionsContainer.Children) { @@ -132,7 +132,7 @@ namespace osu.Game.Overlays.Mods { foreach (Mod mod in button.Mods) { - if (mod.Name == modName) + if (modType.IsInstanceOfType(mod)) { button.Deselect(); return; @@ -146,10 +146,8 @@ namespace osu.Game.Overlays.Mods { if (selectedMod != null) { - foreach (Modes.Mods disableMod in selectedMod.DisablesMods) - { - DeselectMod(disableMod); - } + foreach (Type t in selectedMod.IncompatibleMods) + DeselectType(t); } refreshSelectedMods(); From 12a3b1414f8feefacd9f90089eff1642adbb667e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 6 Mar 2017 18:28:30 +0900 Subject: [PATCH 2/5] Add sane defaults for abstract Mod class and remove remaining use of enum. --- osu.Game.Modes.Catch/CatchMod.cs | 2 - osu.Game.Modes.Mania/ManiaMod.cs | 34 ++---- osu.Game.Modes.Osu/OsuMod.cs | 10 +- osu.Game.Modes.Taiko/TaikoMod.cs | 2 - osu.Game/Modes/Mod.cs | 165 +++++----------------------- osu.Game/Overlays/Mods/ModButton.cs | 2 +- 6 files changed, 46 insertions(+), 169 deletions(-) diff --git a/osu.Game.Modes.Catch/CatchMod.cs b/osu.Game.Modes.Catch/CatchMod.cs index 49b6f8a2a9..75b616a9ed 100644 --- a/osu.Game.Modes.Catch/CatchMod.cs +++ b/osu.Game.Modes.Catch/CatchMod.cs @@ -19,7 +19,6 @@ namespace osu.Game.Modes.Catch { public override string Description => @"Play with no approach circles and fading notes for a slight score advantage."; public override double ScoreMultiplier => 1.06; - public override Type[] IncompatibleMods => new Type[] { }; } public class CatchModHardRock : ModHardRock @@ -56,7 +55,6 @@ namespace osu.Game.Modes.Catch public class CatchModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Type[] IncompatibleMods => new Type[] { }; } public class CatchModPerfect : ModPerfect diff --git a/osu.Game.Modes.Mania/ManiaMod.cs b/osu.Game.Modes.Mania/ManiaMod.cs index 743887cbb7..d52db2977c 100644 --- a/osu.Game.Modes.Mania/ManiaMod.cs +++ b/osu.Game.Modes.Mania/ManiaMod.cs @@ -26,7 +26,6 @@ namespace osu.Game.Modes.Mania public class ManiaModHardRock : ModHardRock { public override double ScoreMultiplier => 1.0; - public override bool Ranked => false; } public class ManiaModSuddenDeath : ModSuddenDeath @@ -62,9 +61,8 @@ namespace osu.Game.Modes.Mania public class ManiaModFadeIn : Mod { - public override Mods Name => Mods.FadeIn; + public override string Name => "FadeIn"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_hidden; - public override string Description => @""; public override double ScoreMultiplier => 1; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModFlashlight) }; @@ -72,85 +70,77 @@ namespace osu.Game.Modes.Mania public class ManiaModRandom : Mod { - public override Mods Name => Mods.Random; - public override FontAwesome Icon => FontAwesome.fa_close; + public override string Name => "Random"; public override string Description => @"Shuffle around the notes!"; public override double ScoreMultiplier => 1; - public override bool Ranked => false; - public override Type[] IncompatibleMods => new Type[] { }; } public abstract class ManiaKeyMod : Mod { public abstract int KeyCount { get; } - public override FontAwesome Icon => FontAwesome.fa_close; // TODO: Add proper key icons - public override string Description => @""; public override double ScoreMultiplier => 1; // TODO: Implement the mania key mod score multiplier public override bool Ranked => true; - public override Type[] IncompatibleMods => new Type[] { }; } public class ManiaModKey1 : ManiaKeyMod { public override int KeyCount => 1; - public override Mods Name => Mods.Key1; + public override string Name => "1K"; } public class ManiaModKey2 : ManiaKeyMod { public override int KeyCount => 2; - public override Mods Name => Mods.Key2; + public override string Name => "2K"; } public class ManiaModKey3 : ManiaKeyMod { public override int KeyCount => 3; - public override Mods Name => Mods.Key3; + public override string Name => "3K"; } public class ManiaModKey4 : ManiaKeyMod { public override int KeyCount => 4; - public override Mods Name => Mods.Key4; + public override string Name => "4K"; } public class ManiaModKey5 : ManiaKeyMod { public override int KeyCount => 5; - public override Mods Name => Mods.Key5; + public override string Name => "5K"; } public class ManiaModKey6 : ManiaKeyMod { public override int KeyCount => 6; - public override Mods Name => Mods.Key6; + public override string Name => "6K"; } public class ManiaModKey7 : ManiaKeyMod { public override int KeyCount => 7; - public override Mods Name => Mods.Key7; + public override string Name => "7K"; } public class ManiaModKey8 : ManiaKeyMod { public override int KeyCount => 8; - public override Mods Name => Mods.Key8; + public override string Name => "8K"; } public class ManiaModKey9 : ManiaKeyMod { public override int KeyCount => 9; - public override Mods Name => Mods.Key9; + public override string Name => "9K"; } public class ManiaModKeyCoop : Mod { - public override Mods Name => Mods.KeyCoop; - public override FontAwesome Icon => FontAwesome.fa_close; + public override string Name => "KeyCoop"; public override string Description => @"Double the key amount, double the fun!"; public override double ScoreMultiplier => 1; public override bool Ranked => true; - public override Type[] IncompatibleMods => new Type[] { }; } } diff --git a/osu.Game.Modes.Osu/OsuMod.cs b/osu.Game.Modes.Osu/OsuMod.cs index 0b23ebc9ed..2df44ab5de 100644 --- a/osu.Game.Modes.Osu/OsuMod.cs +++ b/osu.Game.Modes.Osu/OsuMod.cs @@ -21,7 +21,6 @@ namespace osu.Game.Modes.Osu { public override string Description => @"Play with no approach circles and fading notes for a slight score advantage."; public override double ScoreMultiplier => 1.06; - public override Type[] IncompatibleMods => new Type[] { }; } public class OsuModHardRock : ModHardRock @@ -59,7 +58,6 @@ namespace osu.Game.Modes.Osu public class OsuModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Type[] IncompatibleMods => new Type[] { }; } public class OsuModPerfect : ModPerfect @@ -69,7 +67,7 @@ namespace osu.Game.Modes.Osu public class OsuModSpunOut : Mod { - public override Mods Name => Mods.SpunOut; + public override string Name => "Spun Out"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_spunout; public override string Description => @"Spinners will be automatically completed"; public override double ScoreMultiplier => 0.9; @@ -79,7 +77,7 @@ namespace osu.Game.Modes.Osu public class OsuModAutopilot : Mod { - public override Mods Name => Mods.Autopilot; + public override string Name => "Autopilot"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_autopilot; public override string Description => @"Automatic cursor movement - just follow the rhythm."; public override double ScoreMultiplier => 0; @@ -94,11 +92,9 @@ namespace osu.Game.Modes.Osu public class OsuModTarget : Mod { - public override Mods Name => Mods.Target; + public override string Name => "Target"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_target; public override string Description => @""; public override double ScoreMultiplier => 1; - public override bool Ranked => false; - public override Type[] IncompatibleMods => new Type[] { }; } } diff --git a/osu.Game.Modes.Taiko/TaikoMod.cs b/osu.Game.Modes.Taiko/TaikoMod.cs index fdf46834f6..fd09e4528e 100644 --- a/osu.Game.Modes.Taiko/TaikoMod.cs +++ b/osu.Game.Modes.Taiko/TaikoMod.cs @@ -19,7 +19,6 @@ namespace osu.Game.Modes.Taiko { public override string Description => @"The notes fade out before you hit them!"; public override double ScoreMultiplier => 1.06; - public override Type[] IncompatibleMods => new Type[] { }; } public class TaikoModHardRock : ModHardRock @@ -56,7 +55,6 @@ namespace osu.Game.Modes.Taiko public class TaikoModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; - public override Type[] IncompatibleMods => new Type[] { }; } public class TaikoModPerfect : ModPerfect diff --git a/osu.Game/Modes/Mod.cs b/osu.Game/Modes/Mod.cs index b914f7d73a..916d84cf2f 100644 --- a/osu.Game/Modes/Mod.cs +++ b/osu.Game/Modes/Mod.cs @@ -15,17 +15,17 @@ namespace osu.Game.Modes /// /// The name of this mod. /// - public abstract Mods Name { get; } + public abstract string Name { get; } /// /// The icon of this mod. /// - public abstract FontAwesome Icon { get; } + public virtual FontAwesome Icon => FontAwesome.fa_question; /// /// The user readable description of this mod. /// - public abstract string Description { get; } + public virtual string Description => string.Empty; /// /// The score multiplier of this mod. @@ -35,31 +35,28 @@ namespace osu.Game.Modes /// /// Returns if this mod is ranked. /// - public abstract bool Ranked { get; } + public virtual bool Ranked => false; /// /// The mods this mod cannot be enabled with. /// - public abstract Type[] IncompatibleMods { get; } + public virtual Type[] IncompatibleMods => new Type[] { }; } public class MultiMod : Mod { - public override Mods Name => Modes.Mods.None; - public override FontAwesome Icon => FontAwesome.fa_close; - public override string Description => @""; + public override string Name => string.Empty; + public override string Description => string.Empty; public override double ScoreMultiplier => 0.0; - public override bool Ranked => false; - public override Type[] IncompatibleMods => new Type[] { }; public Mod[] Mods; } public abstract class ModNoFail : Mod { - public override Mods Name => Mods.NoFail; + public override string Name => "NoFail"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_nofail; - public override string Description => @"You can't fail, no matter what."; + public override string Description => "You can't fail, no matter what."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect) }; @@ -67,34 +64,33 @@ namespace osu.Game.Modes public abstract class ModEasy : Mod { - public override Mods Name => Mods.Easy; + public override string Name => "Easy"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_easy; - public override string Description => @"Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required."; + public override string Description => "Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; - public override Type[] IncompatibleMods => new[] { typeof(ModHardRock) }; } public abstract class ModHidden : Mod { - public override Mods Name => Mods.Hidden; + public override string Name => "Hidden"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_hidden; public override bool Ranked => true; } public abstract class ModHardRock : Mod { - public override Mods Name => Mods.HardRock; + public override string Name => "Hard Rock"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_hardrock; - public override string Description => @"Everything just got a bit harder..."; + public override string Description => "Everything just got a bit harder..."; public override Type[] IncompatibleMods => new[] { typeof(ModEasy) }; } public abstract class ModSuddenDeath : Mod { - public override Mods Name => Mods.SuddenDeath; + public override string Name => "Sudden Death"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_suddendeath; - public override string Description => @"Miss a note and fail."; + public override string Description => "Miss a note and fail."; public override double ScoreMultiplier => 1; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModNoFail), typeof(ModRelax), typeof(ModAutoplay), typeof(ModCinema) }; @@ -102,167 +98,66 @@ namespace osu.Game.Modes public abstract class ModDoubleTime : Mod { - public override Mods Name => Mods.DoubleTime; + public override string Name => "Double Time"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_doubletime; - public override string Description => @"Zoooooooooom"; + public override string Description => "Zoooooooooom"; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModHalfTime) }; } public abstract class ModRelax : Mod { - public override Mods Name => Mods.Relax; + public override string Name => "Relax"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_relax; public override double ScoreMultiplier => 0; - public override bool Ranked => false; public override Type[] IncompatibleMods => new[] { typeof(ModAutoplay), typeof(ModCinema), typeof(ModNoFail), typeof(ModSuddenDeath), typeof(ModPerfect) }; } public abstract class ModHalfTime : Mod { - public override Mods Name => Mods.HalfTime; + public override string Name => "Half Time"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_halftime; - public override string Description => @"Less zoom"; + public override string Description => "Less zoom"; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModDoubleTime), typeof(ModNightcore) }; } public abstract class ModNightcore : ModDoubleTime { - public override Mods Name => Mods.Nightcore; + public override string Name => "Nightcore"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_nightcore; - public override string Description => @"uguuuuuuuu"; + public override string Description => "uguuuuuuuu"; } public abstract class ModFlashlight : Mod { - public override Mods Name => Mods.Flashlight; + public override string Name => "Flashlight"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_flashlight; - public override string Description => @"Restricted view area."; + public override string Description => "Restricted view area."; public override bool Ranked => true; } public class ModAutoplay : Mod { - public override Mods Name => Mods.Autoplay; + public override string Name => "Autoplay"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_auto; - public override string Description => @"Watch a perfect automated play through the song"; + public override string Description => "Watch a perfect automated play through the song"; public override double ScoreMultiplier => 0; - public override bool Ranked => false; public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect) }; } public abstract class ModPerfect : ModSuddenDeath { - public override Mods Name => Mods.Perfect; - public override FontAwesome Icon => FontAwesome.fa_close; - public override string Description => @"SS or quit."; + public override string Name => "Perfect"; + public override string Description => "SS or quit."; } public class ModCinema : ModAutoplay { - public override Mods Name => Mods.Cinema; + public override string Name => "Cinema"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_cinema; } - [Flags] - public enum Mods - { - None = 0, - - [Description(@"No Fail")] - NoFail = 1 << 0, - - [Description(@"Easy")] - Easy = 1 << 1, - - //NoVideo = 1 << 2, - - [Description(@"Hidden")] - Hidden = 1 << 3, - - [Description(@"Hard Rock")] - HardRock = 1 << 4, - - [Description(@"Sudden Death")] - SuddenDeath = 1 << 5, - - [Description(@"Double Time")] - DoubleTime = 1 << 6, - - [Description(@"Relax")] - Relax = 1 << 7, - - [Description(@"Halftime")] - HalfTime = 1 << 8, - - [Description(@"Nightcore")] - Nightcore = 1 << 9, - - [Description(@"Flashlight")] - Flashlight = 1 << 10, - - [Description(@"Auto")] - Autoplay = 1 << 11, - - [Description(@"Spun Out")] - SpunOut = 1 << 12, - - [Description(@"Autopilot")] - Autopilot = 1 << 13, - - [Description(@"Perfect")] - Perfect = 1 << 14, - - [Description(@"4K")] - Key4 = 1 << 15, - - [Description(@"5K")] - Key5 = 1 << 16, - - [Description(@"6K")] - Key6 = 1 << 17, - - [Description(@"7K")] - Key7 = 1 << 18, - - [Description(@"8K")] - Key8 = 1 << 19, - - [Description(@"Fade In")] - FadeIn = 1 << 20, - - [Description(@"Random")] - Random = 1 << 21, - - [Description(@"Cinema")] - Cinema = 1 << 22, - - [Description(@"Target Practice")] - Target = 1 << 23, - - [Description(@"9K")] - Key9 = 1 << 24, - - [Description(@"Co-Op")] - KeyCoop = 1 << 25, - - [Description(@"1K")] - Key1 = 1 << 26, - - [Description(@"3K")] - Key3 = 1 << 27, - - [Description(@"2K")] - Key2 = 1 << 28, - - LastMod = 1 << 29, - - KeyMod = Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 | Key8 | Key9 | KeyCoop, - FreeModAllowed = NoFail | Easy | Hidden | HardRock | SuddenDeath | Flashlight | FadeIn | Relax | Autopilot | SpunOut | KeyMod, - ScoreIncreaseMods = Hidden | HardRock | DoubleTime | Flashlight | FadeIn - } - public enum ModType { DifficultyReduction, diff --git a/osu.Game/Overlays/Mods/ModButton.cs b/osu.Game/Overlays/Mods/ModButton.cs index 3cec804653..93d301bb21 100644 --- a/osu.Game/Overlays/Mods/ModButton.cs +++ b/osu.Game/Overlays/Mods/ModButton.cs @@ -184,7 +184,7 @@ namespace osu.Game.Overlays.Mods private void displayMod(Mod mod) { displayIcon.Icon = mod.Icon; - text.Text = mod.Name.GetDescription(); + text.Text = mod.Name; } private void displaySelectedMod() From b55a579d15f906b1d30944ca7559196c6d5b3897 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 6 Mar 2017 22:57:30 +0900 Subject: [PATCH 3/5] Fix typo. --- osu.Game.Modes.Osu/OsuMod.cs | 2 +- osu.Game.Modes.Osu/OsuRuleset.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Modes.Osu/OsuMod.cs b/osu.Game.Modes.Osu/OsuMod.cs index 2df44ab5de..1d59d6429b 100644 --- a/osu.Game.Modes.Osu/OsuMod.cs +++ b/osu.Game.Modes.Osu/OsuMod.cs @@ -85,7 +85,7 @@ namespace osu.Game.Modes.Osu public override Type[] IncompatibleMods => new[] { typeof(OsuModSpunOut), typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModPerfect), typeof(ModNoFail), typeof(ModAutoplay), typeof(ModCinema) }; } - public class OsuModeAutoplay : ModAutoplay + public class OsuModAutoplay : ModAutoplay { public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } diff --git a/osu.Game.Modes.Osu/OsuRuleset.cs b/osu.Game.Modes.Osu/OsuRuleset.cs index b7036cc044..11a67bf83b 100644 --- a/osu.Game.Modes.Osu/OsuRuleset.cs +++ b/osu.Game.Modes.Osu/OsuRuleset.cs @@ -81,7 +81,7 @@ namespace osu.Game.Modes.Osu { Mods = new Mod[] { - new OsuModeAutoplay(), + new OsuModAutoplay(), new ModCinema(), }, }, From 39ff68a8122bf5261ed0ba77856587b93fea1e2c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Mar 2017 09:16:47 +0900 Subject: [PATCH 4/5] Add missing IncompatibleMods. --- osu.Game/Modes/Mod.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Modes/Mod.cs b/osu.Game/Modes/Mod.cs index 916d84cf2f..25fcad284a 100644 --- a/osu.Game/Modes/Mod.cs +++ b/osu.Game/Modes/Mod.cs @@ -69,6 +69,7 @@ namespace osu.Game.Modes public override string Description => "Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; + public override Type[] IncompatibleMods => new[] { typeof(ModHardRock) }; } public abstract class ModHidden : Mod From ecdbcb20cf44605cf55df7e2fa17e9653bd1eb84 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Mar 2017 13:52:47 +0900 Subject: [PATCH 5/5] Fix error-level inspections. --- osu.Game.Modes.Catch/CatchMod.cs | 2 -- osu.Game.Modes.Taiko/TaikoMod.cs | 2 -- osu.Game/Modes/Mod.cs | 1 - osu.Game/Overlays/Mods/ModButton.cs | 10 +--------- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/osu.Game.Modes.Catch/CatchMod.cs b/osu.Game.Modes.Catch/CatchMod.cs index 75b616a9ed..07d6d3469e 100644 --- a/osu.Game.Modes.Catch/CatchMod.cs +++ b/osu.Game.Modes.Catch/CatchMod.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; - namespace osu.Game.Modes.Catch { public class CatchModNoFail : ModNoFail diff --git a/osu.Game.Modes.Taiko/TaikoMod.cs b/osu.Game.Modes.Taiko/TaikoMod.cs index fd09e4528e..62db875991 100644 --- a/osu.Game.Modes.Taiko/TaikoMod.cs +++ b/osu.Game.Modes.Taiko/TaikoMod.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; - namespace osu.Game.Modes.Taiko { public class TaikoModNoFail : ModNoFail diff --git a/osu.Game/Modes/Mod.cs b/osu.Game/Modes/Mod.cs index 25fcad284a..d3286cd643 100644 --- a/osu.Game/Modes/Mod.cs +++ b/osu.Game/Modes/Mod.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using System.ComponentModel; using osu.Game.Graphics; namespace osu.Game.Modes diff --git a/osu.Game/Overlays/Mods/ModButton.cs b/osu.Game/Overlays/Mods/ModButton.cs index 99d6050591..95123d4106 100644 --- a/osu.Game/Overlays/Mods/ModButton.cs +++ b/osu.Game/Overlays/Mods/ModButton.cs @@ -9,7 +9,6 @@ using OpenTK.Input; using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; -using osu.Framework.Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; @@ -111,14 +110,7 @@ namespace osu.Game.Overlays.Mods if (mod == value) return; mod = value; - if (mod is MultiMod) - { - Mods = ((MultiMod)mod).Mods; - } - else - { - Mods = new[] { mod }; - } + Mods = (mod as MultiMod)?.Mods ?? new[] { mod }; createIcons(); if (Mods.Length > 0)