OldBlueWater/BlueWater/Assets/Crest/Crest-Examples/PirateCove/Scripts/DemoShotDynWaveConds.cs
2023-08-01 13:03:57 +09:00

63 lines
1.8 KiB
C#

// Crest Ocean System
// Copyright 2020 Wave Harmonic Ltd
using UnityEngine;
namespace Crest.Examples
{
[CreateAssetMenu(fileName = "Shot00", menuName = "Crest/Demo/Shot Dynamic Waves", order = 10000)]
public class DemoShotDynWaveConds : DemoShot
{
[SerializeField] float _animationPeriod = 4f;
[SerializeField] float _phase = Mathf.PI;
[SerializeField] float _waitTime = 3f;
[SerializeField] bool _oneShot = true;
ShapeGerstnerBatched[] _gerstners;
public override void OnPlay()
{
base.OnPlay();
_gerstners = FindObjectsOfType<ShapeGerstnerBatched>();
// i am getting the array in the reverse order compared to the hierarchy which bugs me. sort them based on sibling index,
// which helps if the gerstners are on sibling GOs.
System.Array.Sort(_gerstners, (a, b) => a.transform.GetSiblingIndex().CompareTo(b.transform.GetSiblingIndex()));
}
public override void UpdateShot(float shotTime, float remainingTime)
{
base.UpdateShot(shotTime, remainingTime);
if(shotTime < _waitTime)
{
return;
}
float angle = 2f * Mathf.PI * (shotTime - _waitTime) / _animationPeriod;
if(angle >= Mathf.PI * 2f && _oneShot)
{
_gerstners[0]._weight = 1f;
return;
}
foreach(var gerstner in _gerstners)
{
gerstner._weight = 0.5f + 0.5f * Mathf.Cos(angle);
// Add phase difference on animation of multiple gerstners
angle += _phase;
}
}
public override void OnStop()
{
base.OnStop();
_gerstners = null;
}
}
}