/
movement_set.h
36 lines (28 loc) · 915 Bytes
/
movement_set.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
#pragma once
class MovementType;
class Tribe;
#include "util.h"
#include "movement_type.h"
class MovementSet {
public:
MovementSet(TribeId);
bool canEnter(const MovementType&, bool covered, bool onFire, const optional<TribeId>& forbidden) const;
bool canEnter(const MovementType&) const;
bool hasTrait(MovementTrait) const;
bool blocksPrisoners() const;
MovementSet& addTrait(MovementTrait);
MovementSet& removeTrait(MovementTrait);
MovementSet& addForcibleTrait(MovementTrait);
MovementSet& setBlockingEnemies();
TribeId getTribe() const;
void setTribe(TribeId);
MovementSet& clearTraits();
SERIALIZATION_DECL(MovementSet)
private:
EnumSet<MovementTrait> SERIAL(traits);
EnumSet<MovementTrait> SERIAL(forcibleTraits);
bool SERIAL(blockingEnemies) = false;
bool SERIAL(blockingPrisoners) = false;
bool SERIAL(blockingFarmAnimals) = false;
TribeId SERIAL(tribe);
};