Ejemplo n.º 1
0
    /// <summary>
    /// actualiza el chunk: malla renderizada y malla del colisionador
    /// </summary>
    public void UpdateThisChunk()
    {
        if (_heightMapAndColorArrayHaveStored)
        {
            // distancia entre el jugador y el borde más cercano (al jugador) <= maxima distancia establecida como visible --- > visible = true
            bool visible = Mathf.Sqrt(_bounds.SqrDistance(_generator.ActualPositionOfPlayer)) <= _generator.MaxDistanceVisibleOfPlayer;

            if (visible)
            {
                //Busqueda el LOD adecuado
                int actualLOD = locateActualLOD();

                //Si el LOD actual es de mayor calidad
                if (actualLOD == 0)
                {
                    UpdateColliderOfGameObject();
                }

                //Si el LOD actual cambiar resepcto al lod que se esta mostrando actualmente
                if (actualLOD != _indexPreviousLOD)
                {
                    UpdateMeshOfGameObject(actualLOD);
                }

                _generator.AddChunkToListOfChunkVisiblesAfterLastUpdate(this);
            }

            _gameObject.SetActive(visible);
        }
    }