65 lines
1.8 KiB
C#

using Koptilnya.StateMachine;
using Mirror;
using UnityEngine;
namespace Characters.Enemy.States
{
public class IdleState : State<EnemyState>
{
private readonly Enemy _enemy;
private static readonly int DanceAnimHash = Animator.StringToHash("dance");
private readonly AudioClip _danceClip;
private bool _entered;
public IdleState(Enemy enemy) : base(EnemyState.Idle)
{
_enemy = enemy;
_danceClip = Resources.Load<AudioClip>("Audio/EnemySounds/FX/dance");
}
public override void Enter()
{
if (_enemy.isServer)
{
_enemy.SetSpeedMul(0f);
_enemy.networkAnimator.SetTrigger(DanceAnimHash);
}
if (_enemy.isClient)
{
_enemy.audioSource.clip = _danceClip;
_enemy.audioSource.volume = 0.03f;
_enemy.audioSource.Play();
}
}
[ServerCallback]
public override void Update()
{
var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0);
bool inAnim = stateInfo.shortNameHash == DanceAnimHash;
if (!_entered && inAnim) _entered = true;
if (_entered && !inAnim) _enemy.ChangeState(EnemyState.Patrol);
}
public override void Exit()
{
if (_enemy.isServer)
{
_entered = false;
_enemy.networkAnimator.ResetTrigger(DanceAnimHash);
_enemy.SetSpeedMul(1f);
}
if (_enemy.isClient)
{
_enemy.audioSource.volume = 1f;
_enemy.audioSource.Stop();
}
}
}
}