aboutsummaryrefslogtreecommitdiff
path: root/src/dmtool.cc
blob: f9d32ab6dbdd41f747d957aa9f62ab6d1d0a039f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "creature.h"
#include "settings.h"
#include <iostream>
#include <vector>
#include <string>
#include <filesystem>

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<string> args) {
    string baseDir = settings::getString("savedir");
    vector<string> 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<string> args) {}
void mv(vector<string> args) {}
void rm(vector<string> args) {}
void roll(vector<string> args) {}
void damage(vector<string> args) {}
void heal(vector<string> args) {}
void reset(vector<string> args) {}
void set(vector<string> args) {}
void add(vector<string> args) {}

int main(int argc, char *argv[]) {
    string exename = argv[0];
    vector<string> args(&argv[1], &argv[argc]);
    if(args.empty()) {
        list(args);
        return 0;
    }
    string cmd = args[0];
    vector<string> 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;
}