Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Import stories #602

Merged
merged 7 commits into from
Mar 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Vic3ToHoI4Tests.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@
<ClCompile Include="src\hoi4_world\countries\hoi4_country_converter_tests_tech.cpp" />
<ClCompile Include="src\hoi4_world\countries\hoi4_country_tests.cpp" />
<ClCompile Include="src\hoi4_world\diplomacy\hoi4_war_converter_tests.cpp" />
<ClCompile Include="src\hoi4_world\roles\roles_importer_tests.cpp" />
<ClCompile Include="src\hoi4_world\roles\role_importer_tests.cpp" />
<ClCompile Include="src\hoi4_world\states\hoi4_states_converter_tests_state_contents.cpp" />
<ClCompile Include="src\hoi4_world\world\hoi4_world_framework_builder_tests.cpp" />
<ClCompile Include="src\mappers\infrastructure\infrastructure_mapper_tests.cpp" />
Expand Down
9 changes: 9 additions & 0 deletions Vic3ToHoI4Tests.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,9 @@
<Filter Include="src\vic3_world\military">
<UniqueIdentifier>{7b80163d-64f7-4031-959c-c160201e684e}</UniqueIdentifier>
</Filter>
<Filter Include="src\hoi4_world\roles">
<UniqueIdentifier>{ae2f9cf6-49d6-43f2-85d9-cb73df446453}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\out_hoi4\out_mod_test.cpp">
Expand Down Expand Up @@ -569,6 +572,12 @@
<ClCompile Include="src\hoi4_world\countries\hoi4_country_tests.cpp">
<Filter>src\hoi4_world\countries</Filter>
</ClCompile>
<ClCompile Include="src\hoi4_world\roles\role_importer_tests.cpp">
<Filter>src\hoi4_world\roles</Filter>
</ClCompile>
<ClCompile Include="src\hoi4_world\roles\roles_importer_tests.cpp">
<Filter>src\hoi4_world\roles</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="external\rakaly\rakaly.dll">
Expand Down
5 changes: 5 additions & 0 deletions Vic3ToHoI4lib.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
<ClInclude Include="src\hoi4_world\military\task_force.h" />
<ClInclude Include="src\hoi4_world\military\task_force_template.h" />
<ClInclude Include="src\hoi4_world\military\task_force_templates_builder.h" />
<ClInclude Include="src\hoi4_world\roles\role.h" />
<ClInclude Include="src\hoi4_world\roles\roles_importer.h" />
<ClInclude Include="src\hoi4_world\roles\role_importer.h" />
<ClInclude Include="src\hoi4_world\states\default_state.h" />
<ClInclude Include="src\hoi4_world\states\default_states_importer.h" />
<ClInclude Include="src\hoi4_world\states\hoi4_state.h" />
Expand Down Expand Up @@ -210,6 +213,8 @@
<ClCompile Include="src\hoi4_world\military\task_force.cpp" />
<ClCompile Include="src\hoi4_world\military\task_force_template.cpp" />
<ClCompile Include="src\hoi4_world\military\task_force_templates_builder.cpp" />
<ClCompile Include="src\hoi4_world\roles\roles_importer.cpp" />
<ClCompile Include="src\hoi4_world\roles\role_importer.cpp" />
<ClCompile Include="src\hoi4_world\states\default_states_importer.cpp" />
<ClCompile Include="src\hoi4_world\states\hoi4_state.cpp" />
<ClCompile Include="src\hoi4_world\states\hoi4_states_converter.cpp" />
Expand Down
18 changes: 18 additions & 0 deletions Vic3ToHoI4lib.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@
<Filter Include="src\vic3_world\military">
<UniqueIdentifier>{5c7d0789-b5d6-46fe-906f-5e9065413240}</UniqueIdentifier>
</Filter>
<Filter Include="src\hoi4_world\roles">
<UniqueIdentifier>{f5cd94ce-f93a-487a-b538-f5559c16ae34}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\vic3_to_hoi4_converter.h">
Expand Down Expand Up @@ -745,6 +748,15 @@
<ClInclude Include="src\vic3_world\military\military_formations_importer.h">
<Filter>src\vic3_world\military</Filter>
</ClInclude>
<ClInclude Include="src\hoi4_world\roles\role.h">
<Filter>src\hoi4_world\roles</Filter>
</ClInclude>
<ClInclude Include="src\hoi4_world\roles\role_importer.h">
<Filter>src\hoi4_world\roles</Filter>
</ClInclude>
<ClInclude Include="src\hoi4_world\roles\roles_importer.h">
<Filter>src\hoi4_world\roles</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\vic3_to_hoi4_converter.cpp">
Expand Down Expand Up @@ -1152,6 +1164,12 @@
<ClCompile Include="src\vic3_world\military\military_formations_importer.cpp">
<Filter>src\vic3_world\military</Filter>
</ClCompile>
<ClCompile Include="src\hoi4_world\roles\role_importer.cpp">
<Filter>src\hoi4_world\roles</Filter>
</ClCompile>
<ClCompile Include="src\hoi4_world\roles\roles_importer.cpp">
<Filter>src\hoi4_world\roles</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Library Include="external\rakaly\rakaly.dll.lib">
Expand Down
113 changes: 113 additions & 0 deletions data/configurables/stories/italy_unification.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
unification_italy = {

category=unification

requirements={
OR = {
tag=ITA
#has_idea = culture_all_italian #not sure if this would work with how the culture ideas in the converter are set up?
}
}

score=100

block_category=unification


focus={
id = $TAG$_italia_irredenta #start of tree for an italian unifier
icon = GFX_goal_generic_construction
x = $X_POSITION$
y = 0
cost = 10
ai_will_do = {
factor = 5
}


completion_reward = {
add_political_power = 50
add_war_support = 0.1
}
}

repeat_focus={ #creates wargoal and ai strategy vs another country that owns a core or claim of ITA
requirement={
any_other_country = {
any_owned_state = {
OR = {
is_core_of = ITA
is_claimed_by = ITA
}
}
}
}
focus={
id = $TAG$_invade_$TARGET_TAG$
icon = GFX_goal_generic_more_territorial_claims
relative_position_id = $TAG$_italia_irredenta
x = -1
y = 1
cost = 10
prerequisite = { focus = $TAG$_italia_irredenta }

available = {
$TARGET_TAG$ = {
can_ROOT_get_wargoal_on_THIS = yes
}
}

ai_will_do = {
factor = 1
modifier = { #don't try it if we're getting our ass kicked
factor = 0
surrender_progress > 0.01
}
modifier = { #don't try it if we can't reach them
factor = 0
$TARGET_TAG$ = {
NOT = {
OR = {
is_neighbor_of = $TAG$
$TARGET_TAG$ = {
any_owned_state = {
is_coastal = yes
}
}
}

}
}
}
}

bypass = {
has_war_with = $TARGET_TAG$
}

will_lead_to_war_with = $TARGET_TAG$

select_effect = { #should make AI prepare to invade
add_ai_strategy = {
type = prepare_for_war
id = $TARGET_TAG$
value = 100
}
}

completion_reward = { #wargoal would be more appropriate as take_claimed_state or such, maybe
create_wargoal = {
type = annex_everything
target = $TARGET_TAG$
}
add_ai_strategy = {
type = conquer
id = $TARGET_TAG$
value = 200
}
}

}
}

}
2 changes: 2 additions & 0 deletions data/test_files/configurables/stories/test_roles_1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
role_1 = {}
role_2 = {}
1 change: 1 addition & 0 deletions data/test_files/configurables/stories/test_roles_2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
role_3 = {}
76 changes: 76 additions & 0 deletions src/hoi4_world/roles/role.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#ifndef SRC_HOI4WORLD_ROLES_H
#define SRC_HOI4WORLD_ROLES_H



#include <string>
#include <vector>



namespace hoi4
{

struct RoleOptions
{
std::string name;
std::string category;
std::string requirements;
float score;
std::vector<std::string> blockers;
std::vector<std::string> focuses;
std::vector<std::string> repeat_focuses;
std::vector<std::string> removed_focuses;
std::vector<std::string> decisions;
std::vector<std::string> events;
};


class Role
{
public:
explicit Role(RoleOptions options):
name_(std::move(options.name)),
category_(std::move(options.category)),
requirements_(std::move(options.requirements)),
score_(options.score),
blockers_(std::move(options.blockers)),
focuses_(std::move(options.focuses)),
repeat_focuses_(std::move(options.repeat_focuses)),
removed_focuses_(std::move(options.removed_focuses)),
decisions_(std::move(options.decisions)),
events_(std::move(options.events))
{
}

[[nodiscard]] const std::string& GetName() const { return name_; }
[[nodiscard]] const std::string& GetCategory() const { return category_; }
[[nodiscard]] const std::string& GetRequirements() const { return requirements_; }
[[nodiscard]] float GetScore() const { return score_; }
[[nodiscard]] const std::vector<std::string>& GetBlockers() const { return blockers_; }
[[nodiscard]] const std::vector<std::string>& GetFocuses() const { return focuses_; }
[[nodiscard]] const std::vector<std::string>& GetRepeatFocuses() const { return repeat_focuses_; }
[[nodiscard]] const std::vector<std::string>& GetRemovedFocuses() const { return removed_focuses_; }
[[nodiscard]] const std::vector<std::string>& GetDecisions() const { return decisions_; }
[[nodiscard]] const std::vector<std::string>& GetEvents() const { return events_; }

std::partial_ordering operator<=>(const Role&) const = default;

private:
std::string name_;
std::string category_;
std::string requirements_;
float score_;
std::vector<std::string> blockers_;
std::vector<std::string> focuses_;
std::vector<std::string> repeat_focuses_;
std::vector<std::string> removed_focuses_;
std::vector<std::string> decisions_;
std::vector<std::string> events_;
};

} // namespace hoi4



#endif // SRC_HOI4WORLD_ROLES_H
50 changes: 50 additions & 0 deletions src/hoi4_world/roles/role_importer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#include "src/hoi4_world/roles/role_importer.h"

#include "external/commonItems/ParserHelpers.h"



hoi4::RoleImporter::RoleImporter()
{
role_parser_.registerKeyword("category", [this](std::istream& input) {
role_options_.category = commonItems::getString(input);
});
role_parser_.registerKeyword("requirements", [this](std::istream& input) {
role_options_.requirements = commonItems::stringOfItem(input).getString();
});
role_parser_.registerKeyword("score", [this](std::istream& input) {
role_options_.score = static_cast<float>(commonItems::getDouble(input));
});
role_parser_.registerKeyword("block_role", [this](std::istream& input) {
role_options_.blockers.emplace_back(commonItems::getString(input));
});
role_parser_.registerKeyword("block_category", [this](std::istream& input) {
role_options_.blockers.emplace_back(commonItems::getString(input));
});
role_parser_.registerKeyword("focus", [this](std::istream& input) {
role_options_.focuses.emplace_back(commonItems::stringOfItem(input).getString());
});
role_parser_.registerKeyword("repeat_focus", [this](std::istream& input) {
role_options_.repeat_focuses.emplace_back(commonItems::stringOfItem(input).getString());
});
role_parser_.registerKeyword("removed_focus", [this](std::istream& input) {
role_options_.removed_focuses.emplace_back(commonItems::stringOfItem(input).getString());
});
role_parser_.registerKeyword("decision", [this](std::istream& input) {
role_options_.decisions.emplace_back(commonItems::stringOfItem(input).getString());
});
role_parser_.registerKeyword("event", [this](std::istream& input) {
role_options_.events.emplace_back(commonItems::stringOfItem(input).getString());
});
}


hoi4::Role hoi4::RoleImporter::ImportRole(std::string_view name, std::istream& input)
{
role_options_ = {};

role_options_.name = name;
role_parser_.parseStream(input);

return Role{role_options_};
}
32 changes: 32 additions & 0 deletions src/hoi4_world/roles/role_importer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef SRC_HOI4WORLD_ROLES_ROLEIMPORTER_H
#define SRC_HOI4WORLD_ROLES_ROLEIMPORTER_H



#include "external/commonItems/Parser.h"
#include "src/hoi4_world/roles/role.h"



namespace hoi4
{


class RoleImporter
{
public:
RoleImporter();

Role ImportRole(std::string_view name, std::istream& input);

private:
RoleOptions role_options_;

commonItems::parser role_parser_;
};

}; // namespace hoi4



#endif // SRC_HOI4WORLD_ROLES_ROLEIMPORTER_H
Loading