示例#1
0
        public static LuaDelegate NewDelegate(IntPtr ptr, int p)
        {
            LuaState state = LuaState.Get(ptr);

            LuaNativeMethods.lua_pushvalue(ptr, p);                                         // push function

            int         fref = LuaNativeMethods.luaL_ref(ptr, LuaIndexes.LUARegistryIndex); // new ref function
            LuaDelegate f    = new LuaDelegate(ptr, fref);

            LuaNativeMethods.lua_pushvalue(ptr, p);
            LuaNativeMethods.lua_pushinteger(ptr, fref);
            LuaNativeMethods.lua_settable(ptr, -3); // __LuaDelegate[func]= fref
            state.DelegateMap[fref] = f;
            return(f);
        }
示例#2
0
 public void SetObject(int reference, int index, object o)
 {
     if (index >= 1)
     {
         LuaNativeMethods.lua_getref(statePointer, reference);
         LuaObject.PushVar(statePointer, o);
         LuaNativeMethods.lua_rawseti(statePointer, -2, index);
         LuaNativeMethods.lua_pop(statePointer, 1);
     }
     else
     {
         LuaNativeMethods.lua_getref(statePointer, reference);
         LuaNativeMethods.lua_pushinteger(statePointer, index);
         LuaObject.PushVar(statePointer, o);
         LuaNativeMethods.lua_settable(statePointer, -3);
         LuaNativeMethods.lua_pop(statePointer, 1);
     }
 }
示例#3
0
 public object GetObject(int reference, int index)
 {
     if (index >= 1)
     {
         LuaNativeMethods.lua_getref(statePointer, reference);
         LuaNativeMethods.lua_rawgeti(statePointer, -1, index);
         object returnValue = GetObject(statePointer, -1);
         LuaNativeMethods.lua_pop(statePointer, 2);
         return(returnValue);
     }
     else
     {
         LuaNativeMethods.lua_getref(statePointer, reference);
         LuaNativeMethods.lua_pushinteger(statePointer, index);
         LuaNativeMethods.lua_gettable(statePointer, -2);
         object returnValue = GetObject(statePointer, -1);
         LuaNativeMethods.lua_pop(statePointer, 2);
         return(returnValue);
     }
 }
示例#4
0
 public static void PushValue(IntPtr ptr, byte i)
 {
     LuaNativeMethods.lua_pushinteger(ptr, i);
 }
示例#5
0
 public static void PushValue(IntPtr ptr, ushort v)
 {
     LuaNativeMethods.lua_pushinteger(ptr, v);
 }
示例#6
0
        public void SetupPushVar()
        {
            typePushMap[typeof(float)] = (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushnumber(ptr, (float)o);
            };

            typePushMap[typeof(double)] = (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushnumber(ptr, (double)o);
            };

            typePushMap[typeof(int)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushinteger(ptr, (int)o);
            };

            typePushMap[typeof(uint)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushnumber(ptr, Convert.ToUInt32(o));
            };

            typePushMap[typeof(short)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushinteger(ptr, (short)o);
            };

            typePushMap[typeof(ushort)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushinteger(ptr, (ushort)o);
            };

            typePushMap[typeof(sbyte)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushinteger(ptr, (sbyte)o);
            };

            typePushMap[typeof(byte)] =
                (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushinteger(ptr, (byte)o);
            };

            typePushMap[typeof(long)]      =
                typePushMap[typeof(ulong)] =
                    (IntPtr ptr, object o) =>
            {
#if LUA_5_3
                LuaNativeMethods.lua_pushinteger(ptr, (long)o);
#else
                LuaNativeMethods.lua_pushnumber(ptr, System.Convert.ToDouble(o));
#endif
            };

            typePushMap[typeof(string)] = (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushstring(ptr, (string)o);
            };

            typePushMap[typeof(bool)] = (IntPtr ptr, object o) =>
            {
                LuaNativeMethods.lua_pushboolean(ptr, (bool)o);
            };

            typePushMap[typeof(LuaTable)]          =
                typePushMap[typeof(LuaFunction)]   =
                    typePushMap[typeof(LuaThread)] =
                        (IntPtr ptr, object o) =>
            {
                ((LuaVar)o).Push(ptr);
            };

            typePushMap[typeof(LuaCSFunction)] = (IntPtr ptr, object o) =>
            {
                LuaObject.PushValue(ptr, (LuaCSFunction)o);
            };
        }
示例#7
0
 protected static void AddMember(IntPtr ptr, int v, string name)
 {
     LuaNativeMethods.lua_pushinteger(ptr, v);
     LuaNativeMethods.lua_setfield(ptr, -2, name);
 }