canto/Assets/Scripts/Scene/CameraBounds.cs
2025-10-02 15:28:03 -04:00

52 lines
1.3 KiB
C#

using System.Threading;
using KitsuneCafe.Extension;
using R3;
using R3.Triggers;
using UnityAtoms.BaseAtoms;
using UnityAtoms.Tags;
using UnityEngine;
using UnityForge.PropertyDrawers;
namespace KitsuneCafe.Scene
{
public class CameraBounds : MonoBehaviour
{
[SerializeField]
private Animator animator;
[SerializeField]
private new Collider collider;
[SerializeField, AnimatorParameterName(AnimatorControllerParameterType.Trigger, nameof(animator))]
private string trigger;
[SerializeField]
private new StringConstant tag;
private CancellationTokenSource disableTokenSource;
private CancellationToken disableToken => disableTokenSource.Token;
private void OnValidate()
{
this.TryGetComponentIfNull(ref collider);
}
private void OnEnable()
{
disableTokenSource = new();
collider.OnTriggerEnterAsObservable()
.Where(col => col.TryGetComponent(out AtomTags tags) && tags.HasTag(tag.Value))
.Subscribe(_ =>
{
animator.SetTrigger(trigger);
})
.RegisterTo(disableToken);
}
private void OnDisable()
{
disableTokenSource.Cancel();
}
}
}