Skip to content

Commit

Permalink
Character portrait conversion (#1259) #minor
Browse files Browse the repository at this point in the history
closes #529

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  • Loading branch information
IhateTrains and dependabot[bot] authored Mar 24, 2023
1 parent 90c6cc4 commit a65c038
Show file tree
Hide file tree
Showing 77 changed files with 2,409 additions and 1,605 deletions.
8 changes: 8 additions & 0 deletions ImperatorToCK3/.editorconfig → .editorconfig
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

### Editor guidelines
# All files
[*]
guidelines = 80
# C# or VB files
[*.{cs,vb}]
guidelines = 150

# C# files
[*.cs]

Expand Down
6 changes: 4 additions & 2 deletions ImperatorToCK3.UnitTests/CK3/Characters/CK3CharacterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using ImperatorToCK3.CK3.Characters;
using ImperatorToCK3.CK3.Religions;
using ImperatorToCK3.CK3.Titles;
using ImperatorToCK3.CommonUtils.Genes;
using ImperatorToCK3.Imperator.Cultures;
using ImperatorToCK3.Imperator.Families;
using ImperatorToCK3.Imperator.Geography;
Expand All @@ -29,7 +30,7 @@ namespace ImperatorToCK3.UnitTests.CK3.Characters;
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class CK3CharacterTests {
private static readonly Date ConversionDate = new(867, 1, 1);
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
Expand Down Expand Up @@ -65,6 +66,7 @@ public Character Build() {
locDB,
provinceMapper,
deathReasonMapper,
new DNAFactory(irModFS, ck3ModFS),
new Date(867, 1, 1),
config
);
Expand Down Expand Up @@ -367,8 +369,8 @@ public void NameCanBeInitializedFromImperator() {

[Fact]
public void AgeSexReturnsCorrectString() {
GenesDB genesDB = new();
var conversionDate = new Date(100, 1, 1, AUC: true);
ImperatorToCK3.Imperator.Genes.GenesDB genesDB = new();
var reader1 = new BufferedReader(
"= { birth_date=44.1.1 female=yes }" // age: 56
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ namespace ImperatorToCK3.UnitTests.CK3.Characters;
[Collection("Sequential")]
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class CharacterCollectionTests {
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
private readonly ImperatorToCK3.Imperator.Provinces.ProvinceCollection irProvinces = new();
private readonly string provinceMappingsPath = "TestFiles/LandedTitlesTests/province_mappings.txt";
private readonly ModFilesystem ck3ModFs = new("TestFiles/LandedTitlesTests/CK3/game", new List<Mod>());
private readonly ModFilesystem ck3ModFS = new("TestFiles/LandedTitlesTests/CK3/game", new List<Mod>());

public CharacterCollectionTests() {
var states = new StateCollection();
Expand Down Expand Up @@ -82,6 +82,7 @@ public void MarriageDateCanBeEstimatedFromChild() {
new LocDB("english"),
new ProvinceMapper(),
new DeathReasonMapper(),
new DNAFactory(irModFS, ck3ModFS),
endDate,
configuration);

Expand Down Expand Up @@ -125,6 +126,7 @@ public void MarriageDateCanBeEstimatedFromUnbornChild() {
new LocDB("english"),
new ProvinceMapper(),
new DeathReasonMapper(),
new DNAFactory(irModFS, ck3ModFS),
endDate,
configuration);

Expand Down Expand Up @@ -175,6 +177,7 @@ public void OnlyEarlyPregnanciesAreImportedFromImperator() {
new LocDB("english"),
new ProvinceMapper(),
new DeathReasonMapper(),
new DNAFactory(irModFS, ck3ModFS),
conversionDate,
configuration);

Expand Down Expand Up @@ -290,6 +293,7 @@ public void ImperatorCountriesGoldCanBeDistributedAmongRulerAndVassals() {
locDB,
provinceMapper,
deathReasonMapper,
new DNAFactory(irModFS, ck3ModFS),
conversionDate,
config);

Expand All @@ -310,7 +314,7 @@ public void ImperatorCountriesGoldCanBeDistributedAmongRulerAndVassals() {
conversionDate,
config);

var provinces = new ProvinceCollection(ck3ModFs);
var provinces = new ProvinceCollection(ck3ModFS);
provinces.ImportImperatorProvinces(imperatorWorld, titles, cultureMapper, religionMapper, provinceMapper, config);

titles.ImportImperatorGovernorships(
Expand Down
8 changes: 5 additions & 3 deletions ImperatorToCK3.UnitTests/CK3/Dynasties/DynastyTests.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using commonItems;
using commonItems.Localization;
using commonItems.Mods;
using ImperatorToCK3.CK3.Characters;
using ImperatorToCK3.CK3.Dynasties;
using ImperatorToCK3.CK3.Religions;
using ImperatorToCK3.CK3.Titles;
using ImperatorToCK3.Imperator.Characters;
using ImperatorToCK3.Imperator.Cultures;
using ImperatorToCK3.Imperator.Families;
using ImperatorToCK3.Imperator.Geography;
Expand All @@ -18,6 +18,7 @@
using Xunit;
using Character = ImperatorToCK3.CK3.Characters.Character;
using System;
using CharacterCollection = ImperatorToCK3.Imperator.Characters.CharacterCollection;

// ReSharper disable StringLiteralTypo

Expand All @@ -27,14 +28,14 @@ namespace ImperatorToCK3.UnitTests.CK3.Dynasties;
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class DynastyTests {
private static readonly Date BookmarkDate = new(867, 1, 1);
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
private static readonly CultureMapper cultureMapper = new(irRegionMapper, new CK3RegionMapper());
private class CK3CharacterBuilder {
private const string CK3Path = "TestFiles/CK3";
private const string CK3Root = "TestFiles/CK3/root";
private const string CK3Root = "TestFiles/CK3/game";

private Configuration config = new() {
CK3BookmarkDate = BookmarkDate,
Expand Down Expand Up @@ -64,6 +65,7 @@ public Character Build() {
locDB,
provinceMapper,
deathReasonMapper,
new DNAFactory(irModFS, ck3ModFS),
new Date(867, 1, 1),
config
);
Expand Down
2 changes: 1 addition & 1 deletion ImperatorToCK3.UnitTests/CK3/Provinces/ProvinceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace ImperatorToCK3.UnitTests.CK3.Provinces;
[Collection("Sequential")]
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class ProvinceTests {
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
Expand Down
22 changes: 18 additions & 4 deletions ImperatorToCK3.UnitTests/CK3/Titles/LandedTitlesTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using commonItems.Colors;
using commonItems.Localization;
using commonItems.Mods;
using ImperatorToCK3.CK3.Characters;
using ImperatorToCK3.CK3.Religions;
using ImperatorToCK3.CK3.Titles;
using ImperatorToCK3.Imperator.Countries;
Expand Down Expand Up @@ -31,14 +32,14 @@ namespace ImperatorToCK3.UnitTests.CK3.Titles;
[Collection("Sequential")]
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class LandedTitlesTests {
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
private readonly ImperatorToCK3.Imperator.Provinces.ProvinceCollection irProvinces = new();
private readonly string provinceMappingsPath = "TestFiles/LandedTitlesTests/province_mappings.txt";
private const string CK3Root = "TestFiles/LandedTitlesTests/CK3/game";
private readonly ModFilesystem ck3ModFs = new(CK3Root, new List<Mod>());
private readonly ModFilesystem ck3ModFS = new(CK3Root, new List<Mod>());
private readonly Configuration defaultConfig = new() { ImperatorCivilizationWorth = 0.4 };

public LandedTitlesTests() {
Expand Down Expand Up @@ -260,11 +261,24 @@ public void GovernorshipsCanBeRecognizedAsCountyLevel() {
var traitMapper = new TraitMapper();
var nicknameMapper = new NicknameMapper();
var deathReasonMapper = new DeathReasonMapper();
var dnaFactory = new DNAFactory(irModFS, ck3ModFS);
var conversionDate = new Date(500, 1, 1);

// Import Imperator governor.
var characters = new ImperatorToCK3.CK3.Characters.CharacterCollection();
characters.ImportImperatorCharacters(imperatorWorld, religionMapper, cultureMapper, traitMapper, nicknameMapper, locDB, provinceMapper, deathReasonMapper, conversionDate, config);
characters.ImportImperatorCharacters(
imperatorWorld,
religionMapper,
cultureMapper,
traitMapper,
nicknameMapper,
locDB,
provinceMapper,
deathReasonMapper,
dnaFactory,
conversionDate,
config
);

// Import country 589.
titles.ImportImperatorCountries(imperatorWorld.Countries, tagTitleMapper, locDB, provinceMapper, coaMapper, new GovernmentMapper(), new SuccessionLawMapper(), definiteFormMapper, religionMapper, cultureMapper, nicknameMapper, characters, conversionDate, config);
Expand All @@ -278,7 +292,7 @@ public void GovernorshipsCanBeRecognizedAsCountyLevel() {
title => Assert.Equal("d_IMPTOCK3_PRY", title.Id)
);

var provinces = new ProvinceCollection(ck3ModFs);
var provinces = new ProvinceCollection(ck3ModFS);
provinces.ImportImperatorProvinces(imperatorWorld, titles, cultureMapper, religionMapper, provinceMapper, config);
// Country 589 is imported as duchy-level title, so its governorship of galatia_region will be county level.
titles.ImportImperatorGovernorships(imperatorWorld, provinces, tagTitleMapper, locDB, config, provinceMapper, definiteFormMapper, impRegionMapper, coaMapper, countyLevelGovernorships);
Expand Down
2 changes: 1 addition & 1 deletion ImperatorToCK3.UnitTests/CK3/Titles/RulerTermTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace ImperatorToCK3.UnitTests.CK3.Titles;
[Collection("Sequential")]
[CollectionDefinition("Sequential", DisableParallelization = true)]
public class RulerTermTests {
private const string ImperatorRoot = "TestFiles/Imperator/root";
private const string ImperatorRoot = "TestFiles/Imperator/game";
private static readonly ModFilesystem irModFS = new(ImperatorRoot, Array.Empty<Mod>());
private static readonly AreaCollection areas = new();
private static readonly ImperatorRegionMapper irRegionMapper = new(irModFS, areas);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using commonItems;
using ImperatorToCK3.CommonUtils.Genes;
using Xunit;

namespace ImperatorToCK3.UnitTests.CommonUtils.Genes;

public class AccessoryGeneTemplateTests {
[Fact]
public void AgeSexWeightBlocksDefaultsToEmpty() {
var reader = new BufferedReader(
"= {}"
);
var geneTemplate = new AccessoryGeneTemplate("test_template", reader);

Assert.Empty(geneTemplate.AgeSexWeightBlocks);
}

[Fact]
public void AgeSexWeightBlocksCanBeLoaded() {
var reader = new BufferedReader(
"={\n" +
"male={}\n" +
"female={}\n" +
"boy=male\n" +
"girl=female\n" +
"}"
);
var geneTemplate = new AccessoryGeneTemplate("test_template", reader);

Assert.Equal(4, geneTemplate.AgeSexWeightBlocks.Count);
}

[Fact]
public void AgeSexWithBlocksAreProperlyCopied() {
var reader = new BufferedReader(
"=\n" +
"{\n" +
"male={ 6 = hoodie 8 = trousers }\n" +
"female={ 4 = skirt 6 = top }\n" +
"boy=male\n" +
"girl=female\n" +
"}"
);
var geneTemplate = new AccessoryGeneTemplate("test_template", reader);

Assert.Equal((uint)6, geneTemplate.AgeSexWeightBlocks["male"].GetAbsoluteWeight("hoodie"));
Assert.Equal((uint)8, geneTemplate.AgeSexWeightBlocks["male"].GetAbsoluteWeight("trousers"));
Assert.Equal((uint)4, geneTemplate.AgeSexWeightBlocks["female"].GetAbsoluteWeight("skirt"));
Assert.Equal((uint)6, geneTemplate.AgeSexWeightBlocks["female"].GetAbsoluteWeight("top"));
Assert.Equal((uint)6, geneTemplate.AgeSexWeightBlocks["boy"].GetAbsoluteWeight("hoodie"));
Assert.Equal((uint)8, geneTemplate.AgeSexWeightBlocks["boy"].GetAbsoluteWeight("trousers"));
Assert.Equal((uint)4, geneTemplate.AgeSexWeightBlocks["girl"].GetAbsoluteWeight("skirt"));
Assert.Equal((uint)6, geneTemplate.AgeSexWeightBlocks["girl"].GetAbsoluteWeight("top"));
}
}
79 changes: 79 additions & 0 deletions ImperatorToCK3.UnitTests/CommonUtils/Genes/AccessoryGeneTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
using commonItems;
using ImperatorToCK3.CommonUtils.Genes;
using Xunit;

namespace ImperatorToCK3.UnitTests.CommonUtils.Genes;

public class AccessoryGeneTests {
[Fact]
public void IndexCanBeSet() {
var reader = new BufferedReader(
"= { index=69 }"
);
var gene = new AccessoryGene("test_gene", reader);

Assert.Equal((uint)69, gene.Index);
}

[Fact]
public void IndexDefaultsToNull() { // special_genes accessory genes don't have an index
var reader = new BufferedReader("={}");
var gene = new AccessoryGene("test_gene", reader);

Assert.Null(gene.Index);
}

[Fact]
public void GeneTemplatesDefaultToEmpty() {
var reader = new BufferedReader("={}");
var gene = new AccessoryGene("test_gene", reader);

Assert.Empty(gene.GeneTemplates);
}

[Fact]
public void AccessoryGeneIsProperlyLoaded() {
var reader = new BufferedReader(
" = {\n" +
" index = 95\n" +
" inheritable = no\n" +
" nerdy_hairstyles = {\n" +
" index = 0\n" +
" male = {\n" +
" 6 = male_hair_roman_5\n" +
" 1 = empty\n" +
" }\n" +
" female = {\n" +
" 1 = female_hair_roman_1\n" +
" 1 = female_hair_roman_5\n" +
" }\n" +
" boy = male\n" +
" girl = {\n" +
" 1 = female_hair_roman_1\n" +
" 1 = female_hair_roman_5\n" +
" }\n" +
" }\n" +
" punk_hairstyles = {\n" +
" index = 1\n" +
" male = {\n" +
" 6 = male_hair_roman_1\n" +
" 1 = empty\n" +
" }\n" +
" female = {\n" +
" 1 = female_hair_roman_1\n" +
" 1 = female_hair_roman_2\n" +
" }\n" +
" girl = female\n" +
" } \n" +
"}\n"
);
var gene = new AccessoryGene("test_gene", reader);

Assert.Equal((uint)95, gene.Index);
Assert.False(gene.Inheritable);
Assert.Equal(2, gene.GeneTemplates.Count);
Assert.Equal((uint)1, gene.GeneTemplates["punk_hairstyles"].Index);
Assert.Equal(4, gene.GeneTemplates["nerdy_hairstyles"].AgeSexWeightBlocks.Count);
Assert.Equal(3, gene.GeneTemplates["punk_hairstyles"].AgeSexWeightBlocks.Count);
}
}
Loading

0 comments on commit a65c038

Please sign in to comment.