internal void ComputeHome(ProtoCrewMember c, LifeSupportStatus cls) { var crewHomeString = "indefinite"; var lblHome = "6FFF00"; var useHabPenalties = LifeSupportManager.GetNoHomeEffect(c.name) > 0; if (useHabPenalties) { var homeTimeLeft = cls.MaxOffKerbinTime - Planetarium.GetUniversalTime(); UpdateEarliestExpiration(homeTimeLeft); var isScout = c.HasEffect("ExplorerSkill") && homeTimeLeft >= LifeSupportScenario.Instance.settings.GetSettings().ScoutHabTime; var isPermaHab = homeTimeLeft >= LifeSupportScenario.Instance.settings.GetSettings().PermaHabTime; if (isScout || isPermaHab) { crewHomeString = "indefinite"; } else if (homeTimeLeft < 0) { lblHome = "FF5E5E"; crewHomeString = "expired"; } else { crewHomeString = LifeSupportUtilities.SmartDurationDisplay(homeTimeLeft); var secondsPerDay = LifeSupportUtilities.SecondsPerDay(); if (homeTimeLeft < secondsPerDay * 30) //15 days { lblHome = "FFE100"; } if (homeTimeLeft < secondsPerDay * 15) { lblHome = "FFAE00"; } } } HomeLabel = String.Format("<color=#{0}>{1}</color>", lblHome, crewHomeString); }
private LifeSupportVesselDisplayStat GetVesselStats(VesselSupplyStatus vsl) { var secondsPerDay = LifeSupportUtilities.SecondsPerDay(); var useHabPenalties = (LifeSupportScenario.Instance.settings.GetSettings().NoHomeEffectVets + LifeSupportScenario.Instance.settings.GetSettings().NoHomeEffect > 0); Vessel thisVessel = FlightGlobals.Vessels.Find(v => v.id.ToString() == vsl.VesselId); var vstat = new LifeSupportVesselDisplayStat(); bool isOldData = Planetarium.GetUniversalTime() - vsl.LastUpdate > 2; var lblColor = isOldData ? "C4C4C4" : "ACFF40"; vstat.VesselName = String.Format("<color=#{0}>{1}</color>", lblColor, vsl.VesselName); vstat.VesselId = vsl.VesselId; vstat.LastUpdate = vsl.LastUpdate; var situationString = GetSituationString(thisVessel); double suppliesPerSecond = LifeSupportScenario.Instance.settings.GetSettings().SupplyAmount *Convert.ToDouble(vsl.NumCrew) * vsl.RecyclerMultiplier; var suppliesPerDay = secondsPerDay * suppliesPerSecond; var supAmount = GetResourceInVessel(thisVessel, "Supplies"); var suppliesTimeLeft = (suppliesPerSecond > ResourceUtilities.FLOAT_TOLERANCE) ? (supAmount / suppliesPerSecond) : 0; if (supAmount == 0) { var suppliesConsumedSinceLastCheck = suppliesPerSecond * (Planetarium.GetUniversalTime() - vsl.LastFeeding); supAmount = Math.Max(0, (vsl.SuppliesLeft * suppliesPerSecond) - suppliesConsumedSinceLastCheck); suppliesTimeLeft = (vsl.SuppliesLeft - (Planetarium.GetUniversalTime() - vsl.LastFeeding)); } double ecPerSecond = LifeSupportScenario.Instance.settings.GetSettings().ECAmount *Convert.ToDouble(vsl.NumCrew); var ecAmount = GetResourceInVessel(thisVessel, "ElectricCharge"); var ecTimeLeft = (ecPerSecond > ResourceUtilities.FLOAT_TOLERANCE) ? (ecAmount / ecPerSecond) : 0; if (ecAmount == 0) { var ecConsumedSinceLastCheck = ecPerSecond * (Planetarium.GetUniversalTime() - vsl.LastECCheck); ecAmount = Math.Max(0, (vsl.ECLeft * ecPerSecond) - ecConsumedSinceLastCheck); ecTimeLeft = (vsl.ECLeft - (Planetarium.GetUniversalTime() - vsl.LastECCheck)); } int numSharedHabVessels = 0; var habTime = LifeSupportManager.GetTotalHabTime(vsl, thisVessel, out numSharedHabVessels); var habString = "indefinite"; if (useHabPenalties) { habString = LifeSupportUtilities.DurationDisplay(habTime, LifeSupportUtilities.TimeFormatLength.Short); } vstat.SummaryLabel = String.Format( "<color=#3DB1FF>{0}/{1} - </color><color=#9EE4FF>{2:0}</color><color=#3DB1FF> supplies (</color><color=#9EE4FF>{3:0.0}</color><color=#3DB1FF>/day) hab for </color><color=#9EE4FF>{4}</color>" , thisVessel.mainBody.bodyName , situationString , supAmount , suppliesPerDay , habString); vstat.crew = new List <LifeSupportCrewDisplayStat>(); if (useHabPenalties) { vstat.SummaryLabel += String.Format( "<color=#3DB1FF> (</color><color=#9EE4FF>{0}</color><color=#3DB1FF> {1} shared within </color><color=#9EE4FF>{2}</color><color=#3DB1FF>m)</color>", isOldData ? "?" : numSharedHabVessels.ToString(), numSharedHabVessels == 1 ? "vessel" : "vessels", LifeSupportScenario.Instance.settings.GetSettings().HabRange); } foreach (var c in thisVessel.GetVesselCrew()) { var crewStat = GetCrewStat(c, thisVessel, suppliesTimeLeft, ecTimeLeft, ecAmount, habTime); vstat.crew.Add(crewStat); } vstat.crew = vstat.crew.OrderBy(crewStat => crewStat.EarliestExpiration).ToList(); if (vstat.crew.Any()) { vstat.EarliestExpiration = vstat.crew.First().EarliestExpiration; } return(vstat); }