From 8e962f69ffb2395c192a5f7e2c3ac3038995f985 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 23 Aug 2023 16:57:59 +0700 Subject: [PATCH] Add preRender protected hook to panels, and remove unused postrender hook --- .../mc/otm/client/screen/MatteryScreen.kt | 12 ++------ .../otm/client/screen/panels/EditablePanel.kt | 28 ++++++++----------- .../otm/client/screen/panels/Panel2Widget.kt | 3 +- .../client/screen/panels/button/Buttons.kt | 11 +------- 4 files changed, 15 insertions(+), 39 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt index 1599f9f19..ede81d6aa 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt @@ -665,18 +665,10 @@ abstract class MatteryScreen(menu: T, inventory: Inventory, tit RenderSystem.enableBlend() RenderSystem.enableDepthTest() - for (i in panels.indices.reversed()) { - val panel = panels[i] + for (panel in panels.asReversed()) { RenderSystem.depthFunc(GL11.GL_ALWAYS) RenderSystem.setShaderColor(1f, 1f, 1f, 1f) - panel.render(graphics, false, mouseXf, mouseYf, partialTick) - } - - for (i in panels.indices.reversed()) { - val panel = panels[i] - RenderSystem.depthFunc(GL11.GL_ALWAYS) - RenderSystem.setShaderColor(1f, 1f, 1f, 1f) - panel.render(graphics, true, mouseXf, mouseYf, partialTick) + panel.render(graphics, mouseXf, mouseYf, partialTick) } RenderSystem.depthFunc(GL11.GL_LESS) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt index cccf0c93e..fb1c093ac 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt @@ -422,8 +422,6 @@ open class EditablePanel @JvmOverloads constructor( var acceptKeyboardInput = true var grabMouseInput = false - open val needsPostRender: Boolean get() = false - fun tryToGrabMouseInput(): Boolean { if (grabMouseInput) { return true @@ -788,6 +786,7 @@ open class EditablePanel @JvmOverloads constructor( } protected open fun innerRender(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) {} + protected open fun preRender(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) {} protected open fun innerRenderPost(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) {} protected open fun innerRenderTooltips(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float): Boolean { return false @@ -840,7 +839,7 @@ open class EditablePanel @JvmOverloads constructor( } } - fun render(graphics: GuiGraphics, post: Boolean, mouseX: Float, mouseY: Float, partialTick: Float) { + fun render(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { once = true if (!isVisible()) { @@ -849,15 +848,12 @@ open class EditablePanel @JvmOverloads constructor( val poseStack = graphics.pose() - if (!post) { - performLayoutIfNeeded() + performLayoutIfNeeded() - val parent = this.parent - - if (parent == null) { - absoluteX = x - absoluteY = y - } + if (parent == null) { + preRender(graphics, mouseX, mouseY, partialTick) + absoluteX = x + absoluteY = y } val scissor = this.scissor @@ -877,27 +873,25 @@ open class EditablePanel @JvmOverloads constructor( val currentScissorRect = currentScissorRect - if ((!post || needsPostRender) && (currentScissorRect == null || currentScissorRect.crossScaled(absoluteX, absoluteY, width, height))) { + if (currentScissorRect == null || currentScissorRect.crossScaled(absoluteX, absoluteY, width, height)) { // do not render if we are getting cut off by screen scissor clearDepth(graphics, absoluteX, absoluteY, width, height) poseStack.pushPose() poseStack.translate(absoluteX.toDouble(), absoluteY.toDouble(), 10.0) RenderSystem.setShaderColor(1f, 1f, 1f, if (isFlashFrameRecursive) 0.5f else 1f) - if (post) - innerRenderPost(graphics, mouseX, mouseY, partialTick) - else - innerRender(graphics, mouseX, mouseY, partialTick) + innerRender(graphics, mouseX, mouseY, partialTick) RenderSystem.setShaderColor(1f, 1f, 1f, 1f) poseStack.popPose() } for (child in visibleChildrenInternal.asReversed()) { + child.preRender(graphics, mouseX, mouseY, partialTick) child.absoluteX = absoluteX + child.x + xOffset child.absoluteY = absoluteY + child.y + yOffset - child.render(graphics, post, mouseX, mouseY, partialTick) + child.render(graphics, mouseX, mouseY, partialTick) } if (scissor) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/Panel2Widget.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/Panel2Widget.kt index 65ce9462e..7610be9bd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/Panel2Widget.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/Panel2Widget.kt @@ -20,8 +20,7 @@ class Panel2Widget>( val yFloat = mouseY.toFloat() panel.tickHover(xFloat, yFloat) - panel.render(graphics, false, xFloat, yFloat, partialTick) - panel.render(graphics, true, xFloat, yFloat, partialTick) + panel.render(graphics, xFloat, yFloat, partialTick) panel.renderTooltips(graphics, xFloat, yFloat, partialTick) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt index bc1466742..298603b00 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt @@ -624,16 +624,7 @@ class DeviceControls>( } } - override fun innerRender(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { - if (parent is FramePanel<*>) { - x = parent!!.width + 3f - y = dockTop - } - } - - override fun tickInner() { - super.tickInner() - + override fun preRender(graphics: GuiGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { if (parent is FramePanel<*>) { x = parent!!.width + 3f y = dockTop