Self Looping Function with Delay (CMS)
Name | Type | By |
---|---|---|
Self Looping Function with Delay | Definition | AFRLme |
This script allows you to iterate through a list of actions/code via a self looping function with optional delay between each iteration. Visionaire Studio 5+ is required to run this script.
Version 1: Reusable Looping Function
This version uses Lua tables/arrays for storing the lines of code you want to iterate through with each loop, as well as the delay value before the loop is recalled.
Instructions
1. Add this script into the script section of the Visionaire Studio editor & set as a defintion type script...
--[[
Self Looping Function with Delay [v3] (29/08/2022)
Written by AFRLme [Lee Clarke]
-- + --
email: afrlme@outlook.com
paypal: afrlme@zoho.com
patreon: https://www.patreon.com/AFRLme
portfolio: https://afrl.me
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]
function selfLoop(tbl, inc)
tbl[inc].f() -- execute function
-- + --
if inc < #tbl then -- if incremental value is less than table total entries...
inc = inc + 1 -- increment value by 1
setDelay(tbl[inc].d, function() selfLoop(tbl, inc) end) -- reloop function after x delay
end
end
2. To use this script you need to create an execute a script action part somewhere, or an execution type script in the script section that you can call & then you would insert some code that looks like something along the lines of this...
local t = {
{f = function() print("hello world!") end}, -- first entry, no delay value needed
{f = function() startSound("vispath:audio/example.ogg") end, d = 1000}, -- f = function, d = delay
{f = function()
print("multi-line functions are also valid")
Conditions["the_end"].Value = true
end, d = 1200},
{f = function()
if Conditions["the_end"].Value then startAction(Actions["fin"]) end
end, d = 800}
}
selfLoop(t, 1) -- init the loop & incremental value
Version 2: Disposable Looping Function
This version requires you to write a bunch of elseif queries inside of the looping function that you will use to determine which lines of code should be executed on each iteration of the loop. You will also need to use the setDelay function to update the incremental variable & recall the function after a specified delay value in milliseconds. Personally I quite like this method as it's much cleaner & easier to understand, however you can only use the function for iterating through one set of specific actions, unlike version #1 which uses Lua arrays/tables to for storing the lines of code in that you want to iterate through.
Instructions
1. Add this script into the script section of the Visionaire Studio editor & set as a defintion type script...
--[[
Self Looping Function with Delay [v1] (29/08/2022)
Written by AFRLme [Lee Clarke]
-- + --
email: afrlme@outlook.com
paypal: afrlme@zoho.com
patreon: https://www.patreon.com/AFRLme
portfolio: https://afrl.me
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]
local val = 1 -- init incremental value
function selfLoop()
if val == 1 then -- check if incremental value equals 1
print("hello world!") -- some lines of code
setDelay(2000, function() val = val + 1; selfLoop() end) -- update incremental value & reloop
elseif val == 2 then
startSound("vispath:audio/example.ogg")
setDelay(1000, function() val = val + 1; selfLoop() end)
elseif val == 3 then
startAction(Actions["fin"])
end
end
2. To use this script you need to create an execute a script action part somewhere & then you would insert a line of code that looks like something along the lines of this...
selfLoop()
Resources
Name | Description |
---|---|
self_looping_function_w_delay.zip | A working example of the script in action. Visionaire Studio 5.1.9.2+ required to run the included .ved file(s). |