Ejemplo n.º 1
0
 public NodoCircuito(int _x, int _y, NodoCircuito _hermanoIzq, NodoCircuito _hermanoDer)
 {
     x = _x;
     y = _y;
     hermanoIzquierda = _hermanoIzq;
     hermanoDerecha   = _hermanoDer;
 }
Ejemplo n.º 2
0
    void CrearCircuito()
    {
        //Se crea la lista de Nodos primero.
        for (int i = 0; i < cantidadPuntosCircuito; i++)
        {
            if (mapa[(int)puntosCircuito[i].x, (int)puntosCircuito[i].y] != 2)
            {
                NodoCircuito nuevoNodo = new NodoCircuito((int)puntosCircuito[i].x, (int)puntosCircuito[i].y);
                nodosCircuito.Add(nuevoNodo);
            }
        }

        Debug.Log("Hay : " + nodosCircuito.Count + " nodos libres.");

        //Se generan las conexiones entre los nodos cercanos.
        for (int i = 0; i < nodosCircuito.Count; i++)
        {
            if (mapa[(int)puntosCircuito[i].x, (int)puntosCircuito[i].y] == 2)
            {
                continue;
            }

            List <NodoCircuito> nodosCercanos = EncontrarNodosCercanos(puntosCircuito[i]);

            /*nodosCircuito[i].SetHermanoIzquierda(nodosCercanos[0]);
            *  nodosCercanos[0].SetHermanoDerecha(nodosCircuito[i]);
            *  nodosCircuito[i].SetHermanoDerecha(nodosCercanos[1]);
            *  nodosCercanos[1].SetHermanoIzquierda(nodosCircuito[i]);*/

            if (nodosCircuito[i].GetHermanoIzquierda() == null)
            {
                nodosCircuito[i].SetHermanoIzquierda(nodosCercanos[0]);
            }
            if (nodosCercanos[0].GetHermanoDerecha() == null)
            {
                nodosCercanos[0].SetHermanoDerecha(nodosCircuito[i]);
            }
            if (nodosCircuito[i].GetHermanoDerecha() == null)
            {
                nodosCircuito[i].SetHermanoDerecha(nodosCercanos[1]);
            }
            if (nodosCercanos[1].GetHermanoIzquierda() == null)
            {
                nodosCercanos[1].SetHermanoIzquierda(nodosCircuito[i]);
            }

            Debug.Log("Nodo " + nodosCircuito[i].GetCoordenadas() + " tiene a " + nodosCercanos[0].GetCoordenadas() + " como hermano derecho y a " + nodosCercanos[1].GetCoordenadas() + " como hermano izquierdo.");
        }
    }
Ejemplo n.º 3
0
 public void SetHermanoDerecha(NodoCircuito nuevoHermanoDerecha)
 {
     hermanoDerecha = nuevoHermanoDerecha;
 }
Ejemplo n.º 4
0
 public void SetHermanoIzquierda(NodoCircuito nuevoHermanoIzquierda)
 {
     hermanoIzquierda = nuevoHermanoIzquierda;
 }
Ejemplo n.º 5
0
    List <NodoCircuito> EncontrarNodosCercanos(Vector2 punto)
    {
        /*float distNodoDerecho = int.MaxValue;
         * float distNodoIzquierdo = int.MaxValue;
         * int indiceNodoDerecho = 0;
         * int indiceNodoIZquierdo = 0;
         *
         * for (int i = 0; i < cantidadPuntosCircuito; i++) {
         *      //Esta a la derecha.
         *      if(puntosCircuito[i].x > punto.x){
         *              if(Mathf.Abs(puntosCircuito[i].x - punto.x) < distNodoDerecho){
         *                      distNodoDerecho = Mathf.Abs(puntosCircuito[i].x - punto.x);
         *                      indiceNodoDerecho = i;
         *              }
         *      }else{
         *              if(Mathf.Abs(puntosCircuito[i].x - punto.x) < distNodoIzquierdo){
         *                      distNodoIzquierdo = Mathf.Abs(puntosCircuito[i].x - punto.x);
         *                      indiceNodoIZquierdo = i;
         *              }
         *      }
         * }
         *
         * List<NodoCircuito> nodos = new List<NodoCircuito>();
         * NodoCircuito nodoDerecho = new NodoCircuito((int)puntosCircuito[indiceNodoDerecho].x, (int)puntosCircuito[indiceNodoDerecho].y);
         * NodoCircuito nodoIzquierdo = new NodoCircuito((int)puntosCircuito[indiceNodoIZquierdo].x, (int)puntosCircuito[indiceNodoIZquierdo].y);
         * nodos.Add(nodoDerecho);
         * nodos.Add(nodoIzquierdo);
         *
         * return nodos;*/


        float distPrimerCercano    = int.MaxValue;
        float distSegundoCercano   = int.MaxValue;
        int   indicePrimerCercano  = 0;
        int   indiceSegundoCercano = 0;

        //for (int i = 0; i < cantidadPuntosCircuito; i++) {
        for (int i = 0; i < cantidadPuntosCircuito; i++)
        {
            Debug.Log("Punto analizado: " + punto + " vs punto actual: " + puntosCircuito[i]);
            if (puntosCircuito[i] != punto && mapa[(int)puntosCircuito[i].x, (int)puntosCircuito[i].y] != 2)
            {
                Debug.Log("Pase la verificación.");
                if (Vector2.Distance(punto, puntosCircuito[i]) < distPrimerCercano)
                {
                    distSegundoCercano   = distPrimerCercano;
                    indiceSegundoCercano = indicePrimerCercano;
                    distPrimerCercano    = Vector2.Distance(punto, puntosCircuito[i]);
                    indicePrimerCercano  = i;
                }
                else if (Vector2.Distance(punto, puntosCircuito[i]) < distSegundoCercano)
                {
                    distSegundoCercano   = Vector2.Distance(punto, puntosCircuito[i]);
                    indiceSegundoCercano = i;
                }
            }
        }

        List <NodoCircuito> nodos       = new List <NodoCircuito>();
        NodoCircuito        primerNodo  = new NodoCircuito((int)puntosCircuito[indicePrimerCercano].x, (int)puntosCircuito[indicePrimerCercano].y);
        NodoCircuito        segundoNodo = new NodoCircuito((int)puntosCircuito[indiceSegundoCercano].x, (int)puntosCircuito[indiceSegundoCercano].y);

        nodos.Add(primerNodo);
        nodos.Add(segundoNodo);

        return(nodos);
    }