Files
Fishing2/Packages/com.waveharmonic.crest/Shared/Scripts/SendUnityEvent.cs
2025-05-10 12:49:47 +08:00

92 lines
2.0 KiB
C#

// Crest Water System
// Copyright © 2024 Wave Harmonic. All rights reserved.
using UnityEngine;
using UnityEngine.Events;
namespace WaveHarmonic.Crest.Examples
{
#if !CREST_DEBUG
[AddComponentMenu("")]
#endif
[ExecuteAlways]
sealed class SendUnityEvent : MonoBehaviour
{
[SerializeField, HideInInspector]
#pragma warning disable 414
int _Version = 0;
#pragma warning restore 414
[SerializeField]
float _ExecuteUpdateEvery;
[SerializeField]
float _StopExecutingUpdateAfter = Mathf.Infinity;
[SerializeField]
UnityEvent _OnEnable = new();
[SerializeField]
UnityEvent _OnDisable = new();
[SerializeField]
UnityEvent<float> _OnUpdate = new();
[SerializeField]
UnityEvent _OnLegacyRenderPipeline = new();
[SerializeField]
UnityEvent _OnHighDefinitionPipeline = new();
[SerializeField]
UnityEvent _OnUniversalRenderPipeline = new();
float _TimeSinceEnabled;
float _LastUpdateTime;
void OnEnable()
{
_TimeSinceEnabled = 0f;
_OnEnable.Invoke();
if (RenderPipelineHelper.IsHighDefinition)
{
_OnHighDefinitionPipeline?.Invoke();
}
else if (RenderPipelineHelper.IsUniversal)
{
_OnUniversalRenderPipeline?.Invoke();
}
else
{
_OnLegacyRenderPipeline?.Invoke();
}
}
void OnDisable()
{
_OnDisable.Invoke();
}
void Update()
{
_TimeSinceEnabled += Time.deltaTime;
_LastUpdateTime += Time.deltaTime;
if (_LastUpdateTime < _ExecuteUpdateEvery)
{
return;
}
_LastUpdateTime = 0;
if (_TimeSinceEnabled > _StopExecutingUpdateAfter)
{
return;
}
_OnUpdate.Invoke(_TimeSinceEnabled);
}
}
}