public void LogDynamicDrawThings() { Log.Message(DebugLogsUtility.ThingListToUniqueCountString(this.drawThings), false); }
public static void FlavorfulCombatTest() { List <DebugMenuOption> list = new List <DebugMenuOption>(); IEnumerable <ManeuverDef> maneuvers = DefDatabase <ManeuverDef> .AllDefsListForReading; Func <ManeuverDef, RulePackDef>[] results = new Func <ManeuverDef, RulePackDef>[5] { (ManeuverDef m) => new RulePackDef[4] { m.combatLogRulesHit, m.combatLogRulesDeflect, m.combatLogRulesMiss, m.combatLogRulesDodge }.RandomElement(), (ManeuverDef m) => m.combatLogRulesHit, (ManeuverDef m) => m.combatLogRulesDeflect, (ManeuverDef m) => m.combatLogRulesMiss, (ManeuverDef m) => m.combatLogRulesDodge }; string[] array = new string[5] { "(random)", "Hit", "Deflect", "Miss", "Dodge" }; foreach (Pair <ManeuverDef, int> maneuverresult in maneuvers.Concat(null).Cross(Enumerable.Range(0, array.Length))) { DebugMenuOption item = new DebugMenuOption(string.Format("{0}/{1}", (maneuverresult.First == null) ? "(random)" : maneuverresult.First.defName, array[maneuverresult.Second]), DebugMenuOptionMode.Action, delegate { CreateDamagedDestroyedMenu(delegate(Action <List <BodyPartRecord>, List <bool> > bodyPartCreator) { StringBuilder stringBuilder7 = new StringBuilder(); ManeuverDef maneuver = default(ManeuverDef); for (int num3 = 0; num3 < 100; num3++) { maneuver = maneuverresult.First; if (maneuver == null) { maneuver = maneuvers.RandomElement(); } RulePackDef rulePackDef = results[maneuverresult.Second](maneuver); List <BodyPartRecord> list8 = null; List <bool> list9 = null; if (rulePackDef == maneuver.combatLogRulesHit) { list8 = new List <BodyPartRecord>(); list9 = new List <bool>(); bodyPartCreator(list8, list9); } ImplementOwnerTypeDef implementOwnerTypeDef; string toolLabel; if (!(from ttp in DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.IsMeleeWeapon && !td.tools.NullOrEmpty()).SelectMany((ThingDef td) => td.tools.Select((Tool tool) => new Pair <ThingDef, Tool>(td, tool))) where ttp.Second.capacities.Contains(maneuver.requiredCapacity) select ttp).TryRandomElement(out Pair <ThingDef, Tool> result)) { Log.Warning("Melee weapon with tool with capacity " + maneuver.requiredCapacity + " not found."); implementOwnerTypeDef = ImplementOwnerTypeDefOf.Bodypart; toolLabel = "(" + implementOwnerTypeDef.defName + ")"; } else { implementOwnerTypeDef = ((result.Second == null) ? ImplementOwnerTypeDefOf.Bodypart : ImplementOwnerTypeDefOf.Weapon); toolLabel = ((result.Second != null) ? result.Second.label : ("(" + implementOwnerTypeDef.defName + ")")); } BattleLogEntry_MeleeCombat battleLogEntry_MeleeCombat = new BattleLogEntry_MeleeCombat(rulePackDef, alwaysShowInCompact: false, RandomPawnForCombat(), RandomPawnForCombat(), implementOwnerTypeDef, toolLabel, result.First); battleLogEntry_MeleeCombat.FillTargets(list8, list9, battleLogEntry_MeleeCombat.RuleDef.defName.Contains("Deflect")); battleLogEntry_MeleeCombat.Debug_OverrideTicks(Rand.Int); stringBuilder7.AppendLine(battleLogEntry_MeleeCombat.ToGameStringFromPOV(null)); } Log.Message(stringBuilder7.ToString()); }); }); list.Add(item); } int rf = 0; while (rf < 2) { list.Add(new DebugMenuOption((rf == 0) ? "Ranged fire singleshot" : "Ranged fire burst", DebugMenuOptionMode.Action, delegate { StringBuilder stringBuilder6 = new StringBuilder(); for (int num2 = 0; num2 < 100; num2++) { ThingDef thingDef = DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.IsRangedWeapon && td.IsWeaponUsingProjectiles && !td.menuHidden).RandomElement(); bool flag = Rand.Value < 0.2f; bool flag2 = !flag && Rand.Value < 0.95f; BattleLogEntry_RangedFire battleLogEntry_RangedFire = new BattleLogEntry_RangedFire(RandomPawnForCombat(), flag ? null : RandomPawnForCombat(), flag2 ? null : thingDef, null, rf != 0); battleLogEntry_RangedFire.Debug_OverrideTicks(Rand.Int); stringBuilder6.AppendLine(battleLogEntry_RangedFire.ToGameStringFromPOV(null)); } Log.Message(stringBuilder6.ToString()); })); int num = ++rf; } list.Add(new DebugMenuOption("Ranged impact hit", DebugMenuOptionMode.Action, delegate { CreateDamagedDestroyedMenu(delegate(Action <List <BodyPartRecord>, List <bool> > bodyPartCreator) { StringBuilder stringBuilder5 = new StringBuilder(); for (int n = 0; n < 100; n++) { ThingDef weaponDef3 = DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.IsRangedWeapon && td.IsWeaponUsingProjectiles && !td.menuHidden).RandomElement(); List <BodyPartRecord> list6 = new List <BodyPartRecord>(); List <bool> list7 = new List <bool>(); bodyPartCreator(list6, list7); Pawn pawn2 = RandomPawnForCombat(); BattleLogEntry_RangedImpact battleLogEntry_RangedImpact3 = new BattleLogEntry_RangedImpact(RandomPawnForCombat(), pawn2, pawn2, weaponDef3, null, ThingDefOf.Wall); battleLogEntry_RangedImpact3.FillTargets(list6, list7, Rand.Chance(0.5f)); battleLogEntry_RangedImpact3.Debug_OverrideTicks(Rand.Int); stringBuilder5.AppendLine(battleLogEntry_RangedImpact3.ToGameStringFromPOV(null)); } Log.Message(stringBuilder5.ToString()); }); })); list.Add(new DebugMenuOption("Ranged impact miss", DebugMenuOptionMode.Action, delegate { StringBuilder stringBuilder4 = new StringBuilder(); for (int l = 0; l < 100; l++) { ThingDef weaponDef2 = DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.IsRangedWeapon && td.IsWeaponUsingProjectiles && !td.menuHidden).RandomElement(); BattleLogEntry_RangedImpact battleLogEntry_RangedImpact2 = new BattleLogEntry_RangedImpact(RandomPawnForCombat(), null, RandomPawnForCombat(), weaponDef2, null, ThingDefOf.Wall); battleLogEntry_RangedImpact2.Debug_OverrideTicks(Rand.Int); stringBuilder4.AppendLine(battleLogEntry_RangedImpact2.ToGameStringFromPOV(null)); } Log.Message(stringBuilder4.ToString()); })); list.Add(new DebugMenuOption("Ranged impact hit incorrect", DebugMenuOptionMode.Action, delegate { CreateDamagedDestroyedMenu(delegate(Action <List <BodyPartRecord>, List <bool> > bodyPartCreator) { StringBuilder stringBuilder3 = new StringBuilder(); for (int k = 0; k < 100; k++) { ThingDef weaponDef = DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.IsRangedWeapon && td.IsWeaponUsingProjectiles && !td.menuHidden).RandomElement(); List <BodyPartRecord> list4 = new List <BodyPartRecord>(); List <bool> list5 = new List <bool>(); bodyPartCreator(list4, list5); BattleLogEntry_RangedImpact battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(RandomPawnForCombat(), RandomPawnForCombat(), RandomPawnForCombat(), weaponDef, null, ThingDefOf.Wall); battleLogEntry_RangedImpact.FillTargets(list4, list5, Rand.Chance(0.5f)); battleLogEntry_RangedImpact.Debug_OverrideTicks(Rand.Int); stringBuilder3.AppendLine(battleLogEntry_RangedImpact.ToGameStringFromPOV(null)); } Log.Message(stringBuilder3.ToString()); }); })); foreach (RulePackDef transition in DefDatabase <RulePackDef> .AllDefsListForReading.Where((RulePackDef def) => def.defName.Contains("Transition") && !def.defName.Contains("Include"))) { list.Add(new DebugMenuOption(transition.defName, DebugMenuOptionMode.Action, delegate { StringBuilder stringBuilder2 = new StringBuilder(); for (int j = 0; j < 100; j++) { Pawn pawn = RandomPawnForCombat(); Pawn initiator = RandomPawnForCombat(); BodyPartRecord partRecord = pawn.health.hediffSet.GetNotMissingParts().RandomElement(); BattleLogEntry_StateTransition battleLogEntry_StateTransition = new BattleLogEntry_StateTransition(pawn, transition, initiator, HediffMaker.MakeHediff(DefDatabase <HediffDef> .AllDefsListForReading.RandomElement(), pawn, partRecord), pawn.RaceProps.body.AllParts.RandomElement()); battleLogEntry_StateTransition.Debug_OverrideTicks(Rand.Int); stringBuilder2.AppendLine(battleLogEntry_StateTransition.ToGameStringFromPOV(null)); } Log.Message(stringBuilder2.ToString()); })); } foreach (RulePackDef damageEvent in DefDatabase <RulePackDef> .AllDefsListForReading.Where((RulePackDef def) => def.defName.Contains("DamageEvent") && !def.defName.Contains("Include"))) { list.Add(new DebugMenuOption(damageEvent.defName, DebugMenuOptionMode.Action, delegate { CreateDamagedDestroyedMenu(delegate(Action <List <BodyPartRecord>, List <bool> > bodyPartCreator) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 100; i++) { List <BodyPartRecord> list2 = new List <BodyPartRecord>(); List <bool> list3 = new List <bool>(); bodyPartCreator(list2, list3); BattleLogEntry_DamageTaken battleLogEntry_DamageTaken = new BattleLogEntry_DamageTaken(RandomPawnForCombat(), damageEvent); battleLogEntry_DamageTaken.FillTargets(list2, list3, deflected: false); battleLogEntry_DamageTaken.Debug_OverrideTicks(Rand.Int); stringBuilder.AppendLine(battleLogEntry_DamageTaken.ToGameStringFromPOV(null)); } Log.Message(stringBuilder.ToString()); }); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }
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 current in orderedEnumerable) { PawnKindDef kind = current; Faction fac = FactionUtility.DefaultFactionFrom(kind.defaultFactionType); FloatMenuOption item = new FloatMenuOption(string.Concat(new object[] { 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; foreach (WorkTags workTags in Enum.GetValues(typeof(WorkTags))) { if (!dictionary.ContainsKey(workTags)) { dictionary.Add(workTags, 0); } if ((combinedDisabledWorkTags & workTags) != WorkTags.None) { Dictionary <WorkTags, int> dictionary2; WorkTags key; (dictionary2 = dictionary)[key = workTags] = dictionary2[key] + 1; } } pawn.Destroy(DestroyMode.Vanish); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(string.Concat(new object[] { "Sampled ", 1000, "x ", kind.defName, ":" })); stringBuilder.AppendLine("Worktags disabled"); foreach (WorkTags key2 in Enum.GetValues(typeof(WorkTags))) { int num = dictionary[key2]; stringBuilder.AppendLine(string.Concat(new object[] { " ", key2.ToString(), " ", num, " (", ((float)num / 1000f).ToStringPercent(), ")" })); } Log.Message(stringBuilder.ToString().TrimEndNewlines(), false); }, MenuOptionPriority.Default, null, null, 0f, null, null); list.Add(item); } Find.WindowStack.Add(new FloatMenu(list)); }
public static void RecruitDifficultiesSampled() { 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 current in orderedEnumerable) { PawnKindDef kind = current; Faction fac = FactionUtility.DefaultFactionFrom(kind.defaultFactionType); if (kind == PawnKindDefOf.WildMan) { fac = null; } FloatMenuOption item = new FloatMenuOption(kind.defName + " (" + kind.baseRecruitDifficulty.ToStringPercent() + ")", delegate { Dictionary <int, int> dictionary = new Dictionary <int, int>(); for (int i = 0; i < 21; i++) { dictionary.Add(i, 0); } for (int j = 0; j < 300; j++) { Pawn pawn = PawnGenerator.GeneratePawn(kind, fac); float num = pawn.RecruitDifficulty(Faction.OfPlayer); int num2 = Mathf.RoundToInt(num * 20f); Dictionary <int, int> dictionary2; int key; (dictionary2 = dictionary)[key = num2] = dictionary2[key] + 1; pawn.Destroy(DestroyMode.Vanish); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(string.Concat(new object[] { "Sampled ", 300, "x ", kind.defName, ":" })); for (int k = 0; k < 21; k++) { int num3 = dictionary[k]; stringBuilder.AppendLine(string.Concat(new object[] { " ", (k * 5).ToString(), " ", num3, " (", ((float)num3 / 300f).ToStringPercent(), ")" })); } Log.Message(stringBuilder.ToString().TrimEndNewlines(), false); }, MenuOptionPriority.Default, null, null, 0f, null, null); list.Add(item); } Find.WindowStack.Add(new FloatMenu(list)); }
public static void PawnKindGearSampled() { IOrderedEnumerable <PawnKindDef> orderedEnumerable = from k in DefDatabase <PawnKindDef> .AllDefs where k.RaceProps.ToolUser orderby k.combatPower select k; List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (PawnKindDef current in orderedEnumerable) { Faction fac = FactionUtility.DefaultFactionFrom(current.defaultFactionType); PawnKindDef kind = current; FloatMenuOption item = new FloatMenuOption(string.Concat(new object[] { kind.defName, " (", kind.combatPower, ")" }), delegate { DefMap <ThingDef, int> weapons = new DefMap <ThingDef, int>(); DefMap <ThingDef, int> apparel = new DefMap <ThingDef, int>(); DefMap <HediffDef, int> hediffs = new DefMap <HediffDef, int>(); for (int i = 0; i < 400; i++) { Pawn pawn = PawnGenerator.GeneratePawn(kind, fac); if (pawn.equipment.Primary != null) { DefMap <ThingDef, int> defMap; ThingDef def; (defMap = weapons)[def = pawn.equipment.Primary.def] = defMap[def] + 1; } foreach (Hediff current2 in pawn.health.hediffSet.hediffs) { DefMap <HediffDef, int> hediffs2; HediffDef def2; (hediffs2 = hediffs)[def2 = current2.def] = hediffs2[def2] + 1; } foreach (Apparel current3 in pawn.apparel.WornApparel) { DefMap <ThingDef, int> defMap; ThingDef def3; (defMap = apparel)[def3 = current3.def] = defMap[def3] + 1; } pawn.Destroy(DestroyMode.Vanish); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(string.Concat(new object[] { "Sampled ", 400, "x ", kind.defName, ":" })); stringBuilder.AppendLine("Weapons"); foreach (ThingDef current4 in from t in DefDatabase <ThingDef> .AllDefs orderby weapons[t] descending select t) { int num = weapons[current4]; if (num > 0) { stringBuilder.AppendLine(" " + current4.defName + " " + ((float)num / 400f).ToStringPercent()); } } stringBuilder.AppendLine(); stringBuilder.AppendLine("Apparel"); foreach (ThingDef current5 in from t in DefDatabase <ThingDef> .AllDefs orderby apparel[t] descending select t) { int num2 = apparel[current5]; if (num2 > 0) { stringBuilder.AppendLine(" " + current5.defName + " " + ((float)num2 / 400f).ToStringPercent()); } } stringBuilder.AppendLine(); stringBuilder.AppendLine("Tech hediffs"); foreach (HediffDef current6 in from h in DefDatabase <HediffDef> .AllDefs where h.spawnThingOnRemoved != null orderby hediffs[h] descending select h) { int num3 = hediffs[current6]; if (num3 > 0) { stringBuilder.AppendLine(" " + current6.defName + " " + ((float)num3 / 400f).ToStringPercent()); } } stringBuilder.AppendLine(); stringBuilder.AppendLine("Addiction hediffs"); foreach (HediffDef current7 in from h in DefDatabase <HediffDef> .AllDefs where h.IsAddiction orderby hediffs[h] descending select h) { int num4 = hediffs[current7]; if (num4 > 0) { stringBuilder.AppendLine(" " + current7.defName + " " + ((float)num4 / 400f).ToStringPercent()); } } stringBuilder.AppendLine(); stringBuilder.AppendLine("Other hediffs"); foreach (HediffDef current8 in from h in DefDatabase <HediffDef> .AllDefs where h.spawnThingOnRemoved == null && !h.IsAddiction orderby hediffs[h] descending select h) { int num5 = hediffs[current8]; if (num5 > 0) { stringBuilder.AppendLine(" " + current8.defName + " " + ((float)num5 / 400f).ToStringPercent()); } } Log.Message(stringBuilder.ToString().TrimEndNewlines(), false); }, MenuOptionPriority.Default, null, null, 0f, null, null); list.Add(item); } Find.WindowStack.Add(new FloatMenu(list)); }