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;
|
|
|
|
|
|
|
|
public ChaseState(Enemy enemy) : base(EnemyState.Chase)
|
|
|
|
{
|
|
|
|
_enemy = enemy;
|
|
|
|
}
|
|
|
|
|
2024-03-19 21:38:59 +03:00
|
|
|
[ServerCallback]
|
2024-03-19 17:42:38 +03:00
|
|
|
public override void Enter()
|
|
|
|
{
|
2024-03-19 20:18:01 +03:00
|
|
|
_enemy.SetSpeedMul(1f);
|
2024-03-19 17:42:38 +03:00
|
|
|
_enemy.SetAimRigWeight(1f);
|
|
|
|
}
|
|
|
|
|
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 17:42:38 +03:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2024-03-19 21:38:59 +03:00
|
|
|
_enemy.ChangeState(EnemyState.Idle);
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
2024-03-19 21:38:59 +03:00
|
|
|
|
|
|
|
_enemy.targetTransform = _enemy.GetClosestTarget();
|
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 21:38:59 +03:00
|
|
|
_enemy.targetTransform = null;
|
2024-03-19 17:42:38 +03:00
|
|
|
|
|
|
|
_enemy.SetAimRigWeight(0f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|