private void SelectCover() { //Stand up _anim.SetBool("isCrouching", false); _aiWeapon.SetTarget(null); _aiWeapon.SetFiring(false); //Clear the change cover timer _changeCoverTimer = 0.0f; //Remove the AI from their current cover if (_currentCover) { _currentCover.RemoveUser(); } CoverController closestCover = null; float closestDistance = 10000.0f; //Cycle through each cover in the array foreach (CoverController cover in _coversInZone) { if (_currentCover != null && _currentCover == cover) { continue; } //If the cover is full then don't go to this cover if (cover.IsFull) { continue; } //Calculate the distance between the agent and the cover float distance = Vector3.Distance(_agent.transform.position, cover.transform.position); //if the distance from this cover is less than the distance from the closest cover if (distance < closestDistance) { //Set the new closest cover closestCover = cover; closestDistance = distance; } } //Set our new cover _currentCover = closestCover; if (_currentCover != null) { //Move the agent to the cover _currentCover.AddUser(); //Find the cover point which is furthest away from the player float furthestCoverPointDistance = 0.0f; Transform furthestCoverPoint = _currentCover.GetCoverPoints()[0]; foreach (Transform coverPoint in _currentCover.GetCoverPoints()) { //Get the distance from the player to the cover points float distance = Vector3.Distance(_agent.Player.position, coverPoint.transform.position); //Find the furthest one if (distance > furthestCoverPointDistance) { furthestCoverPoint = coverPoint; furthestCoverPointDistance = distance; } } //Move to the cover point _navAgent.SetDestination(furthestCoverPoint.position); } }