예제 #1
0
 public KACAlarm(String NewName, double UT, AlarmTypeEnum atype, AlarmActions aAction)
     : this(UT)
 {
     Name         = NewName;
     TypeOfAlarm  = atype;
     this.Actions = aAction.Duplicate();
 }
        private void NewEarthAlarm()
        {
            AddType = KACAlarm.AlarmTypeEnum.EarthTime;

            strAlarmName  = "Earth Calling...";
            strAlarmNotes = "";

            AddNotesHeight = 50;

            strAlarmEarthHour = DateTime.Now.AddHours(2).Hour.ToString();
            strAlarmEarthMin  = DateTime.Now.Minute.ToString();

            AddAction  = KACAlarm.AlarmActionEnum.PauseGame;
            AddActions = new AlarmActions(AlarmActions.WarpEnum.PauseGame, AlarmActions.MessageEnum.Yes, false, false);
            ///AddActionPlaySound = ??
        }
예제 #3
0
        public void FillEditWindow(int WindowID)
        {
            if (alarmEdit.Remaining.UT > 0)
            {
                //Edit the Alarm if its not yet passed
                Double MarginStarting             = alarmEdit.AlarmMarginSecs;
                int    intHeight_EditWindowCommon = 103 +
                                                    alarmEdit.Notes.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length * 16;
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Raw && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Crew && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.ScienceLab)
                {
                    intHeight_EditWindowCommon += 28;
                }

                AlarmActions atemp = alarmEdit.Actions;
                WindowLayout_CommonFields(ref alarmEdit.Name, ref alarmEdit.Notes, ref atemp, ref alarmEdit.AlarmMarginSecs, alarmEdit.TypeOfAlarm, intHeight_EditWindowCommon);
                alarmEdit.Actions = atemp;
                //Adjust the UT of the alarm if the margin changed
                if (alarmEdit.AlarmMarginSecs != MarginStarting)
                {
                    alarmEdit.AlarmTime.UT += MarginStarting - alarmEdit.AlarmMarginSecs;
                }
                //Draw warning if the vessel no longer exists
                if (alarmEdit.TypeOfAlarm == KACAlarm.AlarmTypeEnum.Crew)
                {
                    DrawStoredCrewMissing(alarmEdit.VesselID);
                }
                else
                {
                    DrawStoredVesselIDMissing(alarmEdit.VesselID);
                }


                //Draw the old and new times
                GUILayout.BeginHorizontal();
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Raw && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Crew && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.ScienceLab)
                {
                    GUILayout.Label("Time To Alarm:", KACResources.styleContent);
                    GUILayout.Label((alarmEdit.AlarmTime - KACWorkerGameState.CurrentTime).ToStringStandard(settings.TimeSpanFormat), KACResources.styleAddHeading);
                }
                GUILayout.Label("Time To Event:", KACResources.styleContent);
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime)
                {
                    GUILayout.Label((alarmEdit.AlarmTime - KACWorkerGameState.CurrentTime).Add(new KSPTimeSpan(alarmEdit.AlarmMarginSecs)).ToStringStandard(settings.TimeSpanFormat), KACResources.styleAddHeading);
                }
                else
                {
                    GUILayout.Label(alarmEdit.Remaining.ToStringStandard(TimeSpanStringFormatsEnum.DateTimeFormat), KACResources.styleAddHeading);
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Date of Event:", KACResources.styleContent);
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime)
                {
                    GUILayout.Label(alarmEdit.AlarmTime.AddSeconds(alarmEdit.AlarmMarginSecs).ToStringStandard(DateStringFormatsEnum.DateTimeFormat), KACResources.styleAddHeading);
                }
                else
                {
                    GUILayout.Label(DateTime.Now.AddSeconds(alarmEdit.Remaining.UT).ToLongTimeString(), KACResources.styleAddHeading);
                }
                GUILayout.EndHorizontal();

                int intNoOfActionButtons           = 0;
                int intNoOfActionButtonsDoubleLine = 0;
                //if the alarm has a vessel ID/Kerbal associated
                if (CheckVesselOrCrewForJump(alarmEdit.VesselID, alarmEdit.TypeOfAlarm))
                {
                    //option to allow jumping from SC and TS
                    if (settings.AllowJumpFromViewOnly)
                    {
                        intNoOfActionButtons = DrawAlarmActionButtons(alarmEdit, out intNoOfActionButtonsDoubleLine);
                    }
                }

                intNoOfActionButtons += DrawTransferAngleButtons(alarmEdit);

                if (GUILayout.Button("Close Alarm Details", KACResources.styleButton))
                {
                    settings.Save();
                    _ShowEditPane = false;
                }

                //TODO: Edit the height of this for when we have big text in restore button
                intAlarmEditHeight = 197 + 16 + 20 + alarmEdit.Notes.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length * 16 + intNoOfActionButtons * 32 + intNoOfActionButtonsDoubleLine * 14;
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Raw && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Crew && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.ScienceLab)
                {
                    intAlarmEditHeight += 28;
                }
                if (alarmEdit.TypeOfAlarm == KACAlarm.AlarmTypeEnum.EarthTime)
                {
                    intAlarmEditHeight -= 28;
                }
            }
            else
            {
                //otherwise just show the details
                GUILayout.BeginVertical(GUI.skin.textArea);

                GUILayout.BeginHorizontal();
                GUILayout.Label("Alarm:", KACResources.styleAlarmMessageTime);
                GUILayout.Label(alarmEdit.Name, KACResources.styleAlarmMessageTime);
                GUILayout.EndHorizontal();
                GUILayout.Label(alarmEdit.Notes, KACResources.styleAlarmMessage);

                //Draw warning if the vessel no longer exists
                if (alarmEdit.TypeOfAlarm == KACAlarm.AlarmTypeEnum.Crew)
                {
                    DrawStoredCrewMissing(alarmEdit.VesselID);
                }
                else
                {
                    DrawStoredVesselIDMissing(alarmEdit.VesselID);
                }
                GUILayout.EndVertical();

                //Draw the old and new times
                GUILayout.BeginHorizontal();
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Raw && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.Crew && alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.ScienceLab)
                {
                    GUILayout.Label("Time To Alarm:", KACResources.styleContent);
                    GUILayout.Label((alarmEdit.AlarmTime - KACWorkerGameState.CurrentTime).ToStringStandard(settings.TimeSpanFormat), KACResources.styleAddHeading);
                }
                GUILayout.Label("Time To Event:", KACResources.styleContent);
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime)
                {
                    GUILayout.Label((alarmEdit.AlarmTime - KACWorkerGameState.CurrentTime).Add(new KSPTimeSpan(alarmEdit.AlarmMarginSecs)).ToStringStandard(settings.TimeSpanFormat), KACResources.styleAddHeading);
                }
                else
                {
                    GUILayout.Label(alarmEdit.Remaining.ToStringStandard(TimeSpanStringFormatsEnum.DateTimeFormat), KACResources.styleAddHeading);
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Date of Event:", KACResources.styleContent);
                if (alarmEdit.TypeOfAlarm != KACAlarm.AlarmTypeEnum.EarthTime)
                {
                    GUILayout.Label(alarmEdit.AlarmTime.AddSeconds(alarmEdit.AlarmMarginSecs).ToStringStandard(DateStringFormatsEnum.DateTimeFormat), KACResources.styleAddHeading);
                }
                else
                {
                    GUILayout.Label(DateTime.Now.AddSeconds(alarmEdit.Remaining.UT).ToLongTimeString(), KACResources.styleAddHeading);
                }
                GUILayout.EndHorizontal();

                int intNoOfActionButtons           = 0;
                int intNoOfActionButtonsDoubleLine = 0;
                //if the alarm has a vessel ID/Kerbal associated
                if (CheckVesselOrCrewForJump(alarmEdit.VesselID, alarmEdit.TypeOfAlarm))
                {
                    //option to allow jumping from SC and TS
                    if (settings.AllowJumpFromViewOnly)
                    {
                        intNoOfActionButtons = DrawAlarmActionButtons(alarmEdit, out intNoOfActionButtonsDoubleLine);
                    }
                }

                intNoOfActionButtons += DrawTransferAngleButtons(alarmEdit);

                if (GUILayout.Button("Close Alarm Details", KACResources.styleButton))
                {
                    _ShowEditPane = false;
                }

                intAlarmEditHeight = 152 + 20 +
                                     alarmEdit.Notes.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length * 16 +
                                     intNoOfActionButtons * 32 + intNoOfActionButtonsDoubleLine * 14;
            }
            SetTooltipText();
        }
        private void AddContractAutoAlarm(Contract contract, Double margin, AlarmActions action)
        {
            //If theres already an alarm then leave it alone
            if (alarms.Any(a => a.ContractGUID == contract.ContractGuid))
                return;

            //log
            LogFormatted("Adding new {3} Contract Alarm for: {0}({1})-{2}", contract.Title, contract.ContractGuid, contract.DateExpire, contract.ContractState);

            //gen the text
            String AlarmName, AlarmNotes;
            GenerateContractStringsFromContract(contract, out AlarmName, out AlarmNotes);

            //create the alarm
            KACAlarm tmpAlarm = new KACAlarm("", AlarmName, AlarmNotes, contract.DateNext() - margin, margin,
                KACAlarm.AlarmTypeEnum.ContractAuto, action);

            //add the contract specifics
            tmpAlarm.ContractGUID = contract.ContractGuid;
            tmpAlarm.ContractAlarmType = contract.AlarmType();

            //add it to the list
            alarms.Add(tmpAlarm);
        }
        private void CreateAutoContracts(Settings.AutoContractBehaviorEnum TypeOfAuto, Contract.State state, Boolean DontCreateAlarmsInsideMargin, Double margin, AlarmActions action)
        {
            if (TypeOfAuto == Settings.AutoContractBehaviorEnum.Next && DontCreateAlarmsInsideMargin)
            {
                //find the next valid contract to have an alarm for
                Contract conNext = lstContracts.Where(ci => ci.ContractState == state &&
                                            ci.DateNext() > KACWorkerGameState.CurrentTime.UT + margin)
                                            .OrderBy(ci => ci.DateNext())
                                            .FirstOrDefault();

                if (conNext != null)
                {
                    AddContractAutoAlarm(conNext, margin, action);
                }
            }
            else if (TypeOfAuto == Settings.AutoContractBehaviorEnum.All || TypeOfAuto == Settings.AutoContractBehaviorEnum.Next)
            {
                Boolean FirstOutsideMargin = false;
                foreach (Contract c in lstContracts.Where(ci => ci.ContractState == state &&
                                            ci.DateNext() > KACWorkerGameState.CurrentTime.UT).OrderBy(ci => ci.DateNext()))
                {
                    AddContractAutoAlarm(c, margin, action);

                    FirstOutsideMargin = (c.DateNext() > KACWorkerGameState.CurrentTime.UT + margin);

                    if (TypeOfAuto == Settings.AutoContractBehaviorEnum.Next && FirstOutsideMargin)
                        break;
                }
            }
        }
예제 #6
0
 public KACAlarm(String vID, String NewName, String NewNotes, double UT, Double Margin, AlarmTypeEnum atype, AlarmActions aAction, ITargetable NewTarget)
     : this(vID, NewName, NewNotes, UT, Margin, atype, aAction)
 {
     //Set the ITargetable proerty
     TargetObject = NewTarget;
 }
예제 #7
0
 public KACAlarm(String vID, String NewName, String NewNotes, double UT, Double Margin, AlarmTypeEnum atype, AlarmActions aAction, KACXFerTarget NewTarget)
     : this(vID, NewName, NewNotes, UT, Margin, atype, aAction)
 {
     //Set target details
     XferOriginBodyName = NewTarget.Origin.bodyName;
     XferTargetBodyName = NewTarget.Target.bodyName;
 }
예제 #8
0
 public KACAlarm(String vID, String NewName, String NewNotes, double UT, Double Margin, AlarmTypeEnum atype, AlarmActions aAction, List <ManeuverNode> NewManeuvers)
     : this(vID, NewName, NewNotes, UT, Margin, atype, aAction)
 {
     //set maneuver node
     ManNodes = NewManeuvers;
 }
예제 #9
0
 public KACAlarm(String vID, String NewName, String NewNotes, double UT, Double Margin, AlarmTypeEnum atype, AlarmActions aAction)
     : this(vID, NewName, UT, atype, aAction)
 {
     Notes           = NewNotes;
     AlarmMarginSecs = Margin;
 }
예제 #10
0
 public KACAlarm(String vID, String NewName, double UT, AlarmTypeEnum atype, AlarmActions aAction)
     : this(NewName, UT, atype, aAction)
 {
     VesselID = vID;
 }
        /// <summary>
        /// Code to reset the settings etc when the new button is hit
        /// </summary>
        private void NewAddAlarm()
        {
            //Set time variables
            timeRaw.BuildFromUT(600);
            strRawUT = "";
            _ShowAddMessages = false;

            //option for xfer mode
            if (settings.XferUseModelData)
                intXferType = 0;
            else
                intXferType = 1;

            //default margin
            timeMargin.BuildFromUT(settings.AlarmDefaultMargin);

            //set default strings
            if (KACWorkerGameState.CurrentVessel != null)
                strAlarmName = KACWorkerGameState.CurrentVessel.vesselName + "";
            else
                strAlarmName = "No Vessel";
            strAlarmNotes = "";
            AddNotesHeight = 100;

            AddActions = settings.AlarmDefaultAction.Duplicate();
            //blnHaltWarp = true;

            //set initial alarm type based on whats on the flight path
            if (KACWorkerGameState.ManeuverNodeExists)
                AddType = KACAlarm.AlarmTypeEnum.Maneuver;//AddAlarmType.Node;
            else if (KACWorkerGameState.SOIPointExists)
                AddType = KACAlarm.AlarmTypeEnum.SOIChange;//AddAlarmType.Node;
            else
                AddType = KACAlarm.AlarmTypeEnum.Raw;//AddAlarmType.Node;

            //trigger the work to set each type
            AddTypeChanged();

            //build the XFer parents list
            SetUpXferParents();
            intXferCurrentParent = 0;
            SetupXferOrigins();
            intXferCurrentOrigin = 0;

            if (KACWorkerGameState.CurrentVessel != null)
            {
                //if the craft is orbiting a body on the parents list then set it as the default
                if (XferParentBodies.Contains(KACWorkerGameState.CurrentVessel.mainBody.referenceBody))
                {
                    intXferCurrentParent = XferParentBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody.referenceBody);
                    SetupXferOrigins();
                    intXferCurrentOrigin = XferOriginBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody);
                }
            }
            //set initial targets
            SetupXFerTargets();
            intXferCurrentTarget = 0;

            intSelectedCrew = 0;
            intSelectedContract = 0;
            strCrewUT = "";

            ddlKERNodeMargin.SelectedIndex = (Int32)settings.DefaultKERMargin;

            //ddlAddAlarm.SelectedIndex = ddlAddAlarm.Items.IndexOf(settings.AlarmsSoundName);
            //PlaySound = settings.AlarmPlaySound;
        }
        private void NewEarthAlarm()
        {
            AddType = KACAlarm.AlarmTypeEnum.EarthTime;

            strAlarmName="Earth Calling...";
            strAlarmNotes="";

            AddNotesHeight = 50;

            strAlarmEarthHour = DateTime.Now.AddHours(2).Hour.ToString();
            strAlarmEarthMin = DateTime.Now.Minute.ToString();

            AddAction = KACAlarm.AlarmActionEnum.PauseGame;
            AddActions = new AlarmActions(AlarmActions.WarpEnum.PauseGame, AlarmActions.MessageEnum.Yes, false, false);
            ///AddActionPlaySound = ??
        }