78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
|
|
[ExecuteInEditMode]
|
|
public class FoamShore : MonoBehaviour
|
|
{
|
|
public Material deformerCustomMaterial;
|
|
|
|
public WaterDeformer waterDeformer;
|
|
|
|
public float minAliveTime = 6f;
|
|
|
|
public float maxAliveTime = 8f;
|
|
|
|
public float maxPosition = 5f;
|
|
|
|
public float maxSize = 15f;
|
|
|
|
private MaterialPropertyBlock mpb;
|
|
|
|
private float aliveTime;
|
|
|
|
private float startTime;
|
|
|
|
private DecalProjector m_DecalProjectorComponent;
|
|
|
|
private void Awake()
|
|
{
|
|
m_DecalProjectorComponent = GetComponent<DecalProjector>();
|
|
m_DecalProjectorComponent.material = new Material(m_DecalProjectorComponent.material);
|
|
}
|
|
|
|
public void OnEnable()
|
|
{
|
|
mpb = new MaterialPropertyBlock();
|
|
waterDeformer.SetPropertyBlock(mpb);
|
|
startTime = Time.realtimeSinceStartup;
|
|
aliveTime = Random.Range(minAliveTime, maxAliveTime);
|
|
Reset();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
float num = (Time.realtimeSinceStartup - startTime) % aliveTime / aliveTime;
|
|
float num2 = 1f - Mathf.Abs(4f * Mathf.Pow(num - 0.5f, 2f));
|
|
float value = (((double)num <= 0.5) ? num2 : 1f);
|
|
float value2 = (((double)num <= 0.5) ? 0f : (1f - num2));
|
|
Vector3 size = m_DecalProjectorComponent.size;
|
|
size.y = Mathf.Lerp(0f, maxSize, num2);
|
|
m_DecalProjectorComponent.size = size;
|
|
Vector3 localPosition = base.transform.localPosition;
|
|
localPosition.x = Mathf.Lerp(0f, maxPosition, num2);
|
|
base.transform.localPosition = localPosition;
|
|
m_DecalProjectorComponent.material.SetFloat("_Opacity", value);
|
|
m_DecalProjectorComponent.material.SetFloat("_NormalizedAliveTime", num);
|
|
m_DecalProjectorComponent.material.SetFloat("_ContrastNormalized", value2);
|
|
mpb.SetFloat("_NormalizedAliveTime", num);
|
|
Vector2 regionSize = waterDeformer.regionSize;
|
|
regionSize.y = Mathf.Lerp(0f, maxSize, num2);
|
|
waterDeformer.regionSize = regionSize;
|
|
waterDeformer.amplitude = num2 * 0.7f;
|
|
if ((double)num > 0.99)
|
|
{
|
|
m_DecalProjectorComponent.material.SetFloat("_Opacity", 0f);
|
|
waterDeformer.regionSize = new Vector2(regionSize.x, 0f);
|
|
m_DecalProjectorComponent.size = new Vector3(size.x, 0f, size.z);
|
|
base.gameObject.SetActive(value: false);
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
Random.Range(0, 2);
|
|
Random.Range(0, 2);
|
|
m_DecalProjectorComponent.material.SetFloat("_Opacity", 0f);
|
|
}
|
|
}
|