Skip to content

Commit 4b93e67

Browse files
authored
Bookmark map with player titles displayed (#324) #minor
* DrawBookmarkMap test * Prepare BookmarkOutputter for displaying player countries * Draw bookmark map with player titles displayed * PR tweaks * Fix regression * Make countries on map semi-transparent * Determine province neighbors from provinces.png * Determine colorable impassables * Color some impassables * Create realm highlight file * Minor optimisation * Update title_map.txt * Calculate position for players on bookmark screen * Change provincePositionsPath * Update commonItems.NET * Calculate position of character on bookmark screen * Separate file for ProvincePosition * Separate files for classes * ReSharper tweaks for BookmarkOutputter * ID -> Id * ProvinceDefinitionTests * TestFiles, ProvinceDefinitionsTests * Create ProvincePositionTests.cs * MapDataTests * Tweaks for Codacy * Add vassals' counties to bookmark map * Actually do what the previous commit was supposed to * !!! * Check nonImpassableNeighborProvs for emptiness * Change thrown exception type * Change impassable coloring algorithm * Test tweaks * Make GetProvincesInCountry a Title method * Load MapData in CK3 World * Cleanup * Fix memory leak by using ImageSharp * Remove old rakaly files
1 parent d25d6a6 commit 4b93e67

File tree

47 files changed

+75648
-167
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+75648
-167
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using ImperatorToCK3.CK3.Map;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using Xunit;
6+
7+
namespace ImperatorToCK3.UnitTests.CK3.Map {
8+
[Collection("MapTests")]
9+
[CollectionDefinition("MapTests", DisableParallelization = true)]
10+
public class MapDataTests {
11+
private const string testCK3Path = "TestFiles/MapData/CK3_1_province_map";
12+
[Fact]
13+
public void NeighborsDictDefaultsToEmpty() {
14+
var data = new MapData(testCK3Path);
15+
16+
Assert.Empty(data.NeighborsDict);
17+
}
18+
[Fact]
19+
public void NeighborProvincesCanBeDetermined() {
20+
const string testCK3Path2 = "TestFiles/MapData/CK3_all_prov_defs";
21+
const ulong byzantionId = 496;
22+
23+
var data = new MapData(testCK3Path2);
24+
Assert.True(data.ProvinceDefinitions.ProvinceToColorDict.ContainsKey(byzantionId));
25+
Assert.True(data.NeighborsDict.ContainsKey(byzantionId));
26+
27+
var byzantionNeighborProvs = data.NeighborsDict[byzantionId];
28+
var expectedByzantionNeighborProvs = new HashSet<ulong> {
29+
3761, // Selymbria
30+
8668, // sea_bosporus
31+
947 // sea_marmara
32+
// There is also a dark grey circle in the middle of Byzantion,
33+
// but the color is not found in definition.csv, so there's no ID to add to neighbors.
34+
};
35+
Assert.True(byzantionNeighborProvs.SetEquals(expectedByzantionNeighborProvs));
36+
}
37+
38+
[Fact]
39+
public void ProvinceNotFoundForColorIsLogged() {
40+
var output = new StringWriter();
41+
Console.SetOut(output);
42+
43+
const string testCK3Path2 = "TestFiles/MapData/CK3_all_prov_defs";
44+
_ = new MapData(testCK3Path2);
45+
Assert.Contains("Province not found for color Rgb24(30, 30, 30)", output.ToString());
46+
}
47+
}
48+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using ImperatorToCK3.CK3.Map;
2+
using SixLabors.ImageSharp.PixelFormats;
3+
using System;
4+
using Xunit;
5+
6+
namespace ImperatorToCK3.UnitTests.CK3.Map {
7+
[Collection("MapTests")]
8+
[CollectionDefinition("MapTests", DisableParallelization = true)]
9+
public class ProvinceDefinitionsTests {
10+
private const string testCK3Path = "TestFiles/CK3";
11+
[Fact]
12+
public void DictionariesDefaultToEmpty() {
13+
var provDefs = new ProvinceDefinitions(testCK3Path);
14+
Assert.Collection(provDefs.ColorToProvinceDict,
15+
pair1 => {
16+
(Rgb24 key, ulong value) = pair1;
17+
Assert.Equal(new Rgb24(42, 3, 128), key);
18+
Assert.Equal((ulong)1, value);
19+
},
20+
pair2 => {
21+
(Rgb24 key, ulong value) = pair2;
22+
Assert.Equal(new Rgb24(84, 6, 1), key);
23+
Assert.Equal((ulong)2, value);
24+
},
25+
pair3 => {
26+
(Rgb24 key, ulong value) = pair3;
27+
Assert.Equal(new Rgb24(126, 9, 129), key);
28+
Assert.Equal((ulong)3, value);
29+
}
30+
);
31+
Assert.Collection(provDefs.ProvinceToColorDict,
32+
pair1 => {
33+
(ulong key, Rgb24 value) = pair1;
34+
Assert.Equal((ulong)1, key);
35+
Assert.Equal(new Rgb24(42, 3, 128), value);
36+
},
37+
pair2 => {
38+
(ulong key, Rgb24 value) = pair2;
39+
Assert.Equal((ulong)2, key);
40+
Assert.Equal(new Rgb24(84, 6, 1), value);
41+
},
42+
pair3 => {
43+
(ulong key, Rgb24 value) = pair3;
44+
Assert.Equal((ulong)3, key);
45+
Assert.Equal(new Rgb24(126, 9, 129), value);
46+
}
47+
);
48+
}
49+
50+
[Fact]
51+
public void ExceptionIsThrownOnUnparseableLine() {
52+
const string ck3Path = "TestFiles/corruptedCK3";
53+
// this definition.csv has a line with quoted province id
54+
Assert.Throws<FormatException>(() => _ = new ProvinceDefinitions(ck3Path));
55+
}
56+
}
57+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using commonItems;
2+
using ImperatorToCK3.CK3.Map;
3+
using Xunit;
4+
5+
namespace ImperatorToCK3.UnitTests.CK3.Map {
6+
[Collection("MapTests")]
7+
[CollectionDefinition("MapTests", DisableParallelization = true)]
8+
public class ProvincePositionTests {
9+
[Fact]
10+
public void PositionCanBeParsed() {
11+
const string blob = "{" +
12+
"id = 5 " +
13+
"position ={ 271.722198 0.000000 3950.798096 } " +
14+
"rotation ={ -0.000000 - 0.960029 - 0.000000 0.279900 } " +
15+
"scale ={ 1.000000 1.000000 1.000000 } " +
16+
"}";
17+
var reader = new BufferedReader(blob);
18+
var pos = ProvincePosition.Parse(reader);
19+
Assert.Equal((ulong)5, pos.Id);
20+
Assert.Equal(271.722198, pos.X);
21+
Assert.Equal(3950.798096, pos.Y);
22+
}
23+
}
24+
}

ImperatorToCK3.UnitTests/Imperator/Families/FamiliesTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using Xunit;
33

44
namespace ImperatorToCK3.UnitTests.Imperator.Families {
5+
[Collection("Sequential")]
6+
[CollectionDefinition("Sequential", DisableParallelization = true)]
57
public class FamiliesTests {
68
[Fact]
79
public void FamiliesDefaultToEmpty() {

ImperatorToCK3.UnitTests/ImperatorToCK3.UnitTests.csproj

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,104 +29,111 @@
2929

3030
<ItemGroup>
3131
<None Update="TestFiles\CK3ProvincesHistoryFile.txt">
32-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
32+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
3333
</None>
3434
<None Update="TestFiles\CK3_province_mappings.txt">
35-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
35+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
3636
</None>
3737
<None Update="TestFiles\CoatsOfArms.txt">
38-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
38+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
3939
</None>
4040
<None Update="TestFiles\configurables\definite_form_names.txt">
41-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
41+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
4242
</None>
4343
<None Update="TestFiles\configurables\governorMappings.txt">
44-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
44+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
4545
</None>
4646
<None Update="TestFiles\configurables\nickname_map.txt">
47-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
47+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
4848
</None>
4949
<None Update="TestFiles\configurables\succession_law_map.txt">
50-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
50+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
5151
</None>
5252
<None Update="TestFiles\configurables\title_map.txt">
53-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
53+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
5454
</None>
5555
<None Update="TestFiles\configurables\trait_map.txt">
56-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
56+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
5757
</None>
5858
<None Update="TestFiles\mod\brokenmod.mod">
59-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
59+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
6060
</None>
6161
<None Update="TestFiles\mod\missingmod.mod">
62-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
62+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
6363
</None>
6464
<None Update="TestFiles\mod\packedmod.mod">
65-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
65+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
6666
</None>
6767
<None Update="TestFiles\mod\packedmod.zip">
68-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
68+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
6969
</None>
7070
<None Update="TestFiles\mod\themod.mod">
71-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
71+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
7272
</None>
7373
<None Update="TestFiles\mod\themod\README.md">
74-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
74+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
7575
</None>
7676
<None Update="TestFiles\regions\CK3RegionMapperTests\CorrectParentLocationsReported.txt">
77-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
77+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
7878
</None>
7979
<None Update="TestFiles\regions\CK3RegionMapperTests\empty.txt">
80-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
80+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
8181
</None>
8282
<None Update="TestFiles\regions\CK3RegionMapperTests\LoadingBrokenCountyWillThrowException.txt">
83-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
83+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
8484
</None>
8585
<None Update="TestFiles\regions\CK3RegionMapperTests\LoadingBrokenDuchyWillThrowException.txt">
86-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
86+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
8787
</None>
8888
<None Update="TestFiles\regions\CK3RegionMapperTests\LoadingBrokenRegionWillThrowException.txt">
89-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
89+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
9090
</None>
9191
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationNameValidationWorks.txt">
92-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
92+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
9393
</None>
9494
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationServicesCorrectlyFail.txt">
95-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
95+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
9696
</None>
9797
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationServicesFailForNonsense.txt">
98-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
98+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
9999
</None>
100100
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationServicesSucceedsForCountyField.txt">
101-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
101+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
102102
</None>
103103
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationServicesSucceedsForProvinceField.txt">
104-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
104+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
105105
</None>
106106
<None Update="TestFiles\regions\CK3RegionMapperTests\LocationServicesWork.txt">
107-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
107+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
108108
</None>
109109
<None Update="TestFiles\regions\CK3RegionMapperTests\WrongParentLocationsReturnNull.txt">
110-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
110+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
111111
</None>
112112
<None Update="TestFiles\regions\CultureMappingTests\empty.txt">
113-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
113+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
114114
</None>
115115
<None Update="TestFiles\regions\CultureMappingTests\MatchOnRegion.txt">
116-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
116+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
117117
</None>
118118
<None Update="TestFiles\regions\CultureMappingTests\MatchOnRegionFailsForWrongRegion.txt">
119-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
119+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
120120
</None>
121121
<None Update="TestFiles\regions\island_regions.txt">
122-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
122+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
123123
</None>
124124
<None Update="TestFiles\regions\regions.txt">
125-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
125+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
126126
</None>
127127
<None Update="TestFiles\title_history\TitlesHistory.txt">
128-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
128+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
129129
</None>
130130
</ItemGroup>
131131

132+
<ItemGroup>
133+
<TestFiles Include="TestFiles/**/*.*" />
134+
</ItemGroup>
135+
136+
<Target Name="CopyCustomContent" AfterTargets="Build">
137+
<Copy SourceFiles="@(TestFiles)" DestinationFolder="$(OutDir)\TestFiles\%(RecursiveDir)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Retries="3" RetryDelayMilliseconds="300" />
138+
</Target>
132139
</Project>

0 commit comments

Comments
 (0)