Beispiel #1
0
        public KSCItem FromConfigNode(ConfigNode node)
        {
            VABUpgrades.Clear();
            SPHUpgrades.Clear();
            RDUpgrades.Clear();
            VABList.Clear();
            VABWarehouse.Clear();
            SPHList.Clear();
            SPHWarehouse.Clear();
            VABPlans.Clear();
            SPHPlans.Clear();
            KSCTech.Clear();
            Recon_Rollout.Clear();
            AirlaunchPrep.Clear();
            VABRates.Clear();
            SPHRates.Clear();

            KSCName = node.GetValue("KSCName");
            if (!int.TryParse(node.GetValue("ActiveLPID"), out ActiveLaunchPadID))
            {
                ActiveLaunchPadID = 0;
            }
            ConfigNode vabUp = node.GetNode("VABUpgrades");

            foreach (string upgrade in vabUp.GetValues("Upgrade"))
            {
                VABUpgrades.Add(int.Parse(upgrade));
            }
            ConfigNode sphUp = node.GetNode("SPHUpgrades");

            foreach (string upgrade in sphUp.GetValues("Upgrade"))
            {
                SPHUpgrades.Add(int.Parse(upgrade));
            }
            ConfigNode rdUp = node.GetNode("RDUpgrades");

            foreach (string upgrade in rdUp.GetValues("Upgrade"))
            {
                RDUpgrades.Add(int.Parse(upgrade));
            }

            ConfigNode tmp = node.GetNode("VABList");

            foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
            {
                var listItem = new BuildListStorageItem();
                ConfigNode.LoadObjectFromConfig(listItem, cn);
                BuildListVessel blv = listItem.ToBuildListVessel();
                blv.ShipNode = cn.GetNode("ShipNode");
                blv.KSC      = this;
                VABList.Add(blv);
            }

            tmp = node.GetNode("SPHList");
            foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
            {
                var listItem = new BuildListStorageItem();
                ConfigNode.LoadObjectFromConfig(listItem, cn);
                BuildListVessel blv = listItem.ToBuildListVessel();
                blv.ShipNode = cn.GetNode("ShipNode");
                blv.KSC      = this;
                SPHList.Add(blv);
            }

            BuildList.Sort((a, b) => a.BuildListIndex.CompareTo(b.BuildListIndex));

            tmp = node.GetNode("VABWarehouse");
            foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
            {
                var listItem = new BuildListStorageItem();
                ConfigNode.LoadObjectFromConfig(listItem, cn);
                BuildListVessel blv = listItem.ToBuildListVessel();
                blv.ShipNode = cn.GetNode("ShipNode");
                blv.KSC      = this;
                VABWarehouse.Add(blv);
            }

            tmp = node.GetNode("SPHWarehouse");
            foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
            {
                var listItem = new BuildListStorageItem();
                ConfigNode.LoadObjectFromConfig(listItem, cn);
                BuildListVessel blv = listItem.ToBuildListVessel();
                blv.ShipNode = cn.GetNode("ShipNode");
                blv.KSC      = this;
                SPHWarehouse.Add(blv);
            }

            if (node.TryGetNode("VABPlans", ref tmp))
            {
                if (tmp.HasNode("KCTVessel"))
                {
                    foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
                    {
                        var listItem = new BuildListStorageItem();
                        ConfigNode.LoadObjectFromConfig(listItem, cn);
                        BuildListVessel blv = listItem.ToBuildListVessel();
                        blv.ShipNode = cn.GetNode("ShipNode");
                        blv.KSC      = this;
                        if (VABPlans.ContainsKey(blv.ShipName))
                        {
                            VABPlans.Remove(blv.ShipName);
                        }

                        VABPlans.Add(blv.ShipName, blv);
                    }
                }
            }

            if (node.TryGetNode("SPHPlans", ref tmp))
            {
                if (tmp.HasNode("KCTVessel"))
                {
                    foreach (ConfigNode cn in tmp.GetNodes("KCTVessel"))
                    {
                        var listItem = new BuildListStorageItem();
                        ConfigNode.LoadObjectFromConfig(listItem, cn);
                        BuildListVessel blv = listItem.ToBuildListVessel();
                        blv.ShipNode = cn.GetNode("ShipNode");
                        blv.KSC      = this;
                        if (SPHPlans.ContainsKey(blv.ShipName))
                        {
                            SPHPlans.Remove(blv.ShipName);
                        }
                        SPHPlans.Add(blv.ShipName, blv);
                    }
                }
            }

            tmp = node.GetNode("Recon_Rollout");
            foreach (ConfigNode RRCN in tmp.GetNodes("Recon_Rollout_Item"))
            {
                var tempRR = new ReconRolloutStorageItem();
                ConfigNode.LoadObjectFromConfig(tempRR, RRCN);
                Recon_Rollout.Add(tempRR.ToReconRollout());
            }

            if (node.TryGetNode("Airlaunch_Prep", ref tmp))
            {
                foreach (ConfigNode cn in tmp.GetNodes("Airlaunch_Prep_Item"))
                {
                    var storageItem = new AirlaunchPrepStorageItem();
                    ConfigNode.LoadObjectFromConfig(storageItem, cn);
                    AirlaunchPrep.Add(storageItem.ToAirlaunchPrep());
                }
            }

            if (node.HasNode("KSCTech"))
            {
                tmp = node.GetNode("KSCTech");
                foreach (ConfigNode cn in tmp.GetNodes("UpgradingBuilding"))
                {
                    var storageItem = new FacilityUpgradeStorageItem();
                    ConfigNode.LoadObjectFromConfig(storageItem, cn);
                    KSCTech.Add(storageItem.ToFacilityUpgrade());
                }
            }

            if (node.HasNode("LaunchPads"))
            {
                LaunchPads.Clear();
                tmp = node.GetNode("LaunchPads");
                foreach (ConfigNode cn in tmp.GetNodes("KCT_LaunchPad"))
                {
                    var tempLP = new KCT_LaunchPad("LP0");
                    ConfigNode.LoadObjectFromConfig(tempLP, cn);
                    tempLP.DestructionNode = cn.GetNode("DestructionState");
                    LaunchPads.Add(tempLP);
                }
            }

            if (node.HasNode("VABRateCache"))
            {
                foreach (string rate in node.GetNode("VABRateCache").GetValues("rate"))
                {
                    if (double.TryParse(rate, out double r))
                    {
                        VABRates.Add(r);
                    }
                }
            }

            if (node.HasNode("SPHRateCache"))
            {
                foreach (string rate in node.GetNode("SPHRateCache").GetValues("rate"))
                {
                    if (double.TryParse(rate, out double r))
                    {
                        SPHRates.Add(r);
                    }
                }
            }

            return(this);
        }