From b6a4e8f98f68225171a010d87ccdb445d27c38a3 Mon Sep 17 00:00:00 2001 From: Scott Doxey Date: Wed, 25 Sep 2024 09:41:53 -0400 Subject: [PATCH] Added ParseMetaDataFromChartSection method. --- RhythmGameUtilities.Tests/ParsersTest.cs | 12 +++++++++++ RhythmGameUtilities/Scripts/Parsers.cs | 6 ++++++ UnityPackage/Editor/Tests/ParsersTest.cs | 12 +++++++++++ UnityPackage/Scripts/Parsers.cs | 6 ++++++ includes/RhythmGameUtilities/Parsers.hpp | 27 ++++++++++++++++++++++++ tests/RhythmGameUtilities/Parsers.cpp | 16 ++++++++++++++ 6 files changed, 79 insertions(+) diff --git a/RhythmGameUtilities.Tests/ParsersTest.cs b/RhythmGameUtilities.Tests/ParsersTest.cs index 56a65a4..c94155f 100644 --- a/RhythmGameUtilities.Tests/ParsersTest.cs +++ b/RhythmGameUtilities.Tests/ParsersTest.cs @@ -35,6 +35,18 @@ public void TestParseValuesFromChartSections() Assert.That(sections[NamedSection.Song][11].Value[0], Is.EqualTo("Example Song.ogg")); } + [Test] + public void TestParseMetaDataFromChartSection() + { + var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); + + var data = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); + + Assert.That(data["Name"], Is.EqualTo("Example Song")); + Assert.That(data["Resolution"], Is.EqualTo("192")); + Assert.That(data["MusicStream"], Is.EqualTo("Example Song.ogg")); + } + [Test] public void TestParseBpmFromChartSections() { diff --git a/RhythmGameUtilities/Scripts/Parsers.cs b/RhythmGameUtilities/Scripts/Parsers.cs index a3a47e0..23898d4 100644 --- a/RhythmGameUtilities/Scripts/Parsers.cs +++ b/RhythmGameUtilities/Scripts/Parsers.cs @@ -109,6 +109,12 @@ public static Dictionary[]> ParseSections return sections; } + public static Dictionary ParseMetaDataFromChartSection( + KeyValuePair[] section) + { + return section.ToDictionary(item => item.Key, x => x.Value.First()); + } + public static Dictionary ParseTimeSignaturesFromChartSection( KeyValuePair[] section) { diff --git a/UnityPackage/Editor/Tests/ParsersTest.cs b/UnityPackage/Editor/Tests/ParsersTest.cs index 56a65a4..c94155f 100644 --- a/UnityPackage/Editor/Tests/ParsersTest.cs +++ b/UnityPackage/Editor/Tests/ParsersTest.cs @@ -35,6 +35,18 @@ public void TestParseValuesFromChartSections() Assert.That(sections[NamedSection.Song][11].Value[0], Is.EqualTo("Example Song.ogg")); } + [Test] + public void TestParseMetaDataFromChartSection() + { + var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); + + var data = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); + + Assert.That(data["Name"], Is.EqualTo("Example Song")); + Assert.That(data["Resolution"], Is.EqualTo("192")); + Assert.That(data["MusicStream"], Is.EqualTo("Example Song.ogg")); + } + [Test] public void TestParseBpmFromChartSections() { diff --git a/UnityPackage/Scripts/Parsers.cs b/UnityPackage/Scripts/Parsers.cs index a3a47e0..23898d4 100644 --- a/UnityPackage/Scripts/Parsers.cs +++ b/UnityPackage/Scripts/Parsers.cs @@ -109,6 +109,12 @@ public static Dictionary[]> ParseSections return sections; } + public static Dictionary ParseMetaDataFromChartSection( + KeyValuePair[] section) + { + return section.ToDictionary(item => item.Key, x => x.Value.First()); + } + public static Dictionary ParseTimeSignaturesFromChartSection( KeyValuePair[] section) { diff --git a/includes/RhythmGameUtilities/Parsers.hpp b/includes/RhythmGameUtilities/Parsers.hpp index 4147489..7c1bfbc 100644 --- a/includes/RhythmGameUtilities/Parsers.hpp +++ b/includes/RhythmGameUtilities/Parsers.hpp @@ -100,6 +100,33 @@ std::vector ParseSectionsFromChart(const char *contents) return sections; } +std::map +ParseMetaDataFromChartSection(ChartSection section) +{ + auto data = std::map(); + + for (auto &line : section.lines) + { + data.insert({line.first, line.second.front()}); + } + + return data; +} + +std::map +ParseMetaDataFromChartSections(std::vector sections) +{ + for (auto §ion : sections) + { + if (section.name == ToString(NamedSection::Song)) + { + return ParseMetaDataFromChartSection(section); + } + } + + return std::map(); +} + std::map ParseTimeSignaturesFromChartSection(ChartSection section) { auto timeSignatures = std::map(); diff --git a/tests/RhythmGameUtilities/Parsers.cpp b/tests/RhythmGameUtilities/Parsers.cpp index ab854fc..53fb047 100644 --- a/tests/RhythmGameUtilities/Parsers.cpp +++ b/tests/RhythmGameUtilities/Parsers.cpp @@ -104,6 +104,21 @@ void testParseValuesFromChartSections() std::cout << "."; } +void testParseMetaDataFromChartSections() +{ + auto sections = ParseSectionsFromChart(contents); + + auto lines = ParseMetaDataFromChartSections(sections); + + assert(lines.size() == 12); + + assert(lines.at("Name") == "Example Song"); + assert(lines.at("Resolution") == "192"); + assert(lines.at("MusicStream") == "Example Song.ogg"); + + std::cout << "."; +} + void testParseTimeSignaturesFromChartSections() { auto sections = ParseSectionsFromChart(contents); @@ -153,6 +168,7 @@ int main() testParseSectionsFromChart(); testParseValuesFromChartSections(); + testParseMetaDataFromChartSections(); testParseTimeSignaturesFromChartSections(); testParseBpmFromChartSections(); testParseNotesFromChartSections();