mirror of
https://github.com/minetest-mods/unified_inventory.git
synced 2025-07-02 00:10:28 +02:00
Category functionality added
This commit is contained in:
86
internal.lua
86
internal.lua
@ -25,6 +25,20 @@ function ui.get_per_player_formspec(player_name)
|
||||
return table.copy(draw_lite_mode and ui.style_lite or ui.style_full), draw_lite_mode
|
||||
end
|
||||
|
||||
local function formspec_button(ui_peruser, name, image, offset, pos, scale, label)
|
||||
local element = 'image_button'
|
||||
if minetest.registered_items[image] then
|
||||
element = 'item_image_button'
|
||||
end
|
||||
local spc = (1-scale)*ui_peruser.btn_size/2
|
||||
local size = ui_peruser.btn_size*scale
|
||||
return string.format("%s[%f,%f;%f,%f;%s;%s;]", element,
|
||||
(offset.x or offset[1]) + ( ui_peruser.btn_spc * (pos.x or pos[1]) ) + spc,
|
||||
(offset.y or offset[2]) + ( ui_peruser.btn_spc * (pos.y or pos[2]) ) + spc,
|
||||
size, size, image, name) ..
|
||||
string.format("tooltip[%s;%s]", name, F(S(label)))
|
||||
end
|
||||
|
||||
function ui.get_formspec(player, page)
|
||||
|
||||
if not player then
|
||||
@ -110,6 +124,34 @@ function ui.get_formspec(player, page)
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
|
||||
-- Category filters
|
||||
local categories_pos = { ui_peruser.page_x, ui_peruser.page_y-ui_peruser.btn_spc }
|
||||
|
||||
local scroll_offset = 0
|
||||
local category_count = #unified_inventory.category_list
|
||||
if category_count > ui_peruser.pagecols then
|
||||
scroll_offset = unified_inventory.current_category_scroll[player_name]
|
||||
end
|
||||
for index, category in ipairs(unified_inventory.category_list) do
|
||||
local column = index - scroll_offset
|
||||
if column > 0 and column <= ui_peruser.pagecols then
|
||||
if category_count > ui_peruser.pagecols and scroll_offset > 0 and column == 1 then
|
||||
-- prev
|
||||
formspec[n] = formspec_button(ui_peruser, "prev_category", "ui_left_icon.png", categories_pos, {0, 0}, 0.9, "Prev")
|
||||
elseif category_count > ui_peruser.pagecols and column == ui_peruser.pagecols and category_count - scroll_offset > ui_peruser.pagecols then
|
||||
-- next
|
||||
formspec[n] = formspec_button(ui_peruser, "next_category", "ui_right_icon.png", categories_pos, {ui_peruser.pagecols - 1, 0}, 0.9, "Next")
|
||||
else
|
||||
local scale = 0.8
|
||||
if unified_inventory.current_category[player_name] == category.name then
|
||||
scale = 1
|
||||
end
|
||||
formspec[n] = formspec_button(ui_peruser, "category_"..category.name, category.symbol, categories_pos, {column-1, 0}, scale, category.label)
|
||||
end
|
||||
n = n + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Search box
|
||||
formspec[n] = "field_close_on_enter[searchbox;false]"
|
||||
|
||||
@ -215,9 +257,9 @@ function ui.get_formspec(player, page)
|
||||
|
||||
if ui.activefilter[player_name] ~= "" then
|
||||
formspec[n] = string.format("label[%f,%f;%s:]",
|
||||
ui_peruser.page_x, ui_peruser.page_y - 0.65, F(S("Filter")))
|
||||
ui_peruser.page_x, ui_peruser.page_y - 1.65, F(S("Filter")))
|
||||
formspec[n+1] = string.format("label[%f,%f;%s]",
|
||||
ui_peruser.page_x, ui_peruser.page_y - 0.25, F(ui.activefilter[player_name]))
|
||||
ui_peruser.page_x, ui_peruser.page_y - 1.25, F(ui.activefilter[player_name]))
|
||||
end
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
@ -259,13 +301,39 @@ function ui.apply_filter(player, filter, search_dir)
|
||||
end
|
||||
end
|
||||
ui.filtered_items_list[player_name]={}
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if (not def.groups.not_in_creative_inventory
|
||||
or def.groups.not_in_creative_inventory == 0)
|
||||
and def.description
|
||||
and def.description ~= ""
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
local category = ui.current_category[player_name] or 'all'
|
||||
if category == 'all' then
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if (not def.groups.not_in_creative_inventory
|
||||
or def.groups.not_in_creative_inventory == 0)
|
||||
and def.description
|
||||
and def.description ~= ""
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
elseif category == 'uncategorised' then
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if (not ui.find_category(name))
|
||||
and (not def.groups.not_in_creative_inventory
|
||||
or def.groups.not_in_creative_inventory == 0)
|
||||
and def.description
|
||||
and def.description ~= ""
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
else
|
||||
for name,exists in pairs(ui.registered_category_items[category]) do
|
||||
local def = minetest.registered_items[name]
|
||||
if exists and def
|
||||
and (not def.groups.not_in_creative_inventory
|
||||
or def.groups.not_in_creative_inventory == 0)
|
||||
and def.description
|
||||
and def.description ~= ""
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(ui.filtered_items_list[player_name])
|
||||
|
Reference in New Issue
Block a user