flowers/mapgen.lua: Register flower decorations for mgv6
authorparamat <mat.gregory@virginmedia.com>
Tue, 24 Mar 2015 20:48:59 +0000 (20:48 +0000)
committerparamat <mat.gregory@virginmedia.com>
Wed, 25 Mar 2015 21:28:15 +0000 (21:28 +0000)
mods/flowers/mapgen.lua

index 55e0edccb37d6c79a43531512f243380227eed53..361fd08ae2b3933802fbbad7af5ba28c50bb7f76 100644 (file)
@@ -1,70 +1,35 @@
-function flowers.mgv6ongen(minp, maxp, seed)
-       if maxp.y >= 2 and minp.y <= 0 then
-               -- Generate flowers
-               local perlin1 = minetest.get_perlin(436, 3, 0.6, 100)
-               -- Assume X and Z lengths are equal
-               local divlen = 16
-               local divs = (maxp.x-minp.x)/divlen+1;
-               for divx=0,divs-1 do
-               for divz=0,divs-1 do
-                       local x0 = minp.x + math.floor((divx+0)*divlen)
-                       local z0 = minp.z + math.floor((divz+0)*divlen)
-                       local x1 = minp.x + math.floor((divx+1)*divlen)
-                       local z1 = minp.z + math.floor((divz+1)*divlen)
-                       -- Determine flowers amount from perlin noise
-                       local grass_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 3 * 9)
-                       -- Find random positions for flowers based on this random
-                       local pr = PseudoRandom(seed+456)
-                       for i=0,grass_amount do
-                               local x = pr:next(x0, x1)
-                               local z = pr:next(z0, z1)
-                               -- Find ground level (0...15)
-                               local ground_y = nil
-                               for y=30,0,-1 do
-                                       if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then
-                                               ground_y = y
-                                               break
-                                       end
-                               end
-
-                               if ground_y then
-                                       local p = {x=x,y=ground_y+1,z=z}
-                                       local nn = minetest.get_node(p).name
-                                       -- Check if the node can be replaced
-                                       if minetest.registered_nodes[nn] and
-                                               minetest.registered_nodes[nn].buildable_to then
-                                               nn = minetest.get_node({x=x,y=ground_y,z=z}).name
-                                               if nn == "default:dirt_with_grass" then
-                                                       local flower_choice = pr:next(1, 6)
-                                                       local flower
-                                                       if flower_choice == 1 then
-                                                               flower = "flowers:tulip"
-                                                       elseif flower_choice == 2 then
-                                                               flower = "flowers:rose"
-                                                       elseif flower_choice == 3 then
-                                                               flower = "flowers:dandelion_yellow"
-                                                       elseif flower_choice == 4 then
-                                                               flower = "flowers:dandelion_white"
-                                                       elseif flower_choice == 5 then
-                                                               flower = "flowers:geranium"
-                                                       elseif flower_choice == 6 then
-                                                               flower = "flowers:viola"
-                                                       end
-                                                       minetest.set_node(p, {name=flower})
-                                               end
-                                       end
-                               end
+local function register_flower(name)
+       minetest.register_decoration({
+               deco_type = "simple",
+               place_on = {"default:dirt_with_grass"},
+               sidelen = 16,
+               noise_params = {
+                       offset = 0,
+                       scale = 0.006,
+                       spread = {x=100, y=100, z=100},
+                       seed = 436,
+                       octaves = 3,
+                       persist = 0.6
+               },
+               y_min = 1,
+               y_max = 30,
+               decoration = "flowers:"..name.."",
+       })
+end
 
-                       end
-               end
-               end
-       end
+function flowers.register_mgv6_decorations()
+       register_flower("rose")
+       register_flower("tulip")
+       register_flower("dandelion_yellow")
+       register_flower("geranium")
+       register_flower("viola")
+       register_flower("dandelion_white")
 end
 
 -- Enable in mapgen v6 only
 
-minetest.register_on_mapgen_init(function(mg_params)
-       if mg_params.mgname == "v6" then
-               minetest.register_on_generated(flowers.mgv6ongen)
-       end
-end)
+local mg_params = minetest.get_mapgen_params()
+if mg_params.mgname == "v6" then
+       flowers.register_mgv6_decorations()
+end
+