52 lines
1.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|