// AUTOMATICALLY GENERATED, DO NOT EDIT
using System;
using System.Runtime.InteropServices;

namespace Creaturelib.Generated
{
    internal static class LearnedAttack
    {
        /// <param name="out">LearnedAttack * &</param>
        /// <param name="attack">const AttackData *</param>
        /// <param name="maxUses">unsigned char</param>
        /// <param name="learnMethod">AttackLearnMethod</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_Construct")]
        internal static extern byte Construct(ref IntPtr @out, IntPtr attack, byte maxUses, AttackLearnMethod learnMethod);

        /// <param name="p">LearnedAttack *</param>
        /// <returns>void</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_Destruct")]
        internal static extern void Destruct(IntPtr p);

        /// <param name="p">const LearnedAttack *</param>
        /// <returns>const AttackData *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_GetAttack")]
        internal static extern IntPtr GetAttack(IntPtr p);

        /// <param name="p">const LearnedAttack *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_GetMaxUses")]
        internal static extern byte GetMaxUses(IntPtr p);

        /// <param name="p">const LearnedAttack *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_GetRemainingUses")]
        internal static extern byte GetRemainingUses(IntPtr p);

        /// <param name="p">const LearnedAttack *</param>
        /// <returns>AttackLearnMethod</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_GetLearnMethod")]
        internal static extern AttackLearnMethod GetLearnMethod(IntPtr p);

        /// <param name="p">LearnedAttack *</param>
        /// <param name="uses">unsigned char</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_TryUse")]
        internal static extern byte TryUse(IntPtr p, byte uses);

        /// <param name="p">LearnedAttack *</param>
        /// <param name="uses">unsigned char</param>
        /// <returns>void</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_DecreaseUses")]
        internal static extern void DecreaseUses(IntPtr p, byte uses);

        /// <param name="p">LearnedAttack *</param>
        /// <param name="uses">unsigned char</param>
        /// <returns>void</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_RestoreUses")]
        internal static extern void RestoreUses(IntPtr p, byte uses);

        /// <param name="p">LearnedAttack *</param>
        /// <returns>void</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LearnedAttack_RestoreAllUses")]
        internal static extern void RestoreAllUses(IntPtr p);

    }
}
