lua_newtable() public static method

public static lua_newtable ( IntPtr luaState ) : void
luaState System.IntPtr
return void
示例#1
0
 private void createLuaObjectList(IntPtr luaState)
 {
     LuaDLL.lua_pushstring(luaState, "luaNet_objects");
     LuaDLL.lua_newtable(luaState);
     LuaDLL.lua_pushvalue(luaState, -1);
     this.weakTableRef = LuaDLL.luaL_ref(luaState, LuaIndexes.LUA_REGISTRYINDEX);
     LuaDLL.lua_pushvalue(luaState, -1);
     LuaDLL.lua_setmetatable(luaState, -2);
     LuaDLL.lua_pushstring(luaState, "__mode");
     LuaDLL.lua_pushstring(luaState, "v");
     LuaDLL.lua_settable(luaState, -3);
     LuaDLL.lua_settable(luaState, LuaIndexes.LUA_REGISTRYINDEX);
 }
示例#2
0
 public static void Init(IntPtr L, InitStep step)
 {
     if (step == InitStep.FIRSTLY)
     {
         LuaDLL.lua_newtable(L);                              //unityengine,cswrap,t
         _addMemberFunction(L);                               //unityengine,cswrap,t
         Lua_Register._SetTypeTable2Namespace(L, "Renderer"); //unityengine,cswrap
     }
     else if (step == InitStep.FINAL)
     {
         _InitLink(L);
     }
 }
示例#3
0
        public static void Register(IntPtr L)
        {
            int oldTop = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getglobal(L, "Director");

            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "Director");
                LuaDLL.lua_getglobal(L, "Director");
            }

            LuaDLL.lua_pushstdcallcfunction(L, LuaDirector.GetInstance, "GetInstance");
            LuaDLL.lua_pushstdcallcfunction(L, LuaDirector.LogTest, "LogTest");
            LuaDLL.lua_pushcsharpproperty(L, "value", LuaDirector.get_value, LuaDirector.set_value);
            LuaDLL.lua_pushcsharpproperty(L, "luaState", LuaDirector.get_luaState, null);
            LuaDLL.lua_pushcsharpproperty(L, "scheduler", LuaDirector.get_scheduler, null);
            LuaDLL.lua_pushcsharpproperty(L, "uiManager", LuaDirector.get_uiManager, null);
            LuaDLL.lua_pushcsharpproperty(L, "eventDispatcher", LuaDirector.get_eventDispatcher, null);

            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, "MonoBehaviour");
            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "MonoBehaviour");
                LuaDLL.lua_getglobal(L, "MonoBehaviour");
                LuaDLL.lua_setmetatable(L, -2);
            }
            else
            {
                LuaDLL.lua_setmetatable(L, -2);
            }

            LuaDLL.lua_settop(L, oldTop);
            LuaStatic.AddTypeDict(typeof(Director));
        }
示例#4
0
        public static int registerTable(IntPtr luaState)
        {
#if __NOGEN__
            throwError(luaState, "Tables as Objects not implemnented");
#else
            ObjectTranslator translator = ObjectTranslator.FromState(luaState);
            if (LuaDLL.lua_type(luaState, 1) == LuaTypes.LUA_TTABLE)
            {
                LuaTable luaTable       = translator.getTable(luaState, 1);
                string   superclassName = LuaDLL.lua_tostring(luaState, 2);
                if (superclassName != null)
                {
                    Type klass = translator.FindType(superclassName);
                    if (klass != null)
                    {
                        // Creates and pushes the object in the stack, setting
                        // it as the  metatable of the first argument
                        object obj = CodeGeneration.Instance.GetClassInstance(klass, luaTable);
                        translator.pushObject(luaState, obj, "luaNet_metatable");
                        LuaDLL.lua_newtable(luaState);
                        LuaDLL.lua_pushstring(luaState, "__index");
                        LuaDLL.lua_pushvalue(luaState, -3);
                        LuaDLL.lua_settable(luaState, -3);
                        LuaDLL.lua_pushstring(luaState, "__newindex");
                        LuaDLL.lua_pushvalue(luaState, -3);
                        LuaDLL.lua_settable(luaState, -3);
                        LuaDLL.lua_setmetatable(luaState, 1);
                        // Pushes the object again, this time as the base field
                        // of the table and with the luaNet_searchbase metatable
                        LuaDLL.lua_pushstring(luaState, "base");
                        int index = translator.addObject(obj);
                        translator.pushNewObject(luaState, obj, index, "luaNet_searchbase");
                        LuaDLL.lua_rawset(luaState, 1);
                    }
                    else
                    {
                        translator.throwError(luaState, "register_table: can not find superclass '" + superclassName + "'");
                    }
                }
                else
                {
                    translator.throwError(luaState, "register_table: superclass name can not be null");
                }
            }
            else
            {
                translator.throwError(luaState, "register_table: first arg is not a table");
            }
#endif
            return(0);
        }
        /*
         * Pushes a new object into the Lua stack with the provided
         * metatable
         */
        private void pushNewObject(IntPtr luaState, object o, int index, string metatable)
        {
            //LuaDLL.luaL_getmetatable(luaState, "luaNet_objects");
            LuaDLL.lua_getref(luaState, weakTableRef);
            LuaDLL.luanet_newudata(luaState, index);

            if (metatable == "luaNet_metatable")
            {
                // Gets or creates the metatable for the object's type
                //string meta = t.AssemblyQualifiedName
                //LuaDLL.luaL_getmetatable(luaState, meta);
                Type t = o.GetType();
                PushMetaTable(luaState, o.GetType());

                if (LuaDLL.lua_isnil(luaState, -1))
                {
                    string meta = t.AssemblyQualifiedName;
                    Debugger.LogError("Create not wrap ulua type:" + meta);
                    LuaDLL.lua_settop(luaState, -2);
                    LuaDLL.luaL_newmetatable(luaState, meta);
                    LuaDLL.lua_pushstring(luaState, "cache");
                    LuaDLL.lua_newtable(luaState);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
                    LuaDLL.lua_pushnumber(luaState, 1);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__index");
                    LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
                    LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__gc");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__tostring");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__newindex");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                }
            }
            else
            {
                LuaDLL.luaL_getmetatable(luaState, metatable);
            }

            LuaDLL.lua_setmetatable(luaState, -2);
            LuaDLL.lua_pushvalue(luaState, -1);
            LuaDLL.lua_rawseti(luaState, -3, index);
            LuaDLL.lua_remove(luaState, -2);
        }
示例#6
0
文件: LuaDLL.cs 项目: sakyaer/emoji
        public static void lua_pushvector3(IntPtr luaState, Vector3 v)
        {
            LuaDLL.lua_newtable(luaState);
            LuaDLL.lua_pushnumber(luaState, (double)v.x);
            LuaDLL.lua_setfield(luaState, -2, "x");
            LuaDLL.lua_pushnumber(luaState, (double)v.y);
            LuaDLL.lua_setfield(luaState, -2, "y");
            LuaDLL.lua_pushnumber(luaState, (double)v.z);
            LuaDLL.lua_setfield(luaState, -2, "z");

            lua_setmetatable(luaState, "Vector3");

            LuaDLL.lua_pushvalue(luaState, -1);
        }
示例#7
0
文件: LuaDLL.cs 项目: sakyaer/emoji
        public static void lua_pushcsharpproperty(IntPtr luaState, string propertyName, LuaCSFunction get, LuaCSFunction set)
        {
            LuaDLL.lua_newtable(luaState);
            LuaDLL.lua_pushstdcallcfunction(luaState, get);
            LuaDLL.lua_setfield(luaState, -2, "get");

            if (set != null)
            {
                LuaDLL.lua_pushstdcallcfunction(luaState, set);
                LuaDLL.lua_setfield(luaState, -2, "set");
            }

            LuaDLL.lua_setfield(luaState, -2, propertyName);
        }
示例#8
0
        public static void Register(IntPtr L)
        {
            int oldTop = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getglobal(L, "Scheduler");

            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "Scheduler");
                LuaDLL.lua_getglobal(L, "Scheduler");
            }

            LuaDLL.lua_pushstdcallcfunction(L, LuaScheduler.MakeInstance, "MakeInstance");
            LuaDLL.lua_pushstdcallcfunction(L, LuaScheduler.SchedulerCSFun, "SchedulerCSFun");
            LuaDLL.lua_pushstdcallcfunction(L, LuaScheduler.UnSchedulerCSFun, "UnSchedulerCSFun");
            LuaDLL.lua_pushstdcallcfunction(L, LuaScheduler.SetTimeOut, "SetTimeOut");
            LuaDLL.lua_pushstdcallcfunction(L, LuaScheduler.ExecuteCoroutine, "ExecuteCoroutine");

            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, "MonoBehaviour");
            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "MonoBehaviour");
                LuaDLL.lua_getglobal(L, "MonoBehaviour");
                LuaDLL.lua_setmetatable(L, -2);
            }
            else
            {
                LuaDLL.lua_setmetatable(L, -2);
            }

            LuaDLL.lua_settop(L, oldTop);
            LuaStatic.AddTypeDict(typeof(Scheduler));
        }
示例#9
0
        public static int GetComponentsInParent(IntPtr L)
        {
            int result = 1;
            int count  = LuaDLL.lua_gettop(L);

            if (count == 2 &&
                LuaStatic.CheckType(L, typeof(Type), 2))
            {
                UnityEngine.GameObject obj = LuaStatic.GetObj(L, 1) as UnityEngine.GameObject;
                object      type1          = LuaStatic.GetObj(L, 2);
                Type        arg1           = LuaStatic.GetType(type1);
                IEnumerable objs           = (IEnumerable)obj.GetComponentsInParent(arg1);
                LuaDLL.lua_newtable(L);
                int num2 = 0;
                foreach (var item in objs)
                {
                    LuaStatic.addGameObject2Lua(L, (UnityEngine.Component)item, (string)type1);
                    LuaDLL.lua_pushnumber(L, (double)(++num2));
                    LuaDLL.lua_insert(L, -2);
                    LuaDLL.lua_settable(L, -3);
                }

                return(result);
            }
            if (count == 3 &&
                LuaStatic.CheckType(L, typeof(Type), 2) &&
                LuaStatic.CheckType(L, typeof(Boolean), 3))
            {
                UnityEngine.GameObject obj = LuaStatic.GetObj(L, 1) as UnityEngine.GameObject;
                object      type1          = LuaStatic.GetObj(L, 2);
                Type        arg1           = LuaStatic.GetType(type1);
                Boolean     arg2           = (Boolean)LuaStatic.GetObj(L, 3);
                IEnumerable objs           = (IEnumerable)obj.GetComponentsInParent(arg1, arg2);
                LuaDLL.lua_newtable(L);
                int num2 = 0;
                foreach (var item in objs)
                {
                    LuaStatic.addGameObject2Lua(L, (UnityEngine.Component)item, "Component");
                    LuaDLL.lua_pushnumber(L, (double)(++num2));
                    LuaDLL.lua_insert(L, -2);
                    LuaDLL.lua_settable(L, -3);
                }

                return(result);
            }
            LuaStatic.traceback(L, "count not enough");
            LuaDLL.lua_error(L);
            return(result);
        }
示例#10
0
        /*
         * Pushes a new object into the Lua stack with the provided
         * metatable
         */
        private void pushNewObject(IntPtr luaState, object o, int index, string metatable)
        {
            if (metatable == "luaNet_metatable")
            {
                // Gets or creates the metatable for the object's type
                LuaDLL.luaL_getmetatable(luaState, o.GetType().AssemblyQualifiedName);

                if (LuaDLL.lua_isnil(luaState, -1))
                {
                    LuaDLL.lua_settop(luaState, -2);
                    LuaDLL.luaL_newmetatable(luaState, o.GetType().AssemblyQualifiedName);
                    LuaDLL.lua_pushstring(luaState, "cache");
                    LuaDLL.lua_newtable(luaState);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
                    LuaDLL.lua_pushnumber(luaState, 1);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__index");
                    LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
                    LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__gc");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__tostring");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__newindex");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                }
            }
            else
            {
                LuaDLL.luaL_getmetatable(luaState, metatable);
            }

            // Stores the object index in the Lua list and pushes the
            // index into the Lua stack
            LuaDLL.luaL_getmetatable(luaState, "luaNet_objects");
            LuaDLL.luanet_newudata(luaState, index);
            LuaDLL.lua_pushvalue(luaState, -3);
            LuaDLL.lua_remove(luaState, -4);
            LuaDLL.lua_setmetatable(luaState, -2);
            LuaDLL.lua_pushvalue(luaState, -1);
            LuaDLL.lua_rawseti(luaState, -3, index);
            LuaDLL.lua_remove(luaState, -2);
        }
示例#11
0
文件: LuaDLL.cs 项目: sakyaer/emoji
        public static void lua_pushrect(IntPtr luaState, Rect rect)
        {
            LuaDLL.lua_newtable(luaState);
            LuaDLL.lua_pushnumber(luaState, (double)rect.x);
            LuaDLL.lua_setfield(luaState, -2, "x");
            LuaDLL.lua_pushnumber(luaState, (double)rect.y);
            LuaDLL.lua_setfield(luaState, -2, "y");
            LuaDLL.lua_pushnumber(luaState, (double)rect.width);
            LuaDLL.lua_setfield(luaState, -2, "width");
            LuaDLL.lua_pushnumber(luaState, (double)rect.height);
            LuaDLL.lua_setfield(luaState, -2, "height");

            lua_setmetatable(luaState, "Rect");

            LuaDLL.lua_pushvalue(luaState, -1);
        }
示例#12
0
        public static int LoadAll(IntPtr L)
        {
            int result = 1;
            int count  = LuaDLL.lua_gettop(L);

            if (count == 3 &&
                LuaStatic.CheckType(L, typeof(String), 2) &&
                LuaStatic.CheckType(L, typeof(Type), 3))
            {
                String      arg1  = (String)LuaStatic.GetObj(L, 2);
                object      type2 = LuaStatic.GetObj(L, 3);
                Type        arg2  = LuaStatic.GetType(type2);
                IEnumerable objs  = (IEnumerable)UnityEngine.Resources.LoadAll(arg1, arg2);
                LuaDLL.lua_newtable(L);
                int num2 = 0;
                foreach (var item in objs)
                {
                    LuaStatic.addGameObject2Lua(L, (UnityEngine.Object)item, (string)type2);
                    LuaDLL.lua_pushnumber(L, (double)(++num2));
                    LuaDLL.lua_insert(L, -2);
                    LuaDLL.lua_settable(L, -3);
                }

                return(result);
            }
            if (count == 2 &&
                LuaStatic.CheckType(L, typeof(String), 2))
            {
                String      arg1 = (String)LuaStatic.GetObj(L, 2);
                IEnumerable objs = (IEnumerable)UnityEngine.Resources.LoadAll(arg1);
                LuaDLL.lua_newtable(L);
                int num2 = 0;
                foreach (var item in objs)
                {
                    LuaStatic.addGameObject2Lua(L, (UnityEngine.Object)item, "Object");
                    LuaDLL.lua_pushnumber(L, (double)(++num2));
                    LuaDLL.lua_insert(L, -2);
                    LuaDLL.lua_settable(L, -3);
                }

                return(result);
            }
            LuaStatic.traceback(L, "count not enough");
            LuaDLL.lua_error(L);
            return(result);
        }
 /*
  * Implementation of make_object. Registers a table (first
  * argument in the stack) as an object subclassing the
  * type passed as second argument in the stack.
  */
 private int registerTable(KopiLua.Lua.lua_State luaState)
 {
     if (LuaDLL.lua_type(luaState, 1) == LuaTypes.LUA_TTABLE)
     {
         LuaTable luaTable       = getTable(luaState, 1);
         string   superclassName = LuaDLL.lua_tostring(luaState, 2);
         if (superclassName != null)
         {
             Type klass = FindType(superclassName);
             if (klass != null)
             {
                 // Creates and pushes the object in the stack, setting
                 // it as the  metatable of the first argument
                 object obj = CodeGeneration.Instance.GetClassInstance(klass, luaTable);
                 pushObject(luaState, obj, "luaNet_metatable");
                 LuaDLL.lua_newtable(luaState);
                 LuaDLL.lua_pushstring(luaState, "__index");
                 LuaDLL.lua_pushvalue(luaState, -3);
                 LuaDLL.lua_settable(luaState, -3);
                 LuaDLL.lua_pushstring(luaState, "__newindex");
                 LuaDLL.lua_pushvalue(luaState, -3);
                 LuaDLL.lua_settable(luaState, -3);
                 LuaDLL.lua_setmetatable(luaState, 1);
                 // Pushes the object again, this time as the base field
                 // of the table and with the luaNet_searchbase metatable
                 LuaDLL.lua_pushstring(luaState, "base");
                 int index = addObject(obj);
                 pushNewObject(luaState, obj, index, "luaNet_searchbase");
                 LuaDLL.lua_rawset(luaState, 1);
             }
             else
             {
                 throwError(luaState, "register_table: can not find superclass '" + superclassName + "'");
             }
         }
         else
         {
             throwError(luaState, "register_table: superclass name can not be null");
         }
     }
     else
     {
         throwError(luaState, "register_table: first arg is not a table");
     }
     return(0);
 }
示例#14
0
        public static void Register(IntPtr L)
        {
            int oldTop = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getglobal(L, "Object");

            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "Object");
                LuaDLL.lua_getglobal(L, "Object");
            }

            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.New, "New");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.Destroy, "Destroy");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.DestroyImmediate, "DestroyImmediate");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.FindObjectsOfType, "FindObjectsOfType");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.DontDestroyOnLoad, "DontDestroyOnLoad");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.DestroyObject, "DestroyObject");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.ToString, "ToString");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.Equals, "Equals");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.GetHashCode, "GetHashCode");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.GetInstanceID, "GetInstanceID");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.Instantiate, "Instantiate");
            LuaDLL.lua_pushstdcallcfunction(L, LuaObject.FindObjectOfType, "FindObjectOfType");
            LuaDLL.lua_pushcsharpproperty(L, "name", LuaObject.get_name, LuaObject.set_name);
            LuaDLL.lua_pushcsharpproperty(L, "hideFlags", LuaObject.get_hideFlags, LuaObject.set_hideFlags);

            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_settop(L, oldTop);
            LuaStatic.AddTypeDict(typeof(UnityEngine.Object));
        }
 private void pushNewObject(IntPtr luaState, object o, int index, string metatable)
 {
     LuaDLL.lua_getref(luaState, this.weakTableRef);
     LuaDLL.luanet_newudata(luaState, index);
     if (metatable == "luaNet_metatable")
     {
         Type type = o.GetType();
         ObjectTranslator.PushMetaTable(luaState, o.GetType());
         if (LuaDLL.lua_isnil(luaState, -1))
         {
             string assemblyQualifiedName = type.AssemblyQualifiedName;
             Debugger.Log("<color=green>Create not wrap ulua type:" + assemblyQualifiedName + "</color>", new object[0]);
             LuaDLL.lua_settop(luaState, -2);
             LuaDLL.luaL_newmetatable(luaState, assemblyQualifiedName);
             LuaDLL.lua_pushstring(luaState, "cache");
             LuaDLL.lua_newtable(luaState);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
             LuaDLL.lua_pushnumber(luaState, 1.0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__index");
             LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
             LuaDLL.lua_rawget(luaState, LuaIndexes.LUA_REGISTRYINDEX);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__gc");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.gcFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__tostring");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.toStringFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__newindex");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.newindexFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
         }
     }
     else
     {
         LuaDLL.luaL_getmetatable(luaState, metatable);
     }
     LuaDLL.lua_setmetatable(luaState, -2);
     LuaDLL.lua_pushvalue(luaState, -1);
     LuaDLL.lua_rawseti(luaState, -3, index);
     LuaDLL.lua_remove(luaState, -2);
 }
        public static int registerTable(IntPtr luaState)
        {
            ObjectTranslator objectTranslator = ObjectTranslator.FromState(luaState);

            if (LuaDLL.lua_type(luaState, 1) == LuaTypes.LUA_TTABLE)
            {
                LuaTable table = objectTranslator.getTable(luaState, 1);
                string   text  = LuaDLL.lua_tostring(luaState, 2);
                if (text != null)
                {
                    Type type = objectTranslator.FindType(text);
                    if (type != null)
                    {
                        object classInstance = CodeGeneration.Instance.GetClassInstance(type, table);
                        objectTranslator.pushObject(luaState, classInstance, "luaNet_metatable");
                        LuaDLL.lua_newtable(luaState);
                        LuaDLL.lua_pushstring(luaState, "__index");
                        LuaDLL.lua_pushvalue(luaState, -3);
                        LuaDLL.lua_settable(luaState, -3);
                        LuaDLL.lua_pushstring(luaState, "__newindex");
                        LuaDLL.lua_pushvalue(luaState, -3);
                        LuaDLL.lua_settable(luaState, -3);
                        LuaDLL.lua_setmetatable(luaState, 1);
                        LuaDLL.lua_pushstring(luaState, "base");
                        int index = objectTranslator.addObject(classInstance);
                        objectTranslator.pushNewObject(luaState, classInstance, index, "luaNet_searchbase");
                        LuaDLL.lua_rawset(luaState, 1);
                    }
                    else
                    {
                        objectTranslator.throwError(luaState, "register_table: can not find superclass '" + text + "'");
                    }
                }
                else
                {
                    objectTranslator.throwError(luaState, "register_table: superclass name can not be null");
                }
            }
            else
            {
                objectTranslator.throwError(luaState, "register_table: first arg is not a table");
            }
            return(0);
        }
示例#17
0
        public static int FindGameObjectsWithTag(IntPtr L)
        {
            int result = 1;
            int count  = LuaDLL.lua_gettop(L);

            String      arg1 = (String)LuaStatic.GetObj(L, 2);
            IEnumerable objs = (IEnumerable)UnityEngine.GameObject.FindGameObjectsWithTag(arg1);

            LuaDLL.lua_newtable(L);
            int num2 = 0;

            foreach (var item in objs)
            {
                LuaStatic.addGameObject2Lua(L, (UnityEngine.GameObject)item, "GameObject");
                LuaDLL.lua_pushnumber(L, (double)(++num2));
                LuaDLL.lua_insert(L, -2);
                LuaDLL.lua_settable(L, -3);
            }
            return(result);
        }
        public void PushNewValueObject(IntPtr luaState, object o, int index)
        {
            LuaDLL.luanet_newudata(luaState, index);

            //string meta = GetAQName(o.GetType());
            //LuaDLL.luaL_getmetatable(luaState, meta);
            Type t = o.GetType();

            PushMetaTable(luaState, o.GetType());

            if (LuaDLL.lua_isnil(luaState, -1))
            {
                string meta = t.AssemblyQualifiedName;
#if UNITY_EDITOR
                //Debugger.LogWarning("Create not wrap ulua type:" + meta);
#endif
                LuaDLL.lua_settop(luaState, -2);
                LuaDLL.luaL_newmetatable(luaState, meta);
                LuaDLL.lua_pushstring(luaState, "cache");
                LuaDLL.lua_newtable(luaState);
                LuaDLL.lua_rawset(luaState, -3);
                LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
                LuaDLL.lua_pushnumber(luaState, 1);
                LuaDLL.lua_rawset(luaState, -3);
                LuaDLL.lua_pushstring(luaState, "__index");
                LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
                LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
                LuaDLL.lua_rawset(luaState, -3);
                LuaDLL.lua_pushstring(luaState, "__gc");
                LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
                LuaDLL.lua_rawset(luaState, -3);
                LuaDLL.lua_pushstring(luaState, "__tostring");
                LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
                LuaDLL.lua_rawset(luaState, -3);
                LuaDLL.lua_pushstring(luaState, "__newindex");
                LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
                LuaDLL.lua_rawset(luaState, -3);
            }

            LuaDLL.lua_setmetatable(luaState, -2);
        }
示例#19
0
        public static int FindObjectsOfType(IntPtr L)
        {
            int result = 1;
            int count  = LuaDLL.lua_gettop(L);

            object      type1 = LuaStatic.GetObj(L, 2);
            Type        arg1  = LuaStatic.GetType(type1);
            IEnumerable objs  = (IEnumerable)UnityEngine.Object.FindObjectsOfType(arg1);

            LuaDLL.lua_newtable(L);
            int num2 = 0;

            foreach (var item in objs)
            {
                LuaStatic.addGameObject2Lua(L, (UnityEngine.Object)item, (string)type1);
                LuaDLL.lua_pushnumber(L, (double)(++num2));
                LuaDLL.lua_insert(L, -2);
                LuaDLL.lua_settable(L, -3);
            }
            return(result);
        }
示例#20
0
        public static void Register(IntPtr L)
        {
            int oldTop = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getglobal(L, "Resources");

            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "Resources");
                LuaDLL.lua_getglobal(L, "Resources");
            }

            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.New, "New");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.FindObjectsOfTypeAll, "FindObjectsOfTypeAll");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.Load, "Load");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.LoadAsync, "LoadAsync");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.LoadAll, "LoadAll");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.GetBuiltinResource, "GetBuiltinResource");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.UnloadAsset, "UnloadAsset");
            LuaDLL.lua_pushstdcallcfunction(L, LuaResources.UnloadUnusedAssets, "UnloadUnusedAssets");

            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_settop(L, oldTop);
            LuaStatic.AddTypeDict(typeof(UnityEngine.Resources));
        }
示例#21
0
        public Lua()
        {
            luaState   = LuaDLL.luaL_newstate();
            translator = new ObjectTranslator(this, luaState);

            LuaDLL.luaL_openlibs(luaState);
            LuaDLL.lua_pushstring(luaState, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(luaState, true);
            LuaDLL.lua_settable(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(luaState);
            LuaDLL.lua_setglobal(luaState, "luanet");
            LuaDLL.lua_pushvalue(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_getglobal(luaState, "luanet");
            LuaDLL.lua_pushstring(luaState, "getmetatable");
            LuaDLL.lua_getglobal(luaState, "getmetatable");
            LuaDLL.lua_settable(luaState, -3);
            LuaDLL.lua_replace(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_replace(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.luaL_dostring(luaState, Lua.init_luanet);

            panicCallback = new LuaCSFunction(PanicCallback);
            LuaDLL.lua_atpanic(luaState, panicCallback);
        }
示例#22
0
        void CreateMetaTable(IntPtr luaState, object o, string metatable)
        {
            if (metatable == "luaNet_metatable")
            {
                // Gets or creates the metatable for the object's type
                LuaDLL.luaL_getmetatable(luaState, o.GetType().AssemblyQualifiedName);

                if (LuaDLL.lua_isnil(luaState, -1))
                {
                    LuaDLL.lua_settop(luaState, -2);
                    LuaDLL.luaL_newmetatable(luaState, o.GetType().AssemblyQualifiedName);
                    LuaDLL.lua_pushstring(luaState, "cache");
                    LuaDLL.lua_newtable(luaState);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
                    LuaDLL.lua_pushnumber(luaState, 1);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__index");
                    LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
                    LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__gc");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__tostring");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                    LuaDLL.lua_pushstring(luaState, "__newindex");
                    LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
                    LuaDLL.lua_rawset(luaState, -3);
                }
            }
            else
            {
                LuaDLL.luaL_getmetatable(luaState, metatable);
            }
        }
示例#23
0
        /*
         * Creates a new table as a global variable or as a field
         * inside an existing table
         */
        public void NewTable(string fullPath)
        {
            string[] path   = fullPath.Split('.');
            int      oldTop = LuaDLL.lua_gettop(L);

            if (path.Length == 1)
            {
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, fullPath);
            }
            else
            {
                LuaDLL.lua_getglobal(L, path[0]);
                for (int i = 1; i < path.Length - 1; i++)
                {
                    LuaDLL.lua_pushstring(L, path[i]);
                    LuaDLL.lua_gettable(L, -2);
                }
                LuaDLL.lua_pushstring(L, path[path.Length - 1]);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_settable(L, -3);
            }
            LuaDLL.lua_settop(L, oldTop);
        }
示例#24
0
        /*
         * Creates a new table as a global variable or as a field
         * inside an existing table
         */
        public void NewTable(string fullPath)
        {
            string[] path   = fullPath.Split(new char[] { '.' });
            int      oldTop = LuaDLL.lua_gettop(luaState);

            if (path.Length == 1)
            {
                LuaDLL.lua_newtable(luaState);
                LuaDLL.lua_setglobal(luaState, fullPath);
            }
            else
            {
                LuaDLL.lua_getglobal(luaState, path[0]);
                for (int i = 1; i < path.Length - 1; i++)
                {
                    LuaDLL.lua_pushstring(luaState, path[i]);
                    LuaDLL.lua_gettable(luaState, -2);
                }
                LuaDLL.lua_pushstring(luaState, path[path.Length - 1]);
                LuaDLL.lua_newtable(luaState);
                LuaDLL.lua_settable(luaState, -3);
            }
            LuaDLL.lua_settop(luaState, oldTop);
        }
示例#25
0
文件: Lua.cs 项目: weimingtom/pap2
        public Lua()
        {
            luaState = LuaDLL.luaL_newstate();                  // steffenj: Lua 5.1.1 API change (lua_open is gone)
            //LuaDLL.luaopen_base(luaState);	// steffenj: luaopen_* no longer used
            LuaDLL.luaL_openlibs(luaState);                     // steffenj: Lua 5.1.1 API change (luaopen_base is gone, just open all libs right here)
            LuaDLL.lua_pushstring(luaState, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(luaState, true);
            LuaDLL.lua_settable(luaState, LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(luaState);
            LuaDLL.lua_setglobal(luaState, "luanet");
            LuaDLL.lua_pushvalue(luaState, LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_getglobal(luaState, "luanet");
            LuaDLL.lua_pushstring(luaState, "getmetatable");
            LuaDLL.lua_getglobal(luaState, "getmetatable");
            LuaDLL.lua_settable(luaState, -3);
            LuaDLL.lua_replace(luaState, LuaIndexes.LUA_GLOBALSINDEX);
            translator = new ObjectTranslator(this, luaState);
            LuaDLL.lua_replace(luaState, LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.luaL_dostring(luaState, Lua.init_luanet);                    // steffenj: lua_dostring renamed to luaL_dostring

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaFunctionCallback(PanicCallback);
            LuaDLL.lua_atpanic(luaState, panicCallback);
        }
示例#26
0
        public LuaState()
        {
            // Create State
            L = LuaDLL.luaL_newstate();

            // Create LuaInterface library
            LuaDLL.luaL_openlibs(L);
            LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(L, true);
            LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(L);
            LuaDLL.lua_setglobal(L, "luanet");
            LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_getglobal(L, "luanet");
            LuaDLL.lua_pushstring(L, "getmetatable");
            LuaDLL.lua_getglobal(L, "getmetatable");
            LuaDLL.lua_settable(L, -3);

            // Set luanet as global for object translator
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            translator = new ObjectTranslator(this, L);
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);

            GCHandle handle  = GCHandle.Alloc(translator, GCHandleType.Pinned);
            IntPtr   thisptr = GCHandle.ToIntPtr(handle);

            LuaDLL.lua_pushlightuserdata(L, thisptr);
            LuaDLL.lua_setglobal(L, "_translator");

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaCSFunction(LuaStatic.panic);
            LuaDLL.lua_atpanic(L, panicCallback);

            printFunction = new LuaCSFunction(LuaStatic.print);
            LuaDLL.lua_pushstdcallcfunction(L, printFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "print");

            loadfileFunction = new LuaCSFunction(LuaStatic.loadfile);
            LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile");

            dofileFunction = new LuaCSFunction(LuaStatic.dofile);
            LuaDLL.lua_pushstdcallcfunction(L, dofileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile");

            // Insert our loader FIRST
            loaderFunction = new LuaCSFunction(LuaStatic.loader);
            LuaDLL.lua_pushstdcallcfunction(L, loaderFunction);
            int loaderFunc = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package");
            LuaDLL.lua_getfield(L, -1, "loaders");
            int loaderTable = LuaDLL.lua_gettop(L);

            // Shift table elements right
            for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
                LuaDLL.lua_rawseti(L, loaderTable, e);
            }
            LuaDLL.lua_pushvalue(L, loaderFunc);
            LuaDLL.lua_rawseti(L, loaderTable, 1);
            LuaDLL.lua_settop(L, 0);

            DoString(LuaStatic.init_luanet);
            tracebackFunction = new LuaCSFunction(LuaStatic.traceback);
        }
示例#27
0
        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));
        }
示例#28
0
        public LuaState()
        {
            // Create State
            L = LuaDLL.luaL_newstate();

            // Create LuaInterface library
            LuaDLL.luaL_openlibs(L);
            LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(L, true);
            LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(L);

            LuaDLL.lua_setglobal(L, "luanet");
            LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX);  //鍘嬪叆浜哶G琛?
            LuaDLL.lua_getglobal(L, "luanet");
            LuaDLL.lua_pushstring(L, "getmetatable");
            LuaDLL.lua_getglobal(L, "getmetatable");
            LuaDLL.lua_settable(L, -3);
            LuaDLL.lua_pushstring(L, "rawget");
            LuaDLL.lua_getglobal(L, "rawget");
            LuaDLL.lua_settable(L, -3);
            LuaDLL.lua_pushstring(L, "rawset");
            LuaDLL.lua_getglobal(L, "rawset");
            LuaDLL.lua_settable(L, -3);

            // Set luanet as global for object translator
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); //鐢╨uanet鏇挎崲_G琛?
            translator = new ObjectTranslator(this, L);
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); //鎭㈠_G琛?

            translator.PushTranslator(L);

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaCSFunction(LuaStatic.panic);
            LuaDLL.lua_atpanic(L, panicCallback);

            printFunction = new LuaCSFunction(LuaStatic.print);
            LuaDLL.lua_pushstdcallcfunction(L, printFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "lprint");

            warnFunction = new LuaCSFunction(LuaStatic.warn);
            LuaDLL.lua_pushstdcallcfunction(L, warnFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "lwarn");

            breakFunction = new LuaCSFunction(LuaStatic.breakFunc);
            LuaDLL.lua_pushstdcallcfunction(L, breakFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "breakpoint");

            loadfileFunction = new LuaCSFunction(LuaStatic.loadfile);
            LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile");

            dofileFunction = new LuaCSFunction(LuaStatic.dofile);
            LuaDLL.lua_pushstdcallcfunction(L, dofileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile");

            pcallFunction = new LuaCSFunction(LuaStatic.pcall);
            LuaDLL.lua_pushstdcallcfunction(L, pcallFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "pcall");

            LuaDLL.lua_pushstdcallcfunction(L, LuaStatic.errorFunc_traceback);
            errorFuncRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);

            // Insert our loader FIRST
            loaderFunction = new LuaCSFunction(LuaStatic.loader);
            LuaDLL.lua_pushstdcallcfunction(L, loaderFunction);
            int loaderFunc = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package");
            LuaDLL.lua_getfield(L, -1, "loaders");
            int loaderTable = LuaDLL.lua_gettop(L);

            // Shift table elements right
            for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
                LuaDLL.lua_rawseti(L, loaderTable, e);
            }
            LuaDLL.lua_pushvalue(L, loaderFunc);
            LuaDLL.lua_rawseti(L, loaderTable, 1);
            LuaDLL.lua_settop(L, 0);

            DoString(LuaStatic.init_luanet);
            tracebackFunction = new LuaCSFunction(LuaStatic.traceback);
        }
示例#29
0
        public static void Register(IntPtr L)
        {
            int oldTop = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getglobal(L, "GameObject");

            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "GameObject");
                LuaDLL.lua_getglobal(L, "GameObject");
            }

            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.New, "New");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.CreatePrimitive, "CreatePrimitive");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponent, "GetComponent");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponentInChildren, "GetComponentInChildren");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponentInParent, "GetComponentInParent");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponents, "GetComponents");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponentsInChildren, "GetComponentsInChildren");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.GetComponentsInParent, "GetComponentsInParent");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.SetActive, "SetActive");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.CompareTag, "CompareTag");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.FindGameObjectWithTag, "FindGameObjectWithTag");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.FindWithTag, "FindWithTag");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.FindGameObjectsWithTag, "FindGameObjectsWithTag");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.SendMessageUpwards, "SendMessageUpwards");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.SendMessage, "SendMessage");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.BroadcastMessage, "BroadcastMessage");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.AddComponent, "AddComponent");
            LuaDLL.lua_pushstdcallcfunction(L, LuaGameObject.Find, "Find");
            LuaDLL.lua_pushcsharpproperty(L, "transform", LuaGameObject.get_transform, null);
            LuaDLL.lua_pushcsharpproperty(L, "layer", LuaGameObject.get_layer, LuaGameObject.set_layer);
            LuaDLL.lua_pushcsharpproperty(L, "activeSelf", LuaGameObject.get_activeSelf, null);
            LuaDLL.lua_pushcsharpproperty(L, "activeInHierarchy", LuaGameObject.get_activeInHierarchy, null);
            LuaDLL.lua_pushcsharpproperty(L, "isStatic", LuaGameObject.get_isStatic, LuaGameObject.set_isStatic);
            LuaDLL.lua_pushcsharpproperty(L, "tag", LuaGameObject.get_tag, LuaGameObject.set_tag);
            LuaDLL.lua_pushcsharpproperty(L, "gameObject", LuaGameObject.get_gameObject, null);

            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, "Object");
            if (LuaDLL.lua_isnil(L, -1))
            {
                LuaDLL.lua_pop(L, 1);
                LuaDLL.lua_newtable(L);
                LuaDLL.lua_setglobal(L, "Object");
                LuaDLL.lua_getglobal(L, "Object");
                LuaDLL.lua_setmetatable(L, -2);
            }
            else
            {
                LuaDLL.lua_setmetatable(L, -2);
            }

            LuaDLL.lua_settop(L, oldTop);
            LuaStatic.AddTypeDict(typeof(UnityEngine.GameObject));
        }