using UnityEngine;
|
|
|
|
public enum WaterQuality {
|
|
High = 2,
|
|
Medium = 1,
|
|
Low = 0,
|
|
}
|
|
|
|
[ExecuteInEditMode]
|
|
public class WaterBase : MonoBehaviour
|
|
{
|
|
public Material sharedMaterial;
|
|
public WaterQuality waterQuality = WaterQuality.High;
|
|
public bool edgeBlend = true;
|
|
|
|
public void UpdateShader()
|
|
{
|
|
if(waterQuality > WaterQuality.Medium)
|
|
sharedMaterial.shader.maximumLOD = 501;
|
|
else if(waterQuality> WaterQuality.Low)
|
|
sharedMaterial.shader.maximumLOD = 301;
|
|
else
|
|
sharedMaterial.shader.maximumLOD = 201;
|
|
|
|
// If the system does not support depth textures (ie. NaCl), turn off edge bleeding,
|
|
// as the shader will render everything as transparent if the depth texture is not valid.
|
|
if (!SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.Depth))
|
|
edgeBlend = false;
|
|
|
|
if(edgeBlend)
|
|
{
|
|
Shader.EnableKeyword("WATER_EDGEBLEND_ON");
|
|
Shader.DisableKeyword("WATER_EDGEBLEND_OFF");
|
|
// just to make sure (some peeps might forget to add a water tile to the patches)
|
|
if (Camera.main)
|
|
Camera.main.depthTextureMode |= DepthTextureMode.Depth;
|
|
}
|
|
else
|
|
{
|
|
Shader.EnableKeyword("WATER_EDGEBLEND_OFF");
|
|
Shader.DisableKeyword("WATER_EDGEBLEND_ON");
|
|
}
|
|
}
|
|
|
|
public void WaterTileBeingRendered (Transform tr, Camera currentCam)
|
|
{
|
|
if (currentCam && edgeBlend)
|
|
currentCam.depthTextureMode |= DepthTextureMode.Depth;
|
|
}
|
|
|
|
public void Update ()
|
|
{
|
|
if(sharedMaterial)
|
|
UpdateShader();
|
|
}
|
|
}
|