Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
plantlife_modpack
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Illuna-Minetest
plantlife_modpack
Commits
448e3d2b
Commit
448e3d2b
authored
11 years ago
by
Vanessa Ezekowitz
Browse files
Options
Downloads
Patches
Plain Diff
Phased out all deprecated minetest.env:* uses in favor of minetest.*
parent
9d06a313
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
plants_lib/init.lua
+58
-58
58 additions, 58 deletions
plants_lib/init.lua
with
58 additions
and
58 deletions
plants_lib/init.lua
+
58
−
58
View file @
448e3d2b
...
...
@@ -41,7 +41,7 @@ local function dump_pos(pos)
end
function
plantslib
:
is_node_loaded
(
node_pos
)
n
=
minetest
.
env
:
get_node_or_nil
(
node_pos
)
n
=
minetest
.
get_node_or_nil
(
node_pos
)
if
(
not
n
)
or
(
n
.
name
==
"ignore"
)
then
return
false
end
...
...
@@ -100,18 +100,18 @@ function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or
plantslib
:
set_defaults
(
biome
)
plantslib
:
dbg
(
"Started checking generated mapblock volume..."
)
local
searchnodes
=
minetest
.
env
:
find_nodes_in_area
(
minp
,
maxp
,
biome
.
surface
)
local
searchnodes
=
minetest
.
find_nodes_in_area
(
minp
,
maxp
,
biome
.
surface
)
local
in_biome_nodes
=
{}
local
num_in_biome_nodes
=
0
for
i
in
ipairs
(
searchnodes
)
do
local
pos
=
searchnodes
[
i
]
local
p_top
=
{
x
=
pos
.
x
,
y
=
pos
.
y
+
1
,
z
=
pos
.
z
}
local
perlin1
=
minetest
.
env
:
get_perlin
(
biome
.
seed_diff
,
perlin_octaves
,
perlin_persistence
,
perlin_scale
)
local
perlin1
=
minetest
.
get_perlin
(
biome
.
seed_diff
,
perlin_octaves
,
perlin_persistence
,
perlin_scale
)
local
noise1
=
perlin1
:
get2d
({
x
=
p_top
.
x
,
y
=
p_top
.
z
})
local
noise2
=
plantslib
.
perlin_temperature
:
get2d
({
x
=
p_top
.
x
,
y
=
p_top
.
z
})
local
noise3
=
plantslib
.
perlin_humidity
:
get2d
({
x
=
p_top
.
x
+
150
,
y
=
p_top
.
z
+
50
})
if
(
not
biome
.
depth
or
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
biome
.
depth
-
1
,
z
=
pos
.
z
}).
name
~=
biome
.
surface
)
and
(
not
biome
.
check_air
or
(
biome
.
check_air
and
minetest
.
env
:
get_node
(
p_top
).
name
==
"air"
))
if
(
not
biome
.
depth
or
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
biome
.
depth
-
1
,
z
=
pos
.
z
}).
name
~=
biome
.
surface
)
and
(
not
biome
.
check_air
or
(
biome
.
check_air
and
minetest
.
get_node
(
p_top
).
name
==
"air"
))
and
pos
.
y
>=
biome
.
min_elevation
and
pos
.
y
<=
biome
.
max_elevation
and
noise1
>
biome
.
plantlife_limit
...
...
@@ -119,10 +119,10 @@ function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or
and
noise2
>=
biome
.
temp_max
and
noise3
<=
biome
.
humidity_min
and
noise3
>=
biome
.
humidity_max
and
(
not
biome
.
ncount
or
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
},
{
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
},
biome
.
neighbors
))
>
biome
.
ncount
)
and
(
not
biome
.
near_nodes
or
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
pos
.
x
-
biome
.
near_nodes_size
,
y
=
pos
.
y
-
biome
.
near_nodes_vertical
,
z
=
pos
.
z
-
biome
.
near_nodes_size
},
{
x
=
pos
.
x
+
biome
.
near_nodes_size
,
y
=
pos
.
y
+
biome
.
near_nodes_vertical
,
z
=
pos
.
z
+
biome
.
near_nodes_size
},
biome
.
near_nodes
))
>=
biome
.
near_nodes_count
)
and
(
not
biome
.
ncount
or
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
},
{
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
},
biome
.
neighbors
))
>
biome
.
ncount
)
and
(
not
biome
.
near_nodes
or
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
pos
.
x
-
biome
.
near_nodes_size
,
y
=
pos
.
y
-
biome
.
near_nodes_vertical
,
z
=
pos
.
z
-
biome
.
near_nodes_size
},
{
x
=
pos
.
x
+
biome
.
near_nodes_size
,
y
=
pos
.
y
+
biome
.
near_nodes_vertical
,
z
=
pos
.
z
+
biome
.
near_nodes_size
},
biome
.
near_nodes
))
>=
biome
.
near_nodes_count
)
and
math.random
(
1
,
100
)
>
biome
.
rarity
and
(
not
biome
.
below_nodes
or
string.find
(
dump
(
biome
.
below_nodes
),
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
)
)
and
(
not
biome
.
below_nodes
or
string.find
(
dump
(
biome
.
below_nodes
),
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
)
)
then
table.insert
(
in_biome_nodes
,
pos
)
num_in_biome_nodes
=
num_in_biome_nodes
+
1
...
...
@@ -142,27 +142,27 @@ function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or
pos
.
y
=
pos
.
y
-
1
end
local
p_top
=
{
x
=
pos
.
x
,
y
=
pos
.
y
+
1
,
z
=
pos
.
z
}
if
not
(
biome
.
avoid_radius
and
biome
.
avoid_nodes
)
or
not
minetest
.
env
:
find_node_near
(
p_top
,
biome
.
avoid_radius
+
math.random
(
-
1
.
5
,
1
.
5
),
biome
.
avoid_nodes
)
then
if
not
(
biome
.
avoid_radius
and
biome
.
avoid_nodes
)
or
not
minetest
.
find_node_near
(
p_top
,
biome
.
avoid_radius
+
math.random
(
-
1
.
5
,
1
.
5
),
biome
.
avoid_nodes
)
then
spawned
=
true
if
biome
.
delete_above
then
minetest
.
env
:
remove_node
(
p_top
)
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
minetest
.
remove_node
(
p_top
)
minetest
.
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
end
if
biome
.
delete_above_surround
then
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
-
1
,
y
=
p_top
.
y
,
z
=
p_top
.
z
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
+
1
,
y
=
p_top
.
y
,
z
=
p_top
.
z
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
,
z
=
p_top
.
z
-
1
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
,
z
=
p_top
.
z
+
1
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
-
1
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
+
1
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
-
1
})
minetest
.
env
:
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
+
1
})
minetest
.
remove_node
({
x
=
p_top
.
x
-
1
,
y
=
p_top
.
y
,
z
=
p_top
.
z
})
minetest
.
remove_node
({
x
=
p_top
.
x
+
1
,
y
=
p_top
.
y
,
z
=
p_top
.
z
})
minetest
.
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
,
z
=
p_top
.
z
-
1
})
minetest
.
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
,
z
=
p_top
.
z
+
1
})
minetest
.
remove_node
({
x
=
p_top
.
x
-
1
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
minetest
.
remove_node
({
x
=
p_top
.
x
+
1
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
})
minetest
.
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
-
1
})
minetest
.
remove_node
({
x
=
p_top
.
x
,
y
=
p_top
.
y
+
1
,
z
=
p_top
.
z
+
1
})
end
if
biome
.
spawn_replace_node
then
minetest
.
env
:
remove_node
(
pos
)
minetest
.
remove_node
(
pos
)
end
if
type
(
node_or_function_or_model
)
==
"table"
then
...
...
@@ -177,7 +177,7 @@ function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or
plantslib
:
dbg
(
"Executed that function in "
..
(
os.clock
()
-
t2
)
*
1000
..
"ms"
)
else
plantslib
:
dbg
(
"Add node: "
..
node_or_function_or_model
..
" at ("
..
dump
(
p_top
)
..
")"
)
minetest
.
env
:
add_node
(
p_top
,
{
name
=
node_or_function_or_model
})
minetest
.
add_node
(
p_top
,
{
name
=
node_or_function_or_model
})
end
end
else
...
...
@@ -225,8 +225,8 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
neighbors
=
biome
.
neighbors
,
action
=
function
(
pos
,
node
,
active_object_count
,
active_object_count_wider
)
local
p_top
=
{
x
=
pos
.
x
,
y
=
pos
.
y
+
1
,
z
=
pos
.
z
}
local
n_top
=
minetest
.
env
:
get_node
(
p_top
)
local
perlin1
=
minetest
.
env
:
get_perlin
(
biome
.
seed_diff
,
perlin_octaves
,
perlin_persistence
,
perlin_scale
)
local
n_top
=
minetest
.
get_node
(
p_top
)
local
perlin1
=
minetest
.
get_perlin
(
biome
.
seed_diff
,
perlin_octaves
,
perlin_persistence
,
perlin_scale
)
local
noise1
=
perlin1
:
get2d
({
x
=
p_top
.
x
,
y
=
p_top
.
z
})
local
noise2
=
plantslib
.
perlin_temperature
:
get2d
({
x
=
p_top
.
x
,
y
=
p_top
.
z
})
local
noise3
=
plantslib
.
perlin_humidity
:
get2d
({
x
=
p_top
.
x
+
150
,
y
=
p_top
.
z
+
50
})
...
...
@@ -236,13 +236,13 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
and
noise3
<=
biome
.
humidity_min
and
noise3
>=
biome
.
humidity_max
and
plantslib
:
is_node_loaded
(
p_top
)
then
local
n_light
=
minetest
.
env
:
get_node_light
(
p_top
,
nil
)
if
(
not
(
biome
.
avoid_nodes
and
biome
.
avoid_radius
)
or
not
minetest
.
env
:
find_node_near
(
p_top
,
biome
.
avoid_radius
+
math.random
(
-
1
.
5
,
2
),
biome
.
avoid_nodes
))
local
n_light
=
minetest
.
get_node_light
(
p_top
,
nil
)
if
(
not
(
biome
.
avoid_nodes
and
biome
.
avoid_radius
)
or
not
minetest
.
find_node_near
(
p_top
,
biome
.
avoid_radius
+
math.random
(
-
1
.
5
,
2
),
biome
.
avoid_nodes
))
and
n_light
>=
biome
.
light_min
and
n_light
<=
biome
.
light_max
and
(
not
(
biome
.
neighbors
and
biome
.
ncount
)
or
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
},
{
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
},
biome
.
neighbors
))
>
biome
.
ncount
)
and
(
not
(
biome
.
near_nodes
and
biome
.
near_nodes_count
and
biome
.
near_nodes_size
)
or
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
pos
.
x
-
biome
.
near_nodes_size
,
y
=
pos
.
y
-
biome
.
near_nodes_vertical
,
z
=
pos
.
z
-
biome
.
near_nodes_size
},
{
x
=
pos
.
x
+
biome
.
near_nodes_size
,
y
=
pos
.
y
+
biome
.
near_nodes_vertical
,
z
=
pos
.
z
+
biome
.
near_nodes_size
},
biome
.
near_nodes
))
>=
biome
.
near_nodes_count
)
and
(
not
(
biome
.
air_count
and
biome
.
air_size
)
or
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
p_top
.
x
-
biome
.
air_size
,
y
=
p_top
.
y
,
z
=
p_top
.
z
-
biome
.
air_size
},
{
x
=
p_top
.
x
+
biome
.
air_size
,
y
=
p_top
.
y
,
z
=
p_top
.
z
+
biome
.
air_size
},
"air"
))
>=
biome
.
air_count
)
and
(
not
(
biome
.
neighbors
and
biome
.
ncount
)
or
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
},
{
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
},
biome
.
neighbors
))
>
biome
.
ncount
)
and
(
not
(
biome
.
near_nodes
and
biome
.
near_nodes_count
and
biome
.
near_nodes_size
)
or
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
pos
.
x
-
biome
.
near_nodes_size
,
y
=
pos
.
y
-
biome
.
near_nodes_vertical
,
z
=
pos
.
z
-
biome
.
near_nodes_size
},
{
x
=
pos
.
x
+
biome
.
near_nodes_size
,
y
=
pos
.
y
+
biome
.
near_nodes_vertical
,
z
=
pos
.
z
+
biome
.
near_nodes_size
},
biome
.
near_nodes
))
>=
biome
.
near_nodes_count
)
and
(
not
(
biome
.
air_count
and
biome
.
air_size
)
or
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
p_top
.
x
-
biome
.
air_size
,
y
=
p_top
.
y
,
z
=
p_top
.
z
-
biome
.
air_size
},
{
x
=
p_top
.
x
+
biome
.
air_size
,
y
=
p_top
.
y
,
z
=
p_top
.
z
+
biome
.
air_size
},
"air"
))
>=
biome
.
air_count
)
and
pos
.
y
>=
biome
.
min_elevation
and
pos
.
y
<=
biome
.
max_elevation
then
...
...
@@ -250,12 +250,12 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
if
biome
.
alt_wallnode
and
walldir
then
if
n_top
.
name
==
"air"
then
plantslib
:
dbg
(
"Spawn: "
..
biome
.
alt_wallnode
..
" on top of ("
..
dump
(
pos
)
..
") against wall "
..
walldir
)
minetest
.
env
:
add_node
(
p_top
,
{
name
=
biome
.
alt_wallnode
,
param2
=
walldir
})
minetest
.
add_node
(
p_top
,
{
name
=
biome
.
alt_wallnode
,
param2
=
walldir
})
end
else
local
currentsurface
=
minetest
.
env
:
get_node
(
pos
).
name
local
currentsurface
=
minetest
.
get_node
(
pos
).
name
if
currentsurface
~=
"default:water_source"
or
(
currentsurface
==
"default:water_source"
and
table
.
getn
(
minetest
.
env
:
find_nodes_in_area
({
x
=
pos
.
x
,
y
=
pos
.
y
-
biome
.
depth_max
-
1
,
z
=
pos
.
z
},
{
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
},
{
"default:dirt"
,
"default:dirt_with_grass"
,
"default:sand"
}))
>
0
)
or
(
currentsurface
==
"default:water_source"
and
table
.
getn
(
minetest
.
find_nodes_in_area
({
x
=
pos
.
x
,
y
=
pos
.
y
-
biome
.
depth_max
-
1
,
z
=
pos
.
z
},
{
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
},
{
"default:dirt"
,
"default:dirt_with_grass"
,
"default:sand"
}))
>
0
)
then
local
rnd
=
math.random
(
1
,
biome
.
spawn_plants_count
)
local
plant_to_spawn
=
biome
.
spawn_plants
[
rnd
]
...
...
@@ -271,23 +271,23 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
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
plantslib
:
dbg
(
"Spawn: "
..
plant_to_spawn
..
" on top of ("
..
dump
(
pos
)
..
"); facedir="
..
fdir
)
minetest
.
env
:
add_node
(
p_top
,
{
name
=
plant_to_spawn
,
param2
=
fdir
})
minetest
.
add_node
(
p_top
,
{
name
=
plant_to_spawn
,
param2
=
fdir
})
end
elseif
biome
.
spawn_replace_node
then
plantslib
:
dbg
(
"Spawn: "
..
plant_to_spawn
..
" to replace "
..
minetest
.
env
:
get_node
(
pos
).
name
..
" at ("
..
dump
(
pos
)
..
")"
)
minetest
.
env
:
add_node
(
pos
,
{
name
=
plant_to_spawn
,
param2
=
fdir
})
plantslib
:
dbg
(
"Spawn: "
..
plant_to_spawn
..
" to replace "
..
minetest
.
get_node
(
pos
).
name
..
" at ("
..
dump
(
pos
)
..
")"
)
minetest
.
add_node
(
pos
,
{
name
=
plant_to_spawn
,
param2
=
fdir
})
elseif
biome
.
spawn_on_side
then
local
onside
=
plantslib
:
find_open_side
(
pos
)
if
onside
then
plantslib
:
dbg
(
"Spawn: "
..
plant_to_spawn
..
" at side of ("
..
dump
(
pos
)
..
"), facedir "
..
onside
.
facedir
..
""
)
minetest
.
env
:
add_node
(
onside
.
newpos
,
{
name
=
plant_to_spawn
,
param2
=
onside
.
facedir
})
minetest
.
add_node
(
onside
.
newpos
,
{
name
=
plant_to_spawn
,
param2
=
onside
.
facedir
})
end
elseif
biome
.
spawn_on_bottom
then
if
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
==
"air"
then
if
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}).
name
==
"air"
then
plantslib
:
dbg
(
"Spawn: "
..
plant_to_spawn
..
" on bottom of ("
..
dump
(
pos
)
..
")"
)
minetest
.
env
:
add_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
},
{
name
=
plant_to_spawn
,
param2
=
fdir
}
)
minetest
.
add_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
},
{
name
=
plant_to_spawn
,
param2
=
fdir
}
)
end
end
end
...
...
@@ -319,9 +319,9 @@ function plantslib:grow_plants(opts)
action
=
function
(
pos
,
node
,
active_object_count
,
active_object_count_wider
)
local
p_top
=
{
x
=
pos
.
x
,
y
=
pos
.
y
+
1
,
z
=
pos
.
z
}
local
p_bot
=
{
x
=
pos
.
x
,
y
=
pos
.
y
-
1
,
z
=
pos
.
z
}
local
n_top
=
minetest
.
env
:
get_node
(
p_top
)
local
n_bot
=
minetest
.
env
:
get_node
(
p_bot
)
local
root_node
=
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
options
.
height_limit
,
z
=
pos
.
z
})
local
n_top
=
minetest
.
get_node
(
p_top
)
local
n_bot
=
minetest
.
get_node
(
p_bot
)
local
root_node
=
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
options
.
height_limit
,
z
=
pos
.
z
})
local
walldir
=
nil
if
options
.
need_wall
and
options
.
verticals_list
then
walldir
=
plantslib
:
find_adjacent_wall
(
p_top
,
options
.
verticals_list
)
...
...
@@ -332,17 +332,17 @@ function plantslib:grow_plants(opts)
-- to dry shrub in desert
if
n_bot
.
name
==
options
.
dry_early_node
and
options
.
grow_plant
==
"junglegrass:short"
then
plantslib
:
dbg
(
"Die: "
..
options
.
grow_plant
..
" becomes default:dry_shrub at ("
..
dump
(
pos
)
..
")"
)
minetest
.
env
:
add_node
(
pos
,
{
name
=
"default:dry_shrub"
})
minetest
.
add_node
(
pos
,
{
name
=
"default:dry_shrub"
})
elseif
options
.
grow_vertically
and
walldir
then
if
plantslib
:
search_downward
(
pos
,
options
.
height_limit
,
options
.
ground_nodes
)
then
plantslib
:
dbg
(
"Grow "
..
options
.
grow_plant
..
" vertically to "
..
dump
(
p_top
))
minetest
.
env
:
add_node
(
p_top
,
{
name
=
options
.
grow_plant
,
param2
=
walldir
})
minetest
.
add_node
(
p_top
,
{
name
=
options
.
grow_plant
,
param2
=
walldir
})
end
elseif
not
options
.
grow_result
and
not
options
.
grow_function
then
plantslib
:
dbg
(
"Die: "
..
options
.
grow_plant
..
" at ("
..
dump
(
pos
)
..
")"
)
minetest
.
env
:
remove_node
(
pos
)
minetest
.
remove_node
(
pos
)
else
plantslib
:
replace_object
(
pos
,
options
.
grow_result
,
options
.
grow_function
,
options
.
facedir
,
options
.
seed_diff
)
...
...
@@ -360,11 +360,11 @@ function plantslib:replace_object(pos, replacement, grow_function, walldir, seed
plantslib
:
dbg
(
"replace_object called, growtype="
..
dump
(
grow_function
))
if
growtype
==
"table"
then
plantslib
:
dbg
(
"Grow: spawn tree at "
..
dump
(
pos
))
minetest
.
env
:
remove_node
(
pos
)
minetest
.
remove_node
(
pos
)
plantslib
:
grow_tree
(
pos
,
grow_function
)
return
elseif
growtype
==
"string"
then
local
perlin1
=
minetest
.
env
:
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
noise2
=
plantslib
.
perlin_temperature
:
get2d
({
x
=
pos
.
x
,
y
=
pos
.
z
})
plantslib
:
dbg
(
"Grow: call function "
..
grow_function
..
"("
..
dump_pos
(
pos
)
..
","
..
noise1
..
","
..
noise2
..
","
..
dump
(
walldir
)
..
")"
)
...
...
@@ -372,7 +372,7 @@ function plantslib:replace_object(pos, replacement, grow_function, walldir, seed
return
elseif
growtype
==
"nil"
then
plantslib
:
dbg
(
"Grow: place "
..
replacement
..
" at ("
..
dump
(
pos
)
..
") on wall "
..
dump
(
walldir
))
minetest
.
env
:
add_node
(
pos
,
{
name
=
replacement
,
param2
=
walldir
})
minetest
.
add_node
(
pos
,
{
name
=
replacement
,
param2
=
walldir
})
return
elseif
growtype
~=
"nil"
and
growtype
~=
"string"
and
growtype
~=
"table"
then
error
(
"Invalid grow function "
..
dump
(
grow_function
)
..
" used on object at ("
..
dump
(
pos
)
..
")"
)
...
...
@@ -384,10 +384,10 @@ end
function
plantslib
:
find_adjacent_wall
(
pos
,
verticals
)
local
verts
=
dump
(
verticals
)
if
string.find
(
verts
,
minetest
.
env
:
get_node
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
)
then
return
3
end
if
string.find
(
verts
,
minetest
.
env
:
get_node
({
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
)
then
return
2
end
if
string.find
(
verts
,
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
}).
name
)
then
return
5
end
if
string.find
(
verts
,
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
}).
name
)
then
return
4
end
if
string.find
(
verts
,
minetest
.
get_node
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
)
then
return
3
end
if
string.find
(
verts
,
minetest
.
get_node
({
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
)
then
return
2
end
if
string.find
(
verts
,
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
}).
name
)
then
return
5
end
if
string.find
(
verts
,
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
}).
name
)
then
return
4
end
return
nil
end
...
...
@@ -397,7 +397,7 @@ end
function
plantslib
:
search_downward
(
pos
,
heightlimit
,
ground
)
for
i
=
0
,
heightlimit
do
if
string.find
(
dump
(
ground
),
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
i
,
z
=
pos
.
z
}).
name
)
then
if
string.find
(
dump
(
ground
),
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
-
i
,
z
=
pos
.
z
}).
name
)
then
return
{
x
=
pos
.
x
,
y
=
pos
.
y
-
i
,
z
=
pos
.
z
}
end
end
...
...
@@ -405,16 +405,16 @@ function plantslib:search_downward(pos, heightlimit, ground)
end
function
plantslib
:
find_open_side
(
pos
)
if
minetest
.
env
:
get_node
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
==
"air"
then
if
minetest
.
get_node
({
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
==
"air"
then
return
{
newpos
=
{
x
=
pos
.
x
-
1
,
y
=
pos
.
y
,
z
=
pos
.
z
},
facedir
=
2
}
end
if
minetest
.
env
:
get_node
({
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
==
"air"
then
if
minetest
.
get_node
({
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
}).
name
==
"air"
then
return
{
newpos
=
{
x
=
pos
.
x
+
1
,
y
=
pos
.
y
,
z
=
pos
.
z
},
facedir
=
3
}
end
if
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
}).
name
==
"air"
then
if
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
}).
name
==
"air"
then
return
{
newpos
=
{
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
-
1
},
facedir
=
4
}
end
if
minetest
.
env
:
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
}).
name
==
"air"
then
if
minetest
.
get_node
({
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
}).
name
==
"air"
then
return
{
newpos
=
{
x
=
pos
.
x
,
y
=
pos
.
y
,
z
=
pos
.
z
+
1
},
facedir
=
5
}
end
return
nil
...
...
@@ -425,7 +425,7 @@ end
function
plantslib
:
generate_tree
(
pos
,
node_or_function_or_model
)
local
t
=
os.clock
()
minetest
.
env
:
spawn_tree
(
pos
,
node_or_function_or_model
)
minetest
.
spawn_tree
(
pos
,
node_or_function_or_model
)
plantslib
:
dbg
(
"Generated one tree in "
..
(
os.clock
()
-
t
)
*
1000
..
"ms"
)
end
...
...
@@ -433,7 +433,7 @@ end
function
plantslib
:
grow_tree
(
pos
,
node_or_function_or_model
)
local
t
=
os.clock
()
minetest
.
env
:
spawn_tree
(
pos
,
node_or_function_or_model
)
minetest
.
spawn_tree
(
pos
,
node_or_function_or_model
)
plantslib
:
dbg
(
"Generated one tree in "
..
(
os.clock
()
-
t
)
*
1000
..
"ms"
)
end
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment