Skip to content

Commit

Permalink
Add warning for discrepancies between the vic3 save and the mapping f…
Browse files Browse the repository at this point in the history
…ile. (ParadoxGameConverters#632)

* add stability computation with legitimacy

* Revert "add stability computation with legitimacy"

This reverts commit 3430d48.

* add warning in constructor

* send world data in constructor

* remove debuging log

* fix test

* Update src/mappers/provinces/province_mapper_importer.cpp

apture by value instead of by reference

Co-authored-by: Idhrendur <[email protected]>

* ctrl + a + k + f

* move Log in function

* pass only StateRegion instead of the entire world

* fmt::format

* generate maping before

* fix variable name

* 1 line warning

Co-authored-by: Idhrendur <[email protected]>

* Update province_mapper_importer.cpp

Change log message

* remove std:optional

* ctrl + a + k + f

---------

Co-authored-by: Idhrendur <[email protected]>
  • Loading branch information
Cocopioche and Idhrendur authored Jul 19, 2024
1 parent cf23faa commit faca483
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 9 deletions.
59 changes: 55 additions & 4 deletions src/mappers/provinces/province_mapper_importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include "external/commonItems/ModLoader/ModFilesystem.h"
#include "external/commonItems/ParserHelpers.h"
#include "external/fmt/include/fmt/format.h"
#include "src/vic3_world/states/state_regions_importer.h"
#include "src/vic3_world/world/vic3_world.h"



Expand Down Expand Up @@ -36,6 +38,7 @@ std::optional<int> GetNextProvinceNumFromFile(std::ifstream& definitions)
}



void VerifyProvinceIsMapped(const mappers::Hoi4ToVic3ProvinceMapping& hoi4_to_vic3_province_map, int province_number)
{
if (!hoi4_to_vic3_province_map.contains(province_number))
Expand All @@ -44,6 +47,46 @@ void VerifyProvinceIsMapped(const mappers::Hoi4ToVic3ProvinceMapping& hoi4_to_vi
}
}

std::map<std::string, std::string> GenerateProvinceToStateMap(
const std::map<std::string, vic3::StateRegion> vic3_state_regions)
{
std::map<std::string, std::string> province_to_state_map;
for (const auto& state: vic3_state_regions)
{
for (const auto& province: state.second.GetProvinces())
{
province_to_state_map[province] = state.first;
}
}
return province_to_state_map;
}

void AreVic3ProvincesFromSameState(const std::vector<std::string>& provinces_from_map,
std::map<std::string, std::string> province_to_state_map)
{
std::set<std::string> state_names;
for (const auto& province: provinces_from_map)
{
auto linked_state = province_to_state_map.find(province);
if (linked_state != province_to_state_map.end())
{
state_names.insert(linked_state->second);
}
}
// if the provinces are part of multiple different state
if (state_names.size() > 1)
{
for (const auto& province_from_map: provinces_from_map)
{
Log(LogLevel::Warning) << fmt::format(
"Province {} is designated as part of {} in Vic3 data and is placed in a mapping with provinces from "
"other states.",
province_from_map,
province_to_state_map[province_from_map]);
}
}
}


void CheckAllHoi4ProvincesMapped(const mappers::Hoi4ToVic3ProvinceMapping& hoi4_to_vic3_province_map,
const commonItems::ModFilesystem& filesystem)
Expand Down Expand Up @@ -80,23 +123,31 @@ void CheckAllHoi4ProvincesMapped(const mappers::Hoi4ToVic3ProvinceMapping& hoi4_

} // namespace



mappers::ProvinceMapperImporter::ProvinceMapperImporter(const commonItems::ModFilesystem& filesystem)
mappers::ProvinceMapperImporter::ProvinceMapperImporter(const commonItems::ModFilesystem& filesystem,
const std::map<std::string, vic3::StateRegion>& vic3_state_regions)
{
province_to_state_map_ = GenerateProvinceToStateMap(vic3_state_regions);

version_parser_.registerRegex(R"(\d\.[\d]+\.\d)",
[this, &filesystem](const std::string& unused, std::istream& input_stream) {
mapping_parser_.parseStream(input_stream);
CheckAllHoi4ProvincesMapped(hoi4_to_vic3_province_map_, filesystem);
});

mapping_parser_.registerKeyword("link", [this](std::istream& input_stream) {
mapping_parser_.registerKeyword("link", [this, vic3_state_regions](std::istream& input_stream) {
const auto the_mapping = mapping_importer_.ImportProvinceMapping(input_stream);
if (the_mapping.vic3_provinces.empty() && the_mapping.hoi4_provinces.empty())
{
return;
}

if (!vic3_state_regions.empty())
{
auto vic3_province = the_mapping.vic3_provinces;
AreVic3ProvincesFromSameState(vic3_province, province_to_state_map_);
}


for (auto color: the_mapping.vic3_provinces)
{
const auto [unused, success] = vic3_to_hoi4_province_map_.emplace(color, the_mapping.hoi4_provinces);
Expand Down
5 changes: 4 additions & 1 deletion src/mappers/provinces/province_mapper_importer.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "src/mappers/provinces/province_mapper.h"
#include "src/mappers/provinces/province_mapping_importer.h"
#include "src/mappers/provinces/province_mapping_types.h"
#include "src/vic3_world/world/vic3_world.h"



Expand All @@ -22,7 +23,8 @@ namespace mappers
class ProvinceMapperImporter
{
public:
ProvinceMapperImporter(const commonItems::ModFilesystem& filesystem);
ProvinceMapperImporter(const commonItems::ModFilesystem& filesystem,
const std::map<std::string, vic3::StateRegion>& vic3_state_regions = {});

ProvinceMapper ImportProvinceMappings();

Expand All @@ -33,6 +35,7 @@ class ProvinceMapperImporter

Vic3ToHoi4ProvinceMapping vic3_to_hoi4_province_map_;
Hoi4ToVic3ProvinceMapping hoi4_to_vic3_province_map_;
std::map<std::string, std::string> province_to_state_map_;
};


Expand Down
7 changes: 4 additions & 3 deletions src/mappers/provinces/province_mapper_importer_tests.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <optional>
#include <sstream>

#include "external/commonItems/external/googletest/googlemock/include/gmock/gmock-matchers.h"
Expand Down Expand Up @@ -31,12 +32,12 @@ TEST(MappersProvincesProvinceMapperImporterTests, ProvinceMappingsCanBeImported)
TEST(MappersProvincesProvinceMapperImporterTests, MissingMapDefinitionThrowsException)
{
const commonItems::ModFilesystem mod_filesystem("./test_files/mappers/provinces/no_definition/", {});
EXPECT_THROW(
[[maybe_unused]] const auto province_mappings = ProvinceMapperImporter{mod_filesystem}.ImportProvinceMappings(),
std::runtime_error);

EXPECT_THROW((ProvinceMapperImporter{mod_filesystem}.ImportProvinceMappings()), std::runtime_error);
}



TEST(MappersProvincesProvinceMapperImporterTests, BadLineInMapDefinitionLogsWarning)
{
std::stringstream log;
Expand Down
4 changes: 3 additions & 1 deletion src/mappers/world/world_mapper_builder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ namespace mappers
WorldMapperBuilder WorldMapperBuilder::CreateDefaultMapper(commonItems::ModFilesystem hoi4_mod_filesystem,
const vic3::World& source_world)
{
const auto province_mapper = mappers::ProvinceMapperImporter(hoi4_mod_filesystem).ImportProvinceMappings();
auto province_mapper =
mappers::ProvinceMapperImporter(hoi4_mod_filesystem, source_world.GetStateRegions()).ImportProvinceMappings();


WorldMapperBuilder builder = WorldMapperBuilder();
builder.DefaultCountryMapper(source_world);
Expand Down

0 comments on commit faca483

Please sign in to comment.