public bool OccupyClosestAttackSlot(GameObject attacker, out int attackSlot, RAINNavigator navigator) { for (int i = 0; i < maxAttackers; i++) { if (attackers[i] == attacker) { attackSlot = i; return(true); } } List <int> openList = new List <int>(); for (int i = 0; i < maxAttackers; i++) { if (attackers[i] == null) { openList.Add(i); } } float bestDistance = float.MaxValue; int bestSlot = -1; for (int i = 0; i < openList.Count; i++) { Vector3 attackPosition = GetAttackPosition(openList[i]); if ((navigator != null) && (!navigator.OnGraph(attackPosition))) { continue; } float distance = (attacker.transform.position - attackPosition).magnitude; if (distance < bestDistance) { bestDistance = distance; bestSlot = openList[i]; } } attackSlot = bestSlot; if (bestSlot < 0) { return(false); } attackers[bestSlot] = attacker; return(true); }
public bool OccupyClosestAttackSlot(GameObject attacker, out int attackSlot, RAINNavigator navigator = null) { for (int i = 0; i < maxAttackers; i++) if (attackers[i] == attacker) { attackSlot = i; return true; } List<int> openList = new List<int>(); for (int i = 0; i < maxAttackers; i++) if (attackers[i] == null) openList.Add(i); float bestDistance = float.MaxValue; int bestSlot = -1; for (int i = 0; i < openList.Count; i++) { Vector3 attackPosition = GetAttackPosition(openList[i]); if ((navigator != null) && (!navigator.OnGraph(attackPosition))) continue; float distance = (attacker.transform.position - attackPosition).magnitude; if (distance < bestDistance) { bestDistance = distance; bestSlot = openList[i]; } } attackSlot = bestSlot; if (bestSlot < 0) return false; attackers[bestSlot] = attacker; return true; }
public bool OccupyClosestAttackSlot(GameObject attacker, out int attackSlot, RAINNavigator navigator = null) { for (int i = 0; i < maxAttackers; i++) { if (attackers[i] == attacker) { attackSlot = i; return(true); } } List <int> openList = new List <int>(); for (int i = 0; i < maxAttackers; i++) { if (attackers[i] == null) { openList.Add(i); } } float bestDistance = float.MaxValue; int bestSlot = -1; for (int i = 0; i < openList.Count; i++) { Vector3 attackPosition = GetAttackPosition(openList[i]); if (navigator != null) { if (navigator is BasicNavigator) { if (NavigationManager.instance.GraphsForPoints(navigator.AI.Kinematic.Position, attackPosition, navigator.AI.Motor.StepUpHeight, NavigationManager.GraphType.Navmesh, ((BasicNavigator)navigator).GraphTags).Count == 0) { continue; } } else { if (!navigator.OnGraph(attackPosition, 0.5f)) { continue; } } } float distance = (attacker.transform.position - attackPosition).magnitude; if (distance < bestDistance) { bestDistance = distance; bestSlot = openList[i]; } } attackSlot = bestSlot; if (bestSlot < 0) { return(false); } attackers[bestSlot] = attacker; return(true); }