67 lines
1.4 KiB
C#
67 lines
1.4 KiB
C#
using UnityEngine;
|
|
|
|
namespace UltimateWater
|
|
{
|
|
public sealed class WaterFloat : MonoBehaviour
|
|
{
|
|
public enum DisplacementMode
|
|
{
|
|
Height = 0,
|
|
Displacement = 1
|
|
}
|
|
|
|
[SerializeField]
|
|
private DisplacementMode _DisplacementMode = DisplacementMode.Displacement;
|
|
|
|
[SerializeField]
|
|
private float _HeightBonus;
|
|
|
|
[Range(0.04f, 1f)]
|
|
[SerializeField]
|
|
private float _Precision = 0.2f;
|
|
|
|
[SerializeField]
|
|
private Water _Water;
|
|
|
|
private Vector3 _InitialPosition;
|
|
|
|
private Vector3 _PreviousPosition;
|
|
|
|
private WaterSample _Sample;
|
|
|
|
private void Start()
|
|
{
|
|
if (_Water == null)
|
|
{
|
|
_Water = Utilities.GetWaterReference();
|
|
}
|
|
if (!_Water.IsNullReference(this))
|
|
{
|
|
_InitialPosition = base.transform.position;
|
|
_PreviousPosition = _InitialPosition;
|
|
_Sample = new WaterSample(_Water, (WaterSample.DisplacementMode)_DisplacementMode, _Precision);
|
|
_Sample.Start(base.transform.position);
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
_Sample.Stop();
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
_InitialPosition += base.transform.position - _PreviousPosition;
|
|
Vector3 andReset = _Sample.GetAndReset(_InitialPosition.x, _InitialPosition.z, WaterSample.ComputationsMode.ForceCompletion);
|
|
andReset.y += _HeightBonus;
|
|
base.transform.position = andReset;
|
|
_PreviousPosition = andReset;
|
|
}
|
|
|
|
private void Reset()
|
|
{
|
|
_Water = Utilities.GetWaterReference();
|
|
}
|
|
}
|
|
}
|