Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
flowers/mapgen.lua: Register flower decorations for mgv6
- Loading branch information
Showing
1 changed file
with
30 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.."", | ||
This comment has been minimized.
Sorry, something went wrong. |
||
}) | ||
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 | ||
|
decoration = "flowers:"..name,