87 lines
1.7 KiB
C#
87 lines
1.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace UltimateWater.Internal
|
|
{
|
|
[RequireComponent(typeof(Renderer))]
|
|
public sealed class WaterSimpleMask : MonoBehaviour
|
|
{
|
|
[FormerlySerializedAs("water")]
|
|
[SerializeField]
|
|
private Water _Water;
|
|
|
|
[FormerlySerializedAs("renderQueuePriority")]
|
|
[SerializeField]
|
|
private int _RenderQueuePriority;
|
|
|
|
private const string _WaterIdName = "_WaterId";
|
|
|
|
public Renderer Renderer { get; private set; }
|
|
|
|
public int RenderQueuePriority
|
|
{
|
|
get
|
|
{
|
|
return _RenderQueuePriority;
|
|
}
|
|
}
|
|
|
|
public Water Water
|
|
{
|
|
get
|
|
{
|
|
return _Water;
|
|
}
|
|
set
|
|
{
|
|
if (!(_Water == value))
|
|
{
|
|
base.enabled = false;
|
|
_Water = value;
|
|
base.enabled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
SetObjectLayer();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
Renderer = GetComponent<Renderer>();
|
|
Renderer.enabled = false;
|
|
Renderer.material.SetFloat("_WaterId", 1 << _Water.WaterId);
|
|
SetObjectLayer();
|
|
if (Renderer == null)
|
|
{
|
|
throw new InvalidOperationException("WaterSimpleMask is attached to an object without any renderer.");
|
|
}
|
|
_Water.Renderer.AddMask(this);
|
|
_Water.WaterIdChanged += OnWaterIdChanged;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
_Water.WaterIdChanged -= OnWaterIdChanged;
|
|
_Water.Renderer.RemoveMask(this);
|
|
}
|
|
|
|
private void SetObjectLayer()
|
|
{
|
|
if (base.gameObject.layer != WaterProjectSettings.Instance.WaterTempLayer)
|
|
{
|
|
base.gameObject.layer = WaterProjectSettings.Instance.WaterTempLayer;
|
|
}
|
|
}
|
|
|
|
private void OnWaterIdChanged()
|
|
{
|
|
Renderer component = GetComponent<Renderer>();
|
|
component.material.SetFloat("_WaterId", 1 << _Water.WaterId);
|
|
}
|
|
}
|
|
}
|