From 61917ddc2f91efc9ffffa4da2580fa9323f9f394 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 15 May 2025 22:15:35 +0300 Subject: [PATCH] Refactor GUIScreenToolAbility to support tooltips --- .../inventory/gui/GUIScreenToolAbility.java | 55 ++++++++++-------- .../textures/gui/tool/gui_tool_ability.png | Bin 4073 -> 4131 bytes 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 7980f72a5..7186cf0c0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -3,12 +3,9 @@ package com.hbm.inventory.gui; import java.util.ArrayList; import java.util.List; -import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; -import com.hbm.items.ModItems; -import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.items.tool.ItemToolAbility; import com.hbm.lib.RefStrings; import com.hbm.util.EnumUtil; @@ -17,11 +14,8 @@ import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; import net.minecraft.util.ResourceLocation; public class GUIScreenToolAbility extends GuiScreen { @@ -55,19 +49,19 @@ public class GUIScreenToolAbility extends GuiScreen { public static final List abilitiesHarvest = new ArrayList<>(); static { - abilitiesArea.add(new AbilityInfo(null, 0, 76, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 76, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 76, true)); - abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 76, true)); + abilitiesArea.add(new AbilityInfo(null, 0, 91, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 91, true)); + abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 91, true)); - abilitiesHarvest.add(new AbilityInfo(null, 0, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 92, false)); + abilitiesHarvest.add(new AbilityInfo(null, 0, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 107, false)); } // TODO: availability status for abilities; list of presets; selected preset index; @@ -121,12 +115,8 @@ public class GUIScreenToolAbility extends GuiScreen { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); // Draw window background - drawTexturedModalRect(guiLeft, guiTop, 0, 0, 100, ySize); - for (int i = 0; i < insetWidth; i += 20) { - drawTexturedModalRect(guiLeft + 100 + i, guiTop, 80, 0, 20, ySize); - } - drawTexturedModalRect(guiLeft + 100 + insetWidth, guiTop, 100, 0, xSize - insetWidth - 100, ySize); - + drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); + // Draw the switches drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); @@ -143,9 +133,24 @@ public class GUIScreenToolAbility extends GuiScreen { drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 186 + i * 9, 18, 9, 9); } } + + // Draw tooltip + // TODO + } + + protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { + int midWidth = width - keepLeft - keepRight; + int realMidWidth = realWidth - keepLeft - keepRight; + drawTexturedModalRect(x, y, u, v, keepLeft, height); + for (int i = 0; i < realMidWidth; i += midWidth) { + drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); + } + drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); } protected void drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { + // TODO: Store hovered ability, use it in click handling and the dynamic tooltip + for (int i = 0; i < abilities.size(); ++i) { AbilityInfo abilityInfo = abilities.get(i); boolean available = true; // TODO @@ -181,7 +186,7 @@ public class GUIScreenToolAbility extends GuiScreen { } protected void drawDigit(int digit, int x, int y) { - drawTexturedModalRect(x, y, digit * 10, 108, 10, 15); + drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); } private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 38157a296cd8dc963d8e0bb794f70740328f067c..04e94e87826698d1ddda65718545601c72a63bb8 100644 GIT binary patch literal 4131 zcmcImc{JPG+WsZ9hPKE(EgcMPRZ&7uTT@PnQ$tKub&grkqNWOhm>P+WI_aUN9yH2n zQ58c)N)TwbH^d+%rO_3n4?XYaN4^WJxI zMC_A2EDHd@K3f}0X8-{0KoB6kd#Ce8mtNZ$ph7GxoI?El0YED~Hr>>o=CuDV!S!WP z)^S*>aez})=~3CQS_gPVa-^FsIfmh$$HFZ#j(N_uhgiCk^nPJ4b9`<}%kEyy|NO!wbg z1KmS^JR=@9S{lzQ)>1`s6z2xNwr6}7;oh4OL$@)oWVHL&5YgKOCH{{dyHcdoKQB!r zL`WzMrq~TFH>aJiMDM-$B=T~p_+ds*>%Hm8hJGCI;-WF-O;{Pyc;x1DDV-2a+;1m` zl4hxC(iiUgrxj>^mG~Dn%Hx9f8xk52PqC!BVBiRdUg3{8kx;Yr^IR3t`UZYS5YGr zhLR75(!|AF3*w6CXBl1dDsQ$JpJWH2a?fMuH9Ma1=V~~1<;V8<4sx0WrgB>_ zGlpF+CzzTpQn8rD%_ui&T*A}}D0_TUN=nlL62G){lyqorl~yTmT$-mWs5*#}8R7*h z^xvED^lOJ;uxQ!%f1g!SW-YeP02`*58{ITh28^(Lb$OTSQ zAAgwaCa-$loh2PN*{AdN?v^Rz6;NJjF+yz>rEE^toCFLRWZ&KrK!4=^ovkO$@|#IM z8bHfZ!VKw8@3#&hAQzlJRuIQw+PR-2qu8G8#)Rbyef2R13JvB6H7hQ7Wu)N&_frFv zzSKw=p5RnV!waf5fESej+VW~kY0MHSq-=G?U_G2aQLA$?tmZhGj8rDd{^~4 zwS6VkLSDs~J>o9-o`sml)pjuxeb0GzA?8GRZ{_NvZ$TYFo*#t$r<-5qS3^wycF1z} zQKP~@er%Va^7E%im=OUNvmrn=$p`toydjvGp+3DR+w#h~r2bN}HUV<~bT-F_bi-yn zG0oqhpjJck?9|}xgfU1Q_P9>J;Y(aSMa}R)={*9%fI`^CFv!&)#x|r z@ioZ|Y}DFxR9#(LW^e$p{i+HK(Hza~`gr|gYw3$Ow<@H8x=RC~hK?&@)R915%~fus z67w#=(`E+`p2=8v%}@Bgt~LIhdq^khdKsF2a`SrEOU6a;;>vKuGEDcbcy%G7Nv=S> z-xaz-s2H!s9-?h~b%4B^5?vTH*Ln>9%k0`(e0N-Q*RQbN&#!Q%zt1?A&`ly@V&L*z z!uefm1Gud+rK@2ZQ$i!nJ?5<`iFvUqdYdSEb#V{A0s*K<>CfIa*Di9`Y*p(3bwa^U zB}XTI&`kc6scPhsD2FV^{$UhH;KXNem~}IW`E47??BF7U+1$gnsX*lVFZbtd&$4~j zTkfO0;y8(U+AGZDYJTEGs<&%ns^M|qye62P`s|2-7=nr4^5okWZ#RgMWL5vYI6BwC z*Rg-xl31=!x0b}eT7H_$2_=jRJTUqws;UBrXX?+@+-&SizAhMvF+B=yQABW9)B0cq zkl!9b^z^x64x^I7r!5bJs;O)mxyYvii>9p zW?N4PVtdVC>k+Saf)}2-`ilET?aDoFWuMuZ)xS0{r-?i?#b$>8@bLR8dZsS+IkIWw zu@k!LMLIc9paj}MyX+1L$2`SjqA=2vw5_~SDNEp>Q$sc<-79P)RLyid@Ab}%)}v-9 z7aF?FBhUG=P&=mw{%@1UO9MxN;{YB=1px4l@Bf;x1b~0oia9_;QtA>nzvOw!4I)6s zW@cua5>-Lq$n7mGbT>~S=N#xLSPMPZU(qL=8zAkkdIFAIo}%|Lnd#Z!oj*YV03`pE zJ;k=Bq}6j5@Om=wi?^TBXcmum^ZX?v(P(t!_{V(}DFx&2Z%MJK63}$+Xc8!XeaiMk zp>36Y%&k1v(n}y%8$4Wx4&uE4V!CkRmGFub_MRw$C8-F%zJK)DGH&UUrl;f&v?CFX z-*n~8C6~@q_O^?v!=`)ofp=K$kOic7nEngm*${kk-~K9{>7H>xhdO%?zM%EYXfBZd z06*12d@n*sjxH`nLff{-3AifPUCFC++r&(2(-M4xrf=M?8l51M6~DGP_H30M0m-b3 z-4-thDhV-P&(={lH%A^0H*9altq;`K+#T*&EkhFDjI9W;p>AOhGn+dfSh&F%S@$<5 zyQ{_@$2R|p9QgJT=1V8e4Tf+X$@}gcBk^IFFZDg)7FTS-#WmybUDSDLXw;zg4AaDnICt#kM)BE#n; zx@g#L(vsX)^t}7qtK&}SmOnc{_oS55>{`XK$lgPtS1>VN+MQ`A`;tQzpw1>o>Ql$F zcfq+y1>ZelMOmBakRo8aLQIqf$EAVc;*&MZ>99Y7jsktZH11!?*3tll6`cMxL7$#g z{A{&bqn&jFz6uL+YiP_(LN@G`(Y*kK+P0)h_h#TVAgPWfc7cczWrLEA$%A%ba(2h! z=TBLNN&AG22a7vQ{hZ|rGx=&1OZVt4K`csgo;xs;{{!@FkWs#GN%VYeXFih740{o; zC#4WY?0((S{r!N?z!&(^;dkezHZDUBQo7(L!Aut%^MoH%S1r2N`$J{yF(>WsjSY7_ zm;iIojb6Wl2zH_DlM5IW%Jrwuec>kGO!|=A z)`*6U_U>^{j)GZ6By^x|VxRtQ&1EcH{F+6jm z`y(mQ3g%twQzlVMOm$E>y3Vq>ei^VUSZs9r&Mn}7OnhF;l*a{_d1;be(74dy5leZS@AE~Gq18!j9<9S#u+57&L?KUO*;6~CRwS9hsu!xNRhI(JlNnOI4O zMlWisk7k-xIUeElkk&G`vsAOxgw*chrMKWJJ{OevGg%NkUpkwuN;h@I@MUenwNW$2 z3g;XVbt+rdw}ZO~8al%F+9v4_PYc}-Pr_S2HHXjtbTb*mGi*MOYsLqa1PNH zVKLfmFcaLS_TBsJ5SsuM^YB?E6Dd-euRz%{S^1U01WJas`mJP$C6}*FodlKEFL^z0 zB2Q45$N5e=@NPMK@s-^E=@XlOwWeGBT5ncp=hJ^2xK!ZQ)ri~47dew-J^zfIf+Z#KjJ()Q`oC)wOTUJ@--8{c^% zu?tyTGhSURA=VIikLLqV7Oa_2P+p-*?2%lgFSQ!2-p0&2L<*}I@y4WM^zKW1&XIEpC5$cR6J;M*;aC{kGBG7PebqHNxZ ziuWds7raeoV&>~QKz@p#cwx>ZeF>ig1A>R+Tjpg7j+#SdWnFupgCbXqtLUsUeZ6Yqa{!(Im~YULy)P zc@czGcY<9N=9HiZN}|=hLU18mm0{mnR{boQzxjAb$Pbdmn?xQMy*UheD~;C`|6VI$ zxufxZiE@PmYW5U~y@Eo0Vc6R*uWgC_#dB0bazp|89)`5}*FJT<`pzgaQV!TzO9AO$ ztDoQ9stYcZ0Er(Gq@@0bc>bG?{ud$Wv*b>eU=I8%VfcT6|CtE<7YY2^9sMT{-id9A Y+%?sns|xME13Sgm%F&W|!SCkZ0a)dVX8-^I literal 4073 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