diff --git a/PkmnLib.Tests/Integration/IntegrationTestRunner.cs b/PkmnLib.Tests/Integration/IntegrationTestRunner.cs index a544878..6ff2496 100644 --- a/PkmnLib.Tests/Integration/IntegrationTestRunner.cs +++ b/PkmnLib.Tests/Integration/IntegrationTestRunner.cs @@ -31,15 +31,31 @@ public class IntegrationTestRunner } } + private static IDynamicLibrary? _libraryWithRandomness; + private static IDynamicLibrary? _libraryWithoutRandomness; + [Test, MethodDataSource(nameof(TestCases))] public async Task RunIntegrationTest(IntegrationTestModel test) { - var library = DynamicLibraryImpl.Create([ - new Gen7Plugin(new Gen7PluginConfiguration - { - DamageCalculatorHasRandomness = true, - }), - ]); + IDynamicLibrary library; + if (test.BattleSetup.HasDamageRandomness) + { + library = _libraryWithRandomness ??= DynamicLibraryImpl.Create([ + new Gen7Plugin(new Gen7PluginConfiguration + { + DamageCalculatorHasRandomness = true, + }), + ]); + } + else + { + library = _libraryWithoutRandomness ??= DynamicLibraryImpl.Create([ + new Gen7Plugin(new Gen7PluginConfiguration + { + DamageCalculatorHasRandomness = false, + }), + ]); + } await TestContext.Current!.OutputWriter.WriteLineAsync("File: " + $"file://{test.FileName}"); TestContext.Current.AddArtifact(new Artifact diff --git a/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs b/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs index 24f6272..a1d896f 100644 --- a/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs +++ b/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs @@ -18,6 +18,7 @@ public class IntegrationTestBattleSetup public bool CanFlee { get; set; } public byte NumberOfSides { get; set; } public byte PositionsPerSide { get; set; } + public bool HasDamageRandomness { get; set; } public IntegrationTestParty[] Parties { get; set; } = null!; } diff --git a/PkmnLib.Tests/Integration/Tests/BasicSingleTurn.json b/PkmnLib.Tests/Integration/Tests/BasicSingleTurn.json index 7ea3bf2..f254f6e 100644 --- a/PkmnLib.Tests/Integration/Tests/BasicSingleTurn.json +++ b/PkmnLib.Tests/Integration/Tests/BasicSingleTurn.json @@ -6,6 +6,7 @@ "canFlee": false, "numberOfSides": 2, "positionsPerSide": 1, + "hasDamageRandomness": false, "parties": [ { "indices": [ @@ -93,7 +94,7 @@ { "$type": "assert", "value": ".Sides[1].Pokemon[0].CurrentHealth", - "expected": 84 + "expected": 78 } ] } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7.Tests/DamageCalculatorTests.cs b/Plugins/PkmnLib.Plugin.Gen7.Tests/DamageCalculatorTests.cs index 85884c4..4dc92e7 100644 --- a/Plugins/PkmnLib.Plugin.Gen7.Tests/DamageCalculatorTests.cs +++ b/Plugins/PkmnLib.Plugin.Gen7.Tests/DamageCalculatorTests.cs @@ -40,7 +40,10 @@ public class DamageCalculatorTests // Ice Fang (an Ice-type physical move with a power of 65) useMove.Category.Returns(MoveCategory.Physical); - var damageCalculator = new Gen7DamageCalculator(false); + var damageCalculator = new Gen7DamageCalculator(new Gen7PluginConfiguration + { + DamageCalculatorHasRandomness = false, + }); var executingMove = Substitute.For(); executingMove.UseMove.Returns(useMove); executingMove.User.Returns(attacker); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs b/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs index 82939c3..44ebec7 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs @@ -14,12 +14,12 @@ public class Gen7PluginConfiguration : IPluginConfiguration /// This should be set to true for most cases, as it simulates the actual damage calculation in the games. Only /// set to false for testing purposes. /// - public bool DamageCalculatorHasRandomness { get; init; } = true; + public bool DamageCalculatorHasRandomness { get; set; } = true; /// /// The number of times a species has been caught. This is used for critical capture calculations. /// - public Func TimesSpeciesCaught { get; init; } = _ => 0; + public Func TimesSpeciesCaught { get; set; } = _ => 0; } public class Gen7Plugin : Plugin, IResourceProvider @@ -44,7 +44,7 @@ public class Gen7Plugin : Plugin, IResourceProvider { registry.RegisterAssemblyScripts(typeof(Gen7Plugin).Assembly); registry.RegisterBattleStatCalculator(new Gen7BattleStatCalculator()); - registry.RegisterDamageCalculator(new Gen7DamageCalculator(Configuration.DamageCalculatorHasRandomness)); + registry.RegisterDamageCalculator(new Gen7DamageCalculator(Configuration)); registry.RegisterMiscLibrary(new Gen7MiscLibrary()); registry.RegisterCaptureLibrary(new Gen7CaptureLibrary(Configuration)); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs index 22d6a64..b25a63c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Libraries.Battling; -public class Gen7DamageCalculator(bool hasRandomness) : IDamageCalculator +public class Gen7DamageCalculator(Gen7PluginConfiguration configuration) : IDamageCalculator { /// public uint GetDamage(IExecutingMove executingMove, IPokemon target, byte hitNumber, IHitData hitData) @@ -34,7 +34,7 @@ public class Gen7DamageCalculator(bool hasRandomness) : IDamageCalculator floatDamage = MathF.Floor(floatDamage * critModifier); } - if (hasRandomness) + if (configuration.DamageCalculatorHasRandomness) { var battle = target.BattleData?.Battle; if (battle == null)