mirror of
https://github.com/ppy/osu
synced 2024-12-15 03:16:17 +00:00
Merge branch 'master' into fix-mod-reselection
This commit is contained in:
commit
b2ab46e312
@ -14,24 +14,20 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ScrollingTestContainer : Container
|
public class ScrollingTestContainer : Container
|
||||||
{
|
{
|
||||||
private readonly ScrollingDirection direction;
|
[Cached(Type = typeof(IScrollingInfo))]
|
||||||
|
private readonly TestScrollingInfo scrollingInfo = new TestScrollingInfo();
|
||||||
|
|
||||||
public ScrollingTestContainer(ScrollingDirection direction)
|
public ScrollingTestContainer(ScrollingDirection direction)
|
||||||
{
|
{
|
||||||
this.direction = direction;
|
scrollingInfo.Direction.Value = direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
|
public void Flip() => scrollingInfo.Direction.Value = scrollingInfo.Direction.Value == ScrollingDirection.Up ? ScrollingDirection.Down : ScrollingDirection.Up;
|
||||||
{
|
}
|
||||||
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
|
|
||||||
dependencies.CacheAs<IScrollingInfo>(new ScrollingInfo { Direction = { Value = direction }});
|
|
||||||
return dependencies;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ScrollingInfo : IScrollingInfo
|
public class TestScrollingInfo : IScrollingInfo
|
||||||
{
|
{
|
||||||
public readonly Bindable<ScrollingDirection> Direction = new Bindable<ScrollingDirection>();
|
public readonly Bindable<ScrollingDirection> Direction = new Bindable<ScrollingDirection>();
|
||||||
IBindable<ScrollingDirection> IScrollingInfo.Direction => Direction;
|
IBindable<ScrollingDirection> IScrollingInfo.Direction => Direction;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,15 +46,20 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
Spacing = new Vector2(20),
|
Spacing = new Vector2(20),
|
||||||
Children = new[]
|
Children = new[]
|
||||||
{
|
{
|
||||||
createNoteDisplay(ScrollingDirection.Down),
|
createNoteDisplay(ScrollingDirection.Down, 1, out var note1),
|
||||||
createNoteDisplay(ScrollingDirection.Up),
|
createNoteDisplay(ScrollingDirection.Up, 2, out var note2),
|
||||||
createHoldNoteDisplay(ScrollingDirection.Down),
|
createHoldNoteDisplay(ScrollingDirection.Down, 1, out var holdNote1),
|
||||||
createHoldNoteDisplay(ScrollingDirection.Up),
|
createHoldNoteDisplay(ScrollingDirection.Up, 2, out var holdNote2),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AddAssert("note 1 facing downwards", () => verifyAnchors(note1, Anchor.y2));
|
||||||
|
AddAssert("note 2 facing upwards", () => verifyAnchors(note2, Anchor.y0));
|
||||||
|
AddAssert("hold note 1 facing downwards", () => verifyAnchors(holdNote1, Anchor.y2));
|
||||||
|
AddAssert("hold note 2 facing upwards", () => verifyAnchors(holdNote2, Anchor.y0));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable createNoteDisplay(ScrollingDirection direction)
|
private Drawable createNoteDisplay(ScrollingDirection direction, int identifier, out DrawableNote hitObject)
|
||||||
{
|
{
|
||||||
var note = new Note { StartTime = 999999999 };
|
var note = new Note { StartTime = 999999999 };
|
||||||
note.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
note.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
||||||
@ -62,24 +67,24 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
return new ScrollingTestContainer(direction)
|
return new ScrollingTestContainer(direction)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
Child = new NoteContainer(direction, $"note, scrolling {direction.ToString().ToLowerInvariant()}")
|
Child = new NoteContainer(direction, $"note {identifier}, scrolling {direction.ToString().ToLowerInvariant()}")
|
||||||
{
|
{
|
||||||
Child = new DrawableNote(note) { AccentColour = Color4.OrangeRed }
|
Child = hitObject = new DrawableNote(note) { AccentColour = Color4.OrangeRed }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable createHoldNoteDisplay(ScrollingDirection direction)
|
private Drawable createHoldNoteDisplay(ScrollingDirection direction, int identifier, out DrawableHoldNote hitObject)
|
||||||
{
|
{
|
||||||
var note = new HoldNote { StartTime = 999999999, Duration = 1000 };
|
var note = new HoldNote { StartTime = 999999999, Duration = 5000 };
|
||||||
note.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
note.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
||||||
|
|
||||||
return new ScrollingTestContainer(direction)
|
return new ScrollingTestContainer(direction)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
Child = new NoteContainer(direction, $"hold note, scrolling {direction.ToString().ToLowerInvariant()}")
|
Child = new NoteContainer(direction, $"hold note {identifier}, scrolling {direction.ToString().ToLowerInvariant()}")
|
||||||
{
|
{
|
||||||
Child = new DrawableHoldNote(note)
|
Child = hitObject = new DrawableHoldNote(note)
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
AccentColour = Color4.OrangeRed,
|
AccentColour = Color4.OrangeRed,
|
||||||
@ -88,6 +93,12 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool verifyAnchors(DrawableHitObject hitObject, Anchor expectedAnchor)
|
||||||
|
=> hitObject.Anchor.HasFlag(expectedAnchor) && hitObject.Origin.HasFlag(expectedAnchor);
|
||||||
|
|
||||||
|
private bool verifyAnchors(DrawableHoldNote holdNote, Anchor expectedAnchor)
|
||||||
|
=> verifyAnchors((DrawableHitObject)holdNote, expectedAnchor) && holdNote.NestedHitObjects.All(n => verifyAnchors(n, expectedAnchor));
|
||||||
|
|
||||||
private class NoteContainer : Container
|
private class NoteContainer : Container
|
||||||
{
|
{
|
||||||
private readonly Container content;
|
private readonly Container content;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -24,6 +25,8 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
|
|
||||||
private readonly List<ManiaStage> stages = new List<ManiaStage>();
|
private readonly List<ManiaStage> stages = new List<ManiaStage>();
|
||||||
|
|
||||||
|
private FillFlowContainer<ScrollingTestContainer> fill;
|
||||||
|
|
||||||
public TestCaseStage()
|
public TestCaseStage()
|
||||||
: base(columns)
|
: base(columns)
|
||||||
{
|
{
|
||||||
@ -32,7 +35,7 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
Child = new FillFlowContainer
|
Child = fill = new FillFlowContainer<ScrollingTestContainer>
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
@ -54,8 +57,22 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
AddStep("hold note", createHoldNote);
|
AddStep("hold note", createHoldNote);
|
||||||
AddStep("minor bar line", () => createBarLine(false));
|
AddStep("minor bar line", () => createBarLine(false));
|
||||||
AddStep("major bar line", () => createBarLine(true));
|
AddStep("major bar line", () => createBarLine(true));
|
||||||
|
|
||||||
|
AddAssert("check note anchors", () => notesInStageAreAnchored(stages[0], Anchor.TopCentre));
|
||||||
|
AddAssert("check note anchors", () => notesInStageAreAnchored(stages[1], Anchor.BottomCentre));
|
||||||
|
|
||||||
|
AddStep("flip direction", () =>
|
||||||
|
{
|
||||||
|
foreach (var c in fill.Children)
|
||||||
|
c.Flip();
|
||||||
|
});
|
||||||
|
|
||||||
|
AddAssert("check note anchors", () => notesInStageAreAnchored(stages[0], Anchor.BottomCentre));
|
||||||
|
AddAssert("check note anchors", () => notesInStageAreAnchored(stages[1], Anchor.TopCentre));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool notesInStageAreAnchored(ManiaStage stage, Anchor anchor) => stage.Columns.SelectMany(c => c.AllHitObjects).All(o => o.Anchor == anchor);
|
||||||
|
|
||||||
private void createNote()
|
private void createNote()
|
||||||
{
|
{
|
||||||
foreach (var stage in stages)
|
foreach (var stage in stages)
|
||||||
@ -101,7 +118,7 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable createStage(ScrollingDirection direction, ManiaAction action)
|
private ScrollingTestContainer createStage(ScrollingDirection direction, ManiaAction action)
|
||||||
{
|
{
|
||||||
var specialAction = ManiaAction.Special1;
|
var specialAction = ManiaAction.Special1;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
public ManiaScrollingInfo(ManiaConfigManager config)
|
public ManiaScrollingInfo(ManiaConfigManager config)
|
||||||
{
|
{
|
||||||
config.BindWith(ManiaSetting.ScrollDirection, configDirection);
|
config.BindWith(ManiaSetting.ScrollDirection, configDirection);
|
||||||
configDirection.BindValueChanged(v => Direction.Value = (ScrollingDirection)v);
|
configDirection.BindValueChanged(v => Direction.Value = (ScrollingDirection)v, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user