Skip to content

Commit 04e59d3

Browse files
authored
Reduce the complexity of a few methods (#2724)
Should reduce the number of issues in CodeFactor.
1 parent 2e98ed4 commit 04e59d3

File tree

3 files changed

+123
-77
lines changed

3 files changed

+123
-77
lines changed

ImperatorToCK3/CK3/Titles/LandedTitles.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,17 @@ public void LoadTitles(ModFilesystem ck3ModFS, CK3LocDB ck3LocDB) {
5050
RegisterKeys(parser);
5151
parser.ParseGameFolder("common/landed_titles", ck3ModFS, "txt", recursive: true, logFilePaths: true);
5252
LogIgnoredTokens();
53-
53+
54+
MakeSureEveryCountyHasAnAdjective(ck3LocDB);
55+
56+
CleanUpCountriesHavingCapitalEntries();
57+
58+
CleanUpTitlesHavingInvalidCapitalCounties();
59+
60+
Logger.IncrementProgress();
61+
}
62+
63+
private void MakeSureEveryCountyHasAnAdjective(CK3LocDB ck3LocDB) {
5464
// Make sure every county has an adjective.
5565
foreach (var county in Counties) {
5666
string adjLocKey = county.Id + "_adj";
@@ -63,11 +73,13 @@ public void LoadTitles(ModFilesystem ck3ModFS, CK3LocDB ck3LocDB) {
6373
if (ck3LocDB.HasKeyLocForLanguage(adjLocKey, language)) {
6474
continue;
6575
}
66-
76+
6777
ck3LocDB.AddLocForLanguage(adjLocKey, language, nameLoc[language] ?? nameLoc[ConverterGlobals.PrimaryLanguage] ?? county.Id);
6878
}
6979
}
80+
}
7081

82+
private void CleanUpCountriesHavingCapitalEntries() {
7183
// Cleanup for counties having "capital" entries (found in TFE).
7284
foreach (var county in Counties) {
7385
if (county.CapitalCountyId is null) {
@@ -77,7 +89,9 @@ public void LoadTitles(ModFilesystem ck3ModFS, CK3LocDB ck3LocDB) {
7789
Logger.Debug($"Removing capital entry from county {county.Id}.");
7890
county.CapitalCountyId = null;
7991
}
92+
}
8093

94+
private void CleanUpTitlesHavingInvalidCapitalCounties() {
8195
// Cleanup for titles having invalid capital counties.
8296
var validTitleIds = this.Select(t => t.Id).ToFrozenSet();
8397
var placeholderCountyId = validTitleIds.Order().First(t => t.StartsWith("c_"));
@@ -101,7 +115,7 @@ public void LoadTitles(ModFilesystem ck3ModFS, CK3LocDB ck3LocDB) {
101115
.Select(c => c.Id)
102116
.FirstOrDefault();
103117
}
104-
118+
105119
// If not found, for landless titles try using capital of de jure liege.
106120
if (newCapitalId is null && title.Landless) {
107121
newCapitalId = title.DeJureLiege?.CapitalCountyId;
@@ -114,9 +128,8 @@ public void LoadTitles(ModFilesystem ck3ModFS, CK3LocDB ck3LocDB) {
114128
title.CapitalCountyId = placeholderCountyId;
115129
}
116130
}
117-
118-
Logger.IncrementProgress();
119131
}
132+
120133
public void LoadTitles(BufferedReader reader) {
121134
var parser = new Parser();
122135
RegisterKeys(parser);

ImperatorToCK3/CK3/Titles/Title.cs

Lines changed: 58 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -680,11 +680,67 @@ CK3LocDB ck3LocDB
680680
return;
681681
}
682682

683-
var nameSet = false;
684683
var regionId = governorship.Region.Id;
685684
irRegionMapper.Regions.TryGetValue(regionId, out var region);
686685
LocBlock? regionLocBlock = irLocDB.GetLocBlockForKey(regionId);
687686

687+
bool nameSet = TryToUseAreaNameForGovernorshipName(region, regionHasMultipleGovernorships, country, irLocDB, ck3LocDB);
688+
689+
if (!nameSet) {
690+
nameSet = TryToUseMostDevelopedOwnedTerritoryForGovernorshipName(region, regionHasMultipleGovernorships, country, irProvinces, irLocDB, ck3LocDB);
691+
}
692+
// Try to use "<country adjective> <region name>" as governorship name if region has multiple governorships.
693+
// Example: Mauretania -> Roman Mauretania
694+
if (!nameSet && regionHasMultipleGovernorships && regionLocBlock is not null) {
695+
var ck3Country = country.CK3Title;
696+
if (ck3Country is not null && ck3LocDB.TryGetValue($"{ck3Country.Id}_adj", out var countryAdjectiveLocBlock)) {
697+
Logger.Debug($"Naming {Id} after governorship with country adjective: {country.Tag} {governorship.Region.Id}...");
698+
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
699+
nameLocBlock.CopyFrom(regionLocBlock);
700+
nameLocBlock.ModifyForEveryLanguage(countryAdjectiveLocBlock,
701+
(orig, adj, _) => $"{adj} {orig}"
702+
);
703+
nameSet = true;
704+
}
705+
}
706+
if (!nameSet && regionLocBlock is not null) {
707+
Logger.Debug($"Naming {Id} after governorship: {governorship.Region.Id}...");
708+
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
709+
nameLocBlock.CopyFrom(regionLocBlock);
710+
nameSet = true;
711+
}
712+
if (!nameSet && Id.Contains("_IRTOCK3_")) {
713+
Logger.Warn($"{Id} needs help with localization!");
714+
}
715+
}
716+
717+
private bool TryToUseMostDevelopedOwnedTerritoryForGovernorshipName(ImperatorRegion? region,
718+
bool regionHasMultipleGovernorships, Country country, Imperator.Provinces.ProvinceCollection irProvinces, LocDB irLocDB,
719+
CK3LocDB ck3LocDB) {
720+
// Try to use the name of most developed owned territory in the region.
721+
bool nameSet = false;
722+
if (regionHasMultipleGovernorships && region is not null) {
723+
var sourceProvince = irProvinces
724+
.Where(p => region.ContainsProvince(p.Id) && country.Equals(p.OwnerCountry))
725+
.MaxBy(p => p.CivilizationValue);
726+
if (sourceProvince is not null && irLocDB.TryGetValue(sourceProvince.Name, out var provinceLocBlock)) {
727+
Logger.Debug($"Naming {Id} after most developed I:R territory: {sourceProvince.Id}...");
728+
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
729+
nameLocBlock.CopyFrom(provinceLocBlock);
730+
nameSet = true;
731+
732+
var adjLocBlock = ck3LocDB.GetOrCreateLocBlock($"{Id}_adj");
733+
adjLocBlock.CopyFrom(nameLocBlock);
734+
adjLocBlock.ModifyForEveryLanguage((loc, language) => language == "english" ? loc?.GetAdjective() : loc);
735+
}
736+
}
737+
738+
return nameSet;
739+
}
740+
741+
private bool TryToUseAreaNameForGovernorshipName(ImperatorRegion? region, bool regionHasMultipleGovernorships,
742+
Country country, LocDB irLocDB, CK3LocDB ck3LocDB) {
743+
bool nameSet = false;
688744
// If any area in the region is at least 60% owned, use the area name for governorship name.
689745
if (regionHasMultipleGovernorships && region is not null) {
690746
Area? potentialSourceArea = null;
@@ -716,45 +772,8 @@ CK3LocDB ck3LocDB
716772
adjLocBlock.ModifyForEveryLanguage((loc, language) => language == "english" ? loc?.GetAdjective() : loc);
717773
}
718774
}
719-
// Try to use the name of most developed owned territory in the region.
720-
if (!nameSet && regionHasMultipleGovernorships && region is not null) {
721-
var sourceProvince = irProvinces
722-
.Where(p => region.ContainsProvince(p.Id) && country.Equals(p.OwnerCountry))
723-
.MaxBy(p => p.CivilizationValue);
724-
if (sourceProvince is not null && irLocDB.TryGetValue(sourceProvince.Name, out var provinceLocBlock)) {
725-
Logger.Debug($"Naming {Id} after most developed I:R territory: {sourceProvince.Id}...");
726-
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
727-
nameLocBlock.CopyFrom(provinceLocBlock);
728-
nameSet = true;
729775

730-
var adjLocBlock = ck3LocDB.GetOrCreateLocBlock($"{Id}_adj");
731-
adjLocBlock.CopyFrom(nameLocBlock);
732-
adjLocBlock.ModifyForEveryLanguage((loc, language) => language == "english" ? loc?.GetAdjective() : loc);
733-
}
734-
}
735-
// Try to use "<country adjective> <region name>" as governorship name if region has multiple governorships.
736-
// Example: Mauretania -> Roman Mauretania
737-
if (!nameSet && regionHasMultipleGovernorships && regionLocBlock is not null) {
738-
var ck3Country = country.CK3Title;
739-
if (ck3Country is not null && ck3LocDB.TryGetValue($"{ck3Country.Id}_adj", out var countryAdjectiveLocBlock)) {
740-
Logger.Debug($"Naming {Id} after governorship with country adjective: {country.Tag} {governorship.Region.Id}...");
741-
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
742-
nameLocBlock.CopyFrom(regionLocBlock);
743-
nameLocBlock.ModifyForEveryLanguage(countryAdjectiveLocBlock,
744-
(orig, adj, _) => $"{adj} {orig}"
745-
);
746-
nameSet = true;
747-
}
748-
}
749-
if (!nameSet && regionLocBlock is not null) {
750-
Logger.Debug($"Naming {Id} after governorship: {governorship.Region.Id}...");
751-
var nameLocBlock = ck3LocDB.GetOrCreateLocBlock(Id);
752-
nameLocBlock.CopyFrom(regionLocBlock);
753-
nameSet = true;
754-
}
755-
if (!nameSet && Id.Contains("_IRTOCK3_")) {
756-
Logger.Warn($"{Id} needs help with localization!");
757-
}
776+
return nameSet;
758777
}
759778

760779
public void LoadTitles(BufferedReader reader) {

ImperatorToCK3/CK3/World.cs

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
using ImperatorToCK3.Mappers.UnitType;
3232
using ImperatorToCK3.Outputter;
3333
using log4net.Core;
34+
using System;
3435
using System.Collections.Generic;
3536
using System.Collections.Immutable;
3637
using System.IO;
@@ -272,20 +273,9 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac
272273
Characters.RemoveInvalidDynastiesFromHistory(Dynasties);
273274
Dynasties.ImportImperatorFamilies(impWorld, cultureMapper, impWorld.LocDB, LocDB, CorrectedDate);
274275
DynastyHouses.LoadCK3Houses(ModFS);
275-
276-
// Load existing CK3 government IDs.
277-
Logger.Info("Loading CK3 government IDs...");
278-
var ck3GovernmentIds = new HashSet<string>();
279-
var governmentsParser = new Parser();
280-
governmentsParser.RegisterRegex(CommonRegexes.String, (reader, governmentId) => {
281-
ck3GovernmentIds.Add(governmentId);
282-
ParserHelpers.IgnoreItem(reader);
283-
});
284-
governmentsParser.ParseGameFolder("common/governments", ModFS, "txt", recursive: false, logFilePaths: true);
285-
Logger.IncrementProgress();
286-
GovernmentMapper governmentMapper = new(ck3GovernmentIds);
287-
Logger.IncrementProgress();
288-
276+
277+
GovernmentMapper governmentMapper = InitializeGovernmentMapper();
278+
289279
// Before we can import Imperator countries and governorships, the I:R CoA extraction thread needs to finish.
290280
irCoaExtractThread?.Join();
291281

@@ -337,30 +327,16 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac
337327

338328
// Give counties to rulers and governors.
339329
OverwriteCountiesHistory(impWorld.Countries, impWorld.JobsDB.Governorships, countyLevelCountries, countyLevelGovernorships, impWorld.Characters, impWorld.Provinces, CorrectedDate);
340-
// Import holding owners as barons and counts (optional).
341-
if (!config.SkipHoldingOwnersImport) {
342-
LandedTitles.ImportImperatorHoldings(Provinces, impWorld.Characters, impWorld.EndDate);
343-
} else {
344-
Logger.Info("Skipping holding owners import per configuration.");
345-
}
346-
330+
ImportImperatorHoldingsIfNotDisabledByConfiguration(impWorld, config);
331+
347332
LandedTitles.ImportDevelopmentFromImperator(Provinces, CorrectedDate, config.ImperatorCivilizationWorth);
348333
LandedTitles.RemoveInvalidLandlessTitles(config.CK3BookmarkDate);
349334

350335
// Apply region-specific tweaks.
351336
HandleIcelandAndFaroeIslands(impWorld, config);
352-
353-
// Check if any muslim religion exists in Imperator. Otherwise, remove Islam from the entire CK3 map.
354-
var possibleMuslimReligionNames = new List<string> { "muslim", "islam", "sunni", "shiite" };
355-
var muslimReligionExists = impWorld.Religions
356-
.Any(r => possibleMuslimReligionNames.Contains(r.Id.ToLowerInvariant()));
357-
if (muslimReligionExists) {
358-
Logger.Info("Found muslim religion in Imperator save, keeping Islam in CK3.");
359-
} else {
360-
RemoveIslam(config);
361-
}
362-
Logger.IncrementProgress();
363-
337+
338+
RemoveIslamFromMapIfNotInImperator(impWorld, config);
339+
364340
// Now that Islam has been handled, we can generate filler holders without the risk of making them Muslim.
365341
GenerateFillerHoldersForUnownedLands(Cultures, config);
366342
Logger.IncrementProgress();
@@ -414,6 +390,44 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac
414390
);
415391
}
416392

393+
private void ImportImperatorHoldingsIfNotDisabledByConfiguration(Imperator.World irWorld, Configuration config) {
394+
if (!config.SkipHoldingOwnersImport) {
395+
// Import holding owners as barons and counts.
396+
LandedTitles.ImportImperatorHoldings(Provinces, irWorld.Characters, irWorld.EndDate);
397+
} else {
398+
Logger.Info("Skipping holding owners import per configuration.");
399+
}
400+
}
401+
402+
private GovernmentMapper InitializeGovernmentMapper() {
403+
// Load existing CK3 government IDs.
404+
Logger.Info("Loading CK3 government IDs...");
405+
var ck3GovernmentIds = new HashSet<string>();
406+
var governmentsParser = new Parser();
407+
governmentsParser.RegisterRegex(CommonRegexes.String, (reader, governmentId) => {
408+
ck3GovernmentIds.Add(governmentId);
409+
ParserHelpers.IgnoreItem(reader);
410+
});
411+
governmentsParser.ParseGameFolder("common/governments", ModFS, "txt", recursive: false, logFilePaths: true);
412+
Logger.IncrementProgress();
413+
414+
GovernmentMapper governmentMapper = new(ck3GovernmentIds);
415+
Logger.IncrementProgress();
416+
return governmentMapper;
417+
}
418+
419+
private void RemoveIslamFromMapIfNotInImperator(Imperator.World irWorld, Configuration config) {
420+
// Check if any muslim religion exists in Imperator. Otherwise, remove Islam from the entire CK3 map.
421+
var possibleMuslimReligionNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "muslim", "islam", "sunni", "shiite" };
422+
var muslimReligionExists = irWorld.Religions.Any(r => possibleMuslimReligionNames.Contains(r.Id));
423+
if (muslimReligionExists) {
424+
Logger.Info("Found muslim religion in Imperator save, keeping Islam in CK3.");
425+
} else {
426+
RemoveIslam(config);
427+
}
428+
Logger.IncrementProgress();
429+
}
430+
417431
private void DetermineCK3BookmarkDate(Imperator.World irWorld, Configuration config) {
418432
CorrectedDate = irWorld.EndDate.Year > 1 ? irWorld.EndDate : new Date(2, 1, 1);
419433
if (config.CK3BookmarkDate.Year == 0) { // bookmark date is not set

0 commit comments

Comments
 (0)