private bool AIHaveReplacementForTech(StrategicAI ai, Tech tech) { bool flag = false; foreach (AIResearchFramework.AITechReplacementRow replacement in this._replacements) { if (tech == replacement.Old) { PlayerTechInfo playerTechInfo = AIResearchFramework.AIGetPlayerTechInfo(ai, replacement.New); if (playerTechInfo != null) { switch (replacement.Contexts) { case AIResearchFramework.AITechReplacementContexts.Available: flag = AIResearchFramework.AIIsTechAvailable(playerTechInfo.State) || AIResearchFramework.AIHaveTech(playerTechInfo.State); break; case AIResearchFramework.AITechReplacementContexts.Researched: flag = AIResearchFramework.AIHaveTech(playerTechInfo.State); break; } if (flag) { break; } } } } return(flag); }
private IEnumerable <Tech> AIGetAvailableTechs(StrategicAI ai) { 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))))); }
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>()); }