예제 #1
0
        public void Push(IntPtr L, Transform o)
        {
            if (o == null)
            {
                LuaDLL.lua_pushnil(L);
            }
            else
            {
                Type type      = o.GetType();
                int  reference = -1;

                if (type == typeof(Transform))
                {
                    reference = TypeTraits <Transform> .GetLuaReference(L);
                }
                else
                {
                    reference = LuaStatic.GetMetaReference(L, type);
                }

                if (reference <= 0)
                {
                    reference = ToLua.LoadPreType(L, type);
                }

                ToLua.PushUserData(L, o, reference);
            }
        }
예제 #2
0
 static void PushArray(IntPtr L, T array)
 {
     if (array == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         int arrayMetaTable = LuaStatic.GetArrayMetatable(L);
         ToLua.PushUserData(L, array, arrayMetaTable);
     }
 }
예제 #3
0
 public static void Push(IntPtr L, IEnumerator iter)
 {
     if (iter == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         int iterMetatable = LuaStatic.GetIterMetatable(L);
         ToLua.PushUserData(L, iter, iterMetatable);
     }
 }
예제 #4
0
 public static void Push(IntPtr L, EventObject ev)
 {
     if (ev == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         int eventMetatable = LuaStatic.GetEventMetatable(L);
         ToLua.PushUserData(L, ev, eventMetatable);
     }
 }
예제 #5
0
 public static void Push(IntPtr L, Delegate ev)
 {
     if (ev == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         int delegateMetatable = LuaStatic.GetDelegateMetatable(L);
         ToLua.PushUserData(L, ev, delegateMetatable);
     }
 }
예제 #6
0
 public static void Push(IntPtr L, Type t)
 {
     if (t == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         int typeMetatable = LuaStatic.GetTypeMetatable(L);
         ToLua.PushUserData(L, t, typeMetatable);
     }
 }
예제 #7
0
 public static void Push(IntPtr L, Enum e)
 {
     if (e == null)
     {
         LuaDLL.lua_pushnil(L);
     }
     else
     {
         object o          = null;
         int    enumObject = LuaStatic.GetEnumObject(L, e, out o);
         ToLua.PushUserData(L, o, enumObject);
     }
 }
예제 #8
0
        private static void PushUserObject(IntPtr L, object o)
        {
            Type type          = o.GetType();
            int  metaReference = LuaStatic.GetMetaReference(L, type);

            if (metaReference > 0)
            {
                ToLua.PushUserData(L, o, metaReference);
            }
            else
            {
                ToLua.PushPreLoadType(L, o, type);
            }
        }
예제 #9
0
        private static void PushPreLoadType(IntPtr L, object o, Type type)
        {
            LuaCSFunction preModule = LuaStatic.GetPreModule(L, type);

            if (preModule != null)
            {
                ToLua.LuaPCall(L, preModule);
                int metaReference = LuaStatic.GetMetaReference(L, type);
                if (metaReference > 0)
                {
                    ToLua.PushUserData(L, o, metaReference);
                    return;
                }
            }
            LuaDLL.lua_pushnil(L);
            Debugger.LogError("Type {0} not wrap to lua", LuaMisc.GetTypeName(type));
        }
예제 #10
0
        public void Push(IntPtr L, GameObject o)
        {
            if (o == null)
            {
                LuaDLL.lua_pushnil(L);
            }
            else
            {
                int reference = TypeTraits <GameObject> .GetLuaReference(L);

                if (reference <= 0)
                {
                    reference = ToLua.LoadPreType(L, typeof(GameObject));
                }

                ToLua.PushUserData(L, o, reference);
            }
        }