2020-07-26 12:47:56 +00:00
|
|
|
using System;
|
|
|
|
using System.Runtime.InteropServices;
|
2020-07-31 12:19:21 +00:00
|
|
|
using Creaturelib;
|
2020-07-26 12:47:56 +00:00
|
|
|
|
|
|
|
namespace PkmnLibSharp.Battling.Events
|
|
|
|
{
|
|
|
|
public class BattleEventListener
|
|
|
|
{
|
|
|
|
public delegate void BattleEventDelegate(BattleEvent evt);
|
|
|
|
private delegate void BattleEventPtrDelegate(IntPtr ptr);
|
|
|
|
|
|
|
|
private readonly BattleEventDelegate _del;
|
|
|
|
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
|
|
|
|
private readonly BattleEventPtrDelegate _innerDel;
|
|
|
|
internal readonly IntPtr FunctionPtr;
|
|
|
|
|
|
|
|
public BattleEventListener(BattleEventDelegate del)
|
|
|
|
{
|
|
|
|
_del = del;
|
|
|
|
_innerDel = OnEventPtr;
|
|
|
|
FunctionPtr = Marshal.GetFunctionPointerForDelegate(_innerDel);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnEventPtr(IntPtr ptr)
|
|
|
|
{
|
|
|
|
var wrapped = WrapEventPtr(ptr);
|
|
|
|
_del.Invoke(wrapped);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static BattleEvent WrapEventPtr(IntPtr ptr)
|
|
|
|
{
|
2020-07-31 12:19:21 +00:00
|
|
|
var evtType = Creaturelib.Generated.EventData.GetKind(ptr);
|
2020-07-26 12:47:56 +00:00
|
|
|
switch (evtType)
|
|
|
|
{
|
|
|
|
case EventDataKind.Damage:
|
|
|
|
return new DamageEvent(ptr);
|
|
|
|
case EventDataKind.Heal:
|
|
|
|
break;
|
|
|
|
case EventDataKind.Faint:
|
|
|
|
break;
|
|
|
|
case EventDataKind.DisplayText:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
throw new NotImplementedException($"Unhandled battle event: '{evtType}'");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|