forked from mtcontrib/plantlife_modpack
Added function support in ABM growing code
This commit is contained in:
parent
dde8ca5955
commit
ebeb286c31
@ -61,10 +61,6 @@ plantslib.perlin_humidity = PerlinNoise(humidity_seeddiff, humidity_octaves, hum
|
|||||||
|
|
||||||
-- Local functions
|
-- Local functions
|
||||||
|
|
||||||
local function dump_pos(pos)
|
|
||||||
return "{x="..pos.x..",y="..pos.y..",z="..pos.z.."}"
|
|
||||||
end
|
|
||||||
|
|
||||||
function plantslib:is_node_loaded(node_pos)
|
function plantslib:is_node_loaded(node_pos)
|
||||||
local n = minetest.get_node_or_nil(node_pos)
|
local n = minetest.get_node_or_nil(node_pos)
|
||||||
if (not n) or (n.name == "ignore") then
|
if (not n) or (n.name == "ignore") then
|
||||||
@ -191,8 +187,11 @@ function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or
|
|||||||
minetest.registered_nodes[node_or_function_or_model] then
|
minetest.registered_nodes[node_or_function_or_model] then
|
||||||
minetest.add_node(p_top, { name = node_or_function_or_model })
|
minetest.add_node(p_top, { name = node_or_function_or_model })
|
||||||
spawned = true
|
spawned = true
|
||||||
elseif objtype == "string" and pcall(loadstring(("return %s(%s)"):
|
elseif objtype == "function" then
|
||||||
format(node_or_function_or_model, dump_pos(pos)))) then
|
node_or_function_or_model(pos)
|
||||||
|
spawned = trueload
|
||||||
|
elseif objtype == "string" and pcall(loadstring(("return %s(...)"):
|
||||||
|
format(node_or_function_or_model)),pos) then
|
||||||
spawned = true
|
spawned = true
|
||||||
else
|
else
|
||||||
print("Ignored invalid definition for object "..dump(node_or_function_or_model).." that was pointed at {"..dump(pos).."}")
|
print("Ignored invalid definition for object "..dump(node_or_function_or_model).." that was pointed at {"..dump(pos).."}")
|
||||||
@ -277,7 +276,7 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
|
|||||||
fdir = math.random(biome.random_facedir[1],biome.random_facedir[2])
|
fdir = math.random(biome.random_facedir[1],biome.random_facedir[2])
|
||||||
end
|
end
|
||||||
if type(spawn_plants) == "string" then
|
if type(spawn_plants) == "string" then
|
||||||
assert(loadstring(spawn_plants.."("..dump_pos(pos)..")"))()
|
assert(loadstring(spawn_plants.."(...)"))(pos)
|
||||||
elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then
|
elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then
|
||||||
if n_top.name == "air" then
|
if n_top.name == "air" then
|
||||||
minetest.add_node(p_top, { name = plant_to_spawn, param2 = fdir })
|
minetest.add_node(p_top, { name = plant_to_spawn, param2 = fdir })
|
||||||
@ -366,11 +365,17 @@ function plantslib:replace_object(pos, replacement, grow_function, walldir, seed
|
|||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
plantslib:grow_tree(pos, grow_function)
|
plantslib:grow_tree(pos, grow_function)
|
||||||
return
|
return
|
||||||
|
elseif growtype == "function" then
|
||||||
|
local perlin1 = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale)
|
||||||
|
local noise1 = perlin1:get2d({x=pos.x, y=pos.z})
|
||||||
|
local noise2 = plantslib.perlin_temperature:get2d({x=pos.x, y=pos.z})
|
||||||
|
grow_function(pos,noise1,noise2,walldir)
|
||||||
|
return
|
||||||
elseif growtype == "string" then
|
elseif growtype == "string" then
|
||||||
local perlin1 = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale)
|
local perlin1 = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale)
|
||||||
local noise1 = perlin1:get2d({x=pos.x, y=pos.z})
|
local noise1 = perlin1:get2d({x=pos.x, y=pos.z})
|
||||||
local noise2 = plantslib.perlin_temperature:get2d({x=pos.x, y=pos.z})
|
local noise2 = plantslib.perlin_temperature:get2d({x=pos.x, y=pos.z})
|
||||||
assert(loadstring(grow_function.."("..dump_pos(pos)..","..noise1..","..noise2..","..dump(walldir)..")"))()
|
assert(loadstring(grow_function.."(...)"))(pos,noise1,noise2,walldir)
|
||||||
return
|
return
|
||||||
elseif growtype == "nil" then
|
elseif growtype == "nil" then
|
||||||
minetest.add_node(pos, { name = replacement, param2 = walldir})
|
minetest.add_node(pos, { name = replacement, param2 = walldir})
|
||||||
|
Loading…
Reference in New Issue
Block a user