make color of the flag item configurable

Only changes the look of the item.

Original intention was to use dye to change colors (craft from
different colored wool, etc), but probably not worth it.
This commit is contained in:
whosit 2023-07-02 13:32:17 +03:00
parent 6a4ab435ba
commit 92ecbd898a
2 changed files with 34 additions and 5 deletions

View File

@ -197,15 +197,28 @@ minetest.register_chatcommand(ANNOUNCE_COMMAND_NAME, {
local flag_dialog_context = {}
local function show_flag_config_dialog(itemstack, player)
local meta = itemstack:get_meta()
local formspec_head = "formspec_version[4]size[8,3]set_focus[close;]"
local formspec_head = "formspec_version[4]size[8,4]set_focus[close;]"
local message = meta:get_string("message") or "Flag point"
local field_message = ("field[0.5,0.6;7,0.8;message;Message;%s]"):format(minetest.formspec_escape(message))
local field_message = ("field[0.5,0.6;7,0.7;message;Message;%s]"):format(minetest.formspec_escape(message))
local color_str = meta:get_string("color_str")
if color_str == "" then
color_str = meta:get_string("color")
if color_str == "" then
-- probably an old flag, provide default color
color_str = "red"
end
end
-- strip alpha (it should never appear here anyway)
color_str = string.match(color_str, "#[0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F]") or color_str
local field_color = ("field[0.5,1.75;4,0.7;color;Color;%s]"):format(
minetest.formspec_escape(color_str))
minetest.show_formspec(player:get_player_name(), "waypoint_announce:flag_edit",
formspec_head ..
field_message ..
--field_color ..
"button_exit[0.5,1.7;3,0.8;save;save]" ..
"button_exit[4.5,1.7;3,0.8;close;close]")
field_color ..
--field_time .. -- TODO set time too? (within limits)
"button_exit[0.5,2.7;3,0.8;save;save]" ..
"button_exit[4.5,2.7;3,0.8;close;close]")
flag_dialog_context[player:get_player_name()] = itemstack
end
@ -214,6 +227,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "waypoint_announce:flag_edit" then
return
end
-- FIXME has same wielded item swapping problems as compass had
if fields.save or (fields.key_enter_field and fields.quit) then
local flag_item = flag_dialog_context[player:get_player_name()]
if not flag_item then
@ -228,6 +242,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local message = fields.message
meta:set_string("message", message)
if fields.color and #(fields.color) < 20 then
local colorstring = minetest.colorspec_to_colorstring(fields.color)
if colorstring then
-- strip alpha
colorstring = string.match(colorstring, "#[0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F]") or colorstring
meta:set_string("color", colorstring)
-- preserve original color name for editing
meta:set_string("color_str", fields.color)
end
-- else
-- -- something sus is going on, don't set it
-- meta:set_string("color_str", "")
end
local success = player:set_wielded_item(flag_item)
if not success then
-- no idea why this can happen

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 583 B