81 lines
2.1 KiB
C#
Raw Permalink Normal View History

2024-03-19 17:42:38 +03:00
using Koptilnya.StateMachine;
using Mirror;
using UnityEngine;
namespace Characters.Enemy.States
{
public class StunnedState : State<EnemyState>
{
private readonly Enemy _enemy;
2024-03-19 20:18:01 +03:00
private static readonly int StunnedAnimHash = Animator.StringToHash("stunned");
2024-03-19 23:37:02 +03:00
private readonly AudioClip _stunnedClip;
2024-03-19 20:18:01 +03:00
private bool _entered;
2024-03-19 17:42:38 +03:00
public StunnedState(Enemy enemy) : base(EnemyState.Stunned)
{
_enemy = enemy;
2024-03-19 23:37:02 +03:00
_stunnedClip = Resources.Load<AudioClip>("Audio/EnemySounds/FX/stunned");
2024-03-19 17:42:38 +03:00
}
2024-03-19 23:37:02 +03:00
2024-03-19 17:42:38 +03:00
public override void Enter()
{
2024-03-19 17:56:12 +03:00
if (_enemy.isServer)
{
2024-03-19 21:38:59 +03:00
_enemy.targetTransform = null;
2024-03-19 17:42:38 +03:00
2024-03-19 17:56:12 +03:00
_enemy.SetSpeedMul(0f);
2024-03-19 21:38:59 +03:00
_enemy.networkAnimator.SetTrigger(StunnedAnimHash);
2024-03-19 17:56:12 +03:00
}
2024-03-19 20:18:01 +03:00
if(_enemy.isClient)
2024-03-19 17:56:12 +03:00
{
2024-03-19 23:37:02 +03:00
_enemy.audioSource.clip = _stunnedClip;
_enemy.audioSource.Play();
2024-03-19 17:56:12 +03:00
_enemy.hitVFX.Stop();
_enemy.hitVFX.Play();
}
2024-03-19 17:42:38 +03:00
}
public override void ReEnter()
{
2024-03-19 23:37:02 +03:00
if (_enemy.isServer)
{
_enemy.networkAnimator.SetTrigger(StunnedAnimHash);
}
if (_enemy.isClient)
{
_enemy.audioSource.Stop();
_enemy.audioSource.Play();
}
2024-03-19 17:42:38 +03:00
}
2024-03-19 21:38:59 +03:00
[ServerCallback]
2024-03-19 20:18:01 +03:00
public override void Update()
2024-03-19 17:42:38 +03:00
{
2024-03-19 20:18:01 +03:00
var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0);
2024-03-19 17:42:38 +03:00
2024-03-19 20:18:01 +03:00
bool inAnim = stateInfo.shortNameHash == StunnedAnimHash;
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 20:18:01 +03:00
public override void Exit()
2024-03-19 17:42:38 +03:00
{
2024-03-19 23:37:02 +03:00
if (_enemy.isServer)
{
_entered = false;
2024-03-19 17:42:38 +03:00
2024-03-19 23:37:02 +03:00
_enemy.networkAnimator.ResetTrigger(StunnedAnimHash);
_enemy.SetSpeedMul(1f);
}
if (_enemy.isClient)
{
_enemy.audioSource.Stop();
}
2024-03-19 17:42:38 +03:00
}
}
}