示例#1
0
            public void RenderButton()
            {
                string vessel_guid = predicted_vessel?.id.ToString();
                var    now         = DateTime.UtcNow;

                if (vessel_guid == null)
                {
                    orbit_description_ = null;
                }
                else
                {
                    if (should_request_analysis &&
                        (Shown() ||
                         (!last_background_analysis_time_.HasValue ||
                          (now - last_background_analysis_time_) > TimeSpan.FromSeconds(2))))
                    {
                        last_background_analysis_time_ = now;
                        // Keep refreshing the analysis (albeit at a reduced rate) even when the
                        // analyser is not shown, so that the analysis button can display an
                        // up-to-date one-line summary.
                        RequestAnalysis();
                    }
                    OrbitAnalysis analysis = GetAnalysis();
                    CelestialBody primary  = analysis.primary_index.HasValue
          ? FlightGlobals.Bodies[analysis.primary_index.Value]
          : null;
                    orbit_description_ = OrbitDescription(
                        primary,
                        analysis.elements,
                        analysis.recurrence,
                        analysis.ground_track,
                        (int?)(analysis.mission_duration / analysis.elements?.nodal_period));
                }
                RenderButton(ButtonText(orbit_description_));
            }
示例#2
0
            protected override void RenderWindow(int window_id)
            {
                string vessel_guid = predicted_vessel?.id.ToString();

                if (vessel_guid == null)
                {
                    return;
                }

                using (new UnityEngine.GUILayout.VerticalScope(GUILayoutWidth(8))) {
                    if (should_request_analysis)
                    {
                        mission_duration_.Render(enabled: true);
                    }
                    var   multiline_style = Style.Multiline(UnityEngine.GUI.skin.label);
                    float two_lines       = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1\n2"), Width(1));
                    float five_lines = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1\n2\n3\n4\n5"), Width(1));
                    UnityEngine.GUILayout.Label(AnalysingText(),
                                                multiline_style,
                                                UnityEngine.GUILayout.Height(two_lines));

                    OrbitAnalysis analysis = GetAnalysis();

                    if (autodetect_recurrence_ &&
                        analysis.recurrence.HasValue &&
                        analysis.recurrence.Value.number_of_revolutions != 0 &&
                        analysis.recurrence.Value.cto != 0)
                    {
                        revolutions_per_cycle_ =
                            analysis.recurrence.Value.number_of_revolutions;
                        days_per_cycle_ = analysis.recurrence.Value.cto;
                    }
                    UnityEngine.GUILayout.HorizontalScrollbar(
                        value: 0,
                        size: (float)analysis.progress_of_next_analysis,
                        leftValue: 0,
                        rightValue: 1);

                    OrbitalElements? elements         = analysis.elements;
                    OrbitRecurrence? recurrence       = analysis.recurrence;
                    OrbitGroundTrack?ground_track     = analysis.ground_track;
                    double           mission_duration = analysis.mission_duration;
                    CelestialBody    primary          =
                        analysis.primary_index.HasValue ? FlightGlobals.Bodies[analysis.primary_index.Value]
                                          : null;

                    orbit_description_ = OrbitDescription(
                        primary, elements, recurrence, ground_track,
                        (int?)(mission_duration / elements?.nodal_period));

                    Style.HorizontalLine();
                    string duration_in_revolutions;
                    if (elements.HasValue)
                    {
                        int sidereal_revolutions =
                            (int)(mission_duration / elements.Value.sidereal_period);
                        int nodal_revolutions =
                            (int)(mission_duration / elements.Value.nodal_period);
                        int anomalistic_revolutions =
                            (int)(mission_duration / elements.Value.anomalistic_period);
                        int ground_track_cycles = analysis.recurrence.HasValue
                                      ? nodal_revolutions / analysis.recurrence.
                                                  Value.number_of_revolutions
                                      : 0;
                        string duration_in_ground_track_cycles = ground_track_cycles > 0
            ? $" ({ground_track_cycles.FormatN(0)} ground track cycles)"
            : "";
                        duration_in_revolutions = $@"{
            sidereal_revolutions.FormatN(0)} sidereal revolutions{"\n"}{
            nodal_revolutions.FormatN(0)} nodal revolutions{
            duration_in_ground_track_cycles}{"\n"}{
            anomalistic_revolutions.FormatN(0)} anomalistic revolutions";
                    }
                    else
                    {
                        duration_in_revolutions =
                            "could not determine elements; mission duration may be shorter " +
                            "than a revolution, or trajectory may not be gravitationally bound";
                        if (primary != null)
                        {
                            duration_in_revolutions += $" to {primary.NameWithArticle()}.";
                        }
                        multiline_style = Style.Warning(multiline_style);
                    }
                    string analysis_description =
                        primary == null
          ? $@"{predicted_vessel.vesselName} is not gravitationally bound over {
               mission_duration.FormatDuration(show_seconds: false)}"
          : $@"Orbit of {predicted_vessel.vesselName} with respect to {
               primary.NameWithArticle()} over {
               mission_duration.FormatDuration(show_seconds : false)}:{"\n"}{
               duration_in_revolutions}";
                    UnityEngine.GUILayout.Label(
                        analysis_description,
                        multiline_style,
                        UnityEngine.GUILayout.Height(five_lines));
                    Style.HorizontalLine();
                    RenderOrbitalElements(elements, primary);
                    Style.HorizontalLine();
                    RenderOrbitRecurrence(recurrence, primary);
                    Style.HorizontalLine();
                    RenderOrbitGroundTrack(ground_track, primary);
                }
                UnityEngine.GUI.DragWindow();
            }
示例#3
0
            protected override void RenderWindow(int window_id)
            {
                string vessel_guid = predicted_vessel?.id.ToString();

                if (vessel_guid == null)
                {
                    return;
                }

                using (new UnityEngine.GUILayout.VerticalScope(GUILayoutWidth(12))) {
                    if (should_request_analysis)
                    {
                        mission_duration_.Render(enabled: true);
                    }
                    var   multiline_style = Style.Multiline(UnityEngine.GUI.skin.label);
                    float two_lines       = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1一\n2二"),
                        Width(1));
                    float five_lines = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1一\n2二\n3三\n4四\n5五"),
                        Width(1));
                    UnityEngine.GUILayout.Label(AnalysingText(),
                                                multiline_style,
                                                UnityEngine.GUILayout.Height(two_lines));

                    OrbitAnalysis analysis = GetAnalysis();

                    if (autodetect_recurrence_ &&
                        analysis.recurrence.HasValue &&
                        analysis.recurrence.Value.number_of_revolutions != 0 &&
                        analysis.recurrence.Value.cto != 0)
                    {
                        revolutions_per_cycle_ =
                            analysis.recurrence.Value.number_of_revolutions;
                        days_per_cycle_ = analysis.recurrence.Value.cto;
                    }
                    UnityEngine.GUILayout.HorizontalScrollbar(
                        value: 0,
                        size: (float)analysis.progress_of_next_analysis,
                        leftValue: 0,
                        rightValue: 1);

                    OrbitalElements? elements         = analysis.elements;
                    OrbitRecurrence? recurrence       = analysis.recurrence;
                    OrbitGroundTrack?ground_track     = analysis.ground_track;
                    double           mission_duration = analysis.mission_duration;
                    CelestialBody    primary          = analysis.primary_index.HasValue
                                  ? FlightGlobals.Bodies[
                        analysis.primary_index.Value]
                                  : null;

                    orbit_description_ = OrbitDescription(primary,
                                                          elements,
                                                          recurrence,
                                                          ground_track,
                                                          (int?)(mission_duration /
                                                                 elements?.nodal_period));

                    Style.HorizontalLine();
                    string duration_in_revolutions;
                    if (elements.HasValue)
                    {
                        int sidereal_revolutions =
                            (int)(mission_duration / elements.Value.sidereal_period);
                        int nodal_revolutions =
                            (int)(mission_duration / elements.Value.nodal_period);
                        int anomalistic_revolutions =
                            (int)(mission_duration / elements.Value.anomalistic_period);
                        int ground_track_cycles = analysis.recurrence.HasValue
                                      ? nodal_revolutions /
                                                  analysis.recurrence.Value.
                                                  number_of_revolutions
                                      : 0;
                        string duration_in_ground_track_cycles =
                            ground_track_cycles > 0
                ?  Localizer.Format(
                                "#Principia_OrbitAnalyser_Duration_GroundTrackCycles",
                                ground_track_cycles.FormatN(0))
                : "";
                        duration_in_revolutions = Localizer.Format(
                            "#Principia_OrbitAnalyser_Duration_Revolutions",
                            sidereal_revolutions.FormatN(0),
                            nodal_revolutions.FormatN(0),
                            duration_in_ground_track_cycles,
                            anomalistic_revolutions.FormatN(0));
                    }
                    else
                    {
                        if (primary == null)
                        {
                            duration_in_revolutions = Localizer.Format(
                                "#Principia_OrbitAnalyser_Warning_NoElements1");
                        }
                        else
                        {
                            duration_in_revolutions = Localizer.Format(
                                "#Principia_OrbitAnalyser_Warning_NoElements2",
                                primary.NameWithArticle());
                        }
                        multiline_style = Style.Warning(multiline_style);
                    }
                    string analysis_description =
                        primary == null
              ? Localizer.Format(
                            "#Principia_OrbitAnalyser_Warning_NoPrimary",
                            predicted_vessel.vesselName,
                            mission_duration.FormatDuration(show_seconds: false))
              : Localizer.Format(
                            "#Principia_OrbitAnalyser_AnalysisDescription",
                            predicted_vessel.vesselName,
                            primary.NameWithArticle(),
                            mission_duration.FormatDuration(show_seconds: false),
                            duration_in_revolutions);

                    UnityEngine.GUILayout.Label(analysis_description,
                                                multiline_style,
                                                UnityEngine.GUILayout.Height(five_lines));
                    Style.HorizontalLine();
                    RenderLowestAltitude(elements, primary);
                    Style.HorizontalLine();
                    UnityEngine.GUILayout.Label(
                        Localizer.Format("#Principia_OrbitAnalyser_Elements_MeanElements"));
                    RenderOrbitalElements(elements, primary);
                    Style.HorizontalLine();
                    UnityEngine.GUILayout.Label(
                        Localizer.Format("#Principia_OrbitAnalyser_GroundTrack"));
                    RenderOrbitRecurrence(recurrence, primary);
                    Style.LineSpacing();
                    RenderOrbitGroundTrack(ground_track, primary);
                }
                UnityEngine.GUI.DragWindow();
            }
示例#4
0
            protected override void RenderWindow(int window_id)
            {
                using (new UnityEngine.GUILayout.VerticalScope(GUILayoutWidth(8))) {
                    Vessel vessel = FlightGlobals.ActiveVessel;
                    if (plugin == IntPtr.Zero || vessel == null ||
                        !plugin.HasVessel(vessel.id.ToString()))
                    {
                        Hide();
                        return;
                    }
                    CelestialBody primary =
                        adapter_.plotting_frame_selector_.selected_celestial;

                    mission_duration_.Render(enabled: true);
                    var   multiline_style = Style.Multiline(UnityEngine.GUI.skin.label);
                    float two_lines       = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1\n2"), Width(1));
                    float five_lines = multiline_style.CalcHeight(
                        new UnityEngine.GUIContent("1\n2\n3\n4\n5"), Width(1));
                    UnityEngine.GUILayout.Label(
                        $@"Analysing orbit of {vessel.vesselName} with respect to {
            primary.NameWithArticle()}...",
                        multiline_style,
                        UnityEngine.GUILayout.Height(two_lines));

                    OrbitAnalysis analysis = plugin.VesselRefreshAnalysis(
                        vessel.id.ToString(),
                        primary.flightGlobalsIndex,
                        mission_duration_.value,
                        autodetect_recurrence_ ? null : (int?)revolutions_per_cycle_,
                        autodetect_recurrence_ ? null : (int?)days_per_cycle_,
                        ground_track_revolution_);
                    if (autodetect_recurrence_ &&
                        analysis.recurrence.number_of_revolutions != 0 &&
                        analysis.recurrence.cto != 0)
                    {
                        revolutions_per_cycle_ = analysis.recurrence.number_of_revolutions;
                        days_per_cycle_        = analysis.recurrence.cto;
                    }
                    UnityEngine.GUILayout.HorizontalScrollbar(
                        value: 0,
                        size: (float)analysis.progress_of_next_analysis,
                        leftValue: 0,
                        rightValue: 1);

                    OrbitalElements? elements         = null;
                    OrbitRecurrence? recurrence       = null;
                    OrbitGroundTrack?ground_track     = null;
                    double           mission_duration = analysis.mission_duration;
                    if (analysis.elements_has_value)
                    {
                        elements = analysis.elements;
                    }
                    if (analysis.recurrence_has_value)
                    {
                        recurrence = analysis.recurrence;
                    }
                    if (analysis.ground_track_has_value)
                    {
                        ground_track = analysis.ground_track;
                    }
                    primary = FlightGlobals.Bodies[analysis.primary_index];

                    Style.HorizontalLine();
                    string duration_in_revolutions;
                    if (elements.HasValue)
                    {
                        int sidereal_revolutions =
                            (int)(mission_duration / elements.Value.sidereal_period);
                        int nodal_revolutions =
                            (int)(mission_duration / elements.Value.nodal_period);
                        int anomalistic_revolutions =
                            (int)(mission_duration / elements.Value.anomalistic_period);
                        int ground_track_cycles = analysis.recurrence_has_value
            ? nodal_revolutions / analysis.recurrence.number_of_revolutions
            : 0;
                        string duration_in_ground_track_cycles = ground_track_cycles > 0
            ? $" ({ground_track_cycles.FormatN(0)} ground track cycles)"
            : "";
                        duration_in_revolutions = $@"{
            sidereal_revolutions.FormatN(0)} sidereal revolutions{"\n"}{
            nodal_revolutions.FormatN(0)} nodal revolutions{
            duration_in_ground_track_cycles}{"\n"}{
            anomalistic_revolutions.FormatN(0)} anomalistic revolutions";
                    }
                    else
                    {
                        duration_in_revolutions =
                            "could not determine elements; mission duration may be shorter " +
                            "than a revolution, or trajectory may not be gravitationally " +
                            $"bound to {primary.NameWithArticle()}.";
                        multiline_style = Style.Warning(multiline_style);
                    }
                    string analysis_description =
                        $@"Orbit of {vessel.vesselName} with respect to {
            primary.NameWithArticle()} over {
            mission_duration.FormatDuration(show_seconds : false)}:{"\n"}{
            duration_in_revolutions}";
                    UnityEngine.GUILayout.Label(
                        analysis_description,
                        multiline_style,
                        UnityEngine.GUILayout.Height(five_lines));
                    Style.HorizontalLine();
                    RenderOrbitalElements(elements);
                    Style.HorizontalLine();
                    RenderOrbitRecurrence(recurrence, primary);
                    Style.HorizontalLine();
                    RenderOrbitGroundTrack(ground_track, primary);
                }
                UnityEngine.GUI.DragWindow();
            }