private PopupDialog DrawResearchUi() { padding = 0; float scienceCount = 0; List <DialogGUIBase> dialogElements = new List <DialogGUIBase>(); List <DialogGUIBase> innerElements = new List <DialogGUIBase>(); innerElements.Add(new DialogGUIContentSizer(ContentSizeFitter.FitMode.Unconstrained, ContentSizeFitter.FitMode.PreferredSize, true)); innerElements.Add(new DialogGUISpace(10)); if (ResearchManager.Instance.ProcessingScience.Count == 0) { innerElements.Add(new DialogGUIHorizontalLayout(PaddedLabel("No research in progress", false))); } for (int i = 0; i < ResearchManager.Instance.ProcessingScience.Count; i++) { ScienceEvent se = ResearchManager.Instance.ProcessingScience.ElementAt(i).Value; if (se.IsComplete) { continue; } scienceCount += se.RemainingScience; innerElements.Add(new DialogGUIHorizontalLayout(PaddedLabel(se.UiName + ": " + Math.Round(se.OriginalScience - se.RemainingScience, 1) + "/" + Math.Round(se.OriginalScience, 1), false))); } dialogElements.Add(new DialogGUIScrollList(new Vector2(300, 300), false, true, new DialogGUIVerticalLayout(10, 100, 4, new RectOffset(6, 24, 10, 10), TextAnchor.UpperLeft, innerElements.ToArray()))); DialogGUIBase[] horizontal = new DialogGUIBase[3]; horizontal[0] = new DialogGUILabel("Processing Science: " + Math.Round(scienceCount, 1)); horizontal[1] = new DialogGUILabel("|"); double scienceOutput = ResearchManager.Instance.ThisMonthsBudget / SettingsClass.Instance.ScienceMultiplier * ResearchManager.Instance.ScienceMultiplier; horizontal[2] = new DialogGUILabel("Research Output: " + Math.Round(scienceOutput, 1)); dialogElements.Add(new DialogGUIHorizontalLayout(horizontal)); dialogElements.Add(GetBoxes("research")); return(PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new MultiOptionDialog("ResearchDialog", "", "Bureaucracy: Research", UISkinManager.GetSkin("MainMenuSkin"), GetRect(dialogElements), dialogElements.ToArray()), false, UISkinManager.GetSkin("MainMenuSkin"))); }
private void RemoveCompletedEvents() { for (int i = 0; i < CompletedEvents.Count; i++) { ScienceEvent se = CompletedEvents.ElementAt(i); ProcessingScience.Remove(se.ScienceSubject); } }
public void OnSave(ConfigNode node) { Debug.Log("[Bureaucracy]: Research Manager OnSave"); ConfigNode researchNode = new ConfigNode("RESEARCH"); researchNode.SetValue("FundingAllocation", FundingAllocation, true); researchNode.SetValue("ScienceMultiplier", ScienceMultiplier, true); researchNode.SetValue("thisMonth", ThisMonthsBudget, true); for (int i = 0; i < ProcessingScience.Count; i++) { ScienceEvent se = ProcessingScience.ElementAt(i).Value; se.OnSave(researchNode); } node.AddNode(researchNode); Debug.Log("[Bureaucracy]: Research Manager OnSaveComplete"); }
public override string ReportBody() { ReportBuilder.Clear(); for (int i = 0; i < ResearchManager.Instance.CompletedEvents.Count; i++) { ScienceEvent se = ResearchManager.Instance.CompletedEvents.ElementAt(i); float processedScience = se.OriginalScience; ReportBuilder.AppendLine(se.UiName + ": " + Math.Round(processedScience, 1) + "/" + se.OriginalScience); } for (int i = 0; i < ResearchManager.Instance.ProcessingScience.Count; i++) { ScienceEvent se = ResearchManager.Instance.ProcessingScience.ElementAt(i).Value; float processedScience = se.OriginalScience - se.RemainingScience; ReportBuilder.AppendLine(se.UiName + ": " + Math.Round(processedScience, 1) + "/" + Math.Round(se.OriginalScience, 1)); } ResearchManager.Instance.CompletedEvents.Clear(); return(ReportBuilder.ToString()); }
public void OnLoad(ConfigNode node) { Debug.Log("[Bureaucracy]: Research Manager OnLoad"); ConfigNode researchNode = node.GetNode("RESEARCH"); if (researchNode == null) { return; } float.TryParse(researchNode.GetValue("ScienceMultiplier"), out ScienceMultiplier); float.TryParse(researchNode.GetValue("FundingAllocation"), out float funding); if (double.TryParse(researchNode.GetValue("thisMonth"), out double d)) { ThisMonthsBudget = d; } else { ThisMonthsBudget = Utilities.Instance.GetNetBudget(Name); } FundingAllocation = funding; ConfigNode[] scienceNodes = researchNode.GetNodes("SCIENCE_DATA"); if (scienceNodes.Length == 0) { return; } for (int i = 0; i < scienceNodes.Length; i++) { ConfigNode cn = scienceNodes.ElementAt(i); bool.TryParse(cn.GetValue("isComplete"), out bool isComplete); ScienceEvent se = new ScienceEvent(cn, this); if (isComplete) { CompletedEvents.Add(se); } else { ProcessingScience.Add(se.ScienceSubject, se); } } Debug.Log("[Bureaucracy]: Research Manager OnLoad Complete"); }
public override void ProgressTask() { double researchBudget = Utilities.Instance.ConvertMonthlyBudgetToDaily(ThisMonthsBudget) * ProgressTime() * ScienceMultiplier; // ReSharper disable once CompareOfFloatsByEqualityOperator if (researchBudget == 0.0f) { return; } List <ScienceEvent> scienceCache = ProcessingScience.Values.ToList(); for (int i = 0; i < scienceCache.Count; i++) { ScienceEvent se = scienceCache.ElementAt(i); researchBudget = se.ProgressResearch(researchBudget); if (researchBudget <= 0.0f) { break; } } RemoveCompletedEvents(); }