public static string GetBackstoryUniqueKey(WorkTags workDisables) { //string log = "UNIQUE KEY"; string baseBackstoryDefName = BackstoryDefNameIdentifier + BackstoryDefNameIdentifierDisabled; string ukey = baseBackstoryDefName + workDisables.ToString().Replace(", ", "_"); //log = log + Environment.NewLine + ukey; //Log.Error(log); return(ukey); }
public static void PawnWorkDisablesSampled() { IOrderedEnumerable <PawnKindDef> orderedEnumerable = from k in DefDatabase <PawnKindDef> .AllDefs where k.RaceProps.Humanlike orderby k.combatPower select k; List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (PawnKindDef item2 in orderedEnumerable) { PawnKindDef kind = item2; Faction fac = FactionUtility.DefaultFactionFrom(kind.defaultFactionType); FloatMenuOption item = new FloatMenuOption(kind.defName + " (" + kind.combatPower + ")", delegate { Dictionary <WorkTags, int> dictionary = new Dictionary <WorkTags, int>(); for (int i = 0; i < 1000; i++) { Pawn pawn = PawnGenerator.GeneratePawn(kind, fac); WorkTags combinedDisabledWorkTags = pawn.story.CombinedDisabledWorkTags; IEnumerator enumerator2 = Enum.GetValues(typeof(WorkTags)).GetEnumerator(); try { while (enumerator2.MoveNext()) { WorkTags workTags = (WorkTags)enumerator2.Current; if (!dictionary.ContainsKey(workTags)) { dictionary.Add(workTags, 0); } if ((combinedDisabledWorkTags & workTags) != 0) { Dictionary <WorkTags, int> dictionary2; WorkTags key; (dictionary2 = dictionary)[key = workTags] = dictionary2[key] + 1; } } } finally { IDisposable disposable; if ((disposable = (enumerator2 as IDisposable)) != null) { disposable.Dispose(); } } pawn.Destroy(); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Sampled " + 1000 + "x " + kind.defName + ":"); stringBuilder.AppendLine("Worktags disabled"); IEnumerator enumerator3 = Enum.GetValues(typeof(WorkTags)).GetEnumerator(); try { while (enumerator3.MoveNext()) { WorkTags key2 = (WorkTags)enumerator3.Current; int num = dictionary[key2]; stringBuilder.AppendLine(" " + key2.ToString() + " " + num + " (" + ((float)num / 1000f).ToStringPercent() + ")"); } } finally { IDisposable disposable2; if ((disposable2 = (enumerator3 as IDisposable)) != null) { disposable2.Dispose(); } } Log.Message(stringBuilder.ToString().TrimEndNewlines()); }); list.Add(item); } Find.WindowStack.Add(new FloatMenu(list)); }