pick_and_place-cd2025/configure_tool.lua
Buckaroo Banzai 9cd093046d
schematic rotation (#1)
* schematic rotation

* fixes

* remove auto-rotation code

* schematic encoding v2

* testing

* working encode/decode

* rotate schematic

* spec

* rotate dialog

* skip if rotation == 0

* wip

* wip

* wip

* fix order

* fix metadata rotation

---------

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2024-02-29 13:15:18 +01:00

71 lines
2.1 KiB
Lua

local FORMSPEC_NAME = "pick_and_place:configure"
-- playername -> pos (if pos1 selected)
local pos1 = {}
-- playername -> pos (if pos2 selected)
local pos2 = {}
minetest.register_tool("pick_and_place:configure", {
description = "Placement configuration tool",
inventory_image = "pick_and_place.png^[colorize:#ffffff",
stack_max = 1,
range = 0,
on_use = function(_, player)
local playername = player:get_player_name()
local pointed_pos = pick_and_place.get_pointed_position(player)
if pos1[playername] then
-- second position selected
pos2[playername] = pointed_pos
-- show name input
minetest.show_formspec(playername, FORMSPEC_NAME, [[
size[10,1]
real_coordinates[true]
field[0.1,0.1;7,0.8;name;Name;]
button_exit[7.1,0.1;2.5,0.8;save;Save]
]])
else
-- first position selected
pos1[playername] = pointed_pos
end
end,
on_secondary_use = function(_, player)
local playername = player:get_player_name()
pos1[playername] = nil
end,
on_step = function(_, player)
local playername = player:get_player_name()
local pointed_pos = pick_and_place.get_pointed_position(player)
-- update preview
pick_and_place.show_preview(playername, "pick_and_place.png", "#ffffff", pointed_pos, pos1[playername])
end,
on_deselect = function(_, player)
local playername = player:get_player_name()
pick_and_place.clear_preview(playername)
end
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= FORMSPEC_NAME then
return false
end
if not fields.save and not fields.key_enter_field then
return true
end
local playername = player:get_player_name()
if not pos1[playername] or not pos2[playername] then
return true
end
-- configure and unmark
pick_and_place.configure(pos1[playername], pos2[playername], fields.name)
pos1[playername] = nil
pos2[playername] = nil
return true
end)