public static List<TargetInfo> GetAllTargetsExcluding(List<TargetInfo> excluding, MissileFire mf) { List<TargetInfo> finalTargets = new List<TargetInfo>(); BDArmorySettings.BDATeams team = BoolToTeam(mf.team); foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && !excluding.Contains(target)) { finalTargets.Add(target); } } return finalTargets; }
public static TargetInfo GetClosestMissileTarget(MissileFire mf) { BDArmorySettings.BDATeams team = BoolToTeam(mf.team); TargetInfo finalTarget = null; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && target.isMissile) { bool isHostile = false; if(target.isThreat) { isHostile = true; } if(isHostile && (finalTarget == null || target.IsCloser(finalTarget, mf))) { finalTarget = target; } } } return finalTarget; }
public static TargetInfo GetUnengagedMissileTarget(MissileFire mf) { BDArmorySettings.BDATeams team = mf.team ? BDArmorySettings.BDATeams.B : BDArmorySettings.BDATeams.A; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && target.isMissile) { bool isHostile = false; if(target.isThreat) { isHostile = true; } if(isHostile && target.numFriendliesEngaging == 0) { return target; } } } return null; }
public static TargetInfo GetMissileTarget(MissileFire mf) { BDArmorySettings.BDATeams team = mf.team ? BDArmorySettings.BDATeams.B : BDArmorySettings.BDATeams.A; TargetInfo finalTarget = null; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && target.isMissile) { bool isHostile = false; if(target.missileModule && target.missileModule.targetMf && target.missileModule.targetMf.team == mf.team) { isHostile = true; } if(isHostile && ((finalTarget == null && target.numFriendliesEngaging < 2) || target.numFriendliesEngaging < finalTarget.numFriendliesEngaging)) { finalTarget = target; } } } return finalTarget; }
public static TargetInfo GetLeastEngagedTarget(MissileFire mf) { BDArmorySettings.BDATeams team = mf.team ? BDArmorySettings.BDATeams.B : BDArmorySettings.BDATeams.A; TargetInfo finalTarget = null; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && !target.isMissile) { if(finalTarget == null || target.numFriendliesEngaging < finalTarget.numFriendliesEngaging) { finalTarget = target; } } } return finalTarget; }
public static TargetInfo GetClosestTarget(MissileFire mf) { BDArmorySettings.BDATeams team = mf.team ? BDArmorySettings.BDATeams.B : BDArmorySettings.BDATeams.A; TargetInfo finalTarget = null; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && mf.CanSeeTarget(target.Vessel) && !target.isMissile) { if(finalTarget == null || (target.IsCloser(finalTarget, mf))) { finalTarget = target; } } } return finalTarget; }
public static TargetInfo GetMissileTarget(MissileFire mf, bool targetingMeOnly = false) { BDArmorySettings.BDATeams team = mf.team ? BDArmorySettings.BDATeams.B : BDArmorySettings.BDATeams.A; TargetInfo finalTarget = null; foreach(var target in TargetDatabase[team]) { if(target && target.Vessel && target.isMissile && target.isThreat && mf.CanSeeTarget(target.Vessel) ) { if(target.missileModule) { if(targetingMeOnly) { if(Vector3.SqrMagnitude(target.missileModule.targetPosition - mf.vessel.CoM) > 60 * 60) { continue; } } } else { Debug.LogWarning("checking target missile - doesn't have missile module"); } if(((finalTarget == null && target.numFriendliesEngaging < 2) || target.numFriendliesEngaging < finalTarget.numFriendliesEngaging)) { finalTarget = target; } } } return finalTarget; }