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(); } } }