2024-03-19 17:42:38 +03:00
|
|
|
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 Task _task;
|
|
|
|
|
|
|
|
private static readonly int DamageAnimHash = Animator.StringToHash("damage");
|
|
|
|
|
|
|
|
public StunnedState(Enemy enemy) : base(EnemyState.Stunned)
|
|
|
|
{
|
|
|
|
_enemy = enemy;
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void Enter()
|
|
|
|
{
|
2024-03-19 17:56:12 +03:00
|
|
|
if (_enemy.isServer)
|
|
|
|
{
|
|
|
|
_enemy.canAttack = false;
|
|
|
|
_enemy.target = null;
|
2024-03-19 17:42:38 +03:00
|
|
|
|
2024-03-19 17:56:12 +03:00
|
|
|
_enemy.SetSpeedMul(0f);
|
|
|
|
_enemy.GetComponent<NetworkAnimator>().SetTrigger(DamageAnimHash);
|
|
|
|
|
|
|
|
_task = new Task(GetStunned());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_enemy.hitVFX.Stop();
|
|
|
|
_enemy.hitVFX.Play();
|
|
|
|
}
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
|
2024-03-19 17:56:12 +03:00
|
|
|
[Server]
|
2024-03-19 17:42:38 +03:00
|
|
|
public override void ReEnter()
|
|
|
|
{
|
|
|
|
_task.Stop();
|
|
|
|
_task.Start();
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void Exit()
|
|
|
|
{
|
2024-03-19 17:56:12 +03:00
|
|
|
if (!_enemy.isServer) return;
|
|
|
|
|
2024-03-19 17:42:38 +03:00
|
|
|
_task.Stop();
|
|
|
|
_enemy.SetSpeedMul(1f);
|
|
|
|
|
|
|
|
_enemy.canAttack = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
IEnumerator GetStunned()
|
|
|
|
{
|
|
|
|
yield return new WaitForSeconds(6);
|
|
|
|
|
2024-03-19 17:56:12 +03:00
|
|
|
_enemy.state = EnemyState.Patrol;
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|