Skip to content

Commit aa3e449

Browse files
committed
Added new method.
1 parent 01a0101 commit aa3e449

File tree

7 files changed

+139
-13
lines changed

7 files changed

+139
-13
lines changed

Documentation/API/Utilities/CalculateBeatBars.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,23 @@ int main()
5050
return 0;
5151
}
5252
```
53+
54+
##### Godot
55+
56+
```godot
57+
extends Node
58+
59+
func _ready() -> void:
60+
var resolution = 192;
61+
var timeSignature = 4;
62+
63+
var bpmChanges = {
64+
0: 88000, 3840: 112000, 9984: 89600,
65+
22272: 112000, 33792: 111500, 34560: 112000,
66+
42240: 111980
67+
}
68+
69+
var beatBars = rhythm_game_utilities.calculate_beat_bars(bpmChanges, resolution, timeSignature, true);
70+
71+
print(beatBars)
72+
```

GodotPlugin/include/rhythm_game_utilities.cpp

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "rhythm_game_utilities.h"
22

3-
#include <godot_cpp/variant/dictionary.hpp>
3+
#include "utilities.hpp"
44

55
#include <RhythmGameUtilities/Common.hpp>
66
#include <RhythmGameUtilities/Utilities.hpp>
@@ -45,6 +45,12 @@ void rhythm_game_utilities::_bind_methods()
4545
D_METHOD("calculate_accuracy_ratio", "position", "currentPosition",
4646
"delta"),
4747
&rhythm_game_utilities::calculate_accuracy_ratio);
48+
49+
ClassDB::bind_static_method("rhythm_game_utilities",
50+
D_METHOD("calculate_beat_bars", "bpmChanges",
51+
"resolution", "ts",
52+
"includeHalfNotes"),
53+
&rhythm_game_utilities::calculate_beat_bars);
4854
}
4955

5056
// Common
@@ -65,18 +71,8 @@ int rhythm_game_utilities::convert_seconds_to_ticks(float seconds,
6571
int resolution,
6672
Dictionary bpmChanges)
6773
{
68-
std::map<int, int> bpmChangesMap;
69-
70-
auto keys = bpmChanges.keys();
71-
72-
for (auto i = 0; i < keys.size(); i += 1)
73-
{
74-
auto key = keys[i];
75-
bpmChangesMap[key] = bpmChanges[key];
76-
}
77-
78-
return RhythmGameUtilities::ConvertSecondsToTicks(seconds, resolution,
79-
bpmChangesMap);
74+
return RhythmGameUtilities::ConvertSecondsToTicks(
75+
seconds, resolution, convert_dictionary_to_map<int, int>(bpmChanges));
8076
}
8177

8278
float rhythm_game_utilities::convert_tick_to_position(int tick, int resolution)
@@ -104,3 +100,26 @@ float rhythm_game_utilities::calculate_accuracy_ratio(int position,
104100
return RhythmGameUtilities::CalculateAccuracyRatio(position,
105101
currentPosition, delta);
106102
}
103+
104+
Array rhythm_game_utilities::calculate_beat_bars(Dictionary bpmChanges,
105+
int resolution, int ts,
106+
bool includeHalfNotes)
107+
{
108+
auto beatBars = RhythmGameUtilities::CalculateBeatBars(
109+
convert_dictionary_to_map<int, int>(bpmChanges), resolution, ts,
110+
includeHalfNotes);
111+
112+
Array beatBarsDictionaryArray;
113+
114+
for (auto &beatBar : beatBars)
115+
{
116+
Dictionary beatBarDictionary;
117+
118+
beatBarDictionary["bpm"] = beatBar.BPM;
119+
beatBarDictionary["position"] = beatBar.Position;
120+
121+
beatBarsDictionaryArray.append(beatBarDictionary);
122+
}
123+
124+
return beatBarsDictionaryArray;
125+
}

GodotPlugin/include/rhythm_game_utilities.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <godot_cpp/classes/object.hpp>
44
#include <godot_cpp/core/class_db.hpp>
5+
#include <godot_cpp/variant/array.hpp>
56
#include <godot_cpp/variant/dictionary.hpp>
67
#include <godot_cpp/variant/string.hpp>
78

@@ -34,4 +35,7 @@ class rhythm_game_utilities : public Object
3435

3536
static float calculate_accuracy_ratio(int position, int currentPosition,
3637
int delta = 50);
38+
39+
static Array calculate_beat_bars(Dictionary bpmChanges, int resolution,
40+
int ts, bool includeHalfNotes);
3741
};

GodotPlugin/include/utilities.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#include <map>
4+
5+
#include <godot_cpp/variant/dictionary.hpp>
6+
7+
using namespace godot;
8+
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+
}

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,26 @@ int main()
691691
}
692692
```
693693

694+
##### Godot
695+
696+
```godot
697+
extends Node
698+
699+
func _ready() -> void:
700+
var resolution = 192;
701+
var timeSignature = 4;
702+
703+
var bpmChanges = {
704+
0: 88000, 3840: 112000, 9984: 89600,
705+
22272: 112000, 33792: 111500, 34560: 112000,
706+
42240: 111980
707+
}
708+
709+
var beatBars = rhythm_game_utilities.calculate_beat_bars(bpmChanges, resolution, timeSignature, true);
710+
711+
print(beatBars)
712+
```
713+
694714
#### `Utilities.ConvertSecondsToTicks`
695715

696716
> Languages: `C#` `C++`

RhythmGameUtilities/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,26 @@ int main()
691691
}
692692
```
693693

694+
##### Godot
695+
696+
```godot
697+
extends Node
698+
699+
func _ready() -> void:
700+
var resolution = 192;
701+
var timeSignature = 4;
702+
703+
var bpmChanges = {
704+
0: 88000, 3840: 112000, 9984: 89600,
705+
22272: 112000, 33792: 111500, 34560: 112000,
706+
42240: 111980
707+
}
708+
709+
var beatBars = rhythm_game_utilities.calculate_beat_bars(bpmChanges, resolution, timeSignature, true);
710+
711+
print(beatBars)
712+
```
713+
694714
#### `Utilities.ConvertSecondsToTicks`
695715

696716
> Languages: `C#` `C++`

UnityPackage/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,26 @@ int main()
691691
}
692692
```
693693

694+
##### Godot
695+
696+
```godot
697+
extends Node
698+
699+
func _ready() -> void:
700+
var resolution = 192;
701+
var timeSignature = 4;
702+
703+
var bpmChanges = {
704+
0: 88000, 3840: 112000, 9984: 89600,
705+
22272: 112000, 33792: 111500, 34560: 112000,
706+
42240: 111980
707+
}
708+
709+
var beatBars = rhythm_game_utilities.calculate_beat_bars(bpmChanges, resolution, timeSignature, true);
710+
711+
print(beatBars)
712+
```
713+
694714
#### `Utilities.ConvertSecondsToTicks`
695715

696716
> Languages: `C#` `C++`

0 commit comments

Comments
 (0)