]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/task_manager.lua
Added task manager and window
[dragonblocks3d-lua.git] / src / task_manager.lua
1 local task_manager = {}
2
3 function task_manager:init()
4         self._tasks = {}
5 end
6
7 function task_manager:add_task(f)
8         local t = coroutine.create(f)
9         table.insert(self._tasks, t)
10         return t
11 end
12
13 function task_manager:step()
14         local t_start = socket.gettime()
15         local tasks = self._tasks
16         self._tasks = {}
17         for _, t in ipairs(tasks) do
18                 if coroutine.resume(t) then
19                         table.insert(self._tasks, t)
20                 end
21         end
22         self.tps = 1 / (socket.gettime() - t_start)
23 end
24
25 function task_manager:start_tasks()
26         repeat self:step()
27         until #self._tasks == 0
28 end
29
30 function task_manager:register_event_interface(e)
31         e._task_manager = self
32 end
33
34 return task_manager