Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

47 lines
1.3 KiB
Lua

local _nth_tick = {}
---@alias NthTickEvent { handler_name: string, metadata: table }
---@param tick Tick
local function register_nth_tick_handler(tick)
script.on_nth_tick(tick, function(nth_tick_data)
local event_data = global.nth_tick_events[nth_tick_data.nth_tick]
local handler = GLOBAL_HANDLERS[event_data.handler_name] ---@type function
handler(event_data.metadata)
util.nth_tick.cancel(tick)
end)
end
---@param desired_tick Tick
---@param handler_name string
---@param metadata table
---@return Tick
function _nth_tick.register(desired_tick, handler_name, metadata)
local actual_tick = desired_tick
-- Search until the next free nth_tick is found
while (global.nth_tick_events[actual_tick] ~= nil) do
actual_tick = actual_tick + 1
end
global.nth_tick_events[actual_tick] = {handler_name=handler_name, metadata=metadata}
register_nth_tick_handler(actual_tick)
return actual_tick -- let caller know which tick they actually got
end
---@param tick Tick
function _nth_tick.cancel(tick)
script.on_nth_tick(tick, nil)
global.nth_tick_events[tick] = nil
end
function _nth_tick.register_all()
if not global.nth_tick_events then return end
for tick, _ in pairs(global.nth_tick_events) do
register_nth_tick_handler(tick)
end
end
return _nth_tick