public TextPlusMinusInputWidget(string label, float labelWidth, List <string> items) { this.label = label; this.labelWidth = labelWidth; this.items = items; args = new PlusMinusArgs <string>() { getDisplayName = s => s, onRemove = s => this.items.Remove(s), beingUsed = () => this.items, addArgs = new FloatOptionsArgs <string>() { skipListCustomOnly = true, onCustomOption = () => Find.WindowStack.Add(new Dialog_Name( "Tag", delegate(string s) { this.items.Add(s); }, delegate(string s) { return(s.Trim().Length > 0 && !this.items.Contains(s)); })), }, removeArgs = new FloatOptionsArgs <string>() { getDisplayName = (s) => s, items = this.items, onSelect = (s) => this.items.Remove(s), }, }; }
public DefPlusMinusInputWidget(string label, float labelWidth, List <D> items) { this.label = label; this.labelWidth = labelWidth; this.items = items; args = new PlusMinusArgs <D>() { getDisplayName = def => Util.GetLabel(def), allItems = DefDatabase <D> .AllDefs, onAdd = def => Util.AddTo(this.items, def), onRemove = def => Util.RemoveFrom(this.items, def), beingUsed = () => this.items }; }
public ApparelPropertiesWidget(ApparelProperties apparelProperties) { this.apparelProperties = apparelProperties; this.inputWidgets = new List <IInputWidget>() { // this.useWornGraphicMask == s.useWornGraphicMask && // this.canBeGeneratedToSatisfyWarmth == s.canBeGeneratedToSatisfyWarmth && // this.gender == s.gender && new FloatInputWidget <ApparelProperties>(this.apparelProperties, "Wear Per Day", s => s.wearPerDay, (s, v) => s.wearPerDay = v), new BoolInputWidget <ApparelProperties>(this.apparelProperties, "Care If Worn By Corpse", s => s.careIfWornByCorpse, (s, v) => s.careIfWornByCorpse = v), new BoolInputWidget <ApparelProperties>(this.apparelProperties, "Hat Rendered Front OfFace", s => s.hatRenderedFrontOfFace, (s, v) => s.hatRenderedFrontOfFace = v), new BoolInputWidget <ApparelProperties>(this.apparelProperties, "Use Deflect Metal Effect", s => s.useDeflectMetalEffect, (s, v) => s.useDeflectMetalEffect = v), new BoolInputWidget <ApparelProperties>(this.apparelProperties, "Use Worn Graphic Mask", s => s.useWornGraphicMask, (s, b) => s.useWornGraphicMask = b), new BoolInputWidget <ApparelProperties>(this.apparelProperties, "Can Be Generated for Warmth", s => s.canBeGeneratedToSatisfyWarmth, (s, b) => s.canBeGeneratedToSatisfyWarmth = b), new EnumInputWidget <ApparelProperties, Gender>(this.apparelProperties, "Gender", 100f, s => s.gender, (s, v) => s.gender = v), new TextPlusMinusInputWidget("Tags", 100f, () => this.apparelProperties.tags) }; this.bodyPartGroupArgs = new WindowUtil.PlusMinusArgs <BodyPartGroupDef>() { allItems = DefDatabase <BodyPartGroupDef> .AllDefs, beingUsed = () => this.apparelProperties?.bodyPartGroups, onAdd = v => this.apparelProperties.bodyPartGroups.Add(v), onRemove = v => this.apparelProperties.bodyPartGroups.Remove(v), getDisplayName = v => Util.GetLabel(v), }; this.apparelLayerArgs = new WindowUtil.PlusMinusArgs <ApparelLayerDef>() { allItems = DefDatabase <ApparelLayerDef> .AllDefs, beingUsed = () => this.apparelProperties?.layers, onAdd = v => this.apparelProperties.layers.Add(v), onRemove = v => this.apparelProperties.layers.Remove(v), getDisplayName = v => Util.GetLabel(v), }; }
public ABuildableDefWidget(D def, DefType type) : base(def, type) { if (base.Def.statBases == null) { base.Def.statBases = new List <StatModifier>(); } this.inputWidgets = new List <IInputWidget>() { new EnumInputWidget <D, Traversability>(base.Def, "Passability", 200, d => d.passability, (d, v) => d.passability = v), new IntInputWidget <D>(base.Def, "Path Cost", d => d.pathCost, (d, v) => d.pathCost = v), new BoolInputWidget <D>(base.Def, "Path Cost Ignore Repeat", d => d.pathCostIgnoreRepeat, (d, v) => d.pathCostIgnoreRepeat = v), new FloatInputWidget <D>(base.Def, "Fertility", d => d.fertility, (d, v) => d.fertility = v), new IntInputWidget <D>(base.Def, "Cost Stuff Count", d => d.costStuffCount, (d, v) => d.costStuffCount = v), new IntInputWidget <D>(base.Def, "Placing Draggable Dimensions", d => d.placingDraggableDimensions, (d, v) => d.placingDraggableDimensions = v), new BoolInputWidget <D>(base.Def, "Clear Building Area", d => d.clearBuildingArea, (d, v) => d.clearBuildingArea = v), new FloatInputWidget <D>(base.Def, "Resources Fraction When Deconstructed", d => d.resourcesFractionWhenDeconstructed, (d, v) => d.resourcesFractionWhenDeconstructed = v), new IntInputWidget <D>(base.Def, "Construction Skill Prerequisite", d => d.constructionSkillPrerequisite, (d, v) => d.constructionSkillPrerequisite = v), new EnumInputWidget <D, TechLevel>(base.Def, "Min Tech Level To Build", 200, d => d.minTechLevelToBuild, (d, v) => d.minTechLevelToBuild = v), new EnumInputWidget <D, TechLevel>(base.Def, "Max Tech Level To Build", 200, d => d.maxTechLevelToBuild, (d, v) => d.maxTechLevelToBuild = v), new EnumInputWidget <D, AltitudeLayer>(base.Def, "Altitude Layer", 200, d => d.altitudeLayer, (d, v) => d.altitudeLayer = v), new BoolInputWidget <D>(base.Def, "Menu Hidden", d => d.menuHidden, (d, v) => d.menuHidden = v), new FloatInputWidget <D>(base.Def, "Special Display Radius", d => d.specialDisplayRadius, (d, v) => d.specialDisplayRadius = v), new DefInputWidget <D, TerrainAffordanceDef>(base.Def, "Terrain Affordance Needed", 200, d => d.terrainAffordanceNeeded, (d, v) => d.terrainAffordanceNeeded = v, true), new DefInputWidget <D, EffecterDef>(base.Def, "Repair Effect", 200, d => d.repairEffect, (d, v) => d.repairEffect = v, true), new DefInputWidget <D, EffecterDef>(base.Def, "Construct Effect", 200, d => d.constructEffect, (d, v) => d.constructEffect = v, true), new DefInputWidget <D, DesignationCategoryDef>(base.Def, "Designation Category", 200, d => d.designationCategory, (d, v) => d.designationCategory = v, true), new DefInputWidget <D, DesignatorDropdownGroupDef>(base.Def, "Designator Dropdown", 200, d => d.designatorDropdown, (d, v) => d.designatorDropdown = v, true), new DefInputWidget <D, KeyBindingDef>(base.Def, "Key Binding", 200, d => d.designationHotKey, (d, v) => d.designationHotKey = v, true), new DefInputWidget <D, ThingDef>(base.Def, "Blueprint", 200, d => d.blueprintDef, (d, v) => d.blueprintDef = v, true), new DefInputWidget <D, ThingDef>(base.Def, "Install Blueprint", 200, d => d.installBlueprintDef, (d, v) => d.installBlueprintDef = v, true), new DefInputWidget <D, ThingDef>(base.Def, "Frame", 200, d => d.frameDef, (d, v) => d.frameDef = v, true), new EnumInputWidget <D, Direction>(base.Def, "Default Placing Rotation", 200, d => { switch (d.defaultPlacingRot.AsAngle) { case 0f: return(Direction.North); case 90f: return(Direction.East); case 180f: return(Direction.South); default: return(Direction.West); } }, (d, v) => { switch (v) { case Direction.North: d.defaultPlacingRot = Rot4.North; break; case Direction.East: d.defaultPlacingRot = Rot4.East; break; case Direction.South: d.defaultPlacingRot = Rot4.South; break; default: d.defaultPlacingRot = Rot4.West; break; } }), }; this.statBasesPlusMinus = new WindowUtil.PlusMinusArgs <StatDef>() { allItems = DefDatabase <StatDef> .AllDefs, getDisplayName = d => Util.GetLabel(d), beingUsed = () => { List <StatDef> l = new List <StatDef>(base.Def.statBases.Count); base.Def.statBases.ForEach(v => l.Add(v.stat)); return(l); }, onAdd = v => { StatModifier sm = new StatModifier() { stat = v, value = 0 }; base.Def.statBases.Add(sm); this.statBases.Add(this.CreateFloatInput(sm)); }, onRemove = v => { base.Def.statBases.RemoveAll(sm => sm.stat == v); this.statBases.RemoveAll(w => w.Parent.stat == v); }, }; }
public TraitDegreeDataWidget(TraitDegreeData data) { if (data.disallowedMentalStates == null) { data.disallowedMentalStates = new List <MentalStateDef>(); } if (data.disallowedInspirations == null) { data.disallowedInspirations = new List <InspirationDef>(); } if (data.theOnlyAllowedMentalBreaks == null) { data.theOnlyAllowedMentalBreaks = new List <MentalBreakDef>(); } this.data = data; this.inputWidgets = new List <IInputWidget>() { //new IntInputWidget<TraitDegreeData>(this.data, "Degree", d => d.degree, (d, v) => d.degree = v), new FloatInputWidget <TraitDegreeData>(this.data, "Commonality", d => d.commonality, (d, v) => d.commonality = v), new FloatInputWidget <TraitDegreeData>(this.data, "Social Fight Chance Factor", d => d.socialFightChanceFactor, (d, v) => d.socialFightChanceFactor = v), new FloatInputWidget <TraitDegreeData>(this.data, "Market Value Factor Offset", d => d.marketValueFactorOffset, (d, v) => d.marketValueFactorOffset = v), new FloatInputWidget <TraitDegreeData>(this.data, "Random Disease Mtb Days", d => d.randomDiseaseMtbDays, (d, v) => d.randomDiseaseMtbDays = v), new DefInputWidget <TraitDegreeData, ThinkTreeDef>(this.data, "Think Tree", 200, d => d.thinkTree, (d, v) => d.thinkTree = v, true), new DefInputWidget <TraitDegreeData, MentalStateDef>(this.data, "Random Mental State", 200, d => d.randomMentalState, (d, v) => d.randomMentalState = v, true), new DefPlusMinusInputWidget <InspirationDef>("Disallowed Inspirations", 200, this.data.disallowedInspirations), new DefPlusMinusInputWidget <MentalStateDef>("Disallowed Mental States", 200, this.data.disallowedMentalStates), new DefPlusMinusInputWidget <MentalBreakDef>("The Only Allowed Mental Breaks", 200, this.data.theOnlyAllowedMentalBreaks), }; this.skillGainsArgs = new WindowUtil.PlusMinusArgs <SkillDef>() { getDisplayName = v => v.label, allItems = DefDatabase <SkillDef> .AllDefs, beingUsed = () => { List <SkillDef> l = new List <SkillDef>(); if (this.data.skillGains != null) { foreach (var kv in this.data.skillGains) { l.Add(kv.Key); } } return(l); }, onAdd = def => { this.data.skillGains.Add(def, 0); this.skillGains.Add(this.CreateSkillGainInput(def)); }, onRemove = def => { this.skillGains.RemoveAll(v => v.Parent == def); this.data.skillGains.Remove(def); } }; this.statOffsetsArgs = new WindowUtil.PlusMinusArgs <StatDef>() { getDisplayName = v => v.label, allItems = DefDatabase <StatDef> .AllDefs, beingUsed = () => { List <StatDef> l = new List <StatDef>(); if (this.data.statOffsets != null) { foreach (var v in this.data.statOffsets) { l.Add(v.stat); } } return(l); }, onAdd = def => { StatModifier sm = new StatModifier() { stat = def, value = 0 }; this.data.statOffsets = Util.AddTo(this.data.statOffsets, sm); this.statOffsets = Util.AddTo(this.statOffsets, this.CreateStatModifierInput(sm)); }, onRemove = def => { this.statOffsets?.RemoveAll(v => v.Parent.stat == def); this.data.statOffsets?.RemoveAll(v => v.stat == def); } }; this.statFactorsArgs = new WindowUtil.PlusMinusArgs <StatDef>() { getDisplayName = v => v.label, allItems = DefDatabase <StatDef> .AllDefs, beingUsed = () => { List <StatDef> l = new List <StatDef>(); if (this.data.statFactors != null) { foreach (var v in this.data.statFactors) { l.Add(v.stat); } } return(l); }, onAdd = def => { StatModifier sm = new StatModifier() { stat = def, value = 0 }; this.data.statFactors = Util.AddTo(this.data.statFactors, sm); this.statFactors = Util.AddTo(this.statFactors, this.CreateStatModifierInput(sm)); }, onRemove = def => { this.statFactors?.RemoveAll(v => v.Parent.stat == def); this.data.statFactors?.RemoveAll(v => v.stat == def); } }; this.ResetBuffers(); }
public StuffPropertiesWidget(StuffProperties sp) { this.stuffProperties = sp; this.inputWidgets = new List <IInputWidget>() { new FloatInputWidget <StuffProperties>(this.stuffProperties, "Commonality", d => d.commonality, (d, v) => d.commonality = v), new ColorWidget <StuffProperties>(this.stuffProperties, "Color", d => d.color, (d, v) => d.color = v), new BoolInputWidget <StuffProperties>(this.stuffProperties, "Allow Color Generators", d => d.allowColorGenerators, (d, v) => d.allowColorGenerators = v), new DefInputWidget <StuffProperties, EffecterDef>(this.stuffProperties, "Construct Effect", 200, d => d.constructEffect, (d, v) => d.constructEffect = v, true), new DefInputWidget <StuffProperties, StuffAppearanceDef>(this.stuffProperties, "Appearance", 200, d => d.appearance, (d, v) => d.appearance = v, true), new DefInputWidget <StuffProperties, SoundDef>(this.stuffProperties, "Sound Impact", 200, d => d.soundImpactStuff, (d, v) => d.soundImpactStuff = v, true), new DefInputWidget <StuffProperties, SoundDef>(this.stuffProperties, "Sound Melee Hit Sharp", 200, d => d.soundMeleeHitSharp, (d, v) => d.soundMeleeHitSharp = v, true), new DefInputWidget <StuffProperties, SoundDef>(this.stuffProperties, "Sound Melee Hit Blunt", 200, d => d.soundMeleeHitBlunt, (d, v) => d.soundMeleeHitBlunt = v, true), }; this.statOffsetsArgs = new WindowUtil.PlusMinusArgs <StatDef>() { getDisplayName = v => v.label, allItems = DefDatabase <StatDef> .AllDefs, beingUsed = () => { List <StatDef> l = new List <StatDef>(); if (this.stuffProperties.statOffsets != null) { foreach (var v in this.stuffProperties.statOffsets) { l.Add(v.stat); } } return(l); }, onAdd = def => { StatModifier sm = new StatModifier() { stat = def, value = 0 }; this.stuffProperties.statOffsets = Util.AddTo(this.stuffProperties.statOffsets, sm); this.statOffsets = Util.AddTo(this.statOffsets, this.CreateStatModifierInput(sm)); }, onRemove = def => { this.statOffsets?.RemoveAll(v => v.Parent.stat == def); this.stuffProperties.statOffsets?.RemoveAll(v => v.stat == def); } }; this.statFactorsArgs = new WindowUtil.PlusMinusArgs <StatDef>() { getDisplayName = v => v.label, allItems = DefDatabase <StatDef> .AllDefs, beingUsed = () => { List <StatDef> l = new List <StatDef>(); if (this.stuffProperties.statFactors != null) { foreach (var v in this.stuffProperties.statFactors) { l.Add(v.stat); } } return(l); }, onAdd = def => { StatModifier sm = new StatModifier() { stat = def, value = 0 }; this.stuffProperties.statFactors = Util.AddTo(this.stuffProperties.statFactors, sm); this.statFactors = Util.AddTo(this.statFactors, this.CreateStatModifierInput(sm)); }, onRemove = def => { this.statFactors?.RemoveAll(v => v.Parent.stat == def); this.stuffProperties.statFactors?.RemoveAll(v => v.stat == def); } }; this.ResetBuffers(); }