Example #1
0
    private void UpdateVisibleQuadrants()
    {
        // Find quadrants that have to be visible
        List <Quadrant> newActiveQuadrants = new List <Quadrant>();

        foreach (Quadrant quadrant in root.FindQuadrantsOfSize(visibleQuadrantScale))
        {
            if (quadrant.VisibleByMainCam())
            {
                newActiveQuadrants.Add(quadrant);
            }
        }

        // Deactivate visible quadrants that have to be invisible
        for (int i = visibleQuadrants.Count - 1; i >= 0; i--)
        {
            Quadrant quadrant = visibleQuadrants[i];
            if (!newActiveQuadrants.Contains(quadrant))
            {
                quadrant.SetVisible(false);
                TerrainTexture terrainTexture = visibleQuadrantPairs[quadrant];
                terrainTexture.Deactivate();
                visibleQuadrantPairs.Remove(quadrant);
                terrainTexturePool.Add(terrainTexture);
            }
        }

        // Activate new visible quadrants
        visibleQuadrants = newActiveQuadrants;
        foreach (Quadrant quadrant in visibleQuadrants)
        {
            if (!visibleQuadrantPairs.ContainsKey(quadrant))
            {
                quadrant.SetVisible(true);

                // Only instantiate a new terrainTexture if the pool is empty
                if (terrainTexturePool.Count == 0)
                {
                    terrainTexturePool.Add(Instantiate(terrainPlanePrefab, transform));
                }

                TerrainTexture terrainTexture = terrainTexturePool[0];
                terrainTexturePool.Remove(terrainTexture);
                terrainTexture.gameObject.SetActive(true);
                terrainTexture.Setup(quadrant, loadType != TerrainLoadType.NONE);
                visibleQuadrantPairs.Add(quadrant, terrainTexture);
            }
        }
    }