aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/map/Province.hpp
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-06-04 00:39:34 +0200
committer hop311 <hop3114@gmail.com>2024-06-06 19:39:35 +0200
commit37cdd775ac738b2a1264e32471385376e5a34f3a (patch)
treef3a9a107f1bd4b6b6d8035a96ac659bcc15f176b /src/openvic-simulation/map/Province.hpp
parente286cfef29d7c431ba33cd77283e838e6fba05d2 (diff)
Province const/mutable separation + State cleanupconst-mutable
Diffstat (limited to 'src/openvic-simulation/map/Province.hpp')
-rw-r--r--src/openvic-simulation/map/Province.hpp179
1 files changed, 0 insertions, 179 deletions
diff --git a/src/openvic-simulation/map/Province.hpp b/src/openvic-simulation/map/Province.hpp
deleted file mode 100644
index bfbeab2..0000000
--- a/src/openvic-simulation/map/Province.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-#pragma once
-
-#include "openvic-simulation/country/Country.hpp"
-#include "openvic-simulation/economy/BuildingInstance.hpp"
-#include "openvic-simulation/politics/Ideology.hpp"
-#include "openvic-simulation/pop/Pop.hpp"
-#include "openvic-simulation/types/OrderedContainers.hpp"
-
-namespace OpenVic {
- struct Map;
- struct Region;
- struct State;
- struct Crime;
- struct Good;
- struct TerrainType;
- struct TerrainTypeMapping;
- struct ProvinceHistoryEntry;
- struct ProvinceSetModifier;
- using Climate = ProvinceSetModifier;
- using Continent = ProvinceSetModifier;
- struct ArmyInstance;
- struct NavyInstance;
-
- /* REQUIREMENTS:
- * MAP-5, MAP-7, MAP-8, MAP-43, MAP-47
- * POP-22
- */
- struct Province : HasIdentifierAndColour {
- friend struct Map;
-
- using index_t = uint16_t;
- using life_rating_t = int8_t;
- using distance_t = fixed_point_t;
-
- enum struct colony_status_t : uint8_t { STATE, PROTECTORATE, COLONY };
-
- struct adjacency_t {
- using data_t = uint8_t;
- static constexpr data_t NO_CANAL = 0;
-
- enum struct type_t : uint8_t {
- LAND, /* Between two land provinces */
- WATER, /* Between two water provinces */
- COASTAL, /* Between a land province and a water province */
- IMPASSABLE, /* Between two land provinces (non-traversable) */
- STRAIT, /* Between two land provinces with a water through province */
- CANAL /* Between two water provinces with a land through province */
- };
-
- /* Type display name used for logging */
- static std::string_view get_type_name(type_t type);
-
- private:
- Province const* PROPERTY(to);
- Province const* PROPERTY(through);
- distance_t PROPERTY(distance);
- type_t PROPERTY(type);
- data_t PROPERTY(data); // represents canal index, 0 for non-canal adjacencies
-
- public:
- adjacency_t(
- Province const* new_to, distance_t new_distance, type_t new_type, Province const* new_through, data_t new_data
- );
- adjacency_t(adjacency_t const&) = delete;
- adjacency_t(adjacency_t&&) = default;
- adjacency_t& operator=(adjacency_t const&) = delete;
- adjacency_t& operator=(adjacency_t&&) = default;
- };
-
- struct province_positions_t {
- /* Province name placement */
- std::optional<fvec2_t> text_position;
- std::optional<fixed_point_t> text_rotation;
- std::optional<fixed_point_t> text_scale;
-
- /* Model positions */
- std::optional<fvec2_t> unit;
- std::optional<fvec2_t> city;
- std::optional<fvec2_t> factory;
- std::optional<fvec2_t> building_construction;
- std::optional<fvec2_t> military_construction;
- ordered_map<BuildingType const*, fvec2_t> building_position;
- fixed_point_map_t<BuildingType const*> building_rotation;
- };
-
- static constexpr index_t NULL_INDEX = 0, MAX_INDEX = std::numeric_limits<index_t>::max();
-
- private:
- /* Immutable attributes (unchanged after initial game load) */
- const index_t PROPERTY(index);
- Region const* PROPERTY(region);
- Climate const* PROPERTY(climate);
- Continent const* PROPERTY(continent);
- bool PROPERTY(on_map);
- bool PROPERTY(has_region);
- bool PROPERTY_CUSTOM_PREFIX(water, is);
- bool PROPERTY_CUSTOM_PREFIX(coastal, is);
- bool PROPERTY_CUSTOM_PREFIX(port, has);
- Province const* PROPERTY(port_adjacent_province);
- /* Terrain type calculated from terrain image */
- TerrainType const* PROPERTY(default_terrain_type);
-
- std::vector<adjacency_t> PROPERTY(adjacencies);
- /* Calculated mean pixel position. */
- fvec2_t PROPERTY(centre);
- province_positions_t positions;
-
- /* 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);
-
- Province(std::string_view new_identifier, colour_t new_colour, index_t new_index);
-
- void _add_pop(Pop pop);
-
- public:
- Province(Province&&) = default;
-
- bool operator==(Province const& other) const;
- std::string to_string() const;
-
- /* The positions' y coordinates need to be inverted. */
- bool load_positions(Map const& map, BuildingTypeManager const& building_type_manager, ast::NodeCPtr root);
-
- fvec2_t get_text_position() const;
- fixed_point_t get_text_rotation() const;
- fixed_point_t get_text_scale() const;
-
- bool expand_building(size_t building_index);
- /* This returns a pointer to the position of the specified building type, or nullptr if none exists. */
- fvec2_t const* get_building_position(BuildingType const* building_type) const;
- fixed_point_t get_building_rotation(BuildingType const* building_type) const;
-
- bool add_pop(Pop&& pop);
- bool add_pop_vec(std::vector<Pop> const& pop_vec);
- size_t get_pop_count() const;
- void update_pops();
-
- void update_gamestate(Date today);
- void tick(Date today);
-
- adjacency_t const* get_adjacency_to(Province const* province) const;
- bool is_adjacent_to(Province const* province) const;
- std::vector<adjacency_t const*> get_adjacencies_going_through(Province const* province) const;
- bool has_adjacency_going_through(Province const* province) const;
-
- fvec2_t get_unit_position() const;
- 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
- );
- };
-}