From 28da60cc3853491b737014362ab9eebce00e1ab2 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 28 Dec 2017 22:40:23 +0900 Subject: [PATCH 01/63] https://github.com/ppy/osu/issues/716 1. split the playfield columns by ManiaModKeyCoop 2. can chaneg the key number by ManiaKeyMod --- .../Mods/ManiaModGravity.cs | 6 +- .../Tests/TestCaseManiaPlayfield.cs | 6 +- osu.Game.Rulesets.Mania/UI/Column.cs | 4 +- .../UI/ManiaColumnGroup.cs | 213 ++++++++++++++++ osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 230 ++++++------------ .../UI/ManiaRulesetContainer.cs | 30 ++- .../osu.Game.Rulesets.Mania.csproj | 1 + 7 files changed, 325 insertions(+), 165 deletions(-) create mode 100644 osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs index 70270af6c9..dc80cea562 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs @@ -35,9 +35,9 @@ namespace osu.Game.Rulesets.Mania.Mods } // Like with hit objects, we need to generate one speed adjustment per bar line - foreach (DrawableBarLine barLine in rulesetContainer.BarLines) + foreach (BarLine barLine in rulesetContainer.BarLines) { - var controlPoint = rulesetContainer.CreateControlPointAt(barLine.HitObject.StartTime); + var controlPoint = rulesetContainer.CreateControlPointAt(barLine.StartTime); // Beat length has too large of an effect for gravity, so we'll force it to a constant value for now controlPoint.TimingPoint.BeatLength = 1000; @@ -45,4 +45,4 @@ namespace osu.Game.Rulesets.Mania.Mods } } } -} \ No newline at end of file +} diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 1932038411..88727df405 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -83,11 +83,11 @@ namespace osu.Game.Rulesets.Mania.Tests Add(inputManager); ManiaPlayfield playfield; - inputManager.Add(playfield = new ManiaPlayfield(cols) + inputManager.Add(playfield = new ManiaPlayfield(cols, false) { Anchor = Anchor.Centre, Origin = Anchor.Centre, - SpecialColumnPosition = specialPos + //SpecialColumnPosition = specialPos }); playfield.Inverted.Value = inverted; @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Mania.Tests Add(inputManager); ManiaPlayfield playfield; - inputManager.Add(playfield = new ManiaPlayfield(4) + inputManager.Add(playfield = new ManiaPlayfield(4,false) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index 2d553f8639..6140452bb3 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Hit target + hit objects", RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Top = ManiaPlayfield.HIT_TARGET_POSITION }, + Padding = new MarginPadding { Top = ManiaColumnGroup.HIT_TARGET_POSITION }, Children = new Drawable[] { new Container @@ -115,7 +115,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Key", RelativeSizeAxes = Axes.X, - Height = ManiaPlayfield.HIT_TARGET_POSITION, + Height = ManiaColumnGroup.HIT_TARGET_POSITION, Children = new Drawable[] { new Box diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs new file mode 100644 index 0000000000..a37fa913bc --- /dev/null +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs @@ -0,0 +1,213 @@ +using System; +using System.Collections.Generic; +using OpenTK; +using OpenTK.Graphics; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using osu.Game.Graphics; +using osu.Framework.Allocation; +using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.UI; +using osu.Game.Rulesets.Timing; + +namespace osu.Game.Rulesets.Mania.UI +{ + /// + /// controls that from up to down + /// + internal class ManiaColumnGroup : ScrollingPlayfield + { + public const float HIT_TARGET_POSITION = 50; + + private SpecialColumnPosition specialColumnPosition; + + /// + /// The style to use for the special column. + /// + public SpecialColumnPosition SpecialColumnPosition + { + get { return specialColumnPosition; } + set + { + if (IsLoaded) + throw new InvalidOperationException($"Setting {nameof(SpecialColumnPosition)} after the playfield is loaded requires re-creating the playfield."); + specialColumnPosition = value; + } + } + + private readonly FillFlowContainer columns; + public IEnumerable Columns => columns.Children; + + protected override Container Content => content; + private readonly Container content; + + private readonly Container judgements; + public Container Judgements => judgements; + + private readonly Container topLevelContainer; + public Container TopLevelContainer => topLevelContainer; + + private List normalColumnColours = new List(); + private Color4 specialColumnColour; + + public int ColumnCount { get; protected set; } + + public ManiaColumnGroup(int columnCount) : base(Axes.Y) + { + ColumnCount = columnCount; + Name = "Playfield elements"; + Anchor = Anchor.TopCentre; + Origin = Anchor.TopCentre; + //RelativeSizeAxes = Axes.Y; + //AutoSizeAxes = Axes.X; + InternalChildren = new Drawable[] + { + new Container + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + Children = new Drawable[] + { + new Container + { + Name = "Columns mask", + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + Masking = true, + Children = new Drawable[] + { + new Box + { + Name = "Background", + RelativeSizeAxes = Axes.Both, + Colour = new Color4(0,0,0,0.8f) + }, + columns = new FillFlowContainer + { + Name = "Columns", + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + Direction = FillDirection.Horizontal, + Padding = new MarginPadding { Left = 1, Right = 1 }, + Spacing = new Vector2(1, 0) + }, + } + }, + new Container + { + Name = "Barlines mask", + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + RelativeSizeAxes = Axes.Y, + Width = 1366, // Bar lines should only be masked on the vertical axis + BypassAutoSizeAxes = Axes.Both, + Masking = true, + Child = content = new Container + { + Name = "Bar lines", + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + RelativeSizeAxes = Axes.Y, + Padding = new MarginPadding { Top = HIT_TARGET_POSITION } + } + }, + judgements = new Container + { + Anchor = Anchor.TopCentre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Y = HIT_TARGET_POSITION + 150, + BypassAutoSizeAxes = Axes.Both + }, + topLevelContainer = new Container { RelativeSizeAxes = Axes.Both } + } + } + + }; + } + + /// + /// Whether the column index is a special column for this playfield. + /// + /// The 0-based column index. + /// Whether the column is a special column. + private bool isSpecialColumn(int column) + { + switch (SpecialColumnPosition) + { + default: + case SpecialColumnPosition.Normal: + return ColumnCount % 2 == 1 && column == ColumnCount / 2; + case SpecialColumnPosition.Left: + return column == 0; + case SpecialColumnPosition.Right: + return column == ColumnCount - 1; + } + } + + public void AddColumn(Column c) + { + c.VisibleTimeRange.BindTo(VisibleTimeRange); + topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); + columns.Add(c); + } + + public void AddJudgement(Judgement judgement) + { + judgements.Clear(); + judgements.Add(new DrawableManiaJudgement(judgement) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + normalColumnColours = new List + { + colours.RedDark, + colours.GreenDark + }; + + specialColumnColour = colours.BlueDark; + + // Set the special column + colour + key + foreach (var column in Columns) + { + if (!column.IsSpecial) + continue; + + column.AccentColour = specialColumnColour; + } + + var nonSpecialColumns = Columns.Where(c => !c.IsSpecial).ToList(); + + // We'll set the colours of the non-special columns in a separate loop, because the non-special + // column colours are mirrored across their centre and special styles mess with this + for (int i = 0; i < Math.Ceiling(nonSpecialColumns.Count / 2f); i++) + { + Color4 colour = normalColumnColours[i % normalColumnColours.Count]; + nonSpecialColumns[i].AccentColour = colour; + nonSpecialColumns[nonSpecialColumns.Count - 1 - i].AccentColour = colour; + } + } + + + protected override void Update() + { + // Due to masking differences, it is not possible to get the width of the columns container automatically + // While masking on effectively only the Y-axis, so we need to set the width of the bar line container manually + content.Width = columns.Width; + } + } +} diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 6c164a34f0..ffa74b6ba9 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -17,48 +17,43 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Framework.Graphics.Shapes; using osu.Game.Rulesets.Judgements; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Beatmaps.ControlPoints; +using osu.Framework.MathUtils; +using osu.Framework.Extensions.IEnumerableExtensions; namespace osu.Game.Rulesets.Mania.UI { public class ManiaPlayfield : ScrollingPlayfield { - public const float HIT_TARGET_POSITION = 50; - private SpecialColumnPosition specialColumnPosition; /// - /// The style to use for the special column. + /// list mania column group /// - public SpecialColumnPosition SpecialColumnPosition - { - get { return specialColumnPosition; } - set - { - if (IsLoaded) - throw new InvalidOperationException($"Setting {nameof(SpecialColumnPosition)} after the playfield is loaded requires re-creating the playfield."); - specialColumnPosition = value; - } - } + FillFlowContainer ListColumnGroup = new FillFlowContainer(); /// /// Whether this playfield should be inverted. This flips everything inside the playfield. /// public readonly Bindable Inverted = new Bindable(true); - private readonly FlowContainer columns; - public IEnumerable Columns => columns.Children; - - protected override Container Content => content; - private readonly Container content; - - private List normalColumnColours = new List(); - private Color4 specialColumnColour; - - private readonly Container judgements; + public List Columns + { + get + { + var list = new List(); + foreach (var single in ListColumnGroup) + { + list.AddRange(single.Columns); + } + return list; + } + } private readonly int columnCount; - public ManiaPlayfield(int columnCount) - : base(Axes.Y) + public ManiaPlayfield(int columnCount,bool coop): base(Axes.Y) { this.columnCount = columnCount; @@ -67,172 +62,103 @@ namespace osu.Game.Rulesets.Mania.UI Inverted.Value = true; - Container topLevelContainer; InternalChildren = new Drawable[] { - new Container + ListColumnGroup=new FillFlowContainer() { - Name = "Playfield elements", - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, + Direction= FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Children = new Drawable[] - { - new Container - { - Name = "Columns mask", - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Masking = true, - Children = new Drawable[] - { - new Box - { - Name = "Background", - RelativeSizeAxes = Axes.Both, - Colour = Color4.Black - }, - columns = new FillFlowContainer - { - Name = "Columns", - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Direction = FillDirection.Horizontal, - Padding = new MarginPadding { Left = 1, Right = 1 }, - Spacing = new Vector2(1, 0) - }, - } - }, - new Container - { - Name = "Barlines mask", - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.Y, - Width = 1366, // Bar lines should only be masked on the vertical axis - BypassAutoSizeAxes = Axes.Both, - Masking = true, - Child = content = new Container - { - Name = "Bar lines", - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.Y, - Padding = new MarginPadding { Top = HIT_TARGET_POSITION } - } - }, - judgements = new Container - { - Anchor = Anchor.TopCentre, - Origin = Anchor.Centre, - AutoSizeAxes = Axes.Both, - Y = HIT_TARGET_POSITION + 150, - BypassAutoSizeAxes = Axes.Both - }, - topLevelContainer = new Container { RelativeSizeAxes = Axes.Both } - } + Anchor= Anchor.Centre, + Origin= Anchor.Centre, + Spacing=new Vector2(400), } }; + int numberOfGroup = 1; + if (coop) + numberOfGroup = 2; + + for (int i = 0; i < numberOfGroup; i ++) + { + var group = new ManiaColumnGroup(columnCount / numberOfGroup) + { + + }; + ListColumnGroup.Add(group); + } + + + foreach (var single in ListColumnGroup) + { + single.VisibleTimeRange.BindTo(this.VisibleTimeRange); + AddNested(single); + } + var currentAction = ManiaAction.Key1; for (int i = 0; i < columnCount; i++) { var c = new Column(); - c.VisibleTimeRange.BindTo(VisibleTimeRange); + //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; + c.Action = currentAction++; + /* c.IsSpecial = isSpecialColumn(i); - c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; - topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); - columns.Add(c); + */ + getFallDownControlContainerByActualColumn(i).AddColumn(c); AddNested(c); } Inverted.ValueChanged += invertedChanged; Inverted.TriggerChange(); + } private void invertedChanged(bool newValue) { Scale = new Vector2(1, newValue ? -1 : 1); - judgements.Scale = Scale; - } - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - normalColumnColours = new List + //judgements.Scale = Scale; + foreach (var single in ListColumnGroup) { - colours.RedDark, - colours.GreenDark - }; - - specialColumnColour = colours.BlueDark; - - // Set the special column + colour + key - foreach (var column in Columns) - { - if (!column.IsSpecial) - continue; - - column.AccentColour = specialColumnColour; - } - - var nonSpecialColumns = Columns.Where(c => !c.IsSpecial).ToList(); - - // We'll set the colours of the non-special columns in a separate loop, because the non-special - // column colours are mirrored across their centre and special styles mess with this - for (int i = 0; i < Math.Ceiling(nonSpecialColumns.Count / 2f); i++) - { - Color4 colour = normalColumnColours[i % normalColumnColours.Count]; - nonSpecialColumns[i].AccentColour = colour; - nonSpecialColumns[nonSpecialColumns.Count - 1 - i].AccentColour = colour; + single.Judgements.Scale = Scale; } } public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { var maniaObject = (ManiaHitObject)judgedObject.HitObject; - columns[maniaObject.Column].OnJudgement(judgedObject, judgement); + int column = maniaObject.Column; + Columns[maniaObject.Column].OnJudgement(judgedObject, judgement); - judgements.Clear(); - judgements.Add(new DrawableManiaJudgement(judgement) - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }); - } - - /// - /// Whether the column index is a special column for this playfield. - /// - /// The 0-based column index. - /// Whether the column is a special column. - private bool isSpecialColumn(int column) - { - switch (SpecialColumnPosition) - { - default: - case SpecialColumnPosition.Normal: - return columnCount % 2 == 1 && column == columnCount / 2; - case SpecialColumnPosition.Left: - return column == 0; - case SpecialColumnPosition.Right: - return column == columnCount - 1; - } + getFallDownControlContainerByActualColumn(column).AddJudgement(judgement); } public override void Add(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h); - public void Add(DrawableBarLine barline) => HitObjects.Add(barline); - - protected override void Update() + public void Add(BarLine barline) { - // Due to masking differences, it is not possible to get the width of the columns container automatically - // While masking on effectively only the Y-axis, so we need to set the width of the bar line container manually - content.Width = columns.Width; + //HitObjects.Add(new DrawableBarLine(barline)); + foreach (var single in ListColumnGroup) + { + single.HitObjects.Add(new DrawableBarLine(barline)); + } + } + + private ManiaColumnGroup getFallDownControlContainerByActualColumn(int actualColumn) + { + int sum = 0; + foreach (var single in ListColumnGroup) + { + sum = sum + single.ColumnCount; + if (sum > actualColumn) + { + return single; + } + } + + return null; } } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 61446a31b6..7ea9382314 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -24,6 +24,7 @@ using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Timing; using osu.Game.Rulesets.UI; +using osu.Game.Rulesets.Mania.Mods; namespace osu.Game.Rulesets.Mania.UI { @@ -35,7 +36,12 @@ namespace osu.Game.Rulesets.Mania.UI /// public int AvailableColumns { get; private set; } - public IEnumerable BarLines; + /// + /// Co-op + /// + public bool Coop { get; set; } = false; + + public IEnumerable BarLines; public ManiaRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap, bool isForCurrentRuleset) : base(ruleset, beatmap, isForCurrentRuleset) @@ -44,7 +50,7 @@ namespace osu.Game.Rulesets.Mania.UI double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; var timingPoints = Beatmap.ControlPointInfo.TimingPoints; - var barLines = new List(); + var barLines = new List(); for (int i = 0; i < timingPoints.Count; i++) { @@ -56,12 +62,12 @@ namespace osu.Game.Rulesets.Mania.UI int index = 0; for (double t = timingPoints[i].Time; Precision.DefinitelyBigger(endTime, t); t += point.BeatLength, index++) { - barLines.Add(new DrawableBarLine(new BarLine + barLines.Add(new BarLine { StartTime = t, ControlPoint = point, BeatIndex = index - })); + }); } } @@ -74,7 +80,7 @@ namespace osu.Game.Rulesets.Mania.UI BarLines.ForEach(Playfield.Add); } - protected sealed override Playfield CreatePlayfield() => new ManiaPlayfield(AvailableColumns) + protected sealed override Playfield CreatePlayfield() => new ManiaPlayfield(AvailableColumns, Coop) { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -101,6 +107,20 @@ namespace osu.Game.Rulesets.Mania.UI AvailableColumns = Math.Max(4, Math.Min((int)Math.Round(WorkingBeatmap.BeatmapInfo.BaseDifficulty.OverallDifficulty) + 1, 7)); } + //get mods to change column and coop + foreach (var single in this.WorkingBeatmap.Mods.Value) + { + if (single is ManiaKeyMod maniaKeyMod) + { + AvailableColumns = maniaKeyMod.KeyCount; + } + if (single is ManiaModKeyCoop) + { + Coop = true; + AvailableColumns = AvailableColumns * 2; + } + } + return new ManiaBeatmapConverter(IsForCurrentRuleset, AvailableColumns); } diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index bdd6656ed9..564af6e454 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -92,6 +92,7 @@ + From cfc4c39255e6e4c475691ba01cee0c121aa8a74b Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 28 Dec 2017 22:57:41 +0900 Subject: [PATCH 02/63] Fixed the alert from AppVeyor. maybe. --- osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs | 9 ++++++--- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 5 +---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs index a37fa913bc..fa4820f996 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Collections.Generic; using OpenTK; using OpenTK.Graphics; @@ -41,14 +44,14 @@ namespace osu.Game.Rulesets.Mania.UI } } - private readonly FillFlowContainer columns; public IEnumerable Columns => columns.Children; + private readonly FillFlowContainer columns; protected override Container Content => content; private readonly Container content; - private readonly Container judgements; public Container Judgements => judgements; + private readonly Container judgements; private readonly Container topLevelContainer; public Container TopLevelContainer => topLevelContainer; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index ffa74b6ba9..7658638b5a 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -80,10 +80,7 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < numberOfGroup; i ++) { - var group = new ManiaColumnGroup(columnCount / numberOfGroup) - { - - }; + var group = new ManiaColumnGroup(columnCount / numberOfGroup); ListColumnGroup.Add(group); } From a322c15bbd5dac9bff9f89e86eda797e709f2c53 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 28 Dec 2017 23:15:12 +0900 Subject: [PATCH 03/63] =?UTF-8?q?after=20resharper=20:=20(=20.=20=E8=A3=9D?= =?UTF-8?q?=E4=B8=8AResharper=EF=BC=8C=E5=BE=9E=E6=AD=A4VS=E7=9A=84?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E4=B8=80=E7=89=87=E9=BB=91=E6=9A=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UI/DrawableManiaJudgement.cs | 2 +- .../UI/ManiaColumnGroup.cs | 19 +++----- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 46 ++++++++----------- .../UI/ManiaRulesetContainer.cs | 6 +-- 4 files changed, 29 insertions(+), 44 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs index 08478cef33..6a8e904537 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Mania.UI internal class DrawableManiaJudgement : DrawableJudgement { public DrawableManiaJudgement(Judgement judgement) - : base(judgement) + : base(judgement) { JudgementText.TextSize = 25; } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs index fa4820f996..952deef6e8 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs @@ -3,21 +3,16 @@ using System; using System.Collections.Generic; -using OpenTK; -using OpenTK.Graphics; +using System.Linq; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using osu.Game.Graphics; -using osu.Framework.Allocation; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.UI; -using osu.Game.Rulesets.Timing; +using OpenTK; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Mania.UI { @@ -61,7 +56,8 @@ namespace osu.Game.Rulesets.Mania.UI public int ColumnCount { get; protected set; } - public ManiaColumnGroup(int columnCount) : base(Axes.Y) + public ManiaColumnGroup(int columnCount) + : base(Axes.Y) { ColumnCount = columnCount; Name = "Playfield elements"; @@ -91,7 +87,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Background", RelativeSizeAxes = Axes.Both, - Colour = new Color4(0,0,0,0.8f) + Colour = new Color4(0, 0, 0, 0.8f) }, columns = new FillFlowContainer { @@ -133,7 +129,6 @@ namespace osu.Game.Rulesets.Mania.UI topLevelContainer = new Container { RelativeSizeAxes = Axes.Both } } } - }; } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 7658638b5a..d47d3b4299 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -1,33 +1,23 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Configuration; using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.Objects.Drawables; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; using OpenTK; -using OpenTK.Graphics; -using osu.Framework.Graphics.Containers; -using System; -using osu.Game.Graphics; -using osu.Framework.Allocation; -using System.Linq; -using System.Collections.Generic; -using osu.Framework.Configuration; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Mania.Objects.Drawables; -using osu.Framework.Graphics.Shapes; -using osu.Game.Rulesets.Judgements; -using osu.Game.Beatmaps; -using osu.Game.Rulesets.Objects.Types; -using osu.Game.Beatmaps.ControlPoints; -using osu.Framework.MathUtils; -using osu.Framework.Extensions.IEnumerableExtensions; namespace osu.Game.Rulesets.Mania.UI { public class ManiaPlayfield : ScrollingPlayfield { - /// /// list mania column group /// @@ -53,7 +43,8 @@ namespace osu.Game.Rulesets.Mania.UI private readonly int columnCount; - public ManiaPlayfield(int columnCount,bool coop): base(Axes.Y) + public ManiaPlayfield(int columnCount, bool coop) + : base(Axes.Y) { this.columnCount = columnCount; @@ -64,13 +55,13 @@ namespace osu.Game.Rulesets.Mania.UI InternalChildren = new Drawable[] { - ListColumnGroup=new FillFlowContainer() + ListColumnGroup = new FillFlowContainer() { - Direction= FillDirection.Horizontal, + Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, - Anchor= Anchor.Centre, - Origin= Anchor.Centre, - Spacing=new Vector2(400), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Spacing = new Vector2(400), } }; @@ -78,7 +69,7 @@ namespace osu.Game.Rulesets.Mania.UI if (coop) numberOfGroup = 2; - for (int i = 0; i < numberOfGroup; i ++) + for (int i = 0; i < numberOfGroup; i++) { var group = new ManiaColumnGroup(columnCount / numberOfGroup); ListColumnGroup.Add(group); @@ -87,7 +78,7 @@ namespace osu.Game.Rulesets.Mania.UI foreach (var single in ListColumnGroup) { - single.VisibleTimeRange.BindTo(this.VisibleTimeRange); + single.VisibleTimeRange.BindTo(VisibleTimeRange); AddNested(single); } @@ -109,7 +100,6 @@ namespace osu.Game.Rulesets.Mania.UI Inverted.ValueChanged += invertedChanged; Inverted.TriggerChange(); - } private void invertedChanged(bool newValue) @@ -141,7 +131,7 @@ namespace osu.Game.Rulesets.Mania.UI { single.HitObjects.Add(new DrawableBarLine(barline)); } - } + } private ManiaColumnGroup getFallDownControlContainerByActualColumn(int actualColumn) { diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 7ea9382314..4bed527cbc 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using OpenTK; using osu.Framework.Allocation; using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; @@ -13,6 +12,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; @@ -24,7 +24,7 @@ using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Timing; using osu.Game.Rulesets.UI; -using osu.Game.Rulesets.Mania.Mods; +using OpenTK; namespace osu.Game.Rulesets.Mania.UI { @@ -108,7 +108,7 @@ namespace osu.Game.Rulesets.Mania.UI } //get mods to change column and coop - foreach (var single in this.WorkingBeatmap.Mods.Value) + foreach (var single in WorkingBeatmap.Mods.Value) { if (single is ManiaKeyMod maniaKeyMod) { From 9faa5fb199f1209d5c91927b8209cf23f497f1cd Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 28 Dec 2017 23:40:02 +0900 Subject: [PATCH 04/63] pray --- .../Mods/ManiaModGravity.cs | 1 - .../Tests/TestCaseManiaPlayfield.cs | 3 +- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 43 ++++++++++++------- .../UI/ManiaRulesetContainer.cs | 2 +- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs index dc80cea562..6e5290e277 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs @@ -9,7 +9,6 @@ using osu.Game.Rulesets.Mods; using osu.Game.Graphics; using osu.Game.Rulesets.Mania.Timing; using osu.Game.Rulesets.Timing; -using osu.Game.Rulesets.Mania.Objects.Drawables; namespace osu.Game.Rulesets.Mania.Mods { diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 88727df405..7b13f1f7fc 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -5,7 +5,6 @@ using System; using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; -using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Timing; using osu.Game.Rulesets.Mania.Judgements; @@ -87,7 +86,7 @@ namespace osu.Game.Rulesets.Mania.Tests { Anchor = Anchor.Centre, Origin = Anchor.Centre, - //SpecialColumnPosition = specialPos + SpecialColumnPosition = specialPos }); playfield.Inverted.Value = inverted; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index d47d3b4299..e9b5b835ef 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -21,19 +21,34 @@ namespace osu.Game.Rulesets.Mania.UI /// /// list mania column group /// - FillFlowContainer ListColumnGroup = new FillFlowContainer(); + private FillFlowContainer listColumnGroup; /// /// Whether this playfield should be inverted. This flips everything inside the playfield. /// public readonly Bindable Inverted = new Bindable(true); + /// + /// The style to use for the special column. + /// + public SpecialColumnPosition SpecialColumnPosition + { + get => listColumnGroup.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; + set + { + foreach (var singleGroup in listColumnGroup) + { + singleGroup.SpecialColumnPosition = value; + } + } + } + public List Columns { get { var list = new List(); - foreach (var single in ListColumnGroup) + foreach (var single in listColumnGroup) { list.AddRange(single.Columns); } @@ -41,13 +56,9 @@ namespace osu.Game.Rulesets.Mania.UI } } - private readonly int columnCount; - public ManiaPlayfield(int columnCount, bool coop) : base(Axes.Y) { - this.columnCount = columnCount; - if (columnCount <= 0) throw new ArgumentException("Can't have zero or fewer columns."); @@ -55,7 +66,7 @@ namespace osu.Game.Rulesets.Mania.UI InternalChildren = new Drawable[] { - ListColumnGroup = new FillFlowContainer() + listColumnGroup = new FillFlowContainer { Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, @@ -72,11 +83,11 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < numberOfGroup; i++) { var group = new ManiaColumnGroup(columnCount / numberOfGroup); - ListColumnGroup.Add(group); + listColumnGroup.Add(group); } - foreach (var single in ListColumnGroup) + foreach (var single in listColumnGroup) { single.VisibleTimeRange.BindTo(VisibleTimeRange); AddNested(single); @@ -85,9 +96,11 @@ namespace osu.Game.Rulesets.Mania.UI var currentAction = ManiaAction.Key1; for (int i = 0; i < columnCount; i++) { - var c = new Column(); - //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; - c.Action = currentAction++; + var c = new Column + { + //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; + Action = currentAction++ + }; /* c.IsSpecial = isSpecialColumn(i); @@ -107,7 +120,7 @@ namespace osu.Game.Rulesets.Mania.UI Scale = new Vector2(1, newValue ? -1 : 1); //judgements.Scale = Scale; - foreach (var single in ListColumnGroup) + foreach (var single in listColumnGroup) { single.Judgements.Scale = Scale; } @@ -127,7 +140,7 @@ namespace osu.Game.Rulesets.Mania.UI public void Add(BarLine barline) { //HitObjects.Add(new DrawableBarLine(barline)); - foreach (var single in ListColumnGroup) + foreach (var single in listColumnGroup) { single.HitObjects.Add(new DrawableBarLine(barline)); } @@ -136,7 +149,7 @@ namespace osu.Game.Rulesets.Mania.UI private ManiaColumnGroup getFallDownControlContainerByActualColumn(int actualColumn) { int sum = 0; - foreach (var single in ListColumnGroup) + foreach (var single in listColumnGroup) { sum = sum + single.ColumnCount; if (sum > actualColumn) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 4bed527cbc..ccaed69312 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -39,7 +39,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// Co-op /// - public bool Coop { get; set; } = false; + public bool Coop { get; set; } public IEnumerable BarLines; From 7b94a710e3bb9d3221c7c900e44971293ff6e73f Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 28 Dec 2017 23:55:06 +0900 Subject: [PATCH 05/63] Appveyor Chan, Please --- osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs | 3 +-- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs index 952deef6e8..1e88b240b5 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs @@ -49,12 +49,11 @@ namespace osu.Game.Rulesets.Mania.UI private readonly Container judgements; private readonly Container topLevelContainer; - public Container TopLevelContainer => topLevelContainer; private List normalColumnColours = new List(); private Color4 specialColumnColour; - public int ColumnCount { get; protected set; } + public readonly int ColumnCount; public ManiaColumnGroup(int columnCount) : base(Axes.Y) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index e9b5b835ef..a5c5979057 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// list mania column group /// - private FillFlowContainer listColumnGroup; + private readonly FillFlowContainer listColumnGroup; /// /// Whether this playfield should be inverted. This flips everything inside the playfield. From 5326f71ed9b776a6ab152aac5670628367102720 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Wed, 3 Jan 2018 22:58:08 +0900 Subject: [PATCH 06/63] fix some error that smoogipoo says --- .../Tests/TestCaseManiaPlayfield.cs | 14 +++- osu.Game.Rulesets.Mania/UI/Column.cs | 4 +- ...aniaColumnGroup.cs => ManiaColumnStage.cs} | 6 +- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 78 ++++++++----------- .../UI/ManiaRulesetContainer.cs | 7 +- .../osu.Game.Rulesets.Mania.csproj | 2 +- 6 files changed, 52 insertions(+), 59 deletions(-) rename osu.Game.Rulesets.Mania/UI/{ManiaColumnGroup.cs => ManiaColumnStage.cs} (95%) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index e9e5d98fb8..defe1a6ba6 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -2,11 +2,13 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Timing; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Judgements; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects.Drawables; @@ -82,7 +84,11 @@ namespace osu.Game.Rulesets.Mania.Tests Add(inputManager); ManiaPlayfield playfield; - inputManager.Add(playfield = new ManiaPlayfield(cols, false) + var stages = new List() + { + new StageDefinition() { Columns = cols }, + }; + inputManager.Add(playfield = new ManiaPlayfield(stages) { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -104,7 +110,11 @@ namespace osu.Game.Rulesets.Mania.Tests Add(inputManager); ManiaPlayfield playfield; - inputManager.Add(playfield = new ManiaPlayfield(4,false) + var stages = new List() + { + new StageDefinition() { Columns = 4 }, + }; + inputManager.Add(playfield = new ManiaPlayfield(stages) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index 6140452bb3..f9535bd58c 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Hit target + hit objects", RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Top = ManiaColumnGroup.HIT_TARGET_POSITION }, + Padding = new MarginPadding { Top = ManiaColumnStage.HIT_TARGET_POSITION }, Children = new Drawable[] { new Container @@ -115,7 +115,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Key", RelativeSizeAxes = Axes.X, - Height = ManiaColumnGroup.HIT_TARGET_POSITION, + Height = ManiaColumnStage.HIT_TARGET_POSITION, Children = new Drawable[] { new Box diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs similarity index 95% rename from osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs rename to osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs index 1e88b240b5..c0ee3536ff 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnGroup.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs @@ -17,9 +17,9 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Mania.UI { /// - /// controls that from up to down + /// A collection of s. /// - internal class ManiaColumnGroup : ScrollingPlayfield + internal class ManiaColumnStage : ScrollingPlayfield { public const float HIT_TARGET_POSITION = 50; @@ -55,7 +55,7 @@ namespace osu.Game.Rulesets.Mania.UI public readonly int ColumnCount; - public ManiaColumnGroup(int columnCount) + public ManiaColumnStage(int columnCount) : base(Axes.Y) { ColumnCount = columnCount; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index a5c5979057..8003738562 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -8,6 +8,7 @@ using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables; @@ -21,7 +22,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// list mania column group /// - private readonly FillFlowContainer listColumnGroup; + private readonly FillFlowContainer listColumnStages; /// /// Whether this playfield should be inverted. This flips everything inside the playfield. @@ -33,10 +34,10 @@ namespace osu.Game.Rulesets.Mania.UI /// public SpecialColumnPosition SpecialColumnPosition { - get => listColumnGroup.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; + get => listColumnStages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; set { - foreach (var singleGroup in listColumnGroup) + foreach (var singleGroup in listColumnStages) { singleGroup.SpecialColumnPosition = value; } @@ -48,25 +49,25 @@ namespace osu.Game.Rulesets.Mania.UI get { var list = new List(); - foreach (var single in listColumnGroup) + foreach (var stage in listColumnStages) { - list.AddRange(single.Columns); + list.AddRange(stage.Columns); } return list; } } - public ManiaPlayfield(int columnCount, bool coop) + public ManiaPlayfield(List stages) : base(Axes.Y) { - if (columnCount <= 0) + if (stages.Count <= 0) throw new ArgumentException("Can't have zero or fewer columns."); Inverted.Value = true; InternalChildren = new Drawable[] { - listColumnGroup = new FillFlowContainer + listColumnStages = new FillFlowContainer { Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, @@ -76,39 +77,27 @@ namespace osu.Game.Rulesets.Mania.UI } }; - int numberOfGroup = 1; - if (coop) - numberOfGroup = 2; - - for (int i = 0; i < numberOfGroup; i++) - { - var group = new ManiaColumnGroup(columnCount / numberOfGroup); - listColumnGroup.Add(group); - } - - - foreach (var single in listColumnGroup) - { - single.VisibleTimeRange.BindTo(VisibleTimeRange); - AddNested(single); - } - var currentAction = ManiaAction.Key1; - for (int i = 0; i < columnCount; i++) - { - var c = new Column - { - //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; - Action = currentAction++ - }; - /* - c.IsSpecial = isSpecialColumn(i); - topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); - columns.Add(c); - */ - getFallDownControlContainerByActualColumn(i).AddColumn(c); - AddNested(c); + foreach (var stage in stages) + { + var group = new ManiaColumnStage(stage.Columns); + group.VisibleTimeRange.BindTo(VisibleTimeRange); + + listColumnStages.Add(group); + AddNested(group); + + for (int i = 0; i < stage.Columns; i++) + { + var c = new Column + { + //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; + Action = currentAction++ + }; + + group.AddColumn(c); + AddNested(c); + } } Inverted.ValueChanged += invertedChanged; @@ -120,7 +109,7 @@ namespace osu.Game.Rulesets.Mania.UI Scale = new Vector2(1, newValue ? -1 : 1); //judgements.Scale = Scale; - foreach (var single in listColumnGroup) + foreach (var single in listColumnStages) { single.Judgements.Scale = Scale; } @@ -130,7 +119,7 @@ namespace osu.Game.Rulesets.Mania.UI { var maniaObject = (ManiaHitObject)judgedObject.HitObject; int column = maniaObject.Column; - Columns[maniaObject.Column].OnJudgement(judgedObject, judgement); + Columns[column].OnJudgement(judgedObject, judgement); getFallDownControlContainerByActualColumn(column).AddJudgement(judgement); } @@ -139,17 +128,16 @@ namespace osu.Game.Rulesets.Mania.UI public void Add(BarLine barline) { - //HitObjects.Add(new DrawableBarLine(barline)); - foreach (var single in listColumnGroup) + foreach (var single in listColumnStages) { single.HitObjects.Add(new DrawableBarLine(barline)); } } - private ManiaColumnGroup getFallDownControlContainerByActualColumn(int actualColumn) + private ManiaColumnStage getFallDownControlContainerByActualColumn(int actualColumn) { int sum = 0; - foreach (var single in listColumnGroup) + foreach (var single in listColumnStages) { sum = sum + single.ColumnCount; if (sum > actualColumn) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 53fd60b58f..ef611bb591 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -31,11 +31,6 @@ namespace osu.Game.Rulesets.Mania.UI { public new ManiaBeatmap Beatmap => (ManiaBeatmap)base.Beatmap; - /// - /// Co-op - /// - public bool Coop { get; set; } - public IEnumerable BarLines; public ManiaRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap, bool isForCurrentRuleset) @@ -75,7 +70,7 @@ namespace osu.Game.Rulesets.Mania.UI BarLines.ForEach(Playfield.Add); } - protected sealed override Playfield CreatePlayfield() => new ManiaPlayfield(Beatmap.TotalColumns) + protected sealed override Playfield CreatePlayfield() => new ManiaPlayfield(Beatmap.Stages) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index ca94a9eb7e..1a8211b719 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -94,7 +94,7 @@ - + From a855a21ccbf6a054911b337e12243b1e63ca2f90 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Wed, 3 Jan 2018 23:04:51 +0900 Subject: [PATCH 07/63] group -> stage --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 8003738562..66e866af38 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Mania.UI public class ManiaPlayfield : ScrollingPlayfield { /// - /// list mania column group + /// list mania column stages /// private readonly FillFlowContainer listColumnStages; @@ -37,9 +37,9 @@ namespace osu.Game.Rulesets.Mania.UI get => listColumnStages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; set { - foreach (var singleGroup in listColumnStages) + foreach (var singleStage in listColumnStages) { - singleGroup.SpecialColumnPosition = value; + singleStage.SpecialColumnPosition = value; } } } @@ -81,11 +81,11 @@ namespace osu.Game.Rulesets.Mania.UI foreach (var stage in stages) { - var group = new ManiaColumnStage(stage.Columns); - group.VisibleTimeRange.BindTo(VisibleTimeRange); + var drawableStage = new ManiaColumnStage(stage.Columns); + drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); - listColumnStages.Add(group); - AddNested(group); + listColumnStages.Add(drawableStage); + AddNested(drawableStage); for (int i = 0; i < stage.Columns; i++) { @@ -95,7 +95,7 @@ namespace osu.Game.Rulesets.Mania.UI Action = currentAction++ }; - group.AddColumn(c); + drawableStage.AddColumn(c); AddNested(c); } } @@ -108,7 +108,6 @@ namespace osu.Game.Rulesets.Mania.UI { Scale = new Vector2(1, newValue ? -1 : 1); - //judgements.Scale = Scale; foreach (var single in listColumnStages) { single.Judgements.Scale = Scale; From aadafae8cbc4f4403d2d732b970f968e52659aee Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Wed, 3 Jan 2018 23:47:05 +0900 Subject: [PATCH 08/63] 1. fix TestCaseManiaHitObjects broken 2. add (4+4) (2+4+2) (1+8+1) column stages step in TestCaseManiaPlayfield --- .../Tests/TestCaseManiaHitObjects.cs | 2 +- .../Tests/TestCaseManiaPlayfield.cs | 48 ++++++++++++++++--- .../UI/ManiaRulesetContainer.cs | 1 - 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs index 03886f5784..48974b4bb8 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs @@ -78,7 +78,7 @@ namespace osu.Game.Rulesets.Mania.Tests RelativeChildSize = new Vector2(1, 10000), Children = new[] { - new DrawableHoldNote(new HoldNote(), ManiaAction.Key1) + new DrawableHoldNote(new HoldNote(){Duration = 1000}, ManiaAction.Key1) { Y = 5000, Height = 1000, diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index defe1a6ba6..c77a0cd2a9 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -41,6 +41,36 @@ namespace osu.Game.Rulesets.Mania.Tests AddStep("Right special style", () => createPlayfield(4, SpecialColumnPosition.Right)); AddStep("5 columns", () => createPlayfield(5, SpecialColumnPosition.Normal)); AddStep("8 columns", () => createPlayfield(8, SpecialColumnPosition.Normal)); + AddStep("4 + 4 columns", () => + { + var stages = new List() + { + new StageDefinition() { Columns = 4 }, + new StageDefinition() { Columns = 4 }, + }; + createPlayfield(stages, SpecialColumnPosition.Normal); + }); + AddStep("2 + 4 + 2 columns", () => + { + var stages = new List() + { + new StageDefinition() { Columns = 2 }, + new StageDefinition() { Columns = 4 }, + new StageDefinition() { Columns = 2 }, + }; + createPlayfield(stages, SpecialColumnPosition.Normal); + }); + AddStep("1 + 1 + 8 columns", () => + { + var stages = new List() + { + new StageDefinition() { Columns = 1 }, + new StageDefinition() { Columns = 8 }, + new StageDefinition() { Columns = 1 }, + }; + createPlayfield(stages, SpecialColumnPosition.Normal); + }); + AddStep("Left special style", () => createPlayfield(8, SpecialColumnPosition.Left)); AddStep("Right special style", () => createPlayfield(8, SpecialColumnPosition.Right)); AddStep("Reversed", () => createPlayfield(4, SpecialColumnPosition.Normal, true)); @@ -78,16 +108,22 @@ namespace osu.Game.Rulesets.Mania.Tests private ManiaPlayfield createPlayfield(int cols, SpecialColumnPosition specialPos, bool inverted = false) { - Clear(); - - var inputManager = new ManiaInputManager(maniaRuleset, cols) { RelativeSizeAxes = Axes.Both }; - Add(inputManager); - - ManiaPlayfield playfield; var stages = new List() { new StageDefinition() { Columns = cols }, }; + return createPlayfield(stages, specialPos, inverted); + } + + private ManiaPlayfield createPlayfield(List stages, SpecialColumnPosition specialPos, bool inverted = false) + { + Clear(); + + var inputManager = new ManiaInputManager(maniaRuleset, stages.Sum(g => g.Columns)) { RelativeSizeAxes = Axes.Both }; + Add(inputManager); + + ManiaPlayfield playfield; + inputManager.Add(playfield = new ManiaPlayfield(stages) { Anchor = Anchor.Centre, diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index ef611bb591..26db5aa5b0 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -11,7 +11,6 @@ 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; From 409664e4dc99887ff72fe6ec63ef89b4b770985b Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Wed, 3 Jan 2018 23:50:52 +0900 Subject: [PATCH 09/63] White space needs to be trimmed --- osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index c77a0cd2a9..37161a7d3d 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Mania.Tests AddStep("Right special style", () => createPlayfield(4, SpecialColumnPosition.Right)); AddStep("5 columns", () => createPlayfield(5, SpecialColumnPosition.Normal)); AddStep("8 columns", () => createPlayfield(8, SpecialColumnPosition.Normal)); - AddStep("4 + 4 columns", () => + AddStep("4 + 4 columns", () => { var stages = new List() { From eb37c361d8d941737954edf86fba3f01a6adc8d6 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 10:34:45 +0900 Subject: [PATCH 10/63] fix framework branch --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 8366ab1705..10cae790c6 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 8366ab17059b8964b0fd6d1ef4f07b0f3412c2ec +Subproject commit 10cae790c6f1d559c326f9438958d0b012d61dc6 From 232381533c8034886a7db4a68e30a8fef7e21d9e Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 10:43:22 +0900 Subject: [PATCH 11/63] update framework again --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 10cae790c6..8366ab1705 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 10cae790c6f1d559c326f9438958d0b012d61dc6 +Subproject commit 8366ab17059b8964b0fd6d1ef4f07b0f3412c2ec From a55ac899a87f19710553a5b7d3a6010d986f710e Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 11:08:04 +0900 Subject: [PATCH 12/63] fix Empty argument list is redundant --- .../Tests/TestCaseManiaPlayfield.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 37161a7d3d..034bfc702a 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -43,30 +43,30 @@ namespace osu.Game.Rulesets.Mania.Tests AddStep("8 columns", () => createPlayfield(8, SpecialColumnPosition.Normal)); AddStep("4 + 4 columns", () => { - var stages = new List() + var stages = new List { - new StageDefinition() { Columns = 4 }, - new StageDefinition() { Columns = 4 }, + new StageDefinition { Columns = 4 }, + new StageDefinition { Columns = 4 }, }; createPlayfield(stages, SpecialColumnPosition.Normal); }); AddStep("2 + 4 + 2 columns", () => { - var stages = new List() + var stages = new List { - new StageDefinition() { Columns = 2 }, - new StageDefinition() { Columns = 4 }, - new StageDefinition() { Columns = 2 }, + new StageDefinition { Columns = 2 }, + new StageDefinition { Columns = 4 }, + new StageDefinition { Columns = 2 }, }; createPlayfield(stages, SpecialColumnPosition.Normal); }); AddStep("1 + 1 + 8 columns", () => { - var stages = new List() + var stages = new List { - new StageDefinition() { Columns = 1 }, - new StageDefinition() { Columns = 8 }, - new StageDefinition() { Columns = 1 }, + new StageDefinition { Columns = 1 }, + new StageDefinition { Columns = 8 }, + new StageDefinition { Columns = 1 }, }; createPlayfield(stages, SpecialColumnPosition.Normal); }); @@ -108,9 +108,9 @@ namespace osu.Game.Rulesets.Mania.Tests private ManiaPlayfield createPlayfield(int cols, SpecialColumnPosition specialPos, bool inverted = false) { - var stages = new List() + var stages = new List { - new StageDefinition() { Columns = cols }, + new StageDefinition { Columns = cols }, }; return createPlayfield(stages, specialPos, inverted); } @@ -146,9 +146,9 @@ namespace osu.Game.Rulesets.Mania.Tests Add(inputManager); ManiaPlayfield playfield; - var stages = new List() + var stages = new List { - new StageDefinition() { Columns = 4 }, + new StageDefinition { Columns = 4 }, }; inputManager.Add(playfield = new ManiaPlayfield(stages) { From 50aaf571fbfcd86bce60328d2372e8f3742b83f8 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 11:08:49 +0900 Subject: [PATCH 13/63] miss --- osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs index 48974b4bb8..da929e58ca 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs @@ -78,7 +78,7 @@ namespace osu.Game.Rulesets.Mania.Tests RelativeChildSize = new Vector2(1, 10000), Children = new[] { - new DrawableHoldNote(new HoldNote(){Duration = 1000}, ManiaAction.Key1) + new DrawableHoldNote(new HoldNote{Duration = 1000}, ManiaAction.Key1) { Y = 5000, Height = 1000, From ca7cd40fbac273e49ba65842826e0e220e2fcf94 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 11:21:10 +0900 Subject: [PATCH 14/63] 1. update from ppy master 2. update header --- osu-framework | 2 +- osu-resources | 2 +- osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu-framework b/osu-framework index 80bcb82ef8..8366ab1705 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 80bcb82ef8d2e1af1ce077f4a037b6d279ad9e74 +Subproject commit 8366ab17059b8964b0fd6d1ef4f07b0f3412c2ec diff --git a/osu-resources b/osu-resources index 7724abdf1d..e01f71160f 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 7724abdf1d7c9705ba2e3989a9c604e17ccdc871 +Subproject commit e01f71160fb9b3167efcd177c7d7dba9e5d36604 diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs index c0ee3536ff..dad5082175 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2017 ppy Pty Ltd . +// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; From 6585610dfe51726e6fd03011ca8e4cfc4d6c69ea Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 11:28:57 +0900 Subject: [PATCH 15/63] update resource branch --- osu-resources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-resources b/osu-resources index e01f71160f..7724abdf1d 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit e01f71160fb9b3167efcd177c7d7dba9e5d36604 +Subproject commit 7724abdf1d7c9705ba2e3989a9c604e17ccdc871 From 6437efb54fe60354c5ea11c374a39f9cca9f012e Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sat, 6 Jan 2018 11:38:22 +0900 Subject: [PATCH 16/63] update framework again.... --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 8366ab1705..80bcb82ef8 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 8366ab17059b8964b0fd6d1ef4f07b0f3412c2ec +Subproject commit 80bcb82ef8d2e1af1ce077f4a037b6d279ad9e74 From d5b436d91b8347a4afacb45d43762a8120886f29 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Mon, 8 Jan 2018 23:11:20 +0900 Subject: [PATCH 17/63] use public List Columns => listColumnStages.SelectMany(x => x.Columns).ToList(); instead --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 3775104a06..292b301e29 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -44,18 +44,7 @@ namespace osu.Game.Rulesets.Mania.UI } } - public List Columns - { - get - { - var list = new List(); - foreach (var stage in listColumnStages) - { - list.AddRange(stage.Columns); - } - return list; - } - } + public List Columns => listColumnStages.SelectMany(x => x.Columns).ToList(); public ManiaPlayfield(List stages) : base(Axes.Y) From cc0520d7223387ceaf8b48ebec8a0f0879ed1244 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Wed, 10 Jan 2018 23:47:38 +0900 Subject: [PATCH 18/63] 1. because set stage's width doesn't help, so use margin instead 2. adjust spacing when has different number of stages --- osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs | 6 ++++++ osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs index dad5082175..46dd44864a 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs @@ -155,6 +155,12 @@ namespace osu.Game.Rulesets.Mania.UI c.VisibleTimeRange.BindTo(VisibleTimeRange); topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); columns.Add(c); + + Margin = new MarginPadding() + { + Left = columns.Count * HIT_TARGET_POSITION / 2, + Right = columns.Count * HIT_TARGET_POSITION / 2, + }; } public void AddJudgement(Judgement judgement) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 292b301e29..06d0c5c242 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -54,15 +54,18 @@ namespace osu.Game.Rulesets.Mania.UI Inverted.Value = true; + var stageSpacing = 300 / stages.Count(); + InternalChildren = new Drawable[] { listColumnStages = new FillFlowContainer { + Name="Stages", Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Spacing = new Vector2(400), + Spacing = new Vector2(stageSpacing), } }; From 118e0b63ebb1bf1830f127f24ae6f0dab73fe826 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 11 Jan 2018 00:07:27 +0900 Subject: [PATCH 19/63] fix CI error --- osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs | 2 +- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs index 46dd44864a..5751c87e78 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs @@ -156,7 +156,7 @@ namespace osu.Game.Rulesets.Mania.UI topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); columns.Add(c); - Margin = new MarginPadding() + Margin = new MarginPadding { Left = columns.Count * HIT_TARGET_POSITION / 2, Right = columns.Count * HIT_TARGET_POSITION / 2, diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 06d0c5c242..dd86eb5586 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -54,7 +54,7 @@ namespace osu.Game.Rulesets.Mania.UI Inverted.Value = true; - var stageSpacing = 300 / stages.Count(); + var stageSpacing = 300 / stages.Count; InternalChildren = new Drawable[] { From e947e4656642b4d1c62a4fefb16cdece398ff781 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 11:41:52 +0900 Subject: [PATCH 20/63] fix : 1. Add space before {, before Duration, and after 1000 2. How about just ManiaStage? 3. This is really just Columns.Count, you're not saving much with this extra variable here. --- .../Tests/TestCaseManiaHitObjects.cs | 2 +- osu.Game.Rulesets.Mania/UI/Column.cs | 4 ++-- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 24 +++++++++---------- .../UI/{ManiaColumnStage.cs => ManiaStage.cs} | 11 ++++----- .../osu.Game.Rulesets.Mania.csproj | 2 +- 5 files changed, 20 insertions(+), 23 deletions(-) rename osu.Game.Rulesets.Mania/UI/{ManiaColumnStage.cs => ManiaStage.cs} (93%) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs index 4a26b1510c..0e6d40dc67 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs @@ -78,7 +78,7 @@ namespace osu.Game.Rulesets.Mania.Tests RelativeChildSize = new Vector2(1, 10000), Children = new[] { - new DrawableHoldNote(new HoldNote{Duration = 1000}, ManiaAction.Key1) + new DrawableHoldNote(new HoldNote { Duration = 1000 } , ManiaAction.Key1) { Y = 5000, Height = 1000, diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index 97600632f1..c2dd86d35d 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Hit target + hit objects", RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Top = ManiaColumnStage.HIT_TARGET_POSITION }, + Padding = new MarginPadding { Top = ManiaStage.HIT_TARGET_POSITION }, Children = new Drawable[] { new Container @@ -115,7 +115,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Key", RelativeSizeAxes = Axes.X, - Height = ManiaColumnStage.HIT_TARGET_POSITION, + Height = ManiaStage.HIT_TARGET_POSITION, Children = new Drawable[] { new Box diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 3125a01528..8f4d5b04b5 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// list mania column stages /// - private readonly FillFlowContainer listColumnStages; + private readonly FillFlowContainer Stages; /// /// Whether this playfield should be inverted. This flips everything inside the playfield. @@ -37,17 +37,17 @@ namespace osu.Game.Rulesets.Mania.UI /// public SpecialColumnPosition SpecialColumnPosition { - get => listColumnStages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; + get => Stages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; set { - foreach (var singleStage in listColumnStages) + foreach (var singleStage in Stages) { singleStage.SpecialColumnPosition = value; } } } - public List Columns => listColumnStages.SelectMany(x => x.Columns).ToList(); + public List Columns => Stages.SelectMany(x => x.Columns).ToList(); private readonly int columnCount; @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Mania.UI InternalChildren = new Drawable[] { - listColumnStages = new FillFlowContainer + Stages = new FillFlowContainer { Name="Stages", Direction = FillDirection.Horizontal, @@ -78,10 +78,10 @@ namespace osu.Game.Rulesets.Mania.UI foreach (var stage in stages) { - var drawableStage = new ManiaColumnStage(stage.Columns); + var drawableStage = new ManiaStage(); drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); - listColumnStages.Add(drawableStage); + Stages.Add(drawableStage); AddNested(drawableStage); for (int i = 0; i < stage.Columns; i++) @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Mania.UI { Scale = new Vector2(1, newValue ? -1 : 1); - foreach (var single in listColumnStages) + foreach (var single in Stages) { single.Judgements.Scale = Scale; } @@ -124,18 +124,18 @@ namespace osu.Game.Rulesets.Mania.UI public void Add(BarLine barline) { - foreach (var single in listColumnStages) + foreach (var single in Stages) { single.HitObjects.Add(new DrawableBarLine(barline)); } } - private ManiaColumnStage getFallDownControlContainerByActualColumn(int actualColumn) + private ManiaStage getFallDownControlContainerByActualColumn(int actualColumn) { int sum = 0; - foreach (var single in listColumnStages) + foreach (var single in Stages) { - sum = sum + single.ColumnCount; + sum = sum + single.Columns.Count(); if (sum > actualColumn) { return single; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs similarity index 93% rename from osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs rename to osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 99f171947c..b2f6460914 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaColumnStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// A collection of s. /// - internal class ManiaColumnStage : ScrollingPlayfield + internal class ManiaStage : ScrollingPlayfield { public const float HIT_TARGET_POSITION = 50; @@ -53,12 +53,9 @@ namespace osu.Game.Rulesets.Mania.UI private List normalColumnColours = new List(); private Color4 specialColumnColour; - public readonly int ColumnCount; - - public ManiaColumnStage(int columnCount) + public ManiaStage() : base(ScrollingDirection.Up) { - ColumnCount = columnCount; Name = "Playfield elements"; Anchor = Anchor.TopCentre; Origin = Anchor.TopCentre; @@ -142,11 +139,11 @@ namespace osu.Game.Rulesets.Mania.UI { default: case SpecialColumnPosition.Normal: - return ColumnCount % 2 == 1 && column == ColumnCount / 2; + return columns.Count % 2 == 1 && column == columns.Count / 2; case SpecialColumnPosition.Left: return column == 0; case SpecialColumnPosition.Right: - return column == ColumnCount - 1; + return column == columns.Count - 1; } } diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index c81a6bb2ea..ae29484161 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -115,7 +115,7 @@ - + From 4f0e1f03d2ac835d29562a16f4da4129598e3e1f Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 11:49:23 +0900 Subject: [PATCH 21/63] fix the problem that smoogipoo suggest 1. Rename to stages 2. This should be checking for null or 0, with two exceptions: 3. Space before and after =. 4. foreach (var stage ... 5. Rename to getStageByColumn, and actualColumn -> column. --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 43 +++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 8f4d5b04b5..00dd082454 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -23,9 +23,9 @@ namespace osu.Game.Rulesets.Mania.UI public class ManiaPlayfield : ScrollingPlayfield { /// - /// list mania column stages + /// s contained by this . /// - private readonly FillFlowContainer Stages; + private readonly FillFlowContainer stages; /// /// Whether this playfield should be inverted. This flips everything inside the playfield. @@ -37,35 +37,38 @@ namespace osu.Game.Rulesets.Mania.UI /// public SpecialColumnPosition SpecialColumnPosition { - get => Stages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; + get => stages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; set { - foreach (var singleStage in Stages) + foreach (var singleStage in stages) { singleStage.SpecialColumnPosition = value; } } } - public List Columns => Stages.SelectMany(x => x.Columns).ToList(); + public List Columns => stages.SelectMany(x => x.Columns).ToList(); private readonly int columnCount; - public ManiaPlayfield(List stages) + public ManiaPlayfield(List stageDefinition) : base(ScrollingDirection.Up) { - if (stages.Count <= 0) + if (stageDefinition ==null) + throw new ArgumentNullException(); + + if (stageDefinition.Count <= 0) throw new ArgumentException("Can't have zero or fewer columns."); Inverted.Value = true; - var stageSpacing = 300 / stages.Count; + var stageSpacing = 300 / stageDefinition.Count; InternalChildren = new Drawable[] { - Stages = new FillFlowContainer + this.stages = new FillFlowContainer { - Name="Stages", + Name = "Stages", Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, Anchor = Anchor.Centre, @@ -76,12 +79,12 @@ namespace osu.Game.Rulesets.Mania.UI var currentAction = ManiaAction.Key1; - foreach (var stage in stages) + foreach (var stage in stageDefinition) { var drawableStage = new ManiaStage(); drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); - Stages.Add(drawableStage); + this.stages.Add(drawableStage); AddNested(drawableStage); for (int i = 0; i < stage.Columns; i++) @@ -105,7 +108,7 @@ namespace osu.Game.Rulesets.Mania.UI { Scale = new Vector2(1, newValue ? -1 : 1); - foreach (var single in Stages) + foreach (var single in stages) { single.Judgements.Scale = Scale; } @@ -117,28 +120,28 @@ namespace osu.Game.Rulesets.Mania.UI int column = maniaObject.Column; Columns[column].OnJudgement(judgedObject, judgement); - getFallDownControlContainerByActualColumn(column).AddJudgement(judgement); + getStageByColumn(column).AddJudgement(judgement); } public override void Add(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h); public void Add(BarLine barline) { - foreach (var single in Stages) + foreach (var single in stages) { single.HitObjects.Add(new DrawableBarLine(barline)); } } - private ManiaStage getFallDownControlContainerByActualColumn(int actualColumn) + private ManiaStage getStageByColumn(int column) { int sum = 0; - foreach (var single in Stages) + foreach (var stage in stages) { - sum = sum + single.Columns.Count(); - if (sum > actualColumn) + sum = sum + stage.Columns.Count(); + if (sum > column) { - return single; + return stage; } } From f7a908fbfa694c63070216a136f4b175019a1ba8 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 12:08:09 +0900 Subject: [PATCH 22/63] Fix : This (along with OnJudgement above) should be done in the following three steps: . i'm not sure does it means the code i write --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 23 ++++++++++++-------- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 16 +++++++++++++- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 00dd082454..18d2f83fd9 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -4,14 +4,11 @@ using osu.Framework.Graphics; using osu.Game.Rulesets.Mania.Objects; using OpenTK; -using OpenTK.Graphics; using osu.Framework.Graphics.Containers; using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Configuration; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects.Drawables; @@ -79,12 +76,14 @@ namespace osu.Game.Rulesets.Mania.UI var currentAction = ManiaAction.Key1; + int stageIndex = 0; foreach (var stage in stageDefinition) { var drawableStage = new ManiaStage(); drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); - - this.stages.Add(drawableStage); + drawableStage.ColumnStartIndex = stageIndex; + + stages.Add(drawableStage); AddNested(drawableStage); for (int i = 0; i < stage.Columns; i++) @@ -98,6 +97,8 @@ namespace osu.Game.Rulesets.Mania.UI drawableStage.AddColumn(c); AddNested(c); } + + stageIndex = stageIndex + stage.Columns; } Inverted.ValueChanged += invertedChanged; @@ -118,12 +119,16 @@ namespace osu.Game.Rulesets.Mania.UI { var maniaObject = (ManiaHitObject)judgedObject.HitObject; int column = maniaObject.Column; - Columns[column].OnJudgement(judgedObject, judgement); - - getStageByColumn(column).AddJudgement(judgement); + getStageByColumn(column).AddJudgement(judgedObject,judgement); } - public override void Add(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h); + public override void Add(DrawableHitObject h) + { + // => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h) + int column = ((ManiaHitObject)h.HitObject).Column; + var stage = getStageByColumn(column); + stage.Add(h); + } public void Add(BarLine barline) { diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index b2f6460914..dee0b8a5bb 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -10,6 +10,8 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI.Scrolling; using OpenTK; using OpenTK.Graphics; @@ -53,6 +55,8 @@ namespace osu.Game.Rulesets.Mania.UI private List normalColumnColours = new List(); private Color4 specialColumnColour; + public int ColumnStartIndex; + public ManiaStage() : base(ScrollingDirection.Up) { @@ -160,8 +164,18 @@ namespace osu.Game.Rulesets.Mania.UI }; } - public void AddJudgement(Judgement judgement) + public override void Add(DrawableHitObject h) { + int index = ((ManiaHitObject)h.HitObject).Column - ColumnStartIndex; + Columns.ElementAt(index).Add(h); + } + + public void AddJudgement(DrawableHitObject judgedObject, Judgement judgement) + { + var maniaObject = (ManiaHitObject)judgedObject.HitObject; + int column = maniaObject.Column - ColumnStartIndex; + columns[column].OnJudgement(judgedObject, judgement); + judgements.Clear(); judgements.Add(new DrawableManiaJudgement(judgement) { From d07636a10589a7c14c02e9fc90ffaf34689dd0a8 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 12:49:01 +0900 Subject: [PATCH 23/63] Fix : 1. This (along with OnJudgement above) should be done in the following three steps: 2. How about giving the stages an Inverted BindableBool, and having them decide their scale? --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 16 ++---------- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 27 +++++++++++++++----- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 18d2f83fd9..5c6f6b4408 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -81,8 +81,9 @@ namespace osu.Game.Rulesets.Mania.UI { var drawableStage = new ManiaStage(); drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); + drawableStage.Inverted.BindTo(Inverted); drawableStage.ColumnStartIndex = stageIndex; - + stages.Add(drawableStage); AddNested(drawableStage); @@ -100,19 +101,6 @@ namespace osu.Game.Rulesets.Mania.UI stageIndex = stageIndex + stage.Columns; } - - Inverted.ValueChanged += invertedChanged; - Inverted.TriggerChange(); - } - - private void invertedChanged(bool newValue) - { - Scale = new Vector2(1, newValue ? -1 : 1); - - foreach (var single in stages) - { - single.Judgements.Scale = Scale; - } } public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index dee0b8a5bb..408103458e 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -25,6 +26,11 @@ namespace osu.Game.Rulesets.Mania.UI { public const float HIT_TARGET_POSITION = 50; + /// + /// Whether this playfield should be inverted. This flips everything inside the playfield. + /// + public readonly Bindable Inverted = new Bindable(true); + private SpecialColumnPosition specialColumnPosition; /// @@ -61,8 +67,8 @@ namespace osu.Game.Rulesets.Mania.UI : base(ScrollingDirection.Up) { Name = "Playfield elements"; - Anchor = Anchor.TopCentre; - Origin = Anchor.TopCentre; + Anchor = Anchor.Centre; + Origin = Anchor.Centre; //RelativeSizeAxes = Axes.Y; //AutoSizeAxes = Axes.X; InternalChildren = new Drawable[] @@ -130,6 +136,15 @@ namespace osu.Game.Rulesets.Mania.UI } } }; + + Inverted.ValueChanged += invertedChanged; + Inverted.TriggerChange(); + } + + private void invertedChanged(bool newValue) + { + Scale = new Vector2(1, newValue ? -1 : 1); + Judgements.Scale = Scale; } /// @@ -166,15 +181,15 @@ namespace osu.Game.Rulesets.Mania.UI public override void Add(DrawableHitObject h) { - int index = ((ManiaHitObject)h.HitObject).Column - ColumnStartIndex; - Columns.ElementAt(index).Add(h); + int columnIndex = ((ManiaHitObject)h.HitObject).Column - ColumnStartIndex; + Columns.ElementAt(columnIndex).Add(h); } public void AddJudgement(DrawableHitObject judgedObject, Judgement judgement) { var maniaObject = (ManiaHitObject)judgedObject.HitObject; - int column = maniaObject.Column - ColumnStartIndex; - columns[column].OnJudgement(judgedObject, judgement); + int columnIndex = maniaObject.Column - ColumnStartIndex; + columns[columnIndex].OnJudgement(judgedObject, judgement); judgements.Clear(); judgements.Add(new DrawableManiaJudgement(judgement) From 58bf611d174a9ad5c3007c12e0fac03a359577bc Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 12:51:55 +0900 Subject: [PATCH 24/63] This should be done in the stage instead of the playfield. --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 1 - osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 5c6f6b4408..5cc702b279 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -96,7 +96,6 @@ namespace osu.Game.Rulesets.Mania.UI }; drawableStage.AddColumn(c); - AddNested(c); } stageIndex = stageIndex + stage.Columns; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 408103458e..d188ec9790 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -171,6 +171,7 @@ namespace osu.Game.Rulesets.Mania.UI c.VisibleTimeRange.BindTo(VisibleTimeRange); topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); columns.Add(c); + AddNested(c); Margin = new MarginPadding { From 5ecfc3a57c53f0ca1bdb6f4650a607d701304640 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 13:06:37 +0900 Subject: [PATCH 25/63] fix CI error --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 5cc702b279..d633e4585e 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -46,8 +46,6 @@ namespace osu.Game.Rulesets.Mania.UI public List Columns => stages.SelectMany(x => x.Columns).ToList(); - private readonly int columnCount; - public ManiaPlayfield(List stageDefinition) : base(ScrollingDirection.Up) { @@ -63,7 +61,7 @@ namespace osu.Game.Rulesets.Mania.UI InternalChildren = new Drawable[] { - this.stages = new FillFlowContainer + stages = new FillFlowContainer { Name = "Stages", Direction = FillDirection.Horizontal, From 2d266a860486402a863749644387a49e2b6ac8af Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 20:44:17 +0900 Subject: [PATCH 26/63] fix : 1. Instead of this property, turn SpecialColumnPosition into a 2. special column does not display --- .../Tests/TestCaseManiaPlayfield.cs | 2 +- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 12 +--- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 59 ++++++++----------- 3 files changed, 27 insertions(+), 46 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 4950862c09..9f30427045 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -121,9 +121,9 @@ namespace osu.Game.Rulesets.Mania.Tests { Anchor = Anchor.Centre, Origin = Anchor.Centre, - SpecialColumnPosition = specialPos }); + playfield.SpecialColumnPosition.Value = specialPos; playfield.Inverted.Value = inverted; return playfield; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index d633e4585e..f3131ec50a 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -32,17 +32,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// The style to use for the special column. /// - public SpecialColumnPosition SpecialColumnPosition - { - get => stages.FirstOrDefault()?.SpecialColumnPosition ?? SpecialColumnPosition.Normal; - set - { - foreach (var singleStage in stages) - { - singleStage.SpecialColumnPosition = value; - } - } - } + public Bindable SpecialColumnPosition = new Bindable(); public List Columns => stages.SelectMany(x => x.Columns).ToList(); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index d188ec9790..ce154e05e6 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -31,21 +31,7 @@ namespace osu.Game.Rulesets.Mania.UI /// public readonly Bindable Inverted = new Bindable(true); - private SpecialColumnPosition specialColumnPosition; - - /// - /// The style to use for the special column. - /// - public SpecialColumnPosition SpecialColumnPosition - { - get { return specialColumnPosition; } - set - { - if (IsLoaded) - throw new InvalidOperationException($"Setting {nameof(SpecialColumnPosition)} after the playfield is loaded requires re-creating the playfield."); - specialColumnPosition = value; - } - } + public readonly Bindable SpecialColumn = new Bindable(); public IEnumerable Columns => columns.Children; private readonly FillFlowContainer columns; @@ -147,25 +133,6 @@ namespace osu.Game.Rulesets.Mania.UI Judgements.Scale = Scale; } - /// - /// Whether the column index is a special column for this playfield. - /// - /// The 0-based column index. - /// Whether the column is a special column. - private bool isSpecialColumn(int column) - { - switch (SpecialColumnPosition) - { - default: - case SpecialColumnPosition.Normal: - return columns.Count % 2 == 1 && column == columns.Count / 2; - case SpecialColumnPosition.Left: - return column == 0; - case SpecialColumnPosition.Right: - return column == columns.Count - 1; - } - } - public void AddColumn(Column c) { c.VisibleTimeRange.BindTo(VisibleTimeRange); @@ -180,6 +147,25 @@ namespace osu.Game.Rulesets.Mania.UI }; } + /// + /// Whether the column index is a special column for this playfield. + /// + /// The 0-based column index. + /// Whether the column is a special column. + private bool isSpecialColumn(int column) + { + switch (SpecialColumn.Value) + { + default: + case SpecialColumnPosition.Normal: + return columns.Count % 2 == 1 && column == columns.Count / 2; + case SpecialColumnPosition.Left: + return column == 0; + case SpecialColumnPosition.Right: + return column == columns.Count - 1; + } + } + public override void Add(DrawableHitObject h) { int columnIndex = ((ManiaHitObject)h.HitObject).Column - ColumnStartIndex; @@ -203,6 +189,11 @@ namespace osu.Game.Rulesets.Mania.UI [BackgroundDependencyLoader] private void load(OsuColour colours) { + for (int i = 0; i < columns.Count; i++) + { + columns[i].IsSpecial = isSpecialColumn(i); + } + normalColumnColours = new List { colours.RedDark, From cf0d9e4d9b37d19d6d6798819349b3936ae5bf9a Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 21:20:01 +0900 Subject: [PATCH 27/63] not sure is it a goodway to delete mania ManiaAction.Special or add more --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 2 ++ osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 4 ++-- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 2 -- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 5e12ef5581..14f8ce7427 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -19,6 +19,8 @@ namespace osu.Game.Rulesets.Mania { [Description("Special")] Special, + [Description("Special")] + Specia2, [Description("Key 1")] Key1 = 10, [Description("Key 2")] diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index e8b9828bff..e05b320b95 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -148,7 +148,7 @@ namespace osu.Game.Rulesets.Mania bindings.Add(new KeyBinding(rightKeys[i], currentKey++)); if (variant % 2 == 1) - bindings.Add(new KeyBinding(InputKey.Space, ManiaAction.Special)); + bindings.Insert(variant / 2, new KeyBinding(InputKey.Space, ManiaAction.Special)); return bindings; } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index f3131ec50a..bd7f6b7b9d 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// The style to use for the special column. /// - public Bindable SpecialColumnPosition = new Bindable(); + public Bindable SpecialColumnPosition = new Bindable(); public List Columns => stages.SelectMany(x => x.Columns).ToList(); @@ -68,6 +68,7 @@ namespace osu.Game.Rulesets.Mania.UI foreach (var stage in stageDefinition) { var drawableStage = new ManiaStage(); + drawableStage.SpecialColumn.BindTo(SpecialColumnPosition); drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); drawableStage.Inverted.BindTo(Inverted); drawableStage.ColumnStartIndex = stageIndex; @@ -99,7 +100,6 @@ namespace osu.Game.Rulesets.Mania.UI public override void Add(DrawableHitObject h) { - // => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h) int column = ((ManiaHitObject)h.HitObject).Column; var stage = getStageByColumn(column); stage.Add(h); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index ce154e05e6..78d8376b6c 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -55,8 +55,6 @@ namespace osu.Game.Rulesets.Mania.UI Name = "Playfield elements"; Anchor = Anchor.Centre; Origin = Anchor.Centre; - //RelativeSizeAxes = Axes.Y; - //AutoSizeAxes = Axes.X; InternalChildren = new Drawable[] { new Container From 999386497a0d7ad67740b1af70c11548a17368d6 Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 21:35:35 +0900 Subject: [PATCH 28/63] implement co-op mod --- .../Beatmaps/ManiaBeatmap.cs | 4 +-- .../Beatmaps/ManiaBeatmapConverter.cs | 12 ++++++++- .../Mods/ManiaModKeyCoop.cs | 26 ++++++++++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs index d775cb392f..c376e2a47b 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs @@ -25,9 +25,9 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// Creates a new . /// /// The initial stage. - public ManiaBeatmap(StageDefinition initialStage) + public ManiaBeatmap(List stages) { - Stages.Add(initialStage); + Stages = stages; } } } diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index 557ce5eb1b..eaa57666fe 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -26,6 +26,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps protected override IEnumerable ValidConversionTypes { get; } = new[] { typeof(IHasXPosition) }; public int TargetColumns; + public List StageDefinitions; public readonly bool IsForCurrentRuleset; private Pattern lastPattern = new Pattern(); @@ -66,7 +67,16 @@ namespace osu.Game.Rulesets.Mania.Beatmaps return base.ConvertBeatmap(original); } - protected override Beatmap CreateBeatmap() => beatmap = new ManiaBeatmap(new StageDefinition { Columns = TargetColumns }); + protected override Beatmap CreateBeatmap() + { + if(StageDefinitions==null) + StageDefinitions=new List() + { + new StageDefinition { Columns = TargetColumns } + }; + + return beatmap = new ManiaBeatmap(StageDefinitions); + } protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) { diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 893e81f165..33da82ba94 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -1,16 +1,40 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; +using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mods; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModKeyCoop : Mod + public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter { public override string Name => "KeyCoop"; public override string ShortenedName => "2P"; public override string Description => @"Double the key amount, double the fun!"; public override double ScoreMultiplier => 1; public override bool Ranked => true; + + public void ApplyToBeatmapConverter(BeatmapConverter beatmapConverter) + { + var mbc = (ManiaBeatmapConverter)beatmapConverter; + + // Although this can work, for now let's not allow keymods for mania-specific beatmaps + if (mbc.IsForCurrentRuleset) + return; + + int originTargetColumns = mbc.TargetColumns; + + var newStages = new List() + { + new StageDefinition() { Columns = originTargetColumns }, + new StageDefinition() { Columns = originTargetColumns }, + }; + + mbc.StageDefinitions = newStages; + mbc.TargetColumns = originTargetColumns * 2; + } } } From bbb741245e1446c55bc87c02e13a58a0eabaf83d Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Sun, 14 Jan 2018 21:51:07 +0900 Subject: [PATCH 29/63] fix CI error --- osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs | 4 ++-- osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs | 4 ++-- osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs index c376e2a47b..69c85fec87 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// The definitions for each stage in a . /// - public readonly List Stages = new List(); + public readonly List Stages; /// /// Total number of columns represented by all stages in this . @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// Creates a new . /// - /// The initial stage. + /// The initial stages. public ManiaBeatmap(List stages) { Stages = stages; diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index eaa57666fe..e5a444533d 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -69,8 +69,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps protected override Beatmap CreateBeatmap() { - if(StageDefinitions==null) - StageDefinitions=new List() + if (StageDefinitions == null) + StageDefinitions = new List { new StageDefinition { Columns = TargetColumns } }; diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 33da82ba94..01fe9863e9 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -27,10 +27,10 @@ namespace osu.Game.Rulesets.Mania.Mods int originTargetColumns = mbc.TargetColumns; - var newStages = new List() + var newStages = new List { - new StageDefinition() { Columns = originTargetColumns }, - new StageDefinition() { Columns = originTargetColumns }, + new StageDefinition { Columns = originTargetColumns }, + new StageDefinition { Columns = originTargetColumns }, }; mbc.StageDefinitions = newStages; From 9f9898355055dde7b140f3adcd358ed4fd808504 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 15:36:36 +0900 Subject: [PATCH 30/63] Remove gravity mod Not sure how this made it back in here. --- .../Mods/ManiaModGravity.cs | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs deleted file mode 100644 index e6967cd605..0000000000 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System.Collections.Generic; -using System.Linq; -using osu.Game.Graphics; -using osu.Game.Rulesets.Mania.Objects; -using osu.Game.Rulesets.Mania.Timing; -using osu.Game.Rulesets.Mania.UI; -using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Timing; - -namespace osu.Game.Rulesets.Mania.Mods -{ - public class ManiaModGravity : Mod, IGenerateSpeedAdjustments - { - public override string Name => "Gravity"; - public override string ShortenedName => "GR"; - - public override double ScoreMultiplier => 0; - - public override FontAwesome Icon => FontAwesome.fa_sort_desc; - - public void ApplyToRulesetContainer(ManiaRulesetContainer rulesetContainer, ref List[] hitObjectTimingChanges, - ref List barlineTimingChanges) - { - // We have to generate one speed adjustment per hit object for gravity - foreach (var obj in rulesetContainer.Objects.OfType()) - { - var controlPoint = rulesetContainer.CreateControlPointAt(obj.StartTime); - // Beat length has too large of an effect for gravity, so we'll force it to a constant value for now - controlPoint.TimingPoint.BeatLength = 1000; - - hitObjectTimingChanges[obj.Column].Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity)); - } - - // Like with hit objects, we need to generate one speed adjustment per bar line - foreach (var barLine in rulesetContainer.BarLines) - { - var controlPoint = rulesetContainer.CreateControlPointAt(barLine.StartTime); - // Beat length has too large of an effect for gravity, so we'll force it to a constant value for now - controlPoint.TimingPoint.BeatLength = 1000; - - barlineTimingChanges.Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity)); - } - } - } -} From d2b1e2752735aac0aef5e7550f2218bcccc86764 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 15:49:03 +0900 Subject: [PATCH 31/63] Cleanup implementation of coop key mod This is how I intended the functionality to be implemented. --- .../Beatmaps/ManiaBeatmap.cs | 8 +++---- .../Beatmaps/ManiaBeatmapConverter.cs | 12 +--------- .../Mods/ManiaModKeyCoop.cs | 24 ++++++++++++------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs index 69c85fec87..0a248658a8 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmap.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// The definitions for each stage in a . /// - public readonly List Stages; + public List Stages = new List(); /// /// Total number of columns represented by all stages in this . @@ -24,10 +24,10 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// /// Creates a new . /// - /// The initial stages. - public ManiaBeatmap(List stages) + /// The initial stages. + public ManiaBeatmap(StageDefinition defaultStage) { - Stages = stages; + Stages.Add(defaultStage); } } } diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index e5a444533d..557ce5eb1b 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -26,7 +26,6 @@ namespace osu.Game.Rulesets.Mania.Beatmaps protected override IEnumerable ValidConversionTypes { get; } = new[] { typeof(IHasXPosition) }; public int TargetColumns; - public List StageDefinitions; public readonly bool IsForCurrentRuleset; private Pattern lastPattern = new Pattern(); @@ -67,16 +66,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps return base.ConvertBeatmap(original); } - protected override Beatmap CreateBeatmap() - { - if (StageDefinitions == null) - StageDefinitions = new List - { - new StageDefinition { Columns = TargetColumns } - }; - - return beatmap = new ManiaBeatmap(StageDefinitions); - } + protected override Beatmap CreateBeatmap() => beatmap = new ManiaBeatmap(new StageDefinition { Columns = TargetColumns }); protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) { diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 01fe9863e9..5fbf59e5e6 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -1,15 +1,18 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter + public class ManiaModKeyCoop : Mod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer { public override string Name => "KeyCoop"; public override string ShortenedName => "2P"; @@ -25,16 +28,21 @@ namespace osu.Game.Rulesets.Mania.Mods if (mbc.IsForCurrentRuleset) return; - int originTargetColumns = mbc.TargetColumns; + mbc.TargetColumns *= 2; + } - var newStages = new List + public void ApplyToRulesetContainer(RulesetContainer rulesetContainer) + { + var mrc = (ManiaRulesetContainer)rulesetContainer; + + var newDefinitions = new List(); + foreach (var existing in mrc.Beatmap.Stages) { - new StageDefinition { Columns = originTargetColumns }, - new StageDefinition { Columns = originTargetColumns }, - }; + newDefinitions.Add(new StageDefinition { Columns = (int)Math.Ceiling(existing.Columns / 2f) }); + newDefinitions.Add(new StageDefinition { Columns = (int)Math.Floor(existing.Columns / 2f) }); + } - mbc.StageDefinitions = newStages; - mbc.TargetColumns = originTargetColumns * 2; + mrc.Beatmap.Stages = newDefinitions; } } } From 1c74e56bab1679e7d42a52b7cc84126e66a10dad Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 15:50:43 +0900 Subject: [PATCH 32/63] Increase the point at which normal keys start in ManiaAction --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 14f8ce7427..762a914f26 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Mania [Description("Special")] Specia2, [Description("Key 1")] - Key1 = 10, + Key1 = 1000, [Description("Key 2")] Key2, [Description("Key 3")] From dbcabfb6ac14a5940e5d64da57a5d8198ec00eb6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 15:50:57 +0900 Subject: [PATCH 33/63] Remove ManiaAction.Specia2 --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 762a914f26..23bb70eb46 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -18,9 +18,8 @@ namespace osu.Game.Rulesets.Mania public enum ManiaAction { [Description("Special")] - Special, - [Description("Special")] - Specia2, + Special = 1, + [Description("Key 1")] Key1 = 1000, [Description("Key 2")] From 0d79d1669206d44e452577e52a12c978b1445e2a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 15:52:07 +0900 Subject: [PATCH 34/63] Cleanup testcase --- osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 9f30427045..d021202f36 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -48,6 +48,7 @@ namespace osu.Game.Rulesets.Mania.Tests }; createPlayfield(stages, SpecialColumnPosition.Normal); }); + AddStep("2 + 4 + 2 columns", () => { var stages = new List @@ -58,7 +59,8 @@ namespace osu.Game.Rulesets.Mania.Tests }; createPlayfield(stages, SpecialColumnPosition.Normal); }); - AddStep("1 + 1 + 8 columns", () => + + AddStep("1 + 8 + 1 columns", () => { var stages = new List { @@ -105,6 +107,7 @@ namespace osu.Game.Rulesets.Mania.Tests { new StageDefinition { Columns = cols }, }; + return createPlayfield(stages, specialPos, inverted); } @@ -143,6 +146,7 @@ namespace osu.Game.Rulesets.Mania.Tests { new StageDefinition { Columns = 4 }, }; + inputManager.Add(playfield = new ManiaPlayfield(stages) { Anchor = Anchor.Centre, From 351afc350e9a7fa7ec4d6ddcff21de86fa1a244c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 17:43:45 +0900 Subject: [PATCH 35/63] Implement co-op keybindings --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 24 +- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 222 +++++++++++++++++-- 2 files changed, 223 insertions(+), 23 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 23bb70eb46..6586935c02 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -17,8 +17,10 @@ namespace osu.Game.Rulesets.Mania public enum ManiaAction { - [Description("Special")] + [Description("Special 1")] Special = 1, + [Description("Special 2")] + Special2 = 2, [Description("Key 1")] Key1 = 1000, @@ -37,6 +39,24 @@ namespace osu.Game.Rulesets.Mania [Description("Key 8")] Key8, [Description("Key 9")] - Key9 + Key9, + [Description("Key 10")] + Key10, + [Description("Key 11")] + Key11, + [Description("Key 12")] + Key12, + [Description("Key 13")] + Key13, + [Description("Key 14")] + Key14, + [Description("Key 15")] + Key15, + [Description("Key 16")] + Key16, + [Description("Key 17")] + Key17, + [Description("Key 18")] + Key18, } } diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index e05b320b95..14251359d6 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Mods; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; using System.Collections.Generic; +using System.Linq; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Game.Graphics; @@ -117,42 +119,220 @@ namespace osu.Game.Rulesets.Mania { } - public override IEnumerable AvailableVariants => new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + public override IEnumerable AvailableVariants + { + get + { + for (int i = 1; i <= 9; i++) + yield return (int)ManiaVariantType.Solo + i; + for (int i = 2; i <= 18; i++) + yield return (int)ManiaVariantType.Coop + i; + // Todo: Versus mode + } + } public override IEnumerable GetDefaultKeyBindings(int variant = 0) { - var leftKeys = new[] + switch (getVariantType(variant)) { - InputKey.A, - InputKey.S, - InputKey.D, - InputKey.F - }; + case ManiaVariantType.Solo: + return new VariantMappingGenerator + { + LeftKeys = new[] + { + InputKey.A, + InputKey.S, + InputKey.D, + InputKey.F + }, + RightKeys = new[] + { + InputKey.J, + InputKey.K, + InputKey.L, + InputKey.Semicolon + }, + SpecialKey = InputKey.Space, + SpecialAction = ManiaAction.Special, + NormalActionStart = ManiaAction.Key1, + }.GenerateKeyBindingsFor(variant); + case ManiaVariantType.Coop: + case ManiaVariantType.Versus: + getMultiVariantKeyCounts(variant, out int p1K, out int p2K); - var rightKeys = new[] + var player1Bindings = new VariantMappingGenerator + { + LeftKeys = new[] + { + InputKey.Number1, + InputKey.Number2, + InputKey.Number3, + InputKey.Number4, + }, + RightKeys = new[] + { + InputKey.Z, + InputKey.X, + InputKey.C, + InputKey.V + }, + SpecialKey = InputKey.Tilde, + SpecialAction = ManiaAction.Special, + NormalActionStart = ManiaAction.Key1 + }.GenerateKeyBindingsFor(p1K); + + var player2Bindings = new VariantMappingGenerator + { + LeftKeys = new[] + { + InputKey.Number7, + InputKey.Number8, + InputKey.Number9, + InputKey.Number0 + }, + RightKeys = new[] + { + InputKey.O, + InputKey.P, + InputKey.BracketLeft, + InputKey.BracketRight + }, + SpecialKey = InputKey.BackSlash, + SpecialAction = ManiaAction.Special2, + NormalActionStart = ManiaAction.Key10 + }.GenerateKeyBindingsFor(p2K); + + return player1Bindings.Concat(player2Bindings); + } + + return new KeyBinding[0]; + } + + public override string GetVariantName(int variant) + { + switch (getVariantType(variant)) { - InputKey.J, - InputKey.K, - InputKey.L, - InputKey.Semicolon - }; + default: + case ManiaVariantType.Solo: + return $"{variant}K"; + case ManiaVariantType.Coop: + { + getMultiVariantKeyCounts(variant, out int p1K, out int p2K); + return $"{p1K}K + {p2K}K"; + } + case ManiaVariantType.Versus: + { + getMultiVariantKeyCounts(variant, out int p1K, out int p2K); + return $"{p1K}K Vs. {p2K}K"; + } + } + } - ManiaAction currentKey = ManiaAction.Key1; + /// + /// Finds the number of keys for each player in or . + /// + /// The variant. + /// The number of keys for player 1. + /// The number of keys for player 2. + private void getMultiVariantKeyCounts(int variant, out int player1Keys, out int player2Keys) + { + player1Keys = 0; + player2Keys = 0; + + switch (getVariantType(variant)) + { + case ManiaVariantType.Coop: + { + int totalKeys = variant - (int)ManiaVariantType.Coop; + player1Keys = (int)Math.Ceiling(totalKeys / 2f); + player2Keys = (int)Math.Floor(totalKeys / 2f); + break; + } + case ManiaVariantType.Versus: + { + int totalKeys = variant - (int)ManiaVariantType.Versus; + player1Keys = totalKeys; + player2Keys = totalKeys; + break; + } + } + } + + /// + /// Finds the that corresponds to a variant value. + /// + /// The variant value. + /// The that corresponds to . + private ManiaVariantType getVariantType(int variant) + { + return (ManiaVariantType)Enum.GetValues(typeof(ManiaVariantType)).Cast().OrderByDescending(i => i).First(v => variant > v); + } + } + + public class VariantMappingGenerator + { + /// + /// All the s available to the left hand. + /// + public InputKey[] LeftKeys; + + /// + /// All the s available to the right hand. + /// + public InputKey[] RightKeys; + + /// + /// The for the special key. + /// + public InputKey SpecialKey; + + /// + /// The at which the normal columns should begin. + /// + public ManiaAction NormalActionStart; + + /// + /// The for the special column. + /// + public ManiaAction SpecialAction; + + /// + /// Generates a list of s for a specific number of columns. + /// + /// The number of columns that need to be bound. + /// The keybindings. + public IEnumerable GenerateKeyBindingsFor(int columns) + { + ManiaAction currentNormalAction = NormalActionStart; var bindings = new List(); - for (int i = leftKeys.Length - variant / 2; i < leftKeys.Length; i++) - bindings.Add(new KeyBinding(leftKeys[i], currentKey++)); + for (int i = LeftKeys.Length - columns / 2; i < LeftKeys.Length; i++) + bindings.Add(new KeyBinding(LeftKeys[i], currentNormalAction++)); - for (int i = 0; i < variant / 2; i++) - bindings.Add(new KeyBinding(rightKeys[i], currentKey++)); + for (int i = 0; i < columns / 2; i++) + bindings.Add(new KeyBinding(RightKeys[i], currentNormalAction++)); - if (variant % 2 == 1) - bindings.Insert(variant / 2, new KeyBinding(InputKey.Space, ManiaAction.Special)); + if (columns % 2 == 1) + bindings.Add(new KeyBinding(SpecialKey, SpecialAction)); return bindings; } + } - public override string GetVariantName(int variant) => $"{variant}K"; + public enum ManiaVariantType + { + /// + /// Solo play keybinding variant (single stage). + /// + Solo = 0, + /// + /// Co-op play keybinding variant (multiple stages). + /// + Coop = 1000, + /// + /// Versus play keybinding variant (multiple stages). + /// + Versus = 10000 } } From dd67070b6fd7d5c64f29528005fd55fd3d89bf4f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 17:58:04 +0900 Subject: [PATCH 36/63] ManiaAction.Special -> ManiaAction.Special1 --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 2 +- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 6586935c02..b5036806c6 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Mania public enum ManiaAction { [Description("Special 1")] - Special = 1, + Special1 = 1, [Description("Special 2")] Special2 = 2, diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 14251359d6..04245534f5 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -153,7 +153,7 @@ namespace osu.Game.Rulesets.Mania InputKey.Semicolon }, SpecialKey = InputKey.Space, - SpecialAction = ManiaAction.Special, + SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant); case ManiaVariantType.Coop: @@ -177,7 +177,7 @@ namespace osu.Game.Rulesets.Mania InputKey.V }, SpecialKey = InputKey.Tilde, - SpecialAction = ManiaAction.Special, + SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1 }.GenerateKeyBindingsFor(p1K); From 89c3fcbf6aa14bf4c31e66ac8d5b124e8f0d1741 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 18:11:53 +0900 Subject: [PATCH 37/63] Refactor column construction --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 42 ++++++---------- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 52 +++++++++++--------- 2 files changed, 43 insertions(+), 51 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index bd7f6b7b9d..26e4f5115f 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -39,11 +39,11 @@ namespace osu.Game.Rulesets.Mania.UI public ManiaPlayfield(List stageDefinition) : base(ScrollingDirection.Up) { - if (stageDefinition ==null) - throw new ArgumentNullException(); + if (stageDefinition == null) + throw new ArgumentNullException(nameof(stageDefinition)); if (stageDefinition.Count <= 0) - throw new ArgumentException("Can't have zero or fewer columns."); + throw new ArgumentException("Can't have zero or fewer stages."); Inverted.Value = true; @@ -62,32 +62,18 @@ namespace osu.Game.Rulesets.Mania.UI } }; - var currentAction = ManiaAction.Key1; - - int stageIndex = 0; - foreach (var stage in stageDefinition) + int firstColumnIndex = 0; + for (int i = 0; i < stageDefinition.Count; i++) { - var drawableStage = new ManiaStage(); - drawableStage.SpecialColumn.BindTo(SpecialColumnPosition); - drawableStage.VisibleTimeRange.BindTo(VisibleTimeRange); - drawableStage.Inverted.BindTo(Inverted); - drawableStage.ColumnStartIndex = stageIndex; + var newStage = new ManiaStage(i, firstColumnIndex, stageDefinition[i]); + newStage.SpecialColumn.BindTo(SpecialColumnPosition); + newStage.VisibleTimeRange.BindTo(VisibleTimeRange); + newStage.Inverted.BindTo(Inverted); - stages.Add(drawableStage); - AddNested(drawableStage); + stages.Add(newStage); + AddNested(newStage); - for (int i = 0; i < stage.Columns; i++) - { - var c = new Column - { - //c.Action = c.IsSpecial ? ManiaAction.Special : currentAction++; - Action = currentAction++ - }; - - drawableStage.AddColumn(c); - } - - stageIndex = stageIndex + stage.Columns; + firstColumnIndex += newStage.Columns.Count; } } @@ -95,7 +81,7 @@ namespace osu.Game.Rulesets.Mania.UI { var maniaObject = (ManiaHitObject)judgedObject.HitObject; int column = maniaObject.Column; - getStageByColumn(column).AddJudgement(judgedObject,judgement); + getStageByColumn(column).AddJudgement(judgedObject, judgement); } public override void Add(DrawableHitObject h) @@ -118,7 +104,7 @@ namespace osu.Game.Rulesets.Mania.UI int sum = 0; foreach (var stage in stages) { - sum = sum + stage.Columns.Count(); + sum = sum + stage.Columns.Count; if (sum > column) { return stage; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 78d8376b6c..f0a9f92215 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -11,6 +11,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI.Scrolling; @@ -33,8 +34,8 @@ namespace osu.Game.Rulesets.Mania.UI public readonly Bindable SpecialColumn = new Bindable(); - public IEnumerable Columns => columns.Children; - private readonly FillFlowContainer columns; + public IReadOnlyList Columns => columnFlow.Children; + private readonly FillFlowContainer columnFlow; protected override Container Content => content; private readonly Container content; @@ -47,11 +48,17 @@ namespace osu.Game.Rulesets.Mania.UI private List normalColumnColours = new List(); private Color4 specialColumnColour; - public int ColumnStartIndex; + private readonly int stageIndex; + private readonly int firstColumnIndex; + private readonly StageDefinition definition; - public ManiaStage() + public ManiaStage(int stageIndex, int firstColumnIndex, StageDefinition definition) : base(ScrollingDirection.Up) { + this.stageIndex = stageIndex; + this.firstColumnIndex = firstColumnIndex; + this.definition = definition; + Name = "Playfield elements"; Anchor = Anchor.Centre; Origin = Anchor.Centre; @@ -79,7 +86,7 @@ namespace osu.Game.Rulesets.Mania.UI RelativeSizeAxes = Axes.Both, Colour = new Color4(0, 0, 0, 0.8f) }, - columns = new FillFlowContainer + columnFlow = new FillFlowContainer { Name = "Columns", RelativeSizeAxes = Axes.Y, @@ -121,6 +128,9 @@ namespace osu.Game.Rulesets.Mania.UI } }; + for (int i = 0; i < definition.Columns; i++) + AddColumn(new Column()); + Inverted.ValueChanged += invertedChanged; Inverted.TriggerChange(); } @@ -134,15 +144,17 @@ namespace osu.Game.Rulesets.Mania.UI public void AddColumn(Column c) { c.VisibleTimeRange.BindTo(VisibleTimeRange); + topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); - columns.Add(c); + columnFlow.Add(c); AddNested(c); - Margin = new MarginPadding - { - Left = columns.Count * HIT_TARGET_POSITION / 2, - Right = columns.Count * HIT_TARGET_POSITION / 2, - }; + c.IsSpecial = isSpecialColumn(Columns.Count - 1); + + if (c.IsSpecial) + c.Action = ManiaAction.Special1 + stageIndex; + else + c.Action = ManiaAction.Key1 + firstColumnIndex + Columns.Count - 1; } /// @@ -156,25 +168,25 @@ namespace osu.Game.Rulesets.Mania.UI { default: case SpecialColumnPosition.Normal: - return columns.Count % 2 == 1 && column == columns.Count / 2; + return definition.Columns % 2 == 1 && column == definition.Columns / 2; case SpecialColumnPosition.Left: return column == 0; case SpecialColumnPosition.Right: - return column == columns.Count - 1; + return column == definition.Columns - 1; } } public override void Add(DrawableHitObject h) { - int columnIndex = ((ManiaHitObject)h.HitObject).Column - ColumnStartIndex; + int columnIndex = ((ManiaHitObject)h.HitObject).Column - firstColumnIndex; Columns.ElementAt(columnIndex).Add(h); } public void AddJudgement(DrawableHitObject judgedObject, Judgement judgement) { var maniaObject = (ManiaHitObject)judgedObject.HitObject; - int columnIndex = maniaObject.Column - ColumnStartIndex; - columns[columnIndex].OnJudgement(judgedObject, judgement); + int columnIndex = maniaObject.Column - firstColumnIndex; + Columns[columnIndex].OnJudgement(judgedObject, judgement); judgements.Clear(); judgements.Add(new DrawableManiaJudgement(judgement) @@ -187,11 +199,6 @@ namespace osu.Game.Rulesets.Mania.UI [BackgroundDependencyLoader] private void load(OsuColour colours) { - for (int i = 0; i < columns.Count; i++) - { - columns[i].IsSpecial = isSpecialColumn(i); - } - normalColumnColours = new List { colours.RedDark, @@ -221,12 +228,11 @@ namespace osu.Game.Rulesets.Mania.UI } } - protected override void Update() { // Due to masking differences, it is not possible to get the width of the columns container automatically // While masking on effectively only the Y-axis, so we need to set the width of the bar line container manually - content.Width = columns.Width; + content.Width = columnFlow.Width; } } } From b9909ed1cfd3ba43ba9daf8daf2b6c5809fb41fd Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 18:20:43 +0900 Subject: [PATCH 38/63] Refactor addition of hitobjects --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 41 +++++--------------- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 8 +++- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 26e4f5115f..ed973d6962 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -9,9 +9,8 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Configuration; -using osu.Game.Rulesets.Judgements; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Game.Rulesets.Mania.Beatmaps; -using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI.Scrolling; @@ -36,18 +35,18 @@ namespace osu.Game.Rulesets.Mania.UI public List Columns => stages.SelectMany(x => x.Columns).ToList(); - public ManiaPlayfield(List stageDefinition) + public ManiaPlayfield(List stageDefinitions) : base(ScrollingDirection.Up) { - if (stageDefinition == null) - throw new ArgumentNullException(nameof(stageDefinition)); + if (stageDefinitions == null) + throw new ArgumentNullException(nameof(stageDefinitions)); - if (stageDefinition.Count <= 0) + if (stageDefinitions.Count <= 0) throw new ArgumentException("Can't have zero or fewer stages."); Inverted.Value = true; - var stageSpacing = 300 / stageDefinition.Count; + var stageSpacing = 300 / stageDefinitions.Count; InternalChildren = new Drawable[] { @@ -63,9 +62,9 @@ namespace osu.Game.Rulesets.Mania.UI }; int firstColumnIndex = 0; - for (int i = 0; i < stageDefinition.Count; i++) + for (int i = 0; i < stageDefinitions.Count; i++) { - var newStage = new ManiaStage(i, firstColumnIndex, stageDefinition[i]); + var newStage = new ManiaStage(i, firstColumnIndex, stageDefinitions[i]); newStage.SpecialColumn.BindTo(SpecialColumnPosition); newStage.VisibleTimeRange.BindTo(VisibleTimeRange); newStage.Inverted.BindTo(Inverted); @@ -77,27 +76,9 @@ namespace osu.Game.Rulesets.Mania.UI } } - public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) - { - var maniaObject = (ManiaHitObject)judgedObject.HitObject; - int column = maniaObject.Column; - getStageByColumn(column).AddJudgement(judgedObject, judgement); - } + public override void Add(DrawableHitObject h) => getStageByColumn(((ManiaHitObject)h.HitObject).Column).Add(h); - public override void Add(DrawableHitObject h) - { - int column = ((ManiaHitObject)h.HitObject).Column; - var stage = getStageByColumn(column); - stage.Add(h); - } - - public void Add(BarLine barline) - { - foreach (var single in stages) - { - single.HitObjects.Add(new DrawableBarLine(barline)); - } - } + public void Add(BarLine barline) => stages.ForEach(s => s.Add(barline)); private ManiaStage getStageByColumn(int column) { @@ -106,9 +87,7 @@ namespace osu.Game.Rulesets.Mania.UI { sum = sum + stage.Columns.Count; if (sum > column) - { return stage; - } } return null; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index f0a9f92215..e0c1658054 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -13,6 +13,7 @@ using osu.Game.Graphics; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI.Scrolling; using OpenTK; @@ -178,11 +179,14 @@ namespace osu.Game.Rulesets.Mania.UI public override void Add(DrawableHitObject h) { - int columnIndex = ((ManiaHitObject)h.HitObject).Column - firstColumnIndex; + var maniaObject = (ManiaHitObject)h.HitObject; + int columnIndex = maniaObject.Column - firstColumnIndex; Columns.ElementAt(columnIndex).Add(h); } - public void AddJudgement(DrawableHitObject judgedObject, Judgement judgement) + public void Add(BarLine barline) => base.Add(new DrawableBarLine(barline)); + + public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { var maniaObject = (ManiaHitObject)judgedObject.HitObject; int columnIndex = maniaObject.Column - firstColumnIndex; From 561786c5ef4cf3277bc1bfa0e2c72020cd0e9405 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 19:25:14 +0900 Subject: [PATCH 39/63] Generate the correct default bindings for variants --- osu.Game/Input/Bindings/DatabasedKeyBindingInputManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Input/Bindings/DatabasedKeyBindingInputManager.cs b/osu.Game/Input/Bindings/DatabasedKeyBindingInputManager.cs index 0bb7417088..4632c6c5f0 100644 --- a/osu.Game/Input/Bindings/DatabasedKeyBindingInputManager.cs +++ b/osu.Game/Input/Bindings/DatabasedKeyBindingInputManager.cs @@ -23,7 +23,7 @@ namespace osu.Game.Input.Bindings private KeyBindingStore store; - public override IEnumerable DefaultKeyBindings => ruleset.CreateInstance().GetDefaultKeyBindings(); + public override IEnumerable DefaultKeyBindings => ruleset.CreateInstance().GetDefaultKeyBindings(variant ?? 0); /// /// Create a new instance. From 8a7892b66a14cc0122ada526b9bf22a205fc323a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 19:29:51 +0900 Subject: [PATCH 40/63] 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 @@ + From 28586317ddf424f7ca14f74357f314548bc81172 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 19:44:42 +0900 Subject: [PATCH 41/63] Give stages a size again --- osu.Game.Rulesets.Mania/UI/Column.cs | 1 + osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 1 + osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 6 +++++- osu.Game/Rulesets/UI/Playfield.cs | 10 +--------- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index c2dd86d35d..f2eb2ef326 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -47,6 +47,7 @@ namespace osu.Game.Rulesets.Mania.UI public Column() : base(ScrollingDirection.Up) { + RelativeSizeAxes = Axes.Y; Width = column_width; InternalChildren = new Drawable[] diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index ed973d6962..9a148b6770 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -55,6 +55,7 @@ namespace osu.Game.Rulesets.Mania.UI Name = "Stages", Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, Anchor = Anchor.Centre, Origin = Anchor.Centre, Spacing = new Vector2(stageSpacing), diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index e0c1658054..2d9e7157da 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -60,9 +60,13 @@ namespace osu.Game.Rulesets.Mania.UI this.firstColumnIndex = firstColumnIndex; this.definition = definition; - Name = "Playfield elements"; + Name = "Stage"; + Anchor = Anchor.Centre; Origin = Anchor.Centre; + RelativeSizeAxes = Axes.Y; + AutoSizeAxes = Axes.X; + InternalChildren = new Drawable[] { new Container diff --git a/osu.Game/Rulesets/UI/Playfield.cs b/osu.Game/Rulesets/UI/Playfield.cs index 25a7adb5a7..2e2fb91b12 100644 --- a/osu.Game/Rulesets/UI/Playfield.cs +++ b/osu.Game/Rulesets/UI/Playfield.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; @@ -34,8 +33,7 @@ namespace osu.Game.Rulesets.UI /// Whether we want our internal coordinate system to be scaled to a specified width. protected Playfield(float? customWidth = null) { - // Default height since we force relative size axes - Size = Vector2.One; + RelativeSizeAxes = Axes.Both; AddInternal(ScaledContent = new ScaledContainer { @@ -60,12 +58,6 @@ namespace osu.Game.Rulesets.UI Add(HitObjects); } - public override Axes RelativeSizeAxes - { - get { return Axes.Both; } - set { throw new InvalidOperationException($@"{nameof(Playfield)}'s {nameof(RelativeSizeAxes)} should never be changed from {Axes.Both}"); } - } - /// /// Performs post-processing tasks (if any) after all DrawableHitObjects are loaded into this Playfield. /// From 39b6425c3e7923730fd08fa09b81fd1148654aa6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 15 Jan 2018 19:55:15 +0900 Subject: [PATCH 42/63] Use a grid container to position the stages Should be more flexible in the future + provides a more dual-stage feel. --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 27 +++++--------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 9a148b6770..ba4909615d 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -3,13 +3,11 @@ using osu.Framework.Graphics; using osu.Game.Rulesets.Mania.Objects; -using OpenTK; using osu.Framework.Graphics.Containers; using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Configuration; -using osu.Framework.Extensions.IEnumerableExtensions; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI.Scrolling; @@ -18,11 +16,6 @@ namespace osu.Game.Rulesets.Mania.UI { public class ManiaPlayfield : ScrollingPlayfield { - /// - /// s contained by this . - /// - private readonly FillFlowContainer stages; - /// /// Whether this playfield should be inverted. This flips everything inside the playfield. /// @@ -34,6 +27,7 @@ namespace osu.Game.Rulesets.Mania.UI public Bindable SpecialColumnPosition = new Bindable(); public List Columns => stages.SelectMany(x => x.Columns).ToList(); + private readonly List stages = new List(); public ManiaPlayfield(List stageDefinitions) : base(ScrollingDirection.Up) @@ -46,20 +40,11 @@ namespace osu.Game.Rulesets.Mania.UI Inverted.Value = true; - var stageSpacing = 300 / stageDefinitions.Count; - - InternalChildren = new Drawable[] + GridContainer playfieldGrid; + InternalChild = playfieldGrid = new GridContainer { - stages = new FillFlowContainer - { - Name = "Stages", - Direction = FillDirection.Horizontal, - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Spacing = new Vector2(stageSpacing), - } + RelativeSizeAxes = Axes.Both, + Content = new[] { new Drawable[stageDefinitions.Count] } }; int firstColumnIndex = 0; @@ -70,6 +55,8 @@ namespace osu.Game.Rulesets.Mania.UI newStage.VisibleTimeRange.BindTo(VisibleTimeRange); newStage.Inverted.BindTo(Inverted); + playfieldGrid.Content[0][i] = newStage; + stages.Add(newStage); AddNested(newStage); From 6c67f96fdbdce24a75cada1d02c4c14ef2677fca Mon Sep 17 00:00:00 2001 From: "ANDY840119-PC\\andy840119" Date: Thu, 18 Jan 2018 02:01:01 +0900 Subject: [PATCH 43/63] fix ci error --- osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs | 2 +- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 4 ---- osu.Game/Rulesets/UI/Playfield.cs | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 82036d1e82..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"; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 15de119342..115a3cadb7 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -193,10 +193,6 @@ namespace osu.Game.Rulesets.Mania.UI internal void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { - var maniaObject = (ManiaHitObject)judgedObject.HitObject; - int columnIndex = maniaObject.Column - firstColumnIndex; - //Columns[columnIndex].OnJudgement(judgedObject, judgement); - judgements.Clear(); judgements.Add(new DrawableManiaJudgement(judgement) { diff --git a/osu.Game/Rulesets/UI/Playfield.cs b/osu.Game/Rulesets/UI/Playfield.cs index 25da00362e..a7fed7059b 100644 --- a/osu.Game/Rulesets/UI/Playfield.cs +++ b/osu.Game/Rulesets/UI/Playfield.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; From 293023d99a0f3aa4c228a2144a5793eb3c829e64 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 14:38:41 +0900 Subject: [PATCH 44/63] Fix keybinding offsets due to special keys --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 12 ++++++----- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 4 +++- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 22 ++++++++++---------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index befa657715..64f02f45ec 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -155,7 +155,7 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.Space, SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1, - }.GenerateKeyBindingsFor(variant); + }.GenerateKeyBindingsFor(variant, out _); case ManiaKeyBindingVariantType.Coop: case ManiaKeyBindingVariantType.Versus: getMultiVariantKeyCounts(variant, out int p1K, out int p2K); @@ -179,7 +179,7 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.Tilde, SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1 - }.GenerateKeyBindingsFor(p1K); + }.GenerateKeyBindingsFor(p1K, out var nextNormal); var player2Bindings = new VariantMappingGenerator { @@ -199,8 +199,8 @@ namespace osu.Game.Rulesets.Mania }, SpecialKey = InputKey.BackSlash, SpecialAction = ManiaAction.Special2, - NormalActionStart = ManiaAction.Key1 + p1K - }.GenerateKeyBindingsFor(p2K); + NormalActionStart = nextNormal + }.GenerateKeyBindingsFor(p2K, out _); return player1Bindings.Concat(player2Bindings); } @@ -300,8 +300,9 @@ namespace osu.Game.Rulesets.Mania /// Generates a list of s for a specific number of columns. /// /// The number of columns that need to be bound. + /// The next to use for normal columns. /// The keybindings. - public IEnumerable GenerateKeyBindingsFor(int columns) + public IEnumerable GenerateKeyBindingsFor(int columns, out ManiaAction nextNormalAction) { ManiaAction currentNormalAction = NormalActionStart; @@ -316,6 +317,7 @@ namespace osu.Game.Rulesets.Mania if (columns % 2 == 1) bindings.Add(new KeyBinding(SpecialKey, SpecialAction)); + nextNormalAction = currentNormalAction; return bindings; } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 101586f3e4..e787b70797 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -48,10 +48,12 @@ namespace osu.Game.Rulesets.Mania.UI Content = new[] { new Drawable[stageDefinitions.Count] } }; + var normalColumnAction = ManiaAction.Key1; + var specialColumnAction = ManiaAction.Special1; int firstColumnIndex = 0; for (int i = 0; i < stageDefinitions.Count; i++) { - var newStage = new ManiaStage(i, firstColumnIndex, stageDefinitions[i]); + var newStage = new ManiaStage(firstColumnIndex, stageDefinitions[i], ref normalColumnAction, ref specialColumnAction); newStage.SpecialColumn.BindTo(SpecialColumnPosition); newStage.VisibleTimeRange.BindTo(VisibleTimeRange); newStage.Inverted.BindTo(Inverted); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 115a3cadb7..ec21c72285 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -49,14 +49,12 @@ namespace osu.Game.Rulesets.Mania.UI private List normalColumnColours = new List(); private Color4 specialColumnColour; - private readonly int stageIndex; private readonly int firstColumnIndex; private readonly StageDefinition definition; - public ManiaStage(int stageIndex, int firstColumnIndex, StageDefinition definition) + public ManiaStage(int firstColumnIndex, StageDefinition definition, ref ManiaAction normalColumnStartAction, ref ManiaAction specialColumnStartAction) : base(ScrollingDirection.Up) { - this.stageIndex = stageIndex; this.firstColumnIndex = firstColumnIndex; this.definition = definition; @@ -134,7 +132,16 @@ namespace osu.Game.Rulesets.Mania.UI }; for (int i = 0; i < definition.Columns; i++) - AddColumn(new Column()); + { + var isSpecial = isSpecialColumn(i); + var column = new Column + { + IsSpecial = isSpecial, + Action = isSpecial ? specialColumnStartAction++ : normalColumnStartAction++ + }; + + AddColumn(column); + } Inverted.ValueChanged += invertedChanged; Inverted.TriggerChange(); @@ -153,13 +160,6 @@ namespace osu.Game.Rulesets.Mania.UI topLevelContainer.Add(c.TopLevelContainer.CreateProxy()); columnFlow.Add(c); AddNested(c); - - c.IsSpecial = isSpecialColumn(Columns.Count - 1); - - if (c.IsSpecial) - c.Action = ManiaAction.Special1 + stageIndex; - else - c.Action = ManiaAction.Key1 + firstColumnIndex + Columns.Count - 1; } /// From 3b47c0fea0cd97f2d9a0fd796bd1f2cc3b3fe677 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 14:54:47 +0900 Subject: [PATCH 45/63] Remove versus-mode variant --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 59 +++++++------------------ 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 64f02f45ec..60f1b207c5 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -127,7 +127,6 @@ namespace osu.Game.Rulesets.Mania yield return (int)ManiaKeyBindingVariantType.Solo + i; for (int i = 2; i <= 18; i++) yield return (int)ManiaKeyBindingVariantType.Coop + i; - // Todo: Versus mode } } @@ -157,10 +156,9 @@ namespace osu.Game.Rulesets.Mania NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant, out _); case ManiaKeyBindingVariantType.Coop: - case ManiaKeyBindingVariantType.Versus: - getMultiVariantKeyCounts(variant, out int p1K, out int p2K); + getDualStageKeyCounts(variant, out int s1K, out int s2K); - var player1Bindings = new VariantMappingGenerator + var stage1Bindings = new VariantMappingGenerator { LeftKeys = new[] { @@ -179,9 +177,9 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.Tilde, SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1 - }.GenerateKeyBindingsFor(p1K, out var nextNormal); + }.GenerateKeyBindingsFor(s1K, out var nextNormal); - var player2Bindings = new VariantMappingGenerator + var stage2Bindings = new VariantMappingGenerator { LeftKeys = new[] { @@ -200,9 +198,9 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.BackSlash, SpecialAction = ManiaAction.Special2, NormalActionStart = nextNormal - }.GenerateKeyBindingsFor(p2K, out _); + }.GenerateKeyBindingsFor(s2K, out _); - return player1Bindings.Concat(player2Bindings); + return stage1Bindings.Concat(stage2Bindings); } return new KeyBinding[0]; @@ -213,49 +211,26 @@ namespace osu.Game.Rulesets.Mania switch (getVariantType(variant)) { default: - case ManiaKeyBindingVariantType.Solo: return $"{variant}K"; case ManiaKeyBindingVariantType.Coop: { - getMultiVariantKeyCounts(variant, out int p1K, out int p2K); - return $"{p1K}K + {p2K}K"; - } - case ManiaKeyBindingVariantType.Versus: - { - getMultiVariantKeyCounts(variant, out int p1K, out int p2K); - return $"{p1K}K Vs. {p2K}K"; + getDualStageKeyCounts(variant, out int s1K, out int s2K); + return $"{s1K}K + {s2K}K"; } } } /// - /// Finds the number of keys for each player in or . + /// Finds the number of keys for each stage in a variant. /// /// The variant. - /// The number of keys for player 1. - /// The number of keys for player 2. - private void getMultiVariantKeyCounts(int variant, out int player1Keys, out int player2Keys) + /// The number of keys for the first stage. + /// The number of keys for the second stage. + private void getDualStageKeyCounts(int variant, out int stage1, out int stage2) { - player1Keys = 0; - player2Keys = 0; - - switch (getVariantType(variant)) - { - case ManiaKeyBindingVariantType.Coop: - { - int totalKeys = variant - (int)ManiaKeyBindingVariantType.Coop; - player1Keys = (int)Math.Ceiling(totalKeys / 2f); - player2Keys = (int)Math.Floor(totalKeys / 2f); - break; - } - case ManiaKeyBindingVariantType.Versus: - { - int totalKeys = variant - (int)ManiaKeyBindingVariantType.Versus; - player1Keys = totalKeys; - player2Keys = totalKeys; - break; - } - } + int totalKeys = variant - (int)ManiaKeyBindingVariantType.Coop; + stage1 = (int)Math.Ceiling(totalKeys / 2f); + stage2 = (int)Math.Floor(totalKeys / 2f); } /// @@ -332,9 +307,5 @@ namespace osu.Game.Rulesets.Mania /// Co-op play keybinding variant (multiple stages). /// Coop = 1000, - /// - /// Versus play keybinding variant (multiple stages). - /// - Versus = 10000 } } From 286b1bb81fcf62b99d434c82e925003289ff4e45 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 14:57:25 +0900 Subject: [PATCH 46/63] Solo -> Single, Coop -> Dual --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 25 +++++++++++-------- .../Mods/ManiaModKeyCoop.cs | 2 +- .../UI/ManiaRulesetContainer.cs | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 60f1b207c5..01e7d39897 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)ManiaKeyBindingVariantType.Solo + i; + yield return (int)ManiaKeyBindingVariantType.Single + i; for (int i = 2; i <= 18; i++) - yield return (int)ManiaKeyBindingVariantType.Coop + i; + yield return (int)ManiaKeyBindingVariantType.Dual + i; } } @@ -134,7 +134,7 @@ namespace osu.Game.Rulesets.Mania { switch (getVariantType(variant)) { - case ManiaKeyBindingVariantType.Solo: + case ManiaKeyBindingVariantType.Single: return new VariantMappingGenerator { LeftKeys = new[] @@ -155,7 +155,7 @@ namespace osu.Game.Rulesets.Mania SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant, out _); - case ManiaKeyBindingVariantType.Coop: + case ManiaKeyBindingVariantType.Dual: getDualStageKeyCounts(variant, out int s1K, out int s2K); var stage1Bindings = new VariantMappingGenerator @@ -212,7 +212,7 @@ namespace osu.Game.Rulesets.Mania { default: return $"{variant}K"; - case ManiaKeyBindingVariantType.Coop: + case ManiaKeyBindingVariantType.Dual: { getDualStageKeyCounts(variant, out int s1K, out int s2K); return $"{s1K}K + {s2K}K"; @@ -221,14 +221,14 @@ namespace osu.Game.Rulesets.Mania } /// - /// Finds the number of keys for each stage in a variant. + /// Finds the number of keys for each stage in a variant. /// /// The variant. /// The number of keys for the first stage. /// The number of keys for the second stage. private void getDualStageKeyCounts(int variant, out int stage1, out int stage2) { - int totalKeys = variant - (int)ManiaKeyBindingVariantType.Coop; + int totalKeys = variant - (int)ManiaKeyBindingVariantType.Dual; stage1 = (int)Math.Ceiling(totalKeys / 2f); stage2 = (int)Math.Floor(totalKeys / 2f); } @@ -300,12 +300,15 @@ namespace osu.Game.Rulesets.Mania public enum ManiaKeyBindingVariantType { /// - /// Solo play keybinding variant (single stage). + /// A single stage. + /// Number of columns in this stage lies at (item - Single). /// - Solo = 0, + Single = 0, /// - /// Co-op play keybinding variant (multiple stages). + /// A split stage. + /// Overall number of columns lies at (item - Dual), further computation is required for + /// number of columns in each individual stage. /// - Coop = 1000, + Dual = 1000, } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 382eea589c..7ce220ce4f 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -45,6 +45,6 @@ namespace osu.Game.Rulesets.Mania.Mods mrc.Beatmap.Stages = newDefinitions; } - public ManiaKeyBindingVariantType Variant => ManiaKeyBindingVariantType.Coop; + public ManiaKeyBindingVariantType Variant => ManiaKeyBindingVariantType.Dual; } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index db881c5ba2..45e840d5e1 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -79,7 +79,7 @@ namespace osu.Game.Rulesets.Mania.UI public override PassThroughInputManager CreateInputManager() { - var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? ManiaKeyBindingVariantType.Solo; + var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? ManiaKeyBindingVariantType.Single; return new ManiaInputManager(Ruleset.RulesetInfo, (int)variantType + Beatmap.TotalColumns); } From 2674859b54ac7f50bf6185f3d0594f42b71a3d03 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 14:59:17 +0900 Subject: [PATCH 47/63] ManiaKeyBindingVariantType -> PlayfieldType --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 24 +++++++++---------- .../Mods/IKeyBindingMod.cs | 2 +- .../Mods/ManiaModKeyCoop.cs | 2 +- .../UI/ManiaRulesetContainer.cs | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 01e7d39897..f0feae67f9 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)ManiaKeyBindingVariantType.Single + i; + yield return (int)PlayfieldType.Single + i; for (int i = 2; i <= 18; i++) - yield return (int)ManiaKeyBindingVariantType.Dual + i; + yield return (int)PlayfieldType.Dual + i; } } @@ -134,7 +134,7 @@ namespace osu.Game.Rulesets.Mania { switch (getVariantType(variant)) { - case ManiaKeyBindingVariantType.Single: + case PlayfieldType.Single: return new VariantMappingGenerator { LeftKeys = new[] @@ -155,7 +155,7 @@ namespace osu.Game.Rulesets.Mania SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant, out _); - case ManiaKeyBindingVariantType.Dual: + case PlayfieldType.Dual: getDualStageKeyCounts(variant, out int s1K, out int s2K); var stage1Bindings = new VariantMappingGenerator @@ -212,7 +212,7 @@ namespace osu.Game.Rulesets.Mania { default: return $"{variant}K"; - case ManiaKeyBindingVariantType.Dual: + case PlayfieldType.Dual: { getDualStageKeyCounts(variant, out int s1K, out int s2K); return $"{s1K}K + {s2K}K"; @@ -221,26 +221,26 @@ namespace osu.Game.Rulesets.Mania } /// - /// Finds the number of keys for each stage in a variant. + /// Finds the number of keys for each stage in a variant. /// /// The variant. /// The number of keys for the first stage. /// The number of keys for the second stage. private void getDualStageKeyCounts(int variant, out int stage1, out int stage2) { - int totalKeys = variant - (int)ManiaKeyBindingVariantType.Dual; + int totalKeys = variant - (int)PlayfieldType.Dual; stage1 = (int)Math.Ceiling(totalKeys / 2f); stage2 = (int)Math.Floor(totalKeys / 2f); } /// - /// Finds the that corresponds to a variant value. + /// Finds the that corresponds to a variant value. /// /// The variant value. - /// The that corresponds to . - private ManiaKeyBindingVariantType getVariantType(int variant) + /// The that corresponds to . + private PlayfieldType getVariantType(int variant) { - return (ManiaKeyBindingVariantType)Enum.GetValues(typeof(ManiaKeyBindingVariantType)).Cast().OrderByDescending(i => i).First(v => variant >= v); + return (PlayfieldType)Enum.GetValues(typeof(PlayfieldType)).Cast().OrderByDescending(i => i).First(v => variant >= v); } } @@ -297,7 +297,7 @@ namespace osu.Game.Rulesets.Mania } } - public enum ManiaKeyBindingVariantType + public enum PlayfieldType { /// /// A single stage. diff --git a/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs b/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs index 585db9e340..0eeacc7ce4 100644 --- a/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs +++ b/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs @@ -8,6 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods /// /// The keybinding variant which this requires. /// - ManiaKeyBindingVariantType Variant { get; } + PlayfieldType Variant { get; } } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 7ce220ce4f..2fd81b6e40 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs @@ -45,6 +45,6 @@ namespace osu.Game.Rulesets.Mania.Mods mrc.Beatmap.Stages = newDefinitions; } - public ManiaKeyBindingVariantType Variant => ManiaKeyBindingVariantType.Dual; + public PlayfieldType Variant => PlayfieldType.Dual; } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 45e840d5e1..6e24a266a5 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -79,7 +79,7 @@ namespace osu.Game.Rulesets.Mania.UI public override PassThroughInputManager CreateInputManager() { - var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? ManiaKeyBindingVariantType.Single; + var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? PlayfieldType.Single; return new ManiaInputManager(Ruleset.RulesetInfo, (int)variantType + Beatmap.TotalColumns); } From 65a2e09593d9210b8aadd480372c3a646da6028e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:03:05 +0900 Subject: [PATCH 48/63] Privatise VariantMappingGenerator to ManiaRuleset --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 90 ++++++++++++------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index f0feae67f9..a0c79467d0 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -242,58 +242,58 @@ namespace osu.Game.Rulesets.Mania { return (PlayfieldType)Enum.GetValues(typeof(PlayfieldType)).Cast().OrderByDescending(i => i).First(v => variant >= v); } - } - public class VariantMappingGenerator - { - /// - /// All the s available to the left hand. - /// - public InputKey[] LeftKeys; - - /// - /// All the s available to the right hand. - /// - public InputKey[] RightKeys; - - /// - /// The for the special key. - /// - public InputKey SpecialKey; - - /// - /// The at which the normal columns should begin. - /// - public ManiaAction NormalActionStart; - - /// - /// The for the special column. - /// - public ManiaAction SpecialAction; - - /// - /// Generates a list of s for a specific number of columns. - /// - /// The number of columns that need to be bound. - /// The next to use for normal columns. - /// The keybindings. - public IEnumerable GenerateKeyBindingsFor(int columns, out ManiaAction nextNormalAction) + private class VariantMappingGenerator { - ManiaAction currentNormalAction = NormalActionStart; + /// + /// All the s available to the left hand. + /// + public InputKey[] LeftKeys; - var bindings = new List(); + /// + /// All the s available to the right hand. + /// + public InputKey[] RightKeys; - for (int i = LeftKeys.Length - columns / 2; i < LeftKeys.Length; i++) - bindings.Add(new KeyBinding(LeftKeys[i], currentNormalAction++)); + /// + /// The for the special key. + /// + public InputKey SpecialKey; - for (int i = 0; i < columns / 2; i++) - bindings.Add(new KeyBinding(RightKeys[i], currentNormalAction++)); + /// + /// The at which the normal columns should begin. + /// + public ManiaAction NormalActionStart; - if (columns % 2 == 1) - bindings.Add(new KeyBinding(SpecialKey, SpecialAction)); + /// + /// The for the special column. + /// + public ManiaAction SpecialAction; - nextNormalAction = currentNormalAction; - return bindings; + /// + /// Generates a list of s for a specific number of columns. + /// + /// The number of columns that need to be bound. + /// The next to use for normal columns. + /// The keybindings. + public IEnumerable GenerateKeyBindingsFor(int columns, out ManiaAction nextNormalAction) + { + ManiaAction currentNormalAction = NormalActionStart; + + var bindings = new List(); + + for (int i = LeftKeys.Length - columns / 2; i < LeftKeys.Length; i++) + bindings.Add(new KeyBinding(LeftKeys[i], currentNormalAction++)); + + for (int i = 0; i < columns / 2; i++) + bindings.Add(new KeyBinding(RightKeys[i], currentNormalAction++)); + + if (columns % 2 == 1) + bindings.Add(new KeyBinding(SpecialKey, SpecialAction)); + + nextNormalAction = currentNormalAction; + return bindings; + } } } From 583aa9922fd96043d9735f917a6537ffc5f0138f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:07:14 +0900 Subject: [PATCH 49/63] IKeyBindingMod -> IPlayfieldTypeMod --- .../Mods/{IKeyBindingMod.cs => IPlayfieldTypeMod.cs} | 8 +++++--- osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs | 4 ++-- osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs | 2 +- osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) rename osu.Game.Rulesets.Mania/Mods/{IKeyBindingMod.cs => IPlayfieldTypeMod.cs} (51%) diff --git a/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs b/osu.Game.Rulesets.Mania/Mods/IPlayfieldTypeMod.cs similarity index 51% rename from osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs rename to osu.Game.Rulesets.Mania/Mods/IPlayfieldTypeMod.cs index 0eeacc7ce4..93d98b5d83 100644 --- a/osu.Game.Rulesets.Mania/Mods/IKeyBindingMod.cs +++ b/osu.Game.Rulesets.Mania/Mods/IPlayfieldTypeMod.cs @@ -1,13 +1,15 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Rulesets.Mods; + namespace osu.Game.Rulesets.Mania.Mods { - public interface IKeyBindingMod + public interface IPlayfieldTypeMod : IApplicableMod { /// - /// The keybinding variant which this requires. + /// The which this requires. /// - PlayfieldType Variant { get; } + PlayfieldType PlayfieldType { get; } } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs index 2fd81b6e40..bc7092a871 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, IKeyBindingMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer + public class ManiaModKeyCoop : Mod, IPlayfieldTypeMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer { public override string Name => "KeyCoop"; public override string ShortenedName => "2P"; @@ -45,6 +45,6 @@ namespace osu.Game.Rulesets.Mania.Mods mrc.Beatmap.Stages = newDefinitions; } - public PlayfieldType Variant => PlayfieldType.Dual; + public PlayfieldType PlayfieldType => PlayfieldType.Dual; } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 6e24a266a5..c438fe1abc 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -79,7 +79,7 @@ namespace osu.Game.Rulesets.Mania.UI public override PassThroughInputManager CreateInputManager() { - var variantType = Mods.OfType().FirstOrDefault()?.Variant ?? PlayfieldType.Single; + var variantType = Mods.OfType().FirstOrDefault()?.PlayfieldType ?? PlayfieldType.Single; return new ManiaInputManager(Ruleset.RulesetInfo, (int)variantType + Beatmap.TotalColumns); } diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index 82202df923..f7b5f35221 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -64,7 +64,7 @@ - + From 77c4da5f0fdfd98ec54f17f600cb2eda9f4f3769 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:11:15 +0900 Subject: [PATCH 50/63] KeyCoop -> DualStages --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- .../Mods/{ManiaModKeyCoop.cs => ManiaModDualStages.cs} | 8 ++++---- osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) rename osu.Game.Rulesets.Mania/Mods/{ManiaModKeyCoop.cs => ManiaModDualStages.cs} (80%) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index a0c79467d0..000d8e89bf 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -88,7 +88,7 @@ namespace osu.Game.Rulesets.Mania }, }, new ManiaModRandom(), - new ManiaModKeyCoop(), + new ManiaModDualStages(), new MultiMod { Mods = new Mod[] diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs similarity index 80% rename from osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs rename to osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs index bc7092a871..c591da1274 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKeyCoop.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs @@ -12,11 +12,11 @@ using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModKeyCoop : Mod, IPlayfieldTypeMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer + public class ManiaModDualStages : Mod, IPlayfieldTypeMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer { - public override string Name => "KeyCoop"; - public override string ShortenedName => "2P"; - public override string Description => @"Double the key amount, double the fun!"; + public override string Name => "Dual Stages"; + public override string ShortenedName => "DS"; + public override string Description => @"Double the stages, double the fun!"; public override double ScoreMultiplier => 1; public override bool Ranked => true; diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index f7b5f35221..6f367a0798 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -84,7 +84,7 @@ - + From 17d75b349d8807b1468576fd113a7378f1f231b0 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:11:45 +0900 Subject: [PATCH 51/63] =?UTF-8?q?Dual=20stages=20is=20not=20ranked=20?= =?UTF-8?q?=E0=B2=A0=5F=E0=B2=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs index c591da1274..2611d1c6a2 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Mania.Mods public override string ShortenedName => "DS"; public override string Description => @"Double the stages, double the fun!"; public override double ScoreMultiplier => 1; - public override bool Ranked => true; + public override bool Ranked => false; public void ApplyToBeatmapConverter(BeatmapConverter beatmapConverter) { From eede8333ba30657dfcc4ae555c4da462f7e4399a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:18:11 +0900 Subject: [PATCH 52/63] getVariantType -> getPlayfieldType --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 000d8e89bf..dad9633a37 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -132,7 +132,7 @@ namespace osu.Game.Rulesets.Mania public override IEnumerable GetDefaultKeyBindings(int variant = 0) { - switch (getVariantType(variant)) + switch (getPlayfieldType(variant)) { case PlayfieldType.Single: return new VariantMappingGenerator @@ -208,7 +208,7 @@ namespace osu.Game.Rulesets.Mania public override string GetVariantName(int variant) { - switch (getVariantType(variant)) + switch (getPlayfieldType(variant)) { default: return $"{variant}K"; @@ -238,7 +238,7 @@ namespace osu.Game.Rulesets.Mania /// /// The variant value. /// The that corresponds to . - private PlayfieldType getVariantType(int variant) + private PlayfieldType getPlayfieldType(int variant) { return (PlayfieldType)Enum.GetValues(typeof(PlayfieldType)).Cast().OrderByDescending(i => i).First(v => variant >= v); } From 1350b68f15aab8af1e5f3856af3511fbab3ae7da Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:18:39 +0900 Subject: [PATCH 53/63] DualStages always doubles the column count in lazer --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 19 ++++++------------- .../Mods/ManiaModDualStages.cs | 5 ++--- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index dad9633a37..39f22b7672 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -156,7 +156,7 @@ namespace osu.Game.Rulesets.Mania NormalActionStart = ManiaAction.Key1, }.GenerateKeyBindingsFor(variant, out _); case PlayfieldType.Dual: - getDualStageKeyCounts(variant, out int s1K, out int s2K); + int keys = getDualStageKeyCount(variant); var stage1Bindings = new VariantMappingGenerator { @@ -177,7 +177,7 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.Tilde, SpecialAction = ManiaAction.Special1, NormalActionStart = ManiaAction.Key1 - }.GenerateKeyBindingsFor(s1K, out var nextNormal); + }.GenerateKeyBindingsFor(keys, out var nextNormal); var stage2Bindings = new VariantMappingGenerator { @@ -198,7 +198,7 @@ namespace osu.Game.Rulesets.Mania SpecialKey = InputKey.BackSlash, SpecialAction = ManiaAction.Special2, NormalActionStart = nextNormal - }.GenerateKeyBindingsFor(s2K, out _); + }.GenerateKeyBindingsFor(keys, out _); return stage1Bindings.Concat(stage2Bindings); } @@ -214,8 +214,8 @@ namespace osu.Game.Rulesets.Mania return $"{variant}K"; case PlayfieldType.Dual: { - getDualStageKeyCounts(variant, out int s1K, out int s2K); - return $"{s1K}K + {s2K}K"; + var keys = getDualStageKeyCount(variant); + return $"{keys}K + {keys}K"; } } } @@ -224,14 +224,7 @@ namespace osu.Game.Rulesets.Mania /// Finds the number of keys for each stage in a variant. /// /// The variant. - /// The number of keys for the first stage. - /// The number of keys for the second stage. - private void getDualStageKeyCounts(int variant, out int stage1, out int stage2) - { - int totalKeys = variant - (int)PlayfieldType.Dual; - stage1 = (int)Math.Ceiling(totalKeys / 2f); - stage2 = (int)Math.Floor(totalKeys / 2f); - } + private int getDualStageKeyCount(int variant) => (variant - (int)PlayfieldType.Dual) / 2; /// /// Finds the that corresponds to a variant value. diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs index 2611d1c6a2..1ba4ef9af1 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Beatmaps; @@ -38,8 +37,8 @@ namespace osu.Game.Rulesets.Mania.Mods var newDefinitions = new List(); foreach (var existing in mrc.Beatmap.Stages) { - newDefinitions.Add(new StageDefinition { Columns = (int)Math.Ceiling(existing.Columns / 2f) }); - newDefinitions.Add(new StageDefinition { Columns = (int)Math.Floor(existing.Columns / 2f) }); + newDefinitions.Add(new StageDefinition { Columns = existing.Columns / 2 }); + newDefinitions.Add(new StageDefinition { Columns = existing.Columns / 2 }); } mrc.Beatmap.Stages = newDefinitions; From ba58b25f010b65ac7a7842ceb64cf04cd548907f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:47:31 +0900 Subject: [PATCH 54/63] Fix showing too many keybindings --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 39f22b7672..051e7d0525 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -125,7 +125,7 @@ namespace osu.Game.Rulesets.Mania { for (int i = 1; i <= 9; i++) yield return (int)PlayfieldType.Single + i; - for (int i = 2; i <= 18; i++) + for (int i = 2; i <= 18; i += 2) yield return (int)PlayfieldType.Dual + i; } } From c1331cef1b7364a3ba42fb3e80f5f6a4cd6f49a6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 15:52:54 +0900 Subject: [PATCH 55/63] Disallow DualStages for non-converted beatmaps --- osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs | 4 ++++ osu.Game/Rulesets/UI/RulesetContainer.cs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs index 1ba4ef9af1..3330d87e88 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs @@ -34,6 +34,10 @@ namespace osu.Game.Rulesets.Mania.Mods { var mrc = (ManiaRulesetContainer)rulesetContainer; + // Although this can work, for now let's not allow keymods for mania-specific beatmaps + if (mrc.IsForCurrentRuleset) + return; + var newDefinitions = new List(); foreach (var existing in mrc.Beatmap.Stages) { diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index bb4466208b..375af75347 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -154,7 +154,7 @@ namespace osu.Game.Rulesets.UI /// /// Whether the specified beatmap is assumed to be specific to the current ruleset. /// - protected readonly bool IsForCurrentRuleset; + public readonly bool IsForCurrentRuleset; public override ScoreProcessor CreateScoreProcessor() => new ScoreProcessor(this); From 0ef6384de00b6a405ea329b07a05301ce7261780 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:11:06 +0900 Subject: [PATCH 56/63] Fix hitexplosions not working in the testcase --- osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index d021202f36..2e6cd9208b 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -92,6 +92,7 @@ namespace osu.Game.Rulesets.Mania.Tests }; playfield.OnJudgement(note, new ManiaJudgement { Result = HitResult.Perfect }); + playfield.Columns[col].OnJudgement(note, new ManiaJudgement { Result = HitResult.Perfect }); }); } From 3d36fd3676845e2c057c67f4993257bd2984665f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:11:26 +0900 Subject: [PATCH 57/63] Update xmldoc to be more descriptive of single/dual stages --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 051e7d0525..3bfb4d3e44 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -293,12 +293,12 @@ namespace osu.Game.Rulesets.Mania public enum PlayfieldType { /// - /// A single stage. + /// Columns are grouped into a single stage. /// Number of columns in this stage lies at (item - Single). /// Single = 0, /// - /// A split stage. + /// Columns are grouped into two stages. /// Overall number of columns lies at (item - Dual), further computation is required for /// number of columns in each individual stage. /// From 90d8ee8d36d39e26ccbb7e7a24efaa9188558b5b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:11:41 +0900 Subject: [PATCH 58/63] Fix stage background being too transparent This is the original colour for the background. Not sure why this was changed. --- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index ec21c72285..e6dd2d7d7a 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -87,7 +87,7 @@ namespace osu.Game.Rulesets.Mania.UI { Name = "Background", RelativeSizeAxes = Axes.Both, - Colour = new Color4(0, 0, 0, 0.8f) + Colour = Color4.Black }, columnFlow = new FillFlowContainer { From 351be4308f37657b7f80a1dc0013e17ef862b4a8 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:12:35 +0900 Subject: [PATCH 59/63] Oops, forgot to commit OnJudgement change --- osu.Game.Rulesets.Mania/UI/Column.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index ccbb5797db..882628642b 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -206,12 +206,12 @@ namespace osu.Game.Rulesets.Mania.UI { hitObject.Depth = (float)hitObject.HitObject.StartTime; hitObject.AccentColour = AccentColour; - hitObject.OnJudgement += onJudgement; + hitObject.OnJudgement += OnJudgement; HitObjects.Add(hitObject); } - private void onJudgement(DrawableHitObject judgedObject, Judgement judgement) + internal void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { if (!judgement.IsHit) return; From 8a8b3f25e77b912f480515933ea0e847c9d2dc3a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:12:45 +0900 Subject: [PATCH 60/63] SpecialColumn -> SpecialColumnPosition --- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 2 +- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index e787b70797..3c08b0ff34 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -54,7 +54,7 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < stageDefinitions.Count; i++) { var newStage = new ManiaStage(firstColumnIndex, stageDefinitions[i], ref normalColumnAction, ref specialColumnAction); - newStage.SpecialColumn.BindTo(SpecialColumnPosition); + newStage.SpecialColumnPosition.BindTo(SpecialColumnPosition); newStage.VisibleTimeRange.BindTo(VisibleTimeRange); newStage.Inverted.BindTo(Inverted); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index e6dd2d7d7a..776bd9e556 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Mania.UI /// public readonly Bindable Inverted = new Bindable(true); - public readonly Bindable SpecialColumn = new Bindable(); + public readonly Bindable SpecialColumnPosition = new Bindable(); public IReadOnlyList Columns => columnFlow.Children; private readonly FillFlowContainer columnFlow; @@ -169,14 +169,14 @@ namespace osu.Game.Rulesets.Mania.UI /// Whether the column is a special column. private bool isSpecialColumn(int column) { - switch (SpecialColumn.Value) + switch (SpecialColumnPosition.Value) { default: - case SpecialColumnPosition.Normal: + case UI.SpecialColumnPosition.Normal: return definition.Columns % 2 == 1 && column == definition.Columns / 2; - case SpecialColumnPosition.Left: + case UI.SpecialColumnPosition.Left: return column == 0; - case SpecialColumnPosition.Right: + case UI.SpecialColumnPosition.Right: return column == definition.Columns - 1; } } From 68a6323168da2502df8fe0585a1d40fba63ec8f0 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 22 Jan 2018 16:18:39 +0900 Subject: [PATCH 61/63] Remove SpecialColumnPosition for now This needs to be re-implemented in the future, perhaps in a way that allows it to be dynamically changed. --- .../Tests/TestCaseManiaPlayfield.cs | 29 ++++++++----------- osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs | 6 ---- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 16 +--------- .../UI/SpecialColumnPosition.cs | 21 -------------- .../osu.Game.Rulesets.Mania.csproj | 1 - 5 files changed, 13 insertions(+), 60 deletions(-) delete mode 100644 osu.Game.Rulesets.Mania/UI/SpecialColumnPosition.cs diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 2e6cd9208b..7d35ab2f4d 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -33,12 +33,10 @@ namespace osu.Game.Rulesets.Mania.Tests { var rng = new Random(1337); - AddStep("1 column", () => createPlayfield(1, SpecialColumnPosition.Normal)); - AddStep("4 columns", () => createPlayfield(4, SpecialColumnPosition.Normal)); - AddStep("Left special style", () => createPlayfield(4, SpecialColumnPosition.Left)); - AddStep("Right special style", () => createPlayfield(4, SpecialColumnPosition.Right)); - AddStep("5 columns", () => createPlayfield(5, SpecialColumnPosition.Normal)); - AddStep("8 columns", () => createPlayfield(8, SpecialColumnPosition.Normal)); + AddStep("1 column", () => createPlayfield(1)); + AddStep("4 columns", () => createPlayfield(4)); + AddStep("5 columns", () => createPlayfield(5)); + AddStep("8 columns", () => createPlayfield(8)); AddStep("4 + 4 columns", () => { var stages = new List @@ -46,7 +44,7 @@ namespace osu.Game.Rulesets.Mania.Tests new StageDefinition { Columns = 4 }, new StageDefinition { Columns = 4 }, }; - createPlayfield(stages, SpecialColumnPosition.Normal); + createPlayfield(stages); }); AddStep("2 + 4 + 2 columns", () => @@ -57,7 +55,7 @@ namespace osu.Game.Rulesets.Mania.Tests new StageDefinition { Columns = 4 }, new StageDefinition { Columns = 2 }, }; - createPlayfield(stages, SpecialColumnPosition.Normal); + createPlayfield(stages); }); AddStep("1 + 8 + 1 columns", () => @@ -68,12 +66,10 @@ namespace osu.Game.Rulesets.Mania.Tests new StageDefinition { Columns = 8 }, new StageDefinition { Columns = 1 }, }; - createPlayfield(stages, SpecialColumnPosition.Normal); + createPlayfield(stages); }); - AddStep("Left special style", () => createPlayfield(8, SpecialColumnPosition.Left)); - AddStep("Right special style", () => createPlayfield(8, SpecialColumnPosition.Right)); - AddStep("Reversed", () => createPlayfield(4, SpecialColumnPosition.Normal, true)); + AddStep("Reversed", () => createPlayfield(4, true)); AddStep("Notes with input", () => createPlayfieldWithNotes()); AddStep("Notes with input (reversed)", () => createPlayfieldWithNotes(true)); @@ -82,7 +78,7 @@ namespace osu.Game.Rulesets.Mania.Tests AddStep("Hit explosion", () => { - var playfield = createPlayfield(4, SpecialColumnPosition.Normal); + var playfield = createPlayfield(4); int col = rng.Next(0, 4); @@ -102,17 +98,17 @@ namespace osu.Game.Rulesets.Mania.Tests maniaRuleset = rulesets.GetRuleset(3); } - private ManiaPlayfield createPlayfield(int cols, SpecialColumnPosition specialPos, bool inverted = false) + private ManiaPlayfield createPlayfield(int cols, bool inverted = false) { var stages = new List { new StageDefinition { Columns = cols }, }; - return createPlayfield(stages, specialPos, inverted); + return createPlayfield(stages, inverted); } - private ManiaPlayfield createPlayfield(List stages, SpecialColumnPosition specialPos, bool inverted = false) + private ManiaPlayfield createPlayfield(List stages, bool inverted = false) { Clear(); @@ -127,7 +123,6 @@ namespace osu.Game.Rulesets.Mania.Tests Origin = Anchor.Centre, }); - playfield.SpecialColumnPosition.Value = specialPos; playfield.Inverted.Value = inverted; return playfield; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index 3c08b0ff34..c008e71819 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -22,11 +22,6 @@ namespace osu.Game.Rulesets.Mania.UI /// public readonly Bindable Inverted = new Bindable(true); - /// - /// The style to use for the special column. - /// - public Bindable SpecialColumnPosition = new Bindable(); - public List Columns => stages.SelectMany(x => x.Columns).ToList(); private readonly List stages = new List(); @@ -54,7 +49,6 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < stageDefinitions.Count; i++) { var newStage = new ManiaStage(firstColumnIndex, stageDefinitions[i], ref normalColumnAction, ref specialColumnAction); - newStage.SpecialColumnPosition.BindTo(SpecialColumnPosition); newStage.VisibleTimeRange.BindTo(VisibleTimeRange); newStage.Inverted.BindTo(Inverted); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 776bd9e556..ebd73d7dca 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -33,8 +33,6 @@ namespace osu.Game.Rulesets.Mania.UI /// public readonly Bindable Inverted = new Bindable(true); - public readonly Bindable SpecialColumnPosition = new Bindable(); - public IReadOnlyList Columns => columnFlow.Children; private readonly FillFlowContainer columnFlow; @@ -167,19 +165,7 @@ namespace osu.Game.Rulesets.Mania.UI /// /// The 0-based column index. /// Whether the column is a special column. - private bool isSpecialColumn(int column) - { - switch (SpecialColumnPosition.Value) - { - default: - case UI.SpecialColumnPosition.Normal: - return definition.Columns % 2 == 1 && column == definition.Columns / 2; - case UI.SpecialColumnPosition.Left: - return column == 0; - case UI.SpecialColumnPosition.Right: - return column == definition.Columns - 1; - } - } + private bool isSpecialColumn(int column) => definition.Columns % 2 == 1 && column == definition.Columns / 2; public override void Add(DrawableHitObject h) { diff --git a/osu.Game.Rulesets.Mania/UI/SpecialColumnPosition.cs b/osu.Game.Rulesets.Mania/UI/SpecialColumnPosition.cs deleted file mode 100644 index de017294e4..0000000000 --- a/osu.Game.Rulesets.Mania/UI/SpecialColumnPosition.cs +++ /dev/null @@ -1,21 +0,0 @@ -// 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.UI -{ - public enum SpecialColumnPosition - { - /// - /// The special column will lie in the center of the columns. - /// - Normal, - /// - /// The special column will lie to the left of the columns. - /// - Left, - /// - /// The special column will lie to the right of the columns. - /// - Right - } -} diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index 6f367a0798..c3c0089f14 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -122,7 +122,6 @@ - From 2bc67629b817221e086b729f02367a17474ad739 Mon Sep 17 00:00:00 2001 From: Dan Balasescu <1329837+smoogipoo@users.noreply.github.com> Date: Tue, 23 Jan 2018 10:03:34 +0900 Subject: [PATCH 62/63] Improve xmldoc + remove explicit Special2 value Special2 value is implicit at Special1 + 1 (2). --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index b5036806c6..417ca8510b 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -20,8 +20,12 @@ namespace osu.Game.Rulesets.Mania [Description("Special 1")] Special1 = 1, [Description("Special 2")] - Special2 = 2, + Special2, + /// + /// This offsets the start value of normal keys in-case we add more special keys + /// above at a later time, without breaking replays/configs. + /// [Description("Key 1")] Key1 = 1000, [Description("Key 2")] From 9b471dea33eb29ef6739ed006e43e286208d6dd9 Mon Sep 17 00:00:00 2001 From: Dan Balasescu <1329837+smoogipoo@users.noreply.github.com> Date: Tue, 23 Jan 2018 10:51:01 +0900 Subject: [PATCH 63/63] Back to max 10 special keys for now, change xmldoc to normal comment --- osu.Game.Rulesets.Mania/ManiaInputManager.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaInputManager.cs b/osu.Game.Rulesets.Mania/ManiaInputManager.cs index 417ca8510b..01e2821540 100644 --- a/osu.Game.Rulesets.Mania/ManiaInputManager.cs +++ b/osu.Game.Rulesets.Mania/ManiaInputManager.cs @@ -22,12 +22,10 @@ namespace osu.Game.Rulesets.Mania [Description("Special 2")] Special2, - /// - /// This offsets the start value of normal keys in-case we add more special keys - /// above at a later time, without breaking replays/configs. - /// + // This offsets the start value of normal keys in-case we add more special keys + // above at a later time, without breaking replays/configs. [Description("Key 1")] - Key1 = 1000, + Key1 = 10, [Description("Key 2")] Key2, [Description("Key 3")]