81 lines
2.0 KiB
C#
81 lines
2.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace LuaInterface
|
|
{
|
|
[Flags]
|
|
public enum InjectType
|
|
{
|
|
None = 0,
|
|
After = 1,
|
|
Before = 1 << 1,
|
|
Replace = 1 << 2,
|
|
ReplaceWithPreInvokeBase = 1 << 3,
|
|
ReplaceWithPostInvokeBase = 1 << 4
|
|
}
|
|
|
|
public class LuaInjectionStation
|
|
{
|
|
public const byte NOT_INJECTION_FLAG = 0;
|
|
public const byte INVALID_INJECTION_FLAG = byte.MaxValue;
|
|
|
|
static int cacheSize = 0;
|
|
static byte[] injectionFlagCache;
|
|
static LuaFunction[] injectFunctionCache;
|
|
|
|
static LuaInjectionStation()
|
|
{
|
|
injectionFlagCache = new byte[cacheSize];
|
|
injectFunctionCache = new LuaFunction[cacheSize];
|
|
}
|
|
|
|
[NoToLua]
|
|
public static byte GetInjectFlag(int index)
|
|
{
|
|
byte result = injectionFlagCache[index];
|
|
|
|
if (result == INVALID_INJECTION_FLAG)
|
|
{
|
|
return NOT_INJECTION_FLAG;
|
|
}
|
|
else if (result == NOT_INJECTION_FLAG)
|
|
{
|
|
/// Delay injection not supported
|
|
if (LuaState.GetInjectInitState(index))
|
|
{
|
|
injectionFlagCache[index] = INVALID_INJECTION_FLAG;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
[NoToLua]
|
|
public static LuaFunction GetInjectionFunction(int index)
|
|
{
|
|
return injectFunctionCache[index];
|
|
}
|
|
|
|
public static void CacheInjectFunction(int index, byte injectFlag, LuaFunction func)
|
|
{
|
|
if (index >= cacheSize)
|
|
{
|
|
return;
|
|
}
|
|
|
|
injectFunctionCache[index] = func;
|
|
injectionFlagCache[index] = injectFlag;
|
|
}
|
|
|
|
public static void Clear()
|
|
{
|
|
for (int i = 0, len = injectionFlagCache.Length; i < len; ++i)
|
|
{
|
|
injectionFlagCache[i] = 0;
|
|
injectFunctionCache[i] = null;
|
|
}
|
|
}
|
|
}
|
|
}
|