public object toObject(int index) { if (index >= 1) { IntPtr l = L; int oldTop = LuaDLL.lua_gettop(l); LuaDLL.lua_getref(l, valueref); LuaDLL.lua_rawgeti(l, -1, index); int p = LuaDLL.lua_absindex(l, -1); object returnValue = LuaObject.checkObj(l, p); LuaDLL.lua_settop(l, oldTop); return(returnValue); } return(null); }
static internal object checkVar(IntPtr l, int p) { LuaTypes type = LuaDLL.lua_type(l, p); switch (type) { case LuaTypes.LUA_TNUMBER: { return(LuaDLL.lua_tonumber(l, p)); } case LuaTypes.LUA_TSTRING: { return(LuaDLL.lua_tostring(l, p)); } case LuaTypes.LUA_TBOOLEAN: { return(LuaDLL.lua_toboolean(l, p)); } case LuaTypes.LUA_TFUNCTION: { LuaDLL.lua_pushvalue(l, p); int r = LuaDLL.luaL_ref(l, LuaIndexes.LUA_REGISTRYINDEX); LuaFunction v = new LuaFunction(l, r); return(v); } case LuaTypes.LUA_TTABLE: { LuaDLL.lua_pushvalue(l, p); int r = LuaDLL.luaL_ref(l, LuaIndexes.LUA_REGISTRYINDEX); LuaTable v = new LuaTable(l, r); return(v); } case LuaTypes.LUA_TUSERDATA: return(LuaObject.checkObj(l, p)); default: return(null); } }
static public object checkVar(IntPtr l, int p) { LuaTypes type = LuaDLL.lua_type(l, p); switch (type) { case LuaTypes.LUA_TNUMBER: { return(LuaDLL.lua_tonumber(l, p)); } case LuaTypes.LUA_TSTRING: { return(LuaDLL.lua_tostring(l, p)); } case LuaTypes.LUA_TBOOLEAN: { return(LuaDLL.lua_toboolean(l, p)); } case LuaTypes.LUA_TFUNCTION: { LuaFunction v; LuaObject.checkType(l, p, out v); return(v); } case LuaTypes.LUA_TTABLE: { if (isLuaValueType(l, p)) { #if !SLUA_STANDALONE if (luaTypeCheck(l, p, "Vector2")) { Vector2 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Vector3")) { Vector3 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Vector4")) { Vector4 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Quaternion")) { Quaternion v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Color")) { Color c; checkType(l, p, out c); return(c); } #endif Logger.LogError("unknown lua value type"); return(null); } else if (isLuaClass(l, p)) { return(checkObj(l, p)); } else { LuaTable v; checkType(l, p, out v); return(v); } } case LuaTypes.LUA_TUSERDATA: return(LuaObject.checkObj(l, p)); case LuaTypes.LUA_TTHREAD: { LuaThread lt; LuaObject.checkType(l, p, out lt); return(lt); } default: return(null); } }
static public object checkVar(IntPtr l, int p) { LuaTypes type = LuaDLL.lua_type(l, p); switch (type) { case LuaTypes.LUA_TNUMBER: { return(LuaDLL.lua_tonumber(l, p)); } case LuaTypes.LUA_TSTRING: { return(LuaDLL.lua_tostring(l, p)); } case LuaTypes.LUA_TBOOLEAN: { return(LuaDLL.lua_toboolean(l, p)); } case LuaTypes.LUA_TFUNCTION: { LuaDLL.lua_pushvalue(l, p); int r = LuaDLL.luaL_ref(l, LuaIndexes.LUA_REGISTRYINDEX); LuaFunction v = new LuaFunction(l, r); return(v); } case LuaTypes.LUA_TTABLE: { if (isLuaValueType(l, p)) { if (luaTypeCheck(l, p, "Vector2")) { Vector2 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Vector3")) { Vector3 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Vector4")) { Vector4 v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Quaternion")) { Quaternion v; checkType(l, p, out v); return(v); } else if (luaTypeCheck(l, p, "Color")) { Color c; checkType(l, p, out c); return(c); } LuaDLL.luaL_error(l, "unknown lua value type"); return(null); } else if (isLuaClass(l, p)) { return(checkObj(l, p)); } else { LuaDLL.lua_pushvalue(l, p); int r = LuaDLL.luaL_ref(l, LuaIndexes.LUA_REGISTRYINDEX); LuaTable v = new LuaTable(l, r); return(v); } } case LuaTypes.LUA_TUSERDATA: return(LuaObject.checkObj(l, p)); default: return(null); } }
public static int UserdataToLuaTab(IntPtr l) { try { if (LuaDLL.lua_type(l, 1) == LuaTypes.LUA_TUSERDATA) { object o = LuaObject.checkObj(l, 1); Type ot = o.GetType(); if (ot.IsArray) { pushValue(l, true); LuaDLL.lua_newtable(l); //...,true, tab Array tmp = o as Array; for (int i = 0; i < tmp.Length; ++i) { LuaDLL.lua_pushinteger(l, i + 1); //...,true, tab, index LuaObject.pushVar(l, tmp.GetValue(i)); //...,true, tab, index, value LuaDLL.lua_rawset(l, -3); //..., true, tab } return(2); } bool isList = ot.IsGenericType && ot.GetGenericTypeDefinition() == typeof(List <>); if (isList) { pushValue(l, true); LuaDLL.lua_newtable(l); //...,true, tab IList tmp = o as IList; for (int i = 0; i < tmp.Count; ++i) { LuaDLL.lua_pushinteger(l, i + 1); //...,true, tab, index LuaObject.pushVar(l, tmp[i]); //...,true, tab, index, value LuaDLL.lua_rawset(l, -3); //..., true, tab } return(2); } bool isDict = ot.IsGenericType && ot.GetGenericTypeDefinition() == typeof(Dictionary <,>); if (isDict) { pushValue(l, true); LuaDLL.lua_newtable(l); //...,true, tab IDictionary dict = o as IDictionary; foreach (object key in dict.Keys) { object value = dict[key]; LuaObject.pushVar(l, key); //...,true, tab, index LuaObject.pushVar(l, value); //...,true, tab, index, value LuaDLL.lua_rawset(l, -3); //..., true, tab } return(2); } } pushValue(l, false); LuaDLL.lua_pushnil(l); return(2); } catch (Exception e) { return(LuaObject.error(l, e)); } }