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
|
#pragma once
#include "jsonable.h"
#include <vector>
#include <map>
#include <string>
#include <iostream>
using namespace std;
namespace rules {
class Ability : public Jsonable {
public:
string getFull() const {return abilities.at(getAbbrev());}
string getAbbrev() const {return abbrev;}
operator string() const {return getAbbrev();}
virtual nlohmann::json toJson(void) const {
return getAbbrev();
}
bool operator<(const Ability& rhs) const {return getAbbrev() < rhs.getAbbrev();}
bool operator==(const Ability& rhs) const {return getAbbrev() == rhs.getAbbrev();}
Ability() {}
explicit Ability(const nlohmann::json& data) : abbrev(data) {}
virtual ~Ability() {}
static Ability Str() {return Ability("str");}
static Ability Dex() {return Ability("dex");}
static Ability Con() {return Ability("con");}
static Ability Int() {return Ability("int");}
static Ability Wis() {return Ability("wis");}
static Ability Cha() {return Ability("cha");}
private:
const string abbrev;
const map<string, string> abilities {
{"str", "Strength"},
{"dex", "Dexterity"},
{"con", "Constitution"},
{"int", "Intelligence"},
{"wis", "Wisdom"},
{"cha", "Charisma"}
};
};
class Skill : public Jsonable {
public:
string getName() const {return name;}
Ability getAbility() const {return Ability(skill2ability.at(getName()));}
virtual nlohmann::json toJson(void) const {
return getName();
}
bool operator<(const Skill& rhs) const {return getName() < rhs.getName();}
bool operator==(const Skill& rhs) const {return getName() == rhs.getName();}
virtual ~Skill() {}
static Skill Athletics() {return Skill("Athletics");}
static Skill Acrobatics() {return Skill("Acrobatics");}
static Skill SleightOfHand() {return Skill("Sleight of Hand");}
static Skill Stealth() {return Skill("Stealth");}
static Skill Arcana() {return Skill("Arcana");}
static Skill History() {return Skill("History");}
static Skill Investigation() {return Skill("Investigation");}
static Skill Nature() {return Skill("Nature");}
static Skill Religion() {return Skill("Religion");}
static Skill AnimalHandling() {return Skill("Animal Handling");}
static Skill Insight() {return Skill("Insight");}
static Skill Medicine() {return Skill("Medicine");}
static Skill Perception() {return Skill("Perception");}
static Skill Survival() {return Skill("Survival");}
static Skill Deception() {return Skill("Deception");}
static Skill Intimidation() {return Skill("Intimidation");}
static Skill Performance() {return Skill("Performance");}
static Skill Persuasion() {return Skill("Persuasion");}
explicit Skill(const nlohmann::json& data) : name(data) {}
private:
const string name;
const map<string, string> skill2ability {
{"Athletics", "str"},
{"Acrobatics", "dex"},
{"Sleight of Hand", "dex"},
{"Stealth", "dex"},
{"Arcana", "int"},
{"History", "int"},
{"Investigation", "int"},
{"Nature", "int"},
{"Religion", "int"},
{"Animal Handling", "wis"},
{"Insight", "wis"},
{"Medicine", "wis"},
{"Perception", "wis"},
{"Survival", "wis"},
{"Deception", "cha"},
{"Intimidation", "cha"},
{"Performance", "cha"},
{"Persuasion", "cha"}
};
};
}
|