76 lines
1.8 KiB
C#

using System.Collections;
using Koptilnya;
using Koptilnya.StateMachine;
using Mirror;
using UnityEditor.Timeline.Actions;
using UnityEngine;
namespace Characters.Enemy.States
{
public class StunnedState : State<EnemyState>
{
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;
}
}
}