New function: minetest.after(time, func)

randomproof
Member
 
Posts: 214
Joined: Thu Nov 17, 2011 06:31

New function: minetest.after(time, func)

by randomproof » Mon Mar 26, 2012 22:48

Can I make a small suggestion?

Add a variable for passing params to the function

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
minetest.timers_to_add = {}
minetest.timers = {}
minetest.register_globalstep(function(dtime)
  for indes, timer in ipairs(minetest.timers_to_add) do
    table.insert(minetest.timers, timer)
  end
  minetest.timers_to_add = {}
  for index, timer in ipairs(minetest.timers) do
    timer.time = timer.time - dtime
    if timer.time <= 0 then
      timer.func(timer.params)
      minetest.timers[index] = nil
    end
  end
end)

function minetest.after(time, func, params)
  table.insert(minetest.timers_to_add, {time=time, func=func, params=params})
end
 

randomproof
Member
 
Posts: 214
Joined: Thu Nov 17, 2011 06:31

by randomproof » Mon Mar 26, 2012 23:33

I found another issue with this function. Had to change the line:
minetest.timers[index] = nil
to:
table.remove(minetest.timers,index)

and it worked.

here is the full code:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
minetest.timers_to_add = {}
minetest.timers = {}
minetest.register_globalstep(function(dtime)
  for _, timer in ipairs(minetest.timers_to_add) do
    table.insert(minetest.timers, timer)
  end
  minetest.timers_to_add = {}
  for index, timer in ipairs(minetest.timers) do
    timer.time_sec = timer.time_sec - dtime
    --print("Timer: "..index.."  "..timer.time_sec)
    if timer.time_sec <= 0 then
      timer.func(timer.params)
      --minetest.timers[index] = nil
      table.remove(minetest.timers,index)
    end
  end
  --print("Timer count: "..table.maxn(minetest.timers))
end)

function minetest.after(time_sec, func, params)
  table.insert(minetest.timers_to_add, {time_sec=time_sec, func=func, params=params})
end


By-the-way, here it the code I'm using this for now:
It fills the air holes you see in water. It needs to be run after the normal register_on_generated because of some issue with dungeons.
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
function CheckForWaterHoles(params)
    minp = params.minp
    maxp = params.maxp
    for x = minp.x,maxp.x do
    for z = minp.z,maxp.z do
    for y = minp.y,maxp.y do
        pos = {x=x, y=y, z=z}
        pos_up = {x=x, y=y+1, z=z}
        pos_down = {x=x, y=y-1, z=z}
        if minetest.env:get_node(pos).name == "air" and minetest.env:get_node(pos_up).name == "default:water_source" then
            minetest.env:add_node(pos, {name="default:water_source"})
            doing_next_check = true
        end
        if minetest.env:get_node(pos_down).name == "air" and minetest.env:get_node(pos).name == "default:water_source" then
            minetest.env:add_node(pos_down, {name="default:water_source"})
            doing_next_check = true
        end
    end
    end
    end
end

minetest.register_on_generated(
function(minp, maxp)
    minetest.after(10, CheckForWaterHoles, {minp=minp, maxp=maxp})
end)
Last edited by randomproof on Mon Mar 26, 2012 23:34, edited 1 time in total.
 

User avatar
jordan4ibanez
Member
 
Posts: 1865
Joined: Tue Sep 27, 2011 18:44
GitHub: jordan4ibanez
IRC: jordan4ibanez
In-game: jordan4ibanez

by jordan4ibanez » Tue Mar 27, 2012 03:40

randomproof sometimes i think you're too smart for anyone else to understand

and that would be nice +1
If you can think it, you can make it.
 

User avatar
sfan5
Member
 
Posts: 3636
Joined: Wed Aug 24, 2011 09:44
GitHub: sfan5
IRC: sfan5

by sfan5 » Tue Mar 27, 2012 12:21

+1
Mods: Mesecons | WorldEdit | Nuke
Minetest builds for Windows (32-bit & 64-bit)
 

User avatar
kddekadenz
Member
 
Posts: 323
Joined: Mon Jun 27, 2011 17:21
GitHub: tinyworlds

by kddekadenz » Tue Mar 27, 2012 16:47

Thank you :)
 

User avatar
LorenzoVulcan
Member
 
Posts: 437
Joined: Mon Mar 12, 2012 06:46

by LorenzoVulcan » Fri Apr 13, 2012 15:32

It doesn't work to me...
Developer of the BlockForge 2# Project!
Official thread: http://minetest.net/forum/viewtopic.php?pid=54290#p54290
 


Return to Minetest Engine

Who is online

Users browsing this forum: No registered users and 3 guests

cron