Skip to content

Commit c17a188

Browse files
committed
Updated unity sample.
1 parent fe7b359 commit c17a188

File tree

2 files changed

+44
-18
lines changed

2 files changed

+44
-18
lines changed

UnityPackage/Samples~/SampleSong (URP)/Scripts/RenderSong.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ public class RenderSong : MonoBehaviour
5353

5454
public int resolution { get; set; } = 192;
5555

56-
public Dictionary<int, int> bpm { get; set; }
56+
public Tempo[] bpmChanges { get; set; }
57+
58+
public TimeSignature[] timeSignatureChanges { get; set; }
5759

5860
public Dictionary<Difficulty, Note[]> difficulties { get; set; }
5961

6062
public Dictionary<int, List<Note>> notesGroupedByHandPosition { get; set; }
6163

62-
public List<BeatBar> beatBars { get; set; }
64+
public BeatBar[] beatBars { get; set; }
6365

6466
private async void Start()
6567
{
@@ -79,12 +81,23 @@ await LoadAudioFileFromPath(
7981

8082
resolution = int.Parse(metadata["Resolution"]);
8183

82-
bpm = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack)
84+
bpmChanges = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack)
8385
.Value);
8486

85-
var lastTick = Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpm);
87+
timeSignatureChanges = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]);
88+
89+
var lastTick =
90+
Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpmChanges, timeSignatureChanges);
8691

87-
bpm.TryAdd(Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution), bpm.Last().Value);
92+
bpmChanges = bpmChanges.Concat(new Tempo[]
93+
{
94+
new()
95+
{
96+
Position = Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution),
97+
BPM = bpmChanges.Last().BPM
98+
}
99+
})
100+
.ToArray();
88101

89102
difficulties = Enum.GetValues(typeof(Difficulty))
90103
.Cast<Difficulty>()
@@ -98,7 +111,7 @@ await LoadAudioFileFromPath(
98111
.GroupBy(note => note.HandPosition)
99112
.ToDictionary(group => group.Key, group => group.ToList());
100113

101-
beatBars = Utilities.CalculateBeatBars(bpm, includeHalfNotes : true);
114+
beatBars = Utilities.CalculateBeatBars(bpmChanges, includeHalfNotes : true);
102115

103116
_audioSource.Play();
104117
}
@@ -154,7 +167,7 @@ private void Update()
154167
}
155168

156169
var tickOffset =
157-
Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpm);
170+
Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpmChanges, timeSignatureChanges);
158171

159172
RenderHitNotes(notesGroupedByHandPosition);
160173

@@ -218,13 +231,13 @@ private void RenderNotes(Dictionary<int, List<Note>> notesGroupedByHandPosition,
218231
}
219232
}
220233

221-
private void RenderBeatBars(List<BeatBar> beatBars, int resolution, int tickOffset)
234+
private void RenderBeatBars(BeatBar[] beatBars, int resolution, int tickOffset)
222235
{
223236
var beatBarMatrix = new List<Matrix4x4>();
224237
var beatBarHalfMatrix = new List<Matrix4x4>();
225238
var beatBarQuarterMatrix = new List<Matrix4x4>();
226239

227-
for (var x = 0; x < beatBars.Count; x += 1)
240+
for (var x = 0; x < beatBars.Length; x += 1)
228241
{
229242
var position = Utilities.ConvertTickToPosition(beatBars[x].Position - tickOffset, resolution) *
230243
_scale;

UnityPackage/Samples~/SampleSong/Scripts/RenderSong.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ public class RenderSong : MonoBehaviour
5353

5454
public int resolution { get; set; } = 192;
5555

56-
public Dictionary<int, int> bpm { get; set; }
56+
public Tempo[] bpmChanges { get; set; }
57+
58+
public TimeSignature[] timeSignatureChanges { get; set; }
5759

5860
public Dictionary<Difficulty, Note[]> difficulties { get; set; }
5961

6062
public Dictionary<int, List<Note>> notesGroupedByHandPosition { get; set; }
6163

62-
public List<BeatBar> beatBars { get; set; }
64+
public BeatBar[] beatBars { get; set; }
6365

6466
private async void Start()
6567
{
@@ -79,12 +81,23 @@ await LoadAudioFileFromPath(
7981

8082
resolution = int.Parse(metadata["Resolution"]);
8183

82-
bpm = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack)
84+
bpmChanges = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack)
8385
.Value);
8486

85-
var lastTick = Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpm);
87+
timeSignatureChanges = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]);
88+
89+
var lastTick =
90+
Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpmChanges, timeSignatureChanges);
8691

87-
bpm.TryAdd(Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution), bpm.Last().Value);
92+
bpmChanges = bpmChanges.Concat(new Tempo[]
93+
{
94+
new()
95+
{
96+
Position = Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution),
97+
BPM = bpmChanges.Last().BPM
98+
}
99+
})
100+
.ToArray();
88101

89102
difficulties = Enum.GetValues(typeof(Difficulty))
90103
.Cast<Difficulty>()
@@ -98,7 +111,7 @@ await LoadAudioFileFromPath(
98111
.GroupBy(note => note.HandPosition)
99112
.ToDictionary(group => group.Key, group => group.ToList());
100113

101-
beatBars = Utilities.CalculateBeatBars(bpm, includeHalfNotes : true);
114+
beatBars = Utilities.CalculateBeatBars(bpmChanges, includeHalfNotes : true);
102115

103116
_audioSource.Play();
104117
}
@@ -154,7 +167,7 @@ private void Update()
154167
}
155168

156169
var tickOffset =
157-
Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpm);
170+
Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpmChanges, timeSignatureChanges);
158171

159172
RenderHitNotes(notesGroupedByHandPosition);
160173

@@ -218,13 +231,13 @@ private void RenderNotes(Dictionary<int, List<Note>> notesGroupedByHandPosition,
218231
}
219232
}
220233

221-
private void RenderBeatBars(List<BeatBar> beatBars, int resolution, int tickOffset)
234+
private void RenderBeatBars(BeatBar[] beatBars, int resolution, int tickOffset)
222235
{
223236
var beatBarMatrix = new List<Matrix4x4>();
224237
var beatBarHalfMatrix = new List<Matrix4x4>();
225238
var beatBarQuarterMatrix = new List<Matrix4x4>();
226239

227-
for (var x = 0; x < beatBars.Count; x += 1)
240+
for (var x = 0; x < beatBars.Length; x += 1)
228241
{
229242
var position = Utilities.ConvertTickToPosition(beatBars[x].Position - tickOffset, resolution) *
230243
_scale;

0 commit comments

Comments
 (0)