From b24411b189dcd25f344ae419ebb02448f5aeddfd Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Sat, 26 Jun 2021 04:40:57 +0200 Subject: [PATCH] Add tabs to item list --- etc/styles.lua | 2 + init.lua | 88 +++++++++++++++++++++----------- textures/i3_tab_small.png | Bin 0 -> 5721 bytes textures/i3_tab_small_hover.png | Bin 0 -> 16963 bytes 4 files changed, 61 insertions(+), 29 deletions(-) create mode 100644 textures/i3_tab_small.png create mode 100644 textures/i3_tab_small_hover.png diff --git a/etc/styles.lua b/etc/styles.lua index 052a27e..da91599 100644 --- a/etc/styles.lua +++ b/etc/styles.lua @@ -24,6 +24,7 @@ local PNG = { export = "i3_export.png", slot = "i3_slot.png", tab = "i3_tab.png", + tab_small = "i3_tab_small.png", tab_top = "i3_tab.png^\\[transformFY", furnace_anim = "i3_furnace_anim.png", bag = "i3_bag.png", @@ -48,6 +49,7 @@ local PNG = { prev_hover = "i3_next_hover.png^\\[transformFX", next_hover = "i3_next_hover.png", tab_hover = "i3_tab_hover.png", + tab_small_hover = "i3_tab_small_hover.png", tab_hover_top = "i3_tab_hover.png^\\[transformFY", bag_hover = "i3_bag_hover.png", armor_hover = "i3_armor_hover.png", diff --git a/init.lua b/init.lua index ba29987..587bfeb 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,6 @@ local pdata = dslz(storage:get_string "pdata") or {} -- Caches local init_items = {} -local searches = {} local recipes_cache = {} local usages_cache = {} local fuel_cache = {} @@ -571,17 +570,15 @@ local function show_item(def) def.description and def.description ~= "" end -local function search(data) +local function reset_compression(data) data.alt_items = nil data.expand = "" +end + +local function search(data) + reset_compression(data) local filter = data.filter - - if searches[filter] then - data.items = searches[filter] - return - end - local opt = "^(.-)%+([%w_]+)=([%w_,]+)" local search_filter = next(search_filters) and match(filter, opt) local filters = {} @@ -629,16 +626,36 @@ local function search(data) end end - if not next(recipe_filters) then - -- Cache the results only if searched 2 times - if searches[filter] == nil then - searches[filter] = false - else - searches[filter] = filtered_list + data.items = filtered_list +end + +local function sort_by_category(data) + reset_compression(data) + local items = copy(data.items_raw) + + if data.filter ~= "" then + search(data) + items = copy(data.items) + end + + local new = {} + + for i = 1, #items do + local item = items[i] + local to_add = true + + if data.current_itab == 2 then + to_add = reg_nodes[item] + elseif data.current_itab == 3 then + to_add = reg_craftitems[item] or reg_tools[item] + end + + if to_add then + new[#new + 1] = item end end - data.items = filtered_list + data.items = new end local function get_item_usages(item, recipe, added) @@ -1661,7 +1678,7 @@ local function get_rcp_extra(player, fs, data, panel, is_recipe, is_usage) fs("container_end[]") end -local function get_items_fs(fs, data, extend) +local function get_items_fs(fs, data, full_height) if compression_active(data) then local new = {} @@ -1676,8 +1693,7 @@ local function get_items_fs(fs, data, extend) end local items = data.alt_items or data.items - local rows = 8 - local lines = extend and 12 or 9 + local rows, lines = 8, 12 local ipp = rows * lines local size = 0.85 @@ -1718,7 +1734,7 @@ local function get_items_fs(fs, data, extend) X = X - (X * 0.045) + data.inv_width + 0.28 local Y = round((i % ipp - X) / rows + 1, 0) - Y = Y - (Y * (extend and 0.085 or 0.035)) + 0.95 + Y = Y - (Y * 0.085) + 0.95 fs[#fs + 1] = fmt("item_image_button", X, Y, size, size, name, item, "") @@ -1732,6 +1748,22 @@ local function get_items_fs(fs, data, extend) end end end + + local _tabs = {"All", "Nodes", "Items"} + local tab_len, tab_hgh = 1.8, 0.5 + + for i, title in ipairs(_tabs) do + local selected = i == data.current_itab + + fs(fmt([[style_type[image_button;fgimg=%s;fgimg_hovered=%s;noclip=true; + font_size=16;textcolor=%s;content_offset=0;sound=i3_tab] ]], + selected and PNG.tab_small_hover or PNG.tab_small, + PNG.tab_small_hover, selected and "#fff" or "#ddd")) + + fs("style_type[image_button:hovered;textcolor=#fff]") + fs("image_button", (data.inv_width - 0.65) + (i * (tab_len + 0.1)), + full_height, tab_len, tab_hgh, "", fmt("itab_%u", i), title) + end end local function get_favs(fs, data) @@ -1753,21 +1785,15 @@ end local function get_panels(player, data, fs, full_height) local _title = {name = "title", height = 1.4} local _favs = {name = "favs", height = 2.23} - local _items = {name = "items", height = 9.69} + local _items = {name = "items", height = full_height} local _recipes = {name = "recipes", rcp = data.recipes, height = 4.045} local _usages = {name = "usages", rcp = data.usages, height = 4.045} - local panels, extend + local panels if data.query_item then panels = {_title, _recipes, _usages, _favs} else - panels = {_items, _favs} - - if #data.favs == 0 then - extend = true - remove(panels, 2) - _items.height = full_height - end + panels = {_items} end for idx = 1, #panels do @@ -1787,7 +1813,7 @@ local function get_panels(player, data, fs, full_height) if is_recipe or is_usage then get_rcp_extra(player, fs, data, panel, is_recipe, is_usage) elseif panel.name == "items" then - get_items_fs(fs, data, extend) + get_items_fs(fs, data, full_height) elseif panel.name == "title" then get_header(fs, data) elseif panel.name == "favs" then @@ -2251,6 +2277,7 @@ local function init_data(player, info) data.favs = {} data.export_counts = {} data.current_tab = 1 + data.current_itab = 1 data.subcat = 1 data.scrbar_inv = 0 data.lang_code = get_lang_code(info) @@ -3035,6 +3062,9 @@ core.register_on_player_receive_fields(function(player, formname, fields) local tabname = sub(f, 5) set_tab(player, tabname) break + elseif sub(f, 1, 5) == "itab_" then + data.current_itab = tonum(f:sub(-1)) + sort_by_category(data) end end diff --git a/textures/i3_tab_small.png b/textures/i3_tab_small.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2fc0b479c28a86ce03d3b3d22b29a6fc7af017 GIT binary patch literal 5721 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 literal 0 HcmV?d00001 diff --git a/textures/i3_tab_small_hover.png b/textures/i3_tab_small_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..102c027d80573f9df5e1711ea889d9e6a431509f GIT binary patch literal 16963 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
    !T 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 Fe*hz@MhXA` literal 0 HcmV?d00001