public NodoCircuito(int _x, int _y, NodoCircuito _hermanoIzq, NodoCircuito _hermanoDer) { x = _x; y = _y; hermanoIzquierda = _hermanoIzq; hermanoDerecha = _hermanoDer; }
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."); } }
public void SetHermanoDerecha(NodoCircuito nuevoHermanoDerecha) { hermanoDerecha = nuevoHermanoDerecha; }
public void SetHermanoIzquierda(NodoCircuito nuevoHermanoIzquierda) { hermanoIzquierda = nuevoHermanoIzquierda; }
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); }