CoroutineHelper.lua.txt 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. local XLuaUtil = require("XLua/util.lua")
  2. local CoroutineHelper = {}
  3. CoroutineHelper._CS_SCoroutineRunner_Component = nil
  4. -- Just give a lua function.
  5. -- You can call like this: coroutine.yield(CS.UnityEngine.WaitForSeconds(3))
  6. -- Or you can call CoroutineHelper.Wait(3) for short.
  7. function CoroutineHelper:Start(...)
  8. print("CoroutineHelper.Start ... ... ")
  9. local luaRoot = CS.UnityEngine.GameObject.Find("LuaRoot")
  10. assert(luaRoot ~= nil)
  11. local coroutineHolder = luaRoot.transform:Find("coroutineHolder")
  12. if not coroutineHolder then
  13. coroutineHolder = CS.UnityEngine.GameObject("coroutineHolder")
  14. coroutineHolder.transform:SetParent(luaRoot.transform)
  15. self._CS_SCoroutineRunner_Component = coroutineHolder:AddComponent(typeof(CS.SFramework.SCoroutineRunner))
  16. end
  17. assert(CoroutineHelper._CS_SCoroutineRunner_Component ~= nil, "SCoroutineRunner is not exised!")
  18. return CoroutineHelper._CS_SCoroutineRunner_Component:StartCoroutine(XLuaUtil.cs_generator(...))
  19. end
  20. function CoroutineHelper:Stop(targetCoroutine)
  21. print("CoroutineHelper.Stop ... ... ")
  22. assert(self._CS_SCoroutineRunner_Component ~= nil, "SCoroutineRunner is not exised!")
  23. if targetCoroutine then
  24. self._CS_SCoroutineRunner_Component:StopCoroutine(targetCoroutine)
  25. end
  26. end
  27. function CoroutineHelper:CoroutineCall(func)
  28. return function(...)
  29. local co = coroutine.create(func)
  30. assert(coroutine.resume(co, ...))
  31. end
  32. end
  33. function CoroutineHelper:Wait(seconds)
  34. coroutine.yield(CS.UnityEngine.WaitForSeconds(seconds))
  35. end
  36. function CoroutineHelper:WaitForEndOfFrame()
  37. coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
  38. end
  39. function CoroutineHelper:WaitSendWebRequest(luaRequest)
  40. coroutine.yield(luaRequest:SendWebRequest())
  41. end
  42. function CoroutineHelper:WaitBoolRequest(luaRequest)
  43. coroutine.yield(luaRequest == true)
  44. end
  45. function CoroutineHelper:Test()
  46. local targetCoroutine = CoroutineHelper.Start(
  47. function()
  48. print("Test Co a Start ... ...")
  49. coroutine.yield(CoroutineHelper.Start(function()
  50. print("Test Co b started inside coroutine a")
  51. coroutine.yield(CS.UnityEngine.WaitForSeconds(2))
  52. print("Co b Run in Co a")
  53. end))
  54. while true do
  55. coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
  56. print("Test Co a alive ... ...")
  57. end
  58. end
  59. )
  60. CoroutineHelper.Start(
  61. function()
  62. print("Test Co c Start ... ... close Co a after 8 seconds")
  63. coroutine.yield(CS.UnityEngine.WaitForSeconds(8))
  64. CoroutineHelper.Stop(targetCoroutine)
  65. print("Close Co a By Co c ... ...")
  66. end
  67. )
  68. end
  69. return CoroutineHelper