public static void GenerateStartingApparelFor(Pawn pawn, PawnGenerationRequest request) { if (pawn.RaceProps.ToolUser && pawn.RaceProps.IsFlesh) { if (pawn.Faction == null) { Log.Error("Cannot generate apparel for faction-less pawn " + pawn); } else { pawn.apparel.DestroyAll(DestroyMode.Vanish); float randomInRange = pawn.kindDef.apparelMoney.RandomInRange; float mapTemperature = default(float); NeededWarmth neededWarmth = PawnApparelGenerator.ApparelWarmthNeededNow(pawn, request, out mapTemperature); bool flag = Rand.Value < pawn.kindDef.apparelAllowHeadwearChance; PawnApparelGenerator.debugSb = null; if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb = new StringBuilder(); PawnApparelGenerator.debugSb.AppendLine("Generating apparel for " + pawn); PawnApparelGenerator.debugSb.AppendLine("Money: " + randomInRange.ToString("F0")); PawnApparelGenerator.debugSb.AppendLine("Needed warmth: " + neededWarmth); PawnApparelGenerator.debugSb.AppendLine("Headwear allowed: " + flag); } if (randomInRange >= 0.0010000000474974513) { int num = 0; while (true) { PawnApparelGenerator.GenerateWorkingPossibleApparelSetFor(pawn, randomInRange, flag); if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.Append(num.ToString().PadRight(5) + "Trying: " + PawnApparelGenerator.workingSet.ToString()); } if (num < 10 && Rand.Value < 0.85000002384185791) { float num2 = Rand.Range(0.45f, 0.8f); float totalPrice = PawnApparelGenerator.workingSet.TotalPrice; if (totalPrice < randomInRange * num2) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Spent $" + totalPrice.ToString("F0") + ", < " + ((float)(num2 * 100.0)).ToString("F0") + "% of money."); } goto IL_036d; } } if (num < 20 && Rand.Value < 0.97000002861022949 && !PawnApparelGenerator.workingSet.Covers(BodyPartGroupDefOf.Torso)) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Does not cover torso."); } } else if (num < 30 && Rand.Value < 0.800000011920929 && PawnApparelGenerator.workingSet.CoatButNoShirt()) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Coat but no shirt."); } } else { if (num < 50) { bool mustBeSafe = num < 17; if (!PawnApparelGenerator.workingSet.SatisfiesNeededWarmth(neededWarmth, mustBeSafe, mapTemperature)) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Wrong warmth."); } goto IL_036d; } } if (num >= 80) { break; } if (!PawnApparelGenerator.workingSet.IsNaked(pawn.gender)) { break; } if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Naked."); } } goto IL_036d; IL_036d: num++; } if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.Append(" -- Approved! Total price: $" + PawnApparelGenerator.workingSet.TotalPrice.ToString("F0") + ", TotalInsulationCold: " + PawnApparelGenerator.workingSet.TotalInsulationCold); } } if ((!pawn.kindDef.apparelIgnoreSeasons || request.ForceAddFreeWarmLayerIfNeeded) && !PawnApparelGenerator.workingSet.SatisfiesNeededWarmth(neededWarmth, false, 21f)) { PawnApparelGenerator.workingSet.AddFreeWarmthAsNeeded(neededWarmth); } if (DebugViewSettings.logApparelGeneration) { Log.Message(PawnApparelGenerator.debugSb.ToString()); } PawnApparelGenerator.workingSet.GiveToPawn(pawn); PawnApparelGenerator.workingSet.Reset(null, null); } } }
public static void GenerateStartingApparelFor(Pawn pawn, PawnGenerationRequest request) { if (!pawn.RaceProps.ToolUser || !pawn.RaceProps.IsFlesh) { return; } pawn.apparel.DestroyAll(DestroyMode.Vanish); float randomInRange = pawn.kindDef.apparelMoney.RandomInRange; float mapTemperature; NeededWarmth neededWarmth = PawnApparelGenerator.ApparelWarmthNeededNow(pawn, request, out mapTemperature); bool flag = Rand.Value < pawn.kindDef.apparelAllowHeadgearChance; PawnApparelGenerator.debugSb = null; if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb = new StringBuilder(); PawnApparelGenerator.debugSb.AppendLine("Generating apparel for " + pawn); PawnApparelGenerator.debugSb.AppendLine("Money: " + randomInRange.ToString("F0")); PawnApparelGenerator.debugSb.AppendLine("Needed warmth: " + neededWarmth); PawnApparelGenerator.debugSb.AppendLine("Headgear allowed: " + flag); } if (randomInRange < 0.001f) { PawnApparelGenerator.GenerateWorkingPossibleApparelSetFor(pawn, randomInRange, flag); } else { int num = 0; for (;;) { PawnApparelGenerator.GenerateWorkingPossibleApparelSetFor(pawn, randomInRange, flag); if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.Append(num.ToString().PadRight(5) + "Trying: " + PawnApparelGenerator.workingSet.ToString()); } if (num >= 10 || Rand.Value >= 0.85f) { goto IL_1EB; } float num2 = Rand.Range(0.45f, 0.8f); float totalPrice = PawnApparelGenerator.workingSet.TotalPrice; if (totalPrice >= randomInRange * num2) { goto IL_1EB; } if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(string.Concat(new string[] { " -- Failed: Spent $", totalPrice.ToString("F0"), ", < ", (num2 * 100f).ToString("F0"), "% of money." })); } IL_35E: num++; continue; IL_1EB: if (num < 20 && Rand.Value < 0.97f && !PawnApparelGenerator.workingSet.Covers(BodyPartGroupDefOf.Torso)) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Does not cover torso."); } goto IL_35E; } if (num < 30 && Rand.Value < 0.8f && PawnApparelGenerator.workingSet.CoatButNoShirt()) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Coat but no shirt."); } goto IL_35E; } if (num < 50) { bool mustBeSafe = num < 17; if (!PawnApparelGenerator.workingSet.SatisfiesNeededWarmth(neededWarmth, mustBeSafe, mapTemperature)) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Wrong warmth."); } goto IL_35E; } } if (num < 80 && PawnApparelGenerator.workingSet.IsNaked(pawn.gender)) { if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.AppendLine(" -- Failed: Naked."); } goto IL_35E; } break; } if (DebugViewSettings.logApparelGeneration) { PawnApparelGenerator.debugSb.Append(string.Concat(new object[] { " -- Approved! Total price: $", PawnApparelGenerator.workingSet.TotalPrice.ToString("F0"), ", TotalInsulationCold: ", PawnApparelGenerator.workingSet.TotalInsulationCold })); } } if ((!pawn.kindDef.apparelIgnoreSeasons || request.ForceAddFreeWarmLayerIfNeeded) && !PawnApparelGenerator.workingSet.SatisfiesNeededWarmth(neededWarmth, true, mapTemperature)) { PawnApparelGenerator.workingSet.AddFreeWarmthAsNeeded(neededWarmth, mapTemperature); } if (DebugViewSettings.logApparelGeneration) { Log.Message(PawnApparelGenerator.debugSb.ToString(), false); } PawnApparelGenerator.workingSet.GiveToPawn(pawn); PawnApparelGenerator.workingSet.Reset(null, null); if (pawn.kindDef.apparelColor != Color.white) { List <Apparel> wornApparel = pawn.apparel.WornApparel; for (int i = 0; i < wornApparel.Count; i++) { wornApparel[i].SetColor(pawn.kindDef.apparelColor, false); } } }