public override void OnInspectorGUI() { // On dessine l'inspecteur standard DrawDefaultInspector(); // Recuperation des differents scripts PoissonSampling poissonScript = (PoissonSampling)GameObject.Find("GenManager").GetComponent <PoissonSampling>(); Town townScript = (Town)GameObject.Find("GenManager").GetComponent <Town>(); HalfEdgesMap halfEdgesMap = (HalfEdgesMap)GameObject.Find("HalfEdge").GetComponent <HalfEdgesMap>(); IntersectionMaker intersectionScript = (IntersectionMaker)target; // Chaque condition dessine un bouton execute le code mis en <then> if (GUILayout.Button("Generate Roads")) { intersectionScript.ComputeRoad(false); //intersectionScript.StartCoroutine(intersectionScript.threadedComputeRoad()); } if (GUILayout.Button("Delete Roads")) { //intersectionScript.ClearInstanciated(); } if (GUILayout.Button("Delete triangles")) { intersectionScript.ComputeRoad(true); } if (GUILayout.Button("Add Houses")) { halfEdgesMap.ExtrudeAllFaces(50f, 200f); } }
// Calcul les routes en fonctions des voisins public void ComputeRoad(bool delTriangles) { m_intersections = new List <Intersection>(); m_halfEdgeMap = GameObject.Find("HalfEdge").GetComponent <HalfEdgesMap>(); m_halfEdgeMap.Init(); // va lancer la génération m_poissonScript = gameObject.GetComponent <PoissonSampling>(); InitPoissonGrid(); //m_poissonScript.threadedComputePoints(); ComputeNearestPoint(m_poissonScript.getRowSize, m_poissonScript.getColSize); // TODO get des lignes et colonnes if (delTriangles) { this.DelTriangles(); } for (int i = 0; i < m_poissonScript.getRowSize; i++) { for (int j = 0; j < m_poissonScript.getColSize; j++) { if (m_poissonGrid[i, j] != null) { for (int n = 0; n < m_poissonGrid[i, j].Neighbours.Count; n++) { Vector2Int coords = m_poissonGrid[i, j].Neighbours[n].coords; if (!(m_poissonGrid[i, j].Neighbours[n].joined) && !(m_poissonGrid[coords.x, coords.y].IsJoined(m_poissonGrid[i, j]))) { m_poissonGrid[i, j].SetJoined(m_poissonGrid[coords.x, coords.y], true); m_poissonGrid[coords.x, coords.y].SetJoined(m_poissonGrid[i, j], true); // Pour passer à la grille en 1 dimension -> j * maxI + i int index = m_poissonGrid[coords.x, coords.y].IndexOfInter(m_poissonGrid[i, j]); //Debug.Log("HalfEdges ind : " + m_poissonGrid[i, j].IndexInMap); m_halfEdgeMap.LinkTwoPoints((Vector3)m_poissonScript.poissonGrid[i, j], (Vector3)m_poissonScript.poissonGrid[coords.x, coords.y]); // Relie les routes entre les bordures de l'intersection //GenerateRoad((Vector3)m_poissonGrid[i, j].Neighbours[n].positionOnIntersection, (Vector3)m_poissonGrid[coords.x, coords.y].Neighbours[index].positionOnIntersection); } } } } } m_halfEdgeMap.FillEsdgesWithRoads(); m_halfEdgeMap.ComputeAllIntersectionPoints(m_poissonScript.poissonGrid, m_poissonScript.getRowSize, m_poissonScript.getColSize); }