Support for battle event listeners.
This commit is contained in:
@@ -65,6 +65,8 @@ namespace PkmnLibSharp.Battling
|
||||
return _sides;
|
||||
}
|
||||
}
|
||||
|
||||
public uint CurrentTurn => Creaturelib.Generated.Battle.GetCurrentTurn(Ptr);
|
||||
|
||||
public ReadOnlyNativePtrArray<BattleParty> Parties
|
||||
{
|
||||
@@ -175,12 +177,7 @@ namespace PkmnLibSharp.Battling
|
||||
{
|
||||
Creaturelib.Generated.Battle.RegisterEventListener(Ptr, listener.FunctionPtr).Assert();
|
||||
}
|
||||
|
||||
public void TriggerEventListener(BattleEvent evt)
|
||||
{
|
||||
Creaturelib.Generated.Battle.TriggerEventListener(Ptr, evt.Ptr).Assert();
|
||||
}
|
||||
|
||||
|
||||
public void SetWeather(string weatherName)
|
||||
{
|
||||
Pkmnlib.Generated.Battle.SetWeather(Ptr, weatherName.ToPtr());
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
using System;
|
||||
using PkmnLibSharp.Utilities;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public abstract class BattleEvent : PointerWrapper
|
||||
{
|
||||
protected internal BattleEvent(IntPtr ptr) : base(ptr)
|
||||
{}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Creaturelib;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public class BattleEventListener
|
||||
{
|
||||
public delegate void BattleEventDelegate(BattleEvent evt);
|
||||
public delegate void BattleEventDelegate(EventData evt);
|
||||
private delegate void BattleEventPtrDelegate(IntPtr ptr);
|
||||
|
||||
private readonly BattleEventDelegate _del;
|
||||
@@ -27,20 +26,23 @@ namespace PkmnLibSharp.Battling.Events
|
||||
_del.Invoke(wrapped);
|
||||
}
|
||||
|
||||
private static BattleEvent WrapEventPtr(IntPtr ptr)
|
||||
private static EventData WrapEventPtr(IntPtr ptr)
|
||||
{
|
||||
var evtType = Creaturelib.Generated.EventData.GetKind(ptr);
|
||||
var evtType = (EventDataKind)Creaturelib.Generated.EventData.GetKind(ptr);
|
||||
switch (evtType)
|
||||
{
|
||||
case EventDataKind.Damage:
|
||||
return new DamageEvent(ptr);
|
||||
return new DamageEvent(evtType, ptr);
|
||||
case EventDataKind.Heal:
|
||||
break;
|
||||
case EventDataKind.Faint:
|
||||
break;
|
||||
case EventDataKind.DisplayText:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
Creaturelib.Generated.EventData.Destruct(ptr);
|
||||
throw new NotImplementedException($"Unhandled battle event: '{evtType}'");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,34 @@ using System;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public class DamageEvent : BattleEvent
|
||||
public class DamageEvent : EventData
|
||||
{
|
||||
internal DamageEvent(IntPtr ptr) : base(ptr)
|
||||
internal DamageEvent(EventDataKind kind, IntPtr ptr) : base(kind, ptr)
|
||||
{
|
||||
}
|
||||
|
||||
public Pokemon Pokemon
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_pokemon != null) return _pokemon;
|
||||
var ptr = Creaturelib.Generated.DamageEvent.GetCreature(Ptr);
|
||||
if (TryResolvePointer(ptr, out _pokemon))
|
||||
return _pokemon;
|
||||
_pokemon = new Pokemon(ptr);
|
||||
return _pokemon;
|
||||
}
|
||||
}
|
||||
|
||||
public DamageSource Source => (DamageSource) Creaturelib.Generated.DamageEvent.GetDamageSource(Ptr);
|
||||
public uint OriginalHealth => Creaturelib.Generated.DamageEvent.GetOriginalHealth(Ptr);
|
||||
public uint NewHealth => Creaturelib.Generated.DamageEvent.GetNewHealth(Ptr);
|
||||
|
||||
private Pokemon _pokemon;
|
||||
|
||||
protected override void DeletePtr()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
Creaturelib.Generated.DamageEvent.Destruct(Ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
15
PkmnLibSharp/Battling/Events/EventData.cs
Normal file
15
PkmnLibSharp/Battling/Events/EventData.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using PkmnLibSharp.Utilities;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public abstract class EventData : PointerWrapper
|
||||
{
|
||||
protected internal EventData(EventDataKind kind, IntPtr ptr) : base(ptr)
|
||||
{
|
||||
Kind = kind;
|
||||
}
|
||||
|
||||
public EventDataKind Kind { get; }
|
||||
}
|
||||
}
|
||||
10
PkmnLibSharp/Battling/Events/EventDataKind.cs
Normal file
10
PkmnLibSharp/Battling/Events/EventDataKind.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public enum EventDataKind : byte
|
||||
{
|
||||
Damage = 0,
|
||||
Heal = 1,
|
||||
Faint = 2,
|
||||
DisplayText = 3,
|
||||
}
|
||||
}
|
||||
32
PkmnLibSharp/Battling/Events/FaintEvent.cs
Normal file
32
PkmnLibSharp/Battling/Events/FaintEvent.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public class FaintEvent : EventData
|
||||
{
|
||||
internal FaintEvent(EventDataKind kind, IntPtr ptr) : base(kind, ptr)
|
||||
{
|
||||
}
|
||||
|
||||
Pokemon Pokemon
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_pokemon != null) return _pokemon;
|
||||
var ptr = Creaturelib.Generated.DamageEvent.GetCreature(Ptr);
|
||||
if (TryResolvePointer(ptr, out _pokemon))
|
||||
return _pokemon;
|
||||
_pokemon = new Pokemon(ptr);
|
||||
return _pokemon;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private Pokemon _pokemon;
|
||||
|
||||
protected override void DeletePtr()
|
||||
{
|
||||
Creaturelib.Generated.FaintEvent.Destruct(Ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
34
PkmnLibSharp/Battling/Events/HealEvent.cs
Normal file
34
PkmnLibSharp/Battling/Events/HealEvent.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
|
||||
namespace PkmnLibSharp.Battling.Events
|
||||
{
|
||||
public class HealEvent : EventData
|
||||
{
|
||||
internal HealEvent(EventDataKind kind, IntPtr ptr) : base(kind, ptr)
|
||||
{
|
||||
}
|
||||
|
||||
public Pokemon Pokemon
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_pokemon != null) return _pokemon;
|
||||
var ptr = Creaturelib.Generated.HealEvent.GetCreature(Ptr);
|
||||
if (TryResolvePointer(ptr, out _pokemon))
|
||||
return _pokemon;
|
||||
_pokemon = new Pokemon(ptr);
|
||||
return _pokemon;
|
||||
}
|
||||
}
|
||||
|
||||
public uint OriginalHealth => Creaturelib.Generated.HealEvent.GetOriginalHealth(Ptr);
|
||||
public uint NewHealth => Creaturelib.Generated.HealEvent.GetNewHealth(Ptr);
|
||||
|
||||
private Pokemon _pokemon;
|
||||
|
||||
protected override void DeletePtr()
|
||||
{
|
||||
Creaturelib.Generated.HealEvent.Destruct(Ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,11 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Battle_CheckChoicesSetAndRun")]
|
||||
internal static extern byte CheckChoicesSetAndRun(IntPtr p);
|
||||
|
||||
/// <param name="p">Battle *</param>
|
||||
/// <returns>unsigned int</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Battle_GetCurrentTurn")]
|
||||
internal static extern uint GetCurrentTurn(IntPtr p);
|
||||
|
||||
/// <param name="p">const Battle *</param>
|
||||
/// <returns>ChoiceQueue *</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Battle_GetCurrentTurnQueue")]
|
||||
@@ -182,11 +187,5 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Battle_RegisterEventListener")]
|
||||
internal static extern byte RegisterEventListener(IntPtr p, IntPtr func);
|
||||
|
||||
/// <param name="p">Battle *</param>
|
||||
/// <param name="data">EventData *</param>
|
||||
/// <returns>unsigned char</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Battle_TriggerEventListener")]
|
||||
internal static extern byte TriggerEventListener(IntPtr p, IntPtr data);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,5 +26,10 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_DamageEvent_GetNewHealth")]
|
||||
internal static extern uint GetNewHealth(IntPtr p);
|
||||
|
||||
/// <param name="p">const DamageEvent *</param>
|
||||
/// <returns>void</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_DamageEvent_Destruct")]
|
||||
internal static extern void Destruct(IntPtr p);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,10 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_DisplayTextEvent_GetText")]
|
||||
internal static extern IntPtr GetText(IntPtr p);
|
||||
|
||||
/// <param name="p">const DisplayTextEvent *</param>
|
||||
/// <returns>void</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_DisplayTextEvent_Destruct")]
|
||||
internal static extern void Destruct(IntPtr p);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,10 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_FaintEvent_GetCreature")]
|
||||
internal static extern IntPtr GetCreature(IntPtr p);
|
||||
|
||||
/// <param name="p">const FaintEvent *</param>
|
||||
/// <returns>void</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_FaintEvent_Destruct")]
|
||||
internal static extern void Destruct(IntPtr p);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ namespace Creaturelib.Generated
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_HealEvent_GetNewHealth")]
|
||||
internal static extern uint GetNewHealth(IntPtr p);
|
||||
|
||||
/// <param name="p">const HealEvent *</param>
|
||||
/// <returns>void</returns>
|
||||
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_HealEvent_Destruct")]
|
||||
internal static extern void Destruct(IntPtr p);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@ namespace Pkmnlib
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
internal enum PkmnEventDataKind : byte
|
||||
{
|
||||
WeatherChange = 4,
|
||||
WeatherChange = 128,
|
||||
}
|
||||
}
|
||||
|
||||
BIN
PkmnLibSharp/Native/libCreatureLib.so
(Stored with Git LFS)
BIN
PkmnLibSharp/Native/libCreatureLib.so
(Stored with Git LFS)
Binary file not shown.
BIN
PkmnLibSharp/Native/libpkmnLib.so
(Stored with Git LFS)
BIN
PkmnLibSharp/Native/libpkmnLib.so
(Stored with Git LFS)
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user