aboutsummaryrefslogtreecommitdiff
path: root/extension/src/openvic2/map/Province.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src/openvic2/map/Province.cpp')
-rw-r--r--extension/src/openvic2/map/Province.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/extension/src/openvic2/map/Province.cpp b/extension/src/openvic2/map/Province.cpp
new file mode 100644
index 0000000..4360bce
--- /dev/null
+++ b/extension/src/openvic2/map/Province.cpp
@@ -0,0 +1,78 @@
+#include "openvic2/map/Province.hpp"
+
+#include <cassert>
+#include <sstream>
+#include <iomanip>
+
+using namespace OpenVic2;
+
+Province::Province(index_t new_index, std::string const& new_identifier, colour_t new_colour) :
+ HasIdentifier{ new_identifier }, index{ new_index }, colour{ new_colour }, buildings{ "buildings" } {
+ assert(index != NULL_INDEX);
+ assert(colour != NULL_COLOUR);
+}
+
+std::string Province::colour_to_hex_string(colour_t colour) {
+ std::ostringstream stream;
+ stream << std::hex << std::setfill('0') << std::setw(6) << colour;
+ return stream.str();
+}
+
+Province::index_t Province::get_index() const {
+ return index;
+}
+
+Province::colour_t Province::get_colour() const {
+ return colour;
+}
+
+Region* Province::get_region() const {
+ return region;
+}
+
+bool Province::is_water() const {
+ return water;
+}
+
+Province::life_rating_t Province::get_life_rating() const {
+ return life_rating;
+}
+
+return_t Province::add_building(BuildingType const& type) {
+ return buildings.add_item({ type });
+}
+
+void Province::lock_buildings() {
+ buildings.lock(false);
+}
+
+void Province::reset_buildings() {
+ buildings.reset();
+}
+
+std::vector<Building> const& Province::get_buildings() const {
+ return buildings.get_items();
+}
+
+return_t Province::expand_building(std::string const& building_type_identifier) {
+ Building* building = buildings.get_item_by_identifier(building_type_identifier);
+ if (building == nullptr) return FAILURE;
+ return building->expand();
+}
+
+std::string Province::to_string() const {
+ std::stringstream stream;
+ stream << "(#" << std::to_string(index) << ", " << get_identifier() << ", 0x" << colour_to_hex_string(colour) << ")";
+ return stream.str();
+}
+
+void Province::update_state(Date const& today) {
+ for (Building& building : buildings.get_items())
+ building.update_state(today);
+
+}
+
+void Province::tick(Date const& today) {
+ for (Building& building : buildings.get_items())
+ building.tick(today);
+}