// Update is called once per frame void Update() { if (structure.Weapon) { if (acquireTargetCooldown.Check(Time.time)) { ShipStructure[] potentialTargets = shipManager.FindNearbyShips(structure, maxAcquireDistance).ToArray(); if (potentialTargets.Length > 0) { currentTarget = RandomExtensions.RandomElement(potentialTargets); loseTargetCooldown.Reset(Time.time); } } if (currentTarget && loseTargetCooldown.Check(Time.time) && structure.DistanceTo(currentTarget) > maxAcquireDistance) { currentTarget = null; } if (currentTarget) { structure.Weapon.Aim(currentTarget.transform.position); structure.Weapon.Fire(); } } }
public IEnumerable <ShipStructure> FindNearbyShips(ShipStructure structure, float distance) { foreach (ShipStructure ship in ships) { if (ship != structure && structure.DistanceTo(ship) <= distance) { yield return(ship); } } }