private static string GetFrozenKerbalDetails(ProtoCrewMember kerbal) { try { string rosterDetails = ""; if (!DFWrapper.APIReady) { DFWrapper.InitDFWrapper(); } if (DFWrapper.APIReady) { if (DFWrapper.DeepFreezeAPI.FrozenKerbals.ContainsKey(kerbal.name)) // "Frozen" { rosterDetails = string.Format("{0} - {1}", SMUtils.Localize("#smloc_roster_015"), DFWrapper.DeepFreezeAPI.FrozenKerbals[kerbal.name].vesselName.Replace("(unloaded)", "")); } else { rosterDetails = SMUtils.Localize("#smloc_roster_015"); // "Frozen"; } } return(rosterDetails); } catch (Exception ex) { if (!SMAddon.FrameErrTripped) { SMUtils.LogMessage(string.Format(" in GetRosterList().\r\nError: {0}", ex), SMUtils.LogType.Error, true); } return(string.Format("{0}:", SMUtils.Localize("#smloc_error_001"))); // "Display Error" } }
internal static Dictionary <string, DFWrapper.KerbalInfo> GetFrozenKerbals() { if (!Api.InstalledMods.IsDfInstalled) { return(new Dictionary <string, DFWrapper.KerbalInfo>()); } if (!DFWrapper.InstanceExists) { DFWrapper.InitDFWrapper(); } if (!DFWrapper.InstanceExists || !DFWrapper.APIReady) { return(new Dictionary <string, DFWrapper.KerbalInfo>()); } var idf = DFWrapper.DeepFreezeAPI.FrozenKerbals; return(idf); }
public override void OnAwake() { Utilities.Log("OnAwake in " + HighLogic.LoadedScene); base.OnAwake(); InterestedVessels = new DictionaryValueList <ProtoVessel, InterestedVessel>(); InterestingModules = new DictionaryValueList <string, ModuleType>(); InterestingModules.Add("ModuleDeployableSolarPanel", ModuleType.Producer); InterestingModules.Add("ModuleGenerator", ModuleType.Producer); InterestingModules.Add("KopernicusSolarPanel", ModuleType.Producer); InterestingModules.Add("FissionGenerator", ModuleType.Producer); InterestingModules.Add("TacGenericConverter", ModuleType.Both); InterestingModules.Add("ModuleResourceConverter", ModuleType.Both); InterestingModules.Add("DeepFreezer", ModuleType.Consumer); BackgroundProcessingInstalled = Utilities.IsModInstalled("BackgroundProcessing"); DeepFreezeInstalled = RSTUtils.Utilities.IsModInstalled("DeepFreeze"); GameEvents.onGamePause.Add(onGamePause); GameEvents.onGameUnpause.Add(onGameUnPause); GameEvents.OnGameSettingsApplied.Add(ApplySettings); if (BackgroundProcessingInstalled) { if (!loggedBackgroundProcessing) { Utilities.Log("BackgroundProcessing Mod installed. BackgroundResources not producing unloaded vessel resources.\nIt is recommended you remove BackgroundProcessing mod."); loggedBackgroundProcessing = true; } } if (FlightDriver.Pause) { onGamePause(); } if (DeepFreezeInstalled) { DFWrapper.InitDFWrapper(); } bgrSettings = new BGRSettings(); Utilities.Log("BackgroundProcessed Awake"); }
void FixedUpdate() { if (Time.timeSinceLevelLoad < 1.0f || loadingNewScene) { return; } // If DeepFreeze is installed do DeepFreeze processing to remove frozen kerbals from our list. if (IsDFInstalled) { if (!DFWrapper.InstanceExists) // Check if DFWrapper has been initialized or not. If not try to initialize. { DFWrapper.InitDFWrapper(); } if (DFWrapper.APIReady) { Dictionary <string, DFWrapper.KerbalInfo> DFFrozenKerbals = new Dictionary <string, DFWrapper.KerbalInfo>(); //Get the DeepFreeze Dictionary of all Frozen Kerbals in the current Game. DFFrozenKerbals = DFWrapper.DeepFreezeAPI.FrozenKerbals; //Remove any Frozen Kerbals from TAC LS tracking. RemoveFrozenKerbals(DFFrozenKerbals); } } double currentTime = Planetarium.GetUniversalTime(); var allVessels = FlightGlobals.Vessels; var knownVessels = gameSettings.knownVessels; var vesselsToDelete = new List <Guid>(); foreach (var entry in knownVessels) { Guid vesselId = entry.Key; VesselInfo vesselInfo = entry.Value; Vessel vessel = allVessels.Find(v => v.id == vesselId); if (vessel == null) { this.Log("Deleting vessel " + vesselInfo.vesselName + " - vessel does not exist anymore"); vesselsToDelete.Add(vesselId); var crewToDelete = gameSettings.knownCrew.Where(e => e.Value.vesselId == vesselId).Select(e => e.Key).ToList(); foreach (String name in crewToDelete) { this.Log("Deleting crew member: " + name); gameSettings.knownCrew.Remove(name); } continue; } if (vessel.loaded) { int crewCapacity = UpdateVesselInfo(vesselInfo, vessel); if (crewCapacity == 0) { this.Log("Deleting vessel " + vesselInfo.vesselName + " - no crew parts anymore"); vesselsToDelete.Add(vesselId); continue; } ConsumeResources(currentTime, vessel, vesselInfo); if (vesselInfo.numCrew > 0) { ShowWarnings(vessel.vesselName, vesselInfo.remainingElectricity, vesselInfo.maxElectricity, vesselInfo.estimatedElectricityConsumptionRate, globalSettings.Electricity, ref vesselInfo.electricityStatus); } } if (vesselInfo.numCrew > 0) { double foodRate = globalSettings.FoodConsumptionRate * vesselInfo.numCrew; vesselInfo.estimatedTimeFoodDepleted = vesselInfo.lastFood + (vesselInfo.remainingFood / foodRate); double estimatedFood = vesselInfo.remainingFood - ((currentTime - vesselInfo.lastFood) * foodRate); ShowWarnings(vesselInfo.vesselName, estimatedFood, vesselInfo.maxFood, foodRate, globalSettings.Food, ref vesselInfo.foodStatus); double waterRate = globalSettings.WaterConsumptionRate * vesselInfo.numCrew; vesselInfo.estimatedTimeWaterDepleted = vesselInfo.lastWater + (vesselInfo.remainingWater / waterRate); double estimatedWater = vesselInfo.remainingWater - ((currentTime - vesselInfo.lastWater) * waterRate); ShowWarnings(vesselInfo.vesselName, estimatedWater, vesselInfo.maxWater, waterRate, globalSettings.Water, ref vesselInfo.waterStatus); double oxygenRate = globalSettings.OxygenConsumptionRate * vesselInfo.numCrew; vesselInfo.estimatedTimeOxygenDepleted = vesselInfo.lastOxygen + (vesselInfo.remainingOxygen / oxygenRate); double estimatedOxygen = vesselInfo.remainingOxygen - ((currentTime - vesselInfo.lastOxygen) * oxygenRate); ShowWarnings(vesselInfo.vesselName, estimatedOxygen, vesselInfo.maxOxygen, oxygenRate, globalSettings.Oxygen, ref vesselInfo.oxygenStatus); vesselInfo.estimatedTimeElectricityDepleted = vesselInfo.lastElectricity + (vesselInfo.remainingElectricity / vesselInfo.estimatedElectricityConsumptionRate); } } vesselsToDelete.ForEach(id => knownVessels.Remove(id)); foreach (Vessel vessel in allVessels.Where(v => v.loaded)) { if (!knownVessels.ContainsKey(vessel.id) && vessel.parts.Any(p => p.protoModuleCrew.Count > 0) && IsLaunched(vessel)) { this.Log("New vessel: " + vessel.vesselName + " (" + vessel.id + ")"); var knownCrew = gameSettings.knownCrew; if (vessel.isEVA) { ProtoCrewMember crewMember = vessel.GetVesselCrew().FirstOrDefault(); if (crewMember != null && !knownCrew.ContainsKey(crewMember.name)) { FillRescueEvaSuit(vessel); } } VesselInfo vesselInfo = new VesselInfo(vessel.vesselName, currentTime); knownVessels[vessel.id] = vesselInfo; UpdateVesselInfo(vesselInfo, vessel); foreach (ProtoCrewMember crewMember in vessel.GetVesselCrew()) { if (knownCrew.ContainsKey(crewMember.name)) { CrewMemberInfo crewMemberInfo = knownCrew[crewMember.name]; crewMemberInfo.vesselId = vessel.id; crewMemberInfo.vesselName = vessel.vesselName; } else { this.Log("New crew member: " + crewMember.name); knownCrew[crewMember.name] = new CrewMemberInfo(crewMember.name, vessel.vesselName, vessel.id, currentTime); } } } } }