using Koptilnya.StateMachine; using Mirror; using UnityEngine; namespace Characters.Enemy.States { public class IdleState : State { 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("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(); } } } }