Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/FoamShore.cs
2026-03-04 09:37:33 +08:00

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);
}
}