private List <AITechStyleInfo> AISelectTechStylesCore( int playerId, Random random, string factionName) { this.PrepareLog(); List <AITechStyleInfo> aiTechStyleInfoList = new List <AITechStyleInfo>(); foreach (AIResearchFramework.AITechStyleGroup styleGroup in this._styleGroups) { float num1 = 0.0f; List <Weighted <AIResearchFramework.AITechStyleRow> > weightedList = new List <Weighted <AIResearchFramework.AITechStyleRow> >(); foreach (AIResearchFramework.AITechStyleRow style in styleGroup.Styles) { float num2 = style.SelectionChances.Faction(factionName); num1 += num2; weightedList.Add(new Weighted <AIResearchFramework.AITechStyleRow>(style, (int)((double)num2 * 1000.0))); } float num3 = 100f - num1; if ((double)num3 >= 1.0 / 1000.0) { weightedList.Add(new Weighted <AIResearchFramework.AITechStyleRow>((AIResearchFramework.AITechStyleRow)null, (int)((double)num3 * 1000.0))); } AIResearchFramework.AITechStyleRow aiTechStyleRow = WeightedChoices.Choose <AIResearchFramework.AITechStyleRow>(random, (IEnumerable <Weighted <AIResearchFramework.AITechStyleRow> >)weightedList); if (aiTechStyleRow != null) { aiTechStyleInfoList.AddRange(aiTechStyleRow.ToTechStyleInfos(playerId, factionName)); } } return(aiTechStyleInfoList); }
public static void Write(AIResearchFramework.AITechStyleRow value, BinaryWriter w) { w.Write(value.Families.Length); foreach (TechFamilies family in value.Families) { w.Write(family.ToString()); } w.Write(value.CostFactor); AIResearchFramework.AITechStyleRow.WriteChances(value.SelectionChances, w); }