void Scan() { float angleDelta = scanRotationSpeed * Time.fixedDeltaTime; RadarUtils.RadarUpdateScanLock(weaponManager, currentAngle, referenceTransform, angleDelta, referenceTransform.position, this, false, ref attemptedLocks); if (omnidirectional) { currentAngle = Mathf.Repeat(currentAngle + angleDelta, 360); } else { currentAngle += radialScanDirection * angleDelta; if (locked) { float targetAngle = VectorUtils.SignedAngle(referenceTransform.forward, Vector3.ProjectOnPlane(lockedTarget.position - referenceTransform.position, referenceTransform.up), referenceTransform.right); leftLimit = Mathf.Clamp(targetAngle - (multiLockFOV / 2), -directionalFieldOfView / 2, directionalFieldOfView / 2); rightLimit = Mathf.Clamp(targetAngle + (multiLockFOV / 2), -directionalFieldOfView / 2, directionalFieldOfView / 2); if (radialScanDirection < 0 && currentAngle < leftLimit) { currentAngle = leftLimit; radialScanDirection = 1; } else if (radialScanDirection > 0 && currentAngle > rightLimit) { currentAngle = rightLimit; radialScanDirection = -1; } } else { if (Mathf.Abs(currentAngle) > directionalFieldOfView / 2) { currentAngle = Mathf.Sign(currentAngle) * directionalFieldOfView / 2; radialScanDirection = -radialScanDirection; } } } }
public bool TryLockTarget(Vector3 position) { if (!canLock) { return(false); } if (BDArmorySettings.DRAW_DEBUG_LABELS) { Debug.Log("[BDArmory]: Trying to radar lock target with (" + radarName + ")"); } if (currentLocks == maxLocks) { if (BDArmorySettings.DRAW_DEBUG_LABELS) { Debug.Log("[BDArmory]: - Failed, this radar already has the maximum allowed targets locked."); } return(false); } Vector3 targetPlanarDirection = Vector3.ProjectOnPlane(position - referenceTransform.position, referenceTransform.up); float angle = Vector3.Angle(targetPlanarDirection, referenceTransform.forward); if (referenceTransform.InverseTransformPoint(position).x < 0) { angle = -angle; } //TargetSignatureData.ResetTSDArray(ref attemptedLocks); RadarUtils.RadarUpdateScanLock(weaponManager, angle, referenceTransform, lockAttemptFOV, referenceTransform.position, this, true, ref attemptedLocks, signalPersistTime); for (int i = 0; i < attemptedLocks.Length; i++) { if (attemptedLocks[i].exists && (attemptedLocks[i].predictedPosition - position).sqrMagnitude < 40 * 40) { if (!locked && !omnidirectional) { float targetAngle = VectorUtils.SignedAngle(referenceTransform.forward, Vector3.ProjectOnPlane(attemptedLocks[i].position - referenceTransform.position, referenceTransform.up), referenceTransform.right); currentAngle = targetAngle; } lockedTargets.Add(attemptedLocks[i]); currLocks = lockedTargets.Count; if (BDArmorySettings.DRAW_DEBUG_LABELS) { Debug.Log("[BDArmory]: - Acquired lock on target (" + attemptedLocks[i].vessel?.name + ")"); } vesselRadarData.AddRadarContact(this, lockedTarget, true); vesselRadarData.UpdateLockedTargets(); return(true); } } if (BDArmorySettings.DRAW_DEBUG_LABELS) { Debug.Log("[BDArmory]: - Failed to lock on target."); } return(false); }