Skip to content

Таймер

Для асинхронных событий, привязанных к реальному времени, в INSTEAD есть возможность использовать таймер. На самом деле, вам следует хорошо подумать, стоит ли в приключенческой игре использовать таймер. Обычно, игроком это воспринимается не слишком благосклонно. С другой стороны, таймер вполне можно использовать для управления музыкой или в оформительских целях.

Для использования таймера, вам следует подключить модуль "timer".

require "timer"

Таймер программируется с помощью объекта 'timer'.

  • timer:set(мс) -- задать интервал таймера в миллисекундах;
  • timer:stop() -- остановить таймер.

При срабатывании таймера, вызывается обработчик game.timer. Если game.timer возвращает false, сцена не перерисовывается. В противном случае, возвращаемое значение выводится как реакция.

Вы можете делать локальные для комнаты обработчики 'timer'. Если в комнате объявлен обработчик 'timer', он вызывается вместо 'game.timer'. Если он возвращает false -- вызывается game.timer.

Например:

lua
game.timer = function(s)
	if time() > 10 then
		return false
	end
	snd.play 'gfx/beep.ogg';
	p ("Timer:", time())
end

function init()
	timer:set(1000) -- раз в секунду
end
lua
room  {
    enter = function(s)
        timer:set(1000);
    end;
    timer = function(s)
        timer:stop();
        walk 'комната2';
    end;
    nam = 'Проверка таймера';
    dsc = [[Ждите.]];
}

Состояние таймера попадает в файл сохранения, таким образом, вам не нужно заботиться о его восстановлении.

Вы можете вернуть из таймера специальный статус:

return true, false

В этом режиме перерисуется только область инвентаря. Это можно использовать для статусов вроде часов.

Кроме того, в INSTEAD существует возможность отслеживать интервалы времени в миллисекундах. Для этого используйте функцию instead.ticks(). Функция возвращает число миллисекунд, прошедшее с момента старта игры.