aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/economy
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/economy')
-rw-r--r--src/openvic-simulation/economy/Good.cpp9
-rw-r--r--src/openvic-simulation/economy/Good.hpp8
-rw-r--r--src/openvic-simulation/economy/ProductionType.cpp9
-rw-r--r--src/openvic-simulation/economy/ProductionType.hpp1
4 files changed, 18 insertions, 9 deletions
diff --git a/src/openvic-simulation/economy/Good.cpp b/src/openvic-simulation/economy/Good.cpp
index 739374b..2aa5d42 100644
--- a/src/openvic-simulation/economy/Good.cpp
+++ b/src/openvic-simulation/economy/Good.cpp
@@ -8,9 +8,9 @@ using namespace OpenVic::NodeTools;
GoodCategory::GoodCategory(std::string_view new_identifier) : HasIdentifier { new_identifier } {}
Good::Good(
- std::string_view new_identifier, colour_t new_colour, GoodCategory const& new_category, price_t new_base_price,
- bool new_available_from_start, bool new_tradeable, bool new_money, bool new_overseas_penalty
-) : HasIdentifierAndColour { new_identifier, new_colour, false, false }, category { new_category },
+ std::string_view new_identifier, colour_t new_colour, index_t new_index, GoodCategory const& new_category,
+ price_t new_base_price, bool new_available_from_start, bool new_tradeable, bool new_money, bool new_overseas_penalty
+) : HasIdentifierAndColour { new_identifier, new_colour, false, false }, index { new_index }, category { new_category },
base_price { new_base_price }, available_from_start { new_available_from_start }, tradeable { new_tradeable },
money { new_money }, overseas_penalty { new_overseas_penalty } {
assert(base_price > NULL_PRICE);
@@ -48,7 +48,7 @@ bool GoodManager::add_good(
return false;
}
return goods.add_item({
- identifier, colour, category, base_price, available_from_start,
+ identifier, colour, get_good_count(), category, base_price, available_from_start,
tradeable, money, overseas_penalty
});
}
@@ -105,7 +105,6 @@ bool GoodManager::load_goods_file(ast::NodeCPtr root) {
ret &= modifier_manager.add_modifier_effect(modifier_name, true, ModifierEffect::format_t::PROPORTION_DECIMAL); \
}
-
bool GoodManager::generate_modifiers(ModifierManager& modifier_manager) {
bool ret = true;
GOOD_MODIFIER("factory_goods_output");
diff --git a/src/openvic-simulation/economy/Good.hpp b/src/openvic-simulation/economy/Good.hpp
index 8a239d5..1537514 100644
--- a/src/openvic-simulation/economy/Good.hpp
+++ b/src/openvic-simulation/economy/Good.hpp
@@ -31,12 +31,15 @@ namespace OpenVic {
struct Good : HasIdentifierAndColour {
friend struct GoodManager;
+ using index_t = size_t;
+
using price_t = fixed_point_t;
static constexpr price_t NULL_PRICE = fixed_point_t::_0();
using good_map_t = fixed_point_map_t<Good const*>;
private:
+ const index_t PROPERTY(index);
GoodCategory const& PROPERTY(category);
const price_t PROPERTY(base_price);
const bool PROPERTY_CUSTOM_PREFIX(available_from_start, is);
@@ -48,8 +51,9 @@ namespace OpenVic {
bool PROPERTY_RW(available);
Good(
- std::string_view new_identifier, colour_t new_colour, GoodCategory const& new_category, price_t new_base_price,
- bool new_available_from_start, bool new_tradeable, bool new_money, bool new_overseas_penalty
+ std::string_view new_identifier, colour_t new_colour, index_t new_index, GoodCategory const& new_category,
+ price_t new_base_price, bool new_available_from_start, bool new_tradeable, bool new_money,
+ bool new_overseas_penalty
);
public:
diff --git a/src/openvic-simulation/economy/ProductionType.cpp b/src/openvic-simulation/economy/ProductionType.cpp
index 6bd3858..a862b12 100644
--- a/src/openvic-simulation/economy/ProductionType.cpp
+++ b/src/openvic-simulation/economy/ProductionType.cpp
@@ -14,7 +14,7 @@ ProductionType::ProductionType(
input_goods { std::move(input_goods) }, output_goods { output_goods }, value { value }, bonuses { std::move(bonuses) },
efficiency { std::move(efficiency) }, coastal { coastal }, farm { farm }, mine { mine } {}
-ProductionTypeManager::ProductionTypeManager() : production_types { "production types" } {}
+ProductionTypeManager::ProductionTypeManager() : production_types { "production types" }, rgo_owner_sprite { 0 } {}
node_callback_t ProductionTypeManager::_expect_employed_pop(
GoodManager const& good_manager, PopManager const& pop_manager, callback_t<EmployedPop&&> cb
@@ -102,10 +102,15 @@ bool ProductionTypeManager::add_production_type(PRODUCTION_TYPE_ARGS) {
return false;
}
- return production_types.add_item({
+ const bool ret = production_types.add_item({
identifier, owner, employees, type, workforce, std::move(input_goods),
output_goods, value, std::move(bonuses), std::move(efficiency), coastal, farm, mine
});
+ if (rgo_owner_sprite <= 0 && ret && type == ProductionType::type_t::RGO && owner.get_pop_type() != nullptr) {
+ /* Set rgo owner sprite to that of the first RGO owner we find. */
+ rgo_owner_sprite = owner.get_pop_type()->get_sprite();
+ }
+ return ret;
}
#define PARSE_NODE \
diff --git a/src/openvic-simulation/economy/ProductionType.hpp b/src/openvic-simulation/economy/ProductionType.hpp
index dd0b2fd..bce3698 100644
--- a/src/openvic-simulation/economy/ProductionType.hpp
+++ b/src/openvic-simulation/economy/ProductionType.hpp
@@ -67,6 +67,7 @@ namespace OpenVic {
struct ProductionTypeManager {
private:
IdentifierRegistry<ProductionType> production_types;
+ PopType::sprite_t PROPERTY(rgo_owner_sprite);
NodeTools::node_callback_t _expect_employed_pop(
GoodManager const& good_manager, PopManager const& pop_manager, NodeTools::callback_t<EmployedPop&&> cb