blob: 2dbc4e34868dc4688e436fc6dba523d12dc1b380 (
plain) (
blame)
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
|
#pragma once
#include "openvic-simulation/economy/BuildingInstance.hpp"
#include "openvic-simulation/pop/Pop.hpp"
#include "openvic-simulation/types/fixed_point/FixedPointMap.hpp"
#include "openvic-simulation/types/HasIdentifier.hpp"
#include "openvic-simulation/types/OrderedContainers.hpp"
namespace OpenVic {
struct ProvinceDefinition;
struct TerrainType;
struct State;
struct Country;
struct Crime;
struct Good;
struct ArmyInstance;
struct NavyInstance;
struct Ideology;
struct Culture;
struct Religion;
struct BuildingTypeManager;
struct ProvinceHistoryEntry;
struct IdeologyManager;
struct IssueManager;
struct ProvinceInstance : HasIdentifier {
friend struct Map;
using life_rating_t = int8_t;
enum struct colony_status_t : uint8_t { STATE, PROTECTORATE, COLONY };
ProvinceDefinition const& PROPERTY(province_definition);
/* Mutable attributes (reset before loading history) */
TerrainType const* PROPERTY(terrain_type);
life_rating_t PROPERTY(life_rating);
colony_status_t PROPERTY(colony_status);
State const* PROPERTY_RW(state);
Country const* PROPERTY(owner);
Country const* PROPERTY(controller);
std::vector<Country const*> PROPERTY(cores);
bool PROPERTY(slave);
Crime const* PROPERTY_RW(crime);
// TODO - change this into a factory-like structure
Good const* PROPERTY(rgo);
IdentifierRegistry<BuildingInstance> IDENTIFIER_REGISTRY(building);
ordered_set<ArmyInstance*> PROPERTY(armies);
ordered_set<NavyInstance*> PROPERTY(navies);
std::vector<Pop> PROPERTY(pops);
Pop::pop_size_t PROPERTY(total_population);
fixed_point_map_t<PopType const*> PROPERTY(pop_type_distribution);
fixed_point_map_t<Ideology const*> PROPERTY(ideology_distribution);
fixed_point_map_t<Culture const*> PROPERTY(culture_distribution);
fixed_point_map_t<Religion const*> PROPERTY(religion_distribution);
ProvinceInstance(ProvinceDefinition const& new_province_definition);
void _add_pop(Pop pop);
void _update_pops();
public:
ProvinceInstance(ProvinceInstance&&) = default;
inline constexpr operator ProvinceDefinition const&() const {
return province_definition;
}
bool expand_building(size_t building_index);
bool add_pop(Pop&& pop);
bool add_pop_vec(std::vector<Pop> const& pop_vec);
size_t get_pop_count() const;
void update_gamestate(Date today);
void tick(Date today);
bool add_army(ArmyInstance& army);
bool remove_army(ArmyInstance& army);
bool add_navy(NavyInstance& navy);
bool remove_navy(NavyInstance& navy);
bool reset(BuildingTypeManager const& building_type_manager);
bool apply_history_to_province(ProvinceHistoryEntry const* entry);
void setup_pop_test_values(
IdeologyManager const& ideology_manager, IssueManager const& issue_manager, Country const& country
);
};
}
|