public static int AddTimer(IntPtr L) { int count = LuaDLL.lua_gettop(L); const int nRet = 1; if (count == 4 && LuaScriptMgr.CheckTypes(L, 1, typeof(GameObject), typeof(double), typeof(bool), typeof(LuaFunction))) { GameObject obj = LuaScriptMgr.GetUnityObject <GameObject>(L, 1); if (obj == null) { HobaDebuger.LogError("AddTimer: param 1 must be GameObject"); LuaDLL.lua_pushinteger(L, -1); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } ObjectBehaviour comp = obj.GetComponent <ObjectBehaviour>(); if (comp == null) { HobaDebuger.LogError("AddTimer: param 1 must have ObjectBehaviour"); LuaDLL.lua_pushinteger(L, -1); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } float ttl = (float)LuaDLL.lua_tonumber(L, 2); bool once = LuaDLL.lua_toboolean(L, 3); //LuaFunction cb = LuaScriptMgr.GetLuaFunction(L, 4); LuaDLL.lua_pushvalue(L, 4); int callbackRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); int id = comp.AddTimer(ttl, once, callbackRef, string.Empty); LuaDLL.lua_pushinteger(L, id); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } else if (count == 5 && LuaScriptMgr.CheckTypes(L, 1, typeof(GameObject), typeof(double), typeof(bool), typeof(LuaFunction), typeof(string))) { GameObject obj = LuaScriptMgr.GetUnityObject <GameObject>(L, 1); if (obj == null) { HobaDebuger.LogError("AddTimer: param 1 must be GameObject"); LuaDLL.lua_pushinteger(L, -1); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } ObjectBehaviour comp = obj.GetComponent <ObjectBehaviour>(); if (comp == null) { HobaDebuger.LogError("AddTimer: param 1 must have ObjectBehaviour"); LuaDLL.lua_pushinteger(L, -1); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } float ttl = (float)LuaDLL.lua_tonumber(L, 2); bool once = LuaDLL.lua_toboolean(L, 3); //LuaFunction cb = LuaScriptMgr.GetLuaFunction(L, 4); LuaDLL.lua_pushvalue(L, 4); int callbackRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); string debugInfo = LuaScriptMgr.GetString(L, 5); int id = comp.AddTimer(ttl, once, callbackRef, debugInfo); LuaDLL.lua_pushinteger(L, id); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } else { LogParamError("AddTimer", count); LuaDLL.lua_pushinteger(L, -1); return(GameUtilWrap.CheckReturnNum(L, count, nRet)); } }