public static void UpdateRadarLock(Ray ray, Vector3 predictedPos, float fov, float minSignature, ModuleRadar radar, bool pingRWR, bool radarSnapshot, float dataPersistTime, bool locked, int lockIndex, Vessel lockedVessel) { RadarWarningReceiver.RWRThreatTypes rwrType = radar.rwrType; //Vessel lockedVessel = null; float closestSqrDist = 100; if(lockedVessel == null) { foreach(var vessel in BDATargetManager.LoadedVessels) { if(vessel == null) continue; if(!vessel.loaded) continue; //if(vessel.Landed) continue; Vector3 vectorToTarget = vessel.transform.position - ray.origin; if((vectorToTarget).sqrMagnitude < 10) continue; //ignore self if(Vector3.Dot(vectorToTarget, ray.direction) < 0) continue; //ignore behind ray if(Vector3.Angle(vessel.CoM - ray.origin, ray.direction) < fov / 2) { float sqrDist = Vector3.SqrMagnitude(vessel.CoM - predictedPos); if(sqrDist < closestSqrDist) { closestSqrDist = sqrDist; lockedVessel = vessel; } } } } if(lockedVessel != null) { if(TerrainCheck(ray.origin, lockedVessel.transform.position)) { radar.UnlockTargetAt(lockIndex, true); //blocked by terrain return; } float sig = float.MaxValue; if(radarSnapshot) sig = GetModifiedSignature(lockedVessel, ray.origin); if(pingRWR && sig > minSignature * 0.66f) { RadarWarningReceiver.PingRWR(lockedVessel, ray.origin, rwrType, dataPersistTime); } if(sig > minSignature) { //radar.vesselRadarData.AddRadarContact(radar, new TargetSignatureData(lockedVessel, sig), locked); radar.ReceiveContactData(new TargetSignatureData(lockedVessel, sig), locked); } else { radar.UnlockTargetAt(lockIndex, true); return; } } else { radar.UnlockTargetAt(lockIndex, true); } }
public static void UpdateRadarLock(Ray ray, Vector3 predictedPos, float fov, float minSignature, ModuleRadar radar, bool pingRWR, bool radarSnapshot, float dataPersistTime, bool locked, int lockIndex, Vessel lockedVessel) { RadarWarningReceiver.RWRThreatTypes rwrType = radar.rwrType; //Vessel lockedVessel = null; float closestSqrDist = 100; if (lockedVessel == null) { foreach (var vessel in BDATargetManager.LoadedVessels) { if (vessel == null) { continue; } if (!vessel.loaded) { continue; } //if(vessel.Landed) continue; Vector3 vectorToTarget = vessel.transform.position - ray.origin; if ((vectorToTarget).sqrMagnitude < 10) { continue; //ignore self } if (Vector3.Dot(vectorToTarget, ray.direction) < 0) { continue; //ignore behind ray } if (Vector3.Angle(vessel.CoM - ray.origin, ray.direction) < fov / 2) { float sqrDist = Vector3.SqrMagnitude(vessel.CoM - predictedPos); if (sqrDist < closestSqrDist) { closestSqrDist = sqrDist; lockedVessel = vessel; } } } } if (lockedVessel != null) { if (TerrainCheck(ray.origin, lockedVessel.transform.position)) { radar.UnlockTargetAt(lockIndex, true); //blocked by terrain return; } float sig = float.MaxValue; if (radarSnapshot) { sig = GetModifiedSignature(lockedVessel, ray.origin); } if (pingRWR && sig > minSignature * 0.66f) { RadarWarningReceiver.PingRWR(lockedVessel, ray.origin, rwrType, dataPersistTime); } if (sig > minSignature) { //radar.vesselRadarData.AddRadarContact(radar, new TargetSignatureData(lockedVessel, sig), locked); radar.ReceiveContactData(new TargetSignatureData(lockedVessel, sig), locked); } else { radar.UnlockTargetAt(lockIndex, true); return; } } else { radar.UnlockTargetAt(lockIndex, true); } }
public static void UpdateRadarLock(MissileFire myWpnManager, float directionAngle, Transform referenceTransform, float fov, Vector3 position, float minSignature, ModuleRadar radar, bool pingRWR, RadarWarningReceiver.RWRThreatTypes rwrType, bool radarSnapshot) { Vector3d geoPos = VectorUtils.WorldPositionToGeoCoords(position, FlightGlobals.currentMainBody); Vector3 forwardVector = referenceTransform.forward; Vector3 upVector = referenceTransform.up;//VectorUtils.GetUpDirection(position); Vector3 lookDirection = Quaternion.AngleAxis(directionAngle, upVector) * forwardVector; foreach(var vessel in BDATargetManager.LoadedVessels) { if(vessel == null) continue; if(!vessel.loaded) continue; if(myWpnManager) { if(vessel == myWpnManager.vessel) continue; //ignore self } else if((vessel.transform.position - position).sqrMagnitude < 3600) continue; Vector3 vesselDirection = Vector3.ProjectOnPlane(vessel.CoM - position, upVector); if(Vector3.Angle(vesselDirection, lookDirection) < fov / 2) { if(TerrainCheck(referenceTransform.position, vessel.transform.position)) continue; //blocked by terrain float sig = float.MaxValue; if(radarSnapshot && minSignature > 0) sig = GetModifiedSignature(vessel, position); RadarWarningReceiver.PingRWR(vessel, position, rwrType, radar.signalPersistTime); float detectSig = sig; VesselECMJInfo vesselJammer = vessel.GetComponent<VesselECMJInfo>(); if(vesselJammer) { sig *= vesselJammer.rcsReductionFactor; detectSig += vesselJammer.jammerStrength; } if(detectSig > minSignature) { if(vessel.vesselType == VesselType.Debris) { vessel.gameObject.AddComponent<TargetInfo>(); } else if(myWpnManager != null) { BDATargetManager.ReportVessel(vessel, myWpnManager); } //radar.vesselRadarData.AddRadarContact(radar, new TargetSignatureData(vessel, detectSig), false); radar.ReceiveContactData(new TargetSignatureData(vessel, detectSig), false); } } } }
public static void UpdateRadarLock(MissileFire myWpnManager, float directionAngle, Transform referenceTransform, float fov, Vector3 position, float minSignature, ModuleRadar radar, bool pingRWR, RadarWarningReceiver.RWRThreatTypes rwrType, bool radarSnapshot) { Vector3d geoPos = VectorUtils.WorldPositionToGeoCoords(position, FlightGlobals.currentMainBody); Vector3 forwardVector = referenceTransform.forward; Vector3 upVector = referenceTransform.up; //VectorUtils.GetUpDirection(position); Vector3 lookDirection = Quaternion.AngleAxis(directionAngle, upVector) * forwardVector; foreach (var vessel in BDATargetManager.LoadedVessels) { if (vessel == null) { continue; } if (!vessel.loaded) { continue; } if (myWpnManager) { if (vessel == myWpnManager.vessel) { continue; //ignore self } } else if ((vessel.transform.position - position).sqrMagnitude < 3600) { continue; } Vector3 vesselDirection = Vector3.ProjectOnPlane(vessel.CoM - position, upVector); if (Vector3.Angle(vesselDirection, lookDirection) < fov / 2) { if (TerrainCheck(referenceTransform.position, vessel.transform.position)) { continue; //blocked by terrain } float sig = float.MaxValue; if (radarSnapshot && minSignature > 0) { sig = GetModifiedSignature(vessel, position); } RadarWarningReceiver.PingRWR(vessel, position, rwrType, radar.signalPersistTime); float detectSig = sig; VesselECMJInfo vesselJammer = vessel.GetComponent <VesselECMJInfo>(); if (vesselJammer) { sig *= vesselJammer.rcsReductionFactor; detectSig += vesselJammer.jammerStrength; } if (detectSig > minSignature) { if (vessel.vesselType == VesselType.Debris) { vessel.gameObject.AddComponent <TargetInfo>(); } else if (myWpnManager != null) { BDATargetManager.ReportVessel(vessel, myWpnManager); } //radar.vesselRadarData.AddRadarContact(radar, new TargetSignatureData(vessel, detectSig), false); radar.ReceiveContactData(new TargetSignatureData(vessel, detectSig), false); } } } }