rudimentary path rendering
This commit is contained in:
parent
3dea7eb4f3
commit
e7c27e04ac
@ -1,9 +1,27 @@
|
|||||||
package baritone.bot.behavior.impl;
|
package baritone.bot.behavior.impl;
|
||||||
|
|
||||||
import baritone.bot.behavior.Behavior;
|
import baritone.bot.behavior.Behavior;
|
||||||
|
import baritone.bot.event.events.ChatEvent;
|
||||||
import baritone.bot.event.events.RenderEvent;
|
import baritone.bot.event.events.RenderEvent;
|
||||||
|
import baritone.bot.pathing.calc.AStarPathFinder;
|
||||||
|
import baritone.bot.pathing.calc.IPathFinder;
|
||||||
|
import baritone.bot.pathing.goals.Goal;
|
||||||
|
import baritone.bot.pathing.goals.GoalBlock;
|
||||||
import baritone.bot.pathing.path.IPath;
|
import baritone.bot.pathing.path.IPath;
|
||||||
import baritone.bot.pathing.path.PathExecutor;
|
import baritone.bot.pathing.path.PathExecutor;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.text.TextComponentString;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class PathingBehavior extends Behavior {
|
public class PathingBehavior extends Behavior {
|
||||||
|
|
||||||
@ -13,13 +31,15 @@ public class PathingBehavior extends Behavior {
|
|||||||
|
|
||||||
private PathExecutor current;
|
private PathExecutor current;
|
||||||
|
|
||||||
|
private Goal goal;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTick() {
|
public void onTick() {
|
||||||
System.out.println("Ticking");
|
//System.out.println("Ticking");
|
||||||
if (current == null) {
|
if (current == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
current.onTick();
|
//current.onTick();
|
||||||
if (current.failed() || current.finished()) {
|
if (current.failed() || current.finished()) {
|
||||||
current = null;
|
current = null;
|
||||||
}
|
}
|
||||||
@ -36,10 +56,136 @@ public class PathingBehavior extends Behavior {
|
|||||||
return current.getPath();
|
return current.getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private static void chatRaw(String s) {
|
||||||
public void onRenderPass(RenderEvent event) {
|
Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new TextComponentString(s));
|
||||||
System.out.println("Render passing");
|
|
||||||
System.out.println(event.getPartialTicks());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSendChatMessage(ChatEvent event) {
|
||||||
|
String msg = event.getMessage();
|
||||||
|
if (msg.equals("goal")) {
|
||||||
|
goal = new GoalBlock(playerFeet());
|
||||||
|
chatRaw("Goal: " + goal);
|
||||||
|
event.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (msg.equals("path")) {
|
||||||
|
findPathInNewThread(playerFeet(), true);
|
||||||
|
event.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In a new thread, pathfind to target blockpos
|
||||||
|
*
|
||||||
|
* @param start
|
||||||
|
* @param talkAboutIt
|
||||||
|
*/
|
||||||
|
public void findPathInNewThread(final BlockPos start, final boolean talkAboutIt) {
|
||||||
|
|
||||||
|
new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (talkAboutIt) {
|
||||||
|
|
||||||
|
chatRaw("Starting to search for path from " + start + " to " + goal);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
IPath path = findPath(start);
|
||||||
|
if (path != null) {
|
||||||
|
current = new PathExecutor(path);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
/*isThereAnythingInProgress = false;
|
||||||
|
if (!currentPath.goal.isInGoal(currentPath.end)) {
|
||||||
|
if (talkAboutIt) {
|
||||||
|
Out.gui("I couldn't get all the way to " + goal + ", but I'm going to get as close as I can. " + currentPath.numNodes + " nodes considered", Out.Mode.Standard);
|
||||||
|
}
|
||||||
|
planAhead();
|
||||||
|
} else if (talkAboutIt) {
|
||||||
|
Out.gui("Finished finding a path from " + start + " to " + goal + ". " + currentPath.numNodes + " nodes considered", Out.Mode.Debug);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actually do the pathing
|
||||||
|
*
|
||||||
|
* @param start
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private IPath findPath(BlockPos start) {
|
||||||
|
if (goal == null) {
|
||||||
|
chatRaw("no goal");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
IPathFinder pf = new AStarPathFinder(start, goal);
|
||||||
|
IPath path = pf.calculate();
|
||||||
|
return path;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRenderPass(RenderEvent event) {
|
||||||
|
//System.out.println("Render passing");
|
||||||
|
//System.out.println(event.getPartialTicks());
|
||||||
|
drawPath(player(), event.getPartialTicks(), Color.RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawPath(EntityPlayerSP player, float partialTicks, Color color) {
|
||||||
|
|
||||||
|
GlStateManager.enableBlend();
|
||||||
|
GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
|
||||||
|
GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F);
|
||||||
|
GL11.glLineWidth(3.0F);
|
||||||
|
GlStateManager.disableTexture2D();
|
||||||
|
GlStateManager.depthMask(false);
|
||||||
|
|
||||||
|
IPath path = getPath();
|
||||||
|
if (path != null) {
|
||||||
|
List<BlockPos> positions = path.positions();
|
||||||
|
for (int i = 0; i < positions.size() - 1; i++) {
|
||||||
|
BlockPos a = positions.get(i);
|
||||||
|
BlockPos b = positions.get(i + 1);
|
||||||
|
double x1 = a.getX();
|
||||||
|
double y1 = a.getY();
|
||||||
|
double z1 = a.getZ();
|
||||||
|
double x2 = b.getX();
|
||||||
|
double y2 = b.getY();
|
||||||
|
double z2 = b.getZ();
|
||||||
|
drawLine(player, x1, y1, z1, x2, y2, z2, partialTicks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//GlStateManager.color(0.0f, 0.0f, 0.0f, 0.4f);
|
||||||
|
GlStateManager.depthMask(true);
|
||||||
|
GlStateManager.enableTexture2D();
|
||||||
|
GlStateManager.disableBlend();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void drawLine(EntityPlayer player, double bp1x, double bp1y, double bp1z, double bp2x, double bp2y, double bp2z, float partialTicks) {
|
||||||
|
Tessellator tessellator = Tessellator.getInstance();
|
||||||
|
BufferBuilder worldrenderer = tessellator.getBuffer();
|
||||||
|
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks;
|
||||||
|
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks;
|
||||||
|
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks;
|
||||||
|
worldrenderer.begin(3, DefaultVertexFormats.POSITION);
|
||||||
|
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex();
|
||||||
|
worldrenderer.pos(bp2x + 0.5D - d0, bp2y + 0.5D - d1, bp2z + 0.5D - d2).endVertex();
|
||||||
|
worldrenderer.pos(bp2x + 0.5D - d0, bp2y + 0.53D - d1, bp2z + 0.5D - d2).endVertex();
|
||||||
|
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.53D - d1, bp1z + 0.5D - d2).endVertex();
|
||||||
|
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex();
|
||||||
|
tessellator.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import baritone.bot.pathing.calc.openset.IOpenSet;
|
|||||||
import baritone.bot.pathing.goals.Goal;
|
import baritone.bot.pathing.goals.Goal;
|
||||||
import baritone.bot.pathing.movement.ActionCosts;
|
import baritone.bot.pathing.movement.ActionCosts;
|
||||||
import baritone.bot.pathing.movement.Movement;
|
import baritone.bot.pathing.movement.Movement;
|
||||||
|
import baritone.bot.pathing.movement.movements.MovementAscend;
|
||||||
import baritone.bot.pathing.path.IPath;
|
import baritone.bot.pathing.path.IPath;
|
||||||
import baritone.bot.utils.ToolSet;
|
import baritone.bot.utils.ToolSet;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
@ -137,6 +138,15 @@ public class AStarPathFinder extends AbstractNodeCostSearch {
|
|||||||
int x = pos.getX();
|
int x = pos.getX();
|
||||||
int y = pos.getY();
|
int y = pos.getY();
|
||||||
int z = pos.getZ();
|
int z = pos.getZ();
|
||||||
|
Movement[] movements = new Movement[8];
|
||||||
|
movements[0] = new MovementAscend(pos, new BlockPos(x + 1, y, z));
|
||||||
|
movements[1] = new MovementAscend(pos, new BlockPos(x - 1, y, z));
|
||||||
|
movements[2] = new MovementAscend(pos, new BlockPos(x, y, z + 1));
|
||||||
|
movements[3] = new MovementAscend(pos, new BlockPos(x, y, z - 1));
|
||||||
|
movements[4] = new MovementAscend(pos, new BlockPos(x + 1, y + 1, z));
|
||||||
|
movements[5] = new MovementAscend(pos, new BlockPos(x - 1, y + 1, z));
|
||||||
|
movements[6] = new MovementAscend(pos, new BlockPos(x, y + 1, z + 1));
|
||||||
|
movements[7] = new MovementAscend(pos, new BlockPos(x, y + 1, z - 1));
|
||||||
/*Action[] actions = new Action[26];
|
/*Action[] actions = new Action[26];
|
||||||
actions[0] = new ActionPillar(pos);
|
actions[0] = new ActionPillar(pos);
|
||||||
actions[1] = new ActionBridge(pos, new BlockPos(x + 1, y, z));
|
actions[1] = new ActionBridge(pos, new BlockPos(x + 1, y, z));
|
||||||
@ -165,7 +175,7 @@ public class AStarPathFinder extends AbstractNodeCostSearch {
|
|||||||
actions[24] = new ActionWalkDiagonal(pos, EnumFacing.SOUTH, EnumFacing.WEST);
|
actions[24] = new ActionWalkDiagonal(pos, EnumFacing.SOUTH, EnumFacing.WEST);
|
||||||
actions[25] = new ActionWalkDiagonal(pos, EnumFacing.SOUTH, EnumFacing.EAST);
|
actions[25] = new ActionWalkDiagonal(pos, EnumFacing.SOUTH, EnumFacing.EAST);
|
||||||
return actions;*/
|
return actions;*/
|
||||||
return null;
|
return movements;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Random random = new Random();
|
private final Random random = new Random();
|
||||||
|
@ -15,7 +15,7 @@ public class MovementAscend extends Movement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double calculateCost(ToolSet ts) {
|
public double calculateCost(ToolSet ts) {
|
||||||
throw new UnsupportedOperationException();
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,7 +26,7 @@ public class MovementAscend extends Movement {
|
|||||||
@Override
|
@Override
|
||||||
public MovementState updateState(MovementState state) {
|
public MovementState updateState(MovementState state) {
|
||||||
super.updateState(state);
|
super.updateState(state);
|
||||||
switch(state.getStatus()) {
|
switch (state.getStatus()) {
|
||||||
case PREPPING:
|
case PREPPING:
|
||||||
case UNREACHABLE:
|
case UNREACHABLE:
|
||||||
case FAILED:
|
case FAILED:
|
||||||
|
@ -4,9 +4,6 @@ import baritone.Baritone;
|
|||||||
import baritone.pathfinding.Path;
|
import baritone.pathfinding.Path;
|
||||||
import baritone.pathfinding.PathFinder;
|
import baritone.pathfinding.PathFinder;
|
||||||
import baritone.pathfinding.actions.Action;
|
import baritone.pathfinding.actions.Action;
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
@ -20,8 +17,11 @@ import net.minecraft.util.math.AxisAlignedBB;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author leijurv
|
* @author leijurv
|
||||||
*/
|
*/
|
||||||
public class PathRenderer {
|
public class PathRenderer {
|
||||||
@ -125,20 +125,6 @@ public class PathRenderer {
|
|||||||
GlStateManager.disableBlend();
|
GlStateManager.disableBlend();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawLine(EntityPlayer player, double bp1x, double bp1y, double bp1z, double bp2x, double bp2y, double bp2z, float partialTicks) {
|
|
||||||
Tessellator tessellator = Tessellator.getInstance();
|
|
||||||
BufferBuilder worldrenderer = tessellator.getBuffer();
|
|
||||||
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks;
|
|
||||||
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks;
|
|
||||||
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks;
|
|
||||||
worldrenderer.begin(3, DefaultVertexFormats.POSITION);
|
|
||||||
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex();
|
|
||||||
worldrenderer.pos(bp2x + 0.5D - d0, bp2y + 0.5D - d1, bp2z + 0.5D - d2).endVertex();
|
|
||||||
worldrenderer.pos(bp2x + 0.5D - d0, bp2y + 0.53D - d1, bp2z + 0.5D - d2).endVertex();
|
|
||||||
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.53D - d1, bp1z + 0.5D - d2).endVertex();
|
|
||||||
worldrenderer.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex();
|
|
||||||
tessellator.draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void drawSelectionBox(EntityPlayer player, BlockPos blockpos, float partialTicks, Color color) {
|
public static void drawSelectionBox(EntityPlayer player, BlockPos blockpos, float partialTicks, Color color) {
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
|
Loading…
Reference in New Issue
Block a user