#include "cmd.h" #include "../settings.h" #include #include #include #include namespace cmd { std::vector getVirtDirs() { return {"weapons", "armor", "spells", "creatures"}; } // Not idempotent: only do once! std::filesystem::path getTruePath(std::filesystem::path virtPath) { std::filesystem::path p; auto virtPaths = getVirtDirs(); if(std::find(virtPaths.begin(), virtPaths.end(), *virtPath.begin()) != virtPaths.end()) { p = settings::getString(*virtPath.begin()); // Erase root (part to be replaced by virtPaths) std::filesystem::path tmp; auto it = virtPath.begin(); while(++it != virtPath.end()) { tmp /= *it; } virtPath = tmp; } else { p = settings::getString("savedir"); } p /= virtPath; if(std::filesystem::directory_entry(p.string() + ".json").is_regular_file()) return p.string() + ".json"; return p; } std::string formatRoll(std::string name, std::string type, int rolled, int bonus) { std::stringstream text; text << name << " " << type << ": " << rolled << " (d20) + " << bonus << " (" << name << " " << type << " bonus) = " << rolled + bonus << std::endl; return text.str(); } std::vector parseQualifiers(std::map flags) { std::vector qualifiers; for(auto flagPair : flags) { auto flag = flagPair.first; if(flag == "m" || flag == "magical") { qualifiers.push_back(rules::Qualifier::Magical()); } else if(flag == "s" || flag == "silvered") { qualifiers.push_back(rules::Qualifier::Silvered()); } else if(flag == "a" || flag == "adamantine") { qualifiers.push_back(rules::Qualifier::Adamantine()); } } return qualifiers; } }