From 366f1b3941315641bdcb0ee98465b4d2134eee86 Mon Sep 17 00:00:00 2001 From: Hop311 Date: Fri, 25 Aug 2023 23:25:12 +0100 Subject: Followup big dataloader commit --- src/openvic/economy/Good.cpp | 56 ++++++++++++++++++++++++++++++++++---------- src/openvic/economy/Good.hpp | 30 ++++++++++++++++++------ 2 files changed, 66 insertions(+), 20 deletions(-) (limited to 'src/openvic/economy') 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 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 good_categories; IdentifierRegistry 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 const& get_goods() const; + + void reset_to_defaults(); + return_t load_good_file(ast::NodeCPtr root); }; } -- cgit v1.2.3-56-ga3b1