mirror of
https://github.com/minetest-mods/i3.git
synced 2025-07-03 00:50:22 +02:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
00a258afea | |||
dd8657ab56 | |||
34fa63519e | |||
066e0a5d9d | |||
8fc01b7ece | |||
a1af79a870 | |||
a5ceae07d7 |
5
init.lua
5
init.lua
@ -20,7 +20,7 @@ local function lf(path)
|
||||
end
|
||||
|
||||
i3 = {
|
||||
version = 112,
|
||||
version = 1121,
|
||||
data = core.deserialize(storage:get_string"data") or {},
|
||||
|
||||
settings = {
|
||||
@ -111,6 +111,7 @@ i3 = {
|
||||
i3.files.common()
|
||||
i3.files.api(http)
|
||||
i3.files.compress()
|
||||
i3.files.detached()
|
||||
i3.files.groups()
|
||||
i3.files.callbacks(http, storage)
|
||||
|
||||
@ -120,7 +121,7 @@ end
|
||||
|
||||
if i3.settings.debug_mode then
|
||||
lf("/tests/test_tabs.lua")()
|
||||
lf("/tests/test_operators.lua")()
|
||||
-- lf("/tests/test_operators.lua")()
|
||||
lf("/tests/test_compression.lua")()
|
||||
lf("/tests/test_custom_recipes.lua")()
|
||||
end
|
||||
|
@ -1,7 +1,6 @@
|
||||
local http, storage = ...
|
||||
local init_bags = i3.files.bags()
|
||||
local fill_caches = i3.files.caches(http)
|
||||
local init_detached = i3.files.detached()
|
||||
local init_hud = i3.files.hud()
|
||||
local set_fs = i3.set_fs
|
||||
|
||||
@ -203,16 +202,14 @@ local function init_data(player, info)
|
||||
local name = player:get_player_name()
|
||||
i3.data[name] = i3.data[name] or {}
|
||||
local data = i3.data[name]
|
||||
local default = {}
|
||||
|
||||
for k, v in pairs(i3.default_data) do
|
||||
default[k] = data[k]
|
||||
|
||||
if data[k] == nil then
|
||||
default[k] = v
|
||||
local val = data[k]
|
||||
if val == nil then
|
||||
val = v
|
||||
end
|
||||
|
||||
data[k] = default[k]
|
||||
data[k] = val
|
||||
end
|
||||
|
||||
data.player_name = name
|
||||
@ -264,7 +261,6 @@ insert(core.registered_on_joinplayers, 1, function(player)
|
||||
|
||||
init_data(player, info)
|
||||
init_bags(player)
|
||||
init_detached(player)
|
||||
init_hud(player)
|
||||
end)
|
||||
|
||||
|
@ -327,8 +327,12 @@ local function apply_recipe_filters(recipes, player)
|
||||
return recipes
|
||||
end
|
||||
|
||||
local function recipe_filter_set()
|
||||
return next(i3.recipe_filters)
|
||||
end
|
||||
|
||||
local function compression_active(data)
|
||||
return data.collapse and not next(i3.recipe_filters) and data.filter == ""
|
||||
return data.collapse and not recipe_filter_set() and data.filter == ""
|
||||
end
|
||||
|
||||
local function compressible(item, data)
|
||||
@ -684,6 +688,7 @@ local _ = {
|
||||
get_recipes = get_recipes,
|
||||
sort_inventory = sort_inventory,
|
||||
sort_by_category = sort_by_category,
|
||||
recipe_filter_set = recipe_filter_set,
|
||||
apply_recipe_filters = apply_recipe_filters,
|
||||
|
||||
-- Type checks
|
||||
|
@ -1,5 +1,5 @@
|
||||
local set_fs = i3.set_fs
|
||||
IMPORT("fmt", "play_sound", "create_inventory")
|
||||
IMPORT("play_sound", "create_inventory")
|
||||
|
||||
local trash = create_inventory("i3_trash", {
|
||||
allow_put = function(_, _, _, stack)
|
||||
@ -22,15 +22,3 @@ local trash = create_inventory("i3_trash", {
|
||||
})
|
||||
|
||||
trash:set_size("main", 1)
|
||||
|
||||
local function init_detached(player)
|
||||
local name = player:get_player_name()
|
||||
|
||||
local output_rcp = create_inventory(fmt("i3_output_rcp_%s", name), {}, name)
|
||||
output_rcp:set_size("main", 1)
|
||||
|
||||
local output_usg = create_inventory(fmt("i3_output_usg_%s", name), {}, name)
|
||||
output_usg:set_size("main", 1)
|
||||
end
|
||||
|
||||
return init_detached
|
||||
|
73
src/gui.lua
73
src/gui.lua
@ -10,11 +10,11 @@ local VoxelArea, VoxelManip = VoxelArea, VoxelManip
|
||||
IMPORT("vec", "vec_round")
|
||||
IMPORT("find", "match", "sub", "upper")
|
||||
IMPORT("clr", "ESC", "msg", "check_privs")
|
||||
IMPORT("compression_active", "compressible")
|
||||
IMPORT("min", "max", "floor", "ceil", "round")
|
||||
IMPORT("true_str", "is_fav", "is_num", "str_to_pos")
|
||||
IMPORT("reg_items", "reg_nodes", "reg_tools", "reg_entities")
|
||||
IMPORT("get_bag_description", "get_detached_inv", "get_recipes")
|
||||
IMPORT("compression_active", "compressible", "recipe_filter_set")
|
||||
IMPORT("S", "ES", "translate", "ItemStack", "toupper", "utf8_len")
|
||||
IMPORT("maxn", "sort", "concat", "copy", "insert", "remove", "unpack")
|
||||
IMPORT("extract_groups", "groups_to_items", "is_group", "item_has_groups", "get_group")
|
||||
@ -297,7 +297,7 @@ local function get_isometric_view(fs, pos, X, Y, t, cubes, depth, high)
|
||||
end
|
||||
|
||||
shift += (base_depth and 0.45 or 0.95)
|
||||
image(2.7, Y + shift, 0.3, 0.3, PNG.flag)
|
||||
animated_image(2.75, Y + shift, 3/14, 0.3, "i3_flag_anim.png", 4, 150)
|
||||
end
|
||||
|
||||
local function get_waypoint_fs(fs, data, player, yextra, ctn_len)
|
||||
@ -608,7 +608,7 @@ local function show_settings(fs, data)
|
||||
local X = 2.5
|
||||
button(X, 9.1, 1.6, 0.55, "setting_home", "Home")
|
||||
button(X + 1.7, 9.1, 1.6, 0.55, "setting_style", "Style")
|
||||
button(X + 3.38, 9.1, 1.6, 0.55, "setting_sorting", "Sorting")
|
||||
button(X + 3.4, 9.1, 1.6, 0.55, "setting_sorting", "Sorting")
|
||||
image_button(X + 5.12, 9.2, 0.25, 0.25, PNG.cancel_hover .. "^\\[brighten", "close_settings", "")
|
||||
|
||||
if show_home then
|
||||
@ -631,8 +631,8 @@ local function show_settings(fs, data)
|
||||
checkbox(2.6, 10.4, "cb_legacy_inventory", "Legacy inventory", tostring(data.legacy_inventory))
|
||||
checkbox(2.6, 10.85, "cb_wielditem_hud", "HUD description", tostring(data.wielditem_hud))
|
||||
|
||||
if not next(i3.recipe_filters) then
|
||||
checkbox(5.3, 10.85, "cb_collapse", "Collapse inventory", tostring(data.collapse))
|
||||
if not recipe_filter_set() then
|
||||
checkbox(5.3, 10.85, "cb_collapse", "Collapse list", tostring(data.collapse))
|
||||
end
|
||||
|
||||
local sign = (data.font_size > 0 and "+") or (data.font_size > 0 and "-") or ""
|
||||
@ -640,7 +640,7 @@ local function show_settings(fs, data)
|
||||
|
||||
local range = 5
|
||||
fs("scrollbaroptions[min=-%u;max=%u;smallstep=1;largestep=1;thumbsize=2]", range, range)
|
||||
fs("scrollbar[5.3,10.2;2.45,0.3;horizontal;sb_font_size;%d]", data.font_size)
|
||||
fs("scrollbar[5.3,10.2;2.55,0.3;horizontal;sb_font_size;%d]", data.font_size)
|
||||
|
||||
fs("tooltip[cb_hide_tabs;%s;#707070;#fff]",
|
||||
ES"Enable this option to change the style of the right panel")
|
||||
@ -649,7 +649,7 @@ local function show_settings(fs, data)
|
||||
fs("tooltip[cb_wielditem_hud;%s;#707070;#fff]",
|
||||
ES"Enable this option to show the wielded item description in your HUD")
|
||||
fs("tooltip[cb_collapse;%s;#707070;#fff]",
|
||||
ES"Enable this option to collapse certain items in your inventory")
|
||||
ES"Enable this option to collapse the inventory list by grouping some items")
|
||||
|
||||
elseif show_sorting then
|
||||
checkbox(2.6, 9.95, "cb_inv_compress", "Compression", tostring(data.inv_compress))
|
||||
@ -790,7 +790,7 @@ local function get_inventory_fs(player, data, fs)
|
||||
show_settings(fs, data)
|
||||
end
|
||||
|
||||
local function get_tooltip(item, info, pos, lang_code)
|
||||
local function get_tooltip(item, info, lang_code)
|
||||
local tooltip
|
||||
|
||||
if info.groups then
|
||||
@ -863,11 +863,6 @@ local function get_tooltip(item, info, pos, lang_code)
|
||||
end
|
||||
end
|
||||
|
||||
if pos then
|
||||
local btn_size = i3.settings.item_btn_size
|
||||
return fmt("tooltip", pos.x, pos.y, btn_size, btn_size, ESC(tooltip))
|
||||
end
|
||||
|
||||
return fmt("tooltip[%s;%s]", item, ESC(tooltip))
|
||||
end
|
||||
|
||||
@ -939,28 +934,16 @@ local function get_output_fs(fs, data, rcp, is_recipe, is_usage, shapeless, righ
|
||||
local meta = item:get_meta()
|
||||
local name = item:get_name()
|
||||
local count = item:get_count()
|
||||
local wear = item:get_wear()
|
||||
local _name = fmt("_%s", name)
|
||||
local pos
|
||||
|
||||
if meta:get_string"color" ~= "" or meta:get_string"palette_index" ~= "" then
|
||||
local rcp_usg = is_recipe and "rcp" or "usg"
|
||||
local size = BTN_SIZE * 1.2
|
||||
slot(X, Y - 0.11, size, size)
|
||||
|
||||
fs("style_type[list;size=%f]", BTN_SIZE)
|
||||
fs"listcolors[#bababa50;#bababa99]"
|
||||
fs("list[detached:i3_output_%s_%s;main;%f,%f;1,1;]", rcp_usg, data.player_name, X + 0.11, Y)
|
||||
button(X + 0.11, Y, BTN_SIZE, BTN_SIZE, _name, "")
|
||||
count = get_true_count(data, count, is_recipe, is_usage)
|
||||
item:set_count(count)
|
||||
|
||||
local inv = get_detached_inv(fmt("output_%s", rcp_usg), data.player_name)
|
||||
inv:set_stack("main", 1, item)
|
||||
pos = {x = X + 0.11, y = Y}
|
||||
else
|
||||
local size = BTN_SIZE * 1.2
|
||||
slot(X, Y - 0.11, size, size)
|
||||
|
||||
count = get_true_count(data, count, is_recipe, is_usage)
|
||||
item_image_button(X + 0.11, Y, BTN_SIZE, BTN_SIZE, fmt("%s %u %u", name, count, wear), _name, "")
|
||||
end
|
||||
local itemstr = ESC(item:to_string())
|
||||
item_image_button(X + 0.11, Y, BTN_SIZE, BTN_SIZE, itemstr, _name, "")
|
||||
|
||||
local def = reg_items[name]
|
||||
local unknown = not def or nil
|
||||
@ -983,7 +966,7 @@ local function get_output_fs(fs, data, rcp, is_recipe, is_usage, shapeless, righ
|
||||
}
|
||||
|
||||
if next(infos) then
|
||||
fs(get_tooltip(_name, infos, pos, data.lang_code))
|
||||
fs(get_tooltip(_name, infos, data.lang_code))
|
||||
end
|
||||
end
|
||||
|
||||
@ -1100,7 +1083,10 @@ local function get_grid_fs(fs, data, rcp, is_recipe, is_usage)
|
||||
label(X + 0.8, Y + 0.9, count)
|
||||
end
|
||||
else
|
||||
item_image_button(X, Y, btn_size, btn_size, fmt("%s %u", name, count), btn_name, label)
|
||||
item:set_name(name)
|
||||
item:set_count(count)
|
||||
local itemstr = ESC(item:to_string())
|
||||
item_image_button(X, Y, btn_size, btn_size, itemstr, btn_name, label)
|
||||
end
|
||||
|
||||
local def = reg_items[name]
|
||||
@ -1125,7 +1111,7 @@ local function get_grid_fs(fs, data, rcp, is_recipe, is_usage)
|
||||
}
|
||||
|
||||
if next(infos) then
|
||||
fs(get_tooltip(btn_name, infos, nil, data.lang_code))
|
||||
fs(get_tooltip(btn_name, infos, data.lang_code))
|
||||
end
|
||||
end
|
||||
|
||||
@ -1140,9 +1126,13 @@ local function get_rcp_lbl(fs, data, panel, rn, is_recipe, is_usage)
|
||||
local rcp = is_recipe and panel.rcp[data.rnum] or panel.rcp[data.unum]
|
||||
|
||||
if rcp.custom then
|
||||
local desc = i3.craft_types[rcp.type].description
|
||||
hypertext(data.inv_width + 4.8, data.yoffset + 0.12, 3, 1, "custom_rcp",
|
||||
fmt("<right><i><global size=16>%s\n<global size=15>%s</i></right>", ES"Custom recipe", desc))
|
||||
local craft_type = i3.craft_types[rcp.type]
|
||||
if craft_type then
|
||||
local desc = craft_type.description
|
||||
hypertext(data.inv_width + 4.8, data.yoffset + 0.12, 3, 1, "custom_rcp",
|
||||
fmt("<right><i><global size=16>%s\n<global size=15>%s</i></right>",
|
||||
ES"Custom recipe", ESC(desc)))
|
||||
end
|
||||
end
|
||||
|
||||
local lbl = ES("Usage @1 of @2", data.unum, rn)
|
||||
@ -1365,7 +1355,7 @@ local function hide_items(player, data)
|
||||
data.items = new
|
||||
end
|
||||
|
||||
if not core.is_creative_enabled(data.player_name) and not next(i3.recipe_filters) then
|
||||
if not core.is_creative_enabled(data.player_name) and not recipe_filter_set() then
|
||||
local new = {}
|
||||
|
||||
for i = 1, #data.items do
|
||||
@ -1499,7 +1489,7 @@ local function get_items_fs(fs, data, player, full_height)
|
||||
local lbl = ES"No item to show"
|
||||
local icon, width, offset = PNG.no_result, 4, 2
|
||||
|
||||
if next(i3.recipe_filters) and #i3.init_items > 0 and data.filter == "" then
|
||||
if recipe_filter_set() and #i3.init_items > 0 and data.filter == "" then
|
||||
lbl = ES"Collect items to reveal more recipes" -- Progressive mode, etc.
|
||||
icon, width, offset = PNG.find_more, 2.5, 2.75
|
||||
end
|
||||
@ -1524,14 +1514,15 @@ local function get_items_fs(fs, data, player, full_height)
|
||||
|
||||
local item_btn = fmt("item_image_button", X, Y, size, size, name, item, "")
|
||||
|
||||
if next(i3.recipe_filters) then
|
||||
if recipe_filter_set() then
|
||||
if data.items_progress[item] then
|
||||
insert(fs, item_btn)
|
||||
else
|
||||
local col = "^\\[colorize:#232428^\\[opacity:245"
|
||||
local img = reg_items[item].inventory_image .. col
|
||||
local nodedef = reg_nodes[item]
|
||||
|
||||
if reg_nodes[item] then
|
||||
if nodedef and not true_str(nodedef.inventory_image) then
|
||||
img = PNG.cube .. col
|
||||
end
|
||||
|
||||
|
@ -44,7 +44,7 @@ local PNG = {
|
||||
nonvisible = "i3_non_visible.png",
|
||||
exit = "i3_exit.png",
|
||||
home = "i3_home.png",
|
||||
flag = "i3_flag.png",
|
||||
flag = "i3_flag_anim.png",
|
||||
edit = "i3_edit.png",
|
||||
no_result = "i3_no_result.png",
|
||||
find_more = "i3_find_more.png",
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 745 B |
BIN
textures/i3_flag_anim.png
Normal file
BIN
textures/i3_flag_anim.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 227 B |
Reference in New Issue
Block a user