using System; using Creatureliblibrary.Generated; using PkmnLibSharp.Library.Moves; using PkmnLibSharp.Utilities; using GrowthRateLibrary = PkmnLibSharp.Library.GrowthRates.GrowthRateLibrary; using ItemLibrary = PkmnLibSharp.Library.Items.ItemLibrary; namespace PkmnLibSharp.Library { public class PokemonLibrary : PointerWrapper { private LibrarySettings _settings; public LibrarySettings Settings => _settings ??= ResolveOrCreatePtr(DataLibrary.GetSettings(Ptr)); private SpeciesLibrary _species; public SpeciesLibrary SpeciesLibrary => _species ??= ResolveOrCreatePtr(DataLibrary.GetSpeciesLibrary(Ptr)); private MoveLibrary _moves; public MoveLibrary MoveLibrary => _moves ??= ResolveOrCreatePtr(DataLibrary.GetAttackLibrary(Ptr)); private ItemLibrary _items; public ItemLibrary ItemLibrary => _items ??= ResolveOrCreatePtr(DataLibrary.GetItemLibrary(Ptr)); private GrowthRateLibrary _growthRateLibrary; public GrowthRateLibrary GrowthRateLibrary => _growthRateLibrary ??= ResolveOrCreatePtr(DataLibrary.GetGrowthRates(Ptr)); private TypeLibrary _typeLibrary; public TypeLibrary TypeLibrary => _typeLibrary ??= ResolveOrCreatePtr(DataLibrary.GetTypeLibrary(Ptr)); private NatureLibrary _natureLibrary; public NatureLibrary NatureLibrary => _natureLibrary ??= ResolveOrCreatePtr(Pkmnlib.Generated.PokemonLibrary.GetNatureLibrary(Ptr)); internal PokemonLibrary(IntPtr ptr) : base(ptr) { } public static PokemonLibrary Create(LibrarySettings settings, SpeciesLibrary species, MoveLibrary moves, ItemLibrary items, GrowthRateLibrary growthRates, TypeLibrary types, NatureLibrary natures) { var ptr = IntPtr.Zero; Pkmnlib.Generated.PokemonLibrary.Construct(ref ptr, settings.Ptr, species.Ptr, moves.Ptr, items.Ptr, growthRates.Ptr, types.Ptr, natures.Ptr).Assert(); return new PokemonLibrary(ptr); } protected override void DeletePtr() { Pkmnlib.Generated.PokemonLibrary.Destruct(Ptr); } } }