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

namespace Creaturelib.Generated
{
    internal static class SpeciesVariant
    {
        /// <param name="name">const char *</param>
        /// <param name="height">float</param>
        /// <param name="weight">float</param>
        /// <param name="baseExperience">unsigned int</param>
        /// <param name="types">unsigned char *</param>
        /// <param name="typeLength">long unsigned int</param>
        /// <param name="baseHealth">unsigned short</param>
        /// <param name="baseAttack">unsigned short</param>
        /// <param name="baseDefense">unsigned short</param>
        /// <param name="baseMagicalAttack">unsigned short</param>
        /// <param name="baseMagicalDefense">unsigned short</param>
        /// <param name="baseSpeed">unsigned short</param>
        /// <param name="talents">const char * *</param>
        /// <param name="talentsLength">long unsigned int</param>
        /// <param name="secretTalents">const char * *</param>
        /// <param name="secretTalentsLength">long unsigned int</param>
        /// <param name="attacks">const LearnableAttacks *</param>
        /// <param name="flags">const char * *</param>
        /// <param name="flagsCount">long unsigned int</param>
        /// <returns>SpeciesVariant *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_Construct")]
        internal static extern IntPtr Construct(IntPtr name, float height, float weight, uint baseExperience, IntPtr types, ulong typeLength, ushort baseHealth, ushort baseAttack, ushort baseDefense, ushort baseMagicalAttack, ushort baseMagicalDefense, ushort baseSpeed, IntPtr talents, ulong talentsLength, IntPtr secretTalents, ulong secretTalentsLength, IntPtr attacks, IntPtr flags, ulong flagsCount);

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

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

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

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

        /// <param name="p">const SpeciesVariant *</param>
        /// <returns>unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetBaseExperience")]
        internal static extern uint GetBaseExperience(IntPtr p);

        /// <param name="p">const SpeciesVariant *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetTypeCount")]
        internal static extern ulong GetTypeCount(IntPtr p);

        /// <param name="p">SpeciesVariant *</param>
        /// <param name="index">long unsigned int</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetType")]
        internal static extern byte GetType(IntPtr p, ulong index);

        /// <param name="p">SpeciesVariant *</param>
        /// <param name="stat">Statistic</param>
        /// <returns>unsigned short</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetStatistic")]
        internal static extern ushort GetStatistic(IntPtr p, Statistic stat);

        /// <param name="p">const SpeciesVariant *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetTalentCount")]
        internal static extern ulong GetTalentCount(IntPtr p);

        /// <param name="p">const SpeciesVariant *</param>
        /// <returns>long unsigned int</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetSecretTalentCount")]
        internal static extern ulong GetSecretTalentCount(IntPtr p);

        /// <param name="p">SpeciesVariant *</param>
        /// <param name="secret">bool</param>
        /// <param name="index">unsigned char</param>
        /// <param name="out">const char * &</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetTalent")]
        internal static extern byte GetTalent(IntPtr p, byte secret, byte index, ref IntPtr @out);

        /// <param name="p">SpeciesVariant *</param>
        /// <returns>const LearnableAttacks *</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetLearnableAttacks")]
        internal static extern IntPtr GetLearnableAttacks(IntPtr p);

        /// <param name="p">SpeciesVariant *</param>
        /// <param name="rand">Random *</param>
        /// <returns>unsigned char</returns>
        [DllImport("libCreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_SpeciesVariant_GetRandomTalent")]
        internal static extern byte GetRandomTalent(IntPtr p, IntPtr rand);

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

    }
}
