From ac9f0ccb48bd88e78e4e234340e60f8e6de145e5 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 13:51:40 +0900 Subject: [PATCH 01/25] Fix hit normals always being played, regardless of sound type. --- .../Objects/Legacy/HitObjectParser.cs | 82 ++++++++++--------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index c915e67ead..5031128a79 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -108,43 +108,8 @@ namespace osu.Game.Rulesets.Objects.Legacy result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture); var soundType = (LegacySoundType)int.Parse(split[4]); - - result.Samples.Add(new SampleInfo - { - Bank = normalSampleBank, - Name = SampleInfo.HIT_NORMAL, - Volume = sampleVolume - }); - - if ((soundType & LegacySoundType.Finish) > 0) - { - result.Samples.Add(new SampleInfo - { - Bank = addSampleBank, - Name = SampleInfo.HIT_FINISH, - Volume = sampleVolume - }); - } - - if ((soundType & LegacySoundType.Whistle) > 0) - { - result.Samples.Add(new SampleInfo - { - Bank = addSampleBank, - Name = SampleInfo.HIT_WHISTLE, - Volume = sampleVolume - }); - } - - if ((soundType & LegacySoundType.Clap) > 0) - { - result.Samples.Add(new SampleInfo - { - Bank = addSampleBank, - Name = SampleInfo.HIT_CLAP, - Volume = sampleVolume - }); - } + result.Samples = convertSoundType(soundType, normalSampleBank, addSampleBank); + result.Samples.ForEach(s => s.Volume = sampleVolume); return result; } @@ -202,6 +167,49 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The hit object. protected abstract HitObject CreateSpinner(Vector2 position, double endTime); + private List convertSoundType(LegacySoundType type, string normalSampleBank, string addSampleBank) + { + List soundTypes = new List(); + + if ((type & LegacySoundType.Normal) > 0) + { + soundTypes.Add(new SampleInfo + { + Bank = normalSampleBank, + Name = SampleInfo.HIT_NORMAL + }); + } + + if ((type & LegacySoundType.Finish) > 0) + { + soundTypes.Add(new SampleInfo + { + Bank = addSampleBank, + Name = SampleInfo.HIT_FINISH + }); + } + + if ((type & LegacySoundType.Whistle) > 0) + { + soundTypes.Add(new SampleInfo + { + Bank = addSampleBank, + Name = SampleInfo.HIT_WHISTLE + }); + } + + if ((type & LegacySoundType.Clap) > 0) + { + soundTypes.Add(new SampleInfo + { + Bank = addSampleBank, + Name = SampleInfo.HIT_CLAP + }); + } + + return soundTypes; + } + [Flags] private enum LegacySoundType { From bd7341c5a18e68175e0af794b7cf19997b8ea361 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 14:36:28 +0900 Subject: [PATCH 02/25] Restructure reading normal/add/volume members into class to make code a bit more readable/usable. --- .../Objects/Legacy/HitObjectParser.cs | 64 ++++++++++++------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 5031128a79..9e10b7c69e 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -23,9 +23,9 @@ namespace osu.Game.Rulesets.Objects.Legacy bool combo = type.HasFlag(HitObjectType.NewCombo); type &= ~HitObjectType.NewCombo; - int sampleVolume = 0; - string normalSampleBank = null; - string addSampleBank = null; + var soundType = (LegacySoundType)int.Parse(split[4]); + + SampleBankInfo bankInfo = new SampleBankInfo(); HitObject result; @@ -34,7 +34,7 @@ namespace osu.Game.Rulesets.Objects.Legacy result = CreateHit(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo); if (split.Length > 5) - readCustomSampleBanks(split[5], ref normalSampleBank, ref addSampleBank, ref sampleVolume); + readCustomSampleBanks(split[5], bankInfo); } else if ((type & HitObjectType.Slider) > 0) { @@ -76,18 +76,19 @@ namespace osu.Game.Rulesets.Objects.Legacy if (split.Length > 7) length = Convert.ToDouble(split[7], CultureInfo.InvariantCulture); + + if (split.Length > 10) + readCustomSampleBanks(split[10], bankInfo); result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount); - if (split.Length > 10) - readCustomSampleBanks(split[10], ref normalSampleBank, ref addSampleBank, ref sampleVolume); } else if ((type & HitObjectType.Spinner) > 0) { result = CreateSpinner(new Vector2(512, 384) / 2, Convert.ToDouble(split[5], CultureInfo.InvariantCulture)); if (split.Length > 6) - readCustomSampleBanks(split[6], ref normalSampleBank, ref addSampleBank, ref sampleVolume); + readCustomSampleBanks(split[6], bankInfo); } else if ((type & HitObjectType.Hold) > 0) { @@ -106,15 +107,12 @@ namespace osu.Game.Rulesets.Objects.Legacy throw new InvalidOperationException($@"Unknown hit object type {type}"); result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture); - - var soundType = (LegacySoundType)int.Parse(split[4]); - result.Samples = convertSoundType(soundType, normalSampleBank, addSampleBank); - result.Samples.ForEach(s => s.Volume = sampleVolume); + result.Samples = convertSoundType(soundType, bankInfo); return result; } - private void readCustomSampleBanks(string str, ref string normalSampleBank, ref string addSampleBank, ref int sampleVolume) + private void readCustomSampleBanks(string str, SampleBankInfo bankInfo) { if (string.IsNullOrEmpty(str)) return; @@ -134,9 +132,11 @@ namespace osu.Game.Rulesets.Objects.Legacy if (stringAddBank == @"none") stringAddBank = null; - normalSampleBank = stringBank; - addSampleBank = stringAddBank; - sampleVolume = split.Length > 3 ? int.Parse(split[3]) : 0; + bankInfo.Normal = stringBank; + bankInfo.Add = stringAddBank; + + if (split.Length > 3) + bankInfo.Volume = int.Parse(split[3]); } /// @@ -167,7 +167,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The hit object. protected abstract HitObject CreateSpinner(Vector2 position, double endTime); - private List convertSoundType(LegacySoundType type, string normalSampleBank, string addSampleBank) + private List convertSoundType(LegacySoundType type, SampleBankInfo bankInfo) { List soundTypes = new List(); @@ -175,8 +175,9 @@ namespace osu.Game.Rulesets.Objects.Legacy { soundTypes.Add(new SampleInfo { - Bank = normalSampleBank, - Name = SampleInfo.HIT_NORMAL + Bank = bankInfo.Normal, + Name = SampleInfo.HIT_NORMAL, + Volume = bankInfo.Volume }); } @@ -184,8 +185,9 @@ namespace osu.Game.Rulesets.Objects.Legacy { soundTypes.Add(new SampleInfo { - Bank = addSampleBank, - Name = SampleInfo.HIT_FINISH + Bank = bankInfo.Add, + Name = SampleInfo.HIT_FINISH, + Volume = bankInfo.Volume }); } @@ -193,8 +195,9 @@ namespace osu.Game.Rulesets.Objects.Legacy { soundTypes.Add(new SampleInfo { - Bank = addSampleBank, - Name = SampleInfo.HIT_WHISTLE + Bank = bankInfo.Add, + Name = SampleInfo.HIT_WHISTLE, + Volume = bankInfo.Volume }); } @@ -202,14 +205,27 @@ namespace osu.Game.Rulesets.Objects.Legacy { soundTypes.Add(new SampleInfo { - Bank = addSampleBank, - Name = SampleInfo.HIT_CLAP + Bank = bankInfo.Add, + Name = SampleInfo.HIT_CLAP, + Volume = bankInfo.Volume }); } return soundTypes; } + private class SampleBankInfo + { + public string Normal = null; + public string Add = null; + public int Volume = 0; + + public SampleBankInfo Clone() + { + return (SampleBankInfo)MemberwiseClone(); + } + } + [Flags] private enum LegacySoundType { From 83f1f9d7e5a75a0caa3c22d537d700e829266f18 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 14:38:46 +0900 Subject: [PATCH 03/25] Add ability to parse per-repeat sounds. --- .../Objects/Legacy/HitObjectParser.cs | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 9e10b7c69e..630f6e474d 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -80,8 +80,54 @@ namespace osu.Game.Rulesets.Objects.Legacy if (split.Length > 10) readCustomSampleBanks(split[10], bankInfo); - result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount); + // Per-repeat sounds + // Populate initial bank infos with the default hit object bank + List repeatBankInfos = new List(); + for (int i = 0; i <= repeatCount; i++) + repeatBankInfos.Add(bankInfo.Clone()); + + // Read any per-repeat banks + if (split.Length > 9 && split[9].Length > 0) + { + string[] sets = split[9].Split('|'); + if (sets.Length > 0) + { + for (int i = 0; i <= repeatCount; i++) + { + if (i >= sets.Length) + break; + + SampleBankInfo info = repeatBankInfos[i]; + readCustomSampleBanks(sets[i], info); + } + } + } + + // Read any per-repeat sample infos + List> sounds = new List>(); + if (split.Length > 8 && split[8].Length > 0) + { + // Per-repeat sample types + string[] adds = split[9].Split('|'); + if (adds.Length > 0) + { + for (int i = 0; i <= repeatCount; i++) + { + if (i >= adds.Length) + { + sounds.Add(convertSoundType(soundType, repeatBankInfos[i])); + continue; + } + + int sound; + int.TryParse(adds[i], out sound); + sounds.Add(convertSoundType((LegacySoundType)sound, repeatBankInfos[i])); + } + } + } + + result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, sounds); } else if ((type & HitObjectType.Spinner) > 0) { @@ -157,7 +203,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The slider curve type. /// The slider repeat count. /// The hit object. - protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount); + protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> sounds); /// /// Creates a legacy Spinner-type hit object. From b4a45973666a8c7e235be7054efc66bf5371bef5 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 16:18:00 +0900 Subject: [PATCH 04/25] Transform legacy HitObjectParsers to give repeat slider sounds, instead of all sounds. --- .../Objects/Legacy/Catch/HitObjectParser.cs | 6 +- .../Objects/Legacy/HitObjectParser.cs | 83 ++++++++++--------- .../Objects/Legacy/Mania/HitObjectParser.cs | 6 +- .../Objects/Legacy/Osu/HitObjectParser.cs | 6 +- .../Objects/Legacy/Taiko/HitObjectParser.cs | 6 +- 5 files changed, 62 insertions(+), 45 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs index a27244e5bd..7ce6af85fd 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; +using osu.Game.Audio; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; @@ -21,7 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -30,7 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount + RepeatCount = repeatCount, + RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 630f6e474d..84cc41b575 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Globalization; using osu.Game.Beatmaps.Formats; using osu.Game.Audio; +using System.Linq; namespace osu.Game.Rulesets.Objects.Legacy { @@ -19,13 +20,13 @@ namespace osu.Game.Rulesets.Objects.Legacy public override HitObject Parse(string text) { string[] split = text.Split(','); - var type = (HitObjectType)int.Parse(split[3]) & ~HitObjectType.ColourHax; + HitObjectType type = (HitObjectType)int.Parse(split[3]) & ~HitObjectType.ColourHax; bool combo = type.HasFlag(HitObjectType.NewCombo); type &= ~HitObjectType.NewCombo; var soundType = (LegacySoundType)int.Parse(split[4]); - - SampleBankInfo bankInfo = new SampleBankInfo(); + var bankInfo = new SampleBankInfo(); + List startSamples = null; HitObject result; @@ -80,54 +81,61 @@ namespace osu.Game.Rulesets.Objects.Legacy if (split.Length > 10) readCustomSampleBanks(split[10], bankInfo); - // Per-repeat sounds + // One node for each repeat + the start and end nodes + int nodes = repeatCount + 2; - // Populate initial bank infos with the default hit object bank - List repeatBankInfos = new List(); - for (int i = 0; i <= repeatCount; i++) - repeatBankInfos.Add(bankInfo.Clone()); + // Populate node sample bank infos with the default hit object sample bank + var nodeBankInfos = new List(); + for (int i = 0; i < nodes; i++) + nodeBankInfos.Add(bankInfo.Clone()); - // Read any per-repeat banks + // Read any per-node sample banks if (split.Length > 9 && split[9].Length > 0) { string[] sets = split[9].Split('|'); - if (sets.Length > 0) + for (int i = 0; i < nodes; i++) { - for (int i = 0; i <= repeatCount; i++) - { - if (i >= sets.Length) - break; + if (i >= sets.Length) + break; - SampleBankInfo info = repeatBankInfos[i]; - readCustomSampleBanks(sets[i], info); - } + SampleBankInfo info = nodeBankInfos[i]; + readCustomSampleBanks(sets[i], info); } } - // Read any per-repeat sample infos - List> sounds = new List>(); + // Populate node sound types with the default hit object sound type + var nodeSoundTypes = new List(); + for (int i = 0; i < nodes; i++) + nodeSoundTypes.Add(soundType); + + // Read any per-node sound types + string[] adds = null; if (split.Length > 8 && split[8].Length > 0) { - // Per-repeat sample types - string[] adds = split[9].Split('|'); - if (adds.Length > 0) + adds = split[8].Split('|'); + for (int i = 0; i < nodes; i++) { - for (int i = 0; i <= repeatCount; i++) - { - if (i >= adds.Length) - { - sounds.Add(convertSoundType(soundType, repeatBankInfos[i])); - continue; - } + if (i >= adds.Length) + break; - int sound; - int.TryParse(adds[i], out sound); - sounds.Add(convertSoundType((LegacySoundType)sound, repeatBankInfos[i])); - } + int sound; + int.TryParse(adds[i], out sound); + nodeSoundTypes[i] = (LegacySoundType)sound; } } - result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, sounds); + // Generate the final per-node samples + var nodeSamples = new List>(nodes); + for (int i = 0; i <= repeatCount; i++) + nodeSamples.Add(convertSoundType(nodeSoundTypes[i], nodeBankInfos[i])); + + // Extract the first node as the first sample + startSamples = nodeSamples[0]; + + // Repeat samples are all the samples excluding the one from the first node (note this includes the end node) + var repeatSamples = nodeSamples.Skip(1).ToList(); + + result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, repeatSamples); } else if ((type & HitObjectType.Spinner) > 0) { @@ -153,7 +161,7 @@ namespace osu.Game.Rulesets.Objects.Legacy throw new InvalidOperationException($@"Unknown hit object type {type}"); result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture); - result.Samples = convertSoundType(soundType, bankInfo); + result.Samples = startSamples ?? convertSoundType(soundType, bankInfo); return result; } @@ -202,8 +210,9 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The slider length. /// The slider curve type. /// The slider repeat count. + /// The slider repeat sounds (this includes the end node, but NOT the start node). /// The hit object. - protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> sounds); + protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples); /// /// Creates a legacy Spinner-type hit object. @@ -215,7 +224,7 @@ namespace osu.Game.Rulesets.Objects.Legacy private List convertSoundType(LegacySoundType type, SampleBankInfo bankInfo) { - List soundTypes = new List(); + var soundTypes = new List(); if ((type & LegacySoundType.Normal) > 0) { diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs index 98f0459e0a..f3b0738b1a 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; +using osu.Game.Audio; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; @@ -21,7 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -30,7 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount + RepeatCount = repeatCount, + RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs index 227a4412c4..fd018c41a2 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; +using osu.Game.Audio; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; @@ -21,7 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -30,7 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount + RepeatCount = repeatCount, + RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs index 669ee34910..a297bc5692 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; +using osu.Game.Audio; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; @@ -20,7 +21,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -28,7 +29,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount + RepeatCount = repeatCount, + RepeatSamples = repeatSamples }; } From ca824de91c0b0a136a8d6b62dd78b456e320fb27 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 16:18:34 +0900 Subject: [PATCH 05/25] Implement RepeatSamples in IHasRepeats. --- osu.Game.Rulesets.Osu/Objects/Slider.cs | 2 ++ osu.Game/Rulesets/Objects/CurvedHitObject.cs | 6 ++++ osu.Game/Rulesets/Objects/HitObject.cs | 29 ++++++++++++------- .../Rulesets/Objects/Types/IHasRepeats.cs | 5 ++++ 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 167bf21670..48c871d64d 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -33,6 +33,8 @@ namespace osu.Game.Rulesets.Osu.Objects public double ProgressAt(double progress) => CurveObject.ProgressAt(progress); public int RepeatAt(double progress) => CurveObject.RepeatAt(progress); + public List> RepeatSamples => CurveObject.RepeatSamples; + public List ControlPoints => CurveObject.ControlPoints; public CurveType CurveType => CurveObject.CurveType; public double Distance => CurveObject.Distance; diff --git a/osu.Game/Rulesets/Objects/CurvedHitObject.cs b/osu.Game/Rulesets/Objects/CurvedHitObject.cs index 517c276242..b43c10476a 100644 --- a/osu.Game/Rulesets/Objects/CurvedHitObject.cs +++ b/osu.Game/Rulesets/Objects/CurvedHitObject.cs @@ -4,6 +4,10 @@ using OpenTK; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; +using osu.Game.Audio; +using System; +using osu.Game.Beatmaps.Timing; +using osu.Game.Database; namespace osu.Game.Rulesets.Objects { @@ -34,6 +38,8 @@ namespace osu.Game.Rulesets.Objects set { Curve.Distance = value; } } + public List> RepeatSamples { get; set; } = new List>(); + public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress)); public double ProgressAt(double progress) diff --git a/osu.Game/Rulesets/Objects/HitObject.cs b/osu.Game/Rulesets/Objects/HitObject.cs index 240d110976..52f157d472 100644 --- a/osu.Game/Rulesets/Objects/HitObject.cs +++ b/osu.Game/Rulesets/Objects/HitObject.cs @@ -4,6 +4,7 @@ using osu.Game.Audio; using osu.Game.Beatmaps.Timing; using osu.Game.Database; +using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; namespace osu.Game.Rulesets.Objects @@ -19,7 +20,7 @@ namespace osu.Game.Rulesets.Objects /// /// The time at which the HitObject starts. /// - public double StartTime { get; set; } + public double StartTime; /// /// The samples to be played when this hit object is hit. @@ -36,17 +37,25 @@ namespace osu.Game.Rulesets.Objects ControlPoint overridePoint; ControlPoint timingPoint = timing.TimingPointAt(StartTime, out overridePoint); - foreach (var sample in Samples) - { - if (sample.Volume == 0) - sample.Volume = (overridePoint ?? timingPoint)?.SampleVolume ?? 0; + ControlPoint samplePoint = overridePoint ?? timingPoint; - // If the bank is not assigned a name, assign it from the control point - if (!string.IsNullOrEmpty(sample.Bank)) - continue; + // Initialize first sample + foreach (SampleInfo sample in Samples) + initializeSampleInfo(sample, samplePoint); - sample.Bank = (overridePoint ?? timingPoint)?.SampleBank ?? @"normal"; - } + // Initialize any repeat samples + var repeatData = this as IHasRepeats; + repeatData?.RepeatSamples?.ForEach(r => r.ForEach(s => initializeSampleInfo(s, samplePoint))); + } + + private void initializeSampleInfo(SampleInfo sample, ControlPoint controlPoint) + { + if (sample.Volume == 0) + sample.Volume = controlPoint?.SampleVolume ?? 0; + + // If the bank is not assigned a name, assign it from the control point + if (string.IsNullOrEmpty(sample.Bank)) + sample.Bank = controlPoint?.SampleBank ?? @"normal"; } } } diff --git a/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs b/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs index f7058fd3c9..507f5974f7 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs @@ -1,6 +1,9 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Audio; +using System.Collections.Generic; + namespace osu.Game.Rulesets.Objects.Types { /// @@ -12,5 +15,7 @@ namespace osu.Game.Rulesets.Objects.Types /// The amount of times the HitObject repeats. /// int RepeatCount { get; } + + List> RepeatSamples { get; } } } From a7afde02bf42f8b76adfb4e56c0762df531ab444 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 16:27:35 +0900 Subject: [PATCH 06/25] Oops, apparently normal hit sound should always be added. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 84cc41b575..3dcac72db8 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -226,15 +226,12 @@ namespace osu.Game.Rulesets.Objects.Legacy { var soundTypes = new List(); - if ((type & LegacySoundType.Normal) > 0) + soundTypes.Add(new SampleInfo { - soundTypes.Add(new SampleInfo - { - Bank = bankInfo.Normal, - Name = SampleInfo.HIT_NORMAL, - Volume = bankInfo.Volume - }); - } + Bank = bankInfo.Normal, + Name = SampleInfo.HIT_NORMAL, + Volume = bankInfo.Volume + }); if ((type & LegacySoundType.Finish) > 0) { From a999c42d8a2b3b04891729685d4d290fc509f66a Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 18:49:49 +0900 Subject: [PATCH 07/25] Split slider samples into head + tail + repeats + body (the original HitObject.Samples). --- osu.Game.Rulesets.Osu/Objects/Slider.cs | 2 ++ osu.Game/Rulesets/Objects/CurvedHitObject.cs | 5 +++-- osu.Game/Rulesets/Objects/HitObject.cs | 12 ++++++++++-- .../Objects/Legacy/Catch/HitObjectParser.cs | 5 ++++- .../Rulesets/Objects/Legacy/HitObjectParser.cs | 17 +++++++++-------- .../Objects/Legacy/Mania/HitObjectParser.cs | 5 ++++- .../Objects/Legacy/Osu/HitObjectParser.cs | 5 ++++- .../Objects/Legacy/Taiko/HitObjectParser.cs | 5 ++++- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 11 +++++++++++ osu.Game/Rulesets/Objects/Types/IHasRepeats.cs | 3 +++ 10 files changed, 54 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 48c871d64d..075d03d247 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -34,6 +34,8 @@ namespace osu.Game.Rulesets.Osu.Objects public int RepeatAt(double progress) => CurveObject.RepeatAt(progress); public List> RepeatSamples => CurveObject.RepeatSamples; + public List HeadSamples => CurveObject.HeadSamples; + public List TailSamples => CurveObject.TailSamples; public List ControlPoints => CurveObject.ControlPoints; public CurveType CurveType => CurveObject.CurveType; diff --git a/osu.Game/Rulesets/Objects/CurvedHitObject.cs b/osu.Game/Rulesets/Objects/CurvedHitObject.cs index b43c10476a..57da216445 100644 --- a/osu.Game/Rulesets/Objects/CurvedHitObject.cs +++ b/osu.Game/Rulesets/Objects/CurvedHitObject.cs @@ -6,8 +6,6 @@ using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; using osu.Game.Audio; using System; -using osu.Game.Beatmaps.Timing; -using osu.Game.Database; namespace osu.Game.Rulesets.Objects { @@ -40,6 +38,9 @@ namespace osu.Game.Rulesets.Objects public List> RepeatSamples { get; set; } = new List>(); + public List HeadSamples { get; set; } = new List(); + public List TailSamples { get; set; } = new List(); + public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress)); public double ProgressAt(double progress) diff --git a/osu.Game/Rulesets/Objects/HitObject.cs b/osu.Game/Rulesets/Objects/HitObject.cs index 52f157d472..fe53a6ad7f 100644 --- a/osu.Game/Rulesets/Objects/HitObject.cs +++ b/osu.Game/Rulesets/Objects/HitObject.cs @@ -24,6 +24,10 @@ namespace osu.Game.Rulesets.Objects /// /// The samples to be played when this hit object is hit. + /// + /// In the case of types, this is the sample of the curve body + /// and can be treated as the default samples for the hit object. + /// /// public List Samples = new List(); @@ -40,12 +44,16 @@ namespace osu.Game.Rulesets.Objects ControlPoint samplePoint = overridePoint ?? timingPoint; // Initialize first sample - foreach (SampleInfo sample in Samples) - initializeSampleInfo(sample, samplePoint); + Samples.ForEach(s => initializeSampleInfo(s, samplePoint)); // Initialize any repeat samples var repeatData = this as IHasRepeats; repeatData?.RepeatSamples?.ForEach(r => r.ForEach(s => initializeSampleInfo(s, samplePoint))); + + // Initialize any curved object samples + var curvedObject = this as CurvedHitObject; + curvedObject?.HeadSamples.ForEach(s => initializeSampleInfo(s, samplePoint)); + curvedObject?.TailSamples.ForEach(s => initializeSampleInfo(s, samplePoint)); } private void initializeSampleInfo(SampleInfo sample, ControlPoint controlPoint) diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs index 7ce6af85fd..5e8c096da0 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs @@ -22,7 +22,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, + int repeatCount, List headSamples, List tailSamples, List> repeatSamples) { return new Slider { @@ -32,6 +33,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch Distance = length, CurveType = curveType, RepeatCount = repeatCount, + HeadSamples = headSamples, + TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 3dcac72db8..2bf0f0d662 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -26,7 +26,6 @@ namespace osu.Game.Rulesets.Objects.Legacy var soundType = (LegacySoundType)int.Parse(split[4]); var bankInfo = new SampleBankInfo(); - List startSamples = null; HitObject result; @@ -129,13 +128,14 @@ namespace osu.Game.Rulesets.Objects.Legacy for (int i = 0; i <= repeatCount; i++) nodeSamples.Add(convertSoundType(nodeSoundTypes[i], nodeBankInfos[i])); - // Extract the first node as the first sample - startSamples = nodeSamples[0]; + // Extract the first and last samples for the head and tail respectively + List headSamples = nodeSamples.First(); + List tailSamples = nodeSamples.Last(); - // Repeat samples are all the samples excluding the one from the first node (note this includes the end node) - var repeatSamples = nodeSamples.Skip(1).ToList(); + // Repeat samples are all the samples between head and tail + var repeatSamples = nodeSamples.Skip(1).TakeWhile(s => s != tailSamples).ToList(); - result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, repeatSamples); + result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, headSamples, tailSamples, repeatSamples); } else if ((type & HitObjectType.Spinner) > 0) { @@ -161,7 +161,7 @@ namespace osu.Game.Rulesets.Objects.Legacy throw new InvalidOperationException($@"Unknown hit object type {type}"); result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture); - result.Samples = startSamples ?? convertSoundType(soundType, bankInfo); + result.Samples = convertSoundType(soundType, bankInfo); return result; } @@ -212,7 +212,8 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The slider repeat count. /// The slider repeat sounds (this includes the end node, but NOT the start node). /// The hit object. - protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples); + protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, + int repeatCount, List headSamples, List tailSamples, List> repeatSamples); /// /// Creates a legacy Spinner-type hit object. diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs index f3b0738b1a..fa75592f74 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs @@ -22,7 +22,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, + int repeatCount, List headSamples, List tailSamples, List> repeatSamples) { return new Slider { @@ -32,6 +33,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania Distance = length, CurveType = curveType, RepeatCount = repeatCount, + HeadSamples = headSamples, + TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs index fd018c41a2..f8310b9075 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs @@ -22,7 +22,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, + int repeatCount, List headSamples, List tailSamples, List> repeatSamples) { return new Slider { @@ -32,6 +33,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu Distance = length, CurveType = curveType, RepeatCount = repeatCount, + HeadSamples = headSamples, + TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs index a297bc5692..77a29d9883 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs @@ -21,7 +21,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, + int repeatCount, List headSamples, List tailSamples, List> repeatSamples) { return new Slider { @@ -30,6 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko Distance = length, CurveType = curveType, RepeatCount = repeatCount, + HeadSamples = headSamples, + TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index 5ff6d03f6d..40e0b367de 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using OpenTK; +using osu.Game.Audio; namespace osu.Game.Rulesets.Objects.Types { @@ -26,6 +27,16 @@ namespace osu.Game.Rulesets.Objects.Types /// CurveType CurveType { get; } + /// + /// The samples to be played when the head of the hit object is hit. + /// + List HeadSamples { get; } + + /// + /// The samples to be played when the tail of the hit object is hit. + /// + List TailSamples { get; } + /// /// Computes the position on the curve at a given progress, accounting for repeat logic. /// diff --git a/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs b/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs index 507f5974f7..2fe2424d49 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasRepeats.cs @@ -16,6 +16,9 @@ namespace osu.Game.Rulesets.Objects.Types /// int RepeatCount { get; } + /// + /// The samples to be played when each repeat node is hit (0 -> first repeat node, 1 -> second repeat node, etc). + /// List> RepeatSamples { get; } } } From cae4c7c6e5cf75c676f608605098c8a3fe09c29c Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 19:12:16 +0900 Subject: [PATCH 08/25] Combine construction and assignment. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 2bf0f0d662..a6464a3118 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -108,10 +108,9 @@ namespace osu.Game.Rulesets.Objects.Legacy nodeSoundTypes.Add(soundType); // Read any per-node sound types - string[] adds = null; if (split.Length > 8 && split[8].Length > 0) { - adds = split[8].Split('|'); + string[] adds = split[8].Split('|'); for (int i = 0; i < nodes; i++) { if (i >= adds.Length) From b8c10aa595c40fe2f4474a761c76ae63bc5f84ae Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 19:37:16 +0900 Subject: [PATCH 09/25] Improve xmldoc. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index a6464a3118..3e31cc9001 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -209,7 +209,9 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The slider length. /// The slider curve type. /// The slider repeat count. - /// The slider repeat sounds (this includes the end node, but NOT the start node). + /// The samples to be played when the head of the slider is hit. + /// The samples to be played when the tail of the slider is hit. + /// The samples to be played when the repeat nodes are hit. /// The hit object. protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List headSamples, List tailSamples, List> repeatSamples); From 47f9b2d55bdded642b178c963b23295c27cae4ff Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 19:38:04 +0900 Subject: [PATCH 10/25] Trim whitespace. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 2 +- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 3e31cc9001..d61cad2da3 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -76,7 +76,7 @@ namespace osu.Game.Rulesets.Objects.Legacy if (split.Length > 7) length = Convert.ToDouble(split[7], CultureInfo.InvariantCulture); - + if (split.Length > 10) readCustomSampleBanks(split[10], bankInfo); diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index 40e0b367de..cbe59422fb 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Objects.Types /// The samples to be played when the head of the hit object is hit. /// List HeadSamples { get; } - + /// /// The samples to be played when the tail of the hit object is hit. /// From 6c8bd4dfe4f2ce0cee8998c0c6b322e8b4a2e909 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Fri, 21 Apr 2017 19:41:46 +0900 Subject: [PATCH 11/25] More trimming. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index d61cad2da3..2c08a826d7 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -234,7 +234,7 @@ namespace osu.Game.Rulesets.Objects.Legacy Name = SampleInfo.HIT_NORMAL, Volume = bankInfo.Volume }); - + if ((type & LegacySoundType.Finish) > 0) { soundTypes.Add(new SampleInfo From 382e656e9fffb3f98fba30cd5feec6013c42b1a8 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 19:51:23 +0900 Subject: [PATCH 12/25] CI fixes. --- osu.Game/Rulesets/Objects/CurvedHitObject.cs | 1 - .../Objects/Legacy/HitObjectParser.cs | 21 ++++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/osu.Game/Rulesets/Objects/CurvedHitObject.cs b/osu.Game/Rulesets/Objects/CurvedHitObject.cs index 57da216445..4d1d437e8a 100644 --- a/osu.Game/Rulesets/Objects/CurvedHitObject.cs +++ b/osu.Game/Rulesets/Objects/CurvedHitObject.cs @@ -5,7 +5,6 @@ using OpenTK; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; using osu.Game.Audio; -using System; namespace osu.Game.Rulesets.Objects { diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 2c08a826d7..124f31cbc1 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -226,14 +226,15 @@ namespace osu.Game.Rulesets.Objects.Legacy private List convertSoundType(LegacySoundType type, SampleBankInfo bankInfo) { - var soundTypes = new List(); - - soundTypes.Add(new SampleInfo + var soundTypes = new List { - Bank = bankInfo.Normal, - Name = SampleInfo.HIT_NORMAL, - Volume = bankInfo.Volume - }); + new SampleInfo + { + Bank = bankInfo.Normal, + Name = SampleInfo.HIT_NORMAL, + Volume = bankInfo.Volume + } + }; if ((type & LegacySoundType.Finish) > 0) { @@ -270,9 +271,9 @@ namespace osu.Game.Rulesets.Objects.Legacy private class SampleBankInfo { - public string Normal = null; - public string Add = null; - public int Volume = 0; + public string Normal; + public string Add; + public int Volume; public SampleBankInfo Clone() { From 748f13501a334aed831e0688013b86cb2db7f49c Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 20:04:40 +0900 Subject: [PATCH 13/25] Remove HeadSamples and TailSamples, combine into RepeatSamples. --- osu.Game.Rulesets.Osu/Objects/Slider.cs | 2 -- osu.Game/Rulesets/Objects/CurvedHitObject.cs | 3 --- osu.Game/Rulesets/Objects/HitObject.cs | 5 ----- .../Objects/Legacy/Catch/HitObjectParser.cs | 5 +---- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 13 ++----------- .../Objects/Legacy/Mania/HitObjectParser.cs | 5 +---- .../Rulesets/Objects/Legacy/Osu/HitObjectParser.cs | 5 +---- .../Objects/Legacy/Taiko/HitObjectParser.cs | 5 +---- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 11 ----------- 9 files changed, 6 insertions(+), 48 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 075d03d247..48c871d64d 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -34,8 +34,6 @@ namespace osu.Game.Rulesets.Osu.Objects public int RepeatAt(double progress) => CurveObject.RepeatAt(progress); public List> RepeatSamples => CurveObject.RepeatSamples; - public List HeadSamples => CurveObject.HeadSamples; - public List TailSamples => CurveObject.TailSamples; public List ControlPoints => CurveObject.ControlPoints; public CurveType CurveType => CurveObject.CurveType; diff --git a/osu.Game/Rulesets/Objects/CurvedHitObject.cs b/osu.Game/Rulesets/Objects/CurvedHitObject.cs index 4d1d437e8a..83aa67eb70 100644 --- a/osu.Game/Rulesets/Objects/CurvedHitObject.cs +++ b/osu.Game/Rulesets/Objects/CurvedHitObject.cs @@ -37,9 +37,6 @@ namespace osu.Game.Rulesets.Objects public List> RepeatSamples { get; set; } = new List>(); - public List HeadSamples { get; set; } = new List(); - public List TailSamples { get; set; } = new List(); - public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress)); public double ProgressAt(double progress) diff --git a/osu.Game/Rulesets/Objects/HitObject.cs b/osu.Game/Rulesets/Objects/HitObject.cs index fe53a6ad7f..4ebe7137c4 100644 --- a/osu.Game/Rulesets/Objects/HitObject.cs +++ b/osu.Game/Rulesets/Objects/HitObject.cs @@ -49,11 +49,6 @@ namespace osu.Game.Rulesets.Objects // Initialize any repeat samples var repeatData = this as IHasRepeats; repeatData?.RepeatSamples?.ForEach(r => r.ForEach(s => initializeSampleInfo(s, samplePoint))); - - // Initialize any curved object samples - var curvedObject = this as CurvedHitObject; - curvedObject?.HeadSamples.ForEach(s => initializeSampleInfo(s, samplePoint)); - curvedObject?.TailSamples.ForEach(s => initializeSampleInfo(s, samplePoint)); } private void initializeSampleInfo(SampleInfo sample, ControlPoint controlPoint) diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs index 5e8c096da0..7ce6af85fd 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs @@ -22,8 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, - int repeatCount, List headSamples, List tailSamples, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -33,8 +32,6 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch Distance = length, CurveType = curveType, RepeatCount = repeatCount, - HeadSamples = headSamples, - TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 124f31cbc1..1078efdab1 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Globalization; using osu.Game.Beatmaps.Formats; using osu.Game.Audio; -using System.Linq; namespace osu.Game.Rulesets.Objects.Legacy { @@ -127,14 +126,7 @@ namespace osu.Game.Rulesets.Objects.Legacy for (int i = 0; i <= repeatCount; i++) nodeSamples.Add(convertSoundType(nodeSoundTypes[i], nodeBankInfos[i])); - // Extract the first and last samples for the head and tail respectively - List headSamples = nodeSamples.First(); - List tailSamples = nodeSamples.Last(); - - // Repeat samples are all the samples between head and tail - var repeatSamples = nodeSamples.Skip(1).TakeWhile(s => s != tailSamples).ToList(); - - result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, headSamples, tailSamples, repeatSamples); + result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, nodeSamples); } else if ((type & HitObjectType.Spinner) > 0) { @@ -213,8 +205,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The samples to be played when the tail of the slider is hit. /// The samples to be played when the repeat nodes are hit. /// The hit object. - protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, - int repeatCount, List headSamples, List tailSamples, List> repeatSamples); + protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples); /// /// Creates a legacy Spinner-type hit object. diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs index fa75592f74..f3b0738b1a 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs @@ -22,8 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, - int repeatCount, List headSamples, List tailSamples, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -33,8 +32,6 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania Distance = length, CurveType = curveType, RepeatCount = repeatCount, - HeadSamples = headSamples, - TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs index f8310b9075..fd018c41a2 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs @@ -22,8 +22,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, - int repeatCount, List headSamples, List tailSamples, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -33,8 +32,6 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu Distance = length, CurveType = curveType, RepeatCount = repeatCount, - HeadSamples = headSamples, - TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs index 77a29d9883..a297bc5692 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs @@ -21,8 +21,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko }; } - protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, - int repeatCount, List headSamples, List tailSamples, List> repeatSamples) + protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { return new Slider { @@ -31,8 +30,6 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko Distance = length, CurveType = curveType, RepeatCount = repeatCount, - HeadSamples = headSamples, - TailSamples = tailSamples, RepeatSamples = repeatSamples }; } diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index cbe59422fb..5ff6d03f6d 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using OpenTK; -using osu.Game.Audio; namespace osu.Game.Rulesets.Objects.Types { @@ -27,16 +26,6 @@ namespace osu.Game.Rulesets.Objects.Types /// CurveType CurveType { get; } - /// - /// The samples to be played when the head of the hit object is hit. - /// - List HeadSamples { get; } - - /// - /// The samples to be played when the tail of the hit object is hit. - /// - List TailSamples { get; } - /// /// Computes the position on the curve at a given progress, accounting for repeat logic. /// From b8f9a2be6edadc92351cafe2c8b8851a5ca47401 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 20:11:12 +0900 Subject: [PATCH 14/25] Whoops fix xmldoc. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 1078efdab1..5bacb41b83 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -201,9 +201,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// The slider length. /// The slider curve type. /// The slider repeat count. - /// The samples to be played when the head of the slider is hit. - /// The samples to be played when the tail of the slider is hit. - /// The samples to be played when the repeat nodes are hit. + /// The samples to be played when the repeat nodes are hit. This includes the head and tail of the slider. /// The hit object. protected abstract HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples); From 5cdbb226f8a135fad00f1dafecb1ad4cc86e67a6 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 20:29:27 +0900 Subject: [PATCH 15/25] Remove CurvedHitObject to make RepeatSamples not tied to curve. --- .../Tests/TestCaseHitObjects.cs | 11 ++--- .../Beatmaps/OsuBeatmapConverter.cs | 14 ++++--- osu.Game.Rulesets.Osu/Objects/Slider.cs | 41 ++++++++++++++----- .../Objects/Legacy/Catch/HitObjectParser.cs | 4 +- .../Rulesets/Objects/Legacy/Catch/Slider.cs | 2 +- .../LegacySlider.cs} | 33 ++++++++------- .../Objects/Legacy/Mania/HitObjectParser.cs | 4 +- .../Rulesets/Objects/Legacy/Mania/Slider.cs | 2 +- .../Objects/Legacy/Osu/HitObjectParser.cs | 4 +- .../Rulesets/Objects/Legacy/Osu/Slider.cs | 2 +- .../Objects/Legacy/Taiko/HitObjectParser.cs | 4 +- .../Rulesets/Objects/Legacy/Taiko/Slider.cs | 2 +- osu.Game/osu.Game.csproj | 2 +- 13 files changed, 74 insertions(+), 51 deletions(-) rename osu.Game/Rulesets/Objects/{CurvedHitObject.cs => Legacy/LegacySlider.cs} (60%) diff --git a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs index 15b38b3e83..aba37d5b30 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs @@ -62,15 +62,12 @@ namespace osu.Desktop.VisualTests.Tests add(new DrawableSlider(new Slider { StartTime = framedClock.CurrentTime + 600, - CurveObject = new CurvedHitObject + ControlPoints = new List { - ControlPoints = new List - { - new Vector2(-200, 0), - new Vector2(400, 0), - }, - Distance = 400 + new Vector2(-200, 0), + new Vector2(400, 0), }, + Distance = 400, Position = new Vector2(-200, 0), Velocity = 1, TickDistance = 100, diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs index 0eece7fc4c..3096c1c8a0 100644 --- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs +++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs @@ -19,10 +19,10 @@ namespace osu.Game.Rulesets.Osu.Beatmaps protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) { - IHasCurve curveData = original as IHasCurve; - IHasEndTime endTimeData = original as IHasEndTime; - IHasPosition positionData = original as IHasPosition; - IHasCombo comboData = original as IHasCombo; + var curveData = original as IHasCurve; + var endTimeData = original as IHasEndTime; + var positionData = original as IHasPosition; + var comboData = original as IHasCombo; if (curveData != null) { @@ -30,7 +30,11 @@ namespace osu.Game.Rulesets.Osu.Beatmaps { StartTime = original.StartTime, Samples = original.Samples, - CurveObject = curveData, + ControlPoints = curveData?.ControlPoints ?? null, + CurveType = curveData?.CurveType ?? CurveType.Catmull, + Distance = curveData?.Distance ?? 0, + RepeatSamples = curveData?.RepeatSamples ?? null, + RepeatCount = curveData?.RepeatCount ?? 1, Position = positionData?.Position ?? Vector2.Zero, NewCombo = comboData?.NewCombo ?? false }; diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 48c871d64d..dba5b6d43f 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -20,26 +20,33 @@ namespace osu.Game.Rulesets.Osu.Objects /// private const float base_scoring_distance = 100; - public IHasCurve CurveObject { get; set; } - - public SliderCurve Curve => CurveObject.Curve; + public SliderCurve Curve { get; } = new SliderCurve(); public double EndTime => StartTime + RepeatCount * Curve.Distance / Velocity; public double Duration => EndTime - StartTime; public override Vector2 EndPosition => PositionAt(1); - public Vector2 PositionAt(double progress) => CurveObject.PositionAt(progress); - public double ProgressAt(double progress) => CurveObject.ProgressAt(progress); - public int RepeatAt(double progress) => CurveObject.RepeatAt(progress); + public List ControlPoints + { + get { return Curve.ControlPoints; } + set { Curve.ControlPoints = value; } + } - public List> RepeatSamples => CurveObject.RepeatSamples; + public CurveType CurveType + { + get { return Curve.CurveType; } + set { Curve.CurveType = value; } + } - public List ControlPoints => CurveObject.ControlPoints; - public CurveType CurveType => CurveObject.CurveType; - public double Distance => CurveObject.Distance; + public double Distance + { + get { return Curve.Distance; } + set { Curve.Distance = value; } + } - public int RepeatCount => CurveObject.RepeatCount; + public List> RepeatSamples { get; set; } = new List>(); + public int RepeatCount { get; set; } = 1; private int stackHeight; public override int StackHeight @@ -65,6 +72,18 @@ namespace osu.Game.Rulesets.Osu.Objects TickDistance = scoringDistance / difficulty.SliderTickRate; } + public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress)); + + public double ProgressAt(double progress) + { + double p = progress * RepeatCount % 1; + if (RepeatAt(progress) % 2 == 1) + p = 1 - p; + return p; + } + + public int RepeatAt(double progress) => (int)(progress * RepeatCount); + public IEnumerable Ticks { get diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs index 7ce6af85fd..6575db99e7 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs @@ -31,8 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount, - RepeatSamples = repeatSamples + RepeatSamples = repeatSamples, + RepeatCount = repeatCount }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs index 865e56c847..1e1ae0c213 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch /// /// Legacy osu!catch Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : CurvedHitObject, IHasXPosition, IHasCombo + internal sealed class Slider : LegacySlider, IHasXPosition, IHasCombo { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/CurvedHitObject.cs b/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs similarity index 60% rename from osu.Game/Rulesets/Objects/CurvedHitObject.cs rename to osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs index 83aa67eb70..6ecd893be2 100644 --- a/osu.Game/Rulesets/Objects/CurvedHitObject.cs +++ b/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs @@ -1,21 +1,17 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK; using osu.Game.Rulesets.Objects.Types; +using System; using System.Collections.Generic; +using OpenTK; using osu.Game.Audio; -namespace osu.Game.Rulesets.Objects +namespace osu.Game.Rulesets.Objects.Legacy { - public class CurvedHitObject : HitObject, IHasCurve + internal class LegacySlider : HitObject, IHasCurve { - public SliderCurve Curve { get; } = new SliderCurve(); - - public int RepeatCount { get; set; } = 1; - - public double EndTime => 0; - public double Duration => 0; + public SliderCurve Curve { get; set; } = new SliderCurve(); public List ControlPoints { @@ -36,17 +32,24 @@ namespace osu.Game.Rulesets.Objects } public List> RepeatSamples { get; set; } = new List>(); + public int RepeatCount { get; set; } = 1; - public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress)); + public double EndTime { get; set; } + public double Duration { get; set; } + + public Vector2 PositionAt(double progress) + { + throw new NotImplementedException(); + } public double ProgressAt(double progress) { - var p = progress * RepeatCount % 1; - if (RepeatAt(progress) % 2 == 1) - p = 1 - p; - return p; + throw new NotImplementedException(); } - public int RepeatAt(double progress) => (int)(progress * RepeatCount); + public int RepeatAt(double progress) + { + throw new NotImplementedException(); + } } } diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs index f3b0738b1a..0b2e245413 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs @@ -31,8 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount, - RepeatSamples = repeatSamples + RepeatSamples = repeatSamples, + RepeatCount = repeatCount }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs index c884ed324b..e92685ee7a 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania /// /// Legacy osu!mania Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : CurvedHitObject, IHasXPosition, IHasCombo + internal sealed class Slider : LegacySlider, IHasXPosition, IHasCombo { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs index fd018c41a2..61db0f6c25 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs @@ -31,8 +31,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount, - RepeatSamples = repeatSamples + RepeatSamples = repeatSamples, + RepeatCount = repeatCount }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs index 7d90c6d41e..3ac28f2fd2 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu /// /// Legacy osu! Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : CurvedHitObject, IHasPosition, IHasCombo + internal sealed class Slider : LegacySlider, IHasPosition, IHasCombo { public Vector2 Position { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs index a297bc5692..52d0a5e2d4 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs @@ -29,8 +29,8 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko ControlPoints = controlPoints, Distance = length, CurveType = curveType, - RepeatCount = repeatCount, - RepeatSamples = repeatSamples + RepeatSamples = repeatSamples, + RepeatCount = repeatCount }; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs index 18d2d4039d..3666369f74 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko /// /// Legacy osu!taiko Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : CurvedHitObject, IHasCombo + internal sealed class Slider : LegacySlider, IHasCombo { public bool NewCombo { get; set; } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6d7a905eed..be50f85c0c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -113,6 +113,7 @@ + @@ -134,7 +135,6 @@ - From d7477955ac0f01a791ac0aae913ba99ff87a8548 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Fri, 21 Apr 2017 20:42:13 +0900 Subject: [PATCH 16/25] CI fixes. --- osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs | 1 - osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs | 10 +++++----- osu.Game/Rulesets/Objects/HitObject.cs | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs index aba37d5b30..dceb7a9cff 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs @@ -10,7 +10,6 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; using osu.Framework.Testing; using osu.Framework.Timing; -using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Osu.Objects; diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs index 3096c1c8a0..7f6f524a7a 100644 --- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs +++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs @@ -30,11 +30,11 @@ namespace osu.Game.Rulesets.Osu.Beatmaps { StartTime = original.StartTime, Samples = original.Samples, - ControlPoints = curveData?.ControlPoints ?? null, - CurveType = curveData?.CurveType ?? CurveType.Catmull, - Distance = curveData?.Distance ?? 0, - RepeatSamples = curveData?.RepeatSamples ?? null, - RepeatCount = curveData?.RepeatCount ?? 1, + ControlPoints = curveData.ControlPoints, + CurveType = curveData.CurveType, + Distance = curveData.Distance, + RepeatSamples = curveData.RepeatSamples, + RepeatCount = curveData.RepeatCount, Position = positionData?.Position ?? Vector2.Zero, NewCombo = comboData?.NewCombo ?? false }; diff --git a/osu.Game/Rulesets/Objects/HitObject.cs b/osu.Game/Rulesets/Objects/HitObject.cs index 4ebe7137c4..12e4ca6df1 100644 --- a/osu.Game/Rulesets/Objects/HitObject.cs +++ b/osu.Game/Rulesets/Objects/HitObject.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Objects /// /// The samples to be played when this hit object is hit. /// - /// In the case of types, this is the sample of the curve body + /// In the case of types, this is the sample of the curve body /// and can be treated as the default samples for the hit object. /// /// From 1bb0b96ddcb19bd50c45bea57ad5f6b8c055bd2a Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Sat, 22 Apr 2017 20:43:20 +0900 Subject: [PATCH 17/25] Make IHasCurve not depend on a SliderCurve object. --- osu.Game.Rulesets.Osu/Objects/Slider.cs | 2 +- .../OsuDifficultyCalculator.cs | 2 +- .../Rulesets/Objects/Legacy/LegacySlider.cs | 24 ++++--------------- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 5 ---- 4 files changed, 6 insertions(+), 27 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index dba5b6d43f..4d9d3f97ed 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Objects /// private const float base_scoring_distance = 100; - public SliderCurve Curve { get; } = new SliderCurve(); + public readonly SliderCurve Curve = new SliderCurve(); public double EndTime => StartTime + RepeatCount * Curve.Distance / Velocity; public double Duration => EndTime - StartTime; diff --git a/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs index 14b890a055..03b88f49b5 100644 --- a/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs @@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Osu protected override void PreprocessHitObjects() { foreach (var h in Objects) - (h as IHasCurve)?.Curve?.Calculate(); + (h as Slider)?.Curve?.Calculate(); } protected override double CalculateInternal(Dictionary categoryDifficulty) diff --git a/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs b/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs index 6ecd893be2..96a671fcef 100644 --- a/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs @@ -11,27 +11,11 @@ namespace osu.Game.Rulesets.Objects.Legacy { internal class LegacySlider : HitObject, IHasCurve { - public SliderCurve Curve { get; set; } = new SliderCurve(); + public List ControlPoints { get; set; } + public CurveType CurveType { get; set; } + public double Distance { get; set; } - public List ControlPoints - { - get { return Curve.ControlPoints; } - set { Curve.ControlPoints = value; } - } - - public CurveType CurveType - { - get { return Curve.CurveType; } - set { Curve.CurveType = value; } - } - - public double Distance - { - get { return Curve.Distance; } - set { Curve.Distance = value; } - } - - public List> RepeatSamples { get; set; } = new List>(); + public List> RepeatSamples { get; set; } public int RepeatCount { get; set; } = 1; public double EndTime { get; set; } diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index 5ff6d03f6d..399138bc24 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -11,11 +11,6 @@ namespace osu.Game.Rulesets.Objects.Types /// public interface IHasCurve : IHasDistance, IHasRepeats { - /// - /// The curve. - /// - SliderCurve Curve { get; } - /// /// The control points that shape the curve. /// From ec04ceaece3c2a3bec47164b390bb4f2bf7378af Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Sat, 22 Apr 2017 20:53:55 +0900 Subject: [PATCH 18/25] Fix off-by-one on repeatCount. --- osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs index 5bacb41b83..4caaf24da5 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs @@ -80,7 +80,8 @@ namespace osu.Game.Rulesets.Objects.Legacy readCustomSampleBanks(split[10], bankInfo); // One node for each repeat + the start and end nodes - int nodes = repeatCount + 2; + // Note that the first length of the slider is considered a repeat, but there are no actual repeats happening + int nodes = Math.Max(0, repeatCount - 1) + 2; // Populate node sample bank infos with the default hit object sample bank var nodeBankInfos = new List(); From 99db871e6c881c7d533fa9be227416b4713f305d Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Sat, 22 Apr 2017 20:59:35 +0900 Subject: [PATCH 19/25] Update OsuDifficultyCalculator.cs --- osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs index 03b88f49b5..5669993e67 100644 --- a/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Osu/OsuDifficultyCalculator.cs @@ -3,7 +3,6 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Beatmaps; -using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Beatmaps; using osu.Game.Rulesets.Osu.Objects; using System; @@ -190,4 +189,4 @@ namespace osu.Game.Rulesets.Osu Aim, }; } -} \ No newline at end of file +} From 2af9bf1423c924d532e1f505ca31401b3ffd8460 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Sat, 22 Apr 2017 21:33:11 +0900 Subject: [PATCH 20/25] Prefix everything inside Rulesets.Objects.Legacy with "Convert" to avoid naming clashes with Ruleset projects. --- osu.Game/Beatmaps/Formats/OsuLegacyDecoder.cs | 10 ++--- .../Legacy/Catch/{Hit.cs => ConvertHit.cs} | 2 +- ...ectParser.cs => ConvertHitObjectParser.cs} | 8 ++-- .../Catch/{Slider.cs => ConvertSlider.cs} | 2 +- .../Catch/{Spinner.cs => ConvertSpinner.cs} | 2 +- ...ectParser.cs => ConvertHitObjectParser.cs} | 18 ++++----- ...tObjectType.cs => ConvertHitObjectType.cs} | 2 +- .../Legacy/{Hold.cs => ConvertHold.cs} | 2 +- .../{LegacySlider.cs => ConvertSlider.cs} | 2 +- .../Legacy/Mania/{Hit.cs => ConvertHit.cs} | 2 +- ...ectParser.cs => ConvertHitObjectParser.cs} | 8 ++-- .../Mania/{Slider.cs => ConvertSlider.cs} | 2 +- .../Mania/{Spinner.cs => ConvertSpinner.cs} | 2 +- .../Legacy/Osu/{Hit.cs => ConvertHit.cs} | 2 +- ...ectParser.cs => ConvertHitObjectParser.cs} | 8 ++-- .../Osu/{Slider.cs => ConvertSlider.cs} | 2 +- .../Osu/{Spinner.cs => ConvertSpinner.cs} | 2 +- .../Legacy/Taiko/{Hit.cs => ConvertHit.cs} | 2 +- ...ectParser.cs => ConvertHitObjectParser.cs} | 8 ++-- .../Taiko/{Slider.cs => ConvertSlider.cs} | 2 +- .../Taiko/{Spinner.cs => ConvertSpinner.cs} | 2 +- osu.Game/osu.Game.csproj | 40 +++++++++---------- 22 files changed, 65 insertions(+), 65 deletions(-) rename osu.Game/Rulesets/Objects/Legacy/Catch/{Hit.cs => ConvertHit.cs} (82%) rename osu.Game/Rulesets/Objects/Legacy/Catch/{HitObjectParser.cs => ConvertHitObjectParser.cs} (85%) rename osu.Game/Rulesets/Objects/Legacy/Catch/{Slider.cs => ConvertSlider.cs} (80%) rename osu.Game/Rulesets/Objects/Legacy/Catch/{Spinner.cs => ConvertSpinner.cs} (84%) rename osu.Game/Rulesets/Objects/Legacy/{HitObjectParser.cs => ConvertHitObjectParser.cs} (92%) rename osu.Game/Rulesets/Objects/Legacy/{HitObjectType.cs => ConvertHitObjectType.cs} (87%) rename osu.Game/Rulesets/Objects/Legacy/{Hold.cs => ConvertHold.cs} (83%) rename osu.Game/Rulesets/Objects/Legacy/{LegacySlider.cs => ConvertSlider.cs} (90%) rename osu.Game/Rulesets/Objects/Legacy/Mania/{Hit.cs => ConvertHit.cs} (82%) rename osu.Game/Rulesets/Objects/Legacy/Mania/{HitObjectParser.cs => ConvertHitObjectParser.cs} (85%) rename osu.Game/Rulesets/Objects/Legacy/Mania/{Slider.cs => ConvertSlider.cs} (80%) rename osu.Game/Rulesets/Objects/Legacy/Mania/{Spinner.cs => ConvertSpinner.cs} (83%) rename osu.Game/Rulesets/Objects/Legacy/Osu/{Hit.cs => ConvertHit.cs} (84%) rename osu.Game/Rulesets/Objects/Legacy/Osu/{HitObjectParser.cs => ConvertHitObjectParser.cs} (85%) rename osu.Game/Rulesets/Objects/Legacy/Osu/{Slider.cs => ConvertSlider.cs} (82%) rename osu.Game/Rulesets/Objects/Legacy/Osu/{Spinner.cs => ConvertSpinner.cs} (85%) rename osu.Game/Rulesets/Objects/Legacy/Taiko/{Hit.cs => ConvertHit.cs} (84%) rename osu.Game/Rulesets/Objects/Legacy/Taiko/{HitObjectParser.cs => ConvertHitObjectParser.cs} (84%) rename osu.Game/Rulesets/Objects/Legacy/Taiko/{Slider.cs => ConvertSlider.cs} (81%) rename osu.Game/Rulesets/Objects/Legacy/Taiko/{Spinner.cs => ConvertSpinner.cs} (84%) diff --git a/osu.Game/Beatmaps/Formats/OsuLegacyDecoder.cs b/osu.Game/Beatmaps/Formats/OsuLegacyDecoder.cs index 74a5be698e..95213417ed 100644 --- a/osu.Game/Beatmaps/Formats/OsuLegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/OsuLegacyDecoder.cs @@ -29,7 +29,7 @@ namespace osu.Game.Beatmaps.Formats // TODO: Not sure how far back to go, or differences between versions } - private HitObjectParser parser; + private ConvertHitObjectParser parser; private LegacySampleBank defaultSampleBank; private int defaultSampleVolume = 100; @@ -90,16 +90,16 @@ namespace osu.Game.Beatmaps.Formats switch (beatmap.BeatmapInfo.RulesetID) { case 0: - parser = new Rulesets.Objects.Legacy.Osu.HitObjectParser(); + parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(); break; case 1: - parser = new Rulesets.Objects.Legacy.Taiko.HitObjectParser(); + parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(); break; case 2: - parser = new Rulesets.Objects.Legacy.Catch.HitObjectParser(); + parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(); break; case 3: - parser = new Rulesets.Objects.Legacy.Mania.HitObjectParser(); + parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(); break; } break; diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/Hit.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHit.cs similarity index 82% rename from osu.Game/Rulesets/Objects/Legacy/Catch/Hit.cs rename to osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHit.cs index 41dacd1265..30c10c302a 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/Hit.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHit.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch /// /// Legacy osu!catch Hit-type, used for parsing Beatmaps. /// - internal sealed class Hit : HitObject, IHasCombo, IHasXPosition + internal sealed class ConvertHit : HitObject, IHasCombo, IHasXPosition { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHitObjectParser.cs similarity index 85% rename from osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs rename to osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHitObjectParser.cs index 6575db99e7..1550772f8e 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertHitObjectParser.cs @@ -11,11 +11,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch /// /// A HitObjectParser to parse legacy osu!catch Beatmaps. /// - internal class HitObjectParser : Legacy.HitObjectParser + internal class ConvertHitObjectParser : Legacy.ConvertHitObjectParser { protected override HitObject CreateHit(Vector2 position, bool newCombo) { - return new Hit + return new ConvertHit { X = position.X, NewCombo = newCombo, @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { - return new Slider + return new ConvertSlider { X = position.X, NewCombo = newCombo, @@ -38,7 +38,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch protected override HitObject CreateSpinner(Vector2 position, double endTime) { - return new Spinner + return new ConvertSpinner { EndTime = endTime }; diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSlider.cs similarity index 80% rename from osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs rename to osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSlider.cs index 1e1ae0c213..781fe8f7fa 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSlider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch /// /// Legacy osu!catch Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : LegacySlider, IHasXPosition, IHasCombo + internal sealed class ConvertSlider : Legacy.ConvertSlider, IHasXPosition, IHasCombo { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Catch/Spinner.cs b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSpinner.cs similarity index 84% rename from osu.Game/Rulesets/Objects/Legacy/Catch/Spinner.cs rename to osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSpinner.cs index 7690f42e76..0652737b12 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Catch/Spinner.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Catch/ConvertSpinner.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch /// /// Legacy osu!catch Spinner-type, used for parsing Beatmaps. /// - internal sealed class Spinner : HitObject, IHasEndTime + internal sealed class ConvertSpinner : HitObject, IHasEndTime { public double EndTime { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs similarity index 92% rename from osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs rename to osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index 4caaf24da5..5b6de3bff7 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -14,28 +14,28 @@ namespace osu.Game.Rulesets.Objects.Legacy /// /// A HitObjectParser to parse legacy Beatmaps. /// - internal abstract class HitObjectParser : Objects.HitObjectParser + internal abstract class ConvertHitObjectParser : Objects.HitObjectParser { public override HitObject Parse(string text) { string[] split = text.Split(','); - HitObjectType type = (HitObjectType)int.Parse(split[3]) & ~HitObjectType.ColourHax; - bool combo = type.HasFlag(HitObjectType.NewCombo); - type &= ~HitObjectType.NewCombo; + ConvertHitObjectType type = (ConvertHitObjectType)int.Parse(split[3]) & ~ConvertHitObjectType.ColourHax; + bool combo = type.HasFlag(ConvertHitObjectType.NewCombo); + type &= ~ConvertHitObjectType.NewCombo; var soundType = (LegacySoundType)int.Parse(split[4]); var bankInfo = new SampleBankInfo(); HitObject result; - if ((type & HitObjectType.Circle) > 0) + if ((type & ConvertHitObjectType.Circle) > 0) { result = CreateHit(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo); if (split.Length > 5) readCustomSampleBanks(split[5], bankInfo); } - else if ((type & HitObjectType.Slider) > 0) + else if ((type & ConvertHitObjectType.Slider) > 0) { CurveType curveType = CurveType.Catmull; double length = 0; @@ -129,21 +129,21 @@ namespace osu.Game.Rulesets.Objects.Legacy result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, nodeSamples); } - else if ((type & HitObjectType.Spinner) > 0) + else if ((type & ConvertHitObjectType.Spinner) > 0) { result = CreateSpinner(new Vector2(512, 384) / 2, Convert.ToDouble(split[5], CultureInfo.InvariantCulture)); if (split.Length > 6) readCustomSampleBanks(split[6], bankInfo); } - else if ((type & HitObjectType.Hold) > 0) + else if ((type & ConvertHitObjectType.Hold) > 0) { // Note: Hold is generated by BMS converts // Todo: Apparently end time is determined by samples?? // Shouldn't need implementation until mania - result = new Hold + result = new ConvertHold { Position = new Vector2(int.Parse(split[0]), int.Parse(split[1])), NewCombo = combo diff --git a/osu.Game/Rulesets/Objects/Legacy/HitObjectType.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectType.cs similarity index 87% rename from osu.Game/Rulesets/Objects/Legacy/HitObjectType.cs rename to osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectType.cs index 9111e6bd12..09f005e666 100644 --- a/osu.Game/Rulesets/Objects/Legacy/HitObjectType.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectType.cs @@ -6,7 +6,7 @@ using System; namespace osu.Game.Rulesets.Objects.Legacy { [Flags] - public enum HitObjectType + internal enum ConvertHitObjectType { Circle = 1 << 0, Slider = 1 << 1, diff --git a/osu.Game/Rulesets/Objects/Legacy/Hold.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHold.cs similarity index 83% rename from osu.Game/Rulesets/Objects/Legacy/Hold.cs rename to osu.Game/Rulesets/Objects/Legacy/ConvertHold.cs index a0a741e8e7..d79f6e324e 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Hold.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHold.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// /// Legacy Hold-type, used for parsing "specials" in beatmaps. /// - internal sealed class Hold : HitObject, IHasPosition, IHasCombo, IHasHold + internal sealed class ConvertHold : HitObject, IHasPosition, IHasCombo, IHasHold { public Vector2 Position { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertSlider.cs similarity index 90% rename from osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs rename to osu.Game/Rulesets/Objects/Legacy/ConvertSlider.cs index 96a671fcef..06391a9906 100644 --- a/osu.Game/Rulesets/Objects/Legacy/LegacySlider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertSlider.cs @@ -9,7 +9,7 @@ using osu.Game.Audio; namespace osu.Game.Rulesets.Objects.Legacy { - internal class LegacySlider : HitObject, IHasCurve + internal abstract class ConvertSlider : HitObject, IHasCurve { public List ControlPoints { get; set; } public CurveType CurveType { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/Hit.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHit.cs similarity index 82% rename from osu.Game/Rulesets/Objects/Legacy/Mania/Hit.cs rename to osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHit.cs index 8e407fcf92..2a65b853b7 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/Hit.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHit.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania /// /// Legacy osu!mania Hit-type, used for parsing Beatmaps. /// - internal sealed class Hit : HitObject, IHasXPosition, IHasCombo + internal sealed class ConvertHit : HitObject, IHasXPosition, IHasCombo { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHitObjectParser.cs similarity index 85% rename from osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs rename to osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHitObjectParser.cs index 0b2e245413..b21857797f 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertHitObjectParser.cs @@ -11,11 +11,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania /// /// A HitObjectParser to parse legacy osu!mania Beatmaps. /// - internal class HitObjectParser : Legacy.HitObjectParser + internal class ConvertHitObjectParser : Legacy.ConvertHitObjectParser { protected override HitObject CreateHit(Vector2 position, bool newCombo) { - return new Hit + return new ConvertHit { X = position.X, NewCombo = newCombo, @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { - return new Slider + return new ConvertSlider { X = position.X, NewCombo = newCombo, @@ -38,7 +38,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania protected override HitObject CreateSpinner(Vector2 position, double endTime) { - return new Spinner + return new ConvertSpinner { X = position.X, EndTime = endTime diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSlider.cs similarity index 80% rename from osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs rename to osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSlider.cs index e92685ee7a..adc0c064bc 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSlider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania /// /// Legacy osu!mania Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : LegacySlider, IHasXPosition, IHasCombo + internal sealed class ConvertSlider : Legacy.ConvertSlider, IHasXPosition, IHasCombo { public float X { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Mania/Spinner.cs b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSpinner.cs similarity index 83% rename from osu.Game/Rulesets/Objects/Legacy/Mania/Spinner.cs rename to osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSpinner.cs index 3937eb003e..f72c5b9894 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Mania/Spinner.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Mania/ConvertSpinner.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania /// /// Legacy osu!mania Spinner-type, used for parsing Beatmaps. /// - internal sealed class Spinner : HitObject, IHasEndTime, IHasXPosition + internal sealed class ConvertSpinner : HitObject, IHasEndTime, IHasXPosition { public double EndTime { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/Hit.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHit.cs similarity index 84% rename from osu.Game/Rulesets/Objects/Legacy/Osu/Hit.cs rename to osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHit.cs index a30ba9b265..0c1000965c 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/Hit.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHit.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu /// /// Legacy osu! Hit-type, used for parsing Beatmaps. /// - internal sealed class Hit : HitObject, IHasPosition, IHasCombo + internal sealed class ConvertHit : HitObject, IHasPosition, IHasCombo { public Vector2 Position { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs similarity index 85% rename from osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs rename to osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs index 61db0f6c25..e45a161f52 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs @@ -11,11 +11,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu /// /// A HitObjectParser to parse legacy osu! Beatmaps. /// - internal class HitObjectParser : Legacy.HitObjectParser + internal class ConvertHitObjectParser : Legacy.ConvertHitObjectParser { protected override HitObject CreateHit(Vector2 position, bool newCombo) { - return new Hit + return new ConvertHit { Position = position, NewCombo = newCombo, @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { - return new Slider + return new ConvertSlider { Position = position, NewCombo = newCombo, @@ -38,7 +38,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu protected override HitObject CreateSpinner(Vector2 position, double endTime) { - return new Spinner + return new ConvertSpinner { Position = position, EndTime = endTime diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSlider.cs similarity index 82% rename from osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs rename to osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSlider.cs index 3ac28f2fd2..75a6d80560 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSlider.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu /// /// Legacy osu! Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : LegacySlider, IHasPosition, IHasCombo + internal sealed class ConvertSlider : Legacy.ConvertSlider, IHasPosition, IHasCombo { public Vector2 Position { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/Spinner.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSpinner.cs similarity index 85% rename from osu.Game/Rulesets/Objects/Legacy/Osu/Spinner.cs rename to osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSpinner.cs index ad3f9637a7..2b2dbe0765 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/Spinner.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertSpinner.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu /// /// Legacy osu! Spinner-type, used for parsing Beatmaps. /// - internal sealed class Spinner : HitObject, IHasEndTime, IHasPosition + internal sealed class ConvertSpinner : HitObject, IHasEndTime, IHasPosition { public double EndTime { get; set; } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/Hit.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHit.cs similarity index 84% rename from osu.Game/Rulesets/Objects/Legacy/Taiko/Hit.cs rename to osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHit.cs index 0a9a8ac64c..7088cc480b 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/Hit.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHit.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko /// /// Legacy osu!taiko Hit-type, used for parsing Beatmaps. /// - internal sealed class Hit : HitObject, IHasCombo + internal sealed class ConvertHit : HitObject, IHasCombo { public bool NewCombo { get; set; } } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHitObjectParser.cs similarity index 84% rename from osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs rename to osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHitObjectParser.cs index 52d0a5e2d4..2de2f217d1 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/HitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertHitObjectParser.cs @@ -11,11 +11,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko /// /// A HitObjectParser to parse legacy osu!taiko Beatmaps. /// - internal class HitObjectParser : Legacy.HitObjectParser + internal class ConvertHitObjectParser : Legacy.ConvertHitObjectParser { protected override HitObject CreateHit(Vector2 position, bool newCombo) { - return new Hit + return new ConvertHit { NewCombo = newCombo, }; @@ -23,7 +23,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko protected override HitObject CreateSlider(Vector2 position, bool newCombo, List controlPoints, double length, CurveType curveType, int repeatCount, List> repeatSamples) { - return new Slider + return new ConvertSlider { NewCombo = newCombo, ControlPoints = controlPoints, @@ -36,7 +36,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko protected override HitObject CreateSpinner(Vector2 position, double endTime) { - return new Spinner + return new ConvertSpinner { EndTime = endTime }; diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSlider.cs similarity index 81% rename from osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs rename to osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSlider.cs index 3666369f74..b472423a1d 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/Slider.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSlider.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko /// /// Legacy osu!taiko Slider-type, used for parsing Beatmaps. /// - internal sealed class Slider : LegacySlider, IHasCombo + internal sealed class ConvertSlider : Legacy.ConvertSlider, IHasCombo { public bool NewCombo { get; set; } } diff --git a/osu.Game/Rulesets/Objects/Legacy/Taiko/Spinner.cs b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSpinner.cs similarity index 84% rename from osu.Game/Rulesets/Objects/Legacy/Taiko/Spinner.cs rename to osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSpinner.cs index 1b296b9533..abef667d91 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Taiko/Spinner.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Taiko/ConvertSpinner.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko /// /// Legacy osu!taiko Spinner-type, used for parsing Beatmaps. /// - internal sealed class Spinner : HitObject, IHasEndTime + internal sealed class ConvertSpinner : HitObject, IHasEndTime { public double EndTime { get; set; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index be50f85c0c..60456602c2 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -109,20 +109,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -135,11 +135,11 @@ - - - - - + + + + + @@ -152,7 +152,7 @@ - + From 1d254f4a56d3de34966793619a0fecdff517dbe9 Mon Sep 17 00:00:00 2001 From: ColdVolcano Date: Sun, 23 Apr 2017 00:13:58 -0500 Subject: [PATCH 21/25] Take MusicController back to life --- osu.Game/Beatmaps/WorkingBeatmap.cs | 4 ++-- osu.Game/Overlays/MusicController.cs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index e9271492e4..6270e780ce 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -18,7 +18,7 @@ namespace osu.Game.Beatmaps public readonly BeatmapSetInfo BeatmapSetInfo; - public readonly Bindable> Mods = new Bindable>(); + public readonly Bindable> Mods = new Bindable>(new Mod[] { }); public readonly bool WithStoryboard; @@ -27,7 +27,7 @@ namespace osu.Game.Beatmaps BeatmapInfo = beatmapInfo; BeatmapSetInfo = beatmapSetInfo; WithStoryboard = withStoryboard; - + Mods.ValueChanged += mods => applyRateAdjustments(); } diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index 9d21a0341c..399c352ee3 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -22,6 +22,7 @@ using osu.Game.Database; using osu.Game.Graphics; using osu.Framework.Graphics.Primitives; using osu.Game.Graphics.Sprites; +using osu.Framework.Extensions; using osu.Framework.Extensions.Color4Extensions; namespace osu.Game.Overlays @@ -293,7 +294,7 @@ namespace osu.Game.Overlays trackManager.SetExclusive(current.Track); current.Track.Start(); beatmapSource.Value = current; - }); + }).ContinueWith(task => Schedule(() => task.ThrowIfFaulted())); updateDisplay(current, isNext ? TransformDirection.Next : TransformDirection.Prev); } From 4b69477531afd5b4ed0f589323e0bfe44d3a021d Mon Sep 17 00:00:00 2001 From: ColdVolcano Date: Sun, 23 Apr 2017 00:41:15 -0500 Subject: [PATCH 22/25] Trim whitespace --- osu.Game/Beatmaps/WorkingBeatmap.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 6270e780ce..616128dab5 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -27,7 +27,7 @@ namespace osu.Game.Beatmaps BeatmapInfo = beatmapInfo; BeatmapSetInfo = beatmapSetInfo; WithStoryboard = withStoryboard; - + Mods.ValueChanged += mods => applyRateAdjustments(); } From 6a05440e6caba16584b4226273dfbbe8c35f8006 Mon Sep 17 00:00:00 2001 From: ColdVolcano Date: Sun, 23 Apr 2017 00:53:21 -0500 Subject: [PATCH 23/25] Only schedule when faulted --- osu.Game/Overlays/MusicController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index 399c352ee3..19e742facb 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -294,7 +294,7 @@ namespace osu.Game.Overlays trackManager.SetExclusive(current.Track); current.Track.Start(); beatmapSource.Value = current; - }).ContinueWith(task => Schedule(() => task.ThrowIfFaulted())); + }).ContinueWith(task => Schedule(() => task.ThrowIfFaulted()), TaskContinuationOptions.OnlyOnFaulted); updateDisplay(current, isNext ? TransformDirection.Next : TransformDirection.Prev); } From 239f19ad0265e35b985ac33b8ac45e623e476099 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 24 Apr 2017 14:10:44 +0900 Subject: [PATCH 24/25] Fix incorrect line endings. --- osu.Game/osu.Game.csproj | 900 +++++++++++++++++++-------------------- 1 file changed, 450 insertions(+), 450 deletions(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 889c6a3c82..c9a3b08713 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -1,451 +1,451 @@ - - - - - Debug - AnyCPU - {0D3FBF8A-7464-4CF7-8C90-3E7886DF2D4D} - Library - Properties - osu.Game - osu.Game - v4.5 - 512 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - 6 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - $(SolutionDir)\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll - - - $(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1341\lib\net45\OpenTK.dll - - - $(SolutionDir)\packages\SharpCompress.0.15.2\lib\net45\SharpCompress.dll - - - $(SolutionDir)\packages\SQLite.Net.Core-PCL.3.1.1\lib\portable-win8+net45+wp8+wpa81+MonoAndroid1+MonoTouch1\SQLite.Net.dll - True - - - $(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net40\SQLite.Net.Platform.Generic.dll - True - - - $(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net4\SQLite.Net.Platform.Win32.dll - True - - - - - - $(SolutionDir)\packages\DotNetZip.1.10.1\lib\net20\DotNetZip.dll - - - $(SolutionDir)\packages\SQLiteNetExtensions.1.3.0\lib\portable-net45+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\SQLiteNetExtensions.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {c76bf5b3-985e-4d39-95fe-97c9c879b83a} - osu.Framework - - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - - - - - osu.licenseheader - - - - - - - - - - + + + + + Debug + AnyCPU + {0D3FBF8A-7464-4CF7-8C90-3E7886DF2D4D} + Library + Properties + osu.Game + osu.Game + v4.5 + 512 + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + 6 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + $(SolutionDir)\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + + + $(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1341\lib\net45\OpenTK.dll + + + $(SolutionDir)\packages\SharpCompress.0.15.2\lib\net45\SharpCompress.dll + + + $(SolutionDir)\packages\SQLite.Net.Core-PCL.3.1.1\lib\portable-win8+net45+wp8+wpa81+MonoAndroid1+MonoTouch1\SQLite.Net.dll + True + + + $(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net40\SQLite.Net.Platform.Generic.dll + True + + + $(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net4\SQLite.Net.Platform.Win32.dll + True + + + + + + $(SolutionDir)\packages\DotNetZip.1.10.1\lib\net20\DotNetZip.dll + + + $(SolutionDir)\packages\SQLiteNetExtensions.1.3.0\lib\portable-net45+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\SQLiteNetExtensions.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {c76bf5b3-985e-4d39-95fe-97c9c879b83a} + osu.Framework + + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + + + osu.licenseheader + + + + + + + + + + \ No newline at end of file From a475f1f23744534e06d72ad93bcff62146c42e54 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 24 Apr 2017 14:16:51 +0900 Subject: [PATCH 25/25] Remove redundant qualifier. --- osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index 5b6de3bff7..ad028e0cee 100644 --- a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Objects.Legacy /// /// A HitObjectParser to parse legacy Beatmaps. /// - internal abstract class ConvertHitObjectParser : Objects.HitObjectParser + internal abstract class ConvertHitObjectParser : HitObjectParser { public override HitObject Parse(string text) {