Exemple #1
0
    public NavMeshModel(Vector3[] aNavMeshVertice, int[] aNavMeshIndice)
    {
        NavMeshTools.MergeVertex(aNavMeshVertice, aNavMeshIndice, out navMeshVertice, out navMeshIndice);

        InitNodes();
        InitNeighbors();

        RefreshMesh();
    }
Exemple #2
0
    public void ExportNavMesh()
    {
        NavMeshTriangulation navMeshTriangulation = NavMesh.CalculateTriangulation();

        Vector3[] vertices = null;
        int[]     indices  = null;
        NavMeshTools.MergeVertex(navMeshTriangulation.vertices, navMeshTriangulation.indices, out vertices, out indices);
        string objContent = NavMeshTools.SerializeToObj(vertices, indices);
        string objPath    = Path.Combine(Application.dataPath, "navmesh.obj");

        File.WriteAllText(objPath, objContent);
    }
Exemple #3
0
    public IEnumerator UpdateNavMeshAndWait()
    {
        if (HasBuildOperationStarted || AiManager.nav_disable || !AI.npc_enable)
        {
            yield break;
        }
        HasBuildOperationStarted = false;
        Bounds.center            = base.transform.position;
        if (!overrideAutoBounds)
        {
            Bounds.size = new Vector3(CellSize * CellCount, Height, CellSize * CellCount);
        }
        IEnumerator enumerator = NavMeshTools.CollectSourcesAsync(Bounds, LayerMask, NavMeshCollectGeometry, defaultArea, use_baked_terrain_mesh, CellSize, sources, AppendModifierVolumes, UpdateNavMeshAsync);

        if (AiManager.nav_wait)
        {
            yield return(enumerator);
        }
        else
        {
            StartCoroutine(enumerator);
        }
        if (!AiManager.nav_wait)
        {
            UnityEngine.Debug.Log("nav_wait is false, so we're not waiting for the navmesh to finish generating. This might cause your server to sputter while it's generating.");
            yield break;
        }
        int lastPct = 0;

        while (!HasBuildOperationStarted)
        {
            Thread.Sleep(250);
            yield return(null);
        }
        while (BuildingOperation != null)
        {
            int num = (int)(BuildingOperation.progress * 100f);
            if (lastPct != num)
            {
                UnityEngine.Debug.LogFormat("{0}%", num);
                lastPct = num;
            }
            Thread.Sleep(250);
            FinishBuildingNavmesh();
            yield return(null);
        }
    }
Exemple #4
0
    public IEnumerator UpdateNavMeshAndWait()
    {
        if (HasBuildOperationStarted || AiManager.nav_disable)
        {
            yield break;
        }
        HasBuildOperationStarted = false;
        Bounds.size = TerrainMeta.Size;
        NavMesh.pathfindingIterationsPerFrame = AiManager.pathfindingIterationsPerFrame;
        IEnumerator enumerator = NavMeshTools.CollectSourcesAsync(Bounds, LayerMask, NavMeshCollectGeometry, defaultArea, use_baked_terrain_mesh, AsyncTerrainNavMeshBakeCellSize, sources, AppendModifierVolumes, UpdateNavMeshAsync);

        if (AiManager.nav_wait)
        {
            yield return(enumerator);
        }
        else
        {
            StartCoroutine(enumerator);
        }
        if (!AiManager.nav_wait)
        {
            UnityEngine.Debug.Log("nav_wait is false, so we're not waiting for the navmesh to finish generating. This might cause your server to sputter while it's generating.");
            yield break;
        }
        int lastPct = 0;

        while (!HasBuildOperationStarted)
        {
            Thread.Sleep(250);
            yield return(null);
        }
        while (BuildingOperation != null)
        {
            int num = (int)(BuildingOperation.progress * 100f);
            if (lastPct != num)
            {
                UnityEngine.Debug.LogFormat("{0}%", num);
                lastPct = num;
            }
            Thread.Sleep(250);
            FinishBuildingNavmesh();
            yield return(null);
        }
    }