//int debug=0;
for(int y=unidad.getPosition().getY()-1;y<=unidad.getPosition().getY()+1;y++)
{
for(int x= unidad.getPosition().getX()-1;x<=unidad.getPosition().getX()+1;x++)
{
Point pEvaluado = new Point(x,y);
if (!Fortaleza.isPointAfuera(pEvaluado))
meEvaluado= Fortaleza.instanciaFortaleza.getElementoMapaEnPosicion(pEvaluado);
if (meEvaluado != null && meEvaluado.getClass().getName().equals("src.Enemigo") && ((Enemigo)meEvaluado).getUltimoTurnoVisto()==Cliente.turno && meEvaluado.getType()==Vision.TYPE_ENEMY_ATTACKER)
ampliarPerimetro=true;
}
}
int limiteIzquierdo=(centroX-rango)>=0 ? centroX-rango : 0;
int limiteDerecho=(centroX+rango)<unidad.getJugador().getFortaleza().anchoMapa ? centroX+rango : unidad.getJugador().getFortaleza().anchoMapa-1;
int limiteSuperior=(centroY-rango)>=0 ? centroY-rango : 0;
int limiteInferior=(centroY+rango)<unidad.getJugador().getFortaleza().altoMapa ? centroY+rango : unidad.getJugador().getFortaleza().altoMapa-1;
System.out.println("Turnos siguiendo colector " +((Explorador)unidad).turnosSiguiendoColector);
for (int i = limiteIzquierdo; i<=limiteDerecho;i++ ){
for (int j=limiteSuperior;j<=limiteInferior;j++){
if (unidad.getPosition().distance(new Point(i,j))<=rango){
if(!unidad.getJugador().getFortaleza().isPointAfuera(new Point(i,j))
&& !(i>Fortaleza.fortalezaEnemiga.getPosition().getX()-perimetro
&& i<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()+perimetro
&& j>unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()-perimetro
&& j<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()+perimetro)){
MapElement meCandidato= unidad.getJugador().getFortaleza().mapa[i][j];
if(meCandidato!= null && meCandidato.getClass().getName().equals("src.Enemigo")
&& ((Enemigo)meCandidato).getUltimoTurnoVisto()==unidad.getJugador().turno
&& ((Enemigo)meCandidato).getType()==Vision.TYPE_ENEMY_ATTACKER ){
if (Fortaleza.instanciaFortaleza.getEstrategia().getClass().getName().equals("src.estrategias.EstrategiaEquilibrada") && ((EstrategiaEquilibrada)Fortaleza.instanciaFortaleza.getEstrategia()).numeroOleada==1){
((EstrategiaEquilibrada)Fortaleza.instanciaFortaleza.getEstrategia()).numeroOleada=2;
Iterator it=Fortaleza.instanciaFortaleza.unidades.iterator();
while (it.hasNext()){
UnidadBasica ub=(UnidadBasica)it.next();
if (ub.getTipoInternoUnidad()==UnidadBasica.TIPO_ASESINO && ub.getPosition().distance(Fortaleza.fortalezaEnemiga.getPosition())>10)
((Asesino)ub).setEstrategia(new EstrategiaAsesinoColector());
}
}
}
}
}
}
}
for (int i = limiteIzquierdo; i<=limiteDerecho;i++ ){
for (int j=limiteSuperior;j<=limiteInferior;j++){
if (unidad.getPosition().distance(new Point(i,j))<=rango){
if(!unidad.getJugador().getFortaleza().isPointAfuera(new Point(i,j)) && !(i>unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()-perimetro && i<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()+perimetro && j>unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()-perimetro && j<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()+perimetro)){
MapElement meCandidato= unidad.getJugador().getFortaleza().mapa[i][j];
if(meCandidato!= null && meCandidato.getClass().getName().equals("src.Enemigo")
&& ((Enemigo)meCandidato).getUltimoTurnoVisto()==unidad.getJugador().turno
&& ((Enemigo)meCandidato).getType()==Vision.TYPE_ENEMY_COLLECTOR ){
//
noSirve=false;
Point destino=new Point(i,j);
if (unidad.destino==null || !destino.equals(unidad.destino)){
((Explorador)unidad).turnosSiguiendoColector++;
}
else{
((Explorador)unidad).turnosSiguiendoColector=0;
Iterator itRecursos=unidad.getJugador().getFortaleza().resources.iterator();
noSirve=true;
while (itRecursos.hasNext()){
Mina mina=(Mina)itRecursos.next();
if (mina.getPosition().distance(destino)<=1){
noSirve=false;
break;
}
}
}
if (noSirve)
continue;
unidad.setPeligrosidad(false);
unidad.setDescubir(true);
unidad.setARangoDeAccion(false);
unidad.setWayPoints(Astar.intentoDePathFinding(destino, unidad, unidad.getJugador().getFortaleza()));
unidad.destino=destino;
nuevoComando.setId(unidad.getJugador().getIdComando());
nuevoComando.setIdUnit(unidad.getId());
nuevoComando.setUnitType(unidad.getType());
nuevoComando.setType("move");
nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));
unidad.setCommand(nuevoComando);
return nuevoComando;
}
}
}
}
}
if (noSirve){
for (int i = limiteIzquierdo; i<=limiteDerecho;i++ ){
for (int j=limiteSuperior;j<=limiteInferior;j++){
if (unidad.getPosition().distance(new Point(i,j))<=rango){
if (!unidad.getJugador().getFortaleza().isPointAfuera(new Point(i,j)) && (i>=unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()-perimetro && i<=unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()+perimetro && j>=unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()-perimetro && j<=unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()+perimetro)){//adentro del perimetro, espero a que salga
MapElement meCandidato= unidad.getJugador().getFortaleza().mapa[i][j];
if(meCandidato!= null && meCandidato.getClass().getName().equals("src.Enemigo")
&& ((Enemigo)meCandidato).getUltimoTurnoVisto()==unidad.getJugador().turno
&& ((Enemigo)meCandidato).getType()==Vision.TYPE_ENEMY_COLLECTOR
&& ((Explorador)unidad).turnosSiguiendoColector<=Explorador.MAXIMO_TURNOS_SIGUIENDO_EXPLORADOR){
if (!((unidad.getPosition().getX()>unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()-perimetro && unidad.getPosition().getX()<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getX()+perimetro && unidad.getPosition().getY()>unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()-perimetro && unidad.getPosition().getY()<unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition().getY()+perimetro))){
noSirve=false;
((Explorador)unidad).turnosSiguiendoColector++;
nuevoComando=null;
}
}
}
}
}
}
}
if (ampliarPerimetro)
perimetro=perimetro+2;
if (noSirve){
if (((Explorador)unidad).turnosSiguiendoColector>0)
System.out.println("Aborto seguimiento");
((Explorador)unidad).turnosSiguiendoColector=0;
Point centro=unidad.getJugador().getFortaleza().fortalezaEnemiga.getPosition();
nuevoComando=pasearPorPerimetro(unidad,perimetro,perimetro,centro);
}
return nuevoComando;