From 42d95d50fd6f8d41db71ff7f42d1260df84c1c1d Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Thu, 28 Mar 2024 22:19:27 -0600 Subject: WIP Collision factory --- src/Companion.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/Companion.cpp') diff --git a/src/Companion.cpp b/src/Companion.cpp index 1f95e63..477edeb 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -32,6 +32,7 @@ #include "factories/sm64/DictionaryFactory.h" #include "factories/sm64/TextFactory.h" #include "factories/sm64/GeoLayoutFactory.h" +#include "factories/sm64/CollisionFactory.h" #include "factories/mk64/CourseVtx.h" #include "factories/mk64/Waypoints.h" @@ -85,6 +86,7 @@ void Companion::Init(const ExportType type) { this->RegisterFactory("SM64:DICTIONARY", std::make_shared()); this->RegisterFactory("SM64:ANIM", std::make_shared()); this->RegisterFactory("SM64:GEO_LAYOUT", std::make_shared()); + this->RegisterFactory("SM64:COLLISION", std::make_shared()); // MK64 specific this->RegisterFactory("MK64:COURSE_VTX", std::make_shared()); @@ -395,6 +397,14 @@ void Companion::ParseCurrentFileConfig(YAML::Node node) { this->gCurrentVram = { addr, offset }; } + if(node["dependencies"]) { + auto deps = node["dependencies"]; + for(auto dep = deps.begin(); dep != deps.end(); ++dep) { + this->gDependencies + this->gFileHeader += line->as() + "\n"; + } + } + this->gEnablePadGen = GetSafeNode(node, "autopads", true); } @@ -991,6 +1001,21 @@ std::optional Companion::GetEnumFromValue(const std::string& key, i return this->gEnums[key][id]; } +std::optional Companion::GetValueFromEnum(const std::string& key, const std::string& value) { + if(!this->gEnums.contains(key)){ + return std::nullopt; + } + + for(auto& [id, name] : this->gEnums[key]){ + if(name == value){ + return id; + } + } + + return std::nullopt; +} + + std::optional Companion::GetFileOffsetFromSegmentedAddr(const uint8_t segment) const { auto segments = this->gConfig.segment; -- cgit v1.2.3