diff options
Diffstat (limited to 'src/factories/mk64/CourseMetadata.cpp')
| -rw-r--r-- | src/factories/mk64/CourseMetadata.cpp | 141 |
1 files changed, 76 insertions, 65 deletions
diff --git a/src/factories/mk64/CourseMetadata.cpp b/src/factories/mk64/CourseMetadata.cpp index 21bb385..57db5b0 100644 --- a/src/factories/mk64/CourseMetadata.cpp +++ b/src/factories/mk64/CourseMetadata.cpp @@ -8,7 +8,9 @@ #define NUM(x) std::dec << std::setfill(' ') << std::setw(6) << x #define COL(c) "0x" << std::hex << std::setw(2) << std::setfill('0') << c -ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { +ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream& write, std::shared_ptr<IParsedData> raw, + std::string& entryName, YAML::Node& node, + std::string* replacement) { auto metadata = std::static_pointer_cast<MetadataData>(raw)->mMetadata; if (metadata.empty()) { @@ -17,9 +19,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: // Sort the data by id, 0 to 20 and beyond. std::sort(metadata.begin(), metadata.end(), - [this](const CourseMetadata& a, const CourseMetadata& b) { - return a.id < b.id; - }); + [this](const CourseMetadata& a, const CourseMetadata& b) { return a.id < b.id; }); std::ofstream file; auto outDir = GetSafeNode<std::string>(node, "out_directory") + "/"; @@ -28,70 +28,80 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: if (!std::filesystem::exists(outDir)) { std::filesystem::create_directory(outDir); } - - file.open(outDir+"gCourseNames.inc.c", std::ios_base::binary | std::ios_base::out); + + file.open(outDir + "gCourseNames.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - // file << "char *gCourseNames[] = {\n" << fourSpaceTab; + // file << "char *gCourseNames[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { - if (m.name == "null") { continue; } + if (m.name == "null") { + continue; + } // Remove debug line once proven that sort worked right (start at id 0 and go up) - SPDLOG_INFO("Processing Course Id: "+std::to_string(m.id)); + SPDLOG_INFO("Processing Course Id: " + std::to_string(m.id)); file << '"' << m.name << "\", "; } file << "\n"; - // file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } else if (file.fail()) { throw std::runtime_error("Course metadata output folder is likely bad or the file is in-use"); } - file.open(outDir+"gCourseDebugNames.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gCourseDebugNames.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - // file << "char *gDebugCourseNames[] = {\n" << fourSpaceTab; + // file << "char *gDebugCourseNames[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { - if (m.name == "null") { continue; } + if (m.name == "null") { + continue; + } file << '"' << m.debugName << "\", "; } file << "\n"; - //file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } - file.open(outDir+"gCupSelectionByCourseId.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gCupSelectionByCourseId.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - //file << "char *gCupSelectionByCourseId[] = {\n" << fourSpaceTab; + // file << "char *gCupSelectionByCourseId[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { - if (m.cup == "null") { continue; } + if (m.cup == "null") { + continue; + } file << m.cup << ", "; } file << "\n"; - // file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } - file.open(outDir+"gPerCupIndexByCourseId.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gPerCupIndexByCourseId.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - //file << "const u8 gPerCupIndexByCourseId[] = {\n" << fourSpaceTab; + // file << "const u8 gPerCupIndexByCourseId[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { - if (m.cupIndex == -1) { continue; } + if (m.cupIndex == -1) { + continue; + } file << m.cupIndex << ", "; } file << "\n"; - //file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } - file.open(outDir+"sCourseLengths.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "sCourseLengths.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { - if (m.courseLength == "null") { continue; } + if (m.courseLength == "null") { + continue; + } file << '"' << m.courseLength << "\", "; } file << "\n"; file.close(); } - file.open(outDir+"cpu_BehaviourLUT.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_BehaviourLUT.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << m.CPUBehaviourLUT << ", "; @@ -101,7 +111,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"cpu_CourseMaximumSeparation.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_CourseMaximumSeparation.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { // file << "f32 gWaypointWidth[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { @@ -112,7 +122,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"cpu_CourseMinimumSeparation.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_CourseMinimumSeparation.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { // file << "f32 gWaypointWidth2[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { @@ -123,34 +133,34 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"D_800DCBB4.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "D_800DCBB4.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - //file << "uintptr_t *D_800DCBB4[] = {\n" << fourSpaceTab; + // file << "uintptr_t *D_800DCBB4[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { file << m.D_800DCBB4 << ", "; } file << "\n"; - //file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } - file.open(outDir+"cpu_SteeringSensitivity.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_SteeringSensitivity.inc.c", std::ios_base::binary | std::ios_base::out); // @WARNING THIS FILE HAS A TRAILING ZERO if (file.is_open()) { - //file << "u16 cpu_SteeringSensitivity[] = {\n" << fourSpaceTab; + // file << "u16 cpu_SteeringSensitivity[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { file << m.steeringSensitivity << ", "; } file << 0; file << "\n"; - //file << "\n};\n\n"; + // file << "\n};\n\n"; file.close(); } - file.open(outDir+"gBombKartSpawns.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gBombKartSpawns.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { - //file << "u16 cpu_SteeringSensitivity[] = {\n" << fourSpaceTab; + // file << "u16 cpu_SteeringSensitivity[] = {\n" << fourSpaceTab; for (const auto& m : metadata) { file << "{ // " << m.name << "\n"; for (const auto& bombKart : m.bombKartSpawns) { @@ -169,7 +179,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"gCoursePathSizes.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gCoursePathSizes.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -190,7 +200,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"cpu_CurveTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_CurveTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -203,7 +213,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"cpu_NormalTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_NormalTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -216,7 +226,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"D_0D0096B8.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "D_0D0096B8.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -229,7 +239,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"cpu_OffTrackTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "cpu_OffTrackTargetSpeed.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -242,7 +252,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"gCoursePathTable.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gCoursePathTable.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -255,7 +265,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"gCoursePathTableUnknown.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "gCoursePathTableUnknown.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -268,7 +278,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"sSkyColors.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "sSkyColors.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -281,7 +291,7 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: file.close(); } - file.open(outDir+"sSkyColors2.inc.c", std::ios_base::binary | std::ios_base::out); + file.open(outDir + "sSkyColors2.inc.c", std::ios_base::binary | std::ios_base::out); if (file.is_open()) { for (const auto& m : metadata) { file << "// " << m.name << "\n"; @@ -296,12 +306,14 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: return std::nullopt; } -ExportResult MK64::CourseMetadataBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement) { +ExportResult MK64::CourseMetadataBinaryExporter::Export(std::ostream& write, std::shared_ptr<IParsedData> raw, + std::string& entryName, YAML::Node& node, + std::string* replacement) { auto properties = std::static_pointer_cast<MetadataData>(raw); auto writer = LUS::BinaryWriter(); WriteHeader(writer, Torch::ResourceType::CourseProperties, 0); - writer.Write((uint32_t) properties->mMetadata.size()); + writer.Write((uint32_t)properties->mMetadata.size()); for (auto m : properties->mMetadata) { writer.Write(m.id); @@ -367,16 +379,17 @@ ExportResult MK64::CourseMetadataBinaryExporter::Export(std::ostream &write, std return std::nullopt; } -std::optional<std::shared_ptr<IParsedData>> MK64::CourseMetadataFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& node) { +std::optional<std::shared_ptr<IParsedData>> MK64::CourseMetadataFactory::parse(std::vector<uint8_t>& buffer, + YAML::Node& node) { auto dir = GetSafeNode<std::string>(node, "input_directory"); - + auto m = Companion::Instance->GetCourseMetadata(); SPDLOG_INFO("RUNNING"); std::vector<CourseMetadata> yamlData; - for (const auto &yamls : m[dir]) { - + for (const auto& yamls : m[dir]) { + if (!yamls["course"]) { - for (auto &node : yamls) { + for (auto& node : yamls) { std::cout << node << std::endl; } throw std::runtime_error("Course yaml missing root label of course\nEx. course:"); @@ -386,19 +399,19 @@ std::optional<std::shared_ptr<IParsedData>> MK64::CourseMetadataFactory::parse(s CourseMetadata data; - data.id = GetSafeNode<uint32_t>(metadata, "id"); - data.name = GetSafeNode<std::string>(metadata, "name"); - data.debugName = GetSafeNode<std::string>(metadata, "debug_name"); - data.cup = GetSafeNode<std::string>(metadata, "cup"); - data.cupIndex = GetSafeNode<int32_t>(metadata, "cup_index"); - data.courseLength = GetSafeNode<std::string>(metadata, "course_length"); + data.id = GetSafeNode<uint32_t>(metadata, "id"); + data.name = GetSafeNode<std::string>(metadata, "name"); + data.debugName = GetSafeNode<std::string>(metadata, "debug_name"); + data.cup = GetSafeNode<std::string>(metadata, "cup"); + data.cupIndex = GetSafeNode<int32_t>(metadata, "cup_index"); + data.courseLength = GetSafeNode<std::string>(metadata, "course_length"); - data.CPUBehaviourLUT = GetSafeNode<std::string>(metadata, "cpu_behaviour_ptr"); - data.kartAIMaximumSeparation = GetSafeNode<std::string>(metadata, "cpu_maximum_separation"); - data.kartAIMinimumSeparation = GetSafeNode<std::string>(metadata, "cpu_minimum_separation"); + data.CPUBehaviourLUT = GetSafeNode<std::string>(metadata, "cpu_behaviour_ptr"); + data.kartAIMaximumSeparation = GetSafeNode<std::string>(metadata, "cpu_maximum_separation"); + data.kartAIMinimumSeparation = GetSafeNode<std::string>(metadata, "cpu_minimum_separation"); - data.D_800DCBB4 = GetSafeNode<std::string>(metadata, "D_800DCBB4"); - data.steeringSensitivity = GetSafeNode<uint32_t>(metadata, "cpu_steering_sensitivity"); + data.D_800DCBB4 = GetSafeNode<std::string>(metadata, "D_800DCBB4"); + data.steeringSensitivity = GetSafeNode<uint32_t>(metadata, "cpu_steering_sensitivity"); SPDLOG_INFO("BEFORE"); for (const auto& bombKart : GetSafeNode<YAML::Node>(metadata, "bomb_kart_spawns")) { data.bombKartSpawns.push_back(BombKartSpawns({ @@ -448,9 +461,7 @@ std::optional<std::shared_ptr<IParsedData>> MK64::CourseMetadataFactory::parse(s data.skyColors2.push_back(value.as<uint16_t>()); } - yamlData.push_back(CourseMetadata( - {data} - )); + yamlData.push_back(CourseMetadata({ data })); } SPDLOG_INFO("END RUNNING"); |
