1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/maps/planet_prison/mod/timers.lua
cogito 87eb854ace planet_prison: fix global variable miussage.
Fixes some 'global' variable missusage.
2020-01-18 08:58:28 +01:00

99 lines
2.1 KiB
Lua

local public = {}
local _global = require('utils.global')
public.init = function()
if global.this == nil then
global.this = {}
end
global.this.timers = {}
end
--[[
set_timer - Sets a timer.
@param left - Time left on the timer in ticks.
@param hook - Action executed after timer is elapsed.
--]]
public.set_timer = function(left, hook)
local id = game.tick
local entry = {
left = left,
hook_finish = hook,
hook_update = nil,
deps = nil,
running = false,
last_update = 0,
}
global.this.timers[id] = entry
return id
end
--[[
set_timer_on_update - Adds a hook that is executed everytime a
timers is updated.
@param id - Id of the timer.
@param hook - Hook that will be executed per update.
--]]
public.set_timer_on_update = function(id, hook)
global.this.timers[id].hook_update = hook
end
--[[
set_timer_dependency - Adds dependency into user callback.
@param id - Id of the timer,
@param deps - Dependency of timer to add.
--]]
public.set_timer_dependency = function(id, deps)
global.this.timers[id].deps = deps
end
--[[
set_timer_start - Sets the timer to run.
@param id - Id of a timer.
--]]
public.set_timer_start = function(id)
global.this.timers[id].running = true
global.this.timers[id].last_update = game.tick
end
--[[
kill_timer - Effectivly kills the timer.
@param id - Timer id.
--]]
public.kill_timer = function(id)
global.this.timers[id] = nil
end
--[[
do_job - Execute timer logic within a tick.
--]]
public.do_job = function()
for id, entry in pairs(global.this.timers) do
if entry.running == false then
goto continue
end
entry.left = entry.left - (game.tick - entry.last_update)
if entry.left > 0 then
entry.last_update = game.tick
if entry.hook_update ~= nil then
if not entry.hook_update(entry.left, entry.deps) then
goto premature_finish
end
end
goto continue
end
::premature_finish::
entry.hook_finish(entry.deps)
global.this.timers[id] = nil
::continue::
end
end
return public