package src.estrategias;
import java.util.Iterator;
import java.util.Set;
import src.Atacante;
import src.Enemigo;
import src.Fortaleza;
import src.Mina;
import src.UnidadBasica;
import src.pathFinding.Astar;
import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.clientInterfaces.Point;
import com.gameloftProgrammersCup.client.Vision;
public class EstrategiaAsesinoFortaleza extends EstrategiaUnidad{
/**
* pseudo-casteo, llamo a la otra que usa un Atacante
*/
public ClientCommand accionDeTurno(UnidadBasica ub) {
return accionDeTurno((Atacante )ub);
}
public ClientCommand accionDeTurno(Atacante asesino){
if (asesino.enemigoEnRango()!=null){
//ATTACK!
Enemigo enemigo = asesino.enemigoEnRango();
if (enemigo.getPosition().distance(asesino.getPosition())>asesino.getActionRange()){//tengo que acercarme
Point destino=enemigo.getPosition();
ClientCommand nuevoComando=new ClientCommand();
nuevoComando.setId(asesino.getJugador().getIdComando());
nuevoComando.setIdUnit(asesino.getId());
asesino.setPeligrosidad(false);
asesino.setDescubir(false);
asesino.setARangoDeAccion(true);
asesino.setWayPoints(Astar.intentoDePathFinding(destino, asesino, asesino.getJugador().getFortaleza()));
asesino.destino=destino;
nuevoComando.setType("move");
nuevoComando.setDestination((Point)asesino.getWayPoints().get(0));
asesino.destino=(Point)asesino.getWayPoints().get(0);
nuevoComando.setUnitType(asesino.getType());
asesino.setCommand(nuevoComando);
return nuevoComando;
}//sino ataco
ClientCommand cAtaque =asesino.atacar(enemigo.getPosition());
asesino.setCommand(cAtaque);
return cAtaque;
}
else
{//move
Point destino=null;
if (Fortaleza.instanciaFortaleza.fortalezaEnemiga==null ){
ClientCommand nuevoComando=new ClientCommand();
nuevoComando.setId(asesino.getJugador().getIdComando());
nuevoComando.setIdUnit(asesino.getId());
destino=new Point(Fortaleza.anchoMapa/2,Fortaleza.altoMapa/2);
if (asesino.destino==null || asesino.getWayPoints()==null || asesino.getWayPoints().size()==0 || !Astar.verificarCamino(asesino)){
asesino.setPeligrosidad(false);
asesino.setDescubir(false);
asesino.setARangoDeAccion(false);
asesino.setWayPoints(Astar.intentoDePathFinding(destino, asesino, asesino.getJugador().getFortaleza()));
asesino.destino=destino;
}
nuevoComando.setType("move");
nuevoComando.setDestination((Point)asesino.getWayPoints().get(0));
nuevoComando.setUnitType(asesino.getType());
asesino.setCommand(nuevoComando);
return nuevoComando;
}
if (Fortaleza.instanciaFortaleza.fortalezaEnemiga!=null && Fortaleza.instanciaFortaleza.fortalezaEnemiga.getPosition()!=null){
ClientCommand nuevoComando=new ClientCommand();
nuevoComando.setId(asesino.getJugador().getIdComando());
nuevoComando.setIdUnit(asesino.getId());
if (asesino.destino==null || asesino.getWayPoints()==null || asesino.getWayPoints().size()==0 || !Astar.verificarCamino(asesino)){
destino=Fortaleza.instanciaFortaleza.fortalezaEnemiga.getPosition();
asesino.setPeligrosidad(false);
asesino.setDescubir(false);
asesino.setARangoDeAccion(false);
asesino.setWayPoints(Astar.intentoDePathFinding(destino, asesino, asesino.getJugador().getFortaleza()));
asesino.destino=destino;
}
nuevoComando.setType("move");
nuevoComando.setDestination((Point)asesino.getWayPoints().get(0));
nuevoComando.setUnitType(asesino.getType());
asesino.setCommand(nuevoComando);
return nuevoComando;
}
else
return null;
}
}
}