mirror of
https://github.com/ppy/osu.git
synced 2024-11-06 06:17:23 +08:00
ModSelector -> ModSelect, added mod descriptions, added per-mode mod selection, changed animations and made the wave mask properly
This commit is contained in:
parent
0a58fc62db
commit
9fc3726925
@ -1,44 +1,38 @@
|
||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System;
|
||||
using OpenTK.Graphics;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Game.Overlays.Mods;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
using osu.Framework.Graphics.Colour;
|
||||
using osu.Framework.GameModes.Testing;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
using osu.Framework.Graphics.Primitives;
|
||||
using osu.Game.Modes.UI;
|
||||
using osu.Game.Modes;
|
||||
using OpenTK;
|
||||
using osu.Game.Graphics;
|
||||
|
||||
namespace osu.Desktop.VisualTests.Tests
|
||||
{
|
||||
class TestCaseModSelector : TestCase
|
||||
class TestCaseModSelect : TestCase
|
||||
{
|
||||
public override string Name => @"Mod Selector";
|
||||
public override string Name => @"Mod Select";
|
||||
|
||||
public override string Description => @"Tests the mod selector overlay";
|
||||
public override string Description => @"Tests the mod select overlay";
|
||||
|
||||
private ModSelector modSelector;
|
||||
private ModSelect modSelect;
|
||||
|
||||
public override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
|
||||
Add(modSelector = new ModSelector
|
||||
Add(modSelect = new ModSelect
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Origin = Anchor.BottomCentre,
|
||||
Anchor = Anchor.BottomCentre,
|
||||
ModMode = PlayMode.Osu,
|
||||
});
|
||||
|
||||
AddButton("Toggle", modSelector.ToggleVisibility);
|
||||
AddButton("Toggle", modSelect.ToggleVisibility);
|
||||
AddButton("osu!", () => modSelect.ModMode = PlayMode.Osu);
|
||||
AddButton("osu!taiko", () => modSelect.ModMode = PlayMode.Taiko);
|
||||
AddButton("osu!catch", () => modSelect.ModMode = PlayMode.Catch);
|
||||
AddButton("osu!mania", () => modSelect.ModMode = PlayMode.Mania);
|
||||
}
|
||||
}
|
||||
}
|
@ -191,7 +191,7 @@
|
||||
<Compile Include="Platform\TestStorage.cs" />
|
||||
<Compile Include="Tests\TestCaseOptions.cs" />
|
||||
<Compile Include="Tests\TestCasePauseOverlay.cs" />
|
||||
<Compile Include="Tests\TestCaseModSelector.cs" />
|
||||
<Compile Include="Tests\TestCaseModSelect.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup />
|
||||
|
@ -19,6 +19,11 @@ namespace osu.Game.Modes
|
||||
get;
|
||||
}
|
||||
|
||||
public virtual string Description(PlayMode mode)
|
||||
{
|
||||
return @"";
|
||||
}
|
||||
|
||||
public virtual double ScoreMultiplier(PlayMode mode)
|
||||
{
|
||||
return 1;
|
||||
@ -26,7 +31,7 @@ namespace osu.Game.Modes
|
||||
|
||||
public virtual bool Ranked(PlayMode mode)
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,6 +39,7 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.NoFail;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_nofail;
|
||||
public override string Description(PlayMode mode) => @"You can't fail, no matter what.";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0.5;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
@ -42,6 +48,7 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.Easy;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_easy;
|
||||
public override string Description(PlayMode mode) => @"Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required.";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0.5;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
@ -50,7 +57,23 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.Hidden;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_hidden;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1.06;
|
||||
public override string Description(PlayMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case PlayMode.Osu:
|
||||
case PlayMode.Catch:
|
||||
return @"Play with no approach circles and fading notes for a slight score advantage.";
|
||||
|
||||
case PlayMode.Taiko:
|
||||
case PlayMode.Mania:
|
||||
return @"The notes fade out before you hit them!";
|
||||
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
public override double ScoreMultiplier(PlayMode mode) => mode == PlayMode.Mania ? 1.0 : 1.06;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
|
||||
@ -58,14 +81,33 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.HardRock;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_hardrock;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1.06;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override string Description(PlayMode mode) => @"Everything just got a bit harder...";
|
||||
public override double ScoreMultiplier(PlayMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case PlayMode.Osu:
|
||||
case PlayMode.Taiko:
|
||||
return 1.06;
|
||||
|
||||
case PlayMode.Catch:
|
||||
return 1.12;
|
||||
|
||||
case PlayMode.Mania:
|
||||
return 1.0;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
public override bool Ranked(PlayMode mode) => mode != PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModSuddenDeath : Mod
|
||||
{
|
||||
public override Mods Name => Mods.SuddenDeath;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_suddendeath;
|
||||
public override string Description(PlayMode mode) => @"Miss a note and fail.";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
@ -74,7 +116,25 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.DoubleTime;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_doubletime;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1.12;
|
||||
public override string Description(PlayMode mode) => @"Zoooooooooom";
|
||||
public override double ScoreMultiplier(PlayMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case PlayMode.Osu:
|
||||
case PlayMode.Taiko:
|
||||
return 1.12;
|
||||
|
||||
case PlayMode.Catch:
|
||||
return 1.06;
|
||||
|
||||
case PlayMode.Mania:
|
||||
return 1.0;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
|
||||
@ -82,6 +142,26 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.Relax;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_relax;
|
||||
public override string Description(PlayMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case PlayMode.Osu:
|
||||
return "You don't need to click. \nGive your clicking/tapping finger a break from the heat of things.";
|
||||
|
||||
case PlayMode.Taiko:
|
||||
return @"Relax! You will no longer get dizzyfied by ninja-like spinners, demanding drumrolls or unexpected katu's.";
|
||||
|
||||
case PlayMode.Catch:
|
||||
return @"Use the mouse to control the catcher.";
|
||||
|
||||
case PlayMode.Mania:
|
||||
return @"Unsupported";
|
||||
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0;
|
||||
public override bool Ranked(PlayMode mode) => false;
|
||||
}
|
||||
@ -90,23 +170,24 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.HalfTime;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_halftime;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0.3;
|
||||
public override string Description(PlayMode mode) => @"Less zoom";
|
||||
public override double ScoreMultiplier(PlayMode mode) => mode == PlayMode.Mania ? 0.5 : 0.3;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
|
||||
public class ModNightcore : Mod
|
||||
public class ModNightcore : ModDoubleTime
|
||||
{
|
||||
public override Mods Name => Mods.Nightcore;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_nightcore;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1.12;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override string Description(PlayMode mode) => @"uguuuuuuuu";
|
||||
}
|
||||
|
||||
public class ModFlashlight : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Flashlight;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_flashlight;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1.12;
|
||||
public override string Description(PlayMode mode) => @"Restricted view area.";
|
||||
public override double ScoreMultiplier(PlayMode mode) => mode == PlayMode.Mania ? 1.0 : 1.12;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
}
|
||||
|
||||
@ -114,6 +195,7 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.Autoplay;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_auto;
|
||||
public override string Description(PlayMode mode) => @"Watch a perfect automated play through the song";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0;
|
||||
public override bool Ranked(PlayMode mode) => false;
|
||||
}
|
||||
@ -122,64 +204,65 @@ namespace osu.Game.Modes
|
||||
{
|
||||
public override Mods Name => Mods.SpunOut;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_spunout;
|
||||
public override string Description(PlayMode mode) => @"Spinners will be automatically completed";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0.9;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Osu;
|
||||
}
|
||||
|
||||
public class ModRelax2 : Mod
|
||||
public class ModAutopilot : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Relax2;
|
||||
public override Mods Name => Mods.Autopilot;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_autopilot;
|
||||
public override string Description(PlayMode mode) => @"Automatic cursor movement - just follow the rhythm.";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 0;
|
||||
public override bool Ranked(PlayMode mode) => false;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Osu;
|
||||
}
|
||||
|
||||
public class ModPerfect : Mod
|
||||
public class ModPerfect : ModSuddenDeath
|
||||
{
|
||||
public override Mods Name => Mods.Perfect;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_perfect;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override string Description(PlayMode mode) => @"SS or quit.";
|
||||
}
|
||||
|
||||
public class ModKey4 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key4;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey5 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key5;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey6 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key6;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey7 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key7;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey8 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key8;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModFadeIn : Mod
|
||||
@ -187,13 +270,14 @@ namespace osu.Game.Modes
|
||||
public override Mods Name => Mods.FadeIn;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_hidden;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModRandom : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Random;
|
||||
public override FontAwesome Icon => FontAwesome.fa_random;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override string Description(PlayMode mode) => @"Shuffle around the notes!";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => false;
|
||||
}
|
||||
@ -211,47 +295,48 @@ namespace osu.Game.Modes
|
||||
public override Mods Name => Mods.Target;
|
||||
public override FontAwesome Icon => FontAwesome.fa_osu_mod_target;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Osu;
|
||||
}
|
||||
|
||||
public class ModKey9 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key9;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKeyCoop : Mod
|
||||
{
|
||||
public override Mods Name => Mods.KeyCoop;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override string Description(PlayMode mode) => @"Double the key amount, double the fun!";
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey1 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key1;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey3 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key3;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
public class ModKey2 : Mod
|
||||
{
|
||||
public override Mods Name => Mods.Key2;
|
||||
public override FontAwesome Icon => FontAwesome.fa_key;
|
||||
public override FontAwesome Icon => FontAwesome.fa_close;
|
||||
public override double ScoreMultiplier(PlayMode mode) => 1;
|
||||
public override bool Ranked(PlayMode mode) => true;
|
||||
public override bool Ranked(PlayMode mode) => mode == PlayMode.Mania;
|
||||
}
|
||||
|
||||
|
||||
@ -299,7 +384,7 @@ namespace osu.Game.Modes
|
||||
SpunOut = 1 << 12,
|
||||
|
||||
[Description(@"Autopilot")]
|
||||
Relax2 = 1 << 13,
|
||||
Autopilot = 1 << 13,
|
||||
|
||||
[Description(@"Perfect")]
|
||||
Perfect = 1 << 14,
|
||||
@ -349,7 +434,7 @@ namespace osu.Game.Modes
|
||||
LastMod = 1 << 29,
|
||||
|
||||
KeyMod = Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 | Key8 | Key9 | KeyCoop,
|
||||
FreeModAllowed = NoFail | Easy | Hidden | HardRock | SuddenDeath | Flashlight | FadeIn | Relax | Relax2 | SpunOut | KeyMod,
|
||||
FreeModAllowed = NoFail | Easy | Hidden | HardRock | SuddenDeath | Flashlight | FadeIn | Relax | Autopilot | SpunOut | KeyMod,
|
||||
ScoreIncreaseMods = Hidden | HardRock | DoubleTime | Flashlight | FadeIn
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Modes;
|
||||
@ -9,11 +10,76 @@ namespace osu.Game
|
||||
{
|
||||
public class AssistedSection : ModSection
|
||||
{
|
||||
public ModButton RelaxButton => Buttons[0];
|
||||
public ModButton AutopilotButton => Buttons[1];
|
||||
public ModButton TargetPracticeButton => Buttons[2];
|
||||
public ModButton SpunOutButton => Buttons[3];
|
||||
public ModButton AutoplayCinemaButton => Buttons[4];
|
||||
private ModButton relaxButton;
|
||||
public ModButton RelaxButton
|
||||
{
|
||||
get
|
||||
{
return relaxButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton autopilotButton;
|
||||
public ModButton AutopilotButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return autopilotButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton targetPracticeButton;
|
||||
public ModButton TargetPracticeButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return targetPracticeButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton spunOutButton;
|
||||
public ModButton SpunOutButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return spunOutButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton autoplayCinemaButton;
|
||||
public ModButton AutoplayCinemaButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return autoplayCinemaButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton keyButton;
|
||||
public ModButton KeyButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return keyButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton coopButton;
|
||||
public ModButton CoopButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return coopButton;
|
||||
}
|
||||
}
|
||||
|
||||
private ModButton randomButton;
|
||||
public ModButton RandomButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return randomButton;
|
||||
}
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(OsuColour colours)
|
||||
@ -21,48 +87,122 @@ namespace osu.Game
|
||||
Colour = colours.Blue;
|
||||
}
|
||||
|
||||
public AssistedSection()
|
||||
public AssistedSection(PlayMode mode)
|
||||
{
|
||||
Header = @"Assisted";
|
||||
Buttons = new ModButton[]
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
case PlayMode.Osu:
|
||||
Buttons = new ModButton[]
|
||||
{
|
||||
new ModRelax(),
|
||||
},
|
||||
},
|
||||
new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
relaxButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModRelax(),
|
||||
},
|
||||
},
|
||||
autopilotButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModAutopilot(),
|
||||
},
|
||||
},
|
||||
targetPracticeButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModTarget(),
|
||||
},
|
||||
},
|
||||
spunOutButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModSpunOut(),
|
||||
},
|
||||
},
|
||||
autoplayCinemaButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModAutoplay(),
|
||||
new ModCinema(),
|
||||
},
|
||||
},
|
||||
};
|
||||
break;
|
||||
|
||||
case PlayMode.Taiko:
|
||||
case PlayMode.Catch:
|
||||
Buttons = new ModButton[]
|
||||
{
|
||||
new ModRelax2(),
|
||||
},
|
||||
},
|
||||
new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
relaxButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModRelax(),
|
||||
},
|
||||
},
|
||||
autoplayCinemaButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModAutoplay(),
|
||||
new ModCinema(),
|
||||
},
|
||||
},
|
||||
};
|
||||
break;
|
||||
|
||||
case PlayMode.Mania:
|
||||
Buttons = new ModButton[]
|
||||
{
|
||||
new ModTarget(),
|
||||
},
|
||||
},
|
||||
new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModSpunOut(),
|
||||
},
|
||||
},
|
||||
new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModAutoplay(),
|
||||
new ModCinema(),
|
||||
},
|
||||
},
|
||||
};
|
||||
keyButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModKey4(),
|
||||
new ModKey5(),
|
||||
new ModKey6(),
|
||||
new ModKey7(),
|
||||
new ModKey8(),
|
||||
new ModKey9(),
|
||||
new ModKey1(),
|
||||
new ModKey2(),
|
||||
new ModKey3(),
|
||||
},
|
||||
},
|
||||
coopButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModKeyCoop(),
|
||||
},
|
||||
},
|
||||
randomButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModRandom(),
|
||||
},
|
||||
},
|
||||
autoplayCinemaButton = new ModButton
|
||||
{
|
||||
Mods = new Mod[]
|
||||
{
|
||||
new ModAutoplay(),
|
||||
new ModCinema(),
|
||||
},
|
||||
},
|
||||
};
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ using osu.Framework.Allocation;
|
||||
|
||||
namespace osu.Game.Overlays.Mods
|
||||
{
|
||||
public class ModSelector : OverlayContainer
|
||||
public class ModSelect : OverlayContainer
|
||||
{
|
||||
private readonly int waves_duration = 1000;
|
||||
private readonly int move_up_duration = 1500;
|
||||
@ -34,6 +34,8 @@ namespace osu.Game.Overlays.Mods
|
||||
private OsuSpriteText rankedLabel, multiplierLabel;
|
||||
private FlowContainer rankedMultiplerContainer;
|
||||
|
||||
private FlowContainer modSectionsContainer;
|
||||
|
||||
private DifficultyReductionSection difficultyReductionSection;
|
||||
private DifficultyIncreaseSection difficultyIncreaseSection;
|
||||
private AssistedSection assistedSection;
|
||||
@ -43,7 +45,45 @@ namespace osu.Game.Overlays.Mods
|
||||
|
||||
public Bindable<Mod[]> SelectedMods = new Bindable<Mod[]>();
|
||||
|
||||
// TODO: Add the fancy wave transition (https://streamable.com/qk4u)
|
||||
private PlayMode modMode;
|
||||
public PlayMode ModMode
|
||||
{
|
||||
get
|
||||
{
|
||||
return modMode;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value == modMode) return;
|
||||
modMode = value;
|
||||
|
||||
modSectionsContainer.Children = new Drawable[]
|
||||
{
|
||||
difficultyReductionSection = new DifficultyReductionSection
|
||||
{
|
||||
RelativeSizeAxes = Axes.X,
|
||||
Origin = Anchor.TopCentre,
|
||||
Anchor = Anchor.TopCentre,
|
||||
Action = modButtonPressed,
|
||||
},
|
||||
difficultyIncreaseSection = new DifficultyIncreaseSection
|
||||
{
|
||||
RelativeSizeAxes = Axes.X,
|
||||
Origin = Anchor.TopCentre,
|
||||
Anchor = Anchor.TopCentre,
|
||||
Action = modButtonPressed,
|
||||
},
|
||||
assistedSection = new AssistedSection(value)
|
||||
{
|
||||
RelativeSizeAxes = Axes.X,
|
||||
Origin = Anchor.TopCentre,
|
||||
Anchor = Anchor.TopCentre,
|
||||
Action = modButtonPressed,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
protected override void PopIn()
|
||||
{
|
||||
FadeIn(move_up_duration, EasingTypes.OutQuint);
|
||||
@ -56,7 +96,7 @@ namespace osu.Game.Overlays.Mods
|
||||
rankedMultiplerContainer.MoveToX(0, ranked_multiplier_duration, EasingTypes.OutQuint);
|
||||
rankedMultiplerContainer.FadeIn(ranked_multiplier_duration, EasingTypes.OutQuint);
|
||||
|
||||
ModSection[] sections = new ModSection[] { difficultyReductionSection, difficultyIncreaseSection, assistedSection };
|
||||
ModSection[] sections = { difficultyReductionSection, difficultyIncreaseSection, assistedSection };
|
||||
for (int i = 0; i < sections.Length; i++)
|
||||
{
|
||||
sections[i].ButtonsContainer.TransformSpacingTo(new Vector2(50f, 0f), button_duration, EasingTypes.OutQuint);
|
||||
@ -80,7 +120,7 @@ namespace osu.Game.Overlays.Mods
|
||||
rankedMultiplerContainer.MoveToX(rankedMultiplerContainer.DrawSize.X, move_out_duration, EasingTypes.InSine);
|
||||
rankedMultiplerContainer.FadeOut(move_out_duration, EasingTypes.InSine);
|
||||
|
||||
ModSection[] sections = new ModSection[] { difficultyReductionSection, difficultyIncreaseSection, assistedSection };
|
||||
ModSection[] sections = { difficultyReductionSection, difficultyIncreaseSection, assistedSection };
|
||||
for (int i = 0; i < sections.Length; i++)
|
||||
{
|
||||
sections[i].ButtonsContainer.TransformSpacingTo(new Vector2(100f, 0f), move_out_duration, EasingTypes.InSine);
|
||||
@ -119,32 +159,32 @@ namespace osu.Game.Overlays.Mods
|
||||
{
|
||||
if (sectionMod.Name == Modes.Mods.HardRock)
|
||||
{
|
||||
difficultyReductionSection.EasyButton.Deselect();
|
||||
difficultyReductionSection.EasyButton?.Deselect();
|
||||
}
|
||||
else if (sectionMod.Name == Modes.Mods.Easy)
|
||||
{
|
||||
difficultyIncreaseSection.HardRockButton.Deselect();
|
||||
difficultyIncreaseSection.HardRockButton?.Deselect();
|
||||
}
|
||||
|
||||
if (sectionMod.Name == Modes.Mods.SuddenDeath || sectionMod.Name == Modes.Mods.Perfect)
|
||||
{
|
||||
difficultyReductionSection.NoFailButton.Deselect();
|
||||
assistedSection.RelaxButton.Deselect();
|
||||
assistedSection.AutopilotButton.Deselect();
|
||||
assistedSection.AutoplayCinemaButton.Deselect();
|
||||
difficultyReductionSection.NoFailButton?.Deselect();
|
||||
assistedSection.RelaxButton?.Deselect();
|
||||
assistedSection.AutopilotButton?.Deselect();
|
||||
assistedSection.AutoplayCinemaButton?.Deselect();
|
||||
}
|
||||
else if (sectionMod.Name == Modes.Mods.NoFail || sectionMod.Name == Modes.Mods.Relax || sectionMod.Name == Modes.Mods.Relax2 || sectionMod.Name == Modes.Mods.Autoplay || sectionMod.Name == Modes.Mods.Cinema)
|
||||
else if (sectionMod.Name == Modes.Mods.NoFail || sectionMod.Name == Modes.Mods.Relax || sectionMod.Name == Modes.Mods.Autopilot || sectionMod.Name == Modes.Mods.Autoplay || sectionMod.Name == Modes.Mods.Cinema)
|
||||
{
|
||||
difficultyIncreaseSection.SuddenDeathButton.Deselect();
|
||||
difficultyIncreaseSection.SuddenDeathButton?.Deselect();
|
||||
}
|
||||
|
||||
if (sectionMod.Name == Modes.Mods.DoubleTime || sectionMod.Name == Modes.Mods.Nightcore)
|
||||
{
|
||||
difficultyReductionSection.HalfTimeButton.Deselect();
|
||||
difficultyReductionSection.HalfTimeButton?.Deselect();
|
||||
}
|
||||
else if (sectionMod.Name == Modes.Mods.HalfTime)
|
||||
{
|
||||
difficultyIncreaseSection.DoubleTimeNightcoreButton.Deselect();
|
||||
difficultyIncreaseSection.DoubleTimeNightcoreButton?.Deselect();
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,12 +195,11 @@ namespace osu.Game.Overlays.Mods
|
||||
|
||||
foreach (Mod mod in SelectedMods.Value)
|
||||
{
|
||||
// TODO: Make this take the actual current mode
|
||||
multiplier *= mod.ScoreMultiplier(PlayMode.Osu);
|
||||
multiplier *= mod.ScoreMultiplier(ModMode);
|
||||
|
||||
if (ranked)
|
||||
{
|
||||
ranked = mod.Ranked(PlayMode.Osu);
|
||||
ranked = mod.Ranked(ModMode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,7 +232,7 @@ namespace osu.Game.Overlays.Mods
|
||||
SelectedMods.Value = selectedMods.ToArray();
|
||||
}
|
||||
|
||||
public ModSelector()
|
||||
public ModSelect()
|
||||
{
|
||||
Children = new Drawable[]
|
||||
{
|
||||
@ -353,7 +392,7 @@ namespace osu.Game.Overlays.Mods
|
||||
},
|
||||
},
|
||||
},
|
||||
new FlowContainer
|
||||
modSectionsContainer = new FlowContainer
|
||||
{
|
||||
Origin = Anchor.TopCentre,
|
||||
Anchor = Anchor.TopCentre,
|
||||
@ -381,7 +420,7 @@ namespace osu.Game.Overlays.Mods
|
||||
Anchor = Anchor.TopCentre,
|
||||
Action = modButtonPressed,
|
||||
},
|
||||
assistedSection = new AssistedSection
|
||||
assistedSection = new AssistedSection(PlayMode.Osu)
|
||||
{
|
||||
RelativeSizeAxes = Axes.X,
|
||||
Origin = Anchor.TopCentre,
|
@ -29,7 +29,6 @@ using OpenTK.Input;
|
||||
using System.Collections.Generic;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Threading;
|
||||
using osu.Game.Overlays.Mods;
|
||||
|
||||
namespace osu.Game.Screens.Select
|
||||
{
|
||||
@ -45,7 +44,7 @@ namespace osu.Game.Screens.Select
|
||||
private static readonly Vector2 wedged_container_size = new Vector2(0.5f, 225);
|
||||
private BeatmapInfoWedge beatmapInfoWedge;
|
||||
|
||||
private ModSelector modSelect;
|
||||
private Overlays.Mods.ModSelect modSelect;
|
||||
|
||||
private static readonly Vector2 background_blur = new Vector2(20);
|
||||
private CancellationTokenSource initialAddSetsTask;
|
||||
@ -135,7 +134,7 @@ namespace osu.Game.Screens.Select
|
||||
Right = 20,
|
||||
},
|
||||
},
|
||||
modSelect = new ModSelector
|
||||
modSelect = new Overlays.Mods.ModSelect
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Origin = Anchor.BottomCentre,
|
||||
@ -156,6 +155,11 @@ namespace osu.Game.Screens.Select
|
||||
{
|
||||
playMode = osuGame.PlayMode;
|
||||
playMode.ValueChanged += playMode_ValueChanged;
|
||||
modSelect.ModMode = playMode;
|
||||
}
|
||||
else
|
||||
{
|
||||
modSelect.ModMode = PlayMode.Osu;
|
||||
}
|
||||
|
||||
if (database == null)
|
||||
|
@ -272,7 +272,7 @@
|
||||
<Compile Include="Overlays\Pause\ResumeButton.cs" />
|
||||
<Compile Include="Overlays\Pause\RetryButton.cs" />
|
||||
<Compile Include="Overlays\Pause\QuitButton.cs" />
|
||||
<Compile Include="Overlays\Mods\ModSelector.cs" />
|
||||
<Compile Include="Overlays\Mods\ModSelect.cs" />
|
||||
<Compile Include="Modes\Mod.cs" />
|
||||
<Compile Include="Overlays\Mods\ModButton.cs" />
|
||||
<Compile Include="Modes\UI\ModIcon.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user