Page 1 of 1

Is it possible to run a script over multiple ticks?

Posted: Wed Oct 23, 2019 2:40 pm
by Romner_set
For example :

Code: Select all

script.on_event(defines.events.on_tick, function(event)
    run_every_5_seconds
    	 if something do
    	 	do stuff
     	 	wait 1 tick
    	 	do more stuff
    	 end
    	 wait 1 tick
    	 do more stuff
    	 etc.
    end
end)
This is useful because I want to run kinda heavy code every 5 (maybe more) secs, so it is better to have a drop in UPS for a few seconds than lag the whole game for a second or two.

Re: Is it possible to run a script over multiple ticks?

Posted: Wed Oct 23, 2019 3:05 pm
by ratchetfreak
You can use a coroutine:

Code: Select all

local mycoroutine = coroutine.create (function ()
       run_every_5_seconds
            if something do
                do stuff
                coroutine.yield()
                do more stuff
            end
            coroutine.yield()
             do more stuff
    	     etc.
        end
end )

script.on_event(defines.events.on_tick, function(event)
         coroutine.resume(mycoroutine)
end)

Re: Is it possible to run a script over multiple ticks?

Posted: Wed Oct 23, 2019 3:57 pm
by Romner_set
ratchetfreak wrote:
Wed Oct 23, 2019 3:05 pm
You can use a coroutine
Oh! For now I found a way to make the code much less performance heavy, so this isn't needed. But thanks anyway!

Re: Is it possible to run a script over multiple ticks?

Posted: Wed Oct 23, 2019 3:58 pm
by eradicator
ratchetfreak wrote:
Wed Oct 23, 2019 3:05 pm
You can use a coroutine:
Factorio engine does not suppot coroutine.

If you just want to iterate a table see this thread.

Re: Is it possible to run a script over multiple ticks?

Posted: Wed Oct 23, 2019 8:33 pm
by darkfrei