using System.Collections; using Koptilnya; using Koptilnya.StateMachine; using Mirror; using UnityEditor.Timeline.Actions; using UnityEngine; namespace Characters.Enemy.States { public class StunnedState : State { private readonly Enemy _enemy; private static readonly int StunnedAnimHash = Animator.StringToHash("stunned"); private bool _entered; public StunnedState(Enemy enemy) : base(EnemyState.Stunned) { _enemy = enemy; } public override void Enter() { if (_enemy.isServer) { _enemy.canAttack = false; _enemy.target = null; _enemy.SetSpeedMul(0f); _enemy.networkAnimator.SetTrigger("stunned"); } if(_enemy.isClient) { _enemy.hitVFX.Stop(); _enemy.hitVFX.Play(); } } [Server] public override void ReEnter() { Debug.Log("Reenter stunned state"); _enemy.networkAnimator.SetTrigger("stunned"); } public override void Update() { if (!_enemy.isServer) return; var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0); bool inAnim = stateInfo.shortNameHash == StunnedAnimHash; if (!_entered && inAnim) _entered = true; if (_entered && !inAnim) { _enemy.state = EnemyState.Patrol; } } public override void Exit() { if (!_enemy.isServer) return; _entered = false; _enemy.networkAnimator.ResetTrigger("stunned"); _enemy.SetSpeedMul(1f); _enemy.canAttack = true; } } }