using System; using System.Linq; using NUnit.Framework; using PkmnLibSharp.Battling; using PkmnLibSharp.Library; using PkmnLibSharp.Library.GrowthRates; using PkmnLibSharp.Library.Items; using PkmnLibSharp.Library.Moves; namespace PkmnLibSharpTests.Battling { public static class BattleLibraryHelper { private static BattleLibrary _cache; private static readonly object Lock = new object(); public static BattleLibrary GetLibrary() { lock (Lock) { if (_cache != null) return _cache; TestContext.WriteLine("Building battle library"); var scriptLibrary = new AngelScriptResolver(); _cache = new BattleLibrary(BuildStatic(), new StatCalculator(), new DamageLibrary(), new ExperienceLibrary(), scriptLibrary, new MiscLibrary(GetTime), new CaptureLibrary()); scriptLibrary.Initialize(_cache); return _cache; } } public static TimeOfDay GetTime() { return TimeOfDay.Morning; } private static PokemonLibrary BuildStatic() { var settings = new LibrarySettings(100, 4, 4096); var species = new SpeciesLibrary(10); var abilities = new AbilityLibrary(10); var testAbility1 = new Ability("testAbility1", "", Array.Empty()); var testAbility2 = new Ability("testAbility2", "", Array.Empty()); var testHiddenAbility = new Ability("testHiddenAbility", "", Array.Empty()); abilities.Insert("testAbility1", testAbility1); abilities.Insert("testAbility2", testAbility2); abilities.Insert("testHiddenAbility", testHiddenAbility); species.Insert("testSpecies", new Species(1, "testSpecies", new Forme("default", 10f, 10f, 100, new byte[] { 0, 1 }, 100, 100, 100, 100, 100, 100, new[] { testAbility1, testAbility2 }, new[] { testHiddenAbility }, new LearnableMoves(100), new string[0]), 0.5f, "growthRate", 20, 100, new[] { "testEggGroup" }, new string[0])); var moves = new MoveLibrary(10); moves.Insert("testMove", new MoveData("testMove", 0, MoveCategory.Physical, 100, 100, 20, MoveTarget.Any, 0, 0f, "", new EffectParameter[0], new string[0])); moves.Insert("testMove2", new MoveData("testMove2", 0, MoveCategory.Physical, 100, 100, 20, MoveTarget.Any, 0, 0f, "", new EffectParameter[0], new string[0])); var items = new ItemLibrary(10); items.Insert("testItem", new Item("testItem", ItemCategory.MiscItem, BattleItemCategory.None, 500, "", Array.Empty(), "", Array.Empty(), Array.Empty(), 20)); var gr = new GrowthRateLibrary(10); gr.AddGrowthRate("growthRate", new LookupGrowthRate(Enumerable.Range(1, 100).Select(x => (uint)x * 100).ToArray())); var types = new TypeLibrary(10); types.RegisterType("normal"); types.RegisterType("fighting"); var natures = new NatureLibrary(10); natures.LoadNature("testNature", new Nature()); var lib = new PokemonLibrary(settings, species, moves, items, gr, types, abilities, natures); return lib; } } }