Exemple #1
0
        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");
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 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;
 }
Exemple #4
0
 private void ReopenAllFacilities()
 {
     for (int i = 0; i < Facilities.Count; i++)
     {
         BureaucracyFacility bf = Facilities.ElementAt(i);
         bf.ReopenFacility();
     }
 }
Exemple #5
0
        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")));
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
 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;
         }
     }
 }
Exemple #9
0
        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);
        }
Exemple #10
0
        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;
                }
            }
        }
Exemple #11
0
        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");
        }
Exemple #12
0
        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;
        }
Exemple #13
0
        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;
                }
            }
        }
Exemple #14
0
        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();
            }
        }
Exemple #15
0
        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")));
        }
Exemple #16
0
        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);
        }