Wie code ich eine diagonale Linie in Minecraft Fabric 1.21.5?
Die Frage steht bereits im Titel. Ich habe versucht, das Problem selbst zu lösen, kenne mich jedoch mit Vertex Rendering nicht aus. Gibt es so etwas wie context.drawVerticalLine() oder muss man sich das selbst machen?
public class SkyClient implements ClientModInitializer {
private static final Identifier EXAMPLE_LAYER = Identifier.of(Sky.MOD_ID, "hud-example-layer");
public static void drawLine(DrawContext context, int x1, int y1, int x2, int y2, int color) {
int dx = Math.abs(x2 - x1);
int dy = Math.abs(y2 - y1);
int sx = x1 < x2 ? 1 : -1;
int sy = y1 < y2 ? 1 : -1;
int err = dx - dy;
while (true) {
context.fill(x1, y1, x1 + 1, y1 + 1, color);
if (x1 == x2 && y1 == y2) break;
int e2 = 2 * err;
if (e2 > -dy) {
err -= dy;
x1 += sx;
}
if (e2 < dx) {
err += dx;
y1 += sy;
}
}
}
@Override
public void onInitializeClient() {
HudLayerRegistrationCallback.EVENT.register(layeredDrawer -> layeredDrawer.attachLayerBefore(IdentifiedLayer.CHAT, EXAMPLE_LAYER, SkyClient::render));
}
private static void render(DrawContext context, RenderTickCounter tickCounter) {
MinecraftClient client = MinecraftClient.getInstance();
Text text = Text.translatable("info_hud");
context.drawText(MinecraftClient.getInstance().textRenderer, text, 0, 0, 0xFFFFFF, false);
int rectangleX = 0;
int rectangleY = 0;
int rectangleWidth = 100;
int rectangleHeight = 100;
context.fill(rectangleX, rectangleY, rectangleX + rectangleWidth, rectangleY + rectangleHeight, 0xFF0000FF);
context.drawVerticalLine(rectangleX + rectangleWidth / 2, rectangleY, rectangleY + rectangleHeight, 0xFF00FF00);
context.drawHorizontalLine(rectangleX, rectangleX + rectangleWidth - 1, rectangleX + rectangleWidth / 2, 0xFF00FF00);
context.drawBorder(rectangleX, rectangleY, rectangleWidth, rectangleHeight, 0xFFFF0000);
drawLine(context, 0, 100, 150, 200, 0xFFFF0000);
}
}