private void FightClosestTarget() { TargetableByAIAlly closestTargetAlly = AI_ControllerAlly.Instance.GetClosestTargetAlly(transform.position, soldierType.GetSoldierType); if (closestTargetAlly != null) { if (soldierType.melee) { charController.Command_AttackMelee(closestTargetAlly.GetComponent <Alive> ()); } else if (soldierType.range) { charController.Command_AttackRange(closestTargetAlly.GetComponent <Alive> ()); } else if (soldierType.magic) { charController.Command_AttackMagic(closestTargetAlly.GetComponent <Alive> ()); } else { Debug.Log("Pas de type de combattant indiqué"); } } else if (walker.IsInRallyPoint) { new WaitForSeconds(3f); StartCoroutine("Fight"); } else { // Debug.Log (walker.IsInRallyPoint); charController.OnWalkToRallyPoint(); } }
public TargetableByAIAlly GetClosestTargetAlly(Vector3 position, string type) { float minDistance = 99999; float maxDistanceEngage = GetDistanceEngageMax(type); TargetableByAIAlly closestTarget = null; //Debug.Log (targetsAlly); //CheckTargets (); //Debug.Log (targetsAlly); foreach (TargetableByAIAlly targetAlly in targetsAlly) { if ((targetAlly != null) && (!targetAlly.GetComponent <Alive> ().IsDead)) { float distance = Vector3.Distance(position, targetAlly.transform.position); if (((distance < minDistance) || (closestTarget == null)) && (distance < maxDistanceEngage)) { minDistance = distance; closestTarget = targetAlly; } } } return(closestTarget); }