コード例 #1
0
ファイル: WindowRoster.cs プロジェクト: h0yer/ShipManifest
 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"
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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);
                        }
                    }
                }
            }
        }