I’m making a voxel based mining game in which in the system for my game, caves occasionally generate depending on certain conditions. This works with the algorithm that I’m using, however the amount of time it takes to generate a cave is too much, as well as the amount of blocks spawning from the cave is also too much, this is because these caves generate unnecessary corners and blocks that aren’t seen until the player actually mines to them. How could I eliminate these unnecessary blocks entirely? I’ve been trying for a bit but I can’t figure it out.
This is what the code looks like.
local b = {} local s, incr, length = 0, 0, 1 local noise = false b[pos]=true while length>0 do --print(b, length) for i,v in pairs(b) do incr+=1 for j=1,6 do noise = math.noise((i+dir[j]).X/60, (i+dir[j]).Y/60, (i+dir[j]).Z/60) >= 0.4 if not blocks[i+dir[j]] and not b[i+dir[j]] then if noise then b[i+dir[j]]=true length+=1 end s=0 for k=1,6 do if math.noise((i+dir[j]+dir[k]).X/60, (i+dir[j]+dir[k]).Y/60, (i+dir[j]+dir[k]).Z/60) > 0.4 then s+=1 end end if s==6 then blocks[i+dir[j]]=true elseif s>0 then blocks[i+dir[j]]=true task.spawn(function() choose(i+dir[j], plr, id, true) end) end end end --print(b, i) b[i]=nil length-=1 if incr%100==0 then task.wait() end end end