dim-out the user's color choice in the color selector

and reject it on clicking "Accept",
if they went to "Show All" to select a color,
but then went back to "Show Avail" before clicking Accept.

(i.e. only accept what's shown as available to click on)
This commit is contained in:
Vanessa Dannenberg 2018-09-08 10:05:13 -04:00
parent fc199cced4
commit 0589d8f02e

@ -867,7 +867,7 @@ function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative,
if dye == painting_with then if dye == painting_with then
overlay = "^unifieddyes_select_overlay.png" overlay = "^unifieddyes_select_overlay.png"
selindic = "unifieddyes_white_square.png"..colorize..overlay.."]".. selindic = "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..
"tooltip["..colorname..";"..colorname.."]" "tooltip["..colorname..";"..colorname.."]"
end end
@ -1082,10 +1082,23 @@ minetest.register_craft( {
minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
print(dump(fields))
if formname == "unifieddyes:dye_select_form" then if formname == "unifieddyes:dye_select_form" then
local player_name = player:get_player_name() local player_name = player:get_player_name()
local nodepalette = "extended"
local showall = unifieddyes.player_showall[player_name]
local last_right_click = unifieddyes.player_last_right_clicked[player_name]
if last_right_click and last_right_click.def then
if last_right_click.def.palette then
if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then
nodepalette = "wallmounted"
elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" then
nodepalette = "old89"
end
end
end
if fields.show_all then if fields.show_all then
unifieddyes.player_showall[player_name] = true unifieddyes.player_showall[player_name] = true
unifieddyes.show_airbrush_form(player) unifieddyes.show_airbrush_form(player)
@ -1100,11 +1113,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if not dye then if not dye then
minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but no color was selected!") minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but no color was selected!")
return return
end elseif not showall
unifieddyes.player_current_dye[player_name] = dye and not unifieddyes.palette_has_color[nodepalette.."_"..string.sub(dye, 5)] then
unifieddyes.player_selected_dye[player_name] = nil minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but the selected color can't be used on the")
minetest.chat_send_player(player_name, "*** node that was right-clicked (and \"Show All\" wasn't in effect).")
if unifieddyes.player_current_dye[player_name] then
minetest.chat_send_player(player_name, "*** Ignoring it and sticking with "..string.sub(unifieddyes.player_current_dye[player_name], 5)..".")
else
minetest.chat_send_player(player_name, "*** Ignoring it.")
end
return
else
unifieddyes.player_current_dye[player_name] = dye
unifieddyes.player_selected_dye[player_name] = nil
minetest.chat_send_player(player_name, "*** Selected "..string.sub(dye, 5).." for the airbrush.") minetest.chat_send_player(player_name, "*** Selected "..string.sub(dye, 5).." for the airbrush.")
return return
end
else -- assume "Cancel" or Esc. else -- assume "Cancel" or Esc.
unifieddyes.player_selected_dye[player_name] = nil unifieddyes.player_selected_dye[player_name] = nil
return return
@ -1117,20 +1141,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local creative = creative and creative.is_enabled_for(player_name) local creative = creative and creative.is_enabled_for(player_name)
local dye = "dye:"..s3 local dye = "dye:"..s3
local nodepalette = "extended"
local showall = unifieddyes.player_showall[player_name]
local last_right_click = unifieddyes.player_last_right_clicked[player_name]
if last_right_click and last_right_click.def then
if last_right_click.def.palette then
if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then
nodepalette = "wallmounted"
elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" then
nodepalette = "old89"
end
end
end
if (showall or unifieddyes.palette_has_color[nodepalette.."_"..s3]) and if (showall or unifieddyes.palette_has_color[nodepalette.."_"..s3]) and
(minetest.registered_items[dye] and (creative or inv:contains_item("main", dye))) then (minetest.registered_items[dye] and (creative or inv:contains_item("main", dye))) then
unifieddyes.player_selected_dye[player_name] = dye unifieddyes.player_selected_dye[player_name] = dye