From a05aa9a59bcfe1f57d189996027f700743daf41c Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 10 Jul 2022 20:25:00 +0200 Subject: [PATCH] Use texture status indicators (#16) --- init.lua | 4 ++++ license.txt | 13 +++++++++++++ nodes/chute.lua | 7 +++++-- nodes/hoppers.lua | 9 +++++++-- nodes/sorter.lua | 16 +++++++++------- textures/hopper_mode_eject.png | Bin 0 -> 2289 bytes textures/hopper_mode_hold.png | Bin 0 -> 2253 bytes textures/hopper_mode_off.png | Bin 0 -> 3858 bytes textures/hopper_mode_on.png | Bin 0 -> 3772 bytes utility.lua | 14 ++++++++------ 10 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 textures/hopper_mode_eject.png create mode 100644 textures/hopper_mode_hold.png create mode 100644 textures/hopper_mode_off.png create mode 100644 textures/hopper_mode_on.png diff --git a/init.lua b/init.lua index 3899fba..5134374 100644 --- a/init.lua +++ b/init.lua @@ -5,6 +5,10 @@ hopper = {} local MP = minetest.get_modpath(minetest.get_current_modname()) local S = minetest.get_translator("hopper") +hopper.translator_escaped = function(...) + return minetest.formspec_escape(S(...)) +end + if minetest.get_modpath("default") then hopper.formspec_bg = default.gui_bg .. default.gui_bg_img .. default.gui_slots else diff --git a/license.txt b/license.txt index 682768d..94ccf26 100644 --- a/license.txt +++ b/license.txt @@ -1,3 +1,6 @@ +Code license +============ + The MIT License (MIT) Copyright (c) 2016 TenPlus1 and FaceDeer @@ -19,3 +22,13 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +Texture licenses +================ + + +SmallJoker/Krock (CC0) + + * hopper_mode_*.png (created with LibreOffice Draw) diff --git a/nodes/chute.lua b/nodes/chute.lua index c380733..21e1125 100644 --- a/nodes/chute.lua +++ b/nodes/chute.lua @@ -1,11 +1,14 @@ local S = minetest.get_translator("hopper") +local FS = hopper.translator_escaped + local function get_chute_formspec(pos) local spos = hopper.get_string_pos(pos) local formspec = "size[8,7]" .. hopper.formspec_bg - .. "list[nodemeta:" .. spos .. ";main;3,0.3;2,2;]" - .. hopper.get_eject_button_texts(pos, 7, 0.8) + .. "label[3,-0.1;" .. FS("Hopper Chute") .."]" + .. "list[nodemeta:" .. spos .. ";main;3,0.4;2,2;]" + .. hopper.get_eject_button_texts(pos, 6, 0.8) .. "list[current_player;main;0,2.85;8,1;]" .. "list[current_player;main;0,4.08;8,3;8]" .. "listring[nodemeta:" .. spos .. ";main]" diff --git a/nodes/hoppers.lua b/nodes/hoppers.lua index 5e4ff91..d08d63e 100644 --- a/nodes/hoppers.lua +++ b/nodes/hoppers.lua @@ -1,4 +1,6 @@ local S = minetest.get_translator("hopper") +local FS = hopper.translator_escaped +local ALPHA_CLIP = minetest.features.use_texture_alpha_string_modes and "clip" or true -- formspec local function get_hopper_formspec(pos) @@ -6,8 +8,9 @@ local function get_hopper_formspec(pos) local formspec = "size[8,9]" .. hopper.formspec_bg - .. "list[nodemeta:" .. spos .. ";main;2,0.3;4,4;]" - .. hopper.get_eject_button_texts(pos, 7, 2) + .. "label[3.5,-0.1;" .. FS("Hopper") .."]" + .. "list[nodemeta:" .. spos .. ";main;2,0.4;4,4;]" + .. hopper.get_eject_button_texts(pos, 6.5, 2) .. "list[current_player;main;0,4.85;8,1;]" .. "list[current_player;main;0,6.08;8,3;8]" .. "listring[nodemeta:" .. spos .. ";main]" @@ -68,6 +71,7 @@ minetest.register_node("hopper:hopper", { "hopper_top_" .. hopper.config.texture_resolution .. ".png", "hopper_front_" .. hopper.config.texture_resolution .. ".png" }, + use_texture_alpha = ALPHA_CLIP, node_box = { type = "fixed", fixed = { @@ -160,6 +164,7 @@ minetest.register_node("hopper:hopper_side", { "hopper_back_" .. hopper.config.texture_resolution .. ".png", "hopper_back_" .. hopper.config.texture_resolution .. ".png" }, + use_texture_alpha = ALPHA_CLIP, node_box = { type = "fixed", fixed = { diff --git a/nodes/sorter.lua b/nodes/sorter.lua index ac86332..5f0858c 100644 --- a/nodes/sorter.lua +++ b/nodes/sorter.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("hopper") +local FS = hopper.translator_escaped local facedir_to_bottomdir = { [0]={x=0, y=-1, z=0}, @@ -18,15 +19,15 @@ local function get_sorter_formspec(pos) local filter_all = minetest.get_meta(pos):get_string("filter_all") == "true" local y_displace = 0 - local filter_button_text, filter_button_tooltip, filter_body + local filter_texture, filter_button_tooltip, filter_body if filter_all then filter_body = "" - filter_button_text = S("Selective\nFilter") - filter_button_tooltip = S("This sorter is currently set to try sending all items\nin the direction of the arrow. Click this button\nto enable an item-type-specific filter.") + filter_texture = "hopper_mode_off.png" + filter_button_tooltip = FS("This sorter is currently set to try sending all items\nin the direction of the arrow. Click this button\nto enable an item-type-specific filter.") else - filter_body = "label[3.7,0;"..S("Filter").."]list[nodemeta:" .. spos .. ";filter;0,0.5;8,1;]" - filter_button_text = S("Filter\nAll") - filter_button_tooltip = S("This sorter is currently set to only send items listed\nin the filter list in the direction of the arrow.\nClick this button to set it to try sending all\nitems that way first.") + filter_body = "label[3.7,0;"..FS("Filter").."]list[nodemeta:" .. spos .. ";filter;0,0.5;8,1;]" + filter_texture = "hopper_mode_on.png" + filter_button_tooltip = FS("This sorter is currently set to only send items listed\nin the filter list in the direction of the arrow.\nClick this button to set it to try sending all\nitems that way first.") y_displace = 1.6 end @@ -35,7 +36,8 @@ local function get_sorter_formspec(pos) .. hopper.formspec_bg .. filter_body .. "list[nodemeta:" .. spos .. ";main;3,".. tostring(0.3 + y_displace) .. ";2,2;]" - .. "button_exit[7,".. tostring(0.8 + y_displace) .. ";1,1;filter_all;".. filter_button_text .. "]tooltip[filter_all;" .. filter_button_tooltip.. "]" + .. ("image_button_exit[0,%g;1,1;%s;filter_all;]"):format(y_displace, filter_texture) + .. "tooltip[filter_all;" .. filter_button_tooltip.. "]" .. hopper.get_eject_button_texts(pos, 6, 0.8 + y_displace) .. "list[current_player;main;0,".. tostring(2.85 + y_displace) .. ";8,1;]" .. "list[current_player;main;0,".. tostring(4.08 + y_displace) .. ";8,3;8]" diff --git a/textures/hopper_mode_eject.png b/textures/hopper_mode_eject.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad08709d19417146b1d79a860b8df07a91307aa GIT binary patch literal 2289 zcma)7`8O2$8~)59Q!+}Hh-+j*c9~L=EnCLcAQYOCHG6i3K`Hwd*&-E5QDYs+FxIk^ zEhL)3y>_9o8{FxB|AFrh@AIzbea?B#dCwbTYOKe3NbnERbmodEm;}E>VydyC zSw}{Lsh(XQ`*CkTgaXO`6LN>rr7fY`J3G@{hY#P0Eu9YA(~YYEfmZh9k)Syf^_3Ry zcxh5ijdITtz_VMlYUlOHhXpj%xjMsG&eWL zZM1E>Xa_^R7}jS``Y16sT{AygdvBn>znL8zh>GxE7#7XWlL;TY3tkq_7ne9bDbA;r zJ-ryv_ke?+rS_&E@vwWR3TRXW)`b}qUw1}cZh3|VXcPrmr=}?PBZK{CT}s$ME>t0C z?W(I<&W)ccT)^uP(e`zAQJ&CP!~;My147{q#Vfa~znuGD>$9u<*A8wh51{i9NoWPT z?$Yy{VxaLf@Gq6bjDC_KdBFcHL_!>#WlbQ!81i14^lV%=*qd?Szo}C^7}M%6xE#w~ zDRv+P#SdL(TU+qOtEHMba==*yImR{w1l=51n%P$osPCCt$Zm9W68rc&vY)5SQ zCzT}LBn%B_qaeWRExKx4rA{jlu)>z6XzJ*1m<1quBAgv!3b}!o%ud;@4}&(GfE@iS z&sIFU0|MI1J%uZ<-Gdf6KM`y|NV=3=zTUWi76=6}_sajFbIyD%|DqrIfq;$!-e};k3%galv6H}_7@m+L`4%sLUzi}&58oScoS-mEQtw}N>E)VvSFR1I5I7ZfQ8SwfgDlGve2!4sOHa}|{n zZT}1(n)02Rwiq@Tv=l)e08H7A;G|Kt6CslcK*JnQ4?*=kxkDvumq}{!f z&FxtZMXiA+ADLJW4OOy@XKBc7Y@9GIBaklfnXoaod_K*#uPxqX{;nssM5^Rl`doz- z#!Fk+d#Tn+Ph8lSb=04>OzH^)55l$27u|AO1w{$zxNe86`5*rh1lse!!!MM<8!^y8rc+MYELTCnFIe)+a~QW#e~i^~D=UR0m$;~YTrW(- zP%SwC8L3gyHvF4Rxum!J4-}L!Y1ApTYWk0Q%C_lC`aJ8t*y+6;Q6h)-aG)^={FeUF z1VB63w15CW_Xclyd3|xEeDzDBr5TCN7@*MsFqRg*37N+~@Cq4v#v(LxjP;bAz82+F zI9_FkLBJ!>7;{YG({0kDqRDp@gPU^KwcQ4UKAcMH6|oj1|JWE9EJZRTw!_XkA?x1^ z#ch9=xKr`HxUMdT3$zSWDLFZBrs#JhNEC-l~$f-_HdfSk(~~ z<-+0VJ!6L1=6E{z{Ev6QqBO$W5T^9&1P?~Lpn$9C=u&pWeSr~W`!q^4{Y(^U9XZv0 z#@4@l2{B)rw1$jO`UyozI?JB$@)0D)piL!jzfufuoDCZvuRAR+&Q}(A0$Teq84A_4 zxliYgTWqb#YIro8+D|Yqp(!vX>239q8U=xEoQQ1!IL$#_{?1&0%6fB?UDQ^ee&k7I zWA-PuxmzJF<4sGqRtwYMU(3RdNKZ{dx?C@f?jnFCS&R$drqv@T1ZQZK-$xU8`+U_-Ffz5$k6)@1WOVXrZ0( zmCapZ@{x;hX@!ZtGy7ph4Yl~0;<#5)kl0u)Zv7S}n_PG3gC>2cZ_*3Fw5MqO2-rp+ zlSr)Xif>T4G@ov8EQdNfnWLlfL_{j(a~aOp7n-|Vl_kQP&P=fL*>Y4)rQged3wX8E zDeYgBvzbd!U>Lczg}t#p9C?U84gYwJkgs*wsae1ia)f6!zF#?bVM z6laaaW{h%Ke&p1&8umXxor!lWw((F_zpG1VM;*@+H4n+!+Mp(cuxobPrfC$s?_+Km z6RHHG@cqJRc(PIXu%0WpqGPOGriG9E7ja%NRsaA1 literal 0 HcmV?d00001 diff --git a/textures/hopper_mode_hold.png b/textures/hopper_mode_hold.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ab0c4a3fcc64b15d9ad8d2f6ced30b031f0f61 GIT binary patch literal 2253 zcmb_cX*3l68vZesVJu@8$r583qT-Szl6|u8hA7K_WKWUoGH7I}zhvK%kwlg#*_Z5O z%WgC%lx$OmVO-sN?)`K>-uImMdCqyydCvQMc;DxtnTb9tvj8&yfYs1I$Kr&e{xp=~ z1UoL@=m!9rW~g(;>fX#omZ!IsHFtOBg?S9tqQF4WK-vl4A0Oq5>I2s9{Zm651Tvsa{%r+gJQUO3Qr*W;k2 z*AU@DSZkyl&j$`^>?I4VKwNEXzE5+HFi z(f^uRf6e^B43*)}*h zIB62nDqo$FlvX>hKm3Fjg#G$uZE-MvvSCXI4CSin%gM=AXTKyBBfwPFO5`(3yotHK ze!L&;r_Z1DJZkKNQ1c!mbWuBH^VKb=t5+d!>+2yW;(ym=SZf{esJ3t`RkjXeS%Ux> zJA&?^@wg8PN&FxvZDOQfHb-mxW8p)^pFw)2E&P_41OjI>%Y| z7;)anZC+TDlY?fpSJW-U@nB zii}%#nxbcUTZGf7#q6HHP)s=kWvHVU^r@}Fv}ml~5G2E2mCopT&ZgW>CJ8|;uGu&= zOtfP+uX{tBreQFifS@llLr)i+`P2vZsn!e)#XCYInmHf3mGsXeyMoEn9eCxq!;qX! z!lK-Qzo;-!Z#Q~palLAgXnhn@%z|vH?KMK91WE;RwbouQ8dYRWuAC`!lb@1d-jBEh zLEBN!Iker*r-$;8a%6|Gi_@~m*Y0Nh;yD~3O5ZLbL@wTT7{xg3_r`*kufp1QITVPD z_Px4=;fc35oswazy%VTHSW-0WT3VE;fQ|052RQjVj>#>QKu-sU5ayBP7FtvQ8@7N2rvG79T^~ULvJ{xnD_V9q`6CIqlr195sDS7QU zJ>2hG@~zs3)ZmY@eGtYD6zhs`!6AwD&SRy{lD{BSk%XMZPkI2*iDFp z#2p<`0?=ac8tQ+(5KFh7l!A9Xv^OE77l}1I&be0a>blmMECgD|fQp5gma^;3gue!S zm5Ib3ntyi$b0tP5wh3$g2i8F@go$ip|5l$Lh9-#qxH zNir~v2He!XSh=%6vH503>2eW4MKnth{xP&yPu`E;rz*+d9Bv2FMA-m4`zf>~{<2j; zn}I@j!z>(%JodOrJR1&!_ncw^QQ7o_=X3()Ok}@oC+@yJWQ($NuRB3oRYls;cySEm zXh!BapwSYuYYnOmO0IGJw5)oxyhite>FFyIpQdE5YXzo*_?mi{-w|4{eOZ@o6G!w`H@S&jOjWWm2M;rCF$3~``2+fv= zD)^lJo2Uw><}jzNZshT|=5eclh({lVBMuiIyt>^?2(P=v9k)B8=`+L6%uYZ`aHd{A zKCi38FD<@|n;m984j#y8Ix;sOD~Qv3P*ik?X^%DHT@oIFuign4%lnRBT)a;`{<|RN zH+)rEc0iViHrO`8-(N^qKc)LeC@0;QFA`5iqrcxc7E0KB2=DCvjyWV-@UHoFb+R+h zFm7v{idn^o3UT+GVLFX$i93qFk={fTyS1hMxGVSKHYH?b^F>BRw?fSV7n5F~xKx@W zzbbRH2Am)$n(%OY$spC$xs51_!As_M+6;S%-aFhjU}iZqwBX*_YZ=&&r1cn^?aaU6 zt{T62&VC&F~ivQ5BBIn{rw4?*nk5Dm>=|I~E z@%SSzTo44CB_b{kt=aG-n&!zaADUPXK}ZLta3*!s;VEuzQj-jk@IWhpt}r9~byvQk zXIAMgXUq;Aoui1Rru5n(CpM1gt<~{Vc#s$=S>0hfgzmBvPz(CdiIRAx!dYNi&_L#r z)Wb1TROed`=S*;kyTT+T-#PS?A-2=l8&E6r%9;E&ncL!T)AwdgSU<;I#-00z}8-6FiNVsukuvGPVNC4 z>)>L`@fhoNq-)29(}XA#s_=m>`s$&@1%AB`%abnf(Y9<~z_6`!js9*2^UAw{sxj;B zc%7I@@_tJk2bI0`=>U1I(Th?xP9 literal 0 HcmV?d00001 diff --git a/textures/hopper_mode_off.png b/textures/hopper_mode_off.png new file mode 100644 index 0000000000000000000000000000000000000000..825731a8308ed9ec59583a1e59a8b64e03c807b3 GIT binary patch literal 3858 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 UnR9T6^|}C6W%zT9qDAO`063L33;+NC literal 0 HcmV?d00001 diff --git a/textures/hopper_mode_on.png b/textures/hopper_mode_on.png new file mode 100644 index 0000000000000000000000000000000000000000..67fad4176aeb665ecaea3b08058e14ad893398b9 GIT binary patch literal 3772 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