using System.Collections.Generic; using System.Linq; using NodeCanvas.Framework; using ParadoxNotion; using ParadoxNotion.Design; using UnityEngine; namespace NodeCanvas.Tasks.Conditions { [Name("Any Target Within Distance")] [Category("GameObject")] public class CheckDistanceToGameObjectAny : ConditionTask { public BBParameter> targetObjects; public CompareMethod checkType = CompareMethod.LessThan; public BBParameter distance = 10; [SliderField(0, 0.1f)] public float floatingPoint = 0.05f; [BlackboardOnly] public BBParameter> allResults; [BlackboardOnly] public BBParameter closerResult; protected override string info { get { return "Distance Any" + OperationTools.GetCompareString(checkType) + distance + " in " + targetObjects; } } protected override bool OnCheck() { var r = false; var temp = new List(); foreach ( var o in targetObjects.value ) { if ( o == agent.gameObject ) { continue; } if ( OperationTools.Compare(Vector3.Distance(agent.position, o.transform.position), distance.value, checkType, floatingPoint) ) { temp.Add(o); r = true; } } if ( !allResults.isNone || !closerResult.isNone ) { var ordered = temp.OrderBy(x => Vector3.Distance(agent.position, x.transform.position)); if ( !allResults.isNone ) { allResults.value = ordered.ToList(); } if ( !closerResult.isNone ) { closerResult.value = ordered.FirstOrDefault(); } } return r; } public override void OnDrawGizmosSelected() { if ( agent != null ) { Gizmos.DrawWireSphere(agent.position, distance.value); } } } }