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