public static void Register(IntPtr ptr) { #if !LUA_5_3 // lua implemented valuetype isn't faster than raw under non-jit. LuaState ls = LuaState.Get(ptr); ls.RegisterPushVar(typeof(UnityEngine.Vector2), (IntPtr _ptr, object o) => { LuaObject.PushValue(_ptr, (UnityEngine.Vector2)o); }); ls.RegisterPushVar(typeof(UnityEngine.Vector3), (IntPtr _ptr, object o) => { LuaObject.PushValue(_ptr, (UnityEngine.Vector3)o); }); ls.RegisterPushVar(typeof(UnityEngine.Vector4), (IntPtr _ptr, object o) => { LuaObject.PushValue(_ptr, (UnityEngine.Vector4)o); }); ls.RegisterPushVar(typeof(UnityEngine.Quaternion), (IntPtr _ptr, object o) => { LuaObject.PushValue(_ptr, (UnityEngine.Quaternion)o); }); ls.RegisterPushVar(typeof(UnityEngine.Color), (IntPtr _ptr, object o) => { LuaObject.PushValue(_ptr, (UnityEngine.Color)o); }); ls.DoString(Script, "ValueTypeScript"); #endif }
public static void Register(IntPtr ptr) { LuaState ls = LuaState.Get(ptr); ls.DoString(Script, "LuaSocketMini"); }
public static void Init(IntPtr ptr) { string newindexfun = @" local getmetatable=getmetatable local rawget=rawget local error=error local type=type local function newindex(ud,k,v) local t=getmetatable(ud) repeat local h=rawget(t,k) if h then if h[2] then h[2](ud,v) return else error('property '..k..' is read only') end end t=rawget(t,'__parent') until t==nil error('can not find '..k) end return newindex "; string indexfun = @" local type=type local error=error local rawget=rawget local getmetatable=getmetatable local function index(ud,k) local t=getmetatable(ud) repeat local fun=rawget(t,k) local tp=type(fun) if tp=='function' then return fun elseif tp=='table' then local f=fun[1] if f then return f(ud) else error('property '..k..' isthis.Write only') end end t = rawget(t,'__parent') until t==nil error('Can not find '..k) end return index "; LuaState state = LuaState.Get(ptr); newIndexFunction = (LuaFunction)state.DoString(newindexfun); indexFunction = (LuaFunction)state.DoString(indexfun); // object method LuaNativeMethods.lua_createtable(ptr, 0, 4); AddMember(ptr, ToString); AddMember(ptr, GetHashCode); AddMember(ptr, Equals); AddMember(ptr, GetType); LuaNativeMethods.lua_setfield(ptr, LuaIndexes.LUARegistryIndex, "__luabaseobject"); LuaArray.Init(ptr); LuaVarObject.Init(ptr); LuaNativeMethods.lua_newtable(ptr); LuaNativeMethods.lua_setglobal(ptr, DelgateTable); }