void UpdateLock(int index) { TargetSignatureData lockedTarget = lockedTargets[index]; Vector3 targetPlanarDirection = Vector3.ProjectOnPlane(lockedTarget.predictedPosition - referenceTransform.position, referenceTransform.up); float lookAngle = Vector3.Angle(targetPlanarDirection, referenceTransform.forward); if (referenceTransform.InverseTransformPoint(lockedTarget.predictedPosition).x < 0) { lookAngle = -lookAngle; } if (omnidirectional) { if (lookAngle < 0) { lookAngle += 360; } } lockScanAngle = lookAngle + currentAngleLock; if (!canTrackWhileScan && index == lockedTargetIndex) { currentAngle = lockScanAngle; } float angleDelta = lockRotationSpeed * Time.fixedDeltaTime; float lockedSignalPersist = lockRotationAngle / lockRotationSpeed; //RadarUtils.ScanInDirection(lockScanAngle, referenceTransform, angleDelta, referenceTransform.position, minLockedSignalThreshold, ref attemptedLocks, lockedSignalPersist); bool radarSnapshot = (snapshotTicker > 30); if (radarSnapshot) { snapshotTicker = 0; } else { snapshotTicker++; } //RadarUtils.ScanInDirection (new Ray (referenceTransform.position, lockedTarget.predictedPosition - referenceTransform.position), lockRotationAngle * 2, minLockedSignalThreshold, ref attemptedLocks, lockedSignalPersist, true, rwrType, radarSnapshot); if ( Vector3.Angle(lockedTarget.position - referenceTransform.position, this.lockedTarget.position - referenceTransform.position) > multiLockFOV / 2) { UnlockTargetAt(index, true); return; } RadarUtils.RadarUpdateLockTrack( new Ray(referenceTransform.position, lockedTarget.predictedPosition - referenceTransform.position), lockedTarget.predictedPosition, lockRotationAngle * 2, this, lockedSignalPersist, true, index, lockedTarget.vessel); //if still failed or out of FOV, unlock. if (!lockedTarget.exists || (!omnidirectional && Vector3.Angle(lockedTarget.position - referenceTransform.position, transform.up) > directionalFieldOfView / 2)) { //UnlockAllTargets(); UnlockTargetAt(index, true); return; } //unlock if over-jammed // MOVED TO RADARUTILS! //cycle scan direction if (index == lockedTargetIndex) { currentAngleLock += lockScanDirection * angleDelta; if (Mathf.Abs(currentAngleLock) > lockRotationAngle / 2) { currentAngleLock = Mathf.Sign(currentAngleLock) * lockRotationAngle / 2; lockScanDirection = -lockScanDirection; } } }