Exemple #1
0
        private static void CreateCourseFinishAlarm(ProtoCrewMember student, ActiveCourse currentCourse, bool StockAlarmEnabled)
        {
            // CrewHandler processes trainings every 3600 seconds. Need to account for that to set up accurate KAC alarms.
            double completeUT = currentCourse.CompletionTime();
            double timeDiff   = completeUT - CrewHandler.Instance.NextUpdate;
            double timesChRun = Math.Ceiling(timeDiff / CrewHandler.UpdateInterval);
            double alarmUT    = CrewHandler.Instance.NextUpdate + timesChRun * CrewHandler.UpdateInterval;
            string alarmTxt   = $"{currentCourse.name} - {student.name}";

            if (KACWrapper.APIReady)
            {
                KACWrapper.KAC.CreateAlarm(KACWrapper.KACAPI.AlarmTypeEnum.Crew, alarmTxt, alarmUT);
            }
            if (StockAlarmEnabled)
            {
                AlarmTypeRaw alarmToSet = new AlarmTypeRaw
                {
                    title       = alarmTxt,
                    description = alarmTxt,
                    actions     =
                    {
                        warp    = AlarmActions.WarpEnum.KillWarp,
                        message = AlarmActions.MessageEnum.Yes
                    },
                    ut = alarmUT
                };
                AlarmClockScenario.AddAlarm(alarmToSet);
            }
        }
Exemple #2
0
        public void AddToConstruction(ShipTemplate shipTemplate)
        {
            var vessel           = VesselUtils.ShipName(shipTemplate);
            var constructionTime = ConstructionTime(shipTemplate);
            var universalTime    = Planetarium.GetUniversalTime();

            var alarmToSet = new AlarmTypeRaw
            {
                title       = $"{shipTemplate.shipName}: Construction...",
                description = "The vessel is in construction, each bolt must be tightened.",
                actions     =
                {
                    warp           = AlarmActions.WarpEnum.KillWarp,
                    message        = AlarmActions.MessageEnum.Yes,
                    deleteWhenDone = true
                },
                ut = universalTime + constructionTime
            };

            AlarmClockScenario.AddAlarm(alarmToSet);

            construction.Add(new VesselConstruction
            {
                AlarmId   = alarmToSet.Id,
                Vessel    = vessel,
                Name      = shipTemplate.shipName,
                StartedAt = universalTime,
                Time      = constructionTime
            });
        }
        public static Mission CreateDeployment(string shipName, ShipTemplate template, Orbit orbit, MissionProfile profile, List <string> crew, string flagURL)
        {
            var mission = new Mission
            {
                missionType          = MissionType.DEPLOY,
                shipTemplateFilename = SanitizePath(template.filename),
                orbit         = orbit,
                shipName      = shipName,
                profileName   = profile.profileName,
                eta           = Planetarium.GetUniversalTime() + profile.missionDuration,
                crewToDeliver = crew,
                flagURL       = flagURL,
            };

            Log.Info("CreateDeployment, current time: " + Planetarium.GetUniversalTime().ToString("F0") + ", eta: " + mission.eta.ToString("F0"));
            if (KACWrapper.APIReady && MissionController.useKACifAvailable)
            {
                Log.Info("Setting KAC Alarm");
                var KACalarmID = KACWrapper.KAC.CreateAlarm(
                    KACWrapper.KACAPI.AlarmTypeEnum.Raw,
                    "Deployment: " + shipName,
                    mission.eta
                    );
                var a = KACWrapper.KAC.Alarms.FirstOrDefault(z => z.ID == KACalarmID);
                if (a != null)
                {
                    a.AlarmAction = KACWrapper.KACAPI.AlarmActionEnum.KillWarp;
                    a.AlarmMargin = 0;
                    //a.VesselID = FlightGlobals.ActiveVessel.id.ToString();
                    a.Notes = "Vessel deployment of " + shipName + " by Kerbal Space Transport System";
                }
            }
            if (MissionController.useStockAlarmClock)
            {
                Log.Info("Setting stock alarm");
                AlarmTypeRaw alarmToSet = new AlarmTypeRaw
                {
                    title       = "KSTS Vessel Deployment",
                    description = "Vessel deployment of " + shipName + " by Kerbal Space Transport System",
                    actions     =
                    {
                        warp    = AlarmActions.WarpEnum.KillWarp,
                        message = AlarmActions.MessageEnum.Yes
                    },
                    ut = mission.eta
                };
                AlarmClockScenario.AddAlarm(alarmToSet);
            }
            // The filename contains silly portions like "KSP_x64_Data/..//saves", which break savegames because "//" starts a comment in the savegame ...
            // The crew we want the new vessel to start with.

            return(mission);
        }
        public static Mission CreateConstruction(string shipName, ShipTemplate template, Vessel spaceDock, MissionProfile profile, List <string> crew, string flagURL, double constructionTime)
        {
            var mission = new Mission
            {
                missionType          = MissionType.CONSTRUCT,
                shipTemplateFilename = SanitizePath(template.filename),
                targetVesselId       = spaceDock.protoVessel.vesselID,
                shipName             = shipName,
                profileName          = profile.profileName,
                eta           = Planetarium.GetUniversalTime() + constructionTime,
                crewToDeliver = crew,
                flagURL       = flagURL
            };

            // The crew we want the new vessel to start with.

            if (KACWrapper.APIReady && MissionController.useKACifAvailable)
            {
                var KACalarmID = KACWrapper.KAC.CreateAlarm(
                    KACWrapper.KACAPI.AlarmTypeEnum.Raw,
                    "Construction: " + shipName,
                    mission.eta
                    );
                var a = KACWrapper.KAC.Alarms.FirstOrDefault(z => z.ID == KACalarmID);
                if (a != null)
                {
                    a.AlarmAction = KACWrapper.KACAPI.AlarmActionEnum.KillWarp;
                    a.AlarmMargin = 0;
                    //a.VesselID = FlightGlobals.ActiveVessel.id.ToString();
                    a.Notes = "Construction of " + shipName + " by Kerbal Space Transport System";
                }
            }
            if (MissionController.useStockAlarmClock)
            {
                AlarmTypeRaw alarmToSet = new AlarmTypeRaw
                {
                    title       = "KSTS Construction",
                    description = "Construction of " + shipName + " by Kerbal Space Transport System",
                    actions     =
                    {
                        warp    = AlarmActions.WarpEnum.KillWarp,
                        message = AlarmActions.MessageEnum.Yes
                    },
                    ut = mission.eta
                };
                AlarmClockScenario.AddAlarm(alarmToSet);
            }

            return(mission);
        }
Exemple #5
0
        public Alarm MakeRawAlarm(double time, string title = "Raw Alarm", string description = "")
        {
            AlarmTypeRaw alarm = new AlarmTypeRaw
            {
                title       = title,
                description = description,
                actions     =
                {
                    warp    = AlarmActions.WarpEnum.KillWarp,
                    message = AlarmActions.MessageEnum.Yes
                },
                ut = Planetarium.GetUniversalTime() + time
            };

            AlarmClockScenario.AddAlarm(alarm);
            return(new Alarm(alarm));
        }
Exemple #6
0
        public Alarm MakeRawAlarmVessel(double time, Vessel V, string title = "Raw Alarm", string description = "")
        {
            AlarmTypeRaw alarm = new AlarmTypeRaw
            {
                title       = title,
                description = description,
                ut          = Planetarium.GetUniversalTime() + time,
                actions     =
                {
                    warp    = AlarmActions.WarpEnum.KillWarp,
                    message = AlarmActions.MessageEnum.Yes
                },
                vesselId = V.InternalVessel.persistentId
            };

            AlarmClockScenario.AddAlarm(alarm);
            return(new Alarm(alarm));
        }
Exemple #7
0
        public void NewStockAlarm(string alarmName, string alarmDescription, double alarmTime)
        {
            if (!Bureaucracy.Instance.settings.StopTimeWarp)
            {
                return;
            }
            AlarmTypeRaw alarmToSet = new AlarmTypeRaw
            {
                title       = alarmName,
                description = alarmDescription,
                actions     =
                {
                    warp    = AlarmActions.WarpEnum.KillWarp,
                    message = AlarmActions.MessageEnum.Yes
                },
                ut = alarmTime
            };

            AlarmClockScenario.AddAlarm(alarmToSet);
        }
Exemple #8
0
        private static void CreateReturnToDutyAlarm(ProtoCrewMember crew, bool StockAlarmEnabled)
        {
            string alarmTxt = $"Return to duty - {crew.name}";

            if (KACWrapper.APIReady)
            {
                KACWrapper.KAC.CreateAlarm(KACWrapper.KACAPI.AlarmTypeEnum.Crew, alarmTxt, crew.inactiveTimeEnd);
            }
            if (StockAlarmEnabled)
            {
                AlarmTypeRaw alarmToSet = new AlarmTypeRaw
                {
                    title       = alarmTxt,
                    description = alarmTxt,
                    actions     =
                    {
                        warp    = AlarmActions.WarpEnum.KillWarp,
                        message = AlarmActions.MessageEnum.Yes
                    },
                    ut = crew.inactiveTimeEnd
                };
                AlarmClockScenario.AddAlarm(alarmToSet);
            }
        }
        public static Mission CreateTransport(Vessel target, MissionProfile profile, List <PayloadResource> resources, List <CrewTransferOrder> crewTransfers)
        {
            var mission = new Mission
            {
                missionType    = MissionType.TRANSPORT,
                profileName    = profile.profileName,
                eta            = Planetarium.GetUniversalTime() + profile.missionDuration,
                targetVesselId = target.protoVessel.vesselID
            };

            string transport = "";

            if (resources != null)
            {
                mission.resourcesToDeliver = new Dictionary <string, double>();
                foreach (var resource in resources)
                {
                    if (resource.amount > 0)
                    {
                        mission.resourcesToDeliver.Add(resource.name, resource.amount);
                        if (transport == "")
                        {
                            transport = resource.name;
                        }
                        else
                        {
                            transport += ", " + resource.name;
                        }
                    }
                }
            }
            if (crewTransfers != null)
            {
                foreach (var crewTransfer in crewTransfers)
                {
                    switch (crewTransfer.direction)
                    {
                    case CrewTransferOrder.CrewTransferDirection.DELIVER:
                        if (mission.crewToDeliver == null)
                        {
                            mission.crewToDeliver = new List <string>();
                        }

                        mission.crewToDeliver.Add(crewTransfer.kerbalName);

                        if (transport == "")
                        {
                            transport = crewTransfer.kerbalName;
                        }
                        else
                        {
                            transport += ", " + crewTransfer.kerbalName;
                        }

                        break;

                    case CrewTransferOrder.CrewTransferDirection.COLLECT:

                        if (mission.crewToCollect == null)
                        {
                            mission.crewToCollect = new List <string>();
                        }

                        mission.crewToCollect.Add(crewTransfer.kerbalName);

                        //mission.crewToDeliver.Add(crewTransfer.kerbalName);

                        if (transport == "")
                        {
                            transport = crewTransfer.kerbalName;
                        }
                        else
                        {
                            transport += ", " + crewTransfer.kerbalName;
                        }

                        break;

                    default:
                        throw new Exception("unknown transfer-direction: '" + crewTransfer.direction.ToString() + "'");
                    }
                }
            }

            if (KACWrapper.APIReady && MissionController.useKACifAvailable)
            {
                var KACalarmID = KACWrapper.KAC.CreateAlarm(
                    KACWrapper.KACAPI.AlarmTypeEnum.Raw,
                    "Transport",
                    mission.eta
                    );
                var a = KACWrapper.KAC.Alarms.FirstOrDefault(z => z.ID == KACalarmID);
                if (a != null)
                {
                    a.AlarmAction = KACWrapper.KACAPI.AlarmActionEnum.KillWarp;
                    a.AlarmMargin = 0;
                    //a.VesselID = FlightGlobals.ActiveVessel.id.ToString();
                    a.Notes = "Transport " + transport + " to " + target.protoVessel.GetDisplayName() + " by Kerbal Space Transport System";
                }
            }
            if (MissionController.useStockAlarmClock)
            {
                AlarmTypeRaw alarmToSet = new AlarmTypeRaw
                {
                    title       = "KSTS Transport",
                    description = "Transport " + transport + " to " + target.protoVessel.GetDisplayName() + " by Kerbal Space Transport System",
                    actions     =
                    {
                        warp    = AlarmActions.WarpEnum.KillWarp,
                        message = AlarmActions.MessageEnum.Yes
                    },
                    ut = mission.eta
                };
                AlarmClockScenario.AddAlarm(alarmToSet);
            }

            return(mission);
        }
Exemple #10
0
        /// <summary>
        /// Create Alarms on GUI and write ID into alarm
        /// </summary>
        public void CreateonGUI()
        {
            KVASSPlanSettings settings = HighLogic.CurrentGame.Parameters.CustomParams <KVASSPlanSettings>();

            if (settings.KACEnable)
            {
                if (KACWrapper.APIReady)
                {
                    ID = KACWrapper.KAC.CreateAlarm(
                        KACWrapper.KACAPI.AlarmTypeEnum.Raw,
                        Title,
                        UT);


                    if (!String.IsNullOrEmpty(ID))
                    {
                        // a.Remaining doesn't work in the VAB/SPH

                        var alarm = KACWrapper.KAC.Alarms.First(z => z.ID == ID);
                        alarm.Notes       = Description;
                        alarm.AlarmMargin = 0;

                        if (Warp == WarpType.KillWarp)
                        {
                            alarm.AlarmAction = KACWrapper.KACAPI.AlarmActionEnum.KillWarpOnly;
                        }
                        else
                        {
                            alarm.AlarmAction = KACWrapper.KACAPI.AlarmActionEnum.DoNothing;
                        }
                    }
                }
            }
            else
            {
                AlarmTypeRaw alarm = new AlarmTypeRaw();
                alarm.title       = Title;
                alarm.ut          = UT;
                alarm.description = Description;
                alarm.timeEntry   = Time;

                //Log(String.Format("CreateonGUI ACA title:{0}, UT:{1:F0}, timeEntry:{2:F0}", alarm.title, alarm.ut, alarm.timeEntry));

                if (settings.KillTimeWarp)
                {
                    alarm.actions.warp = AlarmActions.WarpEnum.KillWarp;
                }
                else
                {
                    alarm.actions.warp = AlarmActions.WarpEnum.DoNothing;
                }

                alarm.actions.message = AlarmActions.MessageEnum.No;

                if (alarm.CanSetAlarm(KSP.UI.AlarmUIDisplayMode.Add))
                {
                    AlarmClockScenario.AddAlarm(alarm);
                    alarm.OnScenarioUpdate();
                    alarm.UIInputPanelUpdate();

                    var enumerator = AlarmClockScenario.Instance.alarms.GetListEnumerator();
                    while (enumerator.MoveNext())
                    {
                        //Log("id: {0}, {1}, ut: {2:F0}, TimeToAlarm: {3:F0}, timeEntry: {4:F0}",
                        //    enumerator.Current.Id, enumerator.Current.title, enumerator.Current.ut, enumerator.Current.TimeToAlarm,
                        //(enumerator.Current as AlarmTypeRaw).timeEntry);

                        if (enumerator.Current.ut == UT && enumerator.Current.title == Title)
                        {
                            ID = enumerator.Current.Id.ToString();
                        }
                    }
                }
            }
        }