public static IEnumerator EnumLuaCoroutine(LuaOnStackFunc lfunc) { if (lfunc != null) { LuaThread lthd = new LuaThread(lfunc); return(EnumLuaCoroutine(lthd)); } else { return(CoroutineRunner.GetEmptyEnumerator()); } }
public static int ClrFuncCoroutine(IntPtr l) { var oldtop = l.gettop(); if (l.isfunction(1)) { var lfunc = new LuaOnStackFunc(l, 1); var co = GlobalLua.StartLuaCoroutine(lfunc); l.settop(oldtop); l.PushLua(co); } return(l.gettop() - oldtop); }
public static int ClrFuncBehavCoroutine(IntPtr l) { var oldtop = l.gettop(); if (l.IsObject(1) && l.isfunction(2)) { var behav = l.GetLua <UnityEngine.MonoBehaviour>(1); var lfunc = new LuaOnStackFunc(l, 2); var co = GlobalLua.StartLuaCoroutineForBehav(behav, lfunc); l.settop(oldtop); l.PushLua(co); } return(l.gettop() - oldtop); }
public static Coroutine StartLuaCoroutineForBehav(this MonoBehaviour behav, LuaOnStackFunc lfunc) { if (behav != null) { var work = EnumLuaCoroutine(lfunc); if (work is IDisposable) { var info = new CoroutineRunner.CoroutineInfo() { behav = behav, work = work }; return(info.coroutine = behav.StartCoroutine(CoroutineRunner.SafeEnumerator(work, info))); } else { return(behav.StartCoroutine(EnumLuaCoroutine(lfunc))); } } else { return(CoroutineRunner.StartCoroutine(EnumLuaCoroutine(lfunc))); } }
public static Coroutine StartLuaCoroutine(LuaOnStackFunc lfunc) { return(StartLuaCoroutineForBehav(null, lfunc)); }