private void AlertState()
{
if (!CanSeePlayer())
{
GetComponent<Animator>().SetBool("IsMoving", true);
GetComponent<NavMeshAgent>().destination = _lastKnownLocation;
if (Vector3.Distance(transform.position, _lastKnownLocation) < .1f)
{
State = EnemyState.Searching;
GetComponent<Animator>().SetBool("IsMoving", false);
}
}
else
{
if (Vector3.Distance(transform.position, _player.transform.position) < MinDistance)
{
GetComponent<Animator>().SetBool("IsMoving", false);
GetComponent<Animator>().SetBool("IsAttacking", true);
_lastKnownLocation = _player.transform.position;
GetComponent<NavMeshAgent>().destination = transform.position;
}
else
{
if (_navAgent.isOnOffMeshLink)
{
if (!_traversingLink)
{
_currLink = _navAgent.currentOffMeshLinkData;
_traversingLink = true;
}
var tlerp = .1f;
var newPos = Vector3.Lerp(_currLink.startPos, _currLink.endPos, tlerp);
newPos.y += 2f * Mathf.Sin(Mathf.PI * tlerp);
transform.position = newPos;
if (_currLink.startPos == _currLink.endPos)
{
transform.position = _currLink.endPos;
_traversingLink = false;
_navAgent.CompleteOffMeshLink();
_navAgent.Resume();
}
}
else
{
GetComponent<Animator>().SetBool("IsMoving", true);
_lastKnownLocation = _player.transform.position;
GetComponent<NavMeshAgent>().destination = _player.transform.position;
var targetRotation = Quaternion.LookRotation(_player.transform.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, TurnSpeed * Time.deltaTime);
}
}
}
}