예제 #1
0
 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();
        }