private bool ChooseHarvest() { if (MyHarvest != null && !FailedToSpot.Contains(MyHarvest)) { return(true); } List <HarvestingNode> potentially_available = FindObjectsOfType <HarvestingNode>().Where(hn => hn.IsAccessibleTo(Me)).ToList(); if (FailedToSpot.Count >= potentially_available.Count / 2) { FailedToSpot.Clear(); } List <HarvestingNode> available = potentially_available.Where(hn => !FailedToSpot.Contains(hn)).ToList(); if (available.Any()) { MyHarvest = available.OrderBy(hn => Vector3.Distance(hn.transform.position, transform.position)).First(); if (MyHarvest == null) { return(false); } Me.HasTask = true; Me.Actions.Movement.SetDestination(MyHarvest.transform); return(true); } return(false); }
public void OnHarvesting() { if (Me.Senses.PerceptionCheck(true, MyHarvest.ChallengeRating)) { Harvest(); } else { if (MyHarvest != null) { FailedToSpot.Add(MyHarvest); } ChooseHarvest(); } }