diff --git a/PkmnLibRSharp/FFI/StaticData/LearnableMoves.cs b/PkmnLibRSharp/FFI/StaticData/LearnableMoves.cs new file mode 100644 index 0000000..fbcd070 --- /dev/null +++ b/PkmnLibRSharp/FFI/StaticData/LearnableMoves.cs @@ -0,0 +1,20 @@ +using System; +using System.Runtime.InteropServices; +using PkmnLibSharp.StaticData; + +using LevelInt = System.Byte; + +namespace PkmnLibSharp.FFI.StaticData +{ + internal static class LearnableMoves + { + [DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr learnable_moves_new(); + + [DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)] + internal static extern void learnable_moves_drop(IntPtr p); + + [DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)] + internal static extern void learnable_moves_add_level_move(IntPtr p, LevelInt level, IntPtr moveName); + } +} \ No newline at end of file diff --git a/PkmnLibRSharp/StaticData/LearnableMoves.cs b/PkmnLibRSharp/StaticData/LearnableMoves.cs new file mode 100644 index 0000000..93bf34e --- /dev/null +++ b/PkmnLibRSharp/StaticData/LearnableMoves.cs @@ -0,0 +1,27 @@ +using PkmnLibSharp.Utils; +using Interface = PkmnLibSharp.FFI.StaticData.LearnableMoves; +using LevelInt = System.Byte; + +namespace PkmnLibSharp.StaticData +{ + public class LearnableMoves : ExternPointer + { + public LearnableMoves() : base(Interface.learnable_moves_new(), true) + { + } + + public void AddLevelMove(LevelInt level, string moveName) + { + Interface.learnable_moves_add_level_move(Ptr, level, moveName.ToPtr()); + } + + public void AddLevelMove(LevelInt level, MoveData move) + { + Interface.learnable_moves_add_level_move(Ptr, level, move.Name.ToPtr()); + } + + protected override object CreateCache() => new object(); + + protected override void Destructor() => Interface.learnable_moves_drop(Ptr); + } +} \ No newline at end of file