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

namespace Creaturelib.Generated
{
    internal static class AttackData
    {
        /// <param name="out">AttackData * &</param>
        /// <param name="name">const char *</param>
        /// <param name="type">unsigned char</param>
        /// <param name="category">AttackCategory</param>
        /// <param name="power">unsigned char</param>
        /// <param name="accuracy">unsigned char</param>
        /// <param name="baseUsage">unsigned char</param>
        /// <param name="target">AttackTarget</param>
        /// <param name="priority">signed char</param>
        /// <param name="effectChance">float</param>
        /// <param name="effectName">const char *</param>
        /// <param name="effectParameters">EffectParameter * *</param>
        /// <param name="effectParameterCount">long unsigned int</param>
        /// <param name="flags">const char * *</param>
        /// <param name="flagsCount">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_AttackData_Construct")]
        internal static extern byte Construct(ref IntPtr @out, IntPtr name, byte type, AttackCategory category, byte power, byte accuracy, byte baseUsage, AttackTarget target, sbyte priority, float effectChance, IntPtr effectName, IntPtr effectParameters, ulong effectParameterCount, IntPtr flags, ulong flagsCount);

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

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

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

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

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

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

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

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

        /// <param name="p">const AttackData *</param>
        /// <returns>signed char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_AttackData_GetPriority")]
        internal static extern sbyte GetPriority(IntPtr p);

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

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

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

        /// <param name="p">const AttackData *</param>
        /// <param name="key">const char *</param>
        /// <returns>bool</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_AttackData_HasFlag")]
        internal static extern byte HasFlag(IntPtr p, IntPtr key);

    }
}
