Exemple #1
0
    override public void UpdateVisibleChunks()
    {
        HashSet <Vector2> alreadyUpdatedChunkCoords = new HashSet <Vector2>();

        for (int i = visibleTerrainChunksLerp.Count - 1; i >= 0; i--)
        {
            alreadyUpdatedChunkCoords.Add(visibleTerrainChunksLerp[i].coord);
            visibleTerrainChunksLerp[i].UpdateTerrainChunk();
        }

        int currentChunkCoordX = Mathf.RoundToInt(viewerPosition.x / meshWorldSize);
        int currentChunkCoordY = Mathf.RoundToInt(viewerPosition.y / meshWorldSize);

        for (int yOffset = -chunksVisibleInViewDst; yOffset <= chunksVisibleInViewDst; yOffset++)
        {
            for (int xOffset = -chunksVisibleInViewDst; xOffset <= chunksVisibleInViewDst; xOffset++)
            {
                Vector2 viewedChunkCoord = new Vector2(currentChunkCoordX + xOffset, currentChunkCoordY + yOffset);
                if (!alreadyUpdatedChunkCoords.Contains(viewedChunkCoord))
                {
                    if (terrainChunkDictionaryLerp.ContainsKey(viewedChunkCoord))
                    {
                        terrainChunkDictionaryLerp[viewedChunkCoord].UpdateTerrainChunk();
                    }
                    else
                    {
                        TerrainChunkLerp newChunk = new TerrainChunkLerp(viewedChunkCoord, region, meshSettings, detailLevels, colliderLODIndex, transform, viewer, mapMaterial);
                        terrainChunkDictionaryLerp.Add(viewedChunkCoord, newChunk);
                        newChunk.onVisibilityChanged += OnTerrainChunkVisibilityChanged;
                        newChunk.Load();
                    }
                }
            }
        }
    }
Exemple #2
0
 public void OnTerrainChunkVisibilityChanged(TerrainChunkLerp chunk, bool isVisible)
 {
     if (isVisible)
     {
         visibleTerrainChunksLerp.Add(chunk);
     }
     else
     {
         visibleTerrainChunksLerp.Remove(chunk);
     }
 }