源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

123 行
2.2 KiB

local create = coroutine.create
local running = coroutine.running
local resume = coroutine.resume
local yield = coroutine.yield
local error = error
local unpack = unpack
local debug = debug
local FrameTimer = FrameTimer
local CoTimer = CoTimer
local comap = {}
setmetatable(comap, {__mode = "kv"})
function coroutine.start(f, ...)
local co = create(f)
if running() == nil then
local flag, msg = resume(co, ...)
if not flag then
msg = debug.traceback(co, msg)
LogError(msg)
end
else
local args = {...}
local timer = nil
local action = function()
local flag, msg = resume(co, unpack(args))
if not flag then
timer:Stop()
msg = debug.traceback(co, msg)
LogError(msg)
end
end
timer = FrameTimer.New(action, 0, 1)
comap[co] = timer
timer:Start()
end
return co
end
function coroutine.wait(t, co, ...)
local args = {...}
co = co or running()
local timer = nil
local action = function()
local flag, msg = resume(co, unpack(args))
if not flag then
timer:Stop()
msg = debug.traceback(co, msg)
LogError(msg)
return
end
end
timer = CoTimer.New(action, t, 1)
comap[co] = timer
timer:Start()
return yield()
end
function coroutine.step(t, co, ...)
local args = {...}
co = co or running()
local timer = nil
local action = function()
local flag, msg = resume(co, unpack(args))
if not flag then
timer:Stop()
msg = debug.traceback(co, msg)
LogError(msg)
return
end
end
timer = FrameTimer.New(action, t or 1, 1)
comap[co] = timer
timer:Start()
return yield()
end
function coroutine.www(www, co)
co = co or running()
local timer = nil
local action = function()
if not www.isDone then
return
end
timer:Stop()
local flag, msg = resume(co)
if not flag then
msg = debug.traceback(co, msg)
LogError(msg)
return
end
end
timer = FrameTimer.New(action, 1, -1)
comap[co] = timer
timer:Start()
return yield()
end
function coroutine.stop(co)
local timer = comap[co]
if timer ~= nil then
comap[co] = nil
timer:Stop()
end
end