2024-03-19 17:42:38 +03:00
|
|
|
using Koptilnya.StateMachine;
|
|
|
|
using Mirror;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.AI;
|
|
|
|
|
|
|
|
namespace Characters.Enemy.States
|
|
|
|
{
|
|
|
|
public class PatrolState : State<EnemyState>
|
|
|
|
{
|
|
|
|
private readonly Enemy _enemy;
|
2024-03-20 00:58:47 +03:00
|
|
|
private NavMeshTriangulation _navMeshData;
|
2024-03-19 17:42:38 +03:00
|
|
|
|
|
|
|
public PatrolState(Enemy enemy) : base(EnemyState.Patrol)
|
|
|
|
{
|
|
|
|
_enemy = enemy;
|
|
|
|
_navMeshData = NavMeshTriangulator.Data;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
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.targetTransform = _enemy.GetClosestTarget();
|
2024-03-19 17:42:38 +03:00
|
|
|
|
2024-03-19 23:37:02 +03:00
|
|
|
if (_enemy.HasTarget)
|
2024-03-19 17:42:38 +03:00
|
|
|
{
|
2024-03-19 21:38:59 +03:00
|
|
|
_enemy.ChangeState(EnemyState.Chase);
|
2024-03-19 20:24:40 +03:00
|
|
|
|
|
|
|
return;
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
var remainingDistance = _enemy.agent.GetPathRemainingDistance();
|
|
|
|
var invalidPath = _enemy.agent.pathStatus != NavMeshPathStatus.PathComplete;
|
|
|
|
|
|
|
|
if (remainingDistance <= 1.5f || invalidPath)
|
|
|
|
{
|
|
|
|
SetRandomDestination();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-19 23:37:02 +03:00
|
|
|
[Server]
|
2024-03-19 17:42:38 +03:00
|
|
|
void SetRandomDestination()
|
|
|
|
{
|
|
|
|
_enemy.agent.destination = GetRandomLocation();
|
|
|
|
}
|
|
|
|
|
2024-03-19 23:37:02 +03:00
|
|
|
[Server]
|
2024-03-19 17:42:38 +03:00
|
|
|
Vector3 GetRandomLocation()
|
|
|
|
{
|
2024-03-20 00:58:47 +03:00
|
|
|
NavMeshTriangulation navMeshData = NavMesh.CalculateTriangulation();
|
|
|
|
return navMeshData.vertices[navMeshData.indices[Random.Range(0, navMeshData.indices.Length - 3)]];
|
2024-03-19 17:42:38 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|