pick_and_place-cd2025/handle_node.lua
Buckaroo Banzai 6020a94ccf
recording and playback support (#3)
* recording and playback support

* wip

* wip

---------

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2024-03-07 19:41:01 +01:00

63 lines
1.6 KiB
Lua

-- returns the absolute positions and name for the handle
-- TODO: a better name perhaps?
function pick_and_place.get_template_data_from_handle(pos)
local meta = minetest.get_meta(pos)
-- relative positions
local rel_pos1 = minetest.string_to_pos(meta:get_string("pos1"))
local rel_pos2 = minetest.string_to_pos(meta:get_string("pos2"))
local name = meta:get_string("name")
if not rel_pos1 or not rel_pos2 then
-- not configured
return
end
-- absolute positions
local pos1 = vector.add(pos, rel_pos1)
local pos2 = vector.add(pos, rel_pos2)
return pos1, pos2, name
end
local function on_rightclick(pos, _, _, itemstack)
if not itemstack:is_empty() then
-- not an empty hand
return
end
local pos1, pos2, name = pick_and_place.get_template_data_from_handle(pos)
if not pos1 or not pos2 then
return
end
return pick_and_place.create_tool(pos1, pos2, name)
end
minetest.register_node("pick_and_place:handle", {
description = "Pick and place handle",
tiles = {"pick_and_place.png"},
drawtype = "allfaces",
use_texture_alpha = "blend",
paramtype = "light",
sunlight_propagates = true,
on_rightclick = on_rightclick,
on_destruct = pick_and_place.remove_handles,
drop = "",
groups = {
oddly_breakable_by_hand = 3,
not_in_creative_inventory = 1
}
})
minetest.register_lbm({
label = "register pick-and-place handles",
name = "pick_and_place:handle_register",
nodenames = {"pick_and_place:handle"},
run_at_every_load = true,
action = function(pos)
local pos1, pos2, name = pick_and_place.get_template_data_from_handle(pos)
pick_and_place.register_template(name, pos1, pos2)
end
})