public bool execManeuver(double extraDelayInSeconds = 0)
        {
            if (!hasManeuverNode())
            {
                return(false);
            }
            Vessel vessel        = SpaceCenter.ActiveVessel;
            double mass          = vessel.Mass;
            double isp           = vessel.SpecificImpulse;
            double g             = SpaceCenter.G;
            Node   manNode       = vessel.Control.Nodes[0];
            double burnTime      = (mass - (mass * (-manNode.DeltaV / (isp * g)))) / (vessel.Thrust / (isp * g));
            string alarmId       = "";
            var    nodeAlarmList = KerbalAlarmClock.AlarmsWithType(AlarmType.Maneuver);

            for (int x = 0; x < nodeAlarmList.Count; x++)
            {
                if (nodeAlarmList[x].Vessel.Equals(SpaceCenter.ActiveVessel))
                {
                    alarmId = nodeAlarmList[x].ID;
                    break;
                }
            }
            ConfigNode cNode = new ConfigNode("ManeuverCommand");

            cNode.AddValue("NodeIndex", 0);
            cNode.AddValue("KaCItemId", alarmId);
            cNode.AddValue("TimeStamp", manNode.UT - (burnTime / 2));
            cNode.AddValue("ExtraDelay", extraDelayInSeconds);
            cNode.AddValue("Guid", new Guid());
            node(extraDelayInSeconds);
            return(sendCommand(cNode));
        }
Пример #2
0
        internal void FillWindow(Int32 windowID)
        {
            Rect Toggle = KerbalAlarmClock.GetChildWindowRect(KAC.WindowPosByActiveScene, KAC.WindowPosByActiveScene.y, windowRect.width, windowRect.height, ref ShowOnLeft, KerbalAlarmClock.settings.WindowChildPosBelow);

            windowRect.x = Toggle.x;
            windowRect.y = KAC.WindowPosByActiveScene.y;

            GUILayout.BeginVertical();
            GUILayout.Label("Import Details", KACResources.styleAddSectionHeading);
            GUILayout.BeginVertical(KACResources.styleAddFieldAreas);
            GUILayout.BeginHorizontal();
            GUILayout.Label("Alarm Save File:");
            GUILayout.TextField(String.Format(String.Format("Alarms-{0}.txt", HighLogic.CurrentGame.Title)), KACResources.styleAddField);
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Read File"))
            {
                AlarmsLoaded = false; AlarmLoadFailed = false;
                if (UtilitiesLegacy.Loadv2Alarms(out LoadMessage, out oldAlarms))
                {
                    AlarmsLoaded = true;
                }
                else
                {
                    AlarmLoadFailed = true;
                }
                windowRect.height = 0;
            }
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();


            GUILayout.Label("Found Alarms", KACResources.styleAddSectionHeading);
            GUILayout.BeginVertical(KACResources.styleAddFieldAreas);

            if (AlarmLoadFailed)
            {
                GUILayout.Label(LoadMessage, KACResources.styleLabelError);
            }
            else if (AlarmsLoaded)
            {
                foreach (KACAlarm tmpAlarm in oldAlarms)
                {
                    GUILayout.BeginHorizontal();

                    switch (tmpAlarm.TypeOfAlarm)
                    {
                    case KACAlarm.AlarmTypeEnum.Raw:
                        GUILayout.Label(KACResources.iconRaw, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Maneuver:
                    case KACAlarm.AlarmTypeEnum.ManeuverAuto:
                        GUILayout.Label(KACResources.iconMNode, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.SOIChange:
                    case KACAlarm.AlarmTypeEnum.SOIChangeAuto:
                        GUILayout.Label(KACResources.iconSOI, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Transfer:
                    case KACAlarm.AlarmTypeEnum.TransferModelled:
                        GUILayout.Label(KACResources.iconXFer, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Apoapsis:
                        GUILayout.Label(KACResources.iconAp, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Periapsis:
                        GUILayout.Label(KACResources.iconPe, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.AscendingNode:
                        GUILayout.Label(KACResources.iconAN, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.DescendingNode:
                        GUILayout.Label(KACResources.iconDN, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.LaunchRendevous:
                        GUILayout.Label(KACResources.iconLaunchRendezvous, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Closest:
                        GUILayout.Label(KACResources.iconClosest, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Distance:
                        //TODO - SOMETHING HERE MAYBE
                        GUILayout.Label(KACResources.iconClosest, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.Crew:
                        GUILayout.Label(KACResources.iconCrew, KACResources.styleAlarmIcon);
                        break;

                    case KACAlarm.AlarmTypeEnum.EarthTime:
                        GUILayout.Label(KACResources.iconEarth, KACResources.styleAlarmIcon);
                        break;

                    default:
                        GUILayout.Label(KACResources.iconNone, KACResources.styleAlarmIcon);
                        break;
                    }

                    String strLabelText = "";
                    strLabelText = String.Format("{0} ({1})", tmpAlarm.Name, tmpAlarm.Remaining.ToStringStandard(KerbalAlarmClock.settings.TimeSpanFormat, 3));
                    GUIStyle   styleLabel     = new GUIStyle(KACResources.styleAlarmText);
                    GUIContent contAlarmLabel = new GUIContent(strLabelText, tmpAlarm.Notes);
                    GUILayout.Label(contAlarmLabel, styleLabel);
                    GUILayout.EndHorizontal();
                }
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Add to Alarms"))
                {
                    foreach (KACAlarm item in oldAlarms)
                    {
                        KerbalAlarmClock.alarms.Add(item);
                    }
                }
                if (GUILayout.Button("Replace Alarms"))
                {
                    KerbalAlarmClock.alarms = oldAlarms;
                }
                GUILayout.EndHorizontal();
            }
            else
            {
                GUILayout.Label("Click the Button above to start the process");
            }


            GUILayout.EndVertical();


            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Close Import Tool"))
            {
                Visible = false;
            }
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();

            KAC.SetTooltipText();
        }