using System; using System.Runtime.InteropServices; using PkmnLibSharp.Utilities; namespace PkmnLibSharp.Battling { public class AngelScriptResolver : ScriptResolver { public AngelScriptResolver() : base(Pkmnlib.Generated.AngelScriptResolver.Construct()) { } public void Initialize(BattleLibrary library) { Pkmnlib.Generated.AngelScriptResolver.Initialize(Ptr, library.Ptr).Assert(); } public void CreateScript(string name, string script) { Pkmnlib.Generated.AngelScriptResolver.CreateScript(Ptr, name.ToPtr(), script.ToPtr()).Assert(); } public void LoadByteCodeFromMemory(byte[] data) { var pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned); var pointer = pinnedArray.AddrOfPinnedObject(); Pkmnlib.Generated.AngelScriptResolver.LoadByteCodeFromMemory(Ptr, pointer, (ulong) data.Length).Assert(); pinnedArray.Free(); } public unsafe delegate void* GlobalMethod(void* parameter); public void RegisterGlobalMethod(string methodName, GlobalMethod method) { var methodPtr = Marshal.GetFunctionPointerForDelegate(method); Pkmnlib.Generated.AngelScriptResolver.RegisterGlobalMethod(Ptr, methodName.ToPtr(), methodPtr).Assert(); } public void FinalizeModule() { Pkmnlib.Generated.AngelScriptResolver.FinalizeModule(Ptr).Assert(); } protected override void DeletePtr() { Pkmnlib.Generated.AngelScriptResolver.Destruct(Ptr).Assert(); } } }