-
-
Notifications
You must be signed in to change notification settings - Fork 122
Expand file tree
/
Copy pathbuild_info.cpp
More file actions
53 lines (48 loc) · 2.49 KB
/
build_info.cpp
File metadata and controls
53 lines (48 loc) · 2.49 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
#include "stdafx.h"
#include "build_info.h"
#include "collective.h"
#include "technology.h"
#include "furniture.h"
#include "view_index.h"
#include "zones.h"
bool BuildInfo::meetsRequirement(const Collective* col, Requirement req) {
return req.visit(
[&](TechId techId) { return col->getTechnology().researched.count(techId);},
[&](BuildInfo::DungeonLevel level) { return col->getDungeonLevel().level + 1>= level; }
);
}
TString BuildInfo::getRequirementText(Requirement req, const ContentFactory* factory) {
return req.visit(
[&](TechId techId) { return TSentence("MISSING_TECHNOLOGY", factory->technology.getName(techId));},
[&](BuildInfo::DungeonLevel level) { return TSentence("DUNGEON_LEVEL_REQUIREMENT", TString(level)); }
);
}
bool BuildInfo::canSelectRectangle() const {
return type.visit<bool>(
[](const auto&) { return true; },
[](const BuildInfoTypes::PlaceItem&) { return false; }
);
}
static TString getNameHelper(const BuildInfoTypes::BuildType& type, const ContentFactory* factory) {
return type.visit<TString>(
[&](const BuildInfoTypes::Furniture& f) { return factory->furniture.getData(f.types[0]).getName(); },
[&](const BuildInfoTypes::ClaimTile& e) { return TStringId("BUILD_MENU_CLAIM_TILE"); },
[&](const BuildInfoTypes::UnclaimTile& e) { return TStringId("BUILD_MENU_UNCLAIM_TILE"); },
[&](const BuildInfoTypes::Dig& e) { return TStringId("BUILD_MENU_DIG"); },
[&](const BuildInfoTypes::CutTree& e) { return TStringId("BUILD_MENU_CUT_TREE"); },
[&](const BuildInfoTypes::Dispatch& e) { return TStringId("BUILD_MENU_PRIORITIZE"); },
[&](const BuildInfoTypes::ForbidZone& e) { return TStringId("FORBIDDEN_ZONE_HIGHLIGHT"); },
[&](const BuildInfoTypes::PlaceMinion& e) { return TStringId("BUILD_MENU_PLACE_MINION"); },
[&](const BuildInfoTypes::ImmediateDig& e) { return TStringId("BUILD_MENU_IMMEDIATE_DIG"); },
[&](const BuildInfoTypes::PlaceItem& e) { return TStringId("BUILD_MENU_PLACE_ITEM"); },
[&](const BuildInfoTypes::Zone& e) { return *getDescription(getHighlight(e)); },
[&](const BuildInfoTypes::Chain& e) { return getNameHelper(e.front(), factory); },
[&](const BuildInfoTypes::DestroyLayers& e) { return TString("no name"_s); },
[&](const BuildInfoTypes::FillPit& e) { return TStringId("BUILD_MENU_FILL_PIT"); }
);
}
const TString& BuildInfo::getName(const ContentFactory* factory) const {
if (name.empty())
name = getNameHelper(type, factory);
return name;
}