Serialization of Pokemon, general fixes

This commit is contained in:
2024-09-03 09:31:32 +02:00
parent 2a0aaed4c3
commit 3214a6f29a
11 changed files with 387 additions and 51 deletions

View File

@@ -0,0 +1,115 @@
using PkmnLib.Dynamic.Models;
using PkmnLib.Dynamic.Models.Serialized;
using PkmnLib.Static;
using PkmnLib.Static.Species;
using PkmnLib.Tests.Integration;
namespace PkmnLib.Tests.Dynamic;
public class SerializationTests
{
[Test]
public void SerializePokemon()
{
var library = LibraryHelpers.LoadLibrary();
Assert.That(library.StaticLibrary.Species.TryGet("bulbasaur", out var species));
var pokemon = new PokemonImpl(library, species!, species!.GetDefaultForm(), new AbilityIndex()
{
Index = 0,
IsHidden = false,
}, 10, 1000, Gender.Male, 0, "hardy");
pokemon.LearnMove("tackle", MoveLearnMethod.LevelUp, 255);
var data = pokemon.Serialize();
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data.Species, Is.EqualTo("bulbasaur"));
Assert.That(data.Form, Is.EqualTo("default"));
Assert.That(data.Ability, Is.EqualTo("overgrow"));
Assert.That(data.Level, Is.EqualTo(10));
Assert.That(data.PersonalityValue, Is.EqualTo(1000));
Assert.That(data.Gender, Is.EqualTo(Gender.Male));
Assert.That(data.Experience, Is.EqualTo(560));
Assert.That(data.Coloring, Is.EqualTo(0));
Assert.That(data.HeldItem, Is.Null);
Assert.That(data.CurrentHealth, Is.EqualTo(29));
Assert.That(data.Happiness, Is.EqualTo(70));
});
Assert.That(data.Moves, Has.Length.EqualTo(4));
Assert.That(data.Moves[0], Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data.Moves[0]!.MoveName, Is.EqualTo("tackle"));
Assert.That(data.Moves[0]!.LearnMethod, Is.EqualTo(MoveLearnMethod.LevelUp));
Assert.That(data.Moves[0]!.CurrentPp, Is.EqualTo(35));
});
}
[Test]
public void DeserializePokemon()
{
var library = LibraryHelpers.LoadLibrary();
var data = new SerializedPokemon
{
Species = "bulbasaur",
Form = "default",
Ability = "overgrow",
Level = 10,
Experience = 560,
PersonalityValue = 1000,
Gender = Gender.Male,
Coloring = 0,
HeldItem = null,
CurrentHealth = 29,
Happiness = 70,
IndividualValues = new IndividualValueStatisticSet(20, 20, 20, 20, 20, 20),
EffortValues = new EffortValueStatisticSet(0, 0, 0, 0, 0, 0),
Nature = "hardy",
Nickname = "foo",
Moves = new[]
{
new SerializedLearnedMove
{
MoveName = "tackle",
LearnMethod = MoveLearnMethod.LevelUp,
CurrentPp = 23,
},
null,
null,
null,
},
};
var pokemon = new PokemonImpl(library, data);
Assert.Multiple(() =>
{
Assert.That(pokemon.Species.Name.ToString(), Is.EqualTo("bulbasaur"));
Assert.That(pokemon.Form.Name.ToString(), Is.EqualTo("default"));
Assert.That(pokemon.AbilityIndex.Index, Is.EqualTo(0));
Assert.That(pokemon.Level, Is.EqualTo(10));
Assert.That(pokemon.Experience, Is.EqualTo(560));
Assert.That(pokemon.PersonalityValue, Is.EqualTo(1000));
Assert.That(pokemon.Gender, Is.EqualTo(Gender.Male));
Assert.That(pokemon.Coloring, Is.EqualTo(0));
Assert.That(pokemon.HeldItem, Is.Null);
Assert.That(pokemon.CurrentHealth, Is.EqualTo(29));
Assert.That(pokemon.Happiness, Is.EqualTo(70));
Assert.That(pokemon.IndividualValues, Is.EqualTo(new IndividualValueStatisticSet(20, 20, 20, 20, 20, 20)));
Assert.That(pokemon.EffortValues, Is.EqualTo(new EffortValueStatisticSet(0, 0, 0, 0, 0, 0)));
Assert.That(pokemon.Nature.Name.ToString(), Is.EqualTo("hardy"));
Assert.That(pokemon.Nickname, Is.EqualTo("foo"));
});
Assert.That(pokemon.Moves, Has.Count.EqualTo(4));
Assert.That(pokemon.Moves[0], Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(pokemon.Moves[0]!.MoveData.Name.ToString(), Is.EqualTo("tackle"));
Assert.That(pokemon.Moves[0]!.LearnMethod, Is.EqualTo(MoveLearnMethod.LevelUp));
Assert.That(pokemon.Moves[0]!.CurrentPp, Is.EqualTo(23));
});
}
}

View File

@@ -1,10 +1,6 @@
using System.Collections;
using System.Text.Json;
using PkmnLib.Dataloader;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Dynamic.Models;
using PkmnLib.Plugin.Gen7;
using PkmnLib.Static.Libraries;
using PkmnLib.Static.Species;
using PkmnLib.Tests.Integration.Models;
@@ -30,42 +26,10 @@ public class IntegrationTestRunner
}
}
private static IDynamicLibrary LoadLibrary()
{
using var typesFile = File.Open("Data/Types.csv", FileMode.Open);
var types = TypeDataLoader.LoadTypeLibrary(typesFile);
using var naturesFile = File.Open("Data/Natures.csv", FileMode.Open);
var natures = NatureDataLoader.LoadNatureLibrary(naturesFile);
using var movesFile = File.Open("Data/Moves.json", FileMode.Open);
var moves = MoveDataLoader.LoadMoves(movesFile, types);
using var itemsFile = File.Open("Data/Items.json", FileMode.Open);
var items = ItemDataLoader.LoadItems(itemsFile);
using var abilitiesFile = File.Open("Data/Abilities.json", FileMode.Open);
var abilities = AbilityDataLoader.LoadAbilities(abilitiesFile);
using var growthRatesFile = File.Open("Data/GrowthRates.json", FileMode.Open);
var growthRates = GrowthRateDataLoader.LoadGrowthRates(growthRatesFile);
using var speciesFile = File.Open("Data/Pokemon.json", FileMode.Open);
var species = SpeciesDataLoader.LoadSpecies(speciesFile, types);
var staticLibrary = new StaticLibraryImpl(new LibrarySettings()
{
MaxLevel = 100,
ShinyRate = 4096,
}, species, moves, abilities, types, natures, growthRates, items);
var dynamicLibrary = DynamicLibraryImpl.Create(staticLibrary, [
new Gen7Plugin(new Gen7PluginConfiguration()
{
DamageCalculatorHasRandomness = false,
}),
]);
return dynamicLibrary;
}
[TestCaseSource(nameof(TestCases))]
public void RunIntegrationTest(IntegrationTestModel test)
{
var library = LoadLibrary();
var library = LibraryHelpers.LoadLibrary();
var parties = test.BattleSetup.Parties.Select(IBattleParty (x) =>
{

View File

@@ -0,0 +1,41 @@
using PkmnLib.Dataloader;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Plugin.Gen7;
using PkmnLib.Static.Libraries;
namespace PkmnLib.Tests.Integration;
public static class LibraryHelpers
{
public static IDynamicLibrary LoadLibrary()
{
using var typesFile = File.Open("Data/Types.csv", FileMode.Open);
var types = TypeDataLoader.LoadTypeLibrary(typesFile);
using var naturesFile = File.Open("Data/Natures.csv", FileMode.Open);
var natures = NatureDataLoader.LoadNatureLibrary(naturesFile);
using var movesFile = File.Open("Data/Moves.json", FileMode.Open);
var moves = MoveDataLoader.LoadMoves(movesFile, types);
using var itemsFile = File.Open("Data/Items.json", FileMode.Open);
var items = ItemDataLoader.LoadItems(itemsFile);
using var abilitiesFile = File.Open("Data/Abilities.json", FileMode.Open);
var abilities = AbilityDataLoader.LoadAbilities(abilitiesFile);
using var growthRatesFile = File.Open("Data/GrowthRates.json", FileMode.Open);
var growthRates = GrowthRateDataLoader.LoadGrowthRates(growthRatesFile);
using var speciesFile = File.Open("Data/Pokemon.json", FileMode.Open);
var species = SpeciesDataLoader.LoadSpecies(speciesFile, types);
var staticLibrary = new StaticLibraryImpl(new LibrarySettings()
{
MaxLevel = 100,
ShinyRate = 4096,
}, species, moves, abilities, types, natures, growthRates, items);
var dynamicLibrary = DynamicLibraryImpl.Create(staticLibrary, [
new Gen7Plugin(new Gen7PluginConfiguration()
{
DamageCalculatorHasRandomness = false,
}),
]);
return dynamicLibrary;
}
}