75 lines
2.0 KiB
C#
Raw Normal View History

2024-03-19 17:42:38 +03:00
using Koptilnya.StateMachine;
2024-03-19 21:38:59 +03:00
using Mirror;
2024-03-19 17:42:38 +03:00
using UnityEngine;
namespace Characters.Enemy.States
{
public class ChaseState : State<EnemyState>
{
private readonly Enemy _enemy;
2024-03-19 23:37:02 +03:00
private readonly AudioClip _agressiveClip;
2024-03-19 17:42:38 +03:00
public ChaseState(Enemy enemy) : base(EnemyState.Chase)
{
_enemy = enemy;
2024-03-19 23:37:02 +03:00
_agressiveClip = Resources.Load<AudioClip>("Audio/EnemySounds/FX/agressive2");
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 23:37:02 +03:00
if (_enemy.isServer)
{
_enemy.SetSpeedMul(1f);
_enemy.SetAimRigWeight(1f);
}
if (_enemy.isClient)
{
_enemy.audioSource.clip = _agressiveClip;
_enemy.audioSource.loop = true;
_enemy.audioSource.Play();
}
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()
{
2024-03-19 21:38:59 +03:00
_enemy.agent.destination = _enemy.targetTransform.position;
2024-03-19 17:42:38 +03:00
2024-03-19 21:38:59 +03:00
var distanceToTarget = _enemy.DistanceToTarget;
if (distanceToTarget < _enemy.aggressionDistance)
2024-03-19 17:42:38 +03:00
{
2024-03-19 21:38:59 +03:00
_enemy.aimTransform.position = _enemy.targetTransform.position + _enemy.targetTransform.up * 1.2f;
2024-03-19 17:42:38 +03:00
2024-03-19 21:38:59 +03:00
if (distanceToTarget < 1f)
{
_enemy.ChangeState(EnemyState.Attack);
2024-03-19 23:37:02 +03:00
return;
2024-03-19 21:38:59 +03:00
}
2024-03-19 23:37:02 +03:00
_enemy.targetTransform = _enemy.GetClosestTarget();
2024-03-19 17:42:38 +03:00
}
2024-03-20 19:17:20 +03:00
if (!_enemy.HasTarget)
2024-03-19 17:42:38 +03:00
{
2024-03-19 21:38:59 +03:00
_enemy.ChangeState(EnemyState.Idle);
2024-03-19 17:42:38 +03:00
}
}
public override void Exit()
{
2024-03-19 23:37:02 +03:00
if (_enemy.isServer)
{
_enemy.SetAimRigWeight(0f);
}
2024-03-19 17:42:38 +03:00
2024-03-19 23:37:02 +03:00
if (_enemy.isClient)
{
_enemy.audioSource.loop = false;
_enemy.audioSource.Stop();
}
2024-03-19 17:42:38 +03:00
}
}
}