2024-03-19 17:42:38 +03:00
|
|
|
using Koptilnya.StateMachine;
|
2024-03-19 20:18:01 +03:00
|
|
|
using Mirror;
|
2024-03-19 17:42:38 +03:00
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace Characters.Enemy.States
|
|
|
|
{
|
|
|
|
public class IdleState : State<EnemyState>
|
|
|
|
{
|
|
|
|
private readonly Enemy _enemy;
|
|
|
|
private static readonly int DanceAnimHash = Animator.StringToHash("dance");
|
|
|
|
|
2024-03-19 20:18:01 +03:00
|
|
|
private bool _entered;
|
|
|
|
|
2024-03-19 17:42:38 +03:00
|
|
|
public IdleState(Enemy enemy) : base(EnemyState.Idle)
|
|
|
|
{
|
|
|
|
_enemy = enemy;
|
|
|
|
}
|
2024-03-19 21:38:59 +03:00
|
|
|
|
|
|
|
[ServerCallback]
|
2024-03-19 17:42:38 +03:00
|
|
|
public override void Enter()
|
|
|
|
{
|
|
|
|
_enemy.SetSpeedMul(0f);
|
2024-03-19 21:38:59 +03:00
|
|
|
_enemy.networkAnimator.SetTrigger(DanceAnimHash);
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
|
2024-03-19 21:38:59 +03:00
|
|
|
[ServerCallback]
|
2024-03-19 17:42:38 +03:00
|
|
|
public override void Update()
|
|
|
|
{
|
|
|
|
var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0);
|
|
|
|
|
2024-03-19 20:18:01 +03:00
|
|
|
bool inAnim = stateInfo.shortNameHash == DanceAnimHash;
|
|
|
|
|
|
|
|
if (!_entered && inAnim) _entered = true;
|
|
|
|
|
2024-03-19 21:38:59 +03:00
|
|
|
if (_entered && !inAnim) _enemy.ChangeState(EnemyState.Patrol);
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
|
2024-03-19 21:38:59 +03:00
|
|
|
[ServerCallback]
|
2024-03-19 17:42:38 +03:00
|
|
|
public override void Exit()
|
|
|
|
{
|
2024-03-19 20:18:01 +03:00
|
|
|
_entered = false;
|
2024-03-19 21:38:59 +03:00
|
|
|
|
|
|
|
_enemy.networkAnimator.ResetTrigger(DanceAnimHash);
|
2024-03-19 17:42:38 +03:00
|
|
|
_enemy.SetSpeedMul(1f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|