1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package moe.nea.firmament.util.render
import com.mojang.blaze3d.systems.RenderSystem
import me.shedaniel.math.Color
import util.render.CustomRenderLayers
import net.minecraft.client.gl.RenderPipelines
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.ScreenRect
import net.minecraft.client.gui.render.state.special.SpecialGuiElementRenderState
import net.minecraft.util.Identifier
import moe.nea.firmament.util.MC
fun DrawContext.isUntranslatedGuiDrawContext(): Boolean {
return matrices.m00 == 1F && matrices.m11 == 1f && matrices.m01 == 0F && matrices.m10 == 0F && matrices.m20 == 0f && matrices.m21 == 0F
}
@Deprecated("Use the other drawGuiTexture")
fun DrawContext.drawGuiTexture(
x: Int, y: Int, z: Int, width: Int, height: Int, sprite: Identifier
) = this.drawGuiTexture(RenderPipelines.GUI_TEXTURED, sprite, x, y, width, height)
fun DrawContext.drawGuiTexture(
sprite: Identifier,
x: Int, y: Int, width: Int, height: Int
) = this.drawGuiTexture(RenderPipelines.GUI_TEXTURED, sprite, x, y, width, height)
fun DrawContext.drawTexture(
sprite: Identifier,
x: Int,
y: Int,
u: Float,
v: Float,
width: Int,
height: Int,
textureWidth: Int,
textureHeight: Int
) {
this.drawTexture(
RenderPipelines.GUI_TEXTURED,
sprite,
x,
y,
u,
v,
width,
height,
width,
height,
textureWidth,
textureHeight
)
}
fun DrawContext.drawLine(fromX: Int, fromY: Int, toX: Int, toY: Int, color: Color) {
// TODO: push scissors
// TODO: use matrix translations and a different render layer
if (toY < fromY) {
drawLine(toX, toY, fromX, fromY, color)
return
}
val rect = ScreenRect(fromX, fromY, toX - fromX, toY - fromY).transform(matrices)
RenderSystem.lineWidth(MC.window.scaleFactor.toFloat())
// TODO: this also requires adding a List<SpecialGuiElementRenderer<?>> entry in guirenderer
// TODO: state.addSpecialElement(object : SpecialGuiElementRenderState {
// override fun x1(): Int {
// return fromX
// }
//
// override fun x2(): Int {
// return toY
// }
//
// override fun y1(): Int {
// return fromY
// }
//
// override fun y2(): Int {
// return toY
// }
//
// override fun scale(): Float {
// return 1f
// }
//
// override fun scissorArea(): ScreenRect? {
// return rect
// }
//
// override fun bounds(): ScreenRect? {
// return rect
// }
//
// })
// draw { vertexConsumers ->
// val buf = vertexConsumers.getBuffer(CustomRenderLayers.LINES)
// val matrix = this.matrices.peek()
// buf.vertex(matrix, fromX.toFloat(), fromY.toFloat(), 0F).color(color.color)
// .normal(toX - fromX.toFloat(), toY - fromY.toFloat(), 0F)
// buf.vertex(matrix, toX.toFloat(), toY.toFloat(), 0F).color(color.color)
// .normal(toX - fromX.toFloat(), toY - fromY.toFloat(), 0F)
// }
}
|