/// <summary> /// Initializes the available mass by element display. /// </summary> /// <param name="panel">The parent info panel.</param> /// <param name="harvestable">The POI to be harvested.</param> /// <param name="details">The panel to refresh.</param> private void InitElements(SpacePOISimpleInfoPanel panel, HarvestablePOIStates. Instance harvestable, CollapsibleDetailContentPanel details) { var elementRows = panel.elementRows; var existingRows = DictionaryPool <Tag, GameObject, SpacePOISimpleInfoPanel> . Allocate(); foreach (var pair in panel.elementRows) { existingRows[pair.Key] = pair.Value; } if (harvestable != null) { // Shared dictionary, does not allocate var sortedElements = ListPool <ElementWeight, SpacePOISimpleInfoPanel> . Allocate(); sortedElements.AddRange(harvestable.configuration.GetElementsWithWeights()); sortedElements.Sort(SortElementsByMassComparer.Instance); int n = sortedElements.Count; for (int i = 0; i < n; i++) { var pair = sortedElements[i]; SimHashes element = pair.Key; Tag elementTag = new Tag(element.ToString()); if (!elementRows.TryGetValue(elementTag, out GameObject row)) { row = Util.KInstantiateUI(panel.simpleInfoRoot.iconLabelRow, details. Content.gameObject, true); elementRows[elementTag] = row; } else { row.SetActive(true); } if (row.TryGetComponent(out HierarchyReferences hr)) { var uiSprite = Def.GetUISprite(elementTag, "ui", false); var icon = hr.GetReference <Image>("Icon"); if (uiSprite != null) { icon.sprite = uiSprite.first; icon.color = uiSprite.second; } hr.GetReference <LocText>("NameLabel").SetText(ElementLoader. FindElementByHash(element).name); hr.GetReference <LocText>("ValueLabel").alignment = TMPro. TextAlignmentOptions.MidlineRight; } existingRows.Remove(elementTag); } sortedElements.Recycle(); } // Turn off all rows that were not turned on foreach (var pair in existingRows) { pair.Value.SetActive(false); } existingRows.Recycle(); }
/// <summary> /// Applied before CreateImmuneInfo runs. /// </summary> internal static bool Prefix(GameObject ___selectedTarget, ref bool __result, CollapsibleDetailContentPanel ___immuneSystemPanel) { bool ok = CreateImmuneInfo(___immuneSystemPanel, ___selectedTarget); __result = ok; return(!ok); }
private static void InitTraitsPanel(SimpleInfoScreen instance) { if (TraitsPanel == null || LastParent != instance.gameObject) { TraitsPanel = Util.KInstantiateUI <CollapsibleDetailContentPanel>(ScreenPrefabs.Instance.CollapsableContentPanel, instance.gameObject); TraitsDrawer = new DetailsPanelDrawer(instance.attributesLabelTemplate, TraitsPanel.Content.gameObject); LastParent = instance.gameObject; } }
internal static void Postfix(GameObject ___selectedTarget, CollapsibleDetailContentPanel ___immuneSystemPanel, bool __result) { if (__result) { AttributeInstance susceptibility = Db.Get().Attributes.Get(HeartAttackMonitor.ATTRIBUTE_ID).Lookup(___selectedTarget); if (susceptibility != null) { ___immuneSystemPanel.SetLabel(HeartAttackMonitor.ATTRIBUTE_ID, susceptibility.modifier.Name + ": " + GameUtil.GetFormattedPercent(100f * Mathf.Clamp01(susceptibility.GetTotalValue())), susceptibility.GetAttributeValueTooltip()); } } }
/// <summary> /// Refreshes the space POI info panel. /// </summary> /// <param name="panel">The parent info panel.</param> /// <param name="details">The panel to refresh.</param> /// <param name="target">The currently selected object.</param> public void Refresh(SpacePOISimpleInfoPanel panel, CollapsibleDetailContentPanel details, GameObject target) { bool active = false; if (target != null) { bool changed = lastSelection.lastTarget != target; if (changed) { lastSelection = new LastSelectionDetails(target); if (panel.massHeader == null) { Init(panel, details); } } var asteroidField = lastSelection.asteroidField; var artifact = lastSelection.artifact; var harvestable = lastSelection.harvestable; if (asteroidField != null || artifact != null) { if (changed) { InitElements(panel, harvestable, details); panel.artifactsSpacer.transform.SetAsLastSibling(); panel.artifactRow.transform.SetAsLastSibling(); } if (harvestable != null && massLabel != null) { RefreshMassHeader(harvestable); } RefreshElements(panel, harvestable); if (artifact != null) { RefreshArtifacts(panel, artifact); } if (!wasActive) { details.gameObject.SetActive(true); } active = true; wasActive = true; } } if (!active && wasActive) { details.gameObject.SetActive(false); wasActive = false; } }
protected override void OnPrefabInit() { base.OnPrefabInit(); diseaseSourcePanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false).GetComponent <CollapsibleDetailContentPanel>(); diseaseSourcePanel.SetTitle(UI.DETAILTABS.DISEASE.DISEASE_SOURCE); immuneSystemPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false).GetComponent <CollapsibleDetailContentPanel>(); immuneSystemPanel.SetTitle(UI.DETAILTABS.DISEASE.IMMUNE_SYSTEM); currentGermsPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false).GetComponent <CollapsibleDetailContentPanel>(); currentGermsPanel.SetTitle(UI.DETAILTABS.DISEASE.CURRENT_GERMS); infoPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false).GetComponent <CollapsibleDetailContentPanel>(); infoPanel.SetTitle(UI.DETAILTABS.DISEASE.GERMS_INFO); infectionPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false).GetComponent <CollapsibleDetailContentPanel>(); infectionPanel.SetTitle(UI.DETAILTABS.DISEASE.INFECTION_INFO); Subscribe(-1514841199, OnRefreshDataDelegate); }
private void Refresh() { if ((Object)selectedTarget == (Object)null) { return; } List <Descriptor> allDescriptors = GameUtil.GetAllDescriptors(selectedTarget, true); Sicknesses sicknesses = selectedTarget.GetSicknesses(); if (sicknesses != null) { for (int i = 0; i < sicknesses.Count; i++) { allDescriptors.AddRange(sicknesses[i].GetDescriptors()); } } allDescriptors = allDescriptors.FindAll((Descriptor e) => e.type == Descriptor.DescriptorType.DiseaseSource); if (allDescriptors.Count > 0) { for (int j = 0; j < allDescriptors.Count; j++) { CollapsibleDetailContentPanel collapsibleDetailContentPanel = diseaseSourcePanel; string id = "source_" + j.ToString(); Descriptor descriptor = allDescriptors[j]; string text = descriptor.text; Descriptor descriptor2 = allDescriptors[j]; collapsibleDetailContentPanel.SetLabel(id, text, descriptor2.tooltipText); } } if (!CreateImmuneInfo()) { goto IL_00ee; } goto IL_00ee; IL_00ee: if (!CreateDiseaseInfo()) { currentGermsPanel.SetTitle(UI.DETAILTABS.DISEASE.NO_CURRENT_GERMS); currentGermsPanel.SetLabel("nodisease", UI.DETAILTABS.DISEASE.DETAILS.NODISEASE, UI.DETAILTABS.DISEASE.DETAILS.NODISEASE_TOOLTIP); } diseaseSourcePanel.Commit(); immuneSystemPanel.Commit(); currentGermsPanel.Commit(); infoPanel.Commit(); infectionPanel.Commit(); }
public static void Prefix(CollapsibleDetailContentPanel ___immuneSystemPanel, GameObject ___selectedTarget) { if (___selectedTarget == null || ___immuneSystemPanel == null) { return; } var host = ___selectedTarget.GetComponent <GermHost>(); if (host == null) { return; } host.germList.RemoveAll((e) => e == null); host.germList.RemoveAll((e) => e.Id == null); foreach (var germs in host.germList) { if (germs == null) { Debug.Log("germs = null"); continue; } if (germs.Amount < 0.5) { continue; } ___immuneSystemPanel.SetTitle("GERM INFO"); if (Db.Get().Diseases.GetIndex((HashedString)germs.Id) == byte.MaxValue) { Debug.Log("germs.Id = byte.MaxValue"); host.germList.Remove(germs); return; } var germName = Db.Get().Diseases[Db.Get().Diseases.GetIndex((HashedString)germs.Id)].Name; ___immuneSystemPanel.SetLabel("germs_" + germName, "" + (int)germs.Amount + " " + germName + " germs ", "So many germs!"); } }
/// <summary> /// Performs one-time initialization. /// </summary> /// <param name="panel">The parent info panel.</param> /// <param name="details">The panel to initialize.</param> private void Init(SpacePOISimpleInfoPanel panel, CollapsibleDetailContentPanel details) { var root = panel.simpleInfoRoot; var parent = details.Content.gameObject; var header = Util.KInstantiateUI(root.iconLabelRow, parent, true); panel.massHeader = header; details.SetTitle(STRINGS.UI.CLUSTERMAP.POI.TITLE); // Set the icon, name and alignment once if (header.TryGetComponent(out HierarchyReferences hr)) { var sprite = Assets.GetSprite("icon_asteroid_type"); if (sprite != null) { hr.GetReference <Image>("Icon").sprite = sprite; } hr.GetReference <LocText>("NameLabel").SetText(STRINGS.UI.CLUSTERMAP.POI. MASS_REMAINING); massLabel = hr.GetReference <LocText>("ValueLabel"); massLabel.alignment = TMPro.TextAlignmentOptions.MidlineRight; } else { massLabel = null; } if (panel.artifactsSpacer == null) { var ar = Util.KInstantiateUI(root.iconLabelRow, parent, true); panel.artifactsSpacer = Util.KInstantiateUI(root.spacerRow, parent, true); panel.artifactRow = ar; if (ar.TryGetComponent(out hr)) { var icon = hr.GetReference <Image>("Icon"); // Triggers an Init if necessary hr.GetReference <LocText>("NameLabel").SetText(STRINGS.UI.CLUSTERMAP.POI. ARTIFACTS); hr.GetReference <LocText>("ValueLabel").alignment = TMPro. TextAlignmentOptions.MidlineRight; icon.sprite = Assets.GetSprite("ic_artifacts"); icon.color = Color.black; } } }
// Creates the immune system information panel. internal static bool CreateImmuneInfo(CollapsibleDetailContentPanel immuneSystemPanel, GameObject target) { var integrator = target.GetComponent <GermIntegrator>(); bool update = false; if (integrator != null) { var diseases = Db.Get().Diseases; // Create the immune system panel immuneSystemPanel.SetTitle(THRESHOLD_TITLE); immuneSystemPanel.SetLabel("germ_resistance", Db.Get().Attributes. GermResistance.Name + ": " + integrator.GetDupeResistance(), STRINGS. DUPLICANTS.ATTRIBUTES.GERMRESISTANCE.DESC); for (int i = 0; i < diseases.Count; i++) { CreateOneImmuneInfo(diseases[i], target, integrator, immuneSystemPanel); } update = true; } return(update); }
internal SimpleInfoScreenWrapper() { allGeysers = null; conditionParent = null; labelCache = new Dictionary <string, CachedStorageLabel>(64); lastReport = null; lastSelection = default; lastStressEntry = null; processHeaders = new List <ProcessConditionRow>(8); processRows = new List <ProcessConditionRow>(24); processVisible = new List <ProcessConditionRow>(32); rocketLabels = new HashSet <CachedStorageLabel>(); setInactive = new HashSet <CachedStorageLabel>(); statusActive = false; storages = new List <Storage>(8); storageActive = false; storageLabels = new HashSet <CachedStorageLabel>(); storageParent = null; stressActive = false; vitalsActive = false; wasPaused = false; instance = this; }
protected override void OnPrefabInit() { base.OnPrefabInit(); statusItemPanel = Util.KInstantiateUI <CollapsibleDetailContentPanel>(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); statusItemPanel.Content.GetComponent <VerticalLayoutGroup>().padding.bottom = 10; statusItemPanel.HeaderLabel.text = UI.DETAILTABS.SIMPLEINFO.GROUPNAME_STATUS; statusItemPanel.scalerMask.hoverLock = true; statusItemsFolder = statusItemPanel.Content.gameObject; vitalsPanel = Util.KInstantiateUI <CollapsibleDetailContentPanel>(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); vitalsPanel.SetTitle(UI.DETAILTABS.SIMPLEINFO.GROUPNAME_CONDITION); vitalsContainer = Util.KInstantiateUI(VitalsPanelTemplate, vitalsPanel.Content.gameObject, false).GetComponent <MinionVitalsPanel>(); fertilityPanel = Util.KInstantiateUI <CollapsibleDetailContentPanel>(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); fertilityPanel.SetTitle(UI.DETAILTABS.SIMPLEINFO.GROUPNAME_FERTILITY); infoPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); infoPanel.GetComponent <CollapsibleDetailContentPanel>().HeaderLabel.text = UI.DETAILTABS.SIMPLEINFO.GROUPNAME_DESCRIPTION; GameObject gameObject = infoPanel.GetComponent <CollapsibleDetailContentPanel>().Content.gameObject; descriptionContainer = Util.KInstantiateUI <DescriptionContainer>(DescriptionContainerTemplate, gameObject, false); storagePanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); stressPanel = Util.KInstantiateUI(ScreenPrefabs.Instance.CollapsableContentPanel, base.gameObject, false); stressDrawer = new DetailsPanelDrawer(attributesLabelTemplate, stressPanel.GetComponent <CollapsibleDetailContentPanel>().Content.gameObject); stampContainer = Util.KInstantiateUI(StampContainerTemplate, gameObject, false); Subscribe(-1514841199, OnRefreshDataDelegate); }
public override void OnCleanUp() { int n = processHeaders.Count; allGeysers = null; foreach (var pair in labelCache) { pair.Value.Dispose(); } labelCache.Clear(); // Avoid leaking the report lastReport = null; lastStressEntry = null; lastSelection = default; // Destroy all process rows for (int i = 0; i < n; i++) { processHeaders[i].Dispose(); } n = processRows.Count; for (int i = 0; i < n; i++) { processRows[i].Dispose(); } processHeaders.Clear(); processRows.Clear(); processVisible.Clear(); storages.Clear(); // All of these were in the label cache so they should already be disposed rocketLabels.Clear(); storageLabels.Clear(); storageParent = null; conditionParent = null; instance = null; base.OnCleanUp(); }
/// <summary> /// Refreshes the Spaced Out rocket module statistics. /// </summary> /// <param name="rocketStatus">The info panel to update.</param> /// <param name="rocket">The currently selected rocket.</param> private static void RefreshRocketStats(CollapsibleDetailContentPanel rocketStatus, CraftModuleInterface rocket) { RocketEngineCluster engine = null; int height = 0, maxHeight = TUNING.ROCKETRY.ROCKET_HEIGHT.MAX_MODULE_STACK_HEIGHT; var modules = rocket.clusterModules; int n = modules.Count; float oxyMass = 0.0f, fuelMass = 0.0f, fuelPerDist = 0.0f, burden = 0.0f, enginePower = 0.0f; var text = CACHED_BUILDER; // Find the engine first for (int i = 0; i < n; i++) { var module = modules[i].Get(); if (module != null && module.TryGetComponent(out engine)) { var perf = module.performanceStats; fuelPerDist = perf.FuelKilogramPerDistance; enginePower = perf.EnginePower; break; } } for (int i = 0; i < n; i++) { var module = modules[i].Get(); if (module != null) { if (engine != null) { // Some engines have built-in fuel tanks if (module.TryGetComponent(out IFuelTank fuelTank)) { fuelMass += fuelTank.Storage.GetAmountAvailable(engine.fuelTag); } // Do not exclude future combo LF/O tanks from mods ;) if (engine.requireOxidizer && module.TryGetComponent( out OxidizerTank oxyTank)) { oxyMass += oxyTank.TotalOxidizerPower; } } if (module.TryGetComponent(out Building building)) { height += building.Def.HeightInCells; } burden += module.performanceStats.Burden; } } // Range string tooltip = GetRangeLeft(engine, Mathf.Ceil(fuelMass), Mathf.Ceil(oxyMass), fuelPerDist); rocketStatus.SetLabel("RangeRemaining", text.ToString(), tooltip); // Speed tooltip = GetSpeed(rocket, enginePower, burden); rocketStatus.SetLabel("Speed", text.ToString(), tooltip); if (engine != null) { maxHeight = engine.maxHeight; } // Height string maxHeightStr = maxHeight.ToString(); tooltip = text.Clear().Append(ROCKETS.MAX_HEIGHT.TOOLTIP).Replace("{0}", engine.GetProperName()).Replace("{1}", maxHeightStr).ToString(); text.Clear().Append(ROCKETS.MAX_HEIGHT.NAME).Replace("{0}", height. ToString()).Replace("{1}", maxHeightStr); rocketStatus.SetLabel("MaxHeight", text.ToString(), tooltip); }
// Creates one line of the immune system information panel. private static void CreateOneImmuneInfo(Disease disease, GameObject target, GermIntegrator integrator, CollapsibleDetailContentPanel panel) { var exposure = GameUtil.GetExposureTypeForDisease(disease); var sickness = GameUtil.GetSicknessForDisease(disease); ICollection <string> required = exposure.required_traits, excluded = exposure. excluded_traits, noEffects = exposure.excluded_effects; var traits = target.GetComponent <Traits>(); var effects = target.GetComponent <Effects>(); // The part we actually changed float threshold = Mathf.Ceil(GermIntegrator.AdjustedThreshold(GermExposureTuning. ThresholdsFor(exposure).GetMinThreshold(), integrator.GetResistance(exposure))); string tooltip = ""; // Check for required traits to catch the disease if (required != null && required.Count > 0) { string traitList = ""; foreach (string trait in required) { if (!traits.HasTrait(trait)) { if (traitList.Length > 0) { traitList += ", "; } traitList += Db.Get().traits.Get(trait).Name; } } if (traitList.Length > 0) { // Immune: missing required traits threshold = 0.0f; tooltip = string.Format(STRINGS.DUPLICANTS.DISEASES. IMMUNE_FROM_MISSING_REQUIRED_TRAIT, traitList); } } // Check for traits that prevent catching it if (excluded != null && excluded.Count > 0) { string traitList = ""; foreach (string trait in excluded) { if (traits.HasTrait(trait)) { if (traitList.Length > 0) { traitList += ", "; } traitList += Db.Get().traits.Get(trait).Name; } } if (traitList.Length > 0) { // Immune: blocking trait threshold = 0.0f; if (tooltip.Length > 0) { tooltip += "\n"; } tooltip += string.Format(STRINGS.DUPLICANTS.DISEASES. IMMUNE_FROM_HAVING_EXLCLUDED_TRAIT, traitList); } } // Check for effects that prevent catching it if (noEffects != null && noEffects.Count > 0) { string effectList = ""; foreach (string effect in noEffects) { if (effects.HasEffect(effect)) { if (effectList.Length > 0) { effectList += ", "; } effectList += Db.Get().effects.Get(effect).Name; } } if (effectList.Length > 0) { // Immune: blocking effect threshold = 0.0f; if (tooltip.Length > 0) { tooltip += "\n"; } tooltip += string.Format(STRINGS.DUPLICANTS.DISEASES. IMMUNE_FROM_HAVING_EXCLUDED_EFFECT, effectList); } } // Update the label and tooltip if (tooltip.Length == 0) { if (threshold > 1.0f) { tooltip = string.Format(THRESHOLD_TOOLTIP, GameUtil.GetFormattedSimple( threshold), target.GetProperName(), sickness.Name); } else { tooltip = string.Format(THRESHOLD_TOOLTIP_1, target.GetProperName(), sickness.Name); } } panel.SetLabel("disease_" + disease.Id, " • " + disease.Name + ": " + (threshold == 0.0f ? THRESHOLD_IMMUNE.text : GameUtil.GetFormattedSimple( threshold)), tooltip); }
private void BuildFactorsStrings(int diseaseCount, int elementIdx, int environmentCell, float environmentMass, float temperature, HashSet <Tag> tags, Disease disease) { currentGermsPanel.SetTitle(string.Format(UI.DETAILTABS.DISEASE.CURRENT_GERMS, disease.Name.ToUpper())); currentGermsPanel.SetLabel("currentgerms", string.Format(UI.DETAILTABS.DISEASE.DETAILS.DISEASE_AMOUNT, disease.Name, GameUtil.GetFormattedDiseaseAmount(diseaseCount)), string.Format(UI.DETAILTABS.DISEASE.DETAILS.DISEASE_AMOUNT_TOOLTIP, GameUtil.GetFormattedDiseaseAmount(diseaseCount))); Element e = ElementLoader.elements[elementIdx]; CompositeGrowthRule growthRuleForElement = disease.GetGrowthRuleForElement(e); float tags_multiplier_base = 1f; if (tags != null && tags.Count > 0) { tags_multiplier_base = disease.GetGrowthRateForTags(tags, (float)diseaseCount > growthRuleForElement.maxCountPerKG * environmentMass); } float num = DiseaseContainers.CalculateDelta(diseaseCount, elementIdx, environmentMass, environmentCell, temperature, tags_multiplier_base, disease, 1f); currentGermsPanel.SetLabel("finaldelta", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.RATE_OF_CHANGE, GameUtil.GetFormattedSimple(num, GameUtil.TimeSlice.PerSecond, "F0")), string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.RATE_OF_CHANGE_TOOLTIP, GameUtil.GetFormattedSimple(num, GameUtil.TimeSlice.PerSecond, "F0"))); float num2 = Disease.GrowthRateToHalfLife(1f - num / (float)diseaseCount); if (num2 > 0f) { currentGermsPanel.SetLabel("finalhalflife", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_NEG, GameUtil.GetFormattedCycles(num2, "F1")), string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_NEG_TOOLTIP, GameUtil.GetFormattedCycles(num2, "F1"))); } else if (num2 < 0f) { currentGermsPanel.SetLabel("finalhalflife", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_POS, GameUtil.GetFormattedCycles(0f - num2, "F1")), string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_POS_TOOLTIP, GameUtil.GetFormattedCycles(num2, "F1"))); } else { currentGermsPanel.SetLabel("finalhalflife", UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_NEUTRAL, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.HALF_LIFE_NEUTRAL_TOOLTIP); } currentGermsPanel.SetLabel("factors", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TITLE), UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TOOLTIP); bool flag = false; if ((float)diseaseCount < growthRuleForElement.minCountPerKG * environmentMass) { currentGermsPanel.SetLabel("critical_status", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.DYING_OFF.TITLE, GetFormattedGrowthRate(0f - growthRuleForElement.underPopulationDeathRate)), string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.DYING_OFF.TOOLTIP, GameUtil.GetFormattedDiseaseAmount(Mathf.RoundToInt(growthRuleForElement.minCountPerKG * environmentMass)), GameUtil.GetFormattedMass(environmentMass, GameUtil.TimeSlice.None, GameUtil.MetricMassFormat.UseThreshold, true, "{0:0.#}"), growthRuleForElement.minCountPerKG)); flag = true; } else if ((float)diseaseCount > growthRuleForElement.maxCountPerKG * environmentMass) { currentGermsPanel.SetLabel("critical_status", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.OVERPOPULATED.TITLE, GetFormattedHalfLife(growthRuleForElement.overPopulationHalfLife)), string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.OVERPOPULATED.TOOLTIP, GameUtil.GetFormattedDiseaseAmount(Mathf.RoundToInt(growthRuleForElement.maxCountPerKG * environmentMass)), GameUtil.GetFormattedMass(environmentMass, GameUtil.TimeSlice.None, GameUtil.MetricMassFormat.UseThreshold, true, "{0:0.#}"), growthRuleForElement.maxCountPerKG)); flag = true; } if (!flag) { currentGermsPanel.SetLabel("substrate", GetFormattedGrowthEntry(growthRuleForElement.Name(), growthRuleForElement.populationHalfLife, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.DIE, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.GROW, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.NEUTRAL), GetFormattedGrowthEntry(growthRuleForElement.Name(), growthRuleForElement.populationHalfLife, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.DIE_TOOLTIP, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.GROW_TOOLTIP, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.NEUTRAL_TOOLTIP)); } int num3 = 0; if (tags != null) { foreach (Tag tag in tags) { TagGrowthRule growthRuleForTag = disease.GetGrowthRuleForTag(tag); if (growthRuleForTag != null) { CollapsibleDetailContentPanel collapsibleDetailContentPanel = currentGermsPanel; string id = "tag_" + num3; string name = growthRuleForTag.Name(); float? populationHalfLife = growthRuleForTag.populationHalfLife; string formattedGrowthEntry = GetFormattedGrowthEntry(name, populationHalfLife.Value, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.DIE, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.GROW, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.NEUTRAL); string name2 = growthRuleForTag.Name(); float? populationHalfLife2 = growthRuleForTag.populationHalfLife; collapsibleDetailContentPanel.SetLabel(id, formattedGrowthEntry, GetFormattedGrowthEntry(name2, populationHalfLife2.Value, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.DIE_TOOLTIP, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.GROW_TOOLTIP, UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.SUBSTRATE.NEUTRAL_TOOLTIP)); } num3++; } } if (Grid.IsValidCell(environmentCell)) { CompositeExposureRule exposureRuleForElement = disease.GetExposureRuleForElement(Grid.Element[environmentCell]); if (exposureRuleForElement != null && exposureRuleForElement.populationHalfLife != float.PositiveInfinity) { if (exposureRuleForElement.GetHalfLifeForCount(diseaseCount) > 0f) { currentGermsPanel.SetLabel("environment", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.ENVIRONMENT.TITLE, exposureRuleForElement.Name(), GetFormattedHalfLife(exposureRuleForElement.GetHalfLifeForCount(diseaseCount))), UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.ENVIRONMENT.DIE_TOOLTIP); } else { currentGermsPanel.SetLabel("environment", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.ENVIRONMENT.TITLE, exposureRuleForElement.Name(), GetFormattedHalfLife(exposureRuleForElement.GetHalfLifeForCount(diseaseCount))), UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.ENVIRONMENT.GROW_TOOLTIP); } } } float num4 = disease.CalculateTemperatureHalfLife(temperature); if (num4 != float.PositiveInfinity) { if (num4 > 0f) { currentGermsPanel.SetLabel("temperature", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TEMPERATURE.TITLE, GameUtil.GetFormattedTemperature(temperature, GameUtil.TimeSlice.None, GameUtil.TemperatureInterpretation.Absolute, true, false), GetFormattedHalfLife(num4)), UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TEMPERATURE.DIE_TOOLTIP); } else { currentGermsPanel.SetLabel("temperature", string.Format(UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TEMPERATURE.TITLE, GameUtil.GetFormattedTemperature(temperature, GameUtil.TimeSlice.None, GameUtil.TemperatureInterpretation.Absolute, true, false), GetFormattedHalfLife(num4)), UI.DETAILTABS.DISEASE.DETAILS.GROWTH_FACTORS.TEMPERATURE.GROW_TOOLTIP); } } }