private static void Initialize(BackstoryStats b, StringBuilder sb) { if (b != null) { try { if (b.Initialize() && Defs.ApplyStatsAutoDefs.Contains(b.Backstory)) { try { b.ApplyStats(b.Backstory); sb.AppendLine($"- Backstory: {b.Backstory.identifier}"); } catch (Exception e) { Log.Error("Failed to apply settings to Backstory [" + b.identifier + "] due to " + e.Message); } } else { Log.Warning("Unable to initialize Backstory " + b.identifier); } } catch (Exception e) { Log.Error("Failed to load Backstory [" + b.identifier + "] due to " + e.Message); } } }
public BackstoryWidget(Backstory backstory, DefType type) : base(backstory, type) { if (backstory.skillGainsResolved == null) { backstory.skillGainsResolved = new Dictionary <SkillDef, int>(); } if (backstory.forcedTraits == null) { backstory.forcedTraits = new List <TraitEntry>(); } if (backstory.disallowedTraits == null) { backstory.disallowedTraits = new List <TraitEntry>(); } this.Backstory = backstory; this.type = type; this.inputWidgets = new List <IInputWidget>() { new BoolInputWidget <Backstory>(this.Backstory, "Shuffleable", b => b.shuffleable, (b, v) => b.shuffleable = v), new EnumInputWidget <Backstory, BackstorySlot>(this.Backstory, "Slot", 200, b => b.slot, (b, v) => b.slot = v), new DefInputWidget <Backstory, BodyTypeDef>(this.Backstory, "Body Type Global", 200, b => BackstoryStats.GetBodyTypeGlobal(b), (b, v) => BackstoryStats.SetBodyTypeGlobal(b, v), true), new DefInputWidget <Backstory, BodyTypeDef>(this.Backstory, "Body Type Male", 200, b => BackstoryStats.GetBodyTypeMale(b), (b, v) => BackstoryStats.SetBodyTypeMale(b, v), true, d => d == BodyTypeDefOf.Female), new DefInputWidget <Backstory, BodyTypeDef>(this.Backstory, "Body Type Female", 200, b => BackstoryStats.GetBodyTypeFemale(b), (b, v) => BackstoryStats.SetBodyTypeFemale(b, v), true, d => d == BodyTypeDefOf.Male), }; var dic = new SortedDictionary <string, WorkTags>(); foreach (var v in Enum.GetValues(typeof(WorkTags)).Cast <WorkTags>()) { dic.Add(v.ToString(), v); } this.workTags = new List <WorkTags>(dic.Values); dic.Clear(); dic = null; this.workDisables = new PlusMinusArgs <WorkTags>() { allItems = this.workTags, isBeingUsed = v => (this.Backstory.workDisables & v) == v, onAdd = v => this.Backstory.workDisables |= v, onRemove = v => this.Backstory.workDisables &= ~v, getDisplayName = v => v.ToString() }; this.requiredWorkTags = new PlusMinusArgs <WorkTags>() { allItems = this.workTags, isBeingUsed = v => (this.Backstory.requiredWorkTags & v) == v, onAdd = v => this.Backstory.requiredWorkTags |= v, onRemove = v => this.Backstory.requiredWorkTags &= ~v, getDisplayName = v => v.ToString() }; this.skillGainsPlusMinus = new PlusMinusArgs <SkillDef>() { allItems = Util.SortedDefList <SkillDef>(), beingUsed = () => this.Backstory.skillGainsResolved.Keys, onAdd = v => { this.Backstory.skillGainsResolved[v] = 0; this.skillGains.Add(this.CreateSkillGainsInput(v)); }, onRemove = v => { this.Backstory.skillGainsResolved.Remove(v); for (int i = 0; i < this.skillGains.Count; ++i) { if (this.skillGains[i].DisplayLabel == Util.GetLabel(v)) { this.skillGains.RemoveAt(i); break; } } }, getDisplayName = v => Util.GetLabel(v), }; this.forcedTraitsPlusMinus = new PlusMinusArgs <TraitDef>() { allItems = Util.SortedDefList <TraitDef>(), beingUsed = () => Util.ConvertItems(this.Backstory.forcedTraits, v => v.def), onAdd = v => { TraitEntry te = new TraitEntry(v, 0); this.Backstory.forcedTraits.Add(te); this.forcedTraits.Add(this.CreateTraitEntryInput(te)); this.RemoveDisallowedTraits(v); }, onRemove = v => { this.RemoveForcedTraits(v); }, getDisplayName = v => Util.GetLabel(v), }; this.disallowedTraitsPlusMinus = new PlusMinusArgs <TraitDef>() { allItems = Util.SortedDefList <TraitDef>(), beingUsed = () => Util.ConvertItems(this.Backstory.disallowedTraits, v => v.def), onAdd = v => { TraitEntry te = new TraitEntry(v, 0); this.Backstory.disallowedTraits.Add(te); this.disallowedTraits.Add(this.CreateTraitEntryInput(te)); this.RemoveForcedTraits(v); }, onRemove = v => { this.RemoveDisallowedTraits(v); }, getDisplayName = v => Util.GetLabel(v), }; this.Rebuild(); }