PkmnLibSharp/PkmnLibSharp/Battling/Pokemon.cs

92 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using PkmnLibSharp.Library;
using PkmnLibSharp.Utilities;
using Item = PkmnLibSharp.Library.Items.Item;
using Nature = PkmnLibSharp.Library.Nature;
namespace PkmnLibSharp.Battling
{
public class Pokemon : PointerWrapper
{
public Pokemon([NotNull] BattleLibrary library, [NotNull] Species species, [NotNull] Forme forme,
byte level, uint experience, uint uid,
Gender gender, byte coloring, [MaybeNull] Item heldItem, [MaybeNull] string nickname, bool hiddenAbility, byte abilityIndex,
[NotNull] IReadOnlyCollection<LearnedMove> moves, StatisticSet<byte> ivs, StatisticSet<byte> evs, [NotNull] Nature nature)
: base(Pkmnlib.Generated.Pokemon.Construct(
library.Ptr, species.Ptr, forme.Ptr, level, experience,
uid, (Pkmnlib.Gender) gender, coloring, heldItem?.Ptr ?? IntPtr.Zero, nickname.ToPtr(),
hiddenAbility.ToNative(), abilityIndex,
moves.Select(x => x?.Ptr ?? IntPtr.Zero).ToArray().ArrayPtr(),
(ulong) moves.Count,
ivs.HP, ivs.Attack, ivs.Defense, ivs.SpecialAttack,
ivs.SpecialDefense, ivs.Speed, evs.HP, evs.Attack, evs.Defense,
evs.SpecialAttack, evs.SpecialDefense, evs.Speed, nature.Ptr))
{}
public Species Species
{
get
{
if (_species != null) return _species;
var ptr = Creaturelibbattling.Generated.Creature.GetSpecies(Ptr);
if (TryResolvePointer(ptr, out _species))
return _species;
_species = new Species(ptr);
return _species;
}
}
public Forme Forme
{
get
{
if (_forme != null) return _forme;
var ptr = Creaturelibbattling.Generated.Creature.GetVariant(Ptr);
if (TryResolvePointer(ptr, out _forme))
return _forme;
_forme = new Forme(ptr);
return _forme;
}
}
public byte Level => Creaturelibbattling.Generated.Creature.GetLevel(Ptr);
public uint Experience => Creaturelibbattling.Generated.Creature.GetExperience(Ptr);
public Gender Gender => (Gender) Creaturelibbattling.Generated.Creature.GetGender(Ptr);
public byte Coloring => Creaturelibbattling.Generated.Creature.GetColoring(Ptr);
public bool IsShiny => Coloring == 1;
public string Nickname
{
get
{
if (_nickname != null) return _nickname;
_nickname = Creaturelibbattling.Generated.Creature.GetNickname(Ptr).PtrString();
return _nickname;
}
}
public void ChangeForme(Forme forme)
{
_forme = null;
Creaturelibbattling.Generated.Creature.ChangeVariant(Ptr, forme.Ptr);
}
public bool HasHeldItem(string itemName)
{
return Creaturelibbattling.Generated.Creature.HasHeldItem(Ptr, itemName.ToPtr()) == 1;
}
private Species _species;
private Forme _forme;
private string _nickname;
protected override void DeletePtr()
{
Pkmnlib.Generated.Pokemon.Destruct(Ptr);
}
}
}