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);
                }
            }
        }