Skip to content

Commit a180a10

Browse files
authored
Merge pull request #95 from neogeek/hotfix/update-godot-plugin
[hotfix] Updated Godot plugin.
2 parents 6263eb8 + c3fa19f commit a180a10

File tree

3 files changed

+97
-45
lines changed

3 files changed

+97
-45
lines changed

GodotPlugin/include/rhythm_game_utilities.cpp

Lines changed: 91 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void rhythm_game_utilities::_bind_methods()
5555
ClassDB::bind_static_method(
5656
"rhythm_game_utilities",
5757
D_METHOD("convert_seconds_to_ticks", "seconds", "resolution",
58-
"bpm_changes"),
58+
"bpm_changes", "time_signature_changes"),
5959
&rhythm_game_utilities::convert_seconds_to_ticks);
6060

6161
ClassDB::bind_static_method(
@@ -140,19 +140,24 @@ Dictionary rhythm_game_utilities::parse_sections_from_chart(String contents)
140140
return sections;
141141
}
142142

143-
Dictionary rhythm_game_utilities::parse_bpm_from_chart_section(Array section)
143+
Array rhythm_game_utilities::parse_bpm_from_chart_section(Array section)
144144
{
145-
auto bpm_internal = RhythmGameUtilities::ParseBpmFromChartSection(
145+
auto bpm_changes_internal = RhythmGameUtilities::ParseBpmFromChartSection(
146146
convert_section_to_section_internal(section));
147147

148-
Dictionary bpm;
148+
Array bpm_changes;
149149

150-
for (auto const &[key, val] : bpm_internal)
150+
for (auto &bpm_change_internal : bpm_changes_internal)
151151
{
152-
bpm[key] = bpm_internal[key];
152+
Dictionary bpm_change;
153+
154+
bpm_change["position"] = bpm_change_internal.Position;
155+
bpm_change["bpm"] = bpm_change_internal.BPM;
156+
157+
bpm_changes.append(bpm_change);
153158
}
154159

155-
return bpm;
160+
return bpm_changes;
156161
}
157162

158163
Dictionary rhythm_game_utilities::parse_lyrics_from_chart_section(Array section)
@@ -199,41 +204,86 @@ Array rhythm_game_utilities::parse_notes_from_chart_section(Array section)
199204
{
200205
Dictionary note;
201206

207+
note["position"] = note_internal.Position;
202208
note["hand_position"] = note_internal.HandPosition;
203209
note["length"] = note_internal.Length;
204-
note["position"] = note_internal.Position;
205210

206211
notes.append(note);
207212
}
208213

209214
return notes;
210215
}
211216

212-
Dictionary
213-
rhythm_game_utilities::parse_time_signatures_from_chart_section(Array section)
217+
Array rhythm_game_utilities::parse_time_signatures_from_chart_section(
218+
Array section)
214219
{
215220
auto time_signatures_internal =
216221
RhythmGameUtilities::ParseTimeSignaturesFromChartSection(
217222
convert_section_to_section_internal(section));
218223

219-
Dictionary time_signatures;
224+
Array time_signatures;
220225

221-
for (auto const &[key, val] : time_signatures_internal)
226+
for (auto &time_signature_internal : time_signatures_internal)
222227
{
223-
time_signatures[key] = time_signatures_internal[key];
228+
Dictionary time_signature;
229+
230+
time_signature["position"] = time_signature_internal.Position;
231+
time_signature["numerator"] = time_signature_internal.Numerator;
232+
time_signature["denominator"] = time_signature_internal.Denominator;
233+
234+
time_signatures.append(time_signature);
224235
}
225236

226237
return time_signatures;
227238
}
228239

229240
// Utilities
230241

231-
int rhythm_game_utilities::convert_seconds_to_ticks(float seconds,
232-
int resolution,
233-
Dictionary bpm_changes)
242+
int rhythm_game_utilities::convert_seconds_to_ticks(
243+
float seconds, int resolution, Array bpm_changes,
244+
Array time_signature_changes)
234245
{
246+
std::vector<RhythmGameUtilities::Tempo> bpm_changes_internal;
247+
bpm_changes_internal.reserve(bpm_changes.size());
248+
249+
for (auto i = 0; i < bpm_changes.size(); i += 1)
250+
{
251+
RhythmGameUtilities::Tempo bpm_change_internal;
252+
253+
if (bpm_changes[i].get_type() == Variant::DICTIONARY)
254+
{
255+
Dictionary variant = bpm_changes[i];
256+
257+
bpm_change_internal.Position = variant["position"];
258+
bpm_change_internal.BPM = variant["bpm"];
259+
}
260+
261+
bpm_changes_internal.push_back(bpm_change_internal);
262+
}
263+
264+
std::vector<RhythmGameUtilities::TimeSignature>
265+
time_signature_changes_internal;
266+
time_signature_changes_internal.reserve(time_signature_changes.size());
267+
268+
for (auto i = 0; i < time_signature_changes.size(); i += 1)
269+
{
270+
RhythmGameUtilities::TimeSignature time_signature_internal;
271+
272+
if (time_signature_changes[i].get_type() == Variant::DICTIONARY)
273+
{
274+
Dictionary variant = time_signature_changes[i];
275+
276+
time_signature_internal.Position = variant["position"];
277+
time_signature_internal.Numerator = variant["numerator"];
278+
time_signature_internal.Denominator = variant["denominator"];
279+
}
280+
281+
time_signature_changes_internal.push_back(time_signature_internal);
282+
}
283+
235284
return RhythmGameUtilities::ConvertSecondsToTicks(
236-
seconds, resolution, convert_dictionary_to_map<int, int>(bpm_changes));
285+
seconds, resolution, bpm_changes_internal,
286+
time_signature_changes_internal);
237287
}
238288

239289
float rhythm_game_utilities::convert_tick_to_position(int tick, int resolution)
@@ -262,22 +312,39 @@ float rhythm_game_utilities::calculate_accuracy_ratio(int position,
262312
current_position, delta);
263313
}
264314

265-
Array rhythm_game_utilities::calculate_beat_bars(Dictionary bpm_changes,
315+
Array rhythm_game_utilities::calculate_beat_bars(Array bpm_changes,
266316
int resolution, int ts,
267317
bool include_half_notes)
268318
{
269-
auto beat_bars = RhythmGameUtilities::CalculateBeatBars(
270-
convert_dictionary_to_map<int, int>(bpm_changes), resolution, ts,
271-
include_half_notes);
319+
std::vector<RhythmGameUtilities::Tempo> bpm_changes_internal;
320+
bpm_changes_internal.reserve(bpm_changes.size());
321+
322+
for (auto i = 0; i < bpm_changes.size(); i += 1)
323+
{
324+
RhythmGameUtilities::Tempo bpm_change_internal;
325+
326+
if (bpm_changes[i].get_type() == Variant::DICTIONARY)
327+
{
328+
Dictionary variant = bpm_changes[i];
329+
330+
bpm_change_internal.Position = variant["position"];
331+
bpm_change_internal.BPM = variant["bpm"];
332+
}
333+
334+
bpm_changes_internal.push_back(bpm_change_internal);
335+
}
336+
337+
auto beat_bars_internal = RhythmGameUtilities::CalculateBeatBars(
338+
bpm_changes_internal, resolution, ts, include_half_notes);
272339

273340
Array beat_bars_dictionary_array;
274341

275-
for (auto &beat_bar : beat_bars)
342+
for (auto &beat_bar_internal : beat_bars_internal)
276343
{
277344
Dictionary beat_bar_dictionary;
278345

279-
beat_bar_dictionary["bpm"] = beat_bar.BPM;
280-
beat_bar_dictionary["position"] = beat_bar.Position;
346+
beat_bar_dictionary["position"] = beat_bar_internal.Position;
347+
beat_bar_dictionary["bpm"] = beat_bar_internal.BPM;
281348

282349
beat_bars_dictionary_array.append(beat_bar_dictionary);
283350
}

GodotPlugin/include/rhythm_game_utilities.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,21 @@ class rhythm_game_utilities : public Object
2626

2727
static Dictionary parse_sections_from_chart(String contents);
2828

29-
static Dictionary parse_bpm_from_chart_section(Array section);
29+
static Array parse_bpm_from_chart_section(Array section);
3030

3131
static Dictionary parse_lyrics_from_chart_section(Array section);
3232

3333
static Dictionary parse_meta_data_from_chart_section(Array section);
3434

3535
static Array parse_notes_from_chart_section(Array section);
3636

37-
static Dictionary parse_time_signatures_from_chart_section(Array section);
37+
static Array parse_time_signatures_from_chart_section(Array section);
3838

3939
// Utilities
4040

4141
static int convert_seconds_to_ticks(float seconds, int resolution,
42-
Dictionary bpm_changes);
42+
Array bpm_changes,
43+
Array time_signature_changes);
4344

4445
static float convert_tick_to_position(int tick, int resolution);
4546

@@ -51,6 +52,6 @@ class rhythm_game_utilities : public Object
5152
static float calculate_accuracy_ratio(int position, int current_position,
5253
int delta = 50);
5354

54-
static Array calculate_beat_bars(Dictionary bpm_changes, int resolution,
55-
int ts, bool include_half_notes);
55+
static Array calculate_beat_bars(Array bpm_changes, int resolution, int ts,
56+
bool include_half_notes);
5657
};

GodotPlugin/include/utilities.hpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,6 @@
66

77
using namespace godot;
88

9-
template <typename T1, typename T2>
10-
std::map<T1, T2> convert_dictionary_to_map(Dictionary input)
11-
{
12-
std::map<T1, T2> output;
13-
14-
auto keys = input.keys();
15-
16-
for (auto i = 0; i < keys.size(); i += 1)
17-
{
18-
auto key = keys[i];
19-
output[key] = input[key];
20-
}
21-
22-
return output;
23-
}
24-
259
std::vector<std::pair<std::string, std::vector<std::string>>>
2610
convert_section_to_section_internal(Array section)
2711
{

0 commit comments

Comments
 (0)