public void walkTowardPosition(Position p) throws InterruptedException {
if (this.myPlayer().getPosition().distance(p) > 15) {
int d = random(12, 16);
double scale = (double) d / this.myPlayer().getPosition().distance(p);
Position mypos = this.myPosition();
int dx = p.getX() - mypos.getX(), dy = p.getY() - mypos.getY();
int x = mypos.getX() + (int) (dx * scale), y = mypos.getY() + (int) (dy * scale);
Position dest = new Position(x, y, mypos.getZ());
MouseDestination md = new MinimapTileDestination(this.bot, dest);
if (!this.client.getDestination().equals(dest)) {
this.client.moveMouseTo(md, false, true, false);
}
if (this.myPlayer().isMoving()) {
int degrees = (int) Math.atan2(dy, dx);
this.client.rotateCameraToAngle(degrees);
}
sleep(random(600, 1200));
}
else {
MouseDestination md = new MinimapTileDestination(this.bot, p);
if (!this.client.getDestination().equals(p)) {
this.client.moveMouseTo(md, false, true, false);
}
}
}I found myself needing to check for objects while I was walking (performance reasons) so I created this.Basically it projects your position on a straight line and tries to traverse it in increments of 12-16 tile intervals (size of minimap)
Works pretty flawlessly.
Edit: it may be confusing, but this must be called a bunch of times to work. It basically clicks in the spot on the minimap that it calculates when it's called.