Skip to content

Commit 7fc6ad5

Browse files
authored
Merge pull request #28184 from frenzibyte/footer-v2-transitions
Add basic animation to new footer and buttons
2 parents 1045742 + f59d94b commit 7fc6ad5

File tree

5 files changed

+267
-238
lines changed

5 files changed

+267
-238
lines changed

osu.Game.Tests/Visual/UserInterface/TestSceneScreenFooter.cs

+35-137
Original file line numberDiff line numberDiff line change
@@ -2,195 +2,93 @@
22
// See the LICENCE file in the repository root for full licence text.
33

44
using System;
5-
using System.Collections.Generic;
6-
using System.Linq;
75
using NUnit.Framework;
86
using osu.Framework.Allocation;
97
using osu.Framework.Graphics;
10-
using osu.Framework.Graphics.Containers;
118
using osu.Framework.Graphics.Cursor;
129
using osu.Framework.Testing;
1310
using osu.Game.Overlays;
1411
using osu.Game.Overlays.Mods;
15-
using osu.Game.Rulesets.Mods;
16-
using osu.Game.Rulesets.Osu;
17-
using osu.Game.Rulesets.Osu.Mods;
1812
using osu.Game.Screens.Footer;
1913
using osu.Game.Screens.SelectV2.Footer;
20-
using osuTK.Input;
2114

2215
namespace osu.Game.Tests.Visual.UserInterface
2316
{
2417
public partial class TestSceneScreenFooter : OsuManualInputManagerTestScene
2518
{
26-
private ScreenFooterButtonRandom randomButton = null!;
27-
private ScreenFooterButtonMods modsButton = null!;
28-
29-
private bool nextRandomCalled;
30-
private bool previousRandomCalled;
31-
32-
private DummyOverlay overlay = null!;
19+
private ScreenFooter screenFooter = null!;
20+
private TestModSelectOverlay overlay = null!;
3321

3422
[Cached]
3523
private OverlayColourProvider colourProvider { get; set; } = new OverlayColourProvider(OverlayColourScheme.Aquamarine);
3624

3725
[SetUp]
3826
public void SetUp() => Schedule(() =>
3927
{
40-
nextRandomCalled = false;
41-
previousRandomCalled = false;
42-
43-
ScreenFooter footer;
44-
4528
Children = new Drawable[]
4629
{
30+
overlay = new TestModSelectOverlay
31+
{
32+
Padding = new MarginPadding
33+
{
34+
Bottom = ScreenFooter.HEIGHT
35+
}
36+
},
4737
new PopoverContainer
4838
{
4939
RelativeSizeAxes = Axes.Both,
50-
Child = footer = new ScreenFooter(),
40+
Child = screenFooter = new ScreenFooter(),
5141
},
52-
overlay = new DummyOverlay()
5342
};
5443

55-
footer.AddButton(modsButton = new ScreenFooterButtonMods { Current = SelectedMods }, overlay);
56-
footer.AddButton(randomButton = new ScreenFooterButtonRandom
44+
screenFooter.SetButtons(new ScreenFooterButton[]
5745
{
58-
NextRandom = () => nextRandomCalled = true,
59-
PreviousRandom = () => previousRandomCalled = true
46+
new ScreenFooterButtonMods(overlay) { Current = SelectedMods },
47+
new ScreenFooterButtonRandom(),
48+
new ScreenFooterButtonOptions(),
6049
});
61-
footer.AddButton(new ScreenFooterButtonOptions());
62-
63-
overlay.Hide();
6450
});
6551

6652
[SetUpSteps]
6753
public void SetUpSteps()
6854
{
69-
AddStep("clear mods", () => SelectedMods.Value = Array.Empty<Mod>());
70-
AddStep("set beatmap", () => Beatmap.Value = CreateWorkingBeatmap(CreateBeatmap(new OsuRuleset().RulesetInfo)));
55+
AddStep("show footer", () => screenFooter.Show());
7156
}
7257

58+
/// <summary>
59+
/// Transition when moving from a screen with no buttons to a screen with buttons.
60+
/// </summary>
7361
[Test]
74-
public void TestMods()
62+
public void TestButtonsIn()
7563
{
76-
AddStep("one mod", () => SelectedMods.Value = new List<Mod> { new OsuModHidden() });
77-
AddStep("two mods", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock() });
78-
AddStep("three mods", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModDoubleTime() });
79-
AddStep("four mods", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModDoubleTime(), new OsuModClassic() });
80-
AddStep("five mods", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModDoubleTime(), new OsuModClassic(), new OsuModDifficultyAdjust() });
81-
82-
AddStep("modified", () => SelectedMods.Value = new List<Mod> { new OsuModDoubleTime { SpeedChange = { Value = 1.2 } } });
83-
AddStep("modified + one", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModDoubleTime { SpeedChange = { Value = 1.2 } } });
84-
AddStep("modified + two", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModDoubleTime { SpeedChange = { Value = 1.2 } } });
85-
AddStep("modified + three", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModClassic(), new OsuModDoubleTime { SpeedChange = { Value = 1.2 } } });
86-
AddStep("modified + four", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModClassic(), new OsuModDifficultyAdjust(), new OsuModDoubleTime { SpeedChange = { Value = 1.2 } } });
87-
88-
AddStep("clear mods", () => SelectedMods.Value = Array.Empty<Mod>());
89-
AddWaitStep("wait", 3);
90-
AddStep("one mod", () => SelectedMods.Value = new List<Mod> { new OsuModHidden() });
91-
92-
AddStep("clear mods", () => SelectedMods.Value = Array.Empty<Mod>());
93-
AddWaitStep("wait", 3);
94-
AddStep("five mods", () => SelectedMods.Value = new List<Mod> { new OsuModHidden(), new OsuModHardRock(), new OsuModDoubleTime(), new OsuModClassic(), new OsuModDifficultyAdjust() });
9564
}
9665

66+
/// <summary>
67+
/// Transition when moving from a screen with buttons to a screen with no buttons.
68+
/// </summary>
9769
[Test]
98-
public void TestShowOptions()
70+
public void TestButtonsOut()
9971
{
100-
AddStep("enable options", () =>
101-
{
102-
var optionsButton = this.ChildrenOfType<ScreenFooterButton>().Last();
103-
104-
optionsButton.Enabled.Value = true;
105-
optionsButton.TriggerClick();
106-
});
72+
AddStep("clear buttons", () => screenFooter.SetButtons(Array.Empty<ScreenFooterButton>()));
10773
}
10874

75+
/// <summary>
76+
/// Transition when moving from a screen with buttons to a screen with buttons.
77+
/// </summary>
10978
[Test]
110-
public void TestState()
79+
public void TestReplaceButtons()
11180
{
112-
AddToggleStep("set options enabled state", state => this.ChildrenOfType<ScreenFooterButton>().Last().Enabled.Value = state);
113-
}
114-
115-
[Test]
116-
public void TestFooterRandom()
117-
{
118-
AddStep("press F2", () => InputManager.Key(Key.F2));
119-
AddAssert("next random invoked", () => nextRandomCalled && !previousRandomCalled);
120-
}
121-
122-
[Test]
123-
public void TestFooterRandomViaMouse()
124-
{
125-
AddStep("click button", () =>
81+
AddStep("replace buttons", () => screenFooter.SetButtons(new[]
12682
{
127-
InputManager.MoveMouseTo(randomButton);
128-
InputManager.Click(MouseButton.Left);
129-
});
130-
AddAssert("next random invoked", () => nextRandomCalled && !previousRandomCalled);
83+
new ScreenFooterButton { Text = "One", Action = () => { } },
84+
new ScreenFooterButton { Text = "Two", Action = () => { } },
85+
new ScreenFooterButton { Text = "Three", Action = () => { } },
86+
}));
13187
}
13288

133-
[Test]
134-
public void TestFooterRewind()
89+
private partial class TestModSelectOverlay : UserModSelectOverlay
13590
{
136-
AddStep("press Shift+F2", () =>
137-
{
138-
InputManager.PressKey(Key.LShift);
139-
InputManager.PressKey(Key.F2);
140-
InputManager.ReleaseKey(Key.F2);
141-
InputManager.ReleaseKey(Key.LShift);
142-
});
143-
AddAssert("previous random invoked", () => previousRandomCalled && !nextRandomCalled);
144-
}
145-
146-
[Test]
147-
public void TestFooterRewindViaShiftMouseLeft()
148-
{
149-
AddStep("shift + click button", () =>
150-
{
151-
InputManager.PressKey(Key.LShift);
152-
InputManager.MoveMouseTo(randomButton);
153-
InputManager.Click(MouseButton.Left);
154-
InputManager.ReleaseKey(Key.LShift);
155-
});
156-
AddAssert("previous random invoked", () => previousRandomCalled && !nextRandomCalled);
157-
}
158-
159-
[Test]
160-
public void TestFooterRewindViaMouseRight()
161-
{
162-
AddStep("right click button", () =>
163-
{
164-
InputManager.MoveMouseTo(randomButton);
165-
InputManager.Click(MouseButton.Right);
166-
});
167-
AddAssert("previous random invoked", () => previousRandomCalled && !nextRandomCalled);
168-
}
169-
170-
[Test]
171-
public void TestOverlayPresent()
172-
{
173-
AddStep("Press F1", () =>
174-
{
175-
InputManager.MoveMouseTo(modsButton);
176-
InputManager.Click(MouseButton.Left);
177-
});
178-
AddAssert("Overlay visible", () => overlay.State.Value == Visibility.Visible);
179-
AddStep("Hide", () => overlay.Hide());
180-
}
181-
182-
private partial class DummyOverlay : ShearedOverlayContainer
183-
{
184-
public DummyOverlay()
185-
: base(OverlayColourScheme.Green)
186-
{
187-
}
188-
189-
[BackgroundDependencyLoader]
190-
private void load()
191-
{
192-
Header.Title = "An overlay";
193-
}
91+
protected override bool ShowPresets => true;
19492
}
19593
}
19694
}

osu.Game.Tests/Visual/UserInterface/TestSceneScreenFooterButtonMods.cs

+13-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using osu.Framework.Testing;
1111
using osu.Game.Graphics.Sprites;
1212
using osu.Game.Overlays;
13+
using osu.Game.Overlays.Mods;
1314
using osu.Game.Rulesets.Mods;
1415
using osu.Game.Rulesets.Osu.Mods;
1516
using osu.Game.Screens.SelectV2.Footer;
@@ -26,12 +27,12 @@ public partial class TestSceneScreenFooterButtonMods : OsuTestScene
2627

2728
public TestSceneScreenFooterButtonMods()
2829
{
29-
Add(footerButtonMods = new TestScreenFooterButtonMods
30+
Add(footerButtonMods = new TestScreenFooterButtonMods(new TestModSelectOverlay())
3031
{
3132
Anchor = Anchor.Centre,
3233
Origin = Anchor.CentreLeft,
33-
X = -100,
3434
Action = () => { },
35+
X = -100,
3536
});
3637
}
3738

@@ -112,9 +113,19 @@ private bool assertModsMultiplier(IEnumerable<Mod> mods)
112113
return expectedValue == footerButtonMods.MultiplierText.Current.Value;
113114
}
114115

116+
private partial class TestModSelectOverlay : UserModSelectOverlay
117+
{
118+
protected override bool ShowPresets => true;
119+
}
120+
115121
private partial class TestScreenFooterButtonMods : ScreenFooterButtonMods
116122
{
117123
public new OsuSpriteText MultiplierText => base.MultiplierText;
124+
125+
public TestScreenFooterButtonMods(ModSelectOverlay overlay)
126+
: base(overlay)
127+
{
128+
}
118129
}
119130
}
120131
}

0 commit comments

Comments
 (0)