aboutsummaryrefslogtreecommitdiff
path: root/src/openvic/economy
diff options
context:
space:
mode:
author Hop311 <hop3114@gmail.com>2023-08-26 00:25:12 +0200
committer Hop311 <hop3114@gmail.com>2023-09-03 12:53:52 +0200
commit366f1b3941315641bdcb0ee98465b4d2134eee86 (patch)
treeebb1e95b5e874c6eab09f19a323d721fd1fdac1b /src/openvic/economy
parentefa88c722fcb6c8fea7a86e1b3b8a83f1f59eb31 (diff)
Followup big dataloader commit
Diffstat (limited to 'src/openvic/economy')
-rw-r--r--src/openvic/economy/Good.cpp56
-rw-r--r--src/openvic/economy/Good.hpp30
2 files changed, 66 insertions, 20 deletions
diff --git a/src/openvic/economy/Good.cpp b/src/openvic/economy/Good.cpp
index f14c170..fe92e4f 100644
--- a/src/openvic/economy/Good.cpp
+++ b/src/openvic/economy/Good.cpp
@@ -4,7 +4,9 @@
using namespace OpenVic;
-Good::Good(const std::string_view new_identifier, colour_t new_colour, const std::string_view new_category, price_t new_base_price,
+GoodCategory::GoodCategory(const std::string_view new_identifier) : HasIdentifier { new_identifier } {}
+
+Good::Good(const std::string_view new_identifier, colour_t new_colour, GoodCategory const& new_category, price_t new_base_price,
bool new_default_available, bool new_tradeable, bool new_currency, bool new_overseas_maintenance)
: HasIdentifierAndColour { new_identifier, new_colour, true },
category { new_category },
@@ -16,7 +18,7 @@ Good::Good(const std::string_view new_identifier, colour_t new_colour, const std
assert(base_price > NULL_PRICE);
}
-std::string const& Good::get_category() const {
+GoodCategory const& Good::get_category() const {
return category;
}
@@ -41,9 +43,25 @@ void Good::reset_to_defaults() {
price = base_price;
}
-GoodManager::GoodManager() : goods { "goods" } {}
+GoodManager::GoodManager() : good_categories { "good categories" }, goods { "goods" } {}
+
+return_t GoodManager::add_good_category(const std::string_view identifier) {
+ if (identifier.empty()) {
+ Logger::error("Invalid good category identifier - empty!");
+ return FAILURE;
+ }
+ return good_categories.add_item({ identifier });
+}
+
+void GoodManager::lock_good_categories() {
+ good_categories.lock();
+}
+
+GoodCategory const* GoodManager::get_good_category_by_identifier(const std::string_view identifier) const {
+ return good_categories.get_item_by_identifier(identifier);
+}
-return_t GoodManager::add_good(const std::string_view identifier, colour_t colour, const std::string_view category,
+return_t GoodManager::add_good(const std::string_view identifier, colour_t colour, GoodCategory const* category,
Good::price_t base_price, bool default_available, bool tradeable, bool currency, bool overseas_maintenance) {
if (identifier.empty()) {
Logger::error("Invalid good identifier - empty!");
@@ -53,26 +71,21 @@ return_t GoodManager::add_good(const std::string_view identifier, colour_t colou
Logger::error("Invalid good colour for ", identifier, ": ", Good::colour_to_hex_string(colour));
return FAILURE;
}
- if (category.empty()) {
- Logger::error("Invalid good category for ", identifier, ": empty!");
+ if (category == nullptr) {
+ Logger::error("Invalid good category for ", identifier, ": null");
return FAILURE;
}
if (base_price <= Good::NULL_PRICE) {
Logger::error("Invalid base price for ", identifier, ": ", base_price);
return FAILURE;
}
- return goods.add_item({ identifier, colour, category, base_price, default_available, tradeable, currency, overseas_maintenance });
+ return goods.add_item({ identifier, colour, *category, base_price, default_available, tradeable, currency, overseas_maintenance });
}
void GoodManager::lock_goods() {
goods.lock();
}
-void GoodManager::reset_to_defaults() {
- for (Good& good : goods.get_items())
- good.reset_to_defaults();
-}
-
Good const* GoodManager::get_good_by_index(size_t index) const {
return goods.get_item_by_index(index);
}
@@ -82,9 +95,26 @@ Good const* GoodManager::get_good_by_identifier(const std::string_view identifie
}
size_t GoodManager::get_good_count() const {
- return goods.get_item_count();
+ return goods.size();
}
std::vector<Good> const& GoodManager::get_goods() const {
return goods.get_items();
}
+
+void GoodManager::reset_to_defaults() {
+ for (Good& good : goods.get_items())
+ good.reset_to_defaults();
+}
+
+return_t GoodManager::load_good_file(ast::NodeCPtr root) {
+
+ // TODO - good loading
+
+ return_t ret = add_good_category("test_good_category");
+ lock_good_categories();
+ if (add_good("test_good", 0x00FF00, get_good_category_by_identifier("test_good_category"), FP::_0_99(), true, true, false, false) != SUCCESS)
+ ret = FAILURE;
+ lock_goods();
+ return ret;
+}
diff --git a/src/openvic/economy/Good.hpp b/src/openvic/economy/Good.hpp
index 5c8e68c..a3cd10b 100644
--- a/src/openvic/economy/Good.hpp
+++ b/src/openvic/economy/Good.hpp
@@ -1,11 +1,21 @@
#pragma once
#include "openvic/types/IdentifierRegistry.hpp"
-#include "openvic/types/fixed_point/FP.hpp"
+#include "openvic/dataloader/NodeTools.hpp"
namespace OpenVic {
struct GoodManager;
+ struct GoodCategory : HasIdentifier {
+ friend struct GoodManager;
+
+ private:
+ GoodCategory(const std::string_view new_identifier);
+
+ public:
+ GoodCategory(GoodCategory&&) = default;
+ };
+
/* REQUIREMENTS:
*
* ECON-3 , ECON-4 , ECON-5 , ECON-6 , ECON-7 , ECON-8 , ECON-9 , ECON-10, ECON-11, ECON-12, ECON-13, ECON-14,
@@ -25,19 +35,19 @@ namespace OpenVic {
static constexpr price_t NULL_PRICE = FP::_0();
private:
- const std::string category;
+ GoodCategory const& category;
const price_t base_price;
price_t price;
const bool default_available, tradeable, currency, overseas_maintenance;
bool available;
- Good(const std::string_view new_identifier, colour_t new_colour, const std::string_view new_category, price_t new_base_price,
+ Good(const std::string_view new_identifier, colour_t new_colour, GoodCategory const& new_category, price_t new_base_price,
bool new_default_available, bool new_tradeable, bool new_currency, bool new_overseas_maintenance);
public:
Good(Good&&) = default;
- std::string const& get_category() const;
+ GoodCategory const& get_category() const;
price_t get_base_price() const;
price_t get_price() const;
bool is_default_available() const;
@@ -47,19 +57,25 @@ namespace OpenVic {
struct GoodManager {
private:
+ IdentifierRegistry<GoodCategory> good_categories;
IdentifierRegistry<Good> goods;
public:
GoodManager();
- return_t add_good(const std::string_view identifier, colour_t colour, const std::string_view category, Good::price_t base_price,
+ return_t add_good_category(const std::string_view identifier);
+ void lock_good_categories();
+ GoodCategory const* get_good_category_by_identifier(const std::string_view identifier) const;
+
+ return_t add_good(const std::string_view identifier, colour_t colour, GoodCategory const* category, Good::price_t base_price,
bool default_available, bool tradeable, bool currency, bool overseas_maintenance);
void lock_goods();
- void reset_to_defaults();
-
Good const* get_good_by_index(size_t index) const;
Good const* get_good_by_identifier(const std::string_view identifier) const;
size_t get_good_count() const;
std::vector<Good> const& get_goods() const;
+
+ void reset_to_defaults();
+ return_t load_good_file(ast::NodeCPtr root);
};
}