package src.estrategias;
import java.util.Iterator;
import java.util.Set;
import src.Fortaleza;
import src.Mina;
import src.UnidadBasica;
import src.pathFinding.Astar;
import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.clientInterfaces.Point;
public class EstrategiaColectorNormal extends EstrategiaUnidad {
@Override
public ClientCommand accionDeTurno(UnidadBasica unidad) {
if (unidad.getCommand()==null){
ClientCommand nuevoComando=new ClientCommand();
nuevoComando.setId(unidad.getJugador().getIdComando());
nuevoComando.setIdUnit(unidad.getId());
if (unidad.getWayPoints()!=null &&unidad.getWayPoints().size()>0){
nuevoComando.setType("move");
nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));
nuevoComando.setUnitType(unidad.getType());
unidad.setCommand(nuevoComando);
return nuevoComando;
}
if (unidad.resourcesStored()<unidad.getMaxLoad()){//recolecto
//calculo mina
Set recursos=unidad.getJugador().getFortaleza().getKnownResources();
Iterator it2= recursos.iterator();
int distancia=99999;
Mina minaCercana=new Mina();
while (it2.hasNext()){
Mina recurso=(Mina)it2.next();
if (!recurso.isMaxedOut()
&& recurso.getPosition().distance(unidad.getPosition())+Math.max(Fortaleza.instanciaFortaleza.estadisticas.mapaEstadistico[recurso.getPosition().getX()][recurso.getPosition().getY()].getPeligrosidad(),0)<distancia
&& (recurso.resourcesStored()<unidad.getJugador().getFortaleza().resourcesPayload || unidad.getJugador().getFortaleza().resourcesPayload==0)){//chequear capacidad de mina
minaCercana.setPosition(recurso.getPosition());
distancia=minaCercana.getPosition().distance(unidad.getPosition());
}
}
if (minaCercana.getPosition()!=null){
if (unidad.getPosition().distance(minaCercana.getPosition())<=unidad.getActionRange()){
nuevoComando.setType("collect");
nuevoComando.setDestination(minaCercana.getPosition());
}
else//voy a la mina mas cercana, similiar al de la fortaleza, refactorizar
{
if (unidad.getWayPoints()==null || unidad.getWayPoints().size()==0 || !Astar.verificarCamino(unidad)){
unidad.setPeligrosidad(true);
unidad.setDescubir(false);
unidad.setARangoDeAccion(true);
unidad.setWayPoints(Astar.intentoDePathFinding(minaCercana.getPosition(), unidad, unidad.getJugador().getFortaleza()));
unidad.destino=minaCercana.getPosition();
}
nuevoComando.setType("move");
nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));
}
nuevoComando.setUnitType(unidad.getType());
unidad.setCommand(nuevoComando);
return nuevoComando;
}
}
if (unidad.resourcesStored()!=0){
if (unidad.getPosition().distance(unidad.getJugador().getFortaleza().getPosition())<=unidad.getActionRange()){ // deposito en la fortaleza
nuevoComando.setType("collect");
nuevoComando.setDestination(unidad.getJugador().getFortaleza().getPosition());
}
else// voy a la fortaleza
{
if (unidad.getWayPoints()==null || unidad.getWayPoints().size()==0 || !Astar.verificarCamino(unidad)){
unidad.setPeligrosidad(true);
unidad.setDescubir(false);
unidad.setARangoDeAccion(true);
unidad.setWayPoints(Astar.intentoDePathFinding(unidad.getJugador().getFortaleza().getPosition(), unidad, unidad.getJugador().getFortaleza()));
unidad.destino=unidad.getJugador().getFortaleza().getPosition();
}
nuevoComando.setType("move");
nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));
}
nuevoComando.setUnitType(unidad.getType());
unidad.setCommand(nuevoComando);
return nuevoComando;
}
}
return null;
}
}