void GetCandidates() { candidates.Clear(); for (int i = 0; i < coverColliders.Length; i++) { GOS currentCover = coverColliders[i].gameObject.GetComponent <GOS>(); for (int j = 0; j < 8; j++) { if (currentCover.possibilities[j] == emptySlot || currentCover.possibilities[j] == unit.gameObject.GetInstanceID()) { CoverSpotCandidate newCandidate = new CoverSpotCandidate(currentCover.coordinates[j]); candidates.Add(newCandidate); } } } }
void EliminatePossibilitiesByDistance(GOS cover) { bool closeEnough; for (int i = 0; i < cover.coordinates.Count; i++) { closeEnough = false; for (int j = 0; j < unit.enemies.Count; j++) { if ((cover.coordinates[i] - unit.enemies[j].position).magnitude <= unit.rangeCollider.radius) { closeEnough = true; break; } } if (!closeEnough) { possibilities[i] = 1; } } }
Vector3 GetClosestCoordinate(int coverIndex) { float lowestDistance = float.MaxValue; float tempDistance = 0; int lowestIndex = -1; GOS chosenCover = coverColliders[coverIndex].gameObject.GetComponent <GOS>(); for (int i = 0; i < 8; i++) { if (possibilities[i] != emptySlot && possibilities[i] != unit.gameObject.GetInstanceID()) { continue; } tempDistance = (chosenCover.coordinates[i] - unit.gameObject.transform.position).sqrMagnitude; if (tempDistance < lowestDistance) { lowestDistance = tempDistance; lowestIndex = i; } } return(chosenCover.coordinates[lowestIndex]); }
void Start() { cover = transform.parent.gameObject.GetComponent <GOS>(); }