public static int DoFile(IntPtr ptr) { int n = LuaNativeMethods.lua_gettop(ptr); Loader(ptr); if (!LuaNativeMethods.lua_toboolean(ptr, -2)) { return(2); } else { if (LuaNativeMethods.lua_isnil(ptr, -1)) { string fileName = LuaNativeMethods.lua_tostring(ptr, 1); return(LuaObject.Error(ptr, "Can't find {0}", fileName)); } int k = LuaNativeMethods.lua_gettop(ptr); LuaNativeMethods.lua_call(ptr, 0, LuaNativeMethods.LUAMultRet); k = LuaNativeMethods.lua_gettop(ptr); return(k - n); } }
public static bool CheckType(IntPtr ptr, int p, out bool v) { LuaNativeMethods.luaL_checktype(ptr, p, LuaTypes.TYPE_BOOLEAN); v = LuaNativeMethods.lua_toboolean(ptr, p); return(true); }
public static int Add(IntPtr ptr) { try { int top = LuaNativeMethods.lua_gettop(ptr); if (top == 2) { int delay; CheckType(ptr, 1, out delay); LuaDelegate luaDelegate; CheckType(ptr, 2, out luaDelegate); Action <int> ua; if (luaDelegate.Delegate != null) { ua = (Action <int>)luaDelegate.Delegate; } else { IntPtr ml = LuaState.Get(ptr).StatePointer; ua = (int id) => { int error = PushTry(ml); LuaObject.PushValue(ml, id); luaDelegate.ProtectedCall(1, error); LuaNativeMethods.lua_settop(ml, error - 1); }; } luaDelegate.Delegate = ua; LuaObject.PushValue(ptr, true); LuaObject.PushValue(ptr, Add(delay, ua)); return(2); } else if (top == 3) { int delay, cycle; CheckType(ptr, 1, out delay); CheckType(ptr, 2, out cycle); LuaDelegate luaDelegate; CheckType(ptr, 3, out luaDelegate); Func <int, bool> ua; if (luaDelegate.Delegate != null) { ua = (Func <int, bool>)luaDelegate.Delegate; } else { IntPtr ml = LuaState.Get(ptr).StatePointer; ua = (int id) => { int error = PushTry(ml); LuaObject.PushValue(ml, id); luaDelegate.ProtectedCall(1, error); bool ret = LuaNativeMethods.lua_toboolean(ml, -1); LuaNativeMethods.lua_settop(ml, error - 1); return(ret); }; } luaDelegate.Delegate = ua; LuaObject.PushValue(ptr, true); LuaObject.PushValue(ptr, Add(delay, cycle, ua)); return(2); } return(Error(ptr, "Argument error")); } catch (Exception e) { return(Error(ptr, e)); } }
public static object CheckVar(IntPtr ptr, int p) { LuaTypes type = LuaNativeMethods.lua_type(ptr, p); switch (type) { case LuaTypes.TYPE_NUMBER: return(LuaNativeMethods.lua_tonumber(ptr, p)); case LuaTypes.TYPE_STRING: return(LuaNativeMethods.lua_tostring(ptr, p)); case LuaTypes.TYPE_BOOLEAN: return(LuaNativeMethods.lua_toboolean(ptr, p)); case LuaTypes.TYPE_FUNCTION: { LuaFunction v; CheckType(ptr, p, out v); return(v); } case LuaTypes.TYPE_TABLE: { if (IsLuaValueType(ptr, p)) { if (LuaTypeCheck(ptr, p, "Vector2")) { Vector2 v; CheckType(ptr, p, out v); return(v); } else if (LuaTypeCheck(ptr, p, "Vector3")) { Vector3 v; CheckType(ptr, p, out v); return(v); } else if (LuaTypeCheck(ptr, p, "Vector4")) { Vector4 v; CheckType(ptr, p, out v); return(v); } else if (LuaTypeCheck(ptr, p, "Quaternion")) { Quaternion v; CheckType(ptr, p, out v); return(v); } else if (LuaTypeCheck(ptr, p, "Color")) { Color c; CheckType(ptr, p, out c); return(c); } Logger.LogError("unknown lua value type"); return(null); } else if (IsLuaClass(ptr, p)) { return(CheckObj(ptr, p)); } else { LuaTable v; CheckType(ptr, p, out v); return(v); } } case LuaTypes.TYPE_USERDATA: return(LuaObject.CheckObj(ptr, p)); case LuaTypes.TYPE_THREAD: { LuaThread lt; CheckType(ptr, p, out lt); return(lt); } default: return(null); } }