canto/Assets/Scripts/Item/Entity/EquipmentAnimator.cs

51 lines
1.2 KiB
C#

using System.Threading;
using KitsuneCafe.Extension;
using KitsuneCafe.Sys.Attributes;
using R3;
using UnityEngine;
namespace KitsuneCafe.ItemSystem.Entities
{
public class EquipmentAnimator : MonoBehaviour
{
[Header("Dependencies")]
[SerializeField]
private Animator animator;
[SerializeField]
private EquipmentInstance equipment;
[Header("Combat")]
[SerializeField, AnimatorParam("animator")]
private string readyParam;
private CancellationTokenSource disableCancellationTokenSource;
private CancellationToken disableCancellationToken => disableCancellationTokenSource.Token;
private void OnValidate()
{
this.TryGetComponentIfNull(ref equipment);
}
public void OnEnable()
{
disableCancellationTokenSource = new();
var d = Disposable.CreateBuilder();
Observable.FromEventHandler<bool>(
e => equipment.Readied += e,
e => equipment.Readied -= e
)
.Select(eh => eh.e)
.Subscribe(ready => animator.SetBool(readyParam, ready))
.AddTo(ref d);
d.RegisterTo(disableCancellationToken);
}
private void OnDisable()
{
disableCancellationTokenSource.Cancel();
}
}
}