示例#1
0
        void prepNGS()
        {
            if (lTargetSite != null)
            {
                sTargetSiteName = lTargetSite.LaunchSiteName;

                fRangeToTarget = LaunchSiteManager.getDistanceToBase(FlightGlobals.ActiveVessel.GetTransform().position, lTargetSite);
                if (fRangeToTarget > fOldRange)
                {
                    bClosing = false;
                }
                if (fRangeToTarget < fOldRange)
                {
                    bClosing = true;
                }

                var basepos = KerbalKonstructs.instance.GetCurrentBody().transform.InverseTransformPoint(lTargetSite.staticInstance.gameObject.transform.position);

                //disBaseLat = dBaseLat * 180 / Math.PI;
                //disBaseLon = dBaseLon * 180 / Math.PI;
                disBaseLat = KKMath.GetLatitudeInDeg(basepos);
                disBaseLon = KKMath.GetLongitudeInDeg(basepos);
                var dBaseLat = disBaseLat * KKMath.deg2rad;
                var dBaseLon = disBaseLon * KKMath.deg2rad;

                fOldRange = fRangeToTarget;

                if (bClosing)
                {
                    tTextureMiddle = UIMain.tIconOpen;
                }
                else
                {
                    tTextureMiddle = UIMain.tIconClosed;
                }

                Vector3 vcraftpos = FlightGlobals.ActiveVessel.GetTransform().position;
                vCrft = vcraftpos;
                Vector3 vsitepos = lTargetSite.staticInstance.transform.position;
                vSPos = vsitepos;
                Vector3 vHeading = FlightGlobals.ActiveVessel.transform.up;
                vHead = vHeading;

                disLat = FlightGlobals.ActiveVessel.latitude;
                var dLat = disLat / 180 * Math.PI;
                disLon = FlightGlobals.ActiveVessel.longitude;
                var dLon = disLon / 180 * Math.PI;

                var y = Math.Sin(dBaseLon - dLon) * Math.Cos(dBaseLat);
                var x = (Math.Cos(dLat) * Math.Sin(dBaseLat)) - (Math.Sin(dLat) * Math.Cos(dBaseLat) * Math.Cos(dBaseLon - dLon));
                var requiredHeading = Math.Atan2(y, x) * 180 / Math.PI;
                dreqheading = (requiredHeading + 360) % 360;

                var diff = (360 + 180 + requiredHeading - FlightGlobals.ship_heading) % 360 - 180;
                dshipheading = (FlightGlobals.ship_heading + 360) % 360;

                if (diff > 5)
                {
                    iCorrection = 2;
                }
                else if (diff < -5)
                {
                    iCorrection = 1;
                }
                else
                {
                    iCorrection = 0;
                }

                if (bClosing)
                {
                    tTextureLeft  = UIMain.tLeftOff;
                    tTextureRight = UIMain.tRightOff;
                }
                else
                {
                    tTextureLeft  = UIMain.tLeftOn;
                    tTextureRight = UIMain.tRightOn;
                }

                if (iCorrection == 1)
                {
                    tTextureLeft  = UIMain.tLeftOn;
                    tTextureRight = UIMain.tRightOff;
                }
                if (iCorrection == 2)
                {
                    tTextureLeft  = UIMain.tLeftOff;
                    tTextureRight = UIMain.tRightOn;
                }
            }
            else
            {
                tTextureMiddle = UIMain.tIconClosed;
                tTextureLeft   = UIMain.tLeftOff;
                tTextureRight  = UIMain.tRightOff;
            }
        }