#include "creature.h" #include "settings.h" #include #include #include #include using namespace std; namespace fs = std::filesystem; void usage(string exename) { cout << "Usage:\n"; string indOpt = " " + exename + " "; string indDesc = " "; cout << indOpt << "[ls] [subfolder]\n"; cout << indDesc << "List creatures and objects.\n"; cout << indOpt << "cp old-path new-path\n"; cout << indDesc << "Copy old-path to new-path.\n"; cout << indOpt << "mv old-path new-path\n"; cout << indDesc << "Move old-path to new-path.\n"; cout << indOpt << "rm path\n"; cout << indDesc << "Remove existing creature, object, or directory.\n"; cout << indOpt << "roll path name\n"; cout << indDesc << "Roll a skill check, save, or attack.\n"; cout << indOpt << "damage path amount [type]\n"; cout << indDesc << "Damage creature by amount. Type defaults to \"force\".\n"; cout << indOpt << "heal path amount\n"; cout << indDesc << "Heal creature by amount.\n"; cout << indOpt << "reset path\n"; cout << indDesc << "Reset creature to full health (as if completing a long rest).\n"; cout << indOpt << "set path field value\n"; cout << indDesc << "Set a field to a new value, where field is any of:\n"; cout << indDesc << " ability (str, dex, con, int, wis, cha); value is new ability score\n"; cout << indDesc << " skill (athletics, \"sleight of hand\", etc.); value is (none|proficient|expert)\n"; cout << indDesc << " name; value is new given name.\n"; cout << indOpt << "add path entry\n"; cout << indDesc << "Add entry to creature, where entry is an item or spell.\n"; cout << indOpt << "help\n"; cout << indDesc << "Show this help.\n"; } void print(string path) { creature::Creature c(utils::loadJson(path)); cout << genText(c); } void list(vector args) { string baseDir = settings::getString("savedir"); vector listPaths; if(args.empty()) { listPaths.push_back(baseDir); } else { for(auto dir : args) { listPaths.push_back(baseDir + "/" + dir); } } for(auto listPath : listPaths) { if(fs::is_regular_file(fs::status(listPath))) { // Try loading and printing stuff about it print(listPath); } else if(fs::is_directory(fs::status(listPath))) { for(fs::directory_entry path : filesystem::directory_iterator(listPath)) { cout << path.path().filename().string(); if(path.is_directory()) { cout << "/"; } cout << "\n"; } } } } void cp(vector args) {} void mv(vector args) {} void rm(vector args) {} void roll(vector args) {} void damage(vector args) {} void heal(vector args) {} void reset(vector args) {} void set(vector args) {} void add(vector args) {} int main(int argc, char *argv[]) { string exename = argv[0]; vector args(&argv[1], &argv[argc]); if(args.empty()) { list(args); return 0; } string cmd = args[0]; vector argsOrig(args); args.erase(args.begin()); if(cmd == "ls") list(args); else if(cmd == "cp") cp(args); else if(cmd == "mv") mv(args); else if(cmd == "rm") rm(args); else if(cmd == "roll") roll(args); else if(cmd == "damage") damage(args); else if(cmd == "heal") heal(args); else if(cmd == "reset") reset(args); else if(cmd == "set") set(args); else if(cmd == "add") add(args); else if(cmd == "help") usage(exename); else list(argsOrig); return 0; }