87 lines
2.9 KiB
C#
87 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using Pkmnlib;
|
|
using PkmnLibSharp.Library.Items;
|
|
using PkmnLibSharp.Utilities;
|
|
|
|
namespace PkmnLibSharp.Battling
|
|
{
|
|
public class AngelScriptResolver : ScriptResolver
|
|
{
|
|
private readonly Dictionary<string, EvolutionScript?> _evolutionScriptCache =
|
|
new Dictionary<string, EvolutionScript?>();
|
|
|
|
public AngelScriptResolver() : base(Pkmnlib.Generated.AngelScriptResolver.Construct())
|
|
{
|
|
}
|
|
|
|
internal AngelScriptResolver(IntPtr ptr) : base(ptr)
|
|
{
|
|
}
|
|
|
|
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 Script LoadScript(PointerWrapper owner, ScriptCategory category, string name)
|
|
{
|
|
var ptr = IntPtr.Zero;
|
|
Pkmnlib.Generated.AngelScriptResolver
|
|
.LoadScript(ref ptr, Ptr, owner.Ptr, (Pkmnlib.ScriptCategory)category, name.ToPtr()).Assert();
|
|
return new AngelscriptScript(ptr);
|
|
}
|
|
|
|
public EvolutionScript? LoadEvolutionScript(string name)
|
|
{
|
|
if (_evolutionScriptCache.TryGetValue(name, out var s))
|
|
{
|
|
return s;
|
|
}
|
|
|
|
var ptr = IntPtr.Zero;
|
|
Pkmnlib.Generated.AngelScriptResolver.LoadEvolutionScript(ref ptr, Ptr, name.ToPtr()).Assert();
|
|
if (ptr == IntPtr.Zero)
|
|
{
|
|
_evolutionScriptCache.Add(name, null);
|
|
return null;
|
|
}
|
|
|
|
s = new EvolutionScript(ptr);
|
|
_evolutionScriptCache.Add(name, s);
|
|
return s;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |