-
-
Notifications
You must be signed in to change notification settings - Fork 113
/
Copy pathconstruction_map.h
73 lines (62 loc) · 2.42 KB
/
construction_map.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
#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"
#include "storage_id.h"
#include "storage_positions.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, 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);
};
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();
const vector<pair<Position, FurnitureLayer>>& getAllFurniture() const;
int getDebt(CollectiveResourceId) const;
const StoragePositions& getStoragePositions(StorageId) const;
StoragePositions& getStoragePositions(StorageId);
const StoragePositions& getAllStoragePositions() const;
StoragePositions& getAllStoragePositions();
template <class Archive>
void serialize(Archive& ar, const unsigned int version);
void checkDebtConsistency();
private:
EnumMap<FurnitureLayer, PositionMap<FurnitureInfo>> SERIAL(furniture);
HashMap<FurnitureType, PositionSet> SERIAL(furniturePositions);
HashMap<FurnitureType, int> SERIAL(unbuiltCounts);
vector<pair<Position, FurnitureLayer>> SERIAL(allFurniture);
HashMap<CollectiveResourceId, int> SERIAL(debt);
void addDebt(const CostInfo&, const char* reason);
HashMap<StorageId, StoragePositions> SERIAL(storagePositions);
StoragePositions SERIAL(allStoragePositions);
};