private void Update()
    {
        lock (ChunksAwaitingMeshApplying)
        {
            // When chunks are queued for re-generation run the below
            while (ChunksAwaitingMeshApplying.Count > 0)
            {
                if (_update >= _updatesPerFrame)
                {
                    _update = 0;
                    break;
                }
                TerrainChunk chunk = ChunksAwaitingMeshApplying.Dequeue();
                chunk.GenerateChunkNeighbours(_generateChunkNeighboursSteps);
                if (!IsMultiThreaded) chunk.GenerateChunkMesh(chunk.LODLevel, true);

                // Check if a chunk should generation or delete objects 
                if (MathUtility.CompareLodLevel(chunk.LODLevel, FarLodSize))
                {
                    ObjectManager.RemoveObjectsAtChunk(chunk);
                }
                else
                {
                    if (chunk.IsForcedObjectGeneration)
                    {
                        chunk.IsForcedObjectGeneration = false;
                        ObjectManager.PlaceObjectsAtChunk(chunk);
                    }
                }
                chunk.UpdateChunkMesh();
                _update++;
            }
        }
    }
Exemplo n.º 2
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        TerrainChunk chunk = (TerrainChunk)target;

        if (GUILayout.Button("ReGenerate Chunk Mesh"))
        {
            chunk.GenerateChunkMesh();
        }
    }
Exemplo n.º 3
0
 public void ThreadedWork()
 {
     while (IsRunning)
     {
         if (TerrainGeneration.ChunksAwaitingMeshRecaluation.Count > 0)
         {
             TerrainChunk chunk = TerrainGeneration.ChunksAwaitingMeshRecaluation.Dequeue();
             if (chunk)
             {
                 chunk.GenerateChunkMesh(chunk.LODLevel, chunk.IsForcedGeneration);
                 TerrainGeneration.ChunksAwaitingMeshApplying.Enqueue(chunk);
             }
         }
     }
     Debug.Log("Thread Ended");
 }