diff options
Diffstat (limited to 'src/cmd/cmd.cc')
-rw-r--r-- | src/cmd/cmd.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/cmd/cmd.cc b/src/cmd/cmd.cc new file mode 100644 index 0000000..a1fd760 --- /dev/null +++ b/src/cmd/cmd.cc @@ -0,0 +1,54 @@ +#include "cmd.h" +#include "../settings.h" +#include <vector> +#include <string> +#include <filesystem> +#include <algorithm> + +namespace cmd { + std::vector<std::string> 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<rules::Qualifier> parseQualifiers(std::map<std::string, std::string> flags) { + std::vector<rules::Qualifier> 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; + } +} |