-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRivalry.h
99 lines (92 loc) · 3.7 KB
/
Rivalry.h
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
#ifndef RIVALRY_H
#define RIVALRY_H
#include "complication.h"
class Rivalry: public Complication
{
public:
Rivalry(): Complication() { }
Rivalry(const Rivalry& ac)
: Complication()
, v(ac.v) { }
Rivalry(Rivalry&& ac)
: Complication()
, v(ac.v) { }
Rivalry(const QJsonObject& json)
: Complication()
, v { json["intensity"].toInt(0), json["nature"].toInt(0), json["pc"].toBool(false), json["power"].toInt(0), json["unaware"].toBool(false), json["who"].toString("") } { }
Rivalry& operator=(const Rivalry& ac) {
if (this != &ac) v = ac.v;
return *this;
}
Rivalry& operator=(Rivalry&& ac) {
v = ac.v;;
return *this;
}
QString description() override {
static QList<QString> natr { "", "Professional", "Romantic", "Professional and Romantic" };
static QList<QString> powr { "", "Less Powerful", "As Powerful", "More Powerful", "Significatly More Powerful" };
static QList<QString> intn { "", "Outdo, Embaraass, or Humiliate", "Maim, or Kill" };
if (v._nature < 1 || v._power < 1 || v._intensity < 1 || v._who.isEmpty()) return "<incomplete>";
QString result = QString("Rivalry: %1 (%2; %3; %4").arg(v._who, natr[v._nature], powr[v._power], intn[v._intensity]);
if (v._unaware) result += "; Unaware";
if (v._pc) result += "; is a PC";
return result + ")";
}
void form(QWidget* parent, QVBoxLayout* layout) override {
who = createLineEdit(parent, layout, "Who is the rival?");
nature = createComboBox(parent, layout, "Nature of the Rivalry", { "", "Professional", "Romantic", "Professional and Romantic" });
unaware = createCheckBox(parent, layout, "Rival is Unaware of Rivalry");
pc = createCheckBox(parent, layout, "Rival is a PC");
power = createComboBox(parent, layout, "Power of the Rival", { "", "Less Powerful", "As Powerful", "More Powerful", "Significatly More Powerful" });
intensity = createComboBox(parent, layout, "Intesity of Rivalry", { "", "Outdo, Embaraass, or Humiliate", "Maim, or Kill" });
}
Points points(bool noStore = false) override {
if (!noStore) store();
return v._intensity * 5_cp + ((v._nature < 3) ? 5_cp : 10_cp) + (v._unaware ? 5_cp : 0_cp) + (v._pc ? 5_cp : 0_cp) + v._power * 5_cp + (v._intensity - 1) * 5_cp;
}
void restore() override {
vars s = v;
who->setText(s._who);
intensity->setCurrentIndex(s._intensity);
nature->setCurrentIndex(s._nature);
pc->setChecked(s._pc);
power->setCurrentIndex(s._power);
unaware->setChecked(s._unaware);
v = s;
}
void store() override {
v._who = who->text();
v._intensity = intensity->currentIndex();
v._nature = nature->currentIndex();
v._pc = pc->isChecked();
v._power = power->currentIndex();
v._unaware = unaware->isChecked();
}
QJsonObject toJson() override {
QJsonObject obj;
obj["name"] = "Rivalry";
obj["intensity"] = v._intensity;
obj["nature"] = v._nature;
obj["pc"] = v._pc;
obj["power"] = v._power;
obj["unaware"] = v._unaware;
obj["who"] = v._who;
return obj;
}
private:
struct vars {
int _intensity = -1;
int _nature = -1;
bool _pc = false;
int _power = -1;
bool _unaware = false;
QString _who = "";
} v;
QComboBox* intensity;
QComboBox* nature;
QCheckBox* pc;
QComboBox* power;
QCheckBox* unaware;
QLineEdit* who;
};
#endif // RIVALRY_H