return path;
}
private void addNeighbor(Position start, Position end, Values v, Room r) {
Position n = new Position(
v.getX()[v.location] + start.getX(),
v.getY()[v.location] + start.getY(), 0, 0);
if (n.getX() < 0 || n.getY() < 0) {
return;
}
short p = v.location;
if (n.getX() >= r.getModel().getLimitX() || n.getY() >= r.getModel().getLimitY()) { //out of bounds
return;
}
if (r.getModel().getSquareStates()[n.getX()][n.getY()] == 2) { //someone is there?? o.o
return;
}
if (r.getModel().getSquares()[n.getX()][n.getY()] == SquareState.CLOSED ||
(n.getY() != end.getY() && n.getX() != end.getX())) {
return;
}
if (p > 0) {
if (v.getX()[p] != n.getX() && v.getY()[p] != n.getY()) {
if (r.getModel().getSquares()[n.getX()][v.getY()[p]] == SquareState.CLOSED ||
r.getModel().getSquares()[v.getX()[p]][n.getY()] == SquareState.CLOSED) {
//return;
}
}
}
if (v.getTiles()[n.getX()][n.getY()] == 1) {
short i = 1;
for (; i <= v.count; i++) {
if (v.getX()[i] == n.getX() && v.getY()[i] == n.getY()) {
break;
}
}
if (v.getX()[i] == end.getX() || v.getY()[i] == end.getY()) {
if (10 + v.getG()[p] < v.getG()[i]) {
v.getParent()[i] = p;
} else if(14 + v.getG()[p] < v.getG()[i]) {
v.getParent()[i] = p;
return;
}
}
v.lastID++;
v.count++;
v.getBinaryHeap()[v.count] = v.lastID;
v.getX()[v.lastID] = n.getX();
v.getY()[v.lastID] = n.getY();
v.getH()[v.lastID] = (short) n.distanceFrom(end);
v.getParent()[v.lastID] = p;
if (n.getX() == v.getX()[p] || n.getY() == v.getY()[p]) {
v.getG()[v.lastID] = (short) (10 + v.getG()[p]);
} else {
v.getG()[v.lastID] = (short) (14 + v.getG()[p]);
}
v.getF()[v.lastID] = (short) (v.getG()[v.lastID] + v.getH()[v.lastID]);
for(short s = v.count; s != 1; s /= 2) {
if (v.getF()[v.getBinaryHeap()[s]] > v.getF()[v.getBinaryHeap()[s / 2]]) { //what the fuk D:
break;
}
/*
Invert the values..
*/
short t = v.getBinaryHeap()[s / 2];
v.getBinaryHeap()[s / 2] = v.getBinaryHeap()[s];
v.getBinaryHeap()[s] = t;
}
v.getTiles()[n.getX()][n.getY()] = 1;
}
}