예제 #1
0
        internal static void LogHeadwearApparelPairs()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("Listing all entries in allApparelPairs of headwear");
            foreach (ThingStuffPair current in from pa in PawnApparelGenerator.allApparelPairs
                     where PawnApparelGenerator.IsHeadwear(pa.thing)
                     orderby pa.thing.defName
                     select pa)
            {
                stringBuilder.AppendLine(current + "  - " + current.commonalityMultiplier);
            }
            Log.Message(stringBuilder.ToString());
        }
        private static void GenerateWorkingPossibleApparelSetFor(Pawn pawn, float money, bool headwearAllowed)
        {
            PawnApparelGenerator.workingSet.Reset(pawn.RaceProps.body, pawn.def);
            List <ThingDef> reqApparel = pawn.kindDef.apparelRequired;

            if (reqApparel != null)
            {
                int i;
                for (i = 0; i < reqApparel.Count; i++)
                {
                    ThingStuffPair pair = (from pa in PawnApparelGenerator.allApparelPairs
                                           where pa.thing == reqApparel[i]
                                           select pa).RandomElementByWeight((ThingStuffPair pa) => pa.Commonality);
                    PawnApparelGenerator.workingSet.Add(pair);
                    money -= pair.Price;
                }
            }
            int specialSeed = Rand.Int;

            while (!(Rand.Value < 0.10000000149011612))
            {
                Predicate <ThingStuffPair> predicate = delegate(ThingStuffPair pa)
                {
                    if (pa.Price > money)
                    {
                        return(false);
                    }
                    if (!headwearAllowed && PawnApparelGenerator.IsHeadwear(pa.thing))
                    {
                        return(false);
                    }
                    if (pa.stuff != null && !pawn.Faction.def.CanUseStuffForApparel(pa.stuff))
                    {
                        return(false);
                    }
                    if (PawnApparelGenerator.workingSet.PairOverlapsAnything(pa))
                    {
                        return(false);
                    }
                    if (!pawn.kindDef.apparelTags.NullOrEmpty())
                    {
                        bool flag2 = false;
                        int  num   = 0;
                        while (num < pawn.kindDef.apparelTags.Count)
                        {
                            int num2 = 0;
                            while (num2 < pa.thing.apparel.tags.Count)
                            {
                                if (!(pawn.kindDef.apparelTags[num] == pa.thing.apparel.tags[num2]))
                                {
                                    num2++;
                                    continue;
                                }
                                flag2 = true;
                                break;
                            }
                            if (!flag2)
                            {
                                num++;
                                continue;
                            }
                            break;
                        }
                        if (!flag2)
                        {
                            return(false);
                        }
                    }
                    if (pa.thing.generateAllowChance < 1.0 && Rand.ValueSeeded(specialSeed ^ pa.thing.index ^ 64128343) > pa.thing.generateAllowChance)
                    {
                        return(false);
                    }
                    return(true);
                };
                for (int j = 0; j < PawnApparelGenerator.allApparelPairs.Count; j++)
                {
                    if (predicate(PawnApparelGenerator.allApparelPairs[j]))
                    {
                        PawnApparelGenerator.usableApparel.Add(PawnApparelGenerator.allApparelPairs[j]);
                    }
                }
                ThingStuffPair pair2 = default(ThingStuffPair);
                bool           flag  = ((IEnumerable <ThingStuffPair>)PawnApparelGenerator.usableApparel).TryRandomElementByWeight <ThingStuffPair>((Func <ThingStuffPair, float>)((ThingStuffPair pa) => pa.Commonality), out pair2);
                PawnApparelGenerator.usableApparel.Clear();
                if (!flag)
                {
                    break;
                }
                PawnApparelGenerator.workingSet.Add(pair2);
                money -= pair2.Price;
            }
        }
예제 #3
0
        private static void GenerateWorkingPossibleApparelSetFor(Pawn pawn, float money, bool headwearAllowed)
        {
            PawnApparelGenerator.workingSet.Reset(pawn.RaceProps.body, pawn.def);
            List <ThingDef> reqApparel = pawn.kindDef.apparelRequired;

            if (reqApparel != null)
            {
                int i;
                for (i = 0; i < reqApparel.Count; i++)
                {
                    ThingStuffPair pair = (from pa in PawnApparelGenerator.allApparelPairs
                                           where pa.thing == reqApparel[i]
                                           select pa).RandomElementByWeight((ThingStuffPair pa) => pa.Commonality);
                    PawnApparelGenerator.workingSet.Add(pair);
                    money -= pair.Price;
                }
            }
            int specialSeed = Rand.Int;

            while (Rand.Value >= 0.1f)
            {
                Predicate <ThingStuffPair> predicate = delegate(ThingStuffPair pa)
                {
                    if (pa.Price > money)
                    {
                        return(false);
                    }
                    if (!headwearAllowed && PawnApparelGenerator.IsHeadwear(pa.thing))
                    {
                        return(false);
                    }
                    if (pa.stuff != null && !pawn.Faction.def.CanUseStuffForApparel(pa.stuff))
                    {
                        return(false);
                    }
                    if (PawnApparelGenerator.workingSet.PairOverlapsAnything(pa))
                    {
                        return(false);
                    }
                    if (!pawn.kindDef.apparelTags.NullOrEmpty <string>())
                    {
                        bool flag2 = false;
                        for (int i = 0; i < pawn.kindDef.apparelTags.Count; i++)
                        {
                            for (int k = 0; k < pa.thing.apparel.tags.Count; k++)
                            {
                                if (pawn.kindDef.apparelTags[i] == pa.thing.apparel.tags[k])
                                {
                                    flag2 = true;
                                    break;
                                }
                            }
                            if (flag2)
                            {
                                break;
                            }
                        }
                        if (!flag2)
                        {
                            return(false);
                        }
                    }
                    return(pa.thing.generateAllowChance >= 1f || Rand.ValueSeeded(specialSeed ^ (int)pa.thing.index ^ 64128343) <= pa.thing.generateAllowChance);
                };
                for (int j = 0; j < PawnApparelGenerator.allApparelPairs.Count; j++)
                {
                    if (predicate(PawnApparelGenerator.allApparelPairs[j]))
                    {
                        PawnApparelGenerator.usableApparel.Add(PawnApparelGenerator.allApparelPairs[j]);
                    }
                }
                ThingStuffPair pair2;
                bool           flag = PawnApparelGenerator.usableApparel.TryRandomElementByWeight((ThingStuffPair pa) => pa.Commonality, out pair2);
                PawnApparelGenerator.usableApparel.Clear();
                if (!flag)
                {
                    return;
                }
                PawnApparelGenerator.workingSet.Add(pair2);
                money -= pair2.Price;
            }
        }