Пример #1
0
    /**
     * A* y métodos asociados
     * */


    protected List <NodoA> AStar(CasillaGrid actual, CasillaGrid goal, Dictionary <TipoCasilla, float> moveIndex)
    {
        //List<NodoA> cerrados = new List<NodoA>();
        //List<NodoA> abiertos = new List<NodoA>();
        Dictionary <Vector2, NodoA> cerrados = new Dictionary <Vector2, NodoA>();
        Dictionary <Vector2, NodoA> abiertos = new Dictionary <Vector2, NodoA>();
        CasillaGrid target  = goal;
        NodoA       starter = new NodoA(actual, null, 0);

        abiertos.Add(starter.getCasilla().getPosicionGrid(), starter);

        while (abiertos.Count != 0)
        {
            NodoA bestNode = GetLowestCostNode(abiertos);

            abiertos.Remove(bestNode.getCasilla().getPosicionGrid());
            cerrados.Add(bestNode.getCasilla().getPosicionGrid(), bestNode);


            if (bestNode.getCasilla().getPosicionGrid() == goal.getPosicionGrid())
            {
                ICollection <NodoA> camino = cerrados.Values;
                return(ReconstructPath(camino));
            }



            List <NodoA> vecinos = Neighbours(bestNode.getCasilla(), moveIndex);
            foreach (NodoA n in vecinos)
            {
                if (cerrados.ContainsKey(n.getCasilla().getPosicionGrid()))
                {
                    continue;
                }

                float costeNodo = bestNode.g + EuclideanDistance(bestNode.getCasilla().getPosicionGrid(), n.getCasilla().getPosicionGrid()) + moveIndex[n.getCasilla().getTipoCasilla()];
                n.g = +costeNodo;
                n.h = EuclideanDistance(n.getCasilla().getPosicionGrid(), goal.getPosicionGrid());
                n.setPadre(bestNode.getCasilla());


                if (abiertos.ContainsKey(n.getCasilla().getPosicionGrid()))
                {
                    continue;
                }

                abiertos.Add(n.getCasilla().getPosicionGrid(), n);
            }
        }
        return(null);
    }
Пример #2
0
    private void seleccionarUnidad()
    {
        if (Input.GetMouseButtonDown(0))
        {
            foreach (Unidad u in unidades)
            {
                u.setSeleccionada(false);
            }
            selected.GetComponent <MeshRenderer>().enabled = false;
            bool        unidadEncontrada = false;
            int         i               = 0;
            int         size            = unidades.Count;
            CasillaGrid casillaObjetivo = getCasillaRaton();

            if (casillaObjetivo == null)
            {
                return;
            }

            while (i < size && !unidadEncontrada)
            {
                if (unidades[i].getCoordenadas() == casillaObjetivo.getPosicionGrid())
                {
                    unidadEncontrada = true;
                    unidades[i].setSeleccionada(true);
                    unidadSeleccionada = unidades[i];
                    return;
                }
                i++;
            }
        }
    }
Пример #3
0
 public CasillaGrid(CasillaGrid casilla)
 {
     posicion    = casilla.getPosicion();
     coordenadas = casilla.getPosicionGrid();
     adyacentes  = casilla.getAdyacentes();
     tipo        = casilla.getTipoCasilla();
 }
Пример #4
0
    public void curaUnidades()
    {
        foreach (Unidad u in unidades)
        {
            if (u.getBando() && u.getCoordenadas().Equals(baseA.getPosicionGrid()))
            {
                u.modificarSalud(ratioCuracion);
            }

            else if (u.getCoordenadas().Equals(baseB.getPosicionGrid()))
            {
                u.modificarSalud(ratioCuracion);
            }
        }
    }
Пример #5
0
    /**
     * Parseo de Acciones
     **/
    public CasillaGrid parseAction(Accion a)
    {
        switch (a)
        {
        case Accion.buscaEnemigo:
            Unidad e = getEnemigoMasCercano();
            patrullando = false;
            if (Vector3.Distance(transform.position, e.transform.position) < rangoAtaque)
            {
                enCombate = true;
            }
            return(controlador.getCasillaActual(e));

        case Accion.patrulla:
            enCombate = false;
            return(eligePatrulla());

        case Accion.curacion:
            enCombate = false;
            return(puntoCuracion());

        case Accion.defensaRP:
            enCombate = false;
            return(controlador.getCasillaAt((int)cercaRallyPoint(TipoRallyPoint.paso).getCoordenadas().x, (int)cercaRallyPoint(TipoRallyPoint.paso).getCoordenadas().y));

        case Accion.ataqueRP:
            return(RPDesprotegido());

        case Accion.ataqueBase:
            return(controlador.getCasillaAt(getCoordenadasBaseEnemiga()));

        case Accion.defensaBase:
            return(controlador.getCasillaAt(baseUnidad.getPosicionGrid()));

        default:
            break;
        }
        return(null);
    }
Пример #6
0
 public float getInfluenciaAt(CasillaGrid cg)
 {
     return(getInfluenciaAt(cg.getPosicionGrid()));
 }
Пример #7
0
 public float calcDist(Vector3 origen, CasillaGrid fin)
 {
     return(Mathf.Sqrt(Mathf.Pow((origen.x - fin.getPosicionGrid().x), 2) + Mathf.Pow((origen.y - fin.getPosicionGrid().y), 2)));
 }