package net.scapeemulator.game.model.pathfinding;
import net.scapeemulator.game.model.Position;
public class ProjectilePathFinder {
public static Path find(Position source, Position dest) {
return find(source.getX(), source.getY(), dest.getX(), dest.getY());
}
public static Path find(int sourceX, int sourceY, int destX, int destY) {
Path path = new Path();
double curX = sourceX;
double curY = sourceY;
double deltaX = destX - sourceX;
double deltaY = destY - sourceY;
while (deltaX >= 1 || deltaY >= 1 || deltaX <= -1 || deltaY <= -1) {
deltaX = deltaX / 2;
deltaY = deltaY / 2;
}
int prevX = sourceX;
int prevY = sourceY;
while (true) {
curX += deltaX;
curY += deltaY;
if (prevX != (int) curX || prevY != (int) curY) {
path.addLast(new Position((int) curX, (int) curY));
prevX = (int) curX;
prevY = (int) curY;
}
if ((int) curX == destX && (int) curY == destY) {
return path;
}
}
}
}