-- -- layer generator -- local print2=function(text) minetest.log("verbose","rocks/gen/ "..text) end rocksl.seedseq=0 rocksl.GetNextSeed=function() rocksl.seedseq=rocksl.seedseq+20 print2("seed "..rocksl.seedseq) return rocksl.seedseq end rocksl.register_blob=function(layer,name,param) table.insert(layer.localized,{ primary=name, spread=(param.spread or 20), height=(param.height or 15), treshold=(param.treshold or 0.85), secondary=param.secondary, seed=(rocksl.GetNextSeed()), }) layer.stats.node[name]=0 end rocksl.layergen=function(layer, minp, maxp, seed) if ( (layer.top.offset+layer.top.scale)>minp.y ) and ( (layer.bot.offset-layer.bot.scale)bottom[noise2d_ix]) and (y loc.treshold) then nodes[pos]=loc.ctx layer.stats.node[loc.ndn]=layer.stats.node[loc.ndn]+1 break end end end noise2d_ix=noise2d_ix+1 noise3d_ix=noise3d_ix+1 end noise2d_ix=noise2d_ix-side_length end noise2d_ix=noise2d_ix+side_length end print2("after loop: "..(os.clock()-timebefore)) manipulator:set_data(nodes) --manipulator:calc_lighting() --manipulator:update_liquids() if layer.debugging then manipulator:set_lighting({day=15,night=15}) end manipulator:write_to_map() print2("after commit: "..(os.clock()-timebefore)) layer.stats.count=layer.stats.count+1 layer.stats.total=layer.stats.total+(os.clock()-timebefore) layer.stats.side=side_length end end rocksl.veingen=function(veins,minp,maxp,seed) local side_length=(maxp.y-minp.y) local random=PseudoRandom(seed-79) local noise=minetest.get_perlin(-79,1,0.7,8) print("begin veingen") for _,vein in ipairs(veins) do if (minp.yvein.maxy) then local iterations_count= (vein.rarity*side_length)^3 iterations_count=iterations_count+random:next(-1,1) for iteration=1, iterations_count do local x0=minp.x+ random:next(0,side_length) local y0=minp.y+ random:next(0,side_length) local z0=minp.z+ random:next(0,side_length) if true or (minetest.get_node({x0,y0,z0}).name==vein.wherein) then print("vein "..vein.primary.." @ "..x0..","..y0..","..z0) for x=-vein.radius, vein.radius do for y=-vein.radius, vein.radius do for z=-vein.radius, vein.radius do p={x=x+x0,y=y+y0,z=z+z0} local nv=noise:get3d(p)*5 if ((x^2)+(y^2)+(z^2))<((vein.radius+nv)^2) then minetest.set_node(p, {name=vein.primary}) end end end end else print("vein "..vein.primary.." bad environmnent") end end end end print("end veingen") end -- ~ Tomas Brod