static int GetClassType(IntPtr L) { int reference = LuaDLL.tolua_getmetatableref(L, -1); if (reference > 0) { Type t = LuaStatic.GetClassType(L, reference); Push(L, t); } else { LuaValueType ret = LuaDLL.tolua_getvaluetype(L, -1); switch (ret) { case LuaValueType.Vector3: Push(L, typeof(Vector3)); break; case LuaValueType.Quaternion: Push(L, typeof(Quaternion)); break; case LuaValueType.Vector4: Push(L, typeof(Vector4)); break; case LuaValueType.Color: Push(L, typeof(Color)); break; case LuaValueType.Ray: Push(L, typeof(Ray)); break; case LuaValueType.Bounds: Push(L, typeof(Bounds)); break; case LuaValueType.Vector2: Push(L, typeof(Vector2)); break; case LuaValueType.LayerMask: Push(L, typeof(LayerMask)); break; case LuaValueType.RaycastHit: Push(L, typeof(RaycastHit)); break; default: Debugger.LogError("type not register to lua"); LuaDLL.lua_pushnil(L); break; } } return(1); }
static bool lua_isusertable(IntPtr L, Type t, int pos) { if (t.IsArray) { return(true); } else if (t == typeof(LuaTable)) { return(true); } else if (t.IsValueType) { LuaValueType vt = LuaDLL.tolua_getvaluetype(L, pos); switch (vt) { case LuaValueType.Vector3: return(typeof(Vector3) == t); case LuaValueType.Quaternion: return(typeof(Quaternion) == t); case LuaValueType.Color: return(typeof(Color) == t); case LuaValueType.Ray: return(typeof(Ray) == t); case LuaValueType.Bounds: return(typeof(Bounds) == t); case LuaValueType.Vector2: return(typeof(Vector2) == t); case LuaValueType.Vector4: return(typeof(Vector4) == t); case LuaValueType.Touch: return(typeof(Touch) == t); case LuaValueType.LayerMask: return(typeof(LayerMask) == t); case LuaValueType.RaycastHit: return(typeof(RaycastHit) == t); default: break; } } else if (LuaDLL.tolua_isvptrtable(L, pos)) { return(IsMatchUserData(L, t, pos)); } return(false); }
public static object ToVarTable(IntPtr L, int stackPos) { stackPos = LuaDLL.abs_index(L, stackPos); LuaValueType ret = LuaDLL.tolua_getvaluetype(L, stackPos); switch (ret) { case LuaValueType.Vector3: return(ToVector3(L, stackPos)); case LuaValueType.Quaternion: return(ToQuaternion(L, stackPos)); case LuaValueType.Vector4: return(ToVector4(L, stackPos)); case LuaValueType.Color: return(ToColor(L, stackPos)); case LuaValueType.Ray: return(ToRay(L, stackPos)); case LuaValueType.Bounds: return(ToBounds(L, stackPos)); case LuaValueType.Vector2: return(ToVector2(L, stackPos)); case LuaValueType.LayerMask: return(ToLayerMask(L, stackPos)); default: LuaState state = LuaState.Get(L); LuaDLL.lua_pushvalue(L, stackPos); int reference = LuaDLL.toluaL_ref(L); return(state.GetTable(reference)); } }