Timers allow you to set a delay and a callback to be called when the timer completes.
The timers created with this API are updated with the collection timer where they
are created. If you pause or speed up the collection (using set_time_step) it will
also affect the new timer.
Version: alpha
| TYPES | |
|---|---|
| timer_handle | Timer handle |
| RECORDS | |
|---|---|
| timer.info | Timer information |
| FUNCTIONS | |
|---|---|
| timer.cancel() | cancel a timer |
| timer.delay() | create a timer |
| timer.get_info() | get information about timer |
| timer.trigger() | trigger a callback |
| CONSTANTS | |
|---|---|
| timer.INVALID_TIMER_HANDLE | Indicates an invalid timer handle |
timer_handle = number
An opaque numeric identifier returned by timer.delay. Pass it to
timer.cancel, timer.trigger, or timer.get_info to control
the timer. Timers are owned by the script that created them and are removed
automatically when the script is deleted. A failed creation returns
timer.INVALID_TIMER_HANDLE.
EXAMPLES
local handle = timer.delay(1, true, function()
print("tick")
end)
timer.cancel(handle)
Timer information
FIELDS
time_remaining |
number |
Time remaining until the next callback. |
delay |
number |
Timer interval. |
repeating |
boolean |
Whether the timer repeats until cancelled. |
timer.cancel(handle:timer_handle)→cancelled:boolean
You may cancel a timer from inside a timer callback. Cancelling a timer that is already executed or cancelled is safe.
PARAMETERS
handle |
timer_handle |
the timer handle returned by timer.delay() |
RETURNS
cancelled |
boolean |
true if the timer was active and cancelled, false if the timer was already cancelled or complete
|
EXAMPLES
self.handle = timer.delay(1, true, function() print("print every second") end)
...
local cancelled = timer.cancel(self.handle)
if not cancelled then
print("the timer is already cancelled")
end
timer.delay(delay:number, repeating:boolean, callback:fun(self:script_instance, handle:timer_handle, time_elapsed:number))→handle:timer_handle
Adds a timer and returns a unique handle. You may create more timers from inside a timer callback. Using a delay of 0 will result in a timer that triggers at the next frame just before script update functions. If you want a timer that triggers on each frame, set delay to 0.0f and repeat to true. Timers created within a script will automatically die when the script is deleted.
PARAMETERS
delay |
number |
time interval in seconds |
repeating |
boolean |
true = repeat timer until cancel, false = one-shot timer |
callback |
function(
self:script_instance,
handle:timer_handle,
time_elapsed:number) |
timer callback function
|
RETURNS
handle |
timer_handle |
identifier for the create timer, returns timer.INVALID_TIMER_HANDLE if the timer can not be created |
EXAMPLES
A simple one-shot timertimer.delay(1, false, function() print("print in one second") end)
local function call_every_second(self, handle, time_elapsed)
self.counter = self.counter + 1
print("Call #", self.counter)
if self.counter == 10 then
timer.cancel(handle) -- cancel timer after 10 calls
end
end
self.counter = 0
timer.delay(1, true, call_every_second)
timer.get_info(handle:timer_handle)→data:timer.info|nil
Get information about timer.
PARAMETERS
handle |
timer_handle |
the timer handle returned by timer.delay() |
RETURNS
data |
timer.infonil |
timer information, or nil if the timer is cancelled or complete
|
EXAMPLES
self.handle = timer.delay(1, true, function() print("print every second") end)
...
local result = timer.get_info(self.handle)
if not result then
print("the timer is already cancelled or complete")
else
pprint(result) -- delay, time_remaining, repeating
end
timer.trigger(handle:timer_handle)→triggered:boolean
Manual triggering a callback for a timer.
PARAMETERS
handle |
timer_handle |
the timer handle returned by timer.delay() |
RETURNS
triggered |
boolean |
true if the timer was active and triggered, false if the timer was already cancelled or complete
|
EXAMPLES
self.handle = timer.delay(1, true, function() print("print every second or manually by timer.trigger") end)
...
local triggered = timer.trigger(self.handle)
if not triggered then
print("the timer is already cancelled or complete")
end