예제 #1
0
    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);
        }
    }
예제 #2
0
    // 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);
    }