Skip to content

Commit aa7b318

Browse files
committed
Added ParseMetaDataFromChartSection method.
1 parent 0f62c7f commit aa7b318

File tree

6 files changed

+79
-0
lines changed

6 files changed

+79
-0
lines changed

RhythmGameUtilities.Tests/ParsersTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ public void TestParseValuesFromChartSections()
3535
Assert.That(sections[NamedSection.Song][11].Value[0], Is.EqualTo("Example Song.ogg"));
3636
}
3737

38+
[Test]
39+
public void TestParseSectionsFromChart()
40+
{
41+
var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART);
42+
43+
var data = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]);
44+
45+
Assert.That(data["Name"], Is.EqualTo("Example Song"));
46+
Assert.That(data["Resolution"], Is.EqualTo("192"));
47+
Assert.That(data["MusicStream"], Is.EqualTo("Example Song.ogg"));
48+
}
49+
3850
[Test]
3951
public void TestParseBpmFromChartSections()
4052
{

RhythmGameUtilities/Scripts/Parsers.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ public static Dictionary<string, KeyValuePair<string, string[]>[]> ParseSections
109109
return sections;
110110
}
111111

112+
public static Dictionary<string, string> ParseMetaDataFromChartSection(
113+
KeyValuePair<string, string[]>[] section)
114+
{
115+
return section.ToDictionary(item => item.Key, x => x.Value.First());
116+
}
117+
112118
public static Dictionary<int, int[]> ParseTimeSignaturesFromChartSection(
113119
KeyValuePair<string, string[]>[] section)
114120
{

UnityPackage/Editor/Tests/ParsersTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ public void TestParseValuesFromChartSections()
3535
Assert.That(sections[NamedSection.Song][11].Value[0], Is.EqualTo("Example Song.ogg"));
3636
}
3737

38+
[Test]
39+
public void TestParseSectionsFromChart()
40+
{
41+
var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART);
42+
43+
var data = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]);
44+
45+
Assert.That(data["Name"], Is.EqualTo("Example Song"));
46+
Assert.That(data["Resolution"], Is.EqualTo("192"));
47+
Assert.That(data["MusicStream"], Is.EqualTo("Example Song.ogg"));
48+
}
49+
3850
[Test]
3951
public void TestParseBpmFromChartSections()
4052
{

UnityPackage/Scripts/Parsers.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ public static Dictionary<string, KeyValuePair<string, string[]>[]> ParseSections
109109
return sections;
110110
}
111111

112+
public static Dictionary<string, string> ParseMetaDataFromChartSection(
113+
KeyValuePair<string, string[]>[] section)
114+
{
115+
return section.ToDictionary(item => item.Key, x => x.Value.First());
116+
}
117+
112118
public static Dictionary<int, int[]> ParseTimeSignaturesFromChartSection(
113119
KeyValuePair<string, string[]>[] section)
114120
{

includes/RhythmGameUtilities/Parsers.hpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,33 @@ std::vector<ChartSection> ParseSectionsFromChart(const char *contents)
100100
return sections;
101101
}
102102

103+
std::map<std::string, std::string>
104+
ParseMetaDataFromChartSection(ChartSection section)
105+
{
106+
auto data = std::map<std::string, std::string>();
107+
108+
for (auto &line : section.lines)
109+
{
110+
data.insert({line.first, line.second.front()});
111+
}
112+
113+
return data;
114+
}
115+
116+
std::map<std::string, std::string>
117+
ParseMetaDataFromChartSections(std::vector<ChartSection> sections)
118+
{
119+
for (auto &section : sections)
120+
{
121+
if (section.name == ToString(NamedSection::Song))
122+
{
123+
return ParseMetaDataFromChartSection(section);
124+
}
125+
}
126+
127+
return std::map<std::string, std::string>();
128+
}
129+
103130
std::map<int, int> ParseTimeSignaturesFromChartSection(ChartSection section)
104131
{
105132
auto timeSignatures = std::map<int, int>();

tests/RhythmGameUtilities/Parsers.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,21 @@ void testParseValuesFromChartSections()
104104
std::cout << ".";
105105
}
106106

107+
void testParseMetaDataFromChartSections()
108+
{
109+
auto sections = ParseSectionsFromChart(contents);
110+
111+
auto lines = ParseMetaDataFromChartSections(sections);
112+
113+
assert(lines.size() == 12);
114+
115+
assert(lines.at("Name") == "Example Song");
116+
assert(lines.at("Resolution") == "192");
117+
assert(lines.at("MusicStream") == "Example Song.ogg");
118+
119+
std::cout << ".";
120+
}
121+
107122
void testParseTimeSignaturesFromChartSections()
108123
{
109124
auto sections = ParseSectionsFromChart(contents);
@@ -153,6 +168,7 @@ int main()
153168
testParseSectionsFromChart();
154169
testParseValuesFromChartSections();
155170

171+
testParseMetaDataFromChartSections();
156172
testParseTimeSignaturesFromChartSections();
157173
testParseBpmFromChartSections();
158174
testParseNotesFromChartSections();

0 commit comments

Comments
 (0)