private List <AIResearchFramework.TechBeat> AIGetCulledProspects( StrategicAI ai, IEnumerable <AIResearchFramework.TechBeat> sorted) { int num1 = 0; double num2 = 0.0; List <AIResearchFramework.TechBeat> techBeatList = new List <AIResearchFramework.TechBeat>(); foreach (AIResearchFramework.TechBeat techBeat in sorted) { techBeatList.Add(techBeat); if (num1 == 0) { techBeatList.Add(techBeat); techBeatList.Add(techBeat); num2 = (double)AIResearchFramework.AICalcTechCost(ai, techBeat.Tech); } if ((double)AIResearchFramework.AICalcTechCost(ai, techBeat.Tech) == num2) { ++num1; } else { break; } } return(techBeatList); }
private static Tech AISelectFavoriteTech(StrategicAI ai, IList <Tech> techs) { if (techs.Count == 0) { return((Tech)null); } List <Tech> techList = new List <Tech>(); int num = AIResearchFramework.AICalcTechCost(ai, techs[0]); foreach (Tech tech in (IEnumerable <Tech>)techs) { if (num == AIResearchFramework.AICalcTechCost(ai, tech)) { techList.Add(tech); } else { if (AIResearchFramework.AIGetTurnsToComplete(ai, tech) <= 15) { techList.Add(tech); break; } break; } } return(techList[ai.Random.Next(techList.Count)]); }
private Tech AISelectDefaultTechPass( StrategicAI ai, AIResearchModes?mode, TechFamilies?family) { List <Tech> list = AIResearchFramework.AISelectAvailableTechs(ai, mode, family).OrderBy <Tech, int>((Func <Tech, int>)(x => AIResearchFramework.AICalcTechCost(ai, x))).ToList <Tech>(); if (list.Count > 0) { list.Insert(0, list[0]); } if (this._log != null) { this._log.Print(string.Format(" {0} prospects: ", mode.HasValue ? (object)string.Format("{0}/{1}", (object)AIResearchFramework.AIGetResearchModeSymbol(mode.Value), (object)ai.Game.GameDatabase.GetAIInfo(ai.Player.ID).Stance.ToString()) : (object)"ALL")); foreach (Tech tech in list) { int num = AIResearchFramework.AICalcTechCost(ai, tech); this._log.Print(string.Format("{0} ({1}); ", (object)tech.Id, (object)num)); } } return(AIResearchFramework.AISelectFavoriteTech(ai, (IList <Tech>)list)); }
private void LogProspects( StrategicAI ai, IList <AIResearchModes> phasedRhythm, IEnumerable <AIResearchFramework.TechBeat> prospects) { if (this._log == null) { return; } foreach (AIResearchFramework.TechBeat prospect in prospects) { this._log.Print(string.Format("{0}/{1} ({2}{3}); ", (object)AIResearchFramework.AIGetResearchModeSymbol(phasedRhythm[prospect.Beat]), (object)prospect.Tech.Id, (object)AIResearchFramework.AICalcTechCost(ai, prospect.Tech), this.AIIsShortTermTech(ai, prospect.Tech) ? (object)"" : (object)"*")); } }
private IEnumerable <AIResearchFramework.TechBeat> AIGetProspects( StrategicAI ai, IEnumerable <AIResearchFramework.TechBeat> techs) { return((IEnumerable <AIResearchFramework.TechBeat>)techs.OrderBy <AIResearchFramework.TechBeat, int>((Func <AIResearchFramework.TechBeat, int>)(x => !this.AIIsShortTermTech(ai, x.Tech) ? 1 : 0)).ThenBy <AIResearchFramework.TechBeat, int>((Func <AIResearchFramework.TechBeat, int>)(y => y.Beat)).ThenBy <AIResearchFramework.TechBeat, int>((Func <AIResearchFramework.TechBeat, int>)(z => AIResearchFramework.AICalcTechCost(ai, z.Tech)))); }
private static int AICalcTechCost(StrategicAI ai, Tech tech) { return(AIResearchFramework.AICalcTechCost(AIResearchFramework.AICalcCombinedTechStyleCost(ai, tech), (double)tech.AICostFactors.Faction(ai.Player.Faction.Name), (double)AIResearchFramework.AIGetTurnsToComplete(ai, tech))); }