diff --git a/RhythmGameUtilities/Scripts/Utilities.cs b/RhythmGameUtilities/Scripts/Utilities.cs index e2e2b38..ecd511d 100644 --- a/RhythmGameUtilities/Scripts/Utilities.cs +++ b/RhythmGameUtilities/Scripts/Utilities.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; @@ -101,17 +102,48 @@ public static float InverseLerp(float a, float b, float v) return UtilitiesInternal.InverseLerp(a, b, v); } - public static List GenerateAdjacentKeyPairs(Dictionary dictionary) + public static List CalculateBeatBars(Dictionary bpmChanges, int resolution = 192, int ts = 4, + bool includeHalfNotes = true) + { + var beatBars = new List(); + + var keyValuePairs = GenerateAdjacentKeyPairs(bpmChanges); + + foreach (var (startTick, endTick) in keyValuePairs) + { + for (var tick = startTick; tick <= endTick; tick += resolution) + { + beatBars.Add(new BeatBar + { + Position = tick, BPM = bpmChanges[startTick], TimeSignature = new[] { ts } + }); + + if (includeHalfNotes && tick != endTick) + { + beatBars.Add(new BeatBar + { + Position = tick + resolution / 2, + BPM = bpmChanges[startTick], + TimeSignature = new[] { ts } + }); + } + } + } + + return beatBars; + } + + public static List> GenerateAdjacentKeyPairs(Dictionary dictionary) { var keys = dictionary.Keys.ToList(); keys.Sort(); - var adjacentKeyPairs = new List(); + var adjacentKeyPairs = new List>(); for (var i = 0; i < keys.Count - 1; i += 1) { - adjacentKeyPairs.Add(new[] { keys[i], keys[i + 1] }); + adjacentKeyPairs.Add(new Tuple(keys[i], keys[i + 1])); } return adjacentKeyPairs; diff --git a/RhythmGameUtilities/Structs/Song.cs b/RhythmGameUtilities/Structs/Song.cs index d631a39..1582516 100644 --- a/RhythmGameUtilities/Structs/Song.cs +++ b/RhythmGameUtilities/Structs/Song.cs @@ -122,7 +122,7 @@ public List BeatBars { if (_beatBars.Count == 0) { - _beatBars = CalculateBeatBars(BPM); + _beatBars = Utilities.CalculateBeatBars(BPM); } return _beatBars; @@ -198,35 +198,6 @@ public int[] GetCurrentTimeSignature(Note note) return TimeSignatures.Last(item => item.Key <= note.Position).Value; } - public static List CalculateBeatBars(Dictionary bpm, int resolution = 192, int ts = 4, - bool includeHalfNotes = true) - { - var newBpm = new List(); - - var keyValuePairs = Utilities.GenerateAdjacentKeyPairs(bpm); - - foreach (var keys in keyValuePairs) - { - var startTick = keys[0]; - var endTick = keys[1]; - - for (var tick = startTick; tick <= endTick; tick += resolution) - { - newBpm.Add(new BeatBar { Position = tick, BPM = bpm[startTick], TimeSignature = new[] { ts } }); - - if (includeHalfNotes && tick != endTick) - { - newBpm.Add(new BeatBar - { - Position = tick + resolution / 2, BPM = bpm[keys[0]], TimeSignature = new[] { 4 } - }); - } - } - } - - return newBpm; - } - } } diff --git a/UnityPackage/Scripts/Utilities.cs b/UnityPackage/Scripts/Utilities.cs index e2e2b38..ecd511d 100644 --- a/UnityPackage/Scripts/Utilities.cs +++ b/UnityPackage/Scripts/Utilities.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; @@ -101,17 +102,48 @@ public static float InverseLerp(float a, float b, float v) return UtilitiesInternal.InverseLerp(a, b, v); } - public static List GenerateAdjacentKeyPairs(Dictionary dictionary) + public static List CalculateBeatBars(Dictionary bpmChanges, int resolution = 192, int ts = 4, + bool includeHalfNotes = true) + { + var beatBars = new List(); + + var keyValuePairs = GenerateAdjacentKeyPairs(bpmChanges); + + foreach (var (startTick, endTick) in keyValuePairs) + { + for (var tick = startTick; tick <= endTick; tick += resolution) + { + beatBars.Add(new BeatBar + { + Position = tick, BPM = bpmChanges[startTick], TimeSignature = new[] { ts } + }); + + if (includeHalfNotes && tick != endTick) + { + beatBars.Add(new BeatBar + { + Position = tick + resolution / 2, + BPM = bpmChanges[startTick], + TimeSignature = new[] { ts } + }); + } + } + } + + return beatBars; + } + + public static List> GenerateAdjacentKeyPairs(Dictionary dictionary) { var keys = dictionary.Keys.ToList(); keys.Sort(); - var adjacentKeyPairs = new List(); + var adjacentKeyPairs = new List>(); for (var i = 0; i < keys.Count - 1; i += 1) { - adjacentKeyPairs.Add(new[] { keys[i], keys[i + 1] }); + adjacentKeyPairs.Add(new Tuple(keys[i], keys[i + 1])); } return adjacentKeyPairs; diff --git a/UnityPackage/Structs/Song.cs b/UnityPackage/Structs/Song.cs index d631a39..1582516 100644 --- a/UnityPackage/Structs/Song.cs +++ b/UnityPackage/Structs/Song.cs @@ -122,7 +122,7 @@ public List BeatBars { if (_beatBars.Count == 0) { - _beatBars = CalculateBeatBars(BPM); + _beatBars = Utilities.CalculateBeatBars(BPM); } return _beatBars; @@ -198,35 +198,6 @@ public int[] GetCurrentTimeSignature(Note note) return TimeSignatures.Last(item => item.Key <= note.Position).Value; } - public static List CalculateBeatBars(Dictionary bpm, int resolution = 192, int ts = 4, - bool includeHalfNotes = true) - { - var newBpm = new List(); - - var keyValuePairs = Utilities.GenerateAdjacentKeyPairs(bpm); - - foreach (var keys in keyValuePairs) - { - var startTick = keys[0]; - var endTick = keys[1]; - - for (var tick = startTick; tick <= endTick; tick += resolution) - { - newBpm.Add(new BeatBar { Position = tick, BPM = bpm[startTick], TimeSignature = new[] { ts } }); - - if (includeHalfNotes && tick != endTick) - { - newBpm.Add(new BeatBar - { - Position = tick + resolution / 2, BPM = bpm[keys[0]], TimeSignature = new[] { 4 } - }); - } - } - } - - return newBpm; - } - } }