public override void OnLoad(ConfigNode node)
 {
     base.OnLoad(node);
     if (HighLogic.CurrentGame.Mode == Game.Modes.CAREER)
     {
         foreach (ConfigNode n in node.GetNodes("EngineConfigUpgrade"))
         {
             EngineConfigUpgrade eCfg = null;
             if (n.HasValue("name"))
             {
                 string cfgName = n.GetValue("name");
                 if (configUpgrades.TryGetValue(cfgName, out eCfg))
                     eCfg.Load(n);
                 else
                 {
                     eCfg = new EngineConfigUpgrade(n);
                     configUpgrades[cfgName] = eCfg;
                 }
             }
         }
         foreach (ConfigNode n in node.GetNodes("TLUpgrade"))
         {
             TLUpgrade tU = null;
             if (n.HasValue("name"))
             {
                 string tlName = n.GetValue("name");
                 if (techLevelUpgrades.TryGetValue(tlName, out tU))
                     tU.Load(n);
                 else
                 {
                     tU = new TLUpgrade(n);
                     techLevelUpgrades[tlName] = tU;
                 }
             }
         }
     }
 }
        public static void FillUpgrades()
        {
            if (PartLoader.Instance == null || PartLoader.LoadedPartsList == null)
            {
                Debug.LogError("*RFUM: ERROR: Partloader instance null or list null!");
                return;
            }

            configUpgrades = new Dictionary<string, EngineConfigUpgrade>();
            techLevelUpgrades = new Dictionary<string, TLUpgrade>();

            for(int a = PartLoader.LoadedPartsList.Count - 1; a >= 0; --a)
            {
                AvailablePart ap = PartLoader.LoadedPartsList[a];
                if (ap == null)
                {
                    continue;
                }
                Part part = ap.partPrefab;
                if(part != null)
                {
                    if (part.Modules == null)
                        continue;

                    for(int i = part.Modules.Count - 1; i >= 0; --i)
                    {
                        PartModule m = part.Modules[i];
                        if(m is ModuleEngineConfigs)
                        {
                            ModuleEngineConfigs mec = m as ModuleEngineConfigs;
                            mec.CheckConfigs();
                            for(int j = mec.configs.Count - 1; j >= 0; --j)
                            {
                                ConfigNode cfg = mec.configs[j];
                                if(cfg.HasValue("name"))
                                {
                                    string cfgName = cfg.GetValue("name");
                                    if (RFSettings.Instance.usePartNameInConfigUnlock)
                                        cfgName = Utilities.GetPartName(ap) + cfgName;

                                    // config upgrades
                                    EngineConfigUpgrade eConfig = new EngineConfigUpgrade(cfg, cfgName);
                                    configUpgrades[cfgName] = eConfig;
                                    eConfig.unlocked = false;

                                    // TL upgrades
                                    if (mec.techLevel >= 0)
                                    {
                                        TLUpgrade tU = new TLUpgrade(cfg, mec);
                                        techLevelUpgrades[tU.name] = tU;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        public void FillUpgrades()
        {
            if (PartLoader.Instance == null || PartLoader.LoadedPartsList == null)
            {
                Debug.LogError("*RFUM: ERROR: Partloader instance null or list null!");
                return;
            }
            for(int a = PartLoader.LoadedPartsList.Count - 1; a >= 0; --a)
            {
                AvailablePart ap = PartLoader.LoadedPartsList[a];
                if (ap == null)
                {
                    continue;
                }
                Part part = ap.partPrefab;
                if(part != null)
                {
                    if (part.Modules == null)
                        continue;

                    for(int i = part.Modules.Count - 1; i >= 0; --i)
                    {
                        PartModule m = part.Modules[i];
                        if(m is ModuleEngineConfigs)
                        {
                            ModuleEngineConfigs mec = m as ModuleEngineConfigs;
                            mec.CheckConfigs();
                            for(int j = mec.configs.Count - 1; j >= 0; --j)
                            {
                                ConfigNode cfg = mec.configs[j];
                                if(cfg.HasValue("name"))
                                {
                                    string cfgName = cfg.GetValue("name");
                                    if (RFSettings.Instance.usePartNameInConfigUnlock)
                                        cfgName = Utilities.GetPartName(ap) + cfgName;
                                    // config upgrades
                                    EngineConfigUpgrade eConfig = new EngineConfigUpgrade(cfg, cfgName);
                                    configUpgrades[cfgName] = eConfig;
                                    if (ResearchAndDevelopment.Instance != null && ap.TechRequired != null)
                                    {
                                        if(ResearchAndDevelopment.PartModelPurchased(ap))
                                        {
                                            if (cfg.HasValue("techRequired"))
                                            {
                                                string tech = cfg.GetValue("techRequired");
                                                if (tech != "" && tech != ap.TechRequired)
                                                    continue;
                                            }

                                            bool unlocked = false;
                                            if (cfg.HasValue("unlocked"))
                                                bool.TryParse(cfg.GetValue("unlocked"), out unlocked);

                                            if (mec.autoUnlock || unlocked)
                                                eConfig.unlocked = true;
                                        }
                                        else
                                            eConfig.unlocked = false;

                                        // TL upgrades
                                        if (mec.techLevel >= 0)
                                        {
                                            TLUpgrade tU = new TLUpgrade(cfg, mec);
                                            techLevelUpgrades[tU.name] = tU;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }