Genericize sand-raking API, add gravel support
This commit is contained in:
parent
84bdd1d57a
commit
43d1b6df2f
@ -1,84 +1,96 @@
|
|||||||
-- LUALOCALS < ---------------------------------------------------------
|
-- LUALOCALS < ---------------------------------------------------------
|
||||||
local math, minetest, nodecore, vector
|
local math, minetest, nodecore, string, vector
|
||||||
= math, minetest, nodecore, vector
|
= math, minetest, nodecore, string, vector
|
||||||
local math_pi
|
local math_pi, string_gsub, string_lower
|
||||||
= math.pi
|
= math.pi, string.gsub, string.lower
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
-- LUALOCALS > ---------------------------------------------------------
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
local modname = minetest.get_current_modname()
|
||||||
|
|
||||||
local sandname = "nc_terrain:sand"
|
function nodecore.register_raked(basename, desc, recipematch, recipeidx)
|
||||||
local sanddef = minetest.registered_items[sandname] or {}
|
local name = string_gsub(string_lower(desc), "%W", "_")
|
||||||
local basedef = {
|
local basedef = minetest.registered_items[basename] or {}
|
||||||
description = "Raked Sand",
|
local commondef = {
|
||||||
paramtype2 = "facedir",
|
description = "Raked " .. desc,
|
||||||
falling_replacement = sandname,
|
paramtype2 = "facedir",
|
||||||
silktouch_as = sandname,
|
falling_replacement = basename,
|
||||||
on_door_conveyed = function(pos)
|
silktouch_as = basename,
|
||||||
return minetest.set_node(pos, {name = sandname})
|
on_door_conveyed = function(pos)
|
||||||
end
|
return minetest.set_node(pos, {name = basename})
|
||||||
}
|
|
||||||
minetest.register_node(modname .. ":sand_raked",
|
|
||||||
nodecore.underride({
|
|
||||||
tiles = {
|
|
||||||
sanddef.tiles[1] .. "^" .. modname
|
|
||||||
.. "_raking_linear.png",
|
|
||||||
sanddef.tiles[1],
|
|
||||||
sanddef.tiles[1] .. "^" .. modname
|
|
||||||
.. "_raking_side.png"
|
|
||||||
},
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
return minetest.rotate_and_place(
|
|
||||||
itemstack, placer, pointed_thing,
|
|
||||||
false, {force_floor = true})
|
|
||||||
end
|
|
||||||
}, basedef, sanddef))
|
|
||||||
minetest.register_node(modname .. ":sand_raked_nexus",
|
|
||||||
nodecore.underride({
|
|
||||||
tiles = {
|
|
||||||
sanddef.tiles[1] .. "^" .. modname
|
|
||||||
.. "_raking_nexus.png",
|
|
||||||
sanddef.tiles[1],
|
|
||||||
sanddef.tiles[1] .. "^" .. modname
|
|
||||||
.. "_raking_side.png"
|
|
||||||
}
|
|
||||||
}, basedef, sanddef))
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "rake sand",
|
|
||||||
action = "pummel",
|
|
||||||
wield = {groups = {rakey = true}},
|
|
||||||
duration = 0.5,
|
|
||||||
normal = {y = 1},
|
|
||||||
indexkeys = {"group:sand"},
|
|
||||||
nodes = {{match = {groups = {sand = true, falling_repose = false}}}},
|
|
||||||
after = function(pos, data)
|
|
||||||
if not (data.crafter and data.crafter.getpos
|
|
||||||
and data.crafter.get_look_horizontal) then return end
|
|
||||||
|
|
||||||
local newnode
|
|
||||||
local ppos = data.crafter:get_pos()
|
|
||||||
ppos.y = pos.y
|
|
||||||
if vector.distance(pos, ppos) < 0.4 then
|
|
||||||
newnode = {
|
|
||||||
name = modname .. ":sand_raked_nexus",
|
|
||||||
param2 = 0
|
|
||||||
}
|
|
||||||
else
|
|
||||||
local dir = data.crafter:get_look_horizontal()
|
|
||||||
while dir >= math_pi * 3/4 do dir = dir - math_pi end
|
|
||||||
dir = minetest.yaw_to_dir(dir + math_pi / 4)
|
|
||||||
newnode = {
|
|
||||||
name = modname .. ":sand_raked",
|
|
||||||
param2 = minetest.dir_to_facedir(dir)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local node = data.node or minetest.get_node(pos)
|
|
||||||
if node.name == newnode.name and node.param2 == newnode.param2 then
|
|
||||||
newnode = {name = sandname}
|
|
||||||
end
|
|
||||||
nodecore.wear_wield(data.crafter, {snappy = 1}, 1)
|
|
||||||
return nodecore.set_loud(pos, newnode)
|
|
||||||
end
|
end
|
||||||
})
|
}
|
||||||
|
local linearname = modname .. ":" .. name .. "_raked"
|
||||||
|
minetest.register_node(linearname,
|
||||||
|
nodecore.underride({
|
||||||
|
tiles = {
|
||||||
|
basedef.tiles[1] .. "^" .. modname
|
||||||
|
.. "_raking_linear.png",
|
||||||
|
basedef.tiles[1],
|
||||||
|
basedef.tiles[1] .. "^" .. modname
|
||||||
|
.. "_raking_side.png"
|
||||||
|
},
|
||||||
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
return minetest.rotate_and_place(
|
||||||
|
itemstack, placer, pointed_thing,
|
||||||
|
false, {force_floor = true})
|
||||||
|
end
|
||||||
|
}, commondef, basedef))
|
||||||
|
|
||||||
|
local nexusname = modname .. ":" .. name .. "_raked_nexus"
|
||||||
|
minetest.register_node(nexusname,
|
||||||
|
nodecore.underride({
|
||||||
|
tiles = {
|
||||||
|
basedef.tiles[1] .. "^" .. modname
|
||||||
|
.. "_raking_nexus.png",
|
||||||
|
basedef.tiles[1],
|
||||||
|
basedef.tiles[1] .. "^" .. modname
|
||||||
|
.. "_raking_side.png"
|
||||||
|
}
|
||||||
|
}, commondef, basedef))
|
||||||
|
|
||||||
|
nodecore.register_craft({
|
||||||
|
label = "rake " .. name,
|
||||||
|
action = "pummel",
|
||||||
|
wield = {groups = {rakey = true}},
|
||||||
|
duration = 0.5,
|
||||||
|
normal = {y = 1},
|
||||||
|
indexkeys = recipeidx,
|
||||||
|
nodes = {{match = recipematch}},
|
||||||
|
after = function(pos, data)
|
||||||
|
if not (data.crafter and data.crafter.getpos
|
||||||
|
and data.crafter.get_look_horizontal) then return end
|
||||||
|
|
||||||
|
local newnode
|
||||||
|
local ppos = data.crafter:get_pos()
|
||||||
|
ppos.y = pos.y
|
||||||
|
if vector.distance(pos, ppos) < 0.4 then
|
||||||
|
newnode = {
|
||||||
|
name = nexusname,
|
||||||
|
param2 = 0
|
||||||
|
}
|
||||||
|
else
|
||||||
|
local dir = data.crafter:get_look_horizontal()
|
||||||
|
while dir >= math_pi * 3/4 do dir = dir - math_pi end
|
||||||
|
dir = minetest.yaw_to_dir(dir + math_pi / 4)
|
||||||
|
newnode = {
|
||||||
|
name = linearname,
|
||||||
|
param2 = minetest.dir_to_facedir(dir)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local node = data.node or minetest.get_node(pos)
|
||||||
|
if node.name == newnode.name and node.param2 == newnode.param2 then
|
||||||
|
newnode = {name = basename}
|
||||||
|
end
|
||||||
|
nodecore.wear_wield(data.crafter, {snappy = 1}, 1)
|
||||||
|
return nodecore.set_loud(pos, newnode)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
nodecore.register_raked("nc_terrain:sand", "Sand",
|
||||||
|
{groups = {sand = true, falling_repose = false}},
|
||||||
|
{"group:sand"})
|
||||||
|
nodecore.register_raked("nc_terrain:gravel", "Gravel",
|
||||||
|
{groups = {gravel = true, falling_repose = false}},
|
||||||
|
{"group:gravel"})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user