From 813a6f0ceb4dfbbab44b1155a6d64c05c0f8b866 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 14 May 2022 21:39:46 +0700 Subject: [PATCH] Checkboxes! --- .../mc/otm/client/screen/StorageBusScreen.kt | 4 + .../mc/otm/client/screen/panels/CheckBox.kt | 104 ++++++++++++++++++ .../overdrive_that_matters/lang/en_us.json | 2 + .../textures/gui/widgets.png | Bin 2665 -> 2798 bytes .../textures/gui/widgets.xcf | 4 +- 5 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/CheckBox.kt diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/StorageBusScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/StorageBusScreen.kt index 454d3c515..e976385e3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/StorageBusScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/StorageBusScreen.kt @@ -1,7 +1,9 @@ package ru.dbotthepony.mc.otm.client.screen import net.minecraft.network.chat.Component +import net.minecraft.network.chat.TranslatableComponent import net.minecraft.world.entity.player.Inventory +import ru.dbotthepony.mc.otm.client.screen.panels.CheckBoxLabelInputPanel import ru.dbotthepony.mc.otm.client.screen.panels.FilterSlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel @@ -23,6 +25,8 @@ class StorageBusScreen(menu: StorageBusMenu, inventory: Inventory, title: Compon } } + CheckBoxLabelInputPanel(this, frame, menu.busFilterState, TranslatableComponent("otm.gui.filter.is_whitelist"), 59f, 78f, width = 170f) + return frame } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/CheckBox.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/CheckBox.kt new file mode 100644 index 000000000..6bbd5e6d8 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/CheckBox.kt @@ -0,0 +1,104 @@ +package ru.dbotthepony.mc.otm.client.screen.panels + +import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.resources.sounds.SimpleSoundInstance +import net.minecraft.network.chat.Component +import net.minecraft.sounds.SoundEvents +import ru.dbotthepony.mc.otm.client.minecraft +import ru.dbotthepony.mc.otm.client.render.SkinElement +import ru.dbotthepony.mc.otm.client.screen.MatteryScreen +import ru.dbotthepony.mc.otm.client.screen.panels.CheckBoxPanel.Companion.REGULAR_DIMENSIONS +import ru.dbotthepony.mc.otm.menu.widget.BooleanPlayerInputWidget + +open class CheckBoxPanel( + screen: MatteryScreen<*>, + parent: EditablePanel?, + x: Float = 0f, + y: Float = 0f, + width: Float = REGULAR_DIMENSIONS, + height: Float = REGULAR_DIMENSIONS +) : EditablePanel( + screen, parent, x, y, width, height +) { + open var checked = false + + override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { + if (checked) { + CHECKBOX_CHECKED.render(stack) + } else { + CHECKBOX_UNCHECKED.render(stack) + } + } + + override fun mouseClickedInner(mouse_x: Double, mouse_y: Double, mouse_click_type: Int): Boolean { + checked = !checked + minecraft.soundManager.play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0f)) + return true + } + + companion object { + const val REGULAR_DIMENSIONS = 15f + + val CHECKBOX_UNCHECKED = SkinElement( + image_x = 18f, + image_y = 65f, + rect_w = REGULAR_DIMENSIONS, + rect_h = REGULAR_DIMENSIONS, + ) + + val CHECKBOX_CHECKED = SkinElement( + image_x = 18f, + image_y = 80f, + rect_w = REGULAR_DIMENSIONS, + rect_h = REGULAR_DIMENSIONS, + ) + } +} + +open class CheckBoxInputPanel( + screen: MatteryScreen<*>, + parent: EditablePanel?, + val widget: BooleanPlayerInputWidget, + x: Float = 0f, + y: Float = 0f, + width: Float = REGULAR_DIMENSIONS + 120f, + height: Float = REGULAR_DIMENSIONS +) : CheckBoxPanel(screen, parent, x, y, width, height) { + override var checked: Boolean + get() = widget.value + set(value) {} + + override fun mouseClickedInner(mouse_x: Double, mouse_y: Double, mouse_click_type: Int): Boolean { + super.mouseClickedInner(mouse_x, mouse_y, mouse_click_type) + widget.userInput(!checked) + return true + } +} + +open class CheckBoxLabelPanel( + screen: MatteryScreen<*>, + parent: EditablePanel?, + text: Component, + x: Float = 0f, + y: Float = 0f, + width: Float = REGULAR_DIMENSIONS + 120f, + height: Float = REGULAR_DIMENSIONS +) : EditablePanel(screen, parent, x, y, width, height) { + val checkbox = CheckBoxPanel(screen, this, 0f, 0f, REGULAR_DIMENSIONS, REGULAR_DIMENSIONS) + val label = Label(screen, this, REGULAR_DIMENSIONS + 4f, 4f, text = text) +} + +open class CheckBoxLabelInputPanel( + screen: MatteryScreen<*>, + parent: EditablePanel?, + widget: BooleanPlayerInputWidget, + text: Component, + x: Float = 0f, + y: Float = 0f, + width: Float = REGULAR_DIMENSIONS + 120f, + height: Float = REGULAR_DIMENSIONS +) : EditablePanel(screen, parent, x, y, width, height) { + val widget get() = checkbox.widget + val checkbox = CheckBoxInputPanel(screen, this, widget, 0f, 0f, REGULAR_DIMENSIONS, REGULAR_DIMENSIONS) + val label = Label(screen, this, REGULAR_DIMENSIONS + 4f, 4f, text = text) +} diff --git a/src/main/resources/assets/overdrive_that_matters/lang/en_us.json b/src/main/resources/assets/overdrive_that_matters/lang/en_us.json index 8a8da36ff..6a577c848 100644 --- a/src/main/resources/assets/overdrive_that_matters/lang/en_us.json +++ b/src/main/resources/assets/overdrive_that_matters/lang/en_us.json @@ -31,6 +31,8 @@ "otm.gui.matter.format_and_complexity": "%s / Complexity: %s", "otm.gui.matter.name": "MtU", + "otm.gui.filter.is_whitelist": "Is Whitelist", + "otm.gui.android_research": "Research Tree", "otm.gui.pattern.percentage_level": "Fill level: %s%%", diff --git a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.png b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.png index f9eb592ea389e84cf494ce05d285075b12794c12..86ed9c540ccca465dcd9e2b9c03913094c5a0346 100644 GIT binary patch literal 2798 zcmbUiX;72b_I_VNLXdz_5E@WWL5T~d2E-ze$i4`qie;&o6a@naM0Qldhf9mnvba=; zAV~#TG$2BS3MD~AP%EH-w6aBzU6z0l5J}$W`}bzvydUr0x#ygF&dgcnY?qiGPDC}b z8UTRk;%t8q00<=^po&A$k;tMT^m8HD&W`C~XJ^Qbj0g%o83=$$W@4tba|1)ak#)$; zp+qBg^{HlN?!A=DdtJ3t*}_U~zZmKtA6N0sj3}mQ=R)i2(;G|9r&g3|l%6wOga$_6 z=Z|hOR_vlwrpTn#2Gdj4Q+<%_?Z;jfp)k|@g>&PvfIU^)a4ZtTz*hCxk$^k5oOcCD zzp0ygH#p&c?L`N#A1MA*(q?8gXqY@;&2zWX7D;+1T$ zzj>2eZ_Q;2C(E-F6DuQt}0M`tlD?JF^`+MIHV5+qUq}OwDmRi~?cpKDnah z%(V6Ox0A7HG@*?8x6I#lFNi6YhCi8c**Q3Roq&(e&)GUuyZ=Kgi6o!uo%>)HMwawYB>GX9 zWZm3uR+BO#b&oXTaoQoZH9f>8}}SK0YvN*&NEh zDpQUgMSQBa`oIXR$4Ij>T`=n--+Q}y2Zd`whw`6U8oqpZkzldJc;<#=$5QoHEP4mJ zwd6c?48MTpVio+fumI}z&nIMWlaQ+ z6*E*cjQ1dw$MwpLy;WQQvjW#PEpI(5^`!H}Z?^E%^ws>~dv-9wH%B~9%&)%hil64O z67iBQR_+0e)?TeF&{vxY1m#5O8`1oRLW$6kDD9rck;+dKW+vm#>#7@p3}6JPm<+&x znNmaOUeZUrnmdT-uj?JvtLmQY8H@g{Ya$_=ZL$%{iQWHdcW=1G=|6Af!Pjsw9$jJ9{^wsDobn^6i#)VKwq7I6ZVALSvzk`q) zphrWU=mAFlT)$`)w;J~5;-s-`Dh7lMyxl@zcXsb?&7=2^4obAcK}6p@-uH*!&o$PK z4>I->*l}_4j^FYWR!pfnN_)%fC`751H|${nHEI%F!QCLh2U<3my*n55fGtr^lF$Ml z&=GGzcOZCiSy7pe$qUBKyl9=Qo*(JdTpSvSwO4P6S;xML3WU(fD**X%4=B@6A99(D z-Iq5nsAo$%&j^c&(jB=TBS+3aIU~#QlvCAG+)Vk+$mp8h>Zp;Hf{3YCld+o%@*#=J zAHx(t1a0Wf{a*mNJN`&iE2t+3x+V%zrNvk`An3qxNy~WH{3Jjvcdyqa{|)q)ghHZV z8_y|;fX=D+taWqR^dmB3N#Ijnqo#K? zWWwWczWBymDt;HXvsMjc~`xaML|_fdosf)1z(>r|YKe0+wT{j8_B! z|5JMUr&Cma<*!iN&sb&w5F`@}9c4+wi8Nqh1s%wfdw*nJc)5Uyk32Ti!eETiknvjO z=Q_Z^1cA;3rR+Kq1lsbk%u_0cW>n}vU-p?Wv=7xh(PHkIfEjjcBt4a4zcrP9I|+b% z1N?X!D_9gJ6WAS?G-JT|pe~sQhG^PR71ZB1&u~Zn=6wl-OU=XPs9kul7Fhvk6-s!3 zjbqb+$xkb2&-z4tp*b_^D7#IHWtJO&f1Cb-w?lui2%~<0!-RFqmI~!i1`rGr1uG2} zq})zTj&jCbePG2Uvl|ciH-V$I#20X;)Fm;1d7&e`YR*@atd4tjNCmCU|My7lC^U^u Wt-?OvLq*3D04@$5_NBJ$bN>P{b-wxl literal 2665 zcmbVMc{H5K7O$_r)-<~9Nee3m01p3ngkqSU^z7B>>bi6En}+ydum0;pc6i zR%u)PP(IVwfSe40d%l%ko$85vHrF}&3G>z{RdDwL-TovAQMLu^$)93E#vo*9AMA-cbcsXTCUmeQZkPvH7@+S;~a9w2HD$ty|1# z!GV=%F)=?5+vMH;2t!5VFb)%kW*a`3Rb9cXbUt_#K6WylnW`qmkjj{kGGkj;+2h;7 zwT2g_^CZsZ!UVx(2#6wA2ihE1_YL1RZwk7Cs zdd+Vc-zqUhY76duNeuB?lxp7;^?CF?y+xpt_RH8paE%IuBG=Hc6x@51`WzNL8+2c5 z=$DKK^=_!Kp3eos?c(M_(8!aTSqIwX`#cSf_hvO*8u>bI9p3Ix45Cj(Vk#= zk3)jvk++X!9bP_8z&w@J5yh@+_|!G$ofHzyUhrV%{B&hmg;2}tr3rZ9lH#w2XgDWi z{*aWr-?l%MZ~l8`xJ9L}g{}#wLA+bd6iFwXmkm z{=J7s;P7_6_c)|5_WmxtL+m4cSUU8IaQvk&71@^y!18Wm-K^BP^xO|&k*UsEbmzJK z5A2K^21Z6k>c@ab4K#J*jp4Jd;zyH({Y8s83mi_z($bQT)EmPNuiJ1#8D@Ffj~6{B zHAHfDoc{D<6|-?mf19oC+q|rRd`!SFgU~j8^nCYgPP55U`;#3RlYc$-XoZlT^l9)f*BLQRjO>=&P zv5IV0QzIkS1sArY(zG6|JK0`dv9PdExO1e>n5Q96DUc-BVkr?aN*zN9pm$L6?cr^vK;cLw|bujfPlGQK^`BA2_51&3F=oUQZ2iRW~*_72*f$(8PkV zfl*Xc|Chwew8369kw>)p^Ia%8$>JtX$^YpLV_qo!Yr-8+ynwmmS~RxH7|Nm*ZMUF) zzAi^jmwt41p3w>Q3U-5-m>3^?N@zY*E0;7C} z;cD$*U(^rG01IYWd&wU9&QLTtKTJe3Y&GeZ91yukG2LOrriC#8W_Sn;;ml^z;`%~c zIb$vJZ(h}%LCPK5ziU<;6c-l`1(E99S-hDRY(5}KZaPNswSy!PC*C8|bo~@n zEgE~Lw=)4*d;2vRh2W1Ps$6{wM5cuQA~ib5Y){vxT(fFI3;rt&&Y zGeGlO!PHO?w6ijPdQ+mLYn#X2-%VG|9s<3(>z@K+P)-ttT`ecJHWr8FTKeY)sukiJ zgmL4GJ+aDM*XqQV!wgO#djGj*(i&TsQpz5ywFMr*Sf=NE&~!Oj0DnRcsr8qumWdUx z1aT=umbO06{2LgD>_LMU`=3_`!d`|cGh-I?yX;tkx)6H*)9sy%quHTF}{?& z56qT7^*InWu;=rX$7}D?>#F7nqL_RMpNsIr`JGbVvX7jOd&aTs3x1cgs2e622;FMQd(L0=ck+8goK3cbIbRV(z3dnmU1w~Fpew*OoP3E8jZXHrz#E> zv16tAnq551S9h&TrsFYwTTxX(sA4GaKg^{rO4iDlAliFL`bm!>qFxA&LoDD=B>4Q9 zxAVT#y7dAz^U==zo>j*c(zUJS&NPJ#XYOR5oP_h3VJfp+uT_{;xSi1AyIUGB8WIE( z_9qAW26%m>uYef7YZu3RgPHHoJMdC14gq# zI!|SMixjHfq?2=^{Z+xw>RLps}~l#$>dob zWTuhFZUtn)0MHf9o4tnw09HAgMHN(vB0{xdhfL-8;`36fy;6DeIbda?nZ(7gyXY2Q zXB5(X0$Di@snI_3nXDrhu)xR|rjq!rk`JQ3f;tz3OlZ^)(!oUxJRMM40_J~X+iCn} zKvPJ72s0Hy_A44tfmzcj}wb;J~~M$yDss0u}ny$qIMM7gZ8a@EWE$n9_5mZ125 e^Zy;=&0MjG*A)V4CnD_*&aky|vaB+vT>mE@VR!)m diff --git a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.xcf b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.xcf index 53a067a3a..515415ca1 100644 --- a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.xcf +++ b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets.xcf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a5231c06b10616b3fd29a6a303539aa1007f120391df2783185cb74b979675e -size 27255 +oid sha256:289e6665dcc783a0b712a41470d3ae4a41e65a0e2b8c643f995415258cecdce8 +size 29982