示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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); };
        }