Example #1
0
        public static ConfigNode LocalMasCon(Vessel vessel)
        {
            ConfigNode LocalGravityMap = ThisGravityMap(vessel.orbitDriver.orbit.referenceBody.GetName());
            ConfigNode Local           = new ConfigNode();

            if (LocalGravityMap.nodes.Count > 0)
            {
                double VesselLat  = vessel.latitude;
                double VesselLong = vessel.longitude;

                bool LatitudeWithin  = false;
                bool LongitudeWithin = false;

                foreach (ConfigNode MasCon in LocalGravityMap.GetNodes("MASCON"))
                {
                    double CentreGal  = double.Parse(MasCon.GetValue("centreGal"));
                    double CentreLat  = double.Parse(MasCon.GetValue("centreLat"));
                    double CentreLong = double.Parse(MasCon.GetValue("centreLong"));
                    double DegDiam    = double.Parse(MasCon.GetValue("diamdeg"));
                    double DegRad     = DegDiam / 2.0;

                    double UpperBoundLat  = CentreLat + DegRad;
                    double LowerBoundLat  = CentreLat - DegRad;
                    double UpperBoundLong = CentreLong + DegRad;
                    double LowerBoundLong = CentreLong - DegRad;

                    if (UpperBoundLat > 90)
                    {
                        UpperBoundLat = Math.Abs(UpperBoundLat - 180);
                    }

                    if (LowerBoundLat < 90)
                    {
                        LowerBoundLat = -1 * (UpperBoundLat + 180);
                    }

                    if (UpperBoundLong > 180)
                    {
                        UpperBoundLong = UpperBoundLong - 360;
                    }

                    if (UpperBoundLong < -180)
                    {
                        UpperBoundLong = UpperBoundLong + 360;
                    }

                    if (IsBetween(VesselLat, UpperBoundLat, LowerBoundLat))
                    {
                        LatitudeWithin = true;
                    }

                    if (IsBetween(VesselLong, UpperBoundLong, LowerBoundLong))
                    {
                        LongitudeWithin = true;
                    }

                    if (LatitudeWithin == true && LongitudeWithin == true)
                    {
                        Local = MasCon;
                        break;
                    }
                }
            }

            return(Local);
        }
Example #2
0
        public static bool CheckMasConProximity(Vessel vessel)
        {
            bool WithinEffectRange = false;

            if (vessel.orbitDriver.orbit.referenceBody.GetName() == "Earth" || vessel.orbitDriver.orbit.referenceBody.GetName() == "Kerbin" || vessel.orbitDriver.orbit.referenceBody.GetName() == "Moon") //
            {
                ConfigNode LocalGravityMap = ThisGravityMap(vessel.orbitDriver.orbit.referenceBody.GetName());

                if (LocalGravityMap.nodes.Count > 0)
                {
                    double VesselLat  = vessel.latitude;
                    double VesselLong = vessel.longitude;

                    bool LatitudeWithin  = false;
                    bool LongitudeWithin = false;

                    foreach (ConfigNode MasCon in LocalGravityMap.GetNodes("MASCON"))
                    {
                        double CentreGal  = double.Parse(MasCon.GetValue("centreGal"));
                        double CentreLat  = double.Parse(MasCon.GetValue("centreLat"));
                        double CentreLong = double.Parse(MasCon.GetValue("centreLong"));
                        double DegDiam    = double.Parse(MasCon.GetValue("diamdeg"));
                        double DegRad     = DegDiam / 2.0;

                        double UpperBoundLat  = CentreLat + DegRad;
                        double LowerBoundLat  = CentreLat - DegRad;
                        double UpperBoundLong = CentreLong + DegRad;
                        double LowerBoundLong = CentreLong - DegRad;

                        if (UpperBoundLat > 90)
                        {
                            UpperBoundLat = Math.Abs(UpperBoundLat - 180);
                        }

                        if (LowerBoundLat < 90)
                        {
                            LowerBoundLat = -1 * (UpperBoundLat + 180);
                        }

                        if (UpperBoundLong > 180)
                        {
                            UpperBoundLong = UpperBoundLong - 360;
                        }

                        if (UpperBoundLong < -180)
                        {
                            UpperBoundLong = UpperBoundLong + 360;
                        }

                        if (IsBetween(VesselLat, UpperBoundLat, LowerBoundLat))
                        {
                            LatitudeWithin = true;
                        }

                        if (IsBetween(VesselLong, UpperBoundLong, LowerBoundLong))
                        {
                            LongitudeWithin = true;
                        }


                        if (LatitudeWithin && LongitudeWithin)
                        {
                            break;
                        }
                    }

                    if (LatitudeWithin && LongitudeWithin)
                    {
                        WithinEffectRange = true;
                    }
                }
            }
            return(WithinEffectRange);
        }