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); } }
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); }
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)); }
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)); }
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); }
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); }
/// <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(); } } } } }