From ea4151dfa7353095857d0489753164504a5c060a Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Mon, 8 Mar 2021 12:14:31 -0500 Subject: [PATCH] Use 9-slicing to build inventory-type backgrounds This way the slots are all nice and crisp regardless of GUI scale or image size, and we only need the single slot and its bright version. This also makes the standard crafting grid into a style table entry that can be referenced to insert the crafting grid at its proper style-specific position in any formspec. And it also makes the craft grid arrow, its X position, and the crafting grid's result slot X position into style table entries. Includes a few public helper functions to do most of the work: `ui.single_slot(xpos, ypos, bright)` Does just what it sounds like: it returns a single slot image. `xpos` and `ypos` are normal coordinates in slots, as you'd use in `image[]` element. `bright` is a flag that switches to the brighter version of the slot image. `ui.make_trash_slot(xpos, ypos)` Creates a single slot, with a one-item `list[]` and a trash can icon overlay. `ui.make_inv_img_grid(xpos, ypos, width, height, bright)` Generates a `width` by `height` grid of slot images, using the single_slot function above, starting at (`xpos`,`ypos`) for the top-left. Position is as in any `image[]` element, and dimensions are in integer numbers of slots (so 8,4 would be a standard inventory). `bright` is as above. All three return a string that can be directly inserted into a formspec. --- api.lua | 25 ++++++++++++++++++++++- bags.lua | 35 ++++++++++++++------------------ init.lua | 28 +++++++++++++++++-------- register.lua | 21 ++++++++----------- textures/ui_bags_header.png | Bin 1243 -> 0 bytes textures/ui_bags_inv_large.png | Bin 2767 -> 0 bytes textures/ui_bags_inv_medium.png | Bin 1900 -> 0 bytes textures/ui_bags_inv_small.png | Bin 1029 -> 0 bytes textures/ui_crafting_form.png | Bin 3598 -> 0 bytes textures/ui_main_inventory.png | Bin 3930 -> 0 bytes textures/ui_misc_form.png | Bin 4020 -> 0 bytes 11 files changed, 67 insertions(+), 42 deletions(-) delete mode 100644 textures/ui_bags_header.png delete mode 100644 textures/ui_bags_inv_large.png delete mode 100644 textures/ui_bags_inv_medium.png delete mode 100644 textures/ui_bags_inv_small.png delete mode 100644 textures/ui_crafting_form.png delete mode 100644 textures/ui_main_inventory.png delete mode 100644 textures/ui_misc_form.png diff --git a/api.lua b/api.lua index a81cf89..c556955 100644 --- a/api.lua +++ b/api.lua @@ -303,8 +303,31 @@ function ui.register_button(name, def) table.insert(ui.buttons, def) end - function ui.is_creative(playername) return minetest.check_player_privs(playername, {creative=true}) or minetest.settings:get_bool("creative_mode") end + +function ui.single_slot(xpos, ypos, bright) + return string.format("background9[%f,%f;%f,%f;ui_single_slot%s.png;false;16]", + xpos, ypos, ui.imgscale, ui.imgscale, (bright and "_bright" or "") ) +end + +function ui.make_trash_slot(xpos, ypos) + return + ui.single_slot(xpos, ypos).. + "image["..xpos..","..ypos..";1.25,1.25;ui_trash_slot_icon.png^[opacity:95]".. + "list[detached:trash;main;"..xpos..","..ypos..";1,1;]" +end + +function ui.make_inv_img_grid(xpos, ypos, width, height, bright) + local tiled = {} + local n=1 + for y = 0, (height - 1) do + for x = 0, (width -1) do + tiled[n] = ui.single_slot(xpos + (ui.imgscale * x), ypos + (ui.imgscale * y), bright) + n = n + 1 + end + end + return table.concat(tiled) +end diff --git a/bags.lua b/bags.lua index bb80b3b..7e81c3f 100644 --- a/bags.lua +++ b/bags.lua @@ -8,14 +8,16 @@ License: GPLv3 local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape local ui = unified_inventory -local bags_inv_bg = "image[0.3,1.5;"..(ui.imgscale*8)..",%f;%s]" ui.register_page("bags", { get_formspec = function(player) local player_name = player:get_player_name() return { formspec = table.concat({ ui.style_full.standard_inv_bg, - string.format(bags_inv_bg, ui.imgscale, "ui_bags_header.png"), + ui.single_slot(0.925, 1.5), + ui.single_slot(3.425, 1.5), + ui.single_slot(5.925, 1.5), + ui.single_slot(8.425, 1.5), "label["..ui.style_full.form_header_x..","..ui.style_full.form_header_y..";" .. F(S("Bags")) .. "]", "button[0.6125,2.75;1.875,0.75;bag1;" .. F(S("Bag @1", 1)) .. "]", "button[3.1125,2.75;1.875,0.75;bag2;" .. F(S("Bag @1", 2)) .. "]", @@ -49,34 +51,27 @@ for bag_i = 1, 4 do get_formspec = function(player) local stack = get_player_bag_stack(player, bag_i) local image = stack:get_definition().inventory_image + local slots = stack:get_definition().groups.bagslots + local formspec = { ui.style_full.standard_inv_bg, + ui.make_inv_img_grid(0.3, 1.5, 8, slots/8), "image[9.2,0.4;1,1;" .. image .. "]", "label[0.3,0.65;" .. F(S("Bag @1", bag_i)) .. "]", "listcolors[#00000000;#00000000]", "listring[current_player;main]", + string.format("list[current_player;bag%icontents;%f,%f;8,3;]", + bag_i, 0.3 + ui.list_img_offset, 1.5 + ui.list_img_offset), + "listring[current_name;bag" .. bag_i .. "contents]", } - local n = 6 - - local slots = stack:get_definition().groups.bagslots - if slots == 8 then - formspec[n] = string.format(bags_inv_bg, ui.imgscale, "ui_bags_inv_small.png") - elseif slots == 16 then - formspec[n] = string.format(bags_inv_bg, ui.imgscale*2, "ui_bags_inv_medium.png") - elseif slots == 24 then - formspec[n] = string.format(bags_inv_bg, ui.imgscale*3, "ui_bags_inv_large.png") - end - formspec[n+1] = "list[current_player;bag" .. bag_i .. "contents;0.45,1.65;8,3;]" - formspec[n+2] = "listring[current_name;bag" .. bag_i .. "contents]" - n = n + 3 + local n = #formspec + 1 local player_name = player:get_player_name() -- For if statement. if ui.trash_enabled - or ui.is_creative(player_name) - or minetest.get_player_privs(player_name).give then - formspec[n] = "image[7.8,0.25;"..ui.trash_slot_img.."]" - formspec[n+1] = "list[detached:trash;main;7.95,0.25;1,1;]" - n = n + 2 + or ui.is_creative(player_name) + or minetest.get_player_privs(player_name).give then + formspec[n] = ui.make_trash_slot(7.8, 0.25) + n = n + 1 end local inv = player:get_inventory() for i = 1, 4 do diff --git a/init.lua b/init.lua index f3edf99..126e116 100644 --- a/init.lua +++ b/init.lua @@ -36,6 +36,7 @@ unified_inventory = { -- Trash enabled trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false), imgscale = 1.25, + list_img_offset = 0.13, standard_background = "background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", } @@ -92,19 +93,31 @@ ui.style_lite = { std_inv_y = 4.6, } +dofile(modpath.."/api.lua") + for _, style in ipairs({ui.style_full, ui.style_lite}) do style.items_per_page = style.pagecols * style.pagerows style.standard_inv = string.format("list[current_player;main;%f,%f;8,4;]", - style.std_inv_x+0.15, style.std_inv_y+0.15) + style.std_inv_x+0.13, style.std_inv_y+0.13) - style.standard_inv_bg = string.format("image[%f,%f;%f,%f;ui_main_inventory.png]", - style.std_inv_x, style.std_inv_y, - ui.imgscale*8, ui.imgscale*4) + style.standard_inv_bg = ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y, 8, 1, true).. + ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y + ui.imgscale, 8, 3) + + style.craftarrow_x = style.craft_x + 3.75 + style.craftarrow = string.format("image[%f,%f;%f,%f;ui_crafting_arrow.png]", + style.craftarrow_x, style.craft_y, ui.imgscale, ui.imgscale) + style.craftresult_x = style.craft_x + 5 + style.craft_grid = table.concat({ + ui.make_inv_img_grid(style.craft_x, style.craft_y, 3, 3), + ui.single_slot(style.craft_x + ui.imgscale*4, style.craft_y), -- the craft result slot + style.craftarrow, + string.format("list[current_player;craft;%f,%f;3,3;]", + style.craft_x + ui.list_img_offset, style.craft_y + ui.list_img_offset), + string.format("list[current_player;craftpreview;%f,%f;1,1;]", + style.craftresult_x + ui.list_img_offset, style.craft_y + ui.list_img_offset) + }) end -ui.trash_slot_img = string.format("%f,%f;ui_single_slot.png^(ui_trash_slot_icon.png^[opacity:95)", - ui.imgscale, ui.imgscale) - -- Disable default creative inventory local creative = rawget(_G, "creative") or rawget(_G, "creative_inventory") if creative then @@ -120,7 +133,6 @@ if sfinv then end dofile(modpath.."/group.lua") -dofile(modpath.."/api.lua") dofile(modpath.."/internal.lua") dofile(modpath.."/callbacks.lua") dofile(modpath.."/match_craft.lua") diff --git a/register.lua b/register.lua index 536dfc3..4b6ec38 100644 --- a/register.lua +++ b/register.lua @@ -174,12 +174,10 @@ ui.register_page("craft", { local player_name = player:get_player_name() local formspec = { - string.format("image[%f,%f;%f,%f;ui_crafting_form.png]", craftx, crafty, ui.imgscale*6, ui.imgscale*3), perplayer_formspec.standard_inv_bg, + perplayer_formspec.craft_grid, "label["..formheaderx..","..formheadery..";" ..F(S("Crafting")).."]", "listcolors[#00000000;#00000000]", - "list[current_player;craftpreview;"..(craftresultx+0.15)..","..(crafty+0.15)..";1,1;]", - "list[current_player;craft;"..(craftx+0.15)..","..(crafty+0.15)..";3,3;]", "listring[current_name;craft]", "listring[current_player;main]" } @@ -187,18 +185,15 @@ ui.register_page("craft", { if ui.trash_enabled or ui.is_creative(player_name) or minetest.get_player_privs(player_name).give then formspec[n] = string.format("label[%f,%f;%s]", craftx + 6.45, crafty + 2.4, F(S("Trash:"))) - formspec[n+1] = string.format("image[%f,%f;%s]", craftx+6.25, crafty + 2.5, ui.trash_slot_img) - formspec[n+2] = string.format("list[detached:trash;main;%f,%f;1,1;]", craftx + 6.4, crafty + 2.65) - n=n+3 + formspec[n+1] = ui.make_trash_slot(craftx + 6.25, crafty + 2.5) + n=n + 2 end if ui.is_creative(player_name) then - formspec[n] = string.format("image[%f,%f;%f,%f;ui_single_slot.png]", - perplayer_formspec.craft_x - 2.5, perplayer_formspec.craft_y + 2.5, - ui.imgscale, ui.imgscale) + formspec[n] = ui.single_slot(craftx - 2.5, crafty + 2.5) formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:"))) formspec[n+2] = string.format("list[detached:%srefill;main;%f,%f;1,1;]", - F(player_name), craftx - 2.35, crafty + 2.65) + F(player_name), craftx - 2.2 - ui.list_img_offset, crafty + 2.5 + ui.list_img_offset) end return {formspec=table.concat(formspec)} end, @@ -275,8 +270,8 @@ ui.register_page("craftguide", { local craftx = perplayer_formspec.craft_x local crafty = perplayer_formspec.craft_y - local craftarrowx = craftx + 3.75 - local craftresultx = craftx + 5 + local craftarrowx = perplayer_formspec.craftarrow_x + local craftresultx = perplayer_formspec.craftresult_x local formheaderx = perplayer_formspec.form_header_x local formheadery = perplayer_formspec.form_header_y local give_x = perplayer_formspec.give_btn_x @@ -317,7 +312,7 @@ ui.register_page("craftguide", { end local has_give = player_privs.give or ui.is_creative(player_name) - formspec[n] = "image["..craftarrowx..","..crafty..";1.25,1.25;ui_crafting_arrow.png]" + formspec[n] = perplayer_formspec.craftarrow formspec[n+1] = string.format("textarea[%f,%f;10,1;;%s: %s;]", craftx-2.3, perplayer_formspec.resultstr_y, F(role_text[dir]), item_name_shown) n = n + 2 diff --git a/textures/ui_bags_header.png b/textures/ui_bags_header.png deleted file mode 100644 index c7a9c381672f74d9da05ab16e80c4d318d406720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 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 diff --git a/textures/ui_bags_inv_medium.png b/textures/ui_bags_inv_medium.png deleted file mode 100644 index b31bfa18e3a97b6516ed8a57c49caf0d5d1b46e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 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 diff --git a/textures/ui_main_inventory.png b/textures/ui_main_inventory.png deleted file mode 100644 index 495a54ef8223ad9e06c2259a1e9852f62c693a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3930 zcmcgvdpy%^8=q57MGhsAIZP-aDp4777!R9JJ;|BKaoUtaSRO-#<`|koQc(_z$!Tn! z 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 diff --git a/textures/ui_misc_form.png b/textures/ui_misc_form.png deleted file mode 100644 index eea0dbac4692e12896f8cd16e89e67c1da2447ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4020 zcmds3X;hPE+K$@FRI!{HsT4(GEuR!Yq5)ZCiCC3I1OYJ>B&kBc2n5-}o~UT4tU?GF zR)qj%kyJB)$dZpzKp+W1gs>QbLJ}ZAkg#Q+H`voTXXf90^Xto>amq94;a81bg!k*||h^Mf3(aPP9* zdmW!8Z-40b^D~Qwj}8u!8^7umt}QLt+SOs(Ug#YdAB%I5OBNi)$L@-#k((z5s8s3~ zKm-4eKS+bFr>bEzl>Qyz@4Dppsaln#Uk)cE$QV4+nV4HlAF_)wkV>T&mPCeqZ_(7e zX=@U}I?tm(d$;W!Qya-~5f6(I#55D0(V?&?t)wJ{zO+jrKg24cQzb4X)unp+wd0p} z_ZvFH7nx1=iD9zER-)xfAVz>_)Y9J$ypK@7f2)KkX??l=?x9zfYgM$D=?etewU{Fr zS>PmyTE!D=@hwC@WhF(Xb+^48=dL()Zr)WKrL27QYdCg#a4*BB672=KeJ9nxFOcWf zHrC#>UTQcQyD(|hi=WXNb6#Crlg+cMS^NMdTZh@YED*ZqW(Ay_*7P)8*LC8PP=*uM zleV}IgE|OCLZRf)#N6M2#@eOP1$Df!*3F=x(yK5({Q;lz)tOU0d%Wj0hXV7^)_xEs zLZMh#Y|UTH1sFy&Z&}D&bYT6?u=w z^Bjt6sU2~z?%dWx7JqbR^p>4nS!9;GS0%%1jkH!5^b3W;Mbemu$}2&OogENbZWu%rZysDf&3Q0P>T#S79}lDuGjevZ71pm*$JC1Weiyy4E%{g zu>*!1C*vfvTliAYbY&N^SEDBcLLY ze5N>tOJ5Ax`V)$04&n zG2NDC7#uiWI$Euxj7X|jcu~lq4;@=QU88B%8=onN#R^nX=LFY-6thI>@ZpZd!_bWzsVN&aGI5s!()Cx zNiSSKVZFA>Vx%h61F~xE#AYmoD)t*QDx;xE{bd)*2 z$6=||=Ex*0uRI_B_qAmvQ$PL&a^_`ZuwZ3< z1Hb$*ztn z@$YRki~yuKz?ns0Ez`{I#lNj2q+AL(uJ32kqalC+anrWiZ=hSZhpCyh+S`+?V~~28 zRCLvMf_4rdx)fJzfbyl7D7$(}E0{M?Z;_+a^NEiLd)8S@)!VHvAR*e?VSntpFwaTp?288V~Y%u0R`LDa1AC+`|G)abTh`c*4VbT^|j>4LtEuH z@S2+)j1Mm1wJyc;KYv-~M6_Vl@t)h_f)i0#@iKgCl<)*qYl#k?GkL%k_QNx3%-3o1 zUsz;@6{}8g){W!Sd`-R_Ozljm0%&$ry%|kxIoM|2db!xRI}H!@B=;R>=}lat*|!e0 z$$8IGMCB9;Z9%z%DB3sNJ^S18jf6_S>V5M49k(VY4|2Xngw}^n+D;@%lK>|2C-64| zao0k!;3GeUKA+l~T@&0`U_)gHUJbOD0`Y)P0xl<0?yS!I{i%`DfyWjP<97{KII+Ba zTVfDnbb;UfH*7Z2M|GFJw~KWkc{ihr@7nNUv}u=-7b7wT=Z}lt7-tmHHow)n2beiR zma=o|0aiLRJGA-krmbt_XAq~NAWNG<8+H)fK3?Kjx^m_(0BfiXt)qg8;V?H^LqvRz zMe^m{xQQ~rF=Gr&;8=4*WSmR}+x-3eCjd^lQo;TF-z}4?L2<=g5efQ_J3Z7|GHYAsJ4CQxhlP=Hs$_1P@bpO96{?2FmRaSl=DtM zGf3WJif0uG&iNAny0NdtxrzMMQ8TB)UQT?lYTqXaY|xUnWnL5P;!mW2ME@wk)Op|> z0YuBYNfQdTu)mkBi^^$W^bXHIQ4hf#U>M%=!KWUq==%Ba#cmQmTd!pjA(M7kKiVoU zgYA@01%_9=^saD=KC9tDb}2-Uto)!)JJ}9xiQB9NNJ?6*ZNno5(r6gbo)U1~$e2y~ zIowyB=T?-=Giq<+-Aer`%V@xmva2gkakWcVn3pW`PFn6OxMU0^%$KQT8{)H z<`Bx2k3semof_%EV|=EZ7!dC5!e7d!TgxBFx+j zX4=?e9NgLX!}3F?;gi0M;xT?CCy48=z699=ep#-Xdw*e1S93Tu51S2p@Xr;)7n`0@ zua0M`)BJ}Y<}x}S@NYy``dnS`eUMwtZ?>VGpuI|1)iy6g2sxi1tUhW?E&3(XEFJu}-@#4H?71zhw&biQ`=5t!8N4}|e zA<&Y#@NT@hRiOYUe)vXhRh&vG+HUJzB=4T*t+9eh8+c-<0E3uKxc1iD=%cOSi7xd)fVc)k6V~KF;-4tYvf})uJy4ME~neh%56V)Fo*q z?80TTD`BvC?tw^;ycM(g&Jj4)p%B&Dog&(vw~qB9A}cn-H#-3Y~|hnN%qp=Nf<@Yg>2f`IiPh#xNxxh zFl^o&ZN@YgT4#GTT`|>x$;TI#->Wlj5N2+{#W+ItK)eO1A3v0)Yga?*<~