summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua91
1 files changed, 19 insertions, 72 deletions
diff --git a/init.lua b/init.lua
index 9ae56db..390c027 100644
--- a/init.lua
+++ b/init.lua
@@ -23,6 +23,8 @@ License along with this library
-- github.com/sofar
--
+local mprops = dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/nodes.lua")
+
local interval = 1.0
local count = 20
local radius = 100
@@ -284,47 +286,11 @@ local function sed()
local node = minetest.get_node(pos)
- -- check if we're material that we can do something with
- local hardness = 1.0
- local resistance = 1.0
-
- if node.name == "default:dirt" or
- node.name == "default:dirt_with_grass" or
- node.name == "default:dirt_with_grass_footsteps" or
- node.name == "default:dirt_with_snow" then
- -- default hardness (very soft) here
- elseif node.name == "default:sand" or node.name == "default:desert_sand" then
- -- sand is "hard" to break into clay, but moves easily
- hardness = 0.01
- elseif node.name == "default:gravel" then
- hardness = 0.15
- resistance = 0.70
- elseif node.name == "default:clay" then
- resistance = 0.3
- elseif node.name == "default:sandstone" or
- node.name == "default:cobble" or
- node.name == "default:mossycobble" or
- node.name == "default:desert_cobble" then
- hardness = 0.05
- resistance = 0.05
- elseif node.name == "default:desert_stone" or
- node.name == "default:stone" then
- hardness = 0.01
- resistance = 0.01
- elseif node.name == "default:stone_with_coal" or
- node.name == "default:stone_with_iron" or
- node.name == "default:stone_with_copper" or
- node.name == "default:stone_with_gold" or
- node.name == "default:stone_with_mese" or
- node.name == "default:stone_with_diamond" then
- hardness = 0.0001
- resistance = 0.01
- else
- -- we don't do anything with this node type
+ -- do we handle this material?
+ if not mprops[node.name] then
return
end
-
-- determine nearby water scaling
local waterfactor = 0.01
if underliquid > 0 then
@@ -349,7 +315,6 @@ local function sed()
return
end
-
-- displacement - before we erode this material, we check to see if
-- it's not easier to move the material first. If that fails, we'll
-- end up degrading the material as calculated
@@ -383,7 +348,7 @@ local function sed()
if lowest < pos.y then
local tpos = {x = pos.x + lowesto.x, y = lowest, z = pos.z + lowesto.z}
- if not roll(resistance) then
+ if not roll(mprops[node.name].r) then
local tnode = minetest.get_node(tpos)
if node_is_valid_target_for_displacement(tpos) then
@@ -430,45 +395,27 @@ local function sed()
end
end
- if roll(hardness) then
+ if roll(mprops[node.name].h) then
return
end
-- finally, determine new material type
local newmat = "air"
- if node.name == "default:dirt" then
- local fpos = minetest.find_node_near(pos, 2, "default:desert_sand")
- if not fpos then
- newmat = "default:sand"
- else
- newmat = "default:desert_sand"
+ if table.getn(mprops[node.name].t) > 1 then
+ -- multiple possibilities, scan area around for best suitable type
+ for i = table.getn(mprops[node.name].t), 2, -1 do
+ local fpos = minetest.find_node_near(pos, 5, mprops[node.name].t[i])
+ if fpos then
+ newmat = mprops[node.name].t[i]
+ break
+ end
end
- elseif node.name == "default:dirt_with_grass" or
- node.name == "default:dirt_with_grass_footsteps" or
- node.name == "default:dirt_with_snow" then
- newmat = "default:dirt"
- elseif node.name == "default:sand" or node.name == "default:desert_sand" then
- newmat = "default:clay"
- elseif node.name == "default:gravel" then
- newmat = "default:dirt"
- elseif node.name == "default:clay" then
- return
- elseif node.name == "default:sandstone" or
- node.name == "default:cobble" or
- node.name == "default:mossycobble" or
- node.name == "default:desert_cobble" then
- newmat = "default:gravel"
- elseif node.name == "default:desert_stone" or
- node.name == "default:stone" then
- newmat = "default:cobble"
- elseif node.name == "default:stone_with_coal" or
- node.name == "default:stone_with_iron" or
- node.name == "default:stone_with_copper" or
- node.name == "default:stone_with_gold" or
- node.name == "default:stone_with_mese" or
- node.name == "default:stone_with_diamond" then
- newmat = "default:stone"
+ if newmat == "air" then
+ newmat = mprops[node.name].t[1]
+ end
+ else
+ newmat = mprops[node.name].t[1]
end
minetest.set_node(pos, {name = newmat})