static int EndSample(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 0) { MikuLuaProfiler.LuaProfiler.EndSample(); return(0); } else if (count == 1) { System.IntPtr arg0 = ToLua.CheckIntPtr(L, 1); MikuLuaProfiler.LuaProfiler.EndSample(arg0); return(0); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to method: MikuLuaProfiler.LuaProfiler.EndSample")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int BeginSample(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 1 && TypeChecker.CheckTypes <System.IntPtr>(L, 1)) { System.IntPtr arg0 = ToLua.CheckIntPtr(L, 1); MikuLuaProfiler.LuaProfiler.BeginSample(arg0); return(0); } else if (count == 1 && TypeChecker.CheckTypes <string>(L, 1)) { string arg0 = ToLua.ToString(L, 1); MikuLuaProfiler.LuaProfiler.BeginSample(arg0); return(0); } else if (count == 2) { System.IntPtr arg0 = ToLua.CheckIntPtr(L, 1); string arg1 = ToLua.CheckString(L, 2); MikuLuaProfiler.LuaProfiler.BeginSample(arg0, arg1); return(0); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to method: MikuLuaProfiler.LuaProfiler.BeginSample")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public static void RefString(IntPtr strPoint, int index, string s, IntPtr L) { int oldTop = LuaDLL.lua_gettop(L); LuaDLL.lua_pushvalue(L, index); //把字符串ref了之后就不GC了 LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); LuaDLL.lua_settop(L, oldTop); stringDict[(long)strPoint] = s; }
public int LuaGetTop() { return(LuaDLL.lua_gettop(L)); }
public int AbsIndex(int i) { return((i > 0 || i <= LuaIndexes.LUA_REGISTRYINDEX) ? i : LuaDLL.lua_gettop(L) + i + 1); }
/* * Matches a method against its arguments in the Lua stack. Returns * if the match was succesful. It it was also returns the information * necessary to invoke the method. */ internal bool matchParameters(IntPtr luaState, MethodBase method, ref MethodCache methodCache) { ExtractValue extractValue; bool isMethod = true; ParameterInfo[] paramInfo = method.GetParameters(); int currentLuaParam = 1; int nLuaParams = LuaDLL.lua_gettop(luaState); ArrayList paramList = new ArrayList(); List <int> outList = new List <int>(); List <MethodArgs> argTypes = new List <MethodArgs>(); foreach (ParameterInfo currentNetParam in paramInfo) { if (!currentNetParam.IsIn && currentNetParam.IsOut) // Skips out params { outList.Add(paramList.Add(null)); } else if (currentLuaParam > nLuaParams) // Adds optional parameters { if (currentNetParam.IsOptional) { paramList.Add(currentNetParam.DefaultValue); } else { isMethod = false; break; } } else if (_IsTypeCorrect(luaState, currentLuaParam, currentNetParam, out extractValue)) // Type checking { int index = paramList.Add(extractValue(luaState, currentLuaParam)); MethodArgs methodArg = new MethodArgs(); methodArg.index = index; methodArg.extractValue = extractValue; argTypes.Add(methodArg); if (currentNetParam.ParameterType.IsByRef) { outList.Add(index); } currentLuaParam++; } // Type does not match, ignore if the parameter is optional else if (_IsParamsArray(luaState, currentLuaParam, currentNetParam, out extractValue)) { object luaParamValue = extractValue(luaState, currentLuaParam); Type paramArrayType = currentNetParam.ParameterType.GetElementType(); Array paramArray = TableToArray(luaParamValue, paramArrayType); int index = paramList.Add(paramArray); MethodArgs methodArg = new MethodArgs(); methodArg.index = index; methodArg.extractValue = extractValue; methodArg.isParamsArray = true; methodArg.paramsArrayType = paramArrayType; argTypes.Add(methodArg); currentLuaParam++; } else if (currentNetParam.IsOptional) { paramList.Add(currentNetParam.DefaultValue); } else // No match { isMethod = false; break; } } if (currentLuaParam != nLuaParams + 1) // Number of parameters does not match { isMethod = false; } if (isMethod) { methodCache.args = paramList.ToArray(); methodCache.cachedMethod = method; methodCache.outList = outList.ToArray(); methodCache.argTypes = argTypes.ToArray(); } return(isMethod); }
public static void Register(IntPtr L) { int oldTop = LuaDLL.lua_gettop(L); LuaDLL.lua_getglobal(L, "Transform"); if (LuaDLL.lua_isnil(L, -1)) { LuaDLL.lua_pop(L, 1); LuaDLL.lua_newtable(L); LuaDLL.lua_setglobal(L, "Transform"); LuaDLL.lua_getglobal(L, "Transform"); } LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.SetParent, "SetParent"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.Translate, "Translate"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.Rotate, "Rotate"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.RotateAround, "RotateAround"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.LookAt, "LookAt"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.TransformDirection, "TransformDirection"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.InverseTransformDirection, "InverseTransformDirection"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.TransformVector, "TransformVector"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.InverseTransformVector, "InverseTransformVector"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.TransformPoint, "TransformPoint"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.InverseTransformPoint, "InverseTransformPoint"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.DetachChildren, "DetachChildren"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.SetAsFirstSibling, "SetAsFirstSibling"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.SetAsLastSibling, "SetAsLastSibling"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.SetSiblingIndex, "SetSiblingIndex"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.GetSiblingIndex, "GetSiblingIndex"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.Find, "Find"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.IsChildOf, "IsChildOf"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.FindChild, "FindChild"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.GetEnumerator, "GetEnumerator"); LuaDLL.lua_pushstdcallcfunction(L, LuaTransform.GetChild, "GetChild"); LuaDLL.lua_pushcsharpproperty(L, "position", LuaTransform.get_position, LuaTransform.set_position); LuaDLL.lua_pushcsharpproperty(L, "localPosition", LuaTransform.get_localPosition, LuaTransform.set_localPosition); LuaDLL.lua_pushcsharpproperty(L, "eulerAngles", LuaTransform.get_eulerAngles, LuaTransform.set_eulerAngles); LuaDLL.lua_pushcsharpproperty(L, "localEulerAngles", LuaTransform.get_localEulerAngles, LuaTransform.set_localEulerAngles); LuaDLL.lua_pushcsharpproperty(L, "right", LuaTransform.get_right, LuaTransform.set_right); LuaDLL.lua_pushcsharpproperty(L, "up", LuaTransform.get_up, LuaTransform.set_up); LuaDLL.lua_pushcsharpproperty(L, "forward", LuaTransform.get_forward, LuaTransform.set_forward); LuaDLL.lua_pushcsharpproperty(L, "rotation", LuaTransform.get_rotation, LuaTransform.set_rotation); LuaDLL.lua_pushcsharpproperty(L, "localRotation", LuaTransform.get_localRotation, LuaTransform.set_localRotation); LuaDLL.lua_pushcsharpproperty(L, "localScale", LuaTransform.get_localScale, LuaTransform.set_localScale); LuaDLL.lua_pushcsharpproperty(L, "parent", LuaTransform.get_parent, LuaTransform.set_parent); LuaDLL.lua_pushcsharpproperty(L, "worldToLocalMatrix", LuaTransform.get_worldToLocalMatrix, null); LuaDLL.lua_pushcsharpproperty(L, "localToWorldMatrix", LuaTransform.get_localToWorldMatrix, null); LuaDLL.lua_pushcsharpproperty(L, "root", LuaTransform.get_root, null); LuaDLL.lua_pushcsharpproperty(L, "childCount", LuaTransform.get_childCount, null); LuaDLL.lua_pushcsharpproperty(L, "lossyScale", LuaTransform.get_lossyScale, null); LuaDLL.lua_pushcsharpproperty(L, "hasChanged", LuaTransform.get_hasChanged, LuaTransform.set_hasChanged); LuaDLL.lua_getglobal(L, "readIndex"); LuaDLL.lua_pushvalue(L, -1); LuaDLL.lua_setfield(L, -3, "__index"); LuaDLL.lua_pop(L, 1); LuaDLL.lua_getglobal(L, "writeIndex"); LuaDLL.lua_pushvalue(L, -1); LuaDLL.lua_setfield(L, -3, "__newindex"); LuaDLL.lua_pop(L, 1); LuaDLL.lua_pushstdcallcfunction(L, new LuaCSFunction(LuaStatic.GameObjectGC)); LuaDLL.lua_setfield(L, -2, "__gc"); LuaDLL.lua_getglobal(L, "Component"); if (LuaDLL.lua_isnil(L, -1)) { LuaDLL.lua_pop(L, 1); LuaDLL.lua_newtable(L); LuaDLL.lua_setglobal(L, "Component"); LuaDLL.lua_getglobal(L, "Component"); LuaDLL.lua_setmetatable(L, -2); } else { LuaDLL.lua_setmetatable(L, -2); } LuaDLL.lua_settop(L, oldTop); LuaStatic.AddTypeDict(typeof(UnityEngine.Transform)); }
public static int Rotate(IntPtr L) { int result = 1; int count = LuaDLL.lua_gettop(L); if (count == 2 && LuaStatic.CheckType(L, typeof(UnityEngine.Vector3), 2)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; UnityEngine.Vector3 arg1 = (UnityEngine.Vector3)LuaStatic.GetObj(L, 2); obj.Rotate(arg1); return(result); } if (count == 3 && LuaStatic.CheckType(L, typeof(UnityEngine.Vector3), 2) && LuaStatic.CheckType(L, typeof(UnityEngine.Space), 3)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; UnityEngine.Vector3 arg1 = (UnityEngine.Vector3)LuaStatic.GetObj(L, 2); UnityEngine.Space arg2 = (UnityEngine.Space)(double)(LuaStatic.GetObj(L, 3)); obj.Rotate(arg1, arg2); return(result); } if (count == 4 && LuaStatic.CheckType(L, typeof(Single), 2) && LuaStatic.CheckType(L, typeof(Single), 3) && LuaStatic.CheckType(L, typeof(Single), 4)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; Single arg1 = (Single)(double)(LuaStatic.GetObj(L, 2)); Single arg2 = (Single)(double)(LuaStatic.GetObj(L, 3)); Single arg3 = (Single)(double)(LuaStatic.GetObj(L, 4)); obj.Rotate(arg1, arg2, arg3); return(result); } if (count == 5 && LuaStatic.CheckType(L, typeof(Single), 2) && LuaStatic.CheckType(L, typeof(Single), 3) && LuaStatic.CheckType(L, typeof(Single), 4) && LuaStatic.CheckType(L, typeof(UnityEngine.Space), 5)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; Single arg1 = (Single)(double)(LuaStatic.GetObj(L, 2)); Single arg2 = (Single)(double)(LuaStatic.GetObj(L, 3)); Single arg3 = (Single)(double)(LuaStatic.GetObj(L, 4)); UnityEngine.Space arg4 = (UnityEngine.Space)(double)(LuaStatic.GetObj(L, 5)); obj.Rotate(arg1, arg2, arg3, arg4); return(result); } if (count == 3 && LuaStatic.CheckType(L, typeof(UnityEngine.Vector3), 2) && LuaStatic.CheckType(L, typeof(Single), 3)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; UnityEngine.Vector3 arg1 = (UnityEngine.Vector3)LuaStatic.GetObj(L, 2); Single arg2 = (Single)(double)(LuaStatic.GetObj(L, 3)); obj.Rotate(arg1, arg2); return(result); } if (count == 4 && LuaStatic.CheckType(L, typeof(UnityEngine.Vector3), 2) && LuaStatic.CheckType(L, typeof(Single), 3) && LuaStatic.CheckType(L, typeof(UnityEngine.Space), 4)) { UnityEngine.Transform obj = LuaStatic.GetObj(L, 1) as UnityEngine.Transform; UnityEngine.Vector3 arg1 = (UnityEngine.Vector3)LuaStatic.GetObj(L, 2); Single arg2 = (Single)(double)(LuaStatic.GetObj(L, 3)); UnityEngine.Space arg3 = (UnityEngine.Space)(double)(LuaStatic.GetObj(L, 4)); obj.Rotate(arg1, arg2, arg3); return(result); } LuaStatic.traceback(L, "count not enough"); LuaDLL.lua_error(L); return(result); }
static int Print_Warning(IntPtr L) { try { int n = LuaDLL.lua_gettop(L); StringBuilder sb = StringBuilderCache.Acquire(); #if UNITY_EDITOR2 int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); if (!filename.Contains(".")) { sb.AppendFormat("[{0}.lua:{1}]:", filename, line); } else { sb.AppendFormat("[{0}:{1}]:", filename, line); } #endif sb.Append("["); sb.Append(DateTime.Now.ToString("HH:mm:ss")); sb.Append("] "); for (int i = 1; i <= n; i++) { if (i > 1) { sb.Append(" "); } if (LuaDLL.lua_isstring(L, i) == 1) { sb.Append(LuaDLL.lua_tostring(L, i)); } else if (LuaDLL.lua_isnil(L, i)) { sb.Append("nil"); } else if (LuaDLL.lua_isboolean(L, i)) { sb.Append(LuaDLL.lua_toboolean(L, i) ? "true" : "false"); } else { IntPtr p = LuaDLL.lua_topointer(L, i); if (p == IntPtr.Zero) { sb.Append("nil"); } else { sb.AppendFormat("{0}:0x{1}", LuaDLL.luaL_typename(L, i), p.ToString("X")); } } } GameBase.Debugger.LogWarning_Fixed(StringBuilderCache.GetStringAndRelease(sb)); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// Pops a value from the lua stack. /// </summary> /// <returns>Returns the top value from the lua stack.</returns> /// <author>Reinhard Ostermeier</author> public object Pop() { int top = LuaDLL.lua_gettop(luaState); return(translator.popValues(luaState, top - 1)[0]); }