TheScrub Posted May 18, 2014 Posted May 18, 2014 # Package name here.. import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.util.ArrayList; import org.osbot.script.MethodProvider; import org.osbot.script.Script; import org.osbot.script.rs2.map.Position; import org.osbot.script.rs2.utility.Utilities; public class Walking { /* * Does not contain obstacle handling or path finding. */ private Script script; public Walking(Script script) { this.script = script; } /* * Used in the drawing method returns the minimap position of the farthest * away position in the array. */ private Point getNextPoint(Position[] positions) { if (positions != null && positions.length > 0) { Point last = null; for (Position p : positions) { Point point = Utilities.getMinimapScreenCoordinate(script.bot, p.getX(), p.getY()); if (point != null) { // checks if it's in the minimap section if (point.x > 500) last = point; } } return last; } return null; } private Position getNextPosition(Position[] positions) { if (positions != null && positions.length > 0) { Position next = null; for (Position p : positions) { Point point = Utilities.getMinimapScreenCoordinate(script.bot, p.getX(), p.getY()); if (point != null) { // checking the point is valid. if (point.x > 500) next = p; } } return next; } return null; } /* * Path Walking method will require a path array. */ public void walkPath(Position[] path) throws InterruptedException { setRun(); if (path != null && path.length > 0) { Position n = getNextPosition(path); // Checking if were not at the last position and if were along the path if (n != null && script.myPosition().distance(path[path.length - 1]) > 7 || n != null && alongPath(path)) { script.log("Walking to Position: " + n.toString()); long t = System.currentTimeMillis(); n.walkMinimap(script.bot); // ghetto dynamic sleep. while (getNextPosition(path) != null && getNextPosition(path).equals(n) && System.currentTimeMillis() - t < 4000) { script.sleep(20); } } } } /* * Used to set the run. */ private void setRun() throws InterruptedException { if (script.client.getRunEnergy() > (20 + MethodProvider.random(20, 25)) && !script.isRunning()) { script.setRunning(true); } } /* * checks if the player is along the path based on distance */ public boolean alongPath(Position[] path) { Position me = script.client.getMyPlayer().getPosition(); if (path != null && path.length > 0) for (int i = 0; i < path.length; i++) { if (i != path.length - 1) if (me.distance(path) < 8) { return true; } } return false; } /* * Just reverses a position array. */ public Position[] reversePath(Position[] path) { ArrayList<Position> pos = new ArrayList<Position>(); Position[] target = null; if (path != null && path.length > 0) { for (int i = 0; i < path.length; i++) { pos.add(path[path.length - i - 1]); } } target = pos.toArray(new Position[pos.size()]); return target; } /* * Testing method. */ public void drawPoints(Position[] path, Graphics g) { Point p = getNextPoint(path); if (p != null) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.BLACK); g2d.drawOval(p.x - 1, p.y - 1, 5, 5); g2d.setColor(Color.MAGENTA); g2d.fillOval(p.x, p.y, 4, 4); } } }