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