public void OnLoad(ConfigNode cn) { Debug.Log("[Bureaucracy]: FacilityManager OnLoad"); ConfigNode managerNode = cn.GetNode("FACILITY_MANAGER"); if (managerNode == null) { return; } float.TryParse(managerNode.GetValue("FundingAllocation"), out float funding); if (double.TryParse(managerNode.GetValue("thisMonth"), out double d)) { ThisMonthsBudget = d; } else { ThisMonthsBudget = Utilities.Instance.GetNetBudget(Name); } FundingAllocation = funding; float.TryParse(managerNode.GetValue("CostMultiplier"), out CostMultiplier); float.TryParse(managerNode.GetValue("FireChance"), out FireChance); if (CostMultiplier < 1.0f) { CostMultiplier = 1.0f; } ConfigNode[] facilityNodes = managerNode.GetNodes("FACILITY"); for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); bf.OnLoad(facilityNodes); } Debug.Log("[Bureaucracy]: FacilityManager OnLoadComplete"); }
public override string ReportBody() { ReportBuilder.Clear(); for (int i = 0; i < FacilityManager.Instance.Facilities.Count; i++) { BureaucracyFacility bf = FacilityManager.Instance.Facilities.ElementAt(i); string s = bf.GetProgressReport(bf.Upgrade); if (bf.IsClosed) { ReportBuilder.AppendLine(bf.Name + " is closed"); } if (s == String.Empty) { continue; } ReportBuilder.AppendLine(s); } string report = ReportBuilder.ToString(); if (String.IsNullOrEmpty(report)) { report = "No Facility updates to report"; } return(report); }
public FireEvent() { facilityToBurn = FacilityManager.Instance.Facilities.ElementAt(Utilities.Instance.Randomise.Next(0, FacilityManager.Instance.Facilities.Count)); Title = "Fire!"; Body = "Recent cutbacks have resulted in poor safety protocols at " + facilityToBurn.Name + ". As a result, a small fire has gotten out of control"; AcceptString = "Oh dear. (" + facilityToBurn.Name + " is destroyed)"; CanBeDeclined = false; }
private void ReopenAllFacilities() { for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); bf.ReopenFacility(); } }
private PopupDialog DrawWarningDialog(BureaucracyFacility facility) { List <DialogGUIBase> dialogElements = new List <DialogGUIBase>(); dialogElements.Add(new DialogGUILabel("Upgrade of " + facility.Name + " will be cancelled. " + (facility.Upgrade.OriginalCost - facility.Upgrade.RemainingInvestment + " will be lost. Are you sure?"))); dialogElements.Add(new DialogGUIButton("Yes", facility.CancelUpgrade, true)); dialogElements.Add(new DialogGUIButton("No", () => { }, true)); return(PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new MultiOptionDialog("CancelUpgradeDialog", "", "Bureaucracy: Cancel Upgrade", UISkinManager.GetSkin("MainMenuSkin"), new Rect(0.5f, 0.5f, 210, 100), dialogElements.ToArray()), false, UISkinManager.GetSkin("MainMenuSkin"))); }
public BureaucracyFacility GetFacilityByName(string name) { for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); if (bf.Name == name) { return(bf); } } return(null); }
private BureaucracyFacility UpgradeableToActualFacility(UpgradeableFacility facility) { for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); if (!facility.id.Contains(bf.Name)) { continue; } return(bf); } return(null); }
private void SetPriority(BureaucracyFacility priorityFacility, bool b) { for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); if (bf != priorityFacility) { bf.IsPriority = false; } else { bf.IsPriority = b; } } }
public double GetFacilityMaintenanceCosts() { double d = 0; for (int i = 0; i < FacilityManager.Instance.Facilities.Count; i++) { BureaucracyFacility bf = FacilityManager.Instance.Facilities.ElementAt(i); if (bf.IsClosed) { continue; } d += bf.MaintenanceCost * FacilityManager.Instance.CostMultiplier; } return(d); }
public void PayFacilityDebt(double debt, double wageDebt) { double fundsAvailable = Funding.Instance.Funds - wageDebt; debt -= fundsAvailable; for (int i = 0; i < FacilityManager.Instance.Facilities.Count; i++) { BureaucracyFacility bf = FacilityManager.Instance.Facilities.ElementAt(i); bf.CloseFacility(); debt += bf.MaintenanceCost; if (debt <= 0) { break; } } }
public void OnSave(ConfigNode cn) { Debug.Log("[Bureaucracy]: FacilityManager OnSave"); ConfigNode managerNode = new ConfigNode("FACILITY_MANAGER"); managerNode.SetValue("FundingAllocation", FundingAllocation, true); managerNode.SetValue("CostMultiplier", CostMultiplier, true); managerNode.SetValue("FireChance", FireChance, true); managerNode.SetValue("thisMonth", ThisMonthsBudget, true); for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); bf.OnSave(managerNode); } cn.AddNode(managerNode); Debug.Log("[Bureaucracy]: FacilityManager OnSave Complete"); }
public FacilityUpgradeEvent(string id, BureaucracyFacility passingFacility) { facilityId = id; List <UpgradeableFacility> upgradeables = GetFacilityById(id); for (int i = 0; i < upgradeables.Count; i++) { UpgradeableFacility potentialUpgrade = upgradeables.ElementAt(i); if (potentialUpgrade.GetUpgradeCost() <= 0) { continue; } remainingInvestment = potentialUpgrade.GetUpgradeCost(); originalCost = potentialUpgrade.GetUpgradeCost(); levelRequested = potentialUpgrade.FacilityLevel + 1; break; } parentFacility = passingFacility; }
public override void ProgressTask() { double facilityBudget = Utilities.Instance.ConvertMonthlyBudgetToDaily(ThisMonthsBudget) * ProgressTime(); //Find the priority build first for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); if (!bf.Upgrading) { continue; } if (!bf.IsPriority) { continue; } facilityBudget = bf.Upgrade.ProgressUpgrade(facilityBudget); break; } if (facilityBudget <= 0.0f) { return; } //then run the others for (int i = 0; i < Facilities.Count; i++) { BureaucracyFacility bf = Facilities.ElementAt(i); if (!bf.Upgrading) { continue; } //Skip priority build as this should have been progressed first. if (bf.IsPriority) { continue; } facilityBudget = bf.Upgrade.ProgressUpgrade(facilityBudget); if (facilityBudget <= 0.0f) { return; } } }
private void AddLaunch(ShipConstruct ship) { if (HighLogic.CurrentGame.Mode != Game.Modes.CAREER) { return; } Costs.Instance.AddLaunch(ship); string editor = ship.shipFacility == EditorFacility.VAB ? "VehicleAssemblyBuilding" : "SpaceplaneHangar"; BureaucracyFacility bf = FacilityManager.Instance.GetFacilityByName(editor); if (!bf.IsClosed) { return; } bf.LaunchesThisMonth++; if (bf.LaunchesThisMonth > 2) { Utilities.Instance.SabotageLaunch(); } }
private PopupDialog DrawFacilityUi() { padding = 0; List <DialogGUIBase> dialogElements = new List <DialogGUIBase>(); List <DialogGUIBase> innerElements = new List <DialogGUIBase>(); int upgradeCount = 0; innerElements.Add(new DialogGUISpace(10)); float investmentNeeded = 0; innerElements.Add(new DialogGUIContentSizer(ContentSizeFitter.FitMode.Unconstrained, ContentSizeFitter.FitMode.PreferredSize, true)); innerElements.Add(new DialogGUIHorizontalLayout(PaddedLabel("This Month's Budget: $" + Math.Round(FacilityManager.Instance.ThisMonthsBudget, 0), false))); for (int i = 0; i < FacilityManager.Instance.Facilities.Count; i++) { BureaucracyFacility bf = FacilityManager.Instance.Facilities.ElementAt(i); if (!bf.Upgrading) { continue; } upgradeCount++; investmentNeeded += bf.Upgrade.RemainingInvestment; float percentage = bf.Upgrade.OriginalCost - bf.Upgrade.RemainingInvestment; percentage = (float)Math.Round(percentage / bf.Upgrade.OriginalCost * 100, 0); innerElements.Add(new DialogGUIHorizontalLayout(PaddedLabel(bf.Name + " " + percentage + "% ($" + bf.Upgrade.RemainingInvestment + " needed)", false))); } if (upgradeCount == 0) { innerElements.Add(new DialogGUIHorizontalLayout(PaddedLabel("No Facility Upgrades in progress", false))); } DialogGUIVerticalLayout vertical = new DialogGUIVerticalLayout(innerElements.ToArray()); dialogElements.Add(new DialogGUIScrollList(new Vector2(300, 300), false, true, vertical)); DialogGUIBase[] horizontal = new DialogGUIBase[3]; horizontal[0] = new DialogGUILabel("Total Investment Needed: $" + investmentNeeded); horizontal[1] = new DialogGUILabel("|"); horizontal[2] = new DialogGUILabel("Chance of Fire: " + Math.Round(FacilityManager.Instance.FireChance * 100, 0) + "%"); dialogElements.Add(new DialogGUIHorizontalLayout(horizontal)); dialogElements.Add(GetBoxes("facility")); return(PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new MultiOptionDialog("FacilitiesDialog", "", "Bureaucracy: Facilities", UISkinManager.GetSkin("MainMenuSkin"), new Rect(0.5f, 0.5f, 320, 350), dialogElements.ToArray()), false, UISkinManager.GetSkin("MainMenuSkin"))); }
public void StartUpgrade(UpgradeableFacility facility) { BureaucracyFacility facilityToUpgrade = UpgradeableToActualFacility(facility); if (facilityToUpgrade == null) { Debug.Log("[Bureaucracy]: Upgrade of " + facility.id + " requested but no facility found"); UiController.Instance.errorWindow = UiController.Instance.GeneralError("Can't find facility " + facility.id + " - please report this (with your KSP.log) on the Bureaucracy forum thread"); return; } Debug.Log("[Bureaucracy]: Upgrade of " + facility.id + " requested"); if (facilityToUpgrade.IsDestroyed()) { Debug.Log("[Bureaucracy]: " + facility.id + " is destroyed. Aborting upgrade"); ScreenMessages.PostScreenMessage("[Bureaucracy]: Can't upgrade " + facilityToUpgrade.Name + " Building is destroyed"); return; } if (facilityToUpgrade.Upgrading && facilityToUpgrade.Upgrade.UpgradeHeld) { facilityToUpgrade.Upgrade.OnEventCompleted(); return; } if (facilityToUpgrade.Upgrading) { if (facilityToUpgrade.IsPriority) { warningDialog = DrawWarningDialog(facilityToUpgrade); return; } Debug.Log("[Bureaucracy]: " + facility.id + " is already being upgraded. Prioritising"); SetPriority(facilityToUpgrade, true); ScreenMessages.PostScreenMessage("Upgrade of " + facilityToUpgrade.Name + " prioritised"); return; } facilityToUpgrade.StartUpgrade(facility); }