Skip to content

Commit 12b8b03

Browse files
committed
implement exists properly
1 parent 1f555ab commit 12b8b03

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

src/openvic-simulation/scripts/Context.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "openvic-simulation/map/State.hpp"
66
#include "openvic-simulation/population/Pop.hpp"
77
#include "openvic-simulation/DefinitionManager.hpp"
8+
#include "openvic-simulation/InstanceManager.hpp"
89

910
using namespace OpenVic;
1011
scope_type_t Context::get_scope_type() const {
@@ -97,8 +98,15 @@ bool Context::evaluate_leaf(ConditionNode const& node) const {
9798
return has_colonies == expected;
9899
}
99100
if (id == "exists") {
100-
bool expected = std::get<bool>(node.get_value());
101-
return p->exists() == expected;
101+
auto const& value = node.get_value();
102+
if (auto const* expected = std::get_if<bool>(&value)) {
103+
return p->exists() == *expected;
104+
}
105+
if (auto const* tag = std::get_if<memory::string>(&value)) {
106+
CountryInstance const* country_instance = instance_manager.get_country_instance_manager().get_country_instance_by_identifier(*tag);
107+
return country_instance != nullptr && country_instance->exists();
108+
}
109+
return false;
102110
}
103111
if (id == "industrial_score") {
104112
fixed_point_t expected = std::get<fixed_point_t>(node.get_value());

src/openvic-simulation/scripts/Context.hpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace OpenVic {
1212
struct State;
1313
struct Pop;
1414
struct DefinitionManager;
15+
struct InstanceManager;
1516

1617
struct Context {
1718
std::variant<
@@ -21,26 +22,29 @@ namespace OpenVic {
2122
Pop const*> ptr;
2223

2324
DefinitionManager const& definition_manager;
25+
InstanceManager const& instance_manager;
2426

2527
Context const* this_scope = nullptr;
2628
Context const* from_scope = nullptr;
2729

28-
Context(CountryInstance const* p, DefinitionManager const& dm)
29-
: ptr(p), definition_manager(dm), this_scope(this) {}
30-
Context(ProvinceInstance const* p, DefinitionManager const& dm)
31-
: ptr(p), definition_manager(dm), this_scope(this) {}
32-
Context(State const* p, DefinitionManager const& dm)
33-
: ptr(p), definition_manager(dm), this_scope(this) {}
34-
Context(Pop const* p, DefinitionManager const& dm)
35-
: ptr(p), definition_manager(dm), this_scope(this) {}
30+
Context(CountryInstance const* p, DefinitionManager const& dm, InstanceManager const& im)
31+
: ptr(p), definition_manager(dm), instance_manager(im), this_scope(this) {}
32+
Context(ProvinceInstance const* p, DefinitionManager const& dm, InstanceManager const& im)
33+
: ptr(p), definition_manager(dm), instance_manager(im), this_scope(this) {}
34+
Context(State const* p, DefinitionManager const& dm, InstanceManager const& im)
35+
: ptr(p), definition_manager(dm), instance_manager(im), this_scope(this) {}
36+
Context(Pop const* p, DefinitionManager const& dm, InstanceManager const& im)
37+
: ptr(p), definition_manager(dm), instance_manager(im), this_scope(this) {}
3638

3739
Context(
3840
auto* p,
3941
DefinitionManager const& dm,
42+
InstanceManager const& im,
4043
Context const* this_ctx,
4144
Context const* from_ctx
4245
) : ptr(p),
4346
definition_manager(dm),
47+
instance_manager(im),
4448
this_scope(this_ctx),
4549
from_scope(from_ctx) {}
4650

@@ -55,7 +59,7 @@ namespace OpenVic {
5559
std::optional<Context> get_redirect_context(std::string_view condition_id, scope_type_t target) const;
5660

5761
Context make_child(auto* p) const {
58-
return Context(p, definition_manager, this->this_scope, this);
62+
return Context(p, definition_manager, instance_manager, this->this_scope, this);
5963
}
6064
};
6165
}

0 commit comments

Comments
 (0)