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