PkmnLibSharp/PkmnLibSharp/Library/Species/LearnableMoves.cs

75 lines
2.4 KiB
C#

using System;
using Creaturelib.Generated;
using PkmnLibSharp.Library.Moves;
using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Library
{
public class LearnableMoves : PointerWrapper
{
internal LearnableMoves(IntPtr ptr) : base(ptr)
{
}
public LearnableMoves(byte maxLevel)
{
var ptr = IntPtr.Zero;
Pkmnlib.Generated.LearnableMoves.Construct(ref ptr, maxLevel);
Initialize(ptr);
}
public ReadOnlyNativePtrArray<MoveData> DistinctLevelMoves
{
get
{
if (_distinctLevelMoves != null) return _distinctLevelMoves;
var count = LearnableAttacks.GetDistinctLevelAttacksCount(Ptr);
var ptr = LearnableAttacks.GetDistinctLevelAttacks(Ptr);
_distinctLevelMoves = new ReadOnlyNativePtrArray<MoveData>(ptr, (int) count);
return _distinctLevelMoves;
}
}
public ReadOnlyNativePtrArray<MoveData> EggMoves
{
get
{
if (_eggMoves != null) return _eggMoves;
var count = Pkmnlib.Generated.LearnableMoves.GetEggMovesCount(Ptr);
var ptr = Pkmnlib.Generated.LearnableMoves.GetEggMoves(Ptr);
_eggMoves = new ReadOnlyNativePtrArray<MoveData>(ptr, (int) count);
return _eggMoves;
}
}
public ReadOnlyNativePtrArray<MoveData> GetMovesForLevel(byte level)
{
if (LearnableAttacks.HasAttacksForLevel(Ptr, level) != 1)
{
return new ReadOnlyNativePtrArray<MoveData>();
}
var count = LearnableAttacks.GetAttacksForLevelCount(Ptr, level);
var ptr = LearnableAttacks.GetAttacksForLevel(Ptr, level);
return new ReadOnlyNativePtrArray<MoveData>(ptr, (int) count);
}
public void AddLevelMove(byte level, MoveData move)
{
LearnableAttacks.AddLevelAttack(Ptr, level, move.Ptr);
}
public void AddEggMove(MoveData move)
{
Pkmnlib.Generated.LearnableMoves.AddEggMove(Ptr, move.Ptr);
}
private ReadOnlyNativePtrArray<MoveData>? _distinctLevelMoves;
private ReadOnlyNativePtrArray<MoveData>? _eggMoves;
protected override void DeletePtr()
{
LearnableAttacks.Destruct(Ptr);
}
}
}