From 9d7f6aeb1fa157d4b0ba07c22aec07ea8cfb0ca1 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 5 Apr 2024 03:54:47 -0400 Subject: Fix line rendering & fix colour components Co-authored-by: olim --- .../skyblock/waypoint/OrderedWaypoints.java | 27 +----------- .../skyblocker/utils/render/RenderHelper.java | 50 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 25 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java index 7f9e1ba2..93c6b3f4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java @@ -138,7 +138,7 @@ public class OrderedWaypoints { } int rgb = hex != null ? Integer.decode("0x" + hex.replace("#", "")) : Integer.MIN_VALUE; - float[] colorComponents = rgb != Integer.MIN_VALUE ? new float[] { (rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF } : new float[0]; + float[] colorComponents = rgb != Integer.MIN_VALUE ? new float[] { ((rgb >> 16) & 0xFF) / 255f, ((rgb >> 8) & 0xFF) / 255f, (rgb & 0xFF) / 255f } : new float[0]; OrderedWaypointGroup group = WAYPOINTS.computeIfAbsent(groupName, name -> new OrderedWaypointGroup(name, true, new ObjectArrayList<>())); OrderedWaypoint waypoint = new OrderedWaypoint(pos, colorComponents); @@ -247,11 +247,7 @@ public class OrderedWaypoints { current.render(wrc, RelativeIndex.CURRENT, currentIndex); next.render(wrc, RelativeIndex.NEXT, nextIndex); - //Chunk the line - //Idk why but the line is glitchy when moving sideways - Vec3d[] line = splitLine(player.getPos().add(0, 1, 0), Vec3d.ofCenter(next.getPos().up())); - - RenderHelper.renderLinesFromPoints(wrc, line, LIGHT_GRAY, 1f, 5f, true); + RenderHelper.renderLineFromCursor(wrc, Vec3d.ofCenter(next.getPos().up()), LIGHT_GRAY, 1f, 5f); } } @@ -259,25 +255,6 @@ public class OrderedWaypoints { } } - private static Vec3d[] splitLine(Vec3d start, Vec3d end) { - ObjectArrayList segments = new ObjectArrayList<>(); - - Vec3d direction = end.subtract(start).normalize(); - double length = start.subtract(end).length(); - int numSegments = (int) Math.ceil(length); - - Vec3d currentPoint = start; - - for (int i = 0; i < numSegments; i++) { - segments.add(currentPoint); - currentPoint = currentPoint.add(direction); - } - - segments.add(end); - - return segments.toArray(Vec3d[]::new); - } - private static void load() { loaded = CompletableFuture.runAsync(() -> { try (BufferedReader reader = Files.newBufferedReader(PATH)) { diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java index 05514d02..e39b5364 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java @@ -187,6 +187,56 @@ public class RenderHelper { RenderSystem.depthFunc(GL11.GL_LEQUAL); } + public static void renderLineFromCursor(WorldRenderContext context, Vec3d point, float[] colorComponents, float alpha, float lineWidth) { + Vec3d camera = context.camera().getPos(); + MatrixStack matrices = context.matrixStack(); + + matrices.push(); + matrices.translate(-camera.x, -camera.y, -camera.z); + + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder buffer = tessellator.getBuffer(); + Matrix4f positionMatrix = matrices.peek().getPositionMatrix(); + + GL11.glEnable(GL11.GL_LINE_SMOOTH); + GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST); + + RenderSystem.setShader(GameRenderer::getRenderTypeLinesProgram); + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + RenderSystem.lineWidth(lineWidth); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableCull(); + RenderSystem.enableDepthTest(); + RenderSystem.depthFunc(GL11.GL_ALWAYS); + + Vec3d offset = Vec3d.fromPolar(context.camera().getPitch(), context.camera().getYaw()); + Vec3d cameraPoint = camera.add(offset); + + buffer.begin(DrawMode.LINES, VertexFormats.LINES); + Vector3f normal = new Vector3f((float) offset.x, (float) offset.y, (float) offset.z); + buffer + .vertex(positionMatrix, (float) cameraPoint.x , (float) cameraPoint.y, (float) cameraPoint.z) + .color(colorComponents[0], colorComponents[1], colorComponents[2], alpha) + .normal(normal.x, normal.y, normal.z) + .next(); + + buffer + .vertex(positionMatrix, (float) point.getX(), (float) point.getY(), (float) point.getZ()) + .color(colorComponents[0], colorComponents[1], colorComponents[2], alpha) + .normal(normal.x, normal.y, normal.z) + .next(); + + + tessellator.draw(); + + matrices.pop(); + GL11.glDisable(GL11.GL_LINE_SMOOTH); + RenderSystem.lineWidth(1f); + RenderSystem.enableCull(); + RenderSystem.depthFunc(GL11.GL_LEQUAL); + } + public static void renderQuad(WorldRenderContext context, Vec3d[] points, float[] colorComponents, float alpha, boolean throughWalls) { Vec3d camera = context.camera().getPos(); MatrixStack matrices = context.matrixStack(); -- cgit