Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }