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 DistinctLevelMoves { get { if (_distinctLevelMoves != null) return _distinctLevelMoves; var count = LearnableAttacks.GetDistinctLevelAttacksCount(Ptr); var ptr = LearnableAttacks.GetDistinctLevelAttacks(Ptr); _distinctLevelMoves = new ReadOnlyNativePtrArray(ptr, (int) count); return _distinctLevelMoves; } } public ReadOnlyNativePtrArray EggMoves { get { if (_eggMoves != null) return _eggMoves; var count = Pkmnlib.Generated.LearnableMoves.GetEggMovesCount(Ptr); var ptr = Pkmnlib.Generated.LearnableMoves.GetEggMoves(Ptr); _eggMoves = new ReadOnlyNativePtrArray(ptr, (int) count); return _eggMoves; } } public ReadOnlyNativePtrArray GetMovesForLevel(byte level) { if (LearnableAttacks.HasAttacksForLevel(Ptr, level) != 1) { return new ReadOnlyNativePtrArray(); } var count = LearnableAttacks.GetAttacksForLevelCount(Ptr, level); var ptr = LearnableAttacks.GetAttacksForLevel(Ptr, level); return new ReadOnlyNativePtrArray(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? _distinctLevelMoves; private ReadOnlyNativePtrArray? _eggMoves; protected override void DeletePtr() { LearnableAttacks.Destruct(Ptr); } } }