Ejemplo n.º 1
0
 public CasillaGrid(CasillaGrid casilla)
 {
     posicion    = casilla.getPosicion();
     coordenadas = casilla.getPosicionGrid();
     adyacentes  = casilla.getAdyacentes();
     tipo        = casilla.getTipoCasilla();
 }
Ejemplo n.º 2
0
    public List <NodoA> Neighbours(CasillaGrid casilla, Dictionary <TipoCasilla, float> moveIndex)
    {
        NodoA              aux        = null;
        List <NodoA>       listNodes  = new List <NodoA>();
        List <CasillaGrid> adyacentes = casilla.getAdyacentes();

        foreach (CasillaGrid c in adyacentes)
        {
            if (moveIndex[c.getTipoCasilla()] == Mathf.Infinity)
            {
                continue;
            }
            aux = new NodoA(c, casilla, moveIndex[c.getTipoCasilla()]);
            listNodes.Add(aux);
        }

        return(listNodes);
    }
Ejemplo n.º 3
0
    public CasillaGrid getClosest(CasillaGrid current, CasillaGrid goal)
    {
        float              bestDist   = Mathf.Infinity;
        float              bestCost   = Mathf.Infinity;
        CasillaGrid        best       = null;
        List <CasillaGrid> adyacentes = goal.getAdyacentes();

        foreach (CasillaGrid c in adyacentes)
        {
            /*
             * TODO
             * Antes de comprobar el adyacente más cercano al actual, comprobar el adyacente de menor coste.
             * Si todos tienen el mismo coste, comprobar distancias.
             *
             * */

            if (moveIndex[c.getTipoCasilla()] < bestCost)
            {
                bestDist = calcDist(current, c);
                best     = c;
                bestCost = moveIndex[c.getTipoCasilla()];
            }
        }

        if (bestCost == Mathf.Infinity)
        {
            foreach (CasillaGrid c in adyacentes)
            {
                if (calcDist(current, c) <= bestDist)
                {
                    bestDist = calcDist(current, c);
                    best     = c;
                    bestCost = moveIndex[c.getTipoCasilla()];
                }
            }
        }

        if (bestCost == Mathf.Infinity)
        {
            best = getClosest(current, best);
        }

        return(best);
    }
Ejemplo n.º 4
0
    protected void Update()
    {
        actualizaBarraSalud();

        if (seleccionada)
        {
            controlador.selected.GetComponent <MeshRenderer>().enabled = true;
            controlador.selected.transform.position = new Vector3(transform.position.x, transform.position.y, controlador.selected.transform.position.z);
        }

        int    coordenadaGridX = (int)controlador.getCasillaActual(this).getPosicionGrid().x;
        int    coordenadaGridY = (int)controlador.getCasillaActual(this).getPosicionGrid().y;
        Accion a = Accion.buscaEnemigo;

        this.setCoordenadas(coordenadaGridX, coordenadaGridY);

        bool click = Input.GetMouseButtonDown(1);

        if (seleccionada && click || path.Count > 0)
        {
            path.Clear();
            if (click)
            {
                target = controlador.getCasillaRaton();
            }

            if (target != null)
            {
                cg         = controlador.getCasillaActual(this);
                adyacentes = cg.getAdyacentes();

                if (moveIndex[target.getTipoCasilla()] == Mathf.Infinity)
                {
                    target = getClosest(cg, target);
                }

                setPath(AStar(cg, target, moveIndex));
                MovePlayer();
            }
        }


        if (!seleccionada)
        {
            a      = sbr.tomaDecision(this);
            target = new CasillaGrid(parseAction(a));


            if (target != null)
            {
                if (patrullando)
                {
                    List <CasillaGrid> patrullaActual = patrullas[numeroPatrulla];
                    int size = patrullaActual.Count;
                    if (Vector3.Distance(transform.position, target.getPosicion()) < 0.5f)
                    {
                        indicePatrulla = (indicePatrulla + 1) % size;
                        target         = patrullaActual[indicePatrulla];
                    }
                }
                //TODO: hacer que se compruebe constantemente la posición del target, y cuando cambie, volver a lanzar el A*
                //COMPROBAR LA POSICIÓN FINAL DEL TARGET DE CADA UNIDAD

                cg         = controlador.getCasillaActual(this);
                adyacentes = cg.getAdyacentes();


                setPath(AStar(cg, target, moveIndex));
                MovePlayer();
            }
        }
        actualizarIcono(a);
    }