Solarus quests
1.6
Quest maker's reference
|
Timers allow you to call a function in the future with a specified delay.
Here is a first example of use:
-- Play sound "secret" in one second. local function play_secret_sound() sol.audio.play_sound("secret") end sol.timer.start(1000, play_secret_sound)
Shorter version to do the same thing:
-- Equivalent code using an anonymous function. sol.timer.start(1000, function() sol.audio.play_sound("secret") end)
You can repeat a timer by returning true
from your function:
-- Call a function every second. sol.timer.start(1000, function() sol.audio.play_sound("danger") return true -- To call the timer again (with the same delay). end)
To make a timer that repeats itself 10 times, just return false
after 10 calls:
-- Call a function ten times, with one second between each call. local num_calls = 0 sol.timer.start(1000, function() sol.audio.play_sound("danger") num_calls = num_calls + 1 return num_calls < 10 end)
It is possible to restrict the lifetime of a timer to a context, like the game, the map or an enemy:
-- Enemy that shoots a fireball every 5 seconds until it is killed. sol.timer.start(your_enemy, 5000, function() sol.audio.play_sound("attack_fireball") map:create_enemy(...) -- Code that creates the fireball. return true -- Repeat the timer. end)
Setting the context to an enemy ensures that when the enemy is killed, the timer is canceled. Otherwise, the callback function would still be called: in this example, you would hear the "attack_fireball"
sound and the fireball would be created even if the enemy is killed in the meantime.
Sets a function to be called after a delay.
If the delay is set to zero, the function is called immediately.
context
(map, game, item, map entity, state, menu or sol.main; optional): Determines the lifetime of the timer. The context is where the timer belongs.delay
(number): Delay before calling the function in milliseconds.callback
(function): The function to be called when the timer finishes.true
, then the timer automatically repeats itself with the same delay.Cancels all timers that are currently running in a context.
This function is equivalent to calling timer:stop() on each timer of the context. It may allow you to avoid to store explicitly all your timers.
Cancels this timer.
If the timer was already finished or canceled, nothing happens.
Returns whether a clock sound is played repeatedly during this timer.
true
if a clock sound is played with this timer.Sets whether a clock sound is played repeatedly during this timer.
with_sound
(boolean, optional): true
to play a clock sound repeatedly (no value means true
).Returns whether this timer is currently suspended.
true
if this timer is currently suspended.Returns whether this timer is currently suspended.
suspended
(boolean, optional): true
to suspend the timer, false
to unsuspend it (no value means true
).Returns whether this timer gets automatically suspended when the map is suspended.
true
if this timer gets suspended when the map is suspended.Sets whether this timer should automatically be suspended when the map gets suspended.
The map is suspended by the engine in a few cases, like when the game is paused, when there is a dialog or when the camera is being moved by a script. When this happens, all map entities stop moving and most sprites stop their animation. With this setting, you can choose whether your timer gets suspended automatically as well.
By default, map timers, entity timers, state timers and item timers are suspended with the map.
suspended_with_map
(boolean, optional): true
to suspend the timer when the map is suspended, false
to continue (no value means true
).true
, entity timers also get automatically suspended when the entity is disabled.Returns the remaining time of this timer.
0
means that the timer is finished (or will finish in the current cycle) or was canceled.Changes the remaining time of this timer.
This function has no effect if the timer is already finished.
remaining_time
(number): The time remaining in milliseconds. 0
makes the timer finish now and immediately executes its callback.true
or a number), the timer gets rescheduled with its full delay again, no matter if you called this function in the meantime.