package src.estrategias;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import src.Asesino;
import src.Enemigo;
import src.Fortaleza;
import src.Guardia;
import src.Mina;
import src.UnidadBasica;
import src.pathFinding.Astar;
import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.clientInterfaces.Point;
public class EstrategiaFormacionAtaque extends EstrategiaUnidad{
public static Point objetivo;
public static int radio=0;
public static int avanzarFormacionX=0;
public static int avanzarFormacionY=0;
public static boolean moverse=false;
public ClientCommand accionDeTurno(UnidadBasica ub)
{
return accionDeTurno((Asesino )ub);
}
public ClientCommand accionDeTurno(Asesino ub){
if( ub.enemigoEnRango() != null)
//ATTACK!
{
Enemigo enemigo = ub.enemigoEnRango();
ClientCommand cAtaque =ub.atacar(enemigo.getPosition());
//comandos.add(nuevoComando);
ub.setCommand(cAtaque);
return cAtaque;
}
if (ub.getPosition().distance(objetivo)==radio){
if (moverse){
ClientCommand nuevoComando = new ClientCommand();
ub.getJugador().incIdComando();
nuevoComando.setId(ub.getJugador().getIdComando());
nuevoComando.setIdUnit(ub.getId());
nuevoComando.setType("move");
nuevoComando.setDestination(new Point(ub.getPosition().getX()+avanzarFormacionX*4,ub.getPosition().getY()+avanzarFormacionY*4));
nuevoComando.setUnitType(ub.getType());
ub.destino=new Point(ub.getPosition().getX()+avanzarFormacionX*4,ub.getPosition().getY()+avanzarFormacionY*4);
ub.obstaculos.clear();
ub.getWayPoints().clear();
ub.setCommand(nuevoComando);
return nuevoComando;
}
else if (Fortaleza.fortalezaEnemiga!= null && ub.getPosition().distance(Fortaleza.fortalezaEnemiga.getPosition())<10){
ClientCommand nuevoComando = new ClientCommand();
ub.getJugador().incIdComando();
nuevoComando.setId(ub.getJugador().getIdComando());
nuevoComando.setIdUnit(ub.getId());
nuevoComando.setType("move");
nuevoComando.setDestination(Fortaleza.fortalezaEnemiga.getPosition());
nuevoComando.setUnitType(ub.getType());
ub.destino=Fortaleza.fortalezaEnemiga.getPosition();
ub.obstaculos.clear();
ub.getWayPoints().clear();
ub.setCommand(nuevoComando);
return nuevoComando;
}
ub.destino=ub.getPosition();
ub.obstaculos.clear();
ub.getWayPoints().clear();
return null;
}
ub.obstaculos.clear();
List unidades=Fortaleza.instanciaFortaleza.unidades;
List puntosOcupados=new ArrayList();
Point destino=null;
ClientCommand nuevoComando = new ClientCommand();
ub.getJugador().incIdComando();
nuevoComando.setId(ub.getJugador().getIdComando());
nuevoComando.setIdUnit(ub.getId());
if (ub.destino==null || ub.getWayPoints()==null || ub.getWayPoints().size()==0){
//|| !Astar.verificarCamino(ub)){
for (int i = objetivo.getX()-radio;i<=objetivo.getX()+radio;i++){
for (int j = objetivo.getY()-radio;j<=objetivo.getY()+radio;j++){
Point posiblePunto=new Point(i,j);
if (!Fortaleza.isPointAfuera(posiblePunto) && objetivo.distance(posiblePunto)==radio){
boolean ocupado=false;
Iterator itOcupados=unidades.iterator();
while (itOcupados.hasNext()){
UnidadBasica unidad=(UnidadBasica)itOcupados.next();
//posiblePunto.equals(unidad.getDestino()) ||
if (unidad.getDestino()!=null && (posiblePunto.equals(unidad.getPosition()))){
ocupado=true;
}
if (unidad.getTipoInternoUnidad()==UnidadBasica.TIPO_ASESINO && ((Asesino)unidad).getEstrategia().getClass().getName().equals("src.EstrategiaFormacionAtaque")){
if (unidad.getWayPoints()!=null && unidad.getWayPoints().size()>0){
Iterator it2=unidad.getWayPoints().iterator();
while (it2.hasNext()){
Point puntoObstaculo=(Point) it2.next();
Mina obstaculo=new Mina();
obstaculo.setPosition(puntoObstaculo);
ub.obstaculos.add(obstaculo);
}
}
}
}
if (!ocupado){
if (destino==null || posiblePunto.distance(Fortaleza.fortalezaEnemiga.getPosition())>destino.distance(Fortaleza.fortalezaEnemiga.getPosition()) || posiblePunto.distance(Fortaleza.fortalezaEnemiga.getPosition())>ub.getPosition().distance(Fortaleza.fortalezaEnemiga.getPosition())){
//|| (posiblePunto.distance(Fortaleza.fortalezaEnemiga.getPosition())==destino.distance(Fortaleza.fortalezaEnemiga.getPosition()) && posiblePunto.distance(ub.getPosition())<destino.distance(ub.getPosition()))){
destino=posiblePunto;
ub.destino=destino;
ub.setPeligrosidad(false);
ub.setDescubir(false);
ub.setARangoDeAccion(false);
ub.setWayPoints(Astar.intentoDePathFinding(destino, ub, ub.getJugador().getFortaleza()));
if (ub.getWayPoints().size()==0){
System.out.println("jodido");
}
}
}
}
}
}
}
if (ub.getWayPoints().size()==0){
System.out.println("jodido");
return null;
}
else{
nuevoComando.setType("move");
nuevoComando.setDestination((Point) ub.getWayPoints().get(0));
nuevoComando.setUnitType(ub.getType());
ub.setCommand(nuevoComando);
return nuevoComando;
}
}
public static void setRadio(int cantidadUnidades){
radio=(cantidadUnidades-1)/2;
}
}