forked from miki151/keeperrl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstruction_map.h
More file actions
90 lines (77 loc) · 2.79 KB
/
construction_map.h
File metadata and controls
90 lines (77 loc) · 2.79 KB
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
#pragma once
#include "cost_info.h"
#include "util.h"
#include "unique_entity.h"
#include "position.h"
#include "furniture_type.h"
#include "furniture_layer.h"
#include "resource_id.h"
#include "position_map.h"
class ConstructionMap {
public:
class FurnitureInfo {
public:
FurnitureInfo(FurnitureType, CostInfo);
static FurnitureInfo getBuilt(FurnitureType);
void clearTask();
void reset();
void setTask(UniqueEntity<Task>::Id);
CostInfo getCost() const;
bool isBuilt(Position) const;
bool isBuilt(Position, FurnitureLayer) const;
UniqueEntity<Task>::Id getTask() const;
bool hasTask() const;
FurnitureType getFurnitureType() const;
const Furniture* getBuilt(Position) const;
SERIALIZATION_DECL(FurnitureInfo)
private:
GenericId SERIAL(task);
CostInfo SERIAL(cost);
FurnitureType SERIAL(type);
};
class TrapInfo {
public:
TrapInfo(FurnitureType);
bool isMarked() const;
bool isArmed() const;
FurnitureType getType() const;
void setArmed();
void setMarked();
void reset();
SERIALIZATION_DECL(TrapInfo)
private:
FurnitureType SERIAL(type);
bool SERIAL(armed) = false;
bool SERIAL(marked) = false;
};
optional<const FurnitureInfo&> getFurniture(Position, FurnitureLayer) const;
void setTask(Position, FurnitureLayer, UniqueEntity<Task>::Id);
void removeFurniturePlan(Position, FurnitureLayer);
void onFurnitureDestroyed(Position, FurnitureLayer, FurnitureType);
void addFurniture(Position, const FurnitureInfo&, FurnitureLayer);
bool containsFurniture(Position, FurnitureLayer) const;
int getBuiltCount(FurnitureType) const;
int getTotalCount(FurnitureType) const;
const PositionSet& getBuiltPositions(FurnitureType) const;
void onConstructed(Position, FurnitureType);
void clearUnsupportedFurniturePlans();
optional<const TrapInfo&> getTrap(Position) const;
optional<TrapInfo&> getTrap(Position);
void removeTrap(Position);
void addTrap(Position, const TrapInfo&);
const vector<pair<Position, FurnitureLayer>>& getAllFurniture() const;
const vector<Position>& getAllTraps() const;
int getDebt(CollectiveResourceId) const;
template <class Archive>
void serialize(Archive& ar, const unsigned int version);
private:
void checkDebtConsistency();
EnumMap<FurnitureLayer, PositionMap<FurnitureInfo>> SERIAL(furniture);
unordered_map<FurnitureType, PositionSet, CustomHash<FurnitureType>> SERIAL(furniturePositions);
unordered_map<FurnitureType, int, CustomHash<FurnitureType>> SERIAL(unbuiltCounts);
vector<pair<Position, FurnitureLayer>> SERIAL(allFurniture);
PositionMap<TrapInfo> SERIAL(traps);
vector<Position> SERIAL(allTraps);
unordered_map<CollectiveResourceId, int, CustomHash<CollectiveResourceId>> SERIAL(debt);
void addDebt(const CostInfo&);
};