65 lines
1.4 KiB
C#

using System;
using UnityEngine;
[Serializable]
public class WhirldLOD : MonoBehaviour
{
public GameObject[] lodObjs;
public int lodLevMax = 0;
[HideInInspector]
public int level = 0;
private int lastLevel = -1;
private float lodCheck;
public WhirldLOD()
{
lodCheck = UnityEngine.Random.Range(30, 60) / 10;
}
public void Start()
{
InvokeRepeating("SetLOD", 0f, lodCheck);
}
public void SetLOD()
{
//Level determined by distance to cam
if (lodLevMax == 0)
{
level = (World.lodDist > 0 ?
(int)(Mathf.Lerp(
0,
lodObjs.Length - 1,
Vector3.Distance(
transform.position,
Camera.main.transform.position) / World.lodDist)) :
lodObjs.Length - 1);
}
//Level determined directly by game quality level
else
{
level = (((int)QualitySettings.currentLevel >= lodLevMax) ? 0 : 1);
}
if (lastLevel != level)
{
BroadcastMessage(
"OnLOD",
level,
SendMessageOptions.DontRequireReceiver);
for (int i = 0; i < lodObjs.Length; i++)
{
bool desired = (i == level);
if (lodObjs[i].active != desired)
{
lodObjs[i].SetActiveRecursively(desired);
}
}
lastLevel = level;
}
}
}