private void UpdateHairOptions(Pawn pawn, CarouselBoxes <HairDef> carouselBoxes, bool limitByGender) { var hairs = new List <HairDef>(); if (limitByGender) { hairs = PS_HairLoader.HairByGender(pawn.gender); } else { hairs = PS_HairLoader.AllHairs; } carouselBoxes.ClearOptions(); foreach (var hair in hairs) { carouselBoxes.AddOption(hair.defName, hair); } var currentHairOption = carouselBoxes.Options.Where(x => x.Value == Pawn.story.hairDef).FirstOrDefault(); if (currentHairOption == null) { Log.Warning(string.Format("PS_BarberPod: Failed to find current hair: {0}", this.Pawn.story.hairDef.defName)); carouselBoxes.CurrentIndex = 0; } else { carouselBoxes.CurrentIndex = currentHairOption.Index; } ChangeHairStyle(pawn, carouselBoxes.CurrentOptionValue); }
private void UpdateBodyTypeOptions(Pawn pawn, CarouselBoxes <BodyTypeDef> carouselBoxes, bool limitByGender) { if (carouselBoxes.Options?.Any() ?? false) { carouselBoxes.ClearOptions(); } BodyCarouselBoxes.AddOption("Thin", BodyTypeDefOf.Thin); BodyCarouselBoxes.AddOption("Fat", BodyTypeDefOf.Fat); BodyCarouselBoxes.AddOption("Hulk", BodyTypeDefOf.Hulk); if (!limitByGender || pawn.gender == Gender.Male) { BodyCarouselBoxes.AddOption("Male", BodyTypeDefOf.Male); } if (!limitByGender || pawn.gender == Gender.Female) { BodyCarouselBoxes.AddOption("Female", BodyTypeDefOf.Female); } var currentBodyType = pawn.story.bodyType; var currentBodyTypeOption = carouselBoxes.Options.Where(x => x.Value == currentBodyType).FirstOrDefault(); if (currentBodyType == null) { Log.Warning(string.Format("PS_BarberPod: Failed to find body type: {0}", pawn.story.bodyType.ToString())); carouselBoxes.CurrentIndex = 0; } else { carouselBoxes.CurrentIndex = currentBodyTypeOption.Index; } ChangeBody(pawn, carouselBoxes.CurrentOptionValue); }
private void UpdateFaceOptions(Pawn pawn, CrownType crownType, CarouselBoxes <PS_HeadLoader.HeadType> carouselBoxes, bool limitByGender) { carouselBoxes.ClearOptions(); var faces = new List <PS_HeadLoader.HeadType>(); if (limitByGender) { faces = PS_HeadLoader.AllHeadsForCrownAndGender(crownType, pawn.gender); } else { faces = PS_HeadLoader.AllHeadsForCrown(crownType); } if ((faces?.Count ?? 0) == 0) { Log.Warning(string.Format("PS_BarberPod: Found no faces for crown type: {1}", this.CurrentHeadType.CrownType.ToString())); carouselBoxes.CurrentIndex = 0; } else { foreach (var face in faces) { carouselBoxes.AddOption(face.FaceName, face); } var currentFace = carouselBoxes.Options.Where(x => x.Value.FaceName == this.CurrentHeadType.FaceName).FirstOrDefault(); if (currentFace == null) { Log.Warning(string.Format("PS_BarberPod: Could not find current face for selected crown type. CurrentFace: {0}, CrownType: {1}", this.CurrentHeadType.FaceName, this.CurrentHeadType.CrownType.ToString())); carouselBoxes.CurrentIndex = 0; } else { carouselBoxes.CurrentIndex = currentFace.Index; } } ChangeFace(pawn, carouselBoxes.CurrentOptionValue); }
public void Init(Rect rect) { this.DebugLog(string.Format("Window X:{0}, Y:{1}, W:{2}, H:{3}", rect.x, rect.y, rect.width, rect.height)); this.Initalized = true; DebugLog("Initalizeing"); // Hair Style var hairBox = GetRecForGridLocation(1, 0);// new Rect(rect.width * 0.5f, 0, rect.width * 0.5f, rect.height * 0.15f); this.HairouselBoxes = new CarouselBoxes <HairDef>(hairBox, "Hair Style"); UpdateHairOptions(this.Pawn, this.HairouselBoxes, this.LimitOptionsBySex); HairouselBoxes.DoChange = delegate { this.ChangeHairStyle(this.Pawn, HairouselBoxes.CurrentOptionValue); }; DebugLog("init hair styles"); // Hair Color var hairColorRect = GetRecForGridLocation(1, 1);// new Rect(hairBox.x, hairBox.yMax + 10, hairBox.width, hairBox.height); this.HairColorSlider = new ColorSlider(hairColorRect, this.Pawn.story.hairColor, "Hair Color"); this.HairColorSlider.DoChange = delegate { this.ChangeHairColor(this.Pawn, this.HairColorSlider.CurrentColor); }; DebugLog("init hair colors"); //Head and face var crownBox = GetRecForGridLocation(1, 2);// new Rect(hairColorRect.x, hairColorRect.yMax + 10, hairColorRect.width, hairColorRect.height); CrownCarouselBoxes = new CarouselBoxes <CrownType>(crownBox, "Crown Type"); CrownCarouselBoxes.Enabled = FoundHeadType; if (!PS_ReseachLoader.ResearchNotExistOrIsDone("PS_BasicResearch")) { CrownCarouselBoxes.IsLocked = true; CrownCarouselBoxes.LockedMessage = "Need Research:\nBasic Facial Reconstruction"; } var faceBox = GetRecForGridLocation(1, 3);// new Rect(crownBox.x, crownBox.yMax + 10, crownBox.width, crownBox.height); FaceCarouselBoxes = new CarouselBoxes <PS_HeadLoader.HeadType>(faceBox, "Face"); FaceCarouselBoxes.Enabled = FoundHeadType; if (!PS_ReseachLoader.ResearchNotExistOrIsDone("PS_IntermediateResearch")) { FaceCarouselBoxes.LockedMessage = "Need Research: Intermediate\n Facial Reconstruction"; FaceCarouselBoxes.IsLocked = true; } if (FoundHeadType) { var allCrowns = PS_HeadLoader.AllCorwnTypes; foreach (var crown in allCrowns) { CrownCarouselBoxes.AddOption(crown.ToString(), crown); } CrownCarouselBoxes.CurrentIndex = CrownCarouselBoxes.Options.Where(x => x.Value == Pawn.story.crownType).FirstOrDefault().Index; CrownCarouselBoxes.DoChange = delegate { ChangeCrown(this.Pawn, CrownCarouselBoxes.CurrentOptionValue); }; this.UpdateFaceOptions(this.Pawn, CrownCarouselBoxes.CurrentOptionValue, FaceCarouselBoxes, this.LimitOptionsBySex); FaceCarouselBoxes.DoChange = delegate { this.ChangeFace(this.Pawn, this.FaceCarouselBoxes.CurrentOptionValue); }; } DebugLog("init face and head"); //Body Type var bodyBox = GetRecForGridLocation(0, 3);// new Rect(faceBox.x, faceBox.yMax + 10, faceBox.width, faceBox.height); BodyCarouselBoxes = new CarouselBoxes <BodyTypeDef>(bodyBox, "Body Type"); UpdateBodyTypeOptions(this.Pawn, BodyCarouselBoxes, LimitOptionsBySex); BodyCarouselBoxes.CurrentIndex = BodyCarouselBoxes.Options.Where(x => x.Value == Pawn.story.bodyType).FirstOrDefault()?.Index ?? 0; BodyCarouselBoxes.DoChange = delegate { ChangeBody(this.Pawn, BodyCarouselBoxes.CurrentOptionValue); }; if (!PS_ReseachLoader.ResearchNotExistOrIsDone("PS_BodyModResearch")) { BodyCarouselBoxes.IsLocked = true; BodyCarouselBoxes.LockedMessage = "Need Research:\nBody Modification"; } DebugLog("init body types"); // Skin Tone var skinColorRect = GetRecForGridLocation(0, 2);// new Rect(rect.x, bodyBox.y, bodyBox.width, bodyBox.height); this.SkinToneSlider = new SingleSlider(skinColorRect, this.Pawn.story.melanin, "Skin Tone"); this.SkinToneSlider.CurrentValue = this.PawnStartTanValue; this.SkinToneSlider.DoChange = delegate { this.ChangeSkinTone(this.Pawn, this.SkinToneSlider.CurrentValue); }; }