From 1e731b324644065ede23dd500ad4643dc3149ae1 Mon Sep 17 00:00:00 2001 From: leijurv Date: Mon, 13 Aug 2018 21:05:35 -0700 Subject: [PATCH] path fading --- src/main/java/baritone/bot/Settings.java | 1 + .../bot/behavior/impl/PathingBehavior.java | 8 +++---- .../java/baritone/bot/utils/PathRenderer.java | 23 ++++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index da8aff5b..d6d1d170 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -32,6 +32,7 @@ public class Settings { public boolean renderPath = true; public boolean chatDebug = true; public boolean chatControl = true; + public boolean fadePath = true; Settings() { diff --git a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java index 6941d17f..9bbbfa42 100644 --- a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java @@ -250,10 +250,10 @@ public class PathingBehavior extends Behavior { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - PathRenderer.drawPath(current.getPath(), renderBegin, player(), partialTicks, Color.RED); + PathRenderer.drawPath(current.getPath(), renderBegin, player(), partialTicks, Color.RED, Baritone.settings().fadePath, 10, 20); } if (next != null && next.getPath() != null) { - PathRenderer.drawPath(next.getPath(), 0, player(), partialTicks, Color.GREEN); + PathRenderer.drawPath(next.getPath(), 0, player(), partialTicks, Color.GREEN, Baritone.settings().fadePath, 10, 20); } long split = System.nanoTime(); @@ -266,10 +266,10 @@ public class PathingBehavior extends Behavior { // If there is a path calculation currently running, render the path calculation process AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - PathRenderer.drawPath(p, 0, player(), partialTicks, Color.BLUE); + PathRenderer.drawPath(p, 0, player(), partialTicks, Color.BLUE, Baritone.settings().fadePath, 10, 20); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - PathRenderer.drawPath(mr, 0, player(), partialTicks, Color.CYAN); + PathRenderer.drawPath(mr, 0, player(), partialTicks, Color.CYAN, Baritone.settings().fadePath, 10, 20); PathRenderer.drawManySelectionBoxes(player(), Arrays.asList(mr.getDest()), partialTicks, Color.CYAN); }); }); diff --git a/src/main/java/baritone/bot/utils/PathRenderer.java b/src/main/java/baritone/bot/utils/PathRenderer.java index 57bd573b..dccd736e 100644 --- a/src/main/java/baritone/bot/utils/PathRenderer.java +++ b/src/main/java/baritone/bot/utils/PathRenderer.java @@ -42,12 +42,13 @@ import static org.lwjgl.opengl.GL11.*; */ public final class PathRenderer implements Helper { - private PathRenderer() {} + private PathRenderer() { + } private static final Tessellator TESSELLATOR = Tessellator.getInstance(); private static final BufferBuilder BUFFER = TESSELLATOR.getBuffer(); - public static void drawPath(IPath path, int startIndex, EntityPlayerSP player, float partialTicks, Color color) { + public static void drawPath(IPath path, int startIndex, EntityPlayerSP player, float partialTicks, Color color, boolean fadeOut, int fadeStart, int fadeEnd) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); @@ -57,13 +58,16 @@ public final class PathRenderer implements Helper { List positions = path.positions(); int next; Tessellator tessellator = Tessellator.getInstance(); + fadeStart+=startIndex; + fadeEnd+=startIndex; for (int i = startIndex; i < positions.size() - 1; i = next) { BlockPos start = positions.get(i); next = i + 1; BlockPos end = positions.get(next); + BlockPos direction = Utils.diff(start, end); - while (next + 1 < positions.size() && direction.equals(Utils.diff(end, positions.get(next + 1)))) { + while (next + 1 < positions.size() && (!fadeOut || next + 1 < fadeStart) && direction.equals(Utils.diff(end, positions.get(next + 1)))) { next++; end = positions.get(next); } @@ -73,6 +77,19 @@ public final class PathRenderer implements Helper { double x2 = end.getX(); double y2 = end.getY(); double z2 = end.getZ(); + if (fadeOut) { + + float alpha; + if (i <= fadeStart) { + alpha = 0.4F; + } else { + if (i > fadeEnd) { + break; + } + alpha = 0.4F * (1.0F - (float)(i - fadeStart) / (float)(fadeEnd - fadeStart)); + } + GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], alpha); + } drawLine(player, x1, y1, z1, x2, y2, z2, partialTicks); tessellator.draw(); }