GrowthRate wrappers.

This commit is contained in:
Deukhoofd committed 2020-05-05 22:40:17 +02:00
1 parent bf158802d7
commit 32d07be361
8 files changed
+116 -3

No files matched your search

@@ -13,5 +13,10 @@ namespace Creatureliblibrary.Generated
[DllImport("CreatureLibLibrary", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_ExternGrowthRate_Construct")]
internal static extern byte Construct(ref IntPtr @out, IntPtr calcLevel, IntPtr calcExperience);
/// <param name="p">const ExternGrowthRate *</param>
/// <returns>void</returns>
[DllImport("CreatureLibLibrary", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_ExternGrowthRate_Destruct")]
internal static extern void Destruct(IntPtr p);
}
}
@@ -12,5 +12,10 @@ namespace Creatureliblibrary.Generated
[DllImport("CreatureLibLibrary", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LookupGrowthRate_Construct")]
internal static extern IntPtr Construct(IntPtr experiencePerLevel, ulong count);
/// <param name="p">const LookupGrowthRate *</param>
/// <returns>void</returns>
[DllImport("CreatureLibLibrary", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_LookupGrowthRate_Destruct")]
internal static extern void Destruct(IntPtr p);
}
}
@@ -0,0 +1,32 @@
using System;
using System.Runtime.InteropServices;
namespace PkmnLibSharp.Library.GrowthRates
{
public class ExternGrowthRate : GrowthRate
{
public delegate uint CalculateExperienceDelegate(byte level);
public delegate byte CalculateLevelDelegate(uint experience);
private ExternGrowthRate(IntPtr ptr) : base(ptr)
{
}
public static ExternGrowthRate Create(CalculateLevelDelegate levelFunc,
CalculateExperienceDelegate experienceFunc)
{
var ptr = IntPtr.Zero;
Creatureliblibrary.Generated.ExternGrowthRate.Construct(ref ptr,
Marshal.GetFunctionPointerForDelegate(levelFunc),
Marshal.GetFunctionPointerForDelegate(experienceFunc)
);
return new ExternGrowthRate(ptr);
}
protected override void DeletePtr()
{
Creatureliblibrary.Generated.ExternGrowthRate.Destruct(Ptr);
}
}
}
@@ -0,0 +1,26 @@
using System;
using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Library.GrowthRates
{
public abstract class GrowthRate : PointerWrapper
{
internal GrowthRate(IntPtr ptr) : base(ptr)
{
}
public byte CalculateLevel(uint experience)
{
byte b = 0;
Creatureliblibrary.Generated.GrowthRate.CalculateLevel(ref b, Ptr, experience).Assert();
return b;
}
public uint CalculateExperience(byte level)
{
uint i = 0;
Creatureliblibrary.Generated.GrowthRate.CalculateExperience(ref i, Ptr, level).Assert();
return i;
}
}
}
@@ -0,0 +1,18 @@
using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Library.GrowthRates
{
public class LookupGrowthRate : GrowthRate
{
public LookupGrowthRate(uint[] experiencePerLevel) : base(
Creatureliblibrary.Generated.LookupGrowthRate.Construct(experiencePerLevel.ArrayPtr(),
(ulong) experiencePerLevel.Length))
{
}
protected override void DeletePtr()
{
Creatureliblibrary.Generated.LookupGrowthRate.Destruct(Ptr);
}
}
}
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
{"enums":[{"byteSize":1,"filename":"CreatureLibLibrary","name":"AttackCategory","values":{"0":"Physical","1":"Magical","2":"Status"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":4,"filename":"CreatureLibLibrary","name":"memory_order","values":{"0":"memory_order_relaxed","1":"memory_order_consume","2":"memory_order_acquire","3":"memory_order_release","4":"memory_order_acq_rel","5":"memory_order_seq_cst"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":4,"filename":"CreatureLibBattling","name":"memory_order","values":{"0":"memory_order_relaxed","1":"memory_order_consume","2":"memory_order_acquire","3":"memory_order_release","4":"memory_order_acq_rel","5":"memory_order_seq_cst"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"ScriptCategory","values":{"0":"Attack","1":"Talent","2":"Status","3":"Creature","4":"Battle","5":"Side"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"DamageSource","values":{"0":"AttackDamage"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"EventDataKind","values":{"0":"Damage","1":"Heal","2":"Faint","3":"DisplayText"}},{"byteSize":4,"filename":"CreatureLibBattling","name":"AttackLearnMethod","values":{"0":"Unknown","1":"Level"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"TurnChoiceKind","values":{"0":"Pass","1":"Attack","2":"Item","3":"Switch","4":"Flee"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"AttackCategory","values":{"0":"Physical","1":"Magical","2":"Status"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}}],"functions":[{"filename":"CreatureLibLibrary","name":"CreatureLib_C_GetLastException","parameters":[],"returns":"const char *"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_Construct","parameters":[{"name":"out","type":"AttackData *&"},{"name":"name","type":"const char *"},{"name":"type","type":"unsigned char"},{"name":"category","type":"AttackCategory"},{"name":"power","type":"unsigned char"},{"name":"accuracy","type":"unsigned char"},{"name":"baseUsage","type":"unsigned char"},{"name":"target","type":"AttackTarget"},{"name":"priority","type":"signed char"},{"name":"effectChance","type":"float"},{"name":"effectName","type":"const char *"},{"name":"effectParameters","type":"EffectParameter * *"},{"name":"effectParameterCount","type":"long unsigned int"},{"name":"flags","type":"const char * *"},{"name":"flagsCount","type":"long unsigned int"}],"returns":"unsigned char"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_Destruct","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"void"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_GetName","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"const char *"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_GetType","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"unsigned char"},{"filename"Line truncated
{"enums":[{"byteSize":1,"filename":"CreatureLibLibrary","name":"AttackCategory","values":{"0":"Physical","1":"Magical","2":"Status"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":4,"filename":"CreatureLibLibrary","name":"memory_order","values":{"0":"memory_order_relaxed","1":"memory_order_consume","2":"memory_order_acquire","3":"memory_order_release","4":"memory_order_acq_rel","5":"memory_order_seq_cst"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"CreatureLibLibrary","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":4,"filename":"CreatureLibBattling","name":"memory_order","values":{"0":"memory_order_relaxed","1":"memory_order_consume","2":"memory_order_acquire","3":"memory_order_release","4":"memory_order_acq_rel","5":"memory_order_seq_cst"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"ScriptCategory","values":{"0":"Attack","1":"Talent","2":"Status","3":"Creature","4":"Battle","5":"Side"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"DamageSource","values":{"0":"AttackDamage"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"EventDataKind","values":{"0":"Damage","1":"Heal","2":"Faint","3":"DisplayText"}},{"byteSize":4,"filename":"CreatureLibBattling","name":"AttackLearnMethod","values":{"0":"Unknown","1":"Level"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"TurnChoiceKind","values":{"0":"Pass","1":"Attack","2":"Item","3":"Switch","4":"Flee"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"AttackCategory","values":{"0":"Physical","1":"Magical","2":"Status"}},{"byteSize":1,"filename":"CreatureLibBattling","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}}],"functions":[{"filename":"CreatureLibLibrary","name":"CreatureLib_C_GetLastException","parameters":[],"returns":"const char *"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_Construct","parameters":[{"name":"out","type":"AttackData *&"},{"name":"name","type":"const char *"},{"name":"type","type":"unsigned char"},{"name":"category","type":"AttackCategory"},{"name":"power","type":"unsigned char"},{"name":"accuracy","type":"unsigned char"},{"name":"baseUsage","type":"unsigned char"},{"name":"target","type":"AttackTarget"},{"name":"priority","type":"signed char"},{"name":"effectChance","type":"float"},{"name":"effectName","type":"const char *"},{"name":"effectParameters","type":"EffectParameter * *"},{"name":"effectParameterCount","type":"long unsigned int"},{"name":"flags","type":"const char * *"},{"name":"flagsCount","type":"long unsigned int"}],"returns":"unsigned char"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_Destruct","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"void"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_GetName","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"const char *"},{"filename":"CreatureLibLibrary","name":"CreatureLib_AttackData_GetType","parameters":[{"name":"p","type":"const AttackData *"}],"returns":"unsigned char"},{"filename"Line truncated
@@ -0,0 +1,27 @@
using NUnit.Framework;
using PkmnLibSharp.Library.GrowthRates;
namespace PkmnLibSharpTests.Library
{
public class GrowthRateTests
{
[Test]
public void LookupGrowthRate()
{
var gr = new LookupGrowthRate(new uint[] {0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000});
Assert.AreEqual(400, gr.CalculateExperience(5));
Assert.AreEqual(8, gr.CalculateLevel(750));
gr.Dispose();
}
[Test]
public void ExternGrowthRate()
{
var gr = PkmnLibSharp.Library.GrowthRates.ExternGrowthRate.Create(experience => (byte) (experience / 100),
level => (uint) (level * 100));
Assert.AreEqual(500, gr.CalculateExperience(5));
Assert.AreEqual(7, gr.CalculateLevel(750));
gr.Dispose();
}
}
}