예제 #1
0
        void UpdateVesselInMasterStatusDisplay(Vessel vessel)
        {
            if (!masterStatus.ContainsKey(vessel.id))
            {
                return;
            }

            var allPartsStatus = masterStatus[vessel.id].allPartsStatus;

            for (var i = 0; i < allPartsStatus.Count; i++)
            {
                var             status = allPartsStatus[i];
                ITestFlightCore core   = status.flightCore;

                // Update the part status
                status.partStatus = core.GetPartStatus();
                status.failures   = core.GetActiveFailures();
                status.flightData = core.GetFlightData();
                double failureRate = core.GetBaseFailureRate();
                MomentaryFailureRate momentaryFailureRate = core.GetWorstMomentaryFailureRate();
                if (momentaryFailureRate.valid && momentaryFailureRate.failureRate > failureRate)
                {
                    failureRate = momentaryFailureRate.failureRate;
                }
                status.momentaryFailureRate = failureRate;
                status.mtbfString           = core.FailureRateToMTBFString(failureRate, TestFlightUtil.MTBFUnits.SECONDS, 999);
                status.runningTime          = TestFlightUtil.FormatTime(core.GetBurnTime(), TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, false);

                allPartsStatus[i] = status;
            }
        }
예제 #2
0
        void AddVesselToMasterStatusDisplay(Vessel vessel)
        {
            MasterStatusItem masterStatusItem = new MasterStatusItem();

            masterStatusItem.vesselID       = vessel.id;
            masterStatusItem.vesselName     = vessel.GetName();
            masterStatusItem.allPartsStatus = new List <PartStatus>();
            masterStatus.Add(vessel.id, masterStatusItem);

            var parts = vessel.Parts;

            for (var j = 0; j < parts.Count; j++)
            {
                var partCores = parts[j].gameObject.GetComponents <TestFlightCore>();
                foreach (var core in partCores)
                {
                    if (!core.TestFlightEnabled)
                    {
                        continue;
                    }

                    PartStatus partStatus = new PartStatus();
                    partStatus.lastSeen   = currentUTC;
                    partStatus.flightCore = core;
                    partStatus.partName   = core.Title;
                    partStatus.partID     = vessel.parts[j].flightID;
                    partStatus.partStatus = core.GetPartStatus();
                    // get any failures
                    partStatus.failures   = core.GetActiveFailures();
                    partStatus.flightData = core.GetFlightData();
                    double failureRate = core.GetBaseFailureRate();
                    MomentaryFailureRate momentaryFailureRate = core.GetWorstMomentaryFailureRate();
                    if (momentaryFailureRate.valid && momentaryFailureRate.failureRate > failureRate)
                    {
                        failureRate = momentaryFailureRate.failureRate;
                    }
                    partStatus.momentaryFailureRate = failureRate;
                    partStatus.acknowledged         = false;
                    partStatus.mtbfString           = core.FailureRateToMTBFString(failureRate, TestFlightUtil.MTBFUnits.SECONDS, 999);
                    partStatus.runningTime          = TestFlightUtil.FormatTime(core.GetBurnTime(), TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, false);
                    masterStatus[vessel.id].allPartsStatus.Add(partStatus);
                }
            }
        }
예제 #3
0
        public override List <string> GetTestFlightInfo()
        {
            List <string> infoStrings = new List <string>();

            infoStrings.Add("<b>Engine Cycle</b>");
            infoStrings.Add(String.Format("<b>Rated Burn Time</b>: {0}", TestFlightUtil.FormatTime(ratedBurnTime, TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, true)));
            if (idleDecayRate > 0)
            {
                infoStrings.Add(String.Format("Cooling. Burn time decays {0:F2} per sec second engine is off", idleDecayRate));
            }
            float minThrust, maxThrust;

            thrustModifier.FindMinMaxValue(out minThrust, out maxThrust);
            if (minThrust != maxThrust)
            {
                infoStrings.Add(String.Format("Engine thrust affects burn time"));
                infoStrings.Add(String.Format("<b>Min Thrust/b> {0:F2}kn, {1:F2}x", thrustModifier.minTime, minThrust));
                infoStrings.Add(String.Format("<b>Max Thrust/b> {0:F2}kn, {1:F2}x", thrustModifier.maxTime, maxThrust));
            }
            return(infoStrings);
        }
예제 #4
0
        public void Startup()
        {
            burnTimes = new Dictionary<string, float>();
            foreach (AvailablePart part in PartLoader.LoadedPartsList)
            {
                // cache up the burn times first
                List<ITestFlightReliability> engineCycles = new List<ITestFlightReliability>();
                burnTimes.Clear();
                foreach (PartModule pm in part.partPrefab.Modules)
                {
                    ITestFlightReliability reliabilityModule = pm as ITestFlightReliability;
                    if (reliabilityModule != null)
                        engineCycles.Add(reliabilityModule);
                }
                if (engineCycles.Count <= 0)
                    continue;

                foreach (ITestFlightReliability rm in engineCycles)
                {
                    TestFlightReliability_EngineCycle engineCycle = rm as TestFlightReliability_EngineCycle;
                    if (engineCycle != null)
                    {
                        if (engineCycle.engineConfig != "")
                        {
                            burnTimes[engineCycle.engineConfig] = engineCycle.ratedBurnTime;
                        }
                    }
                }
                // now add that info to the RF configs
                List<ModuleEngineConfigs> allConfigs = new List<ModuleEngineConfigs>();
                allConfigs.AddRange(part.partPrefab.Modules.GetModules<ModuleEngineConfigs>());
                if (allConfigs.Count <= 0)
                    continue;

                foreach (ModuleEngineConfigs mec in allConfigs)
                {
                    List<ConfigNode> configs = mec.configs;
                    foreach (ConfigNode node in configs)
                    {
                        if (node.HasValue("name"))
                        {
                            string configName = node.GetValue("name");
                            if (burnTimes.ContainsKey(configName))
                            {
                                if (node.HasValue("description"))
                                {
                                    string description = node.GetValue("description");
                                    description += String.Format("\n" + "    " + <b>Rated Burn Time</b>: {0}", TestFlightUtil.FormatTime(burnTimes[configName], TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, true));
                                    node.SetValue("description", description, true);
                                }
                                else
                                {
                                    node.AddValue("description", String.Format("\nRated Burn Time {0}", TestFlightUtil.FormatTime(burnTimes[configName], TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, true)));
                                }
                            }
                        }
                    }
                    mec.SetConfiguration();
                }
            }
        }
예제 #5
0
        public void Startup()
        {
            var burnTimes = new Dictionary <string, float>();

            foreach (AvailablePart part in PartLoader.LoadedPartsList)
            {
                // cache up the burn times first
                burnTimes.Clear();
                var engineCycles = part.partPrefab.Modules.GetModules <TestFlightReliability_EngineCycle>();
                if (engineCycles.Count <= 0)
                {
                    continue;
                }

                foreach (var engineCycle in engineCycles)
                {
                    if (engineCycle.engineConfig != "")
                    {
                        burnTimes[engineCycle.engineConfig] = engineCycle.ratedBurnTime;
                    }
                }
                // now add that info to the RF configs
                var allConfigs = part.partPrefab.Modules.GetModules <ModuleEngineConfigs>();
                if (allConfigs.Count <= 0)
                {
                    continue;
                }

                foreach (ModuleEngineConfigs mec in allConfigs)
                {
                    List <ConfigNode> configs = mec.configs;
                    foreach (ConfigNode node in configs)
                    {
                        if (node.HasValue("name"))
                        {
                            string configName = node.GetValue("name");
                            if (burnTimes.ContainsKey(configName))
                            {
                                if (node.HasValue("tfRatedBurnTime"))
                                {
                                    string description = node.GetValue("tfRatedBurnTime");
                                    description += String.Format("\n" + "    " + "<b>Rated Burn Time</b>: {0}", TestFlightUtil.FormatTime(burnTimes[configName], TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, true));
                                    node.SetValue("tfRatedBurnTime", description, true);
                                }
                                else
                                {
                                    node.AddValue("tfRatedBurnTime", String.Format("\n<b>Rated Burn Time</b>: {0}", TestFlightUtil.FormatTime(burnTimes[configName], TestFlightUtil.TIMEFORMAT.SHORT_IDENTIFIER, true)));
                                }
                            }
                        }
                    }
                    mec.SetConfiguration();
                }
            }
        }