private static void AddCategoryScenParts(Scenario scen, ScenPartCategory cat, int count) { scen.parts.AddRange(ScenarioMaker.RandomScenPartsOfCategory(scen, cat, count)); }
private static IEnumerable <ScenPart> RandomScenPartsOfCategory(Scenario scen, ScenPartCategory cat, int count) { if (count <= 0) { yield break; } IEnumerable <ScenPartDef> allowedParts = from d in ScenarioMaker.AddableParts(scen) where d.category == cat select d; int numYielded = 0; int numTries = 0; while (numYielded < count) { if (!allowedParts.Any <ScenPartDef>()) { yield break; } ScenPartDef def = allowedParts.RandomElementByWeight((ScenPartDef d) => d.selectionWeight); ScenPart newPart = ScenarioMaker.MakeScenPart(def); if (ScenarioMaker.CanAddPart(scen, newPart)) { yield return(newPart); numYielded++; } numTries++; if (numTries > 100) { Log.Error(string.Concat(new object[] { "Could not add ScenPart of category ", cat, " to scenario ", scen, " after 50 tries." }), false); yield break; } } yield break; }
private static IEnumerable <ScenPart> RandomScenPartsOfCategory(Scenario scen, ScenPartCategory cat, int count) { _003CRandomScenPartsOfCategory_003Ec__Iterator0 _003CRandomScenPartsOfCategory_003Ec__Iterator = (_003CRandomScenPartsOfCategory_003Ec__Iterator0) /*Error near IL_0032: stateMachine*/; if (count > 0) { IEnumerable <ScenPartDef> allowedParts = from d in ScenarioMaker.AddableParts(scen) where d.category == cat select d; int numYielded = 0; int numTries = 0; while (true) { if (numYielded < count && allowedParts.Any()) { ScenPartDef def = allowedParts.RandomElementByWeight((ScenPartDef d) => d.selectionWeight); ScenPart newPart = ScenarioMaker.MakeScenPart(def); if (ScenarioMaker.CanAddPart(scen, newPart)) { yield return(newPart); /*Error: Unable to find new state assignment for yield return*/; } numTries++; if (numTries > 100) { break; } continue; } yield break; } Log.Error("Could not add ScenPart of category " + cat + " to scenario " + scen + " after 50 tries."); } }