170 lines
5.3 KiB
C#
170 lines
5.3 KiB
C#
using System;
|
|
using Creaturelib.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 AbilityLibrary? _abilityLibrary;
|
|
|
|
public AbilityLibrary AbilityLibrary
|
|
{
|
|
get
|
|
{
|
|
if (_abilityLibrary != null) return _abilityLibrary;
|
|
var ptr = DataLibrary.GetTalentLibrary(Ptr);
|
|
if (TryResolvePointer(ptr, out _abilityLibrary))
|
|
return _abilityLibrary!;
|
|
_abilityLibrary = new AbilityLibrary(ptr);
|
|
return _abilityLibrary;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
public PokemonLibrary(IntPtr ptr) : base(ptr)
|
|
{
|
|
}
|
|
|
|
public PokemonLibrary(LibrarySettings settings, SpeciesLibrary species, MoveLibrary moves, ItemLibrary items,
|
|
GrowthRateLibrary growthRates, TypeLibrary types, AbilityLibrary abilityLibrary, NatureLibrary natures)
|
|
{
|
|
var ptr = IntPtr.Zero;
|
|
Pkmnlib.Generated.PokemonLibrary.Construct(ref ptr, settings.Ptr, species.Ptr, moves.Ptr, items.Ptr,
|
|
growthRates.Ptr, types.Ptr, abilityLibrary.Ptr, natures.Ptr).Assert();
|
|
Initialize(ptr);
|
|
_settings = settings;
|
|
_species = species;
|
|
_moves = moves;
|
|
_items = items;
|
|
_growthRateLibrary = growthRates;
|
|
_typeLibrary = types;
|
|
_natureLibrary = natures;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |