protected internal void OnDestroy() { if (!_Destroyed) { _Destroyed = true; CallLuaFunc("onDestroy"); _NeighboursReady = false; _Neighbours = null; if (!object.ReferenceEquals(_Self, null)) { var l = _Self.L; if (l != IntPtr.Zero) { l.getref(_Self.Refid); // self l.getfenv(-1); // self ex l.ClearTable(-1); l.pop(2); } _Self.Dispose(); _Self = null; } if (_DestroyRegIndex > 0) { RemoveDestroyRegIndex(_DestroyRegIndex); _DestroyRegIndex = 0; } ClearExVal(); CheckDestroyed(); } }
static int OnEvent(IntPtr L) { int count = LuaDLL.lua_gettop(L); Type[] types1 = { typeof(BaseLua), typeof(string) }; if (count == 2) { BaseLua obj = LuaScriptMgr.GetNetObject <BaseLua>(L, 1); string arg0 = LuaScriptMgr.GetLuaString(L, 2); obj.OnEvent(arg0); return(0); } else if (LuaScriptMgr.CheckTypes(L, types1, 1) && LuaScriptMgr.CheckParamsType(L, typeof(object), 3, count - 2)) { BaseLua obj = LuaScriptMgr.GetNetObject <BaseLua>(L, 1); string arg0 = LuaScriptMgr.GetString(L, 2); object[] objs1 = LuaScriptMgr.GetParamsObject(L, 3, count - 2); obj.OnEvent(arg0, objs1); return(0); } else { LuaDLL.luaL_error(L, "invalid arguments to method: BaseLua.OnEvent"); } return(0); }
static int ClearClick(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 1); BaseLua obj = LuaScriptMgr.GetUnityObject <BaseLua>(L, 1); obj.ClearClick(); return(0); }
static int ClearClick(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 1); BaseLua obj = (BaseLua)LuaScriptMgr.GetUnityObjectSelf(L, 1, "BaseLua"); obj.ClearClick(); return(0); }
static int RemoveClick(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 2); BaseLua obj = LuaScriptMgr.GetUnityObject <BaseLua>(L, 1); string arg0 = LuaScriptMgr.GetLuaString(L, 2); obj.RemoveClick(arg0); return(0); }
static int AddClick(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 2); BaseLua obj = (BaseLua)LuaScriptMgr.GetUnityObjectSelf(L, 1, "BaseLua"); string arg0 = LuaScriptMgr.GetLuaString(L, 2); obj.AddClick(arg0); return(0); }
static int Registere(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 1); BaseLua arg0 = LuaScriptMgr.GetNetObject <BaseLua>(L, 1); bool o = EventSender.Registere(arg0); LuaScriptMgr.Push(L, o); return(1); }
static int GetGameObject(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 2); BaseLua obj = LuaScriptMgr.GetNetObject <BaseLua>(L, 1); string arg0 = LuaScriptMgr.GetLuaString(L, 2); GameObject o = obj.GetGameObject(arg0); LuaScriptMgr.Push(L, o); return(1); }
static int OnInit(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 3); BaseLua obj = LuaScriptMgr.GetNetObject <BaseLua>(L, 1); AssetBundle arg0 = LuaScriptMgr.GetNetObject <AssetBundle>(L, 2); string arg1 = LuaScriptMgr.GetLuaString(L, 3); obj.OnInit(arg0, arg1); return(0); }
public static bool Registere(BaseLua listener) { bool result = listeners.Contains(listener); if (result) { return(result); } listeners.Add(listener); return(result); }
public void BindLua(IntPtr l, int index) { CheckDestroyed(); _LuaBinded = true; _Self = BindBehav(l, this, index); if (!_Awaken && !(enabled && gameObject.activeInHierarchy)) { if (_DestroyRegIndex <= 0) { _DestroyRegIndex = _DestroyRegNextIndex++; _DestroyReg[_DestroyRegIndex] = this; } } }
public void BindLua() { if (!_LuaBinded && ReferenceEquals(_Self, null) && this != null && !_Destroyed) { CheckDestroyed(); _LuaBinded = true; _Self = this.BindBehav(); _NeighboursReady = true; if (!_Awaken && !(enabled && gameObject.activeInHierarchy)) { if (_DestroyRegIndex <= 0) { _DestroyRegIndex = _DestroyRegNextIndex++; _DestroyReg[_DestroyRegIndex] = this; } } } }
static int set_callBack(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); BaseLua obj = (BaseLua)o; if (obj == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name callBack"); } else { LuaDLL.luaL_error(L, "attempt to index callBack on a nil value"); } } obj.callBack = LuaScriptMgr.GetLuaFunction(L, 3); return(0); }
static int get_uluaMgr(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); BaseLua obj = (BaseLua)o; if (obj == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name uluaMgr"); } else { LuaDLL.luaL_error(L, "attempt to index uluaMgr on a nil value"); } } LuaScriptMgr.PushObject(L, obj.uluaMgr); return(1); }
static int set_LuaName(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); if (o == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name LuaName"); } else { LuaDLL.luaL_error(L, "attempt to index LuaName on a nil value"); } } BaseLua obj = (BaseLua)o; obj.LuaName = LuaScriptMgr.GetString(L, 3); return(0); }
protected internal void OnDestroy() { if (!_Destroyed) { _Destroyed = true; CallLuaFunc("onDestroy"); if (!object.ReferenceEquals(_Self, null)) { _Self.Dispose(); _Self = null; } if (_DestroyRegIndex > 0) { RemoveDestroyRegIndex(_DestroyRegIndex); _DestroyRegIndex = 0; } if (ExFields != null) { ExFields.Clear(); } CheckDestroyed(); } }
public static IDelegateLuaWrapper CreateDelegateImp(Type t, BaseLua dyn) { if (t != null && t.IsSubclassOf(typeof(Delegate))) { bool cached = false; Type wrapperType = null; lock (DelType2WrapperType) { cached = DelType2WrapperType.TryGetValue(t, out wrapperType); } System.Reflection.MethodInfo invoke = t.GetMethod("Invoke"); System.Reflection.ParameterInfo[] pars = invoke.GetParameters(); if (invoke.ReturnType == typeof(void)) { if (pars != null && pars.Length > 0) { if (pars.Length < ActionWrapperTypes.Length) { wrapperType = ActionWrapperTypes[pars.Length]; Type[] genericTypes = new Type[pars.Length]; for (int i = 0; i < pars.Length; ++i) { genericTypes[i] = pars[i].ParameterType; } wrapperType = wrapperType.MakeGenericType(genericTypes); } } else { wrapperType = typeof(ActionLuaWrapper); } } else { var gcnt = 0; if (pars != null && pars.Length > 0) { gcnt = pars.Length; } Type[] genericTypes = new Type[gcnt + 1]; genericTypes[0] = invoke.ReturnType; if (gcnt < FuncWrapperTypes.Length) { wrapperType = FuncWrapperTypes[gcnt]; if (gcnt > 0) { for (int i = 0; i < gcnt; ++i) { genericTypes[i + 1] = pars[i].ParameterType; } wrapperType = wrapperType.MakeGenericType(genericTypes); } } } if (wrapperType != null) { if (!cached) { lock (DelType2WrapperType) { DelType2WrapperType[t] = wrapperType; } } var wrapper = Activator.CreateInstance(wrapperType) as IDelegateLuaWrapper; wrapper.Target = dyn; return(wrapper); } } return(null); }
public static Delegate CreateDelegate(Type t, BaseLua dyn) { { var dynlua = dyn as Capstones.LuaWrap.BaseLua; var l = dynlua.L; var refid = dynlua.Refid; if (l != IntPtr.Zero && refid != 0) { using (var lr = new LuaStateRecover(l)) { l.checkstack(5); l.pushlightuserdata(LuaConst.LRKEY_DEL_CACHE); // #reg l.gettable(lua.LUA_REGISTRYINDEX); // reg if (!l.istable(-1)) { l.pop(1); // X l.newtable(); // reg l.newtable(); // reg meta l.PushString(LuaConst.LS_COMMON_K); // reg meta 'k' l.SetField(-2, LuaConst.LS_META_KEY_MODE); // reg meta l.setmetatable(-2); // reg l.pushlightuserdata(LuaConst.LRKEY_DEL_CACHE); // reg #reg l.pushvalue(-2); // reg #reg reg l.settable(lua.LUA_REGISTRYINDEX); // reg } l.getref(refid); // reg func l.gettable(-2); // reg finfo if (!l.istable(-1)) { l.pop(1); // reg l.newtable(); // reg finfo l.pushvalue(-2); // reg finfo reg l.getref(refid); // reg finfo reg func l.pushvalue(-3); // reg finfo reg func finfo l.settable(-3); // reg info reg l.pop(1); //reg info } l.PushLua(t); // reg finfo dtype l.gettable(-2); // reg finfo del IDelegateLuaWrapper delwrapper = null; if (l.isuserdata(-1)) { var wr = l.GetLua <WeakReference>(-1); if (wr != null) { delwrapper = wr.GetWeakReference <IDelegateLuaWrapper>(); if (delwrapper == null) { wr.ReturnToPool(); } } } if (delwrapper == null) { delwrapper = CreateDelegateImp(t, dyn); if (delwrapper != null) { var wr = ObjectPool.WeakReferencePool.GetFromPool(delwrapper); l.pop(1); // reg finfo l.PushLua(t); // reg finfo dtype l.PushLuaRawObject(wr); // reg finfo dtype del l.settable(-3); // reg finfo } } if (delwrapper != null) { return(CreateDelegateFromWrapper(t, delwrapper)); } } } } var wrapper = CreateDelegateImp(t, dyn); if (wrapper != null) { return(CreateDelegateFromWrapper(t, wrapper)); } return(null); }
public static bool Remove(BaseLua listener) { return(listeners.Remove(listener)); }
public static T CreateDelegate <T>(BaseLua dyn) where T : class { return(CreateDelegate(typeof(T), dyn) as T); }