From 1fa07b17d719f4937aac73a544c8569ab35fd94a Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 30 Aug 2019 20:32:36 +0200 Subject: [PATCH] Add button to toggle crafting guide mode --- mods/crafting/api.lua | 29 ++++++++++++++++++++++++++--- mods/crafting/locale/crafting.de.tr | 3 +++ mods/crafting/locale/template.txt | 3 +++ mods/default/formspec.lua | 27 ++++++++++++++++++++++++--- 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 mods/crafting/locale/crafting.de.tr create mode 100644 mods/crafting/locale/template.txt diff --git a/mods/crafting/api.lua b/mods/crafting/api.lua index bcee456..be753aa 100644 --- a/mods/crafting/api.lua +++ b/mods/crafting/api.lua @@ -1,5 +1,9 @@ local S = minetest.get_translator("crafting") +-- Crafting menu display modes +local MODE_CRAFTABLE = 1 -- crafting guide mode, show all recipes (default) +local MODE_GUIDE = 2 -- craftable mode, only show recipes craftable from input slots + -- -- API -- @@ -275,6 +279,7 @@ form = form .. "listring[current_player;craft_out]" form = form .. default.ui.get_itemslot_bg(0.25, 0.25, 1, 4) form = form .. default.ui.get_itemslot_bg(7.25, 3.25, 1, 1) +form = form .. default.ui.button(1.25, 3.25, 1.0, 1.0, "toggle_filter", S("T"), nil, S("Show all recipes/show only craftable recipes")) form = form .. default.ui.button(7.25, 1.25, 1, 1, "do_craft_1", "1") form = form .. default.ui.button(7.25, 2.25, 1, 1, "do_craft_10", "10") @@ -294,7 +299,12 @@ function crafting.get_formspec(name) local craft_list = "" - local craftitems = crafting.get_crafts(inv) + local craftitems + if crafting.userdata[name] and crafting.userdata[name].mode == MODE_GUIDE then + craftitems = crafting.get_crafts() + else + craftitems = crafting.get_crafts(inv) + end local selected_craftdef = nil @@ -409,7 +419,12 @@ local function on_player_receive_fields(player, form_name, fields) end do_craft_10 = fields.do_craft_10 ~= nil if do_craft_1 or do_craft_10 then - local craftitems = crafting.get_crafts(inv) + local craftitems + if crafting.userdata[name] and crafting.userdata[name].mode == MODE_GUIDE then + craftitems = crafting.get_crafts() + else + craftitems = crafting.get_crafts(inv) + end local wanted_itemstack = ItemStack(craftitems[crafting.userdata[name].row]) local output_itemstack = inv:get_stack("craft_out", 1) @@ -456,6 +471,14 @@ local function on_player_receive_fields(player, form_name, fields) minetest.show_formspec(name, "crafting:crafting", crafting.get_formspec(name, crafting.userdata[name].row)) end + elseif fields.toggle_filter then + if crafting.userdata[name].mode == MODE_GUIDE then + crafting.userdata[name].mode = MODE_CRAFTABLE + else + crafting.userdata[name].mode = MODE_GUIDE + end + minetest.show_formspec(name, "crafting:crafting", + crafting.get_formspec(name, crafting.userdata[name].row)) end player:set_inventory_formspec(crafting.get_formspec(name)) @@ -486,7 +509,7 @@ local function on_joinplayer(player) local inv = player:get_inventory() if crafting.userdata[name] == nil then - crafting.userdata[name] = {row = 1} + crafting.userdata[name] = {row = 1, mode = MODE_CRAFTABLE} end if inv:get_size("craft_in") ~= 4 then diff --git a/mods/crafting/locale/crafting.de.tr b/mods/crafting/locale/crafting.de.tr new file mode 100644 index 0000000..7f35109 --- /dev/null +++ b/mods/crafting/locale/crafting.de.tr @@ -0,0 +1,3 @@ +# textdomain:crafting +T=U +Show all recipes/show only craftable recipes=Alle Rezepte zeigen/nur mögliche Rezepte zeigen diff --git a/mods/crafting/locale/template.txt b/mods/crafting/locale/template.txt new file mode 100644 index 0000000..8833729 --- /dev/null +++ b/mods/crafting/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain:crafting +T= +Show all recipes/show only craftable recipes= diff --git a/mods/default/formspec.lua b/mods/default/formspec.lua index 9d5bc40..232d18e 100644 --- a/mods/default/formspec.lua +++ b/mods/default/formspec.lua @@ -59,50 +59,71 @@ end -- Buttons -function default.ui.image_button(x, y, w, h, name, image) +function default.ui.image_button(x, y, w, h, name, image, tooltip) local image = minetest.formspec_escape(image) + local tt = "" + if tooltip then + tt = "tooltip["..name..";"..minetest.formspec_escape(tooltip).."]" + end + return "image_button["..x..","..y..";"..w..","..h..";" ..image..";"..name..";;;false;"..image.."]" + ..tt end -function default.ui.button(x, y, w, h, name, label, noclip) +function default.ui.button(x, y, w, h, name, label, noclip, tooltip) local nc = "false" if noclip then nc = "true" end + local tt = "" + if tooltip then + tt = "tooltip["..name..";"..minetest.formspec_escape(tooltip).."]" + end + if w == 1 then return "image_button["..x..","..y..";"..w..","..h ..";ui_button_1w_inactive.png;"..name..";"..minetest.formspec_escape(label)..";" ..nc..";false;ui_button_1w_active.png]" + ..tt elseif w == 2 then return "image_button["..x..","..y..";"..w..","..h ..";ui_button_2w_inactive.png;"..name..";"..minetest.formspec_escape(label)..";" ..nc..";false;ui_button_2w_active.png]" + ..tt else return "image_button["..x..","..y..";"..w..","..h ..";ui_button_3w_inactive.png;"..name..";"..minetest.formspec_escape(label)..";" ..nc..";false;ui_button_3w_active.png]" + ..tt end end -function default.ui.button_exit(x, y, w, h, name, label, noclip) +function default.ui.button_exit(x, y, w, h, name, label, noclip, tooltip) local nc = "false" if noclip then nc = "true" end + local tt = "" + if tooltip then + tt = "tooltip["..name..";"..minetest.formspec_escape(tooltip).."]" + end + if w == 2 then return "image_button_exit["..x..","..y..";"..w..","..h ..";ui_button_2w_inactive.png;"..name..";"..minetest.formspec_escape(label)..";" ..nc..";false;ui_button_2w_active.png]" + ..tt else return "image_button_exit["..x..","..y..";"..w..","..h ..";ui_button_3w_inactive.png;"..name..";"..minetest.formspec_escape(label)..";" ..nc..";false;ui_button_3w_active.png]" + ..tt end end