77 lines
2.1 KiB
C#
77 lines
2.1 KiB
C#
using Animancer;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class PlayerVisual : MonoBehaviour
|
|
{
|
|
[SerializeField] NamedAnimancerComponent namedAnimancer;
|
|
|
|
[SerializeField] private INFO _playerInfo;
|
|
|
|
private AnimancerState _currentState;
|
|
private readonly Queue<string> _animationQueue = new Queue<string>();
|
|
|
|
private void PlayActionEventHandler(PlayActionEvent @event)
|
|
{
|
|
_currentState = namedAnimancer.TryPlay(@event.AnimationName);
|
|
}
|
|
|
|
public void InitHostPlayerEventDoneHandler()
|
|
{
|
|
namedAnimancer = GetComponentInChildren<NamedAnimancerComponent>();
|
|
if(namedAnimancer == null)
|
|
{
|
|
BrewMonster.BMLogger.LogError("animancer == null");
|
|
return;
|
|
}
|
|
var player = GetComponentInParent<CECPlayer>();
|
|
if(player == null)
|
|
{
|
|
BrewMonster.BMLogger.LogError("player == null");
|
|
return;
|
|
}
|
|
_playerInfo = player.GetPlayInfo();
|
|
EventBus.SubscribeChannel<PlayActionEvent>(_playerInfo.cid, PlayActionEventHandler);
|
|
EventBus.SubscribeChannel<QueueActionEvent>(_playerInfo.cid, QueueActionEventHandler);
|
|
}
|
|
|
|
private void QueueActionEventHandler(QueueActionEvent @event)
|
|
{
|
|
EnqueueAnimation(@event.AnimationName);
|
|
}
|
|
public void EnqueueAnimation(string animName)
|
|
{
|
|
_animationQueue.Enqueue(animName);
|
|
if (!namedAnimancer.IsPlaying())
|
|
PlayNext();
|
|
else
|
|
{
|
|
_currentState.Events.OnEnd = PlayNext;
|
|
}
|
|
}
|
|
|
|
private void PlayNext()
|
|
{
|
|
if (_animationQueue.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string animName = _animationQueue.Dequeue();
|
|
var state = namedAnimancer.TryPlay(animName);
|
|
|
|
// Khi clip kết thúc thì gọi tiếp cái kế tiếp
|
|
state.Events.OnEnd = PlayNext;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
EventBus.UnsubscribeAllInChannel(_playerInfo.cid);
|
|
}
|
|
public bool IsAnimationExist(string animationName)
|
|
{
|
|
return namedAnimancer.States.TryGet("ActionName", out var existingState) ? true : false;
|
|
}
|
|
}
|