From 65dd7cead984bef99c7015c87c2e9a51ef0688f8 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 23 Aug 2022 22:53:42 +0700 Subject: [PATCH] Visualize blocked/blocking research --- .../mc/otm/android/AndroidResearchType.kt | 7 +++ .../dbotthepony/mc/otm/client/render/Ext.kt | 3 + .../mc/otm/client/render/RenderHelper.kt | 6 +- .../otm/client/screen/AndroidStationScreen.kt | 53 +++++++++++------- .../ru/dbotthepony/mc/otm/core/RGBAColor.kt | 1 + .../textures/gui/widgets_18.png | Bin 1179 -> 1277 bytes 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchType.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchType.kt index 8c75057fb..8ef214791 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchType.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchType.kt @@ -256,6 +256,13 @@ open class AndroidResearchType( set.addAll(research.allUnlocks) } + for (research in allPrerequisites) { + for (research2 in research.flatBlocking) { + set.add(research2) + set.addAll(research2.allUnlocks) + } + } + ListSet(set) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Ext.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Ext.kt index 2c7786f19..129b21805 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Ext.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Ext.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.client.render import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.Tesselator import com.mojang.blaze3d.vertex.VertexConsumer import com.mojang.math.Matrix4f import com.mojang.math.Vector3f @@ -10,6 +11,8 @@ import net.minecraft.network.chat.Component import net.minecraft.util.FormattedCharSequence import ru.dbotthepony.mc.otm.core.* +val tesselator: Tesselator get() = Tesselator.getInstance() + fun VertexConsumer.normal(vector: Vector): VertexConsumer = normal(vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat()) fun VertexConsumer.vertex(matrix4f: Matrix4f, vector: Vector): VertexConsumer = vertex(matrix4f, vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat()) fun VertexConsumer.color(color: RGBAColor): VertexConsumer = color(color.red, color.green, color.blue, color.alpha) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt index 768b87467..24052188b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt @@ -40,7 +40,7 @@ fun drawTexturedRect( RenderSystem.defaultBlendFunc() RenderSystem.depthFunc(GL11.GL_ALWAYS) - val builder = Tesselator.getInstance().builder + val builder = tesselator.builder builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX) builder.vertex(matrix, x, y + height, zLevel).uv(u0, v1).endVertex() @@ -105,7 +105,7 @@ fun colorSphere(matrix: Matrix4f, radius: Float) { RenderSystem.enableBlend() RenderSystem.defaultBlendFunc() - val builder = Tesselator.getInstance().builder + val builder = tesselator.builder builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR) val turnStep = Math.PI * (1 / fragments.toDouble()) * 2 @@ -299,7 +299,7 @@ fun drawRect( RenderSystem.setShader(GameRenderer::getPositionColorShader) RenderSystem.depthFunc(GL11.GL_ALWAYS) - val tess = Tesselator.getInstance() + val tess = tesselator val builder = tess.builder builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/AndroidStationScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/AndroidStationScreen.kt index 74bde26ee..22f3a28a0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/AndroidStationScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/AndroidStationScreen.kt @@ -20,6 +20,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.capability.AndroidCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.client.minecraft +import ru.dbotthepony.mc.otm.client.render.Widgets18 import ru.dbotthepony.mc.otm.client.render.drawColor import ru.dbotthepony.mc.otm.client.render.drawLine import ru.dbotthepony.mc.otm.client.render.drawRect @@ -281,28 +282,42 @@ private open class AndroidResearchButton( } override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { - minecraft.player?.getCapability(MatteryCapability.ANDROID)?.ifPresentK { - if (node.isResearched) { - AndroidStationScreen.RESEARCHED.setSystemColor() - } else if (node.canResearch) { - AndroidStationScreen.CAN_BE_RESEARCHED.setSystemColor() - } else { - AndroidStationScreen.CAN_NOT_BE_RESEARCHED.setSystemColor() - } + val hovered = (screen as AndroidStationScreen).hoveredResearch - val icon = node.skinIcon + val isBlockedByHovered = hovered != null && node.type in hovered.type.allBlocking - if (icon != null) { - icon.render(stack, 0f, 0f, width, height) - } else { - drawRect(stack, 0f, 0f, width, height) - } + if (isBlockedByHovered) { + AndroidStationScreen.CAN_NOT_BE_RESEARCHED.setSystemColor() - val text = node.iconText + drawRect(stack, 0f, 0f, width, height) + } - if (text != null) { - font.drawShadow(stack, text, width - font.width(text), height - font.lineHeight, -0x1) - } + if (node.isResearched) { + AndroidStationScreen.RESEARCHED.setSystemColor() + } else if (node.canResearch) { + AndroidStationScreen.CAN_BE_RESEARCHED.setSystemColor() + } else { + AndroidStationScreen.CAN_NOT_BE_RESEARCHED.setSystemColor() + } + + val icon = node.skinIcon + + if (icon != null) { + icon.render(stack, 0f, 0f, width, height) + } else { + drawRect(stack, 0f, 0f, width, height) + } + + if (isBlockedByHovered) { + RGBAColor.RED.setSystemColor() + + Widgets18.CROSS.render(stack) + } + + val text = node.iconText + + if (text != null) { + font.drawShadow(stack, text, width - font.width(text), height - font.lineHeight, -0x1) } drawColor = RGBAColor.WHITE @@ -316,7 +331,7 @@ private open class AndroidResearchButton( drawLine(stack, x1, y1, x2, y2, 0.5f) } - val hovered = (screen as AndroidStationScreen).hoveredResearch ?: return + hovered ?: return val lines = highlightLines[hovered.type] ?: return drawColor = RGBAColor.LIGHT_GREEN diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt index c4b1b7458..c84eaf7e7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/RGBAColor.kt @@ -53,6 +53,7 @@ data class RGBAColor(val red: Float, val green: Float, val blue: Float, val alph companion object { val BLACK = RGBAColor(0f, 0f, 0f, 1f) val WHITE = RGBAColor(1f, 1f, 1f, 1f) + val RED = RGBAColor(1f, 0f, 0f) val GREEN = RGBAColor(0f, 1f, 0f, 1f) val LIGHT_GREEN = RGBAColor(136, 255, 124) val SLATE_GRAY = RGBAColor(64, 64, 64) diff --git a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets_18.png b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets_18.png index faa5401c5ac3df2c311d01b1fb0340edba02848f..3ae0818c48e85df9386f47bd8a4999a5ddaa2558 100644 GIT binary patch delta 964 zcmV;#13Ubi3H=F>B!7fyLqkwWLqi~Na&Km7Y-IodD3N`UJxIeq9K~N#rA1mgSWv_v zL+xZiRK!uLSOg2DtnNgNw7S4z7YA_yOYR_wexb zF2=Lm&;2=qg`&X#k4QYnG~FcLAfDMYHO~9QVOEg}#OK80I$e4Ls4A*InB7r3&k%9;r z4OCHsi5RUaDSrmiv>$izkJ$bcxny!x!N{?IIuuB@AN&t~cWacUCY_`}9O!?stdB9k zw+pnJmi2vXS?v?R`wU#EU4Oj=%zl#I>}ruCAhZo!Tz55j54hX`hMzP^mu$&PQz(^y z_cQvYJTQ0*46Hf5b@p-k0A#7Fwo;dfuSiPnkb-YigZ&dFAe?NcDz^sMMUg&yQ~iG_xqRq)9IAe&-r}*vcKQ&v--K+ZvLu&7({c!r1335 zM7(YFh1Yf6)OBqT6rS$R36}0Lsvi{)d<*C9et%U}lOd5(N^P(_s)U3O0;tdc?GDVL zYHH5FZQHiTcDGBN+tT*^wsX&EDujd&0;oXv428wepxx?pY$$|;4+5xQ__U$3ref%Z z)X;WL6|<&#D%EE{g!;epNkRY>x;`>z3NtmZOHRR_u@VwKjCm6r%Z{n4Ds_Ky!w1+{ z1%LD?Al6>9$qApIn1Vfvq1*9G)(N2kdMVv0&R7tv9q{eiqPc5~x>eNJcJ4X+cJ(+G zKIzk=U_u47nGos^&?VtBbj;XYu&o-q+ckHc5CUiuAv6^%e^H&4IF}ObbKjq-TkS%K z%?D6_kf~hCgxK75K0=7i2aw?TooSa4VjOk=^`C0b)qkozm#5nQpCv&uv`&Z(erCcy mBm=Wy10w;Ga03b#fDs>|&~9!{g6Vbu0000 zSe-10ia1IYi(sL&62R|084ld5RI=Bjg;0K7Klar#0l=#1- z&?3fz<9@um_qclp2=y{k&A>RIYL=0T$HZ)IMGU^86JZ1}jDLQKnR+6* zkx9)Fhl#~v8_R9XN`^{2MI2F7jq-)8%L?Z$&T6^Jn)l={4CS@uG}mbkA&x~Pkc0>s zRcxRP3sG7%Qh!XOXg}uRA9Vala>?Y{03*jdDo`Oge(*o|-K|-eoN$vuF`(ncwm(LI z;4aXp+4lFbZ8uH;|1)rHhU7?onnIxf zyr0oG<$%6hpnKKrt+|iW2OvXTE!_YIhrno&ve!J`-G9~I+rMX;{rv!Fw{oKs&uu&a z000JJOGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Rh1{Dt= zFkDYl0RR93mq|oHRCwC$+(C-MFcb#h*J1AADa1{;;+e&5HsUEfNoOU*(rQhkQ}z2m zXrT>Jd4E4IwY7xF8sL0BU+wR9yP|RS`~B7adc7_h=X5&xR^d(jeCr!eDRn6&tr9Gu1A;u9 z^ZmAMT~9**Ev-QF!W` za|xX}9YY>cL)#@?$1^$=-46n2Vau;amN54UyXF!M-pSYe3N~d)H07AKZJYd68a}|6 zbwIZQV(vAYlJI%P5)5=e3zRQ$#)4pO!C&qzntG2>-bIaVm(JnU-6QCLCKP