aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt')
-rw-r--r--src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt b/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
new file mode 100644
index 0000000..a58ffdc
--- /dev/null
+++ b/src/main/kotlin/util/render/MultiSpecialGuiRenderState.kt
@@ -0,0 +1,47 @@
+package moe.nea.firmament.util.render
+
+import net.minecraft.client.gui.navigation.ScreenRectangle
+import net.minecraft.client.gui.render.pip.PictureInPictureRenderer
+import net.minecraft.client.gui.render.state.GuiRenderState
+import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState
+import net.minecraft.client.renderer.MultiBufferSource
+
+abstract class MultiSpecialGuiRenderState : PictureInPictureRenderState {
+ // I wish i had manifolds @Self type here... Maybe i should switch to java after all :(
+ abstract fun createRenderer(vertexConsumers: MultiBufferSource.BufferSource): MultiSpecialGuiRenderer<out MultiSpecialGuiRenderState>
+ abstract val x1: Int
+ abstract val x2: Int
+ abstract val y1: Int
+ abstract val y2: Int
+ abstract val scale: Float
+ abstract val bounds: ScreenRectangle?
+ abstract val scissorArea: ScreenRectangle?
+ override fun x0(): Int = x1
+
+ override fun x1(): Int = x2
+
+ override fun y0(): Int = y1
+
+ override fun y1(): Int = y2
+
+ override fun scale(): Float = scale
+
+ override fun scissorArea(): ScreenRectangle? = scissorArea
+
+ override fun bounds(): ScreenRectangle? = bounds
+
+}
+
+abstract class MultiSpecialGuiRenderer<T : MultiSpecialGuiRenderState>(
+ vertexConsumers: MultiBufferSource.BufferSource
+) : PictureInPictureRenderer<T>(vertexConsumers) {
+ var wasUsedThisFrame = false
+ fun consumeRender(): Boolean {
+ return wasUsedThisFrame.also { wasUsedThisFrame = false }
+ }
+
+ override fun blitTexture(element: T, state: GuiRenderState) {
+ wasUsedThisFrame = true
+ super.blitTexture(element, state)
+ }
+}