PkmnLibSharp/PkmnLibSharp/Library/PokemonLibrary.cs

149 lines
4.6 KiB
C#

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
{
get
{
if (_settings != null) return _settings;
var ptr = DataLibrary.GetSettings(Ptr);
if (TryResolvePointer(ptr, out _settings))
return _settings;
_settings = new LibrarySettings(ptr);
return _settings;
}
}
private SpeciesLibrary _species;
public SpeciesLibrary SpeciesLibrary
{
get
{
if (_species != null) return _species;
var ptr = DataLibrary.GetSpeciesLibrary(Ptr);
if (TryResolvePointer(ptr, out _species))
return _species;
_species = new SpeciesLibrary(ptr);
return _species;
}
}
private MoveLibrary _moves;
public MoveLibrary MoveLibrary
{
get
{
if (_moves != null) return _moves;
var ptr = DataLibrary.GetAttackLibrary(Ptr);
if (TryResolvePointer(ptr, out _moves))
return _moves;
_moves = new MoveLibrary(ptr);
return _moves;
}
}
private ItemLibrary _items;
public ItemLibrary ItemLibrary
{
get
{
if (_items != null) return _items;
var ptr = DataLibrary.GetItemLibrary(Ptr);
if (TryResolvePointer(ptr, out _items))
return _items;
_items = new ItemLibrary(ptr);
return _items;
}
}
private GrowthRateLibrary _growthRateLibrary;
public GrowthRateLibrary GrowthRateLibrary
{
get
{
if (_growthRateLibrary != null) return _growthRateLibrary;
var ptr = DataLibrary.GetGrowthRates(Ptr);
if (TryResolvePointer(ptr, out _growthRateLibrary))
return _growthRateLibrary;
_growthRateLibrary = new GrowthRateLibrary(ptr);
return _growthRateLibrary;
}
}
private TypeLibrary _typeLibrary;
public TypeLibrary TypeLibrary
{
get
{
if (_typeLibrary != null) return _typeLibrary;
var ptr = DataLibrary.GetTypeLibrary(Ptr);
if (TryResolvePointer(ptr, out _typeLibrary))
return _typeLibrary;
_typeLibrary = new TypeLibrary(ptr);
return _typeLibrary;
}
}
private NatureLibrary _natureLibrary;
public NatureLibrary NatureLibrary
{
get
{
if (_natureLibrary != null) return _natureLibrary;
var ptr = Pkmnlib.Generated.PokemonLibrary.GetNatureLibrary(Ptr);
if (TryResolvePointer(ptr, out _natureLibrary))
return _natureLibrary;
_natureLibrary = new NatureLibrary(ptr);
return _natureLibrary;
}
}
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);
}
protected internal override void MarkAsDeleted()
{
base.MarkAsDeleted();
_settings?.MarkAsDeleted();
_species?.MarkAsDeleted();
_moves?.MarkAsDeleted();
_items?.MarkAsDeleted();
_growthRateLibrary?.MarkAsDeleted();
_typeLibrary?.MarkAsDeleted();
_natureLibrary?.MarkAsDeleted();
}
}
}