/// <summary> /// Gets the laser target painter with the least angle off boresight. Set the missile as the reference transform. /// </summary> /// <returns>The laser target painter.</returns> /// <param name="referenceTransform">Reference transform.</param> /// <param name="maxBoreSight">Max bore sight.</param> public static ModuleTargetingCamera GetLaserTarget(MissileLauncher ml) { Transform referenceTransform = ml.transform; float maxOffBoresight = ml.maxOffBoresight; ModuleTargetingCamera finalCam = null; float smallestAngle = 360; foreach (var cam in ActiveLasers) { if (!cam) { continue; } if (cam.cameraEnabled && cam.groundStabilized && cam.surfaceDetected && !cam.gimbalLimitReached) { float angle = Vector3.Angle(referenceTransform.forward, cam.groundTargetPosition - referenceTransform.position); if (angle < maxOffBoresight && angle < smallestAngle && ml.CanSeePosition(cam.groundTargetPosition)) { smallestAngle = angle; finalCam = cam; } } } return(finalCam); }
/// <summary> /// Gets the laser target painter with the least angle off boresight. Set the missile as the reference transform. /// </summary> /// <returns>The laser target painter.</returns> /// <param name="referenceTransform">Reference transform.</param> /// <param name="maxBoreSight">Max bore sight.</param> public static ModuleTargetingCamera GetLaserTarget(MissileLauncher ml, bool parentOnly) { Transform referenceTransform = ml.transform; float maxOffBoresight = ml.maxOffBoresight; ModuleTargetingCamera finalCam = null; float smallestAngle = 360; foreach (var cam in ActiveLasers) { if (!cam) { continue; } if (parentOnly && !(cam.vessel == ml.vessel || cam.vessel == ml.sourceVessel)) { continue; } if (cam.cameraEnabled && cam.groundStabilized && cam.surfaceDetected && !cam.gimbalLimitReached) { /* * if(ml.guidanceMode == MissileLauncher.GuidanceModes.BeamRiding && Vector3.Dot(ml.transform.position - cam.transform.position, ml.transform.forward) < 0) * { * continue; * } */ float angle = Vector3.Angle(referenceTransform.forward, cam.groundTargetPosition - referenceTransform.position); if (angle < maxOffBoresight && angle < smallestAngle && ml.CanSeePosition(cam.groundTargetPosition)) { smallestAngle = angle; finalCam = cam; } } } return(finalCam); }