void displayVertices() { baseGraphData baseGraph = new baseGraphData(); baseGraph.size = this.size; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { GameObject vertex = Instantiate(vertexGO, new Vector3(transform.position.x + j, transform.position.y - i, 0), Quaternion.identity); vertex.name = graphNo + " - " + i + "," + j; vertex.transform.parent = gameObject.transform; vertexScript vs = vertex.GetComponent <vertexScript>(); if ((graphNo == 1) && (i == 0 || i == size - 1 || j == 0 || j == size - 1)) { if (!startingPointSet && UnityEngine.Random.Range(0f, 1f) <= 0.5f) { vs.setStartingPoint(true); startingPointSet = true; startingPointGO = vs.gameObject; startingPoingScript = vs; } borderVertices.Add(vs); } vs.setName(vertexNumbering); vertexNumbering++; } } }
public IEnumerator exportBaseGraphData() { yield return(new WaitForSeconds(1)); baseGraphData baseGraph = new baseGraphData(); baseGraph.size = this.size; GameObject[] vertexGOs = new GameObject[transform.childCount]; //vertexGOs = GameObject.FindGameObjectsWithTag("vertex"); for (int i = 0; i < transform.childCount; i++) { vertexGOs[i] = transform.GetChild(i).gameObject; } foreach (GameObject vertex in vertexGOs) { vertexData vertexData = new vertexData(); vertexScript vs = vertex.GetComponent <vertexScript>(); GameObject[] edgeGOs = new GameObject[vertex.transform.childCount]; //Debug.Log("This vertex has " + vertex.transform.childCount + " children"); for (int i = 0; i < vertex.transform.childCount; i++) { edgeGOs[i] = vertex.transform.GetChild(i).gameObject; } bool[] activeEdges = new bool[8]; for (int j = 0; j < edgeGOs.Length - 1; j++) { //Debug.Log("J - " + j + ", edgesGOs Length - " + edgeGOs.Length); if (edgeGOs[j].GetComponent <MeshRenderer>().enabled == true) { if (vs.isEdgeConnected(edgeGOs[j].GetComponent <edgeScript>()) != -1) { activeEdges[vs.isEdgeConnected(edgeGOs[j].GetComponent <edgeScript>())] = true; } } } vertexData.setVertexData(vs.getPos(), activeEdges, vs.getStartingPoint(), vs.getObjectivePoint()); baseGraph.addVertex(vertexData); } string baseGraphString = JsonUtility.ToJson(baseGraph); DirectoryInfo dir = new DirectoryInfo("Assets/baseGraphJSONs/"); FileInfo[] fileInfo = dir.GetFiles(); System.IO.File.WriteAllText("Assets/baseGraphJSONs/BaseGraphData" + fileInfo.Count() + ".json", baseGraphString); baseGraphString = ""; baseGraph.clear(); }
void initVertices() { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { vertexScript v = vertexGO.GetComponent <vertexScript>(); v.setActive(true); vertices.Add(v); } } }
// void connectEdgesAndVertices() // { // for(int i = 0; i < size; i++) // { // for(int j = 0; j < size; j++) // { // if(vertices[i,j].north == true) // { // if(!edgeExists(vertices[i,j],vertices[i+1,j])) // { // foreach (edgeScript edge in edges) // { // if(!edge.isActive()) // { // //edge.setVertices((i.ToString()+j.ToString()),((i+1).ToString()+j.ToString())); // edge.setActive(true); // } // } // } // } // if(vertices[i,j].south == true) // { // if(!edgeExists(vertices[i,j],vertices[i-1,j])) // { // foreach (edgeScript edge in edges) // { // if(!edge.isActive()) // { // //edge.setVertices((i.ToString()+j.ToString()),((i-1).ToString()+j.ToString())); // edge.setActive(true); // } // } // } // } // if(vertices[i,j].west == true) // { // if(!edgeExists(vertices[i,j],vertices[i,j-1])) // { // foreach (edgeScript edge in edges) // { // if(!edge.isActive()) // { // //edge.setVertices((i.ToString()+j.ToString()),(i.ToString()+(j-1).ToString())); // edge.setActive(true); // } // } // } // } // if(vertices[i,j].east == true) // { // if(!edgeExists(vertices[i,j],vertices[i,j+1])) // { // foreach (edgeScript edge in edges) // { // if(!edge.isActive()) // { // //edge.setVertices((i.ToString()+j.ToString()),(i.ToString()+(j+1).ToString())); // edge.setActive(true); // } // } // } // } // } // } // } bool edgeExists(vertexScript a, vertexScript b) { foreach (edgeScript edge in edges) { //if(edge.vertexA.ToString()+edge.vertexB.ToString() == a.getvertexNum() || edge.vertexB.ToString()+edge.vertexA.ToString() == a.getvertexNum()) { return(true); } } return(false); }
void setVertexNames() { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { string name = graphNo + " - " + i + "," + j; GameObject v = GameObject.Find(name); vertexScript vs = v.GetComponent <vertexScript>(); vs.setVertexNum(i, j); } } }
void initVertices() { vertexScript v = vertexGO.GetComponent <vertexScript>(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { vertices[i, j] = v; vertices[i, j].setActive(true); //setVertexRule(i,j); //vertices[i,j].setVertexNum(i,j); //Debug.Log(vertices[i,j].printStatus()); } } }
void createEdge(int graphNo, int i1, int j1, int i2, int j2, GameObject e, edgeScript es, vertexScript vsA, vertexScript vsB) { e.name = graphNo + " - [" + i1 + "," + j1 + "]-[" + i2 + "," + j2 + "]"; //e.SetActive(false); e.GetComponent <Renderer>().enabled = false; es.setWeight(UnityEngine.Random.Range(1, 101)); es.setA(vsA.getName()); es.setB(vsB.getName()); es.setGraphNo(graphNo); //edges[edgesInArray] = es; edges.Add(es); edgesInArray++; vsA.addEdge(es); }
List <edgeScript> initEdgesFromFile() { List <edgeScript> edges = new List <edgeScript>(); string path; if (graphNo == 1) { path = "Assets/vertices1.json"; } else { path = "Assets/vertices2.json"; } string[] vertexData; int[][] vertexDataInt; StreamReader reader = new StreamReader(path); string verticesFromFile = reader.ReadToEnd(); reader.Close(); verticesFromFile = verticesFromFile.Substring(1, verticesFromFile.Length - 2); vertexData = verticesFromFile.Split(']'); vertexDataInt = new int[vertexData.Length - 1][]; for (int i = 0; i < vertexData.Length; i++) { vertexData[i] = vertexData[i].Trim(' ', ',', '['); if (i < vertexData.Length - 1) { vertexDataInt[i] = stringToInt(vertexData[i]); } } int counter = 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { string name = graphNo + " - " + i + "," + j; GameObject v = GameObject.Find(name); vertexScript vs = v.GetComponent <vertexScript>(); if (i > 0 && horAndVer)//Add North Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3(j, (-i + 0.5f), 0), Quaternion.Euler(0, 0, 90)); } else { edge = Instantiate(edgeGO, new Vector3((j + size), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 90)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), j); if (vertexDataInt[counter][1] == 1) { string nameB = graphNo + " - " + (i - 1) + "," + j; GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), j, edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (i > 0 && j > 0 && diag)//Add North-West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, -45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, -45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), (j - 1)); if (vertexDataInt[counter][0] == 1) { string nameB = graphNo + " - " + (i - 1) + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), (j - 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (i > 0 && j < size - 1 && diag)//Add North-East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), (j + 1)); if (vertexDataInt[counter][2] == 1) { string nameB = graphNo + " - " + (i - 1) + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), (j + 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (i < size - 1 && horAndVer)//Add South Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3(j, (-i - 0.5f), 0), Quaternion.Euler(0, 0, 90)); } else { edge = Instantiate(edgeGO, new Vector3(j + size, (-i - 0.5f), 0), Quaternion.Euler(0, 0, 90)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), j); if (vertexDataInt[counter][6] == 1) { string nameB = graphNo + " - " + (i + 1) + "," + j; GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), j, edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (i < size - 1 && j > 0 && diag)//Add South-West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, 45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, 45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), (j - 1)); if (vertexDataInt[counter][5] == 1) { string nameB = graphNo + " - " + (i + 1) + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), (j - 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (i < size - 1 && j < size - 1 && diag)//Add South-East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, -45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, -45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), (j + 1)); if (vertexDataInt[counter][7] == 1) { string nameB = graphNo + " - " + (i + 1) + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), (j + 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (j > 0 && horAndVer)//Add West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), -i, 0), Quaternion.identity); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), -i, 0), Quaternion.identity); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, i, (j - 1)); if (vertexDataInt[counter][3] == 1) { string nameB = graphNo + " - " + i + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, i, (j - 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } if (j < size - 1 && horAndVer)//Add East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), -i, 0), Quaternion.identity); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), -i, 0), Quaternion.identity); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, i, (j + 1)); if (vertexDataInt[counter][4] == 1) { string nameB = graphNo + " - " + i + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, i, (j + 1), edge, e, vs, vsB); edges.Add(e); } else { Destroy(edge); } } counter++; } } return(edges); }
void initEdges() { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { string name = graphNo + " - " + i + "," + j; GameObject v = GameObject.Find(name); vertexScript vs = v.GetComponent <vertexScript>(); if (i > 0 && horAndVer)//Add North Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3(j, (-i + 0.5f), 0), Quaternion.Euler(0, 0, 90)); } else { edge = Instantiate(edgeGO, new Vector3((j + size), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 90)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), j); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i - 1) + "," + j; GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), j, edge, e, vs, vsB); } else { Destroy(edge); } } if (i > 0 && j > 0 && diag)//Add North-West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, -45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, -45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), (j - 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i - 1) + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), (j - 1), edge, e, vs, vsB); } else { Destroy(edge); } } if (i > 0 && j < size - 1 && diag)//Add North-East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), (-i + 0.5f), 0), Quaternion.Euler(0, 0, 45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i - 1), (j + 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i - 1) + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i - 1), (j + 1), edge, e, vs, vsB); } else { Destroy(edge); } } if (i < size - 1 && horAndVer)//Add South Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3(j, (-i - 0.5f), 0), Quaternion.Euler(0, 0, 90)); } else { edge = Instantiate(edgeGO, new Vector3(j + size, (-i - 0.5f), 0), Quaternion.Euler(0, 0, 90)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), j); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i + 1) + "," + j; GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), j, edge, e, vs, vsB); } else { Destroy(edge); } } if (i < size - 1 && j > 0 && diag)//Add South-West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, 45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, 45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), (j - 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i + 1) + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), (j - 1), edge, e, vs, vsB); } else { Destroy(edge); } } if (i < size - 1 && j < size - 1 && diag)//Add South-East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, -45)); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), (-i - 0.5f), 0), Quaternion.Euler(0, 0, -45)); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, (i + 1), (j + 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + (i + 1) + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, (i + 1), (j + 1), edge, e, vs, vsB); } else { Destroy(edge); } } if (j > 0 && horAndVer)//Add West Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j - 0.5f), -i, 0), Quaternion.identity); } else { edge = Instantiate(edgeGO, new Vector3((j + size - 0.5f), -i, 0), Quaternion.identity); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, i, (j - 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + i + "," + (j - 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, i, (j - 1), edge, e, vs, vsB); } else { Destroy(edge); } } if (j < size - 1 && horAndVer)//Add East Edge { GameObject edge; if (graphNo == 1) { edge = Instantiate(edgeGO, new Vector3((j + 0.5f), -i, 0), Quaternion.identity); } else { edge = Instantiate(edgeGO, new Vector3((j + size + 0.5f), -i, 0), Quaternion.identity); } edge.transform.parent = v.transform; edgeScript e = edge.GetComponent <edgeScript>(); e.setVertices(i, j, i, (j + 1)); if (!edgeExists(e)) { string nameB = graphNo + " - " + i + "," + (j + 1); GameObject vB = GameObject.Find(nameB); vertexScript vsB = vB.GetComponent <vertexScript>(); createEdge(graphNo, i, j, i, (j + 1), edge, e, vs, vsB); } else { Destroy(edge); } } //vertices[i,j] = vs; } } }