public ITargetingBeacon GetNearestTarget(Transform fromTransform) { List <ITargetingBeacon> potentialTargets = new List <ITargetingBeacon>(); for (int i = 0; i < _targetGenerators.Length; i++) { ITargetingBeacon target = _targetGenerators[i].GetNearestTarget(fromTransform); if (target != null) { potentialTargets.Add(target); } } ITargetingBeacon nearestTarget = null; foreach (ITargetingBeacon target in potentialTargets) { if ((nearestTarget == null) || (Vector3.Distance(fromTransform.position, target.Position) < Vector3.Distance(fromTransform.position, nearestTarget.Position))) { nearestTarget = target; } } return(nearestTarget); }
private void Start() { _transform = transform; _target = null; _currentAction = AgentBehaviourAction.Idle; _targetLocator = GetComponent <AgentTargetLocator>(); }
private void HandleSetTargetEvent(ITargetingBeacon target) { _target = target; if (_target != null) { _previousTargetPosition = target.Position; if (_navigatorRunning) { UpdatePathToTarget(); } } }
public ITargetingBeacon GetNearestTarget(Transform fromTransform) { ITargetingBeacon target = null; for (int i = 0; i < _beacons.Count; i++) { if ((target == null) || (Vector3.Distance(fromTransform.position, _beacons[i].Position) < Vector3.Distance(fromTransform.position, target.Position))) { target = _beacons[i]; } } return(target); }
private IEnumerator CreateNewTarget() { yield return(new WaitForSeconds(UnityEngine.Random.Range(1, 7))); Vector3 newTargetPosition = GetNewTargetPosition(); if (newTargetPosition.x > float.MinValue) { GameObject newTarget = Instantiate(_targetPrefab, newTargetPosition, Quaternion.Euler(Vector3.zero), transform); ITargetingBeacon beacon = newTarget.GetComponent <ITargetingBeacon>(); beacon.TargetRemovedEvent += HandleTargetRemovedEvent; _beacons.Add(beacon); _orchestrator.RegisterBeacon(beacon); if (NewTargetGeneratedEvent != null) { NewTargetGeneratedEvent.Invoke(); } } StartCoroutine(CreateNewTarget()); }
private void SelectNewTarget() { _target = _targetLocator.GetNearestTarget(_transform); SetTargetEvent.Invoke(_target); }
public void HandleSetTargetEvent(ITargetingBeacon target) { _target = target; }
public void DeregisterBeacon(ITargetingBeacon beacon) { _beacons.Remove(beacon); }
public void RegisterBeacon(ITargetingBeacon beacon) { _beacons.Add(beacon); }
private void HandleTargetRemovedEvent(ITargetingBeacon beacon) { _beacons.Remove(beacon); _orchestrator.DeregisterBeacon(beacon); }