| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- local XLuaUtil = require("XLua/util.lua")
- local CoroutineHelper = {}
- CoroutineHelper._CS_SCoroutineRunner_Component = nil
- -- Just give a lua function.
- -- You can call like this: coroutine.yield(CS.UnityEngine.WaitForSeconds(3))
- -- Or you can call CoroutineHelper.Wait(3) for short.
- function CoroutineHelper:Start(...)
- print("CoroutineHelper.Start ... ... ")
- local luaRoot = CS.UnityEngine.GameObject.Find("LuaRoot")
- assert(luaRoot ~= nil)
- local coroutineHolder = luaRoot.transform:Find("coroutineHolder")
- if not coroutineHolder then
- coroutineHolder = CS.UnityEngine.GameObject("coroutineHolder")
- coroutineHolder.transform:SetParent(luaRoot.transform)
- self._CS_SCoroutineRunner_Component = coroutineHolder:AddComponent(typeof(CS.SFramework.SCoroutineRunner))
- end
- assert(CoroutineHelper._CS_SCoroutineRunner_Component ~= nil, "SCoroutineRunner is not exised!")
- return CoroutineHelper._CS_SCoroutineRunner_Component:StartCoroutine(XLuaUtil.cs_generator(...))
- end
- function CoroutineHelper:Stop(targetCoroutine)
- print("CoroutineHelper.Stop ... ... ")
- assert(self._CS_SCoroutineRunner_Component ~= nil, "SCoroutineRunner is not exised!")
- if targetCoroutine then
- self._CS_SCoroutineRunner_Component:StopCoroutine(targetCoroutine)
- end
- end
- function CoroutineHelper:CoroutineCall(func)
- return function(...)
- local co = coroutine.create(func)
- assert(coroutine.resume(co, ...))
- end
- end
- function CoroutineHelper:Wait(seconds)
- coroutine.yield(CS.UnityEngine.WaitForSeconds(seconds))
- end
- function CoroutineHelper:WaitForEndOfFrame()
- coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
- end
- function CoroutineHelper:WaitSendWebRequest(luaRequest)
- coroutine.yield(luaRequest:SendWebRequest())
- end
- function CoroutineHelper:WaitBoolRequest(luaRequest)
- coroutine.yield(luaRequest == true)
- end
- function CoroutineHelper:Test()
- local targetCoroutine = CoroutineHelper.Start(
- function()
- print("Test Co a Start ... ...")
-
- coroutine.yield(CoroutineHelper.Start(function()
- print("Test Co b started inside coroutine a")
- coroutine.yield(CS.UnityEngine.WaitForSeconds(2))
- print("Co b Run in Co a")
- end))
- while true do
- coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
- print("Test Co a alive ... ...")
- end
- end
- )
- CoroutineHelper.Start(
- function()
- print("Test Co c Start ... ... close Co a after 8 seconds")
- coroutine.yield(CS.UnityEngine.WaitForSeconds(8))
- CoroutineHelper.Stop(targetCoroutine)
- print("Close Co a By Co c ... ...")
- end
- )
- end
- return CoroutineHelper
|