Add MrGameEng.AI utility-AI module; format codebase with CSharpier New MrGameEng.AI module (ResponseCurve, Consideration, UtilityAction, UtilityAi selector, Blackboard) plus CSharpier formatting applied across the whole engine. Documents the CSharpier convention in CLAUDE.md. @
This commit is contained in:
@@ -45,7 +45,8 @@ public sealed class DefDatabaseTests : IDisposable
|
||||
{ "defName": "Wolf", "label": "волк", "speed": 9 },
|
||||
{ "defName": "Bear", "speed": 6 }
|
||||
]}
|
||||
""");
|
||||
"""
|
||||
);
|
||||
|
||||
var database = LoadAnimals(mod);
|
||||
|
||||
@@ -65,15 +66,16 @@ public sealed class DefDatabaseTests : IDisposable
|
||||
{ "defName": "Hare", "parent": "BaseAnimal", "speed": 12 },
|
||||
{ "defName": "Snail", "parent": "BaseAnimal", "legs": 0, "tags": ["slow", "slimy"] }
|
||||
]}
|
||||
""");
|
||||
"""
|
||||
);
|
||||
|
||||
var database = LoadAnimals(mod);
|
||||
|
||||
var hare = database.Get<AnimalDef>("Hare");
|
||||
Assert.Equal(12f, hare.Speed); // своё поле победило
|
||||
Assert.Equal(["wild"], hare.Tags); // унаследовано
|
||||
Assert.Equal(12f, hare.Speed); // своё поле победило
|
||||
Assert.Equal(["wild"], hare.Tags); // унаследовано
|
||||
var snail = database.Get<AnimalDef>("Snail");
|
||||
Assert.Equal(5f, snail.Speed); // унаследовано
|
||||
Assert.Equal(5f, snail.Speed); // унаследовано
|
||||
Assert.Equal(0, snail.Legs);
|
||||
Assert.Equal(["slow", "slimy"], snail.Tags); // массив заменён целиком
|
||||
Assert.False(database.TryGet<AnimalDef>("BaseAnimal", out _)); // абстрактный не эмитится
|
||||
@@ -83,9 +85,11 @@ public sealed class DefDatabaseTests : IDisposable
|
||||
public void Load_LaterMod_ReplacesSameDefName()
|
||||
{
|
||||
var core = WriteDefsMod(
|
||||
"""{ "type": "Animal", "defs": [ { "defName": "Wolf", "speed": 9, "tags": ["wild"] } ] }""");
|
||||
"""{ "type": "Animal", "defs": [ { "defName": "Wolf", "speed": 9, "tags": ["wild"] } ] }"""
|
||||
);
|
||||
var patch = WriteDefsMod(
|
||||
"""{ "type": "Animal", "defs": [ { "defName": "Wolf", "speed": 20 } ] }""");
|
||||
"""{ "type": "Animal", "defs": [ { "defName": "Wolf", "speed": 20 } ] }"""
|
||||
);
|
||||
|
||||
var database = LoadAnimals(core, patch);
|
||||
|
||||
@@ -103,7 +107,8 @@ public sealed class DefDatabaseTests : IDisposable
|
||||
{ "defName": "A", "parent": "B" },
|
||||
{ "defName": "B", "parent": "A" }
|
||||
]}
|
||||
""");
|
||||
"""
|
||||
);
|
||||
|
||||
var exception = Assert.Throws<InvalidDataException>(() => LoadAnimals(mod));
|
||||
Assert.Contains("Cyclic", exception.Message);
|
||||
@@ -112,7 +117,9 @@ public sealed class DefDatabaseTests : IDisposable
|
||||
[Fact]
|
||||
public void Load_UnknownParent_Throws()
|
||||
{
|
||||
var mod = WriteDefsMod("""{ "type": "Animal", "defs": [ { "defName": "X", "parent": "Ghost" } ] }""");
|
||||
var mod = WriteDefsMod(
|
||||
"""{ "type": "Animal", "defs": [ { "defName": "X", "parent": "Ghost" } ] }"""
|
||||
);
|
||||
|
||||
var exception = Assert.Throws<InvalidDataException>(() => LoadAnimals(mod));
|
||||
Assert.Contains("Ghost", exception.Message);
|
||||
|
||||
@@ -22,7 +22,11 @@ public sealed class LanguageManagerTests : IDisposable
|
||||
[Fact]
|
||||
public void Get_UsesCurrentLanguage_FallsBackToDefault_ThenKey()
|
||||
{
|
||||
var mod = WriteLanguageMod("en", "ui.json", """{ "hud.title": "Title", "hud.only-en": "English only" }""");
|
||||
var mod = WriteLanguageMod(
|
||||
"en",
|
||||
"ui.json",
|
||||
"""{ "hud.title": "Title", "hud.only-en": "English only" }"""
|
||||
);
|
||||
var ruDir = Path.Combine(mod.RootPath, "Languages", "ru");
|
||||
Directory.CreateDirectory(ruDir);
|
||||
File.WriteAllText(Path.Combine(ruDir, "ui.json"), """{ "hud.title": "Заголовок" }""");
|
||||
@@ -39,7 +43,11 @@ public sealed class LanguageManagerTests : IDisposable
|
||||
[Fact]
|
||||
public void Load_LaterMod_OverridesKey()
|
||||
{
|
||||
var core = WriteLanguageMod("en", "ui.json", """{ "hud.title": "Core", "hud.other": "Other" }""");
|
||||
var core = WriteLanguageMod(
|
||||
"en",
|
||||
"ui.json",
|
||||
"""{ "hud.title": "Core", "hud.other": "Other" }"""
|
||||
);
|
||||
var patch = WriteLanguageMod("en", "ui.json", """{ "hud.title": "Patched" }""");
|
||||
|
||||
var languages = new LanguageManager();
|
||||
|
||||
@@ -18,7 +18,8 @@ public sealed class ModLoaderTests : IDisposable
|
||||
var deps = string.Join(", ", dependencies.Select(d => $"\"{d}\""));
|
||||
File.WriteAllText(
|
||||
Path.Combine(aboutDir, "About.json"),
|
||||
$$"""{ "id": "{{id}}", "name": "{{id}} mod", "version": "1.0", "dependencies": [{{deps}}] }""");
|
||||
$$"""{ "id": "{{id}}", "name": "{{id}} mod", "version": "1.0", "dependencies": [{{deps}}] }"""
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
@@ -15,5 +14,4 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\MrGameEng.Mods\MrGameEng.Mods.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user