private IEnumerable <AIResearchFramework.TechBeat> AIGetTechBeats( IEnumerable <Tech> techs, List <AIResearchModes> rhythm, List <PlayerTechInfo> desiredTech = null) { foreach (Tech tech1 in techs) { Tech tech = tech1; for (int beat = 0; beat < rhythm.Count; ++beat) { if (AIResearchFramework.AIContainsTech(new AIResearchModes?(rhythm[beat]), new TechFamilies?(), tech)) { if (desiredTech != null) { desiredTech.Any <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => x.TechFileID == tech.Id)); } yield return(new AIResearchFramework.TechBeat() { Tech = tech, Beat = beat }); } } } }
private static List <Tech> AISelectAvailableTechs( StrategicAI ai, AIResearchModes?mode, TechFamilies?family) { return(ai.Game.GameDatabase.GetPlayerTechInfos(ai.Player.ID).Where <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(x => AIResearchFramework.AIIsTechAvailable(x.State))).Select <PlayerTechInfo, Tech>((Func <PlayerTechInfo, Tech>)(y => ai.Game.AssetDatabase.MasterTechTree.Technologies.First <Tech>((Func <Tech, bool>)(z => y.TechFileID == z.Id)))).Where <Tech>((Func <Tech, bool>)(x => AIResearchFramework.AIContainsTech(mode, family, x))).ToList <Tech>()); }