sokoban.love/0052-enable_loiter

21 lines
803 B
Plaintext

-- A debugging aid to help animate intermediate results within f.
-- Pause animation in the current frame using loiter().
-- Try to only have one such call in your program.
-- You can have multiple, but things might get confusing if one of them indirectly calls the other,
-- or more generally if a single function ever loiters sometimes under the call tree of one and sometimes under the other.
enable_loiter = function(f, ...)
local args = {...}
Error_with_callstack = nil
local co = coroutine.create(
function()
xpcall(function()
f(unpack(args))
end,
save_callstack)
end)
coroutine.resume(co, ...)
if Error_with_callstack then
error(Error_with_callstack)
end
table.insert(Debug_animations_in_progress, {co=co, next_run=Current_time+0.3})
end