/// <summary> /// Heals all nearby allies /// </summary> protected override void Execute() { TractorBeam tractor = Core.GetComponent <TractorBeam>(); if (tractor.GetTractorTarget() != null && tractor.GetTractorTarget().GetComponent <ShellPart>()) { if (FactionManager.IsAllied(Core.faction, PlayerCore.Instance.faction)) { Yard.TakePart(Core, tractor); } else { Core.TakeEnergy(-energyCost); var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>(); Destroy(shellPart.gameObject); } } else { Core.TakeEnergy(-energyCost); Draggable part = null; float dist = range * range; //Max distance of new tractor beam for (int i = 0; i < AIData.strayParts.Count; i++) { float d = (AIData.strayParts[i].transform.position - Core.transform.position).sqrMagnitude; Draggable target = AIData.strayParts[i].GetComponent <Draggable>(); if (d < dist && target && !target.dragging) { dist = d; part = target; } } if (part != null) { tractor.SetTractorTarget(part); } } }