Добавлен , опубликован
Система, которая предоставляет удобную работу с таймерами. Предназначена для интеграции с внешним таймером, а также для тестирования и эмуляции кода, зависящего от событий времени. Преимущества по сравнению с другими реализациями - детерминированный порядок выполнения на большинстве устройств. Основано на двоичной куче с модификацией. Рассчитывалось на работу с ~ 300_000 таймерами.
Быстрый старт
local Time = TimeSystem()
local Timer = TimerSystem(Time)
Timer.after(2, function() print('2 seconds have passed') end)
Timer.every(1, 5, function() print('periodic') end)
Time.start() -- запустить время (для консоли)
[[ output
periodic
periodic
2 seconds have passed
periodic
periodic
periodic
]]
API
local Time = TimeSystem()
local Timer = TimerSystem(Time)
Timer.new() --> timer

-- @param delay - float
-- @param fucntion - fucntion
-- @param arguments - table, optional
Timer.after(delay, fucntion, arguments) --> timer -- запустить через время

-- ...
-- @param count - uint
Timer.every(delay, count, function, arguments) --> timer -- запустить несколько раз
local timer = Timer.new()
timer:after(delay, fucntion, arguments) -- запустить через время
timer:every(delay, count, function, arguments) -- запустить несколько раз
timer:pause()
timer:remained() --> float - time
Больше примеров
local unit = {x = 0, y = 0}
Timer.after(3, function(timer, arg)
	arg.x, arg.y = 1, -1
	print(unit.x, unit.y)
end, unit)
--> 1, -1


local tick = 0
Timer.every(1, 10, function(timer)
	tick = tick + 1
	print(tick)
	if tick > 5 then
		timer:pause()
	end
end)
--> 1, 2, 3, 4, 5, 6
`
ОЖИДАНИЕ РЕКЛАМЫ...
27
есть ли какое то преимущество по сравнению с обычным игровым таймером?

как узнать какой таймер истек? и надо ли его чистить?

будут ли записи: тек время, сколько прошло (пройденное), сколько осталось? я помню че то такое делал. только там от начала игры запускал таймер. И из него вынимал данные.
18
есть ли какое то преимущество по сравнению с обычным игровым таймером?
Эти таймеры напрямую не зависят от каких-либо конкретных таймеров или конкретного игрового движка. Тут есть только одна зависимость от модуля TimeSystem, через который осуществляются вызовы. Будут работать и в консоли.
как узнать какой таймер истек?
Когда таймер истекает, то он вызывает функцию, которая была в него передана, и первым аргументом передает сам себя.
и надо ли его чистить?
Нет, он соберется сборщиком мусора.
будут ли записи: тек время, сколько прошло (пройденное), сколько осталось?
Позже
27
можно еще получить тек время от момента начала игры?
18
можно еще получить тек время от момента начала игры?
local Time = TimeSystem()
Time.time --> real
33
Vlod, очень интересно, надо попробовать вместе этим багом, будет приколько если он не проявится
27
Vlod, очень интересно, надо попробовать вместе этим багом, будет приколько если он не проявится
проверь есть ли замедление
Чтобы оставить комментарий, пожалуйста, войдите на сайт.