示例#1
0
        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);
            }
        }
示例#2
0
 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);
 }
示例#3
0
        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));
            }
        }
示例#4
0
        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);
            }
        }