int perimetroExteriorX=perimetroX;
int perimetroExteriorY=perimetroY;
//int perimetroInterior=9;
boolean afuera=true;
Point destino=null;
int centroX=centro.getX();
int centroY=centro.getY();
if (waypoints.size()==0 ||( ((Point)waypoints.get(0)).getX()-centroX<perimetroX && ((Point)waypoints.get(0)).getY()-centroY<perimetroY)) {
waypoints.clear();
orden=-1;
// Arma los punto. El -5 es porque no tiene sentido que pase tan cerca del borde, le da un margen
int limiteIzquierdo=(centroX-perimetroExteriorX)>=0 ? centroX-perimetroExteriorX : 0;
int limiteDerecho=(centroX+perimetroExteriorX)<unidad.getJugador().getFortaleza().anchoMapa-5 ? centroX+perimetroExteriorX : unidad.getJugador().getFortaleza().anchoMapa-1;
int limiteSuperior=(centroY-perimetroExteriorY)>=0 ? centroY-perimetroExteriorY : 0;
int limiteInferior=(centroY+perimetroExteriorY)<unidad.getJugador().getFortaleza().altoMapa-5 ? centroY+perimetroExteriorY : unidad.getJugador().getFortaleza().altoMapa-1;
Point waypoint1=new Point (limiteDerecho,limiteSuperior);
Point waypoint2=new Point (limiteDerecho,limiteInferior);
Point waypoint3=new Point (limiteIzquierdo,limiteInferior);
Point waypoint4=new Point (limiteIzquierdo,limiteSuperior);
//Chequeo para ver si algun way queda afuera, si es una esquina me quedan solo 3 ways
if (Math.abs(waypoint1.getX()-centroX)==perimetroExteriorX || Math.abs(waypoint1.getY()-centroY)==perimetroExteriorY)
waypoints.add(waypoint1);
if (Math.abs(waypoint2.getX()-centroX)==perimetroExteriorX || Math.abs(waypoint2.getY()-centroY)==perimetroExteriorY)
waypoints.add(waypoint2);
if (Math.abs(waypoint3.getX()-centroX)==perimetroExteriorX || Math.abs(waypoint3.getY()-centroY)==perimetroExteriorY)
waypoints.add(waypoint3);
if (Math.abs(waypoint4.getX()-centroX)==perimetroExteriorX || Math.abs(waypoint4.getY()-centroY)==perimetroExteriorY)
waypoints.add(waypoint4);
//armo la secuencia de los ways
if (waypoints.size()==3){
//el 0 es el del medio
if ((((Point)waypoints.get(0)).getX() == ((Point)waypoints.get(1)).getX() && ((Point)waypoints.get(0)).getY() == ((Point)waypoints.get(2)).getY())
|| (((Point)waypoints.get(0)).getX() == ((Point)waypoints.get(2)).getX() && ((Point)waypoints.get(0)).getY() == ((Point)waypoints.get(1)).getY())){
Point punto=(Point)waypoints.remove(0);
waypoints.add(1,punto);
waypoints.add(punto);
}
//el 1 es el del medio
if ((((Point)waypoints.get(1)).getX() == ((Point)waypoints.get(2)).getX() && ((Point)waypoints.get(1)).getY() == ((Point)waypoints.get(0)).getY())
|| (((Point)waypoints.get(1)).getX() == ((Point)waypoints.get(0)).getX() && ((Point)waypoints.get(1)).getY() == ((Point)waypoints.get(2)).getY())){
Point punto=(Point)waypoints.remove(1);
waypoints.add(1,punto);
waypoints.add(punto);
}
//el 2 es el del medio
if ((((Point)waypoints.get(2)).getX() == ((Point)waypoints.get(0)).getX() && ((Point)waypoints.get(2)).getY() == ((Point)waypoints.get(1)).getY())
|| (((Point)waypoints.get(2)).getX() == ((Point)waypoints.get(1)).getX() && ((Point)waypoints.get(2)).getY() == ((Point)waypoints.get(0)).getY())){
Point punto=(Point)waypoints.remove(2);
waypoints.add(1,punto);
waypoints.add(punto);
}
}
else{
//armo la secuencia de los ways
if (limiteIzquierdo!=centroX-perimetroExteriorX){
//orden de los way
//123214
waypoints.add(3,waypoints.get(0));
waypoints.add(3,waypoints.get(1));
}
if (limiteDerecho!=centroX+perimetroExteriorX){
//143234
waypoints.add(1,waypoints.get(waypoints.size()-2));
waypoints.add(1,waypoints.get(waypoints.size()-1));
}
if (limiteSuperior!=centroY-perimetroExteriorY){
//123432
waypoints.add(waypoints.get(2));
waypoints.add(waypoints.get(1));
}
if (limiteInferior!=centroY+perimetroExteriorY){
//121434
waypoints.add(2,waypoints.get(waypoints.size()-1));
waypoints.add(2,waypoints.get(0));
}
}
Iterator it=waypoints.iterator();
while (it.hasNext()){
Point punto=(Point)it.next();
if (destino==null || punto.distance(unidad.getPosition())<destino.distance(unidad.getPosition())){
destino=punto;
}
}
unidad.destino=destino;
}
if (unidad.getWayPoints()==null || unidad.getWayPoints().size()==0 || !Astar.verificarCamino(unidad)){
Iterator it=waypoints.iterator();
while (it.hasNext()){
Point punto=(Point)it.next();
if (destino==null || punto.distance(unidad.getPosition())<destino.distance(unidad.getPosition())){
destino=punto;
}
}
if (orden<0 && destino.distance(unidad.getPosition())<3){
orden=waypoints.indexOf(destino);
}
unidad.destino=destino;
if (orden>=0){
if (destino.distance(unidad.getPosition())<3){
orden++;
orden=orden%waypoints.size();
destino=(Point)waypoints.get(orden);
unidad.destino=destino;
}
destino=(Point)waypoints.get(orden);
unidad.destino=destino;
}
if (orden==0){
if (((Explorador)unidad).turnoInicioPerimetro!=0){
int actividadActual=0;
for (int i=Fortaleza.fortalezaEnemiga.getPosition().getX()-EstrategiaExploradorAcecharColector.perimetro;i<=Fortaleza.fortalezaEnemiga.getPosition().getX()+EstrategiaExploradorAcecharColector.perimetro;i++){
for (int j=Fortaleza.fortalezaEnemiga.getPosition().getY()-EstrategiaExploradorAcecharColector.perimetro;j<=Fortaleza.fortalezaEnemiga.getPosition().getY()+EstrategiaExploradorAcecharColector.perimetro;j++){
if (!Fortaleza.isPointAfuera(new Point(i,j))
&& Fortaleza.mapa[i][j]!=null
&& Fortaleza.mapa[i][j].getClass().getName().equals("src.Enemigo")
&& Fortaleza.mapa[i][j].getType()==Vision.TYPE_ENEMY_ATTACKER
&& ((Enemigo)Fortaleza.mapa[i][j]).getUltimoTurnoVisto()>((Explorador)unidad).turnoInicioPerimetro){
actividadActual++;