/// <summary> /// maybe techsd should link up as well as down. it would make this more efficent, but harder on the modder. /// </summary> /// <param name="techdb"></param> internal static void CheckRequrements(FactionTechDB techdb) { List <TechSD> requrementsMetTechs = new List <TechSD>(); foreach (var kvpTech in techdb.UnavailableTechs.ToArray()) { bool requrementsMet = false; if (kvpTech.Requirements.Count == 0) //if requirements is an empty dict { requrementsMet = true; } else { foreach (var kvpRequrement in kvpTech.Requirements) { if (techdb.ResearchedTechs.ContainsKey(kvpRequrement.Key) && techdb.ResearchedTechs[kvpRequrement.Key] >= kvpRequrement.Value) { requrementsMet = true; } else { requrementsMet = false; break; } } } if (requrementsMet) { requrementsMetTechs.Add(kvpTech); } } foreach (var item in requrementsMetTechs) { techdb.MakeResearchable(item); } if (requrementsMetTechs.Count > 0) { CheckRequrements(techdb);//run again, we may have met a requirment by makign something else researchable. } }