namespace UnityEngine.AdaptivePerformance
{
///
/// A scaler used by for adjusting layer culling distances.
///
public class AdaptiveLayerCulling : AdaptivePerformanceScaler
{
float[] m_defaultDistances = new float[32];
float[] m_scaledDistances = new float[32];
bool init = false;
Camera m_cachedCamera;
///
/// Ensures settings are applied during startup.
///
protected override void Awake()
{
base.Awake();
if (m_Settings == null)
return;
ApplyDefaultSetting(m_Settings.scalerSettings.AdaptiveLayerCulling);
}
///
/// Callback when scaler gets disabled and removed from indexer
///
protected override void OnDisabled()
{
init = false;
if (!Camera.main || m_defaultDistances == null)
return;
Camera.main.layerCullDistances = m_defaultDistances;
}
///
/// Callback when scaler gets enabled and added to the indexer
///
protected override void OnEnabled()
{
AsignDefaultValues();
}
///
/// Callback for any level change.
///
protected override void OnLevel()
{
if (!Camera.main)
return;
AsignDefaultValues();
if (ScaleChanged())
{
for (var i = 31; i >= 0; --i)
{
if (m_defaultDistances[i] == 0)
continue;
m_scaledDistances[i] = m_defaultDistances[i] * Scale;
}
Camera.main.layerCullDistances = m_scaledDistances;
}
}
void AsignDefaultValues()
{
if (m_cachedCamera == null || m_cachedCamera != Camera.main)
{
m_cachedCamera = Camera.main;
init = false;
}
if (init || !Camera.main)
return;
m_defaultDistances = Camera.main.layerCullDistances;
init = true;
}
}
}