PkmnLibSharp/PkmnLibSharp/Library/Species/LearnableMoves.cs

75 lines
2.4 KiB
C#
Raw Normal View History

2020-05-02 20:58:08 +00:00
using System;
using Creaturelib.Generated;
using PkmnLibSharp.Library.Moves;
2020-05-04 15:54:34 +00:00
using PkmnLibSharp.Utilities;
2020-05-02 20:58:08 +00:00
namespace PkmnLibSharp.Library
{
public class LearnableMoves : PointerWrapper
{
internal LearnableMoves(IntPtr ptr) : base(ptr)
2020-05-02 20:58:08 +00:00
{
}
public LearnableMoves(byte maxLevel)
2020-05-02 20:58:08 +00:00
{
var ptr = IntPtr.Zero;
2020-08-11 19:48:41 +00:00
Pkmnlib.Generated.LearnableMoves.Construct(ref ptr, maxLevel);
Initialize(ptr);
2020-05-02 20:58:08 +00:00
}
2020-08-11 19:48:41 +00:00
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;
}
}
2020-05-02 20:58:08 +00:00
2020-08-11 19:48:41 +00:00
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)
2020-05-02 20:58:08 +00:00
{
LearnableAttacks.AddLevelAttack(Ptr, level, move.Ptr);
}
2020-08-11 19:48:41 +00:00
public void AddEggMove(MoveData move)
{
Pkmnlib.Generated.LearnableMoves.AddEggMove(Ptr, move.Ptr);
}
2020-05-02 20:58:08 +00:00
2020-08-11 19:48:41 +00:00
private ReadOnlyNativePtrArray<MoveData>? _distinctLevelMoves;
private ReadOnlyNativePtrArray<MoveData>? _eggMoves;
protected override void DeletePtr()
2020-05-02 20:58:08 +00:00
{
LearnableAttacks.Destruct(Ptr);
}
}
}