-
-
Notifications
You must be signed in to change notification settings - Fork 113
/
Copy pathmovement_type.cpp
110 lines (85 loc) · 2.63 KB
/
movement_type.cpp
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
109
110
#include "stdafx.h"
#include "movement_type.h"
#include "tribe.h"
SERIALIZE_DEF(MovementType, traits, tribeSet, sunlightVulnerable, fireResistant, forced, destroyActions, buildBridge, prisoner, farmAnimal)
MovementType::MovementType(EnumSet<MovementTrait> t) : traits(t) {
}
MovementType::MovementType(MovementTrait t) : traits({t}) {
}
MovementType::MovementType(TribeSet tr, EnumSet<MovementTrait> t) : traits(t), tribeSet(tr) {
}
bool MovementType::hasTrait(MovementTrait t) const {
return traits.contains(t);
}
bool MovementType::operator == (const MovementType& o) const {
return traits == o.traits && tribeSet == o.tribeSet && sunlightVulnerable == o.sunlightVulnerable &&
fireResistant == o.fireResistant && forced == o.forced && destroyActions == o.destroyActions &&
buildBridge == o.buildBridge && prisoner == o.prisoner && farmAnimal == o.farmAnimal;
}
const EnumSet<MovementTrait>& MovementType::getTraits() const {
return traits;
}
int MovementType::getHash() const {
return destroyActions.getHash() + traits.getHash() + sunlightVulnerable + 2 * fireResistant + 4 * forced +
8 * buildBridge + prisoner * 16 + farmAnimal * 32;
}
bool MovementType::isCompatible(TribeId id) const {
return !tribeSet || tribeSet->contains(id);
}
MovementType& MovementType::removeTrait(MovementTrait trait) {
traits.erase(trait);
return *this;
}
MovementType& MovementType::addTrait(MovementTrait trait) {
traits.insert(trait);
return *this;
}
MovementType& MovementType::setSunlightVulnerable(bool state) {
sunlightVulnerable = state;
return *this;
}
MovementType& MovementType::setFireResistant(bool state) {
fireResistant = state;
return *this;
}
MovementType& MovementType::setForced(bool state) {
forced = state;
return *this;
}
MovementType& MovementType::setDestroyActions(EnumSet<DestroyAction::Type> d) {
destroyActions = d;
return *this;
}
MovementType& MovementType::setCanBuildBridge(bool can) {
buildBridge = can;
return *this;
}
MovementType& MovementType::setPrisoner(bool p) {
prisoner = p;
return *this;
}
MovementType& MovementType::setFarmAnimal(bool p) {
farmAnimal = p;
return *this;
}
const EnumSet<DestroyAction::Type>& MovementType::getDestroyActions() const {
return destroyActions;
}
bool MovementType::isSunlightVulnerable() const {
return sunlightVulnerable;
}
bool MovementType::isFireResistant() const {
return fireResistant;
}
bool MovementType::isForced() const {
return forced;
}
bool MovementType::canBuildBridge() const {
return buildBridge;
}
bool MovementType::isPrisoner() const {
return prisoner;
}
bool MovementType::isFarmAnimal() const {
return farmAnimal;
}