diff --git a/ImperatorToCK3.UnitTests/Outputter/ProvinceOutputterTests.cs b/ImperatorToCK3.UnitTests/Outputter/ProvinceOutputterTests.cs index 895e86866..ff6572946 100644 --- a/ImperatorToCK3.UnitTests/Outputter/ProvinceOutputterTests.cs +++ b/ImperatorToCK3.UnitTests/Outputter/ProvinceOutputterTests.cs @@ -11,12 +11,12 @@ namespace ImperatorToCK3.UnitTests.Outputter; [CollectionDefinition("Sequential", DisableParallelization = true)] public class ProvinceOutputterTests { [Fact] - public void CultureIsOutputted() { + public void CultureIsOutputtedIfProvinceIsCountyCapital() { var provReader = new BufferedReader("culture=roman"); var province = new Province(1, provReader); var sb = new StringBuilder(); - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: true); var sr = new StringReader(sb.ToString()); Assert.Equal("1={", sr.ReadLine()); @@ -24,14 +24,28 @@ public void CultureIsOutputted() { Assert.Equal("\tholding = none", sr.ReadLine()); Assert.Equal("}", sr.ReadLine()); } + + [Fact] + public void CultureIsNotOutputtedIfProvinceIsNotCountyCapital() { + var provReader = new BufferedReader("culture=roman"); + var province = new Province(1, provReader); + + var sb = new StringBuilder(); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: false); + + var sr = new StringReader(sb.ToString()); + Assert.Equal("1={", sr.ReadLine()); + Assert.Equal("\tholding = none", sr.ReadLine()); + Assert.Equal("}", sr.ReadLine()); + } [Fact] - public void ReligionIsOutputted() { + public void ReligionIsOutputtedIfProvinceIsCountyCapital() { var provReader = new BufferedReader("religion=orthodox"); var province = new Province(1, provReader); var sb = new StringBuilder(); - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: true); var sr = new StringReader(sb.ToString()); Assert.Equal("1={", sr.ReadLine()); @@ -39,6 +53,20 @@ public void ReligionIsOutputted() { Assert.Equal("\tholding = none", sr.ReadLine()); Assert.Equal("}", sr.ReadLine()); } + + [Fact] + public void ReligionIsNotOutputtedIfProvinceIsNotCountyCapital() { + var provReader = new BufferedReader("religion=orthodox"); + var province = new Province(1, provReader); + + var sb = new StringBuilder(); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: false); + + var sr = new StringReader(sb.ToString()); + Assert.Equal("1={", sr.ReadLine()); + Assert.Equal("\tholding = none", sr.ReadLine()); + Assert.Equal("}", sr.ReadLine()); + } [Fact] public void HoldingIsOutputted() { @@ -46,7 +74,7 @@ public void HoldingIsOutputted() { var province = new Province(1, provReader); var sb = new StringBuilder(); - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: true); var sr = new StringReader(sb.ToString()); Assert.Equal("1={", sr.ReadLine()); @@ -60,7 +88,7 @@ public void BuildingsAreOutputted() { var province = new Province(1, provReader); var sb = new StringBuilder(); - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, isCountyCapital: true); var sr = new StringReader(sb.ToString()); Assert.Equal("1={", sr.ReadLine()); diff --git a/ImperatorToCK3/CK3/Provinces/ProvinceHistory.cs b/ImperatorToCK3/CK3/Provinces/ProvinceHistory.cs index 26d4c6a6b..5cd5b18cf 100644 --- a/ImperatorToCK3/CK3/Provinces/ProvinceHistory.cs +++ b/ImperatorToCK3/CK3/Provinces/ProvinceHistory.cs @@ -56,7 +56,7 @@ public void SetCultureId(string cultureId, Date? date) { var historyValue = History.GetFieldValue("holding", date); return historyValue switch { StringOfItem stringOfItem => stringOfItem.ToString(), - string cultureStr => cultureStr, + string holdingTypeStr => holdingTypeStr, _ => null }; } diff --git a/ImperatorToCK3/Outputter/ProvinceOutputter.cs b/ImperatorToCK3/Outputter/ProvinceOutputter.cs index 477ee5e4d..a37b3932d 100644 --- a/ImperatorToCK3/Outputter/ProvinceOutputter.cs +++ b/ImperatorToCK3/Outputter/ProvinceOutputter.cs @@ -5,7 +5,13 @@ namespace ImperatorToCK3.Outputter; public static class ProvinceOutputter { - public static void WriteProvince(StringBuilder sb, Province province) { + public static void WriteProvince(StringBuilder sb, Province province, bool isCountyCapital) { + // If the province is not a county capital, remove the "culture" and "faith" fields. + if (!isCountyCapital) { + province.History.Fields.Remove("culture"); + province.History.Fields.Remove("faith"); + } + var serializedHistory = PDXSerializer.Serialize(province.History, indent: "\t"); if (string.IsNullOrWhiteSpace(serializedHistory.Trim())) { return; diff --git a/ImperatorToCK3/Outputter/ProvincesOutputter.cs b/ImperatorToCK3/Outputter/ProvincesOutputter.cs index 91c6f3af2..7febd3955 100644 --- a/ImperatorToCK3/Outputter/ProvincesOutputter.cs +++ b/ImperatorToCK3/Outputter/ProvincesOutputter.cs @@ -3,7 +3,9 @@ using ImperatorToCK3.CK3.Titles; using ImperatorToCK3.CommonUtils; using Open.Collections; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; namespace ImperatorToCK3.Outputter; @@ -15,6 +17,12 @@ public static async Task OutputProvinces( Title.LandedTitles titles ) { Logger.Info("Writing provinces..."); + + HashSet countyCapitalProvinceIds = titles.Counties + .Select(title => title.CapitalBaronyProvinceId) + .Where(id => id is not null) + .Select(id => id!.Value) + .ToHashSet(); // Output provinces to files named after their de jure kingdoms. var alreadyOutputtedProvinces = new ConcurrentHashSet(); @@ -27,7 +35,7 @@ Title.LandedTitles titles continue; } - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, countyCapitalProvinceIds.Contains(province.Id)); alreadyOutputtedProvinces.Add(province.Id); } @@ -50,7 +58,7 @@ Title.LandedTitles titles if (duchy.DuchyContainsProvince(province.Id)) { sb.AppendLine($"# {duchy.Id}"); - ProvinceOutputter.WriteProvince(sb, province); + ProvinceOutputter.WriteProvince(sb, province, countyCapitalProvinceIds.Contains(province.Id)); alreadyOutputtedProvinces.Add(province.Id); } }