Complete minitabs API

This commit is contained in:
Jean-Patrick Guerrero
2023-01-19 16:40:31 +01:00
parent b95b179a5a
commit ac7a1fb746
5 changed files with 85 additions and 54 deletions

View File

@ -435,10 +435,41 @@ function i3.new_minitab(name, def)
if #i3.minitabs == 6 then
return err "i3.new_minitab: limit reached (6)"
elseif not true_str(name) then
return err "i3.new_minitab: minitab name missing"
return err "i3.new_minitab: name missing"
elseif not true_table(def) then
return err "i3.new_minitab: definition missing"
end
insert(i3.minitabs, {name = name, def = def})
end
function i3.remove_minitab(name)
if not true_str(name) then
return err "i3.remove_minitab: name missing"
end
for i = #i3.minitabs, 1, -1 do
local v = i3.minitabs[i]
if v and v.name == name then
remove(i3.minitabs, i)
end
end
end
i3.new_minitab("All", {
sorter = function()
return true
end
})
i3.new_minitab("Nodes", {
sorter = function(item)
return core.registered_nodes[item]
end
})
i3.new_minitab("Items", {
sorter = function(item)
return core.registered_craftitems[item] or core.registered_tools[item]
end
})

View File

@ -360,17 +360,8 @@ local function sort_by_category(data)
for i = 1, #items do
local item = items[i]
local to_add = true
local top_tap = i3.minitabs[data.itab - 3]
local custom_sorter = top_tap and top_tap.def.sorter
if data.itab == 2 then
to_add = core.registered_nodes[item]
elseif data.itab == 3 then
to_add = core.registered_craftitems[item] or core.registered_tools[item]
elseif custom_sorter then
to_add = custom_sorter(item, data)
end
local tab = i3.minitabs[data.itab]
local to_add = tab.def.sorter(item, data)
if to_add then
insert(new, item)

View File

@ -1391,7 +1391,8 @@ local function get_header_items_fs(fs, data)
end
box(X + 1, 0.2, 0.01, 0.5, "#bababa50")
local cat = {{"all", "all items"}, {"node", "nodes only"}, {"item", "items only"}}
local cat = recipe_filter_set() and {{"all", "all items"}} or
{{"all", "all items"}, {"node", "nodes only"}, {"item", "items only"}}
for i in ipairs(cat) do
local name, desc = unpack(cat[i])
@ -1453,13 +1454,13 @@ local function get_header_items_fs(fs, data)
end
local function get_minitabs(fs, data, player, full_height)
local minitabs = {"All", "Nodes", "Items"}
local minitabs = {}
for i, v in ipairs(i3.minitabs) do
local access = v.def.access
if access == nil or access(player, data) then
minitabs[i + 3] = v.name
minitabs[i] = v.name
end
end
@ -1530,7 +1531,7 @@ local function get_items_fs(fs, data, player, full_height)
local item_btn = fmt("item_image_button", X, Y, size, size, name, item, "")
if recipe_filter_set() and data.itab <= 3 then
if recipe_filter_set() and data.itab == 1 then
if data.items_progress[item] then
insert(fs, item_btn)
else

View File

@ -6,6 +6,9 @@ IMPORT("reg_items", "reg_nodes")
IMPORT("fmt", "search", "table_merge", "array_diff")
IMPORT("is_group", "extract_groups", "item_has_groups", "apply_recipe_filters")
i3.remove_minitab"Nodes"
i3.remove_minitab"Items"
i3.new_minitab("Unlocked", {
sorter = function(item, data)
return data.items_progress[item]