mirror of
				https://gitgud.io/lutepickle/rjw_menstruation.git
				synced 2024-08-14 22:46:52 +00:00 
			
		
		
		
	A whole mess of suggested code refactorings
This commit is contained in:
		
							parent
							
								
									9e8441ca2e
								
							
						
					
					
						commit
						3ae66bd4a6
					
				
					 22 changed files with 123 additions and 141 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -47,7 +47,7 @@ namespace MilkModule
 | 
			
		|||
 | 
			
		||||
        public static HumanCompHasGatherableBodyResource GetMilkComp(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            HumanCompHasGatherableBodyResource result = null;
 | 
			
		||||
            HumanCompHasGatherableBodyResource result;
 | 
			
		||||
            if (pawn.health.hediffSet.HasHediff(VariousDefOf.Hediff_Heavy_Lactating_Permanent))
 | 
			
		||||
            {
 | 
			
		||||
                result = pawn.TryGetComp<CompHyperMilkableHuman>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,9 +26,8 @@ namespace MilkModule
 | 
			
		|||
    {
 | 
			
		||||
        public static void Postfix(Pawn doer, HumanCompHasGatherableBodyResource __instance)
 | 
			
		||||
        {
 | 
			
		||||
            Pawn pawn = __instance.parent as Pawn;
 | 
			
		||||
            HediffComp_Breast comp = null;
 | 
			
		||||
            if (pawn != null) comp = pawn.GetBreastComp();
 | 
			
		||||
            if (__instance.parent is Pawn pawn) comp = pawn.GetBreastComp();
 | 
			
		||||
            if (comp != null)
 | 
			
		||||
            {
 | 
			
		||||
                comp.AdjustAreolaSize(Rand.Range(0.0f, 0.01f * Configurations.NipplePermanentTransitionVariance));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                foreach(HybridInformations o in HybridOverride)
 | 
			
		||||
                {
 | 
			
		||||
                    if (o.IsNull) removeList.Add(o);
 | 
			
		||||
                    if (o.defName == def.defName) return true;
 | 
			
		||||
                    if (o.DefName == def.defName) return true;
 | 
			
		||||
                }
 | 
			
		||||
            if (!removeList.NullOrEmpty())
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -216,7 +216,6 @@ namespace RJW_Menstruation
 | 
			
		|||
    public class RJW_Menstruation : Mod
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private readonly Configurations config;
 | 
			
		||||
        private static Vector2 scroll;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -234,7 +233,6 @@ namespace RJW_Menstruation
 | 
			
		|||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                int days = VariousDefOf.VaginaCompProperties.bleedingIntervalDays;
 | 
			
		||||
                return 0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -242,7 +240,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        public RJW_Menstruation(ModContentPack content) : base(content)
 | 
			
		||||
        {
 | 
			
		||||
            config = GetSettings<Configurations>();
 | 
			
		||||
            GetSettings<Configurations>();
 | 
			
		||||
            Configurations.HARActivated = ModLister.HasActiveModWithName("Humanoid Alien Races 2.0");
 | 
			
		||||
            Configurations.LLActivated = ModLister.HasActiveModWithName("RimJobWorld - Licentia Labs");
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -259,8 +257,10 @@ namespace RJW_Menstruation
 | 
			
		|||
            Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
 | 
			
		||||
            Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 596f);
 | 
			
		||||
            int Adjust;
 | 
			
		||||
            Listing_Standard listmain = new Listing_Standard();
 | 
			
		||||
            listmain.maxOneColumn = true;
 | 
			
		||||
            Listing_Standard listmain = new Listing_Standard
 | 
			
		||||
            {
 | 
			
		||||
                maxOneColumn = true
 | 
			
		||||
            };
 | 
			
		||||
            Widgets.BeginScrollView(outRect, ref scroll, mainRect);
 | 
			
		||||
            listmain.Begin(mainRect);
 | 
			
		||||
            listmain.Gap(20f);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public float decayresist
 | 
			
		||||
        public float DecayResist
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        protected ThingDef filthDef = null;
 | 
			
		||||
        public Color color
 | 
			
		||||
        public Color Color
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +180,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        public void MakeThinner(int speed)
 | 
			
		||||
        {
 | 
			
		||||
            cumthickness = cumthickness.LerpMultiple(decayresist, 0.3f, speed);
 | 
			
		||||
            cumthickness = cumthickness.LerpMultiple(DecayResist, 0.3f, speed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void MergeWithCum(float volumein, float fertility,  ThingDef updatefilthDef = null)
 | 
			
		||||
| 
						 | 
				
			
			@ -208,8 +208,8 @@ namespace RJW_Menstruation
 | 
			
		|||
        public float DismishNatural(float leakfactor, float antisperm = 0.0f)
 | 
			
		||||
        {
 | 
			
		||||
            float totalleak = volume;
 | 
			
		||||
            volume *= Math.Max(0, (1 - (Configurations.CumDecayRatio * (1 - decayresist)) * leakfactor));
 | 
			
		||||
            fertvolume *= Math.Max(0, 1 - (Configurations.CumFertilityDecayRatio * (1 - decayresist) + antisperm));
 | 
			
		||||
            volume *= Math.Max(0, (1 - (Configurations.CumDecayRatio * (1 - DecayResist)) * leakfactor));
 | 
			
		||||
            fertvolume *= Math.Max(0, 1 - (Configurations.CumFertilityDecayRatio * (1 - DecayResist) + antisperm));
 | 
			
		||||
            CutMinor();
 | 
			
		||||
            totalleak -= volume;
 | 
			
		||||
            return totalleak;
 | 
			
		||||
| 
						 | 
				
			
			@ -218,8 +218,8 @@ namespace RJW_Menstruation
 | 
			
		|||
        public float DismishForce(float portion, float leakfactor = 1.0f)
 | 
			
		||||
        {
 | 
			
		||||
            float totalleak = volume;
 | 
			
		||||
            volume *= Math.Max(0, 1 - (portion * (1 - decayresist/10)) * leakfactor);
 | 
			
		||||
            fertvolume *= Math.Max(0, 1 - (portion * (1 - decayresist)) * leakfactor);
 | 
			
		||||
            volume *= Math.Max(0, 1 - (portion * (1 - DecayResist/10)) * leakfactor);
 | 
			
		||||
            fertvolume *= Math.Max(0, 1 - (portion * (1 - DecayResist)) * leakfactor);
 | 
			
		||||
            CutMinor();
 | 
			
		||||
            totalleak -= volume;
 | 
			
		||||
            return totalleak;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,13 +95,13 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        public static readonly Dictionary<Stage, Texture2D> StageTexture = new Dictionary<Stage, Texture2D>()
 | 
			
		||||
        {
 | 
			
		||||
            { Stage.Follicular, TextureCache.humanTexture },
 | 
			
		||||
            { Stage.ClimactericFollicular, TextureCache.humanTexture },
 | 
			
		||||
            { Stage.Luteal, TextureCache.fertilityTexture },
 | 
			
		||||
            { Stage.ClimactericLuteal, TextureCache.fertilityTexture },
 | 
			
		||||
            { Stage.Bleeding, TextureCache.khorneTexture },
 | 
			
		||||
            { Stage.ClimactericBleeding, TextureCache.khorneTexture },
 | 
			
		||||
            { Stage.Recover, TextureCache.nurgleTexture }
 | 
			
		||||
            { Stage.Follicular, TextureCache.HumanTexture },
 | 
			
		||||
            { Stage.ClimactericFollicular, TextureCache.HumanTexture },
 | 
			
		||||
            { Stage.Luteal, TextureCache.FertilityTexture },
 | 
			
		||||
            { Stage.ClimactericLuteal, TextureCache.FertilityTexture },
 | 
			
		||||
            { Stage.Bleeding, TextureCache.KhorneTexture },
 | 
			
		||||
            { Stage.ClimactericBleeding, TextureCache.KhorneTexture },
 | 
			
		||||
            { Stage.Recover, TextureCache.NurgleTexture }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +122,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        protected float antisperm = 0.0f;
 | 
			
		||||
        protected float? originvagsize = null;
 | 
			
		||||
 | 
			
		||||
        public int ovarypowerthreshold
 | 
			
		||||
        public int OvaryPowerThreshold
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                    {
 | 
			
		||||
                        if (cum.Volume > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            mixedcolor = Colors.CMYKLerp(mixedcolor, cum.color, cum.Volume / (mixedsofar + cum.Volume));
 | 
			
		||||
                            mixedcolor = Colors.CMYKLerp(mixedcolor, cum.Color, cum.Volume / (mixedsofar + cum.Volume));
 | 
			
		||||
                            mixedsofar += cum.Volume;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -289,7 +289,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public string wombTex
 | 
			
		||||
        public string WombTex
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                customwombtex = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public string vagTex
 | 
			
		||||
        public string VagTex
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -483,8 +483,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                Texture2D tex;
 | 
			
		||||
                if (!StageTexture.TryGetValue(curStage, out tex)) tex = TextureCache.tzeentchTexture;
 | 
			
		||||
                if (!StageTexture.TryGetValue(curStage, out Texture2D tex)) tex = TextureCache.TzeentchTexture;
 | 
			
		||||
                return tex;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -745,7 +744,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                cum.CumEffects(parent.pawn);
 | 
			
		||||
                float vd = cum.DismishNatural(leakfactor, antisperm);
 | 
			
		||||
                cum.MakeThinner(Configurations.CycleAcceleration);
 | 
			
		||||
                totalleak += AbsorbCum(cum, vd, absorber);
 | 
			
		||||
                totalleak += AbsorbCum(vd, absorber);
 | 
			
		||||
                string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
 | 
			
		||||
                filthlabels.Add(tmp.Replace(" x1", ""));
 | 
			
		||||
                if (cum.ShouldRemove()) removecums.Add(cum);
 | 
			
		||||
| 
						 | 
				
			
			@ -811,7 +810,6 @@ namespace RJW_Menstruation
 | 
			
		|||
            Color color = GetCumMixtureColor;
 | 
			
		||||
            float totalleak = 0;
 | 
			
		||||
            List<string> cumlabels = new List<string>();
 | 
			
		||||
            float cumd = TotalCumPercent;
 | 
			
		||||
            List<Cum> removecums = new List<Cum>();
 | 
			
		||||
            bool pure = true;
 | 
			
		||||
            foreach (Cum cum in cums)
 | 
			
		||||
| 
						 | 
				
			
			@ -876,7 +874,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                if (eggs == null) eggs = new List<Egg>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                InitOvary(parent.pawn.ageTracker.AgeBiologicalYears);
 | 
			
		||||
                InitOvary();
 | 
			
		||||
 | 
			
		||||
                Hediff_BasePregnancy pregnancy = parent.pawn.GetRJWPregnancy();
 | 
			
		||||
                if (pregnancy != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -884,9 +882,8 @@ namespace RJW_Menstruation
 | 
			
		|||
                    Hediff hediff = PregnancyHelper.GetPregnancy(parent.pawn);
 | 
			
		||||
                    if (hediff != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
                        if (hediff is Hediff_BasePregnancy preg)
 | 
			
		||||
                        {
 | 
			
		||||
                            Hediff_BasePregnancy preg = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                            currentIntervalhours = (int)(preg.GestationHours());
 | 
			
		||||
                            curStage = Stage.Pregnant;
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -916,7 +913,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            loaded = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void InitOvary(int ageYear)
 | 
			
		||||
        protected void InitOvary()
 | 
			
		||||
        {
 | 
			
		||||
            if (!Configurations.EnableMenopause)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -958,10 +955,10 @@ namespace RJW_Menstruation
 | 
			
		|||
                        parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
 | 
			
		||||
                        curStage = Stage.Young;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (ovarypower < ovarypowerthreshold)
 | 
			
		||||
                    else if (ovarypower < OvaryPowerThreshold)
 | 
			
		||||
                    {
 | 
			
		||||
                        Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn);
 | 
			
		||||
                        hediff.Severity = 0.008f * (ovarypowerthreshold - ovarypower);
 | 
			
		||||
                        hediff.Severity = 0.008f * (OvaryPowerThreshold - ovarypower);
 | 
			
		||||
                        parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -971,7 +968,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        public void RecoverOvary(float multiply = 1.2f)
 | 
			
		||||
        {
 | 
			
		||||
            ovarypower = Math.Max(0, (int)(ovarypower * multiply));
 | 
			
		||||
            if (ovarypower >= ovarypowerthreshold)
 | 
			
		||||
            if (ovarypower >= OvaryPowerThreshold)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveClimactericEffect();
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -980,7 +977,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        protected void AfterSimulator()
 | 
			
		||||
        {
 | 
			
		||||
            if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
 | 
			
		||||
            if (Configurations.EnableMenopause && ovarypower < OvaryPowerThreshold)
 | 
			
		||||
            {
 | 
			
		||||
                if (sexNeed == null) sexNeed = parent.pawn.needs.TryGetNeed(VariousDefOf.SexNeed);
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -1067,9 +1064,8 @@ namespace RJW_Menstruation
 | 
			
		|||
                        {
 | 
			
		||||
                            if (Configurations.UseMultiplePregnancy && Configurations.EnableHeteroOvularTwins)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (pregnancy is Hediff_MultiplePregnancy)
 | 
			
		||||
                                if (pregnancy is Hediff_MultiplePregnancy h)
 | 
			
		||||
                                {
 | 
			
		||||
                                    Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)pregnancy;
 | 
			
		||||
                                    h.AddNewBaby(parent.pawn, egg.fertilizer);
 | 
			
		||||
                                }
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -1131,7 +1127,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        {
 | 
			
		||||
            //FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, ThingDefOf.Filth_Blood,parent.pawn.Label);
 | 
			
		||||
            CumIn(parent.pawn, Rand.Range(0.02f * Configurations.BleedingAmount, 0.04f * Configurations.BleedingAmount), Translations.Menstrual_Blood, -5.0f, parent.pawn.def.race?.BloodDef ?? ThingDefOf.Filth_Blood);
 | 
			
		||||
            GetNotCum(Translations.Menstrual_Blood).color = BloodColor;
 | 
			
		||||
            GetNotCum(Translations.Menstrual_Blood).Color = BloodColor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1147,11 +1143,11 @@ namespace RJW_Menstruation
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Absorb cum and return leaked amount
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="cum"></param>
 | 
			
		||||
        /// <param name="amount"></param>
 | 
			
		||||
        /// <param name="absorber"></param>
 | 
			
		||||
        /// 
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        protected float AbsorbCum(Cum cum, float amount, Absorber absorber)
 | 
			
		||||
        protected float AbsorbCum(float amount, Absorber absorber)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (absorber != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -1280,7 +1276,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                ovarypower = 0;
 | 
			
		||||
                GoNextStage(Stage.Young);
 | 
			
		||||
            }
 | 
			
		||||
            else if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
 | 
			
		||||
            else if (Configurations.EnableMenopause && ovarypower < OvaryPowerThreshold)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn);
 | 
			
		||||
                hediff.Severity = 0.008f * i;
 | 
			
		||||
| 
						 | 
				
			
			@ -1486,7 +1482,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                    {
 | 
			
		||||
                        if (curStageHrs >= recoveryIntervalhours)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
 | 
			
		||||
                            if (Configurations.EnableMenopause && ovarypower < OvaryPowerThreshold)
 | 
			
		||||
                            {
 | 
			
		||||
                                GoNextStage(Stage.ClimactericFollicular);
 | 
			
		||||
                            }
 | 
			
		||||
| 
						 | 
				
			
			@ -1528,7 +1524,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                        {
 | 
			
		||||
                            GoNextStage(Stage.Ovulatory);
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (ovarypower < ovarypowerthreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.2f) //skips ovulatory
 | 
			
		||||
                        else if (ovarypower < OvaryPowerThreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.2f) //skips ovulatory
 | 
			
		||||
                        {
 | 
			
		||||
                            follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
 | 
			
		||||
                            GoNextStage(Stage.ClimactericFollicular);
 | 
			
		||||
| 
						 | 
				
			
			@ -1572,7 +1568,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                                follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
 | 
			
		||||
                                GoNextStage(Stage.ClimactericFollicular);
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (ovarypower < ovarypowerthreshold / 4 || (ovarypower < ovarypowerthreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.3f)) //skips bleeding
 | 
			
		||||
                            else if (ovarypower < OvaryPowerThreshold / 4 || (ovarypower < OvaryPowerThreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.3f)) //skips bleeding
 | 
			
		||||
                            {
 | 
			
		||||
                                follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
 | 
			
		||||
                                GoNextStage(Stage.ClimactericFollicular);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,18 +78,16 @@ namespace RJW_Menstruation
 | 
			
		|||
        public static Texture2D GetPregnancyIcon(this HediffComp_Menstruation comp, Hediff hediff)
 | 
			
		||||
        {
 | 
			
		||||
            string icon = "";
 | 
			
		||||
            Texture2D result = null;
 | 
			
		||||
            int babycount = 1;
 | 
			
		||||
            if (hediff is Hediff_MechanoidPregnancy)
 | 
			
		||||
            {
 | 
			
		||||
                return ContentFinder<Texture2D>.Get(("Womb/Mechanoid_Fluid"), true);
 | 
			
		||||
            }
 | 
			
		||||
            else if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
            else if (hediff is Hediff_BasePregnancy h)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                babycount = h.babies.Count;
 | 
			
		||||
                string fetustex = h.babies?.FirstOrDefault()?.def.GetModExtension<PawnDNAModExtension>()?.fetusTexPath ?? "Fetus/Fetus_Default";
 | 
			
		||||
                if (h.GestationProgress < 0.2f) icon = comp.wombTex + "_Implanted";
 | 
			
		||||
                if (h.GestationProgress < 0.2f) icon = comp.WombTex + "_Implanted";
 | 
			
		||||
                else if (h.GestationProgress < 0.3f)
 | 
			
		||||
                {
 | 
			
		||||
                    if (h.babies?.First()?.def?.race?.FleshType == FleshTypeDefOf.Insectoid) icon += "Fetus/Insects/Insect_Early00";
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +102,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            }
 | 
			
		||||
            else icon = "Fetus/Slime_Abomi02";
 | 
			
		||||
 | 
			
		||||
            result = TryGetTwinsIcon(icon, babycount);
 | 
			
		||||
            Texture2D result = TryGetTwinsIcon(icon, babycount);
 | 
			
		||||
 | 
			
		||||
            if (result == null) result = ContentFinder<Texture2D>.Get((icon), true);
 | 
			
		||||
            return result;
 | 
			
		||||
| 
						 | 
				
			
			@ -112,10 +110,9 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        public static Texture2D TryGetTwinsIcon(string path, int babycount)
 | 
			
		||||
        {
 | 
			
		||||
            Texture2D result = null;
 | 
			
		||||
            for (int i = babycount; i > 1; i--)
 | 
			
		||||
            {
 | 
			
		||||
                result = ContentFinder<Texture2D>.Get((path + "_Multiplet_" + i), false);
 | 
			
		||||
                Texture2D result = ContentFinder<Texture2D>.Get((path + "_Multiplet_" + i), false);
 | 
			
		||||
                if (result != null) return result;
 | 
			
		||||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +120,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        public static Texture2D GetCumIcon(this HediffComp_Menstruation comp)
 | 
			
		||||
        {
 | 
			
		||||
            string icon = comp.wombTex;
 | 
			
		||||
            string icon = comp.WombTex;
 | 
			
		||||
            float cumpercent = comp.TotalCumPercent;
 | 
			
		||||
            if (cumpercent < 0.001f) return ContentFinder<Texture2D>.Get("Womb/Empty", true);
 | 
			
		||||
            else if (cumpercent < 0.01f) icon += "_Cum_00";
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +147,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        public static Texture2D GetWombIcon(this HediffComp_Menstruation comp)
 | 
			
		||||
        {
 | 
			
		||||
            if (comp.Pawn.health.hediffSet.GetHediffs<Hediff_InsectEgg>().FirstOrDefault() != null) return ContentFinder<Texture2D>.Get(("Womb/Womb_Egged"), true);
 | 
			
		||||
            string icon = comp.wombTex;
 | 
			
		||||
            string icon = comp.WombTex;
 | 
			
		||||
            HediffComp_Menstruation.Stage stage = comp.curStage;
 | 
			
		||||
            if (stage == HediffComp_Menstruation.Stage.Bleeding) icon += "_Bleeding";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -197,7 +194,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            float severity;
 | 
			
		||||
            if (drawOrigin) severity = comp.OriginVagSize;
 | 
			
		||||
            else severity = hediff.Severity;
 | 
			
		||||
            if (comp != null) icon = comp.vagTex;
 | 
			
		||||
            if (comp != null) icon = comp.VagTex;
 | 
			
		||||
            else icon = "Genitals/Vagina";
 | 
			
		||||
 | 
			
		||||
            if (severity < 0.20f) icon += "00";        //micro 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                baby.relations.AddDirectRelation(PawnRelationDefOf.Sibling, sibling);
 | 
			
		||||
            }
 | 
			
		||||
            siblings.Add(baby);
 | 
			
		||||
            train(baby, mother, father);
 | 
			
		||||
            Train(baby, mother);
 | 
			
		||||
 | 
			
		||||
            PostBirth(mother, father, baby);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,6 @@ namespace RJW_Menstruation
 | 
			
		|||
            List<Trait> poptraits = new List<Trait>();
 | 
			
		||||
            List<Trait> traits_to_inherit = new List<Trait>();
 | 
			
		||||
            System.Random rd = new System.Random();
 | 
			
		||||
            int rand_trait_index = 0;
 | 
			
		||||
            float max_num_momtraits_inherited = RJWPregnancySettings.max_num_momtraits_inherited;
 | 
			
		||||
            float max_num_poptraits_inherited = RJWPregnancySettings.max_num_poptraits_inherited;
 | 
			
		||||
            float max_num_traits_inherited = max_num_momtraits_inherited + max_num_poptraits_inherited;
 | 
			
		||||
| 
						 | 
				
			
			@ -206,6 +205,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                        poptraits.Add(poptrait);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int rand_trait_index;
 | 
			
		||||
            if (!momtraits.NullOrEmpty())
 | 
			
		||||
            {
 | 
			
		||||
                i = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -278,9 +278,8 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        protected void train(Pawn baby, Pawn mother, Pawn father)
 | 
			
		||||
        protected void Train(Pawn baby, Pawn mother)
 | 
			
		||||
        {
 | 
			
		||||
            bool _;
 | 
			
		||||
            if (!xxx.is_human(baby) && baby.Faction == Faction.OfPlayer)
 | 
			
		||||
            {
 | 
			
		||||
                if (xxx.is_human(mother) && baby.Faction == Faction.OfPlayer && baby.training.CanAssignToTrain(TrainableDefOf.Obedience, out _).Accepted)
 | 
			
		||||
| 
						 | 
				
			
			@ -424,7 +423,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                    // Ensure the same inherited traits are chosen each run
 | 
			
		||||
                    // Has to happen right here so GeneratePawn up there still gets unique results
 | 
			
		||||
                    Rand.PushState(traitSeed);  // With a seed just to make sure that fraternal twins *don't* get trait-duped
 | 
			
		||||
                    updateTraits(baby, parentTraits);
 | 
			
		||||
                    UpdateTraits(baby, parentTraits);
 | 
			
		||||
                    Rand.PopState();
 | 
			
		||||
                }
 | 
			
		||||
                else if (baby.relations != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -578,10 +577,10 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
            if (!Configurations.HybridOverride.NullOrEmpty())
 | 
			
		||||
            {
 | 
			
		||||
                info = Configurations.HybridOverride.FirstOrDefault(x => x.defName == first.def?.defName && (x.hybridExtension?.Exists(y => y.defName == second.def?.defName) ?? false));
 | 
			
		||||
                info = Configurations.HybridOverride.FirstOrDefault(x => x.DefName == first.def?.defName && (x.hybridExtension?.Exists(y => y.DefName == second.def?.defName) ?? false));
 | 
			
		||||
                if (info == null)
 | 
			
		||||
                {
 | 
			
		||||
                    info = Configurations.HybridOverride.FirstOrDefault(x => x.defName == second.def?.defName && (x.hybridExtension?.Exists(y => y.defName == first.def?.defName) ?? false));
 | 
			
		||||
                    info = Configurations.HybridOverride.FirstOrDefault(x => x.DefName == second.def?.defName && (x.hybridExtension?.Exists(y => y.DefName == first.def?.defName) ?? false));
 | 
			
		||||
                    opposite = first;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -616,7 +615,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        /// <param name="pawn"></param>
 | 
			
		||||
        /// <param name="parentTraits"></param>
 | 
			
		||||
        /// 
 | 
			
		||||
        public void updateTraits(Pawn pawn, List<Trait> parentTraits)
 | 
			
		||||
        public void UpdateTraits(Pawn pawn, List<Trait> parentTraits)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn?.story?.traits == null)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -678,8 +677,8 @@ namespace RJW_Menstruation
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class TraitComparer : IEqualityComparer<Trait>
 | 
			
		||||
    {
 | 
			
		||||
        bool ignoreForced;
 | 
			
		||||
        bool ignoreDegree;
 | 
			
		||||
        readonly bool ignoreForced;
 | 
			
		||||
        readonly bool ignoreDegree;
 | 
			
		||||
 | 
			
		||||
        public TraitComparer(bool ignoreDegree = false, bool ignoreForced = true)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -719,7 +718,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
    public class FatherComparer : IEqualityComparer<Pawn>
 | 
			
		||||
    {
 | 
			
		||||
        Pawn mother;
 | 
			
		||||
        readonly Pawn mother;
 | 
			
		||||
 | 
			
		||||
        public FatherComparer(Pawn mother)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,16 +11,10 @@ namespace RJW_Menstruation
 | 
			
		|||
{
 | 
			
		||||
    public class IngestionOutcomeDoer_GiveHediff_StackCount : IngestionOutcomeDoer_GiveHediff
 | 
			
		||||
	{
 | 
			
		||||
		private bool divideByBodySize = false;
 | 
			
		||||
 | 
			
		||||
		protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested)
 | 
			
		||||
		{
 | 
			
		||||
			Hediff hediff = HediffMaker.MakeHediff(hediffDef, pawn);
 | 
			
		||||
			float effect = ((!(severity > 0f)) ? hediffDef.initialSeverity : severity) * ingested.stackCount;
 | 
			
		||||
			if (divideByBodySize)
 | 
			
		||||
			{
 | 
			
		||||
				effect /= pawn.BodySize;
 | 
			
		||||
			}
 | 
			
		||||
			AddictionUtility.ModifyChemicalEffectForToleranceAndBodySize(pawn, toleranceChemical, ref effect);
 | 
			
		||||
			hediff.Severity = effect;
 | 
			
		||||
			pawn.health.AddHediff(hediff);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,12 +74,14 @@ namespace RJW_Menstruation
 | 
			
		|||
            PreMakeNewToils();
 | 
			
		||||
            this.FailOnDespawnedNullOrForbidden(TargetIndex.A);
 | 
			
		||||
            this.FailOnNotCasualInterruptible(TargetIndex.A);
 | 
			
		||||
            Toil milking = new Toil();
 | 
			
		||||
            milking.initAction = delegate ()
 | 
			
		||||
            Toil milking = new Toil
 | 
			
		||||
            {
 | 
			
		||||
                pawn.pather.StopDead();
 | 
			
		||||
                initAction = delegate ()
 | 
			
		||||
                {
 | 
			
		||||
                    pawn.pather.StopDead();
 | 
			
		||||
                },
 | 
			
		||||
                tickAction = MilkingTick
 | 
			
		||||
            };
 | 
			
		||||
            milking.tickAction = MilkingTick;
 | 
			
		||||
            milking.AddFinishAction(Finish);
 | 
			
		||||
            milking.defaultCompleteMode = ToilCompleteMode.Never;
 | 
			
		||||
            milking.WithProgressBar(TargetIndex.A, () => progress / MilkingTime);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,9 +69,8 @@ namespace RJW_Menstruation
 | 
			
		|||
                if (Utility.ShowFetusImage((Hediff_BasePregnancy)hediff))
 | 
			
		||||
                {
 | 
			
		||||
                    icon = comp.GetPregnancyIcon(hediff);
 | 
			
		||||
                    if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
                    if (hediff is Hediff_BasePregnancy h)
 | 
			
		||||
                    {
 | 
			
		||||
                        Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                        if (h.GestationProgress < 0.2f) icon_overay = comp.GetCumIcon();
 | 
			
		||||
                        else icon_overay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ namespace RJW_Menstruation
 | 
			
		|||
{
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(PregnancyHelper), "impregnate")]
 | 
			
		||||
    public static class impregnate_Patch
 | 
			
		||||
    public static class Impregnate_Patch
 | 
			
		||||
    {
 | 
			
		||||
        public static bool Prefix(SexProps props)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ namespace RJW_Menstruation
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(CompHediffBodyPart), "updatesize")]
 | 
			
		||||
    public static class updatesize_Patch
 | 
			
		||||
    public static class Updatesize_Patch
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(CompHediffBodyPart __instance)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ namespace RJW_Menstruation
 | 
			
		|||
    public static class TextureCache
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public static Texture2D milkTexture
 | 
			
		||||
        public static Texture2D MilkTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return milktexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D slaaneshTexture
 | 
			
		||||
        public static Texture2D SlaaneshTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return slaaneshtexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D khorneTexture
 | 
			
		||||
        public static Texture2D KhorneTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return khornetexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D tzeentchTexture
 | 
			
		||||
        public static Texture2D TzeentchTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return tzeentchtexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D nurgleTexture
 | 
			
		||||
        public static Texture2D NurgleTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return nurgletexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D humanTexture
 | 
			
		||||
        public static Texture2D HumanTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return humantexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D animalTexture
 | 
			
		||||
        public static Texture2D AnimalTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +69,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return animaltexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D fertilityTexture
 | 
			
		||||
        public static Texture2D FertilityTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                return fertilitytexturecache;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static Texture2D ghalmarazTexture
 | 
			
		||||
        public static Texture2D GhalmarazTexture
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,7 @@ namespace RJW_Menstruation
 | 
			
		|||
        private ThingDef thingDef;
 | 
			
		||||
        private string thingDefName;
 | 
			
		||||
 | 
			
		||||
        public string defName
 | 
			
		||||
        public string DefName
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ namespace RJW_Menstruation
 | 
			
		|||
    {
 | 
			
		||||
        private string thingDefName;
 | 
			
		||||
 | 
			
		||||
        public string defName
 | 
			
		||||
        public string DefName
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,8 @@ namespace RJW_Menstruation
 | 
			
		|||
    {
 | 
			
		||||
        private static Vector2 scroll;
 | 
			
		||||
        private const float windowMargin = 20f;
 | 
			
		||||
        static private List<FloatMenuOption> raceList = new List<FloatMenuOption>();
 | 
			
		||||
        static private List<HybridInformations> removeList = new List<HybridInformations>();
 | 
			
		||||
        private static readonly List<FloatMenuOption> raceList = new List<FloatMenuOption>();
 | 
			
		||||
        private static readonly List<HybridInformations> removeList = new List<HybridInformations>();
 | 
			
		||||
 | 
			
		||||
        public Dialog_HybridCustom()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -145,11 +145,10 @@ namespace RJW_Menstruation
 | 
			
		|||
            
 | 
			
		||||
            Widgets.BeginScrollView(outRect, ref scroll, mainRect);
 | 
			
		||||
            listmain.Begin(mainRect);
 | 
			
		||||
            int i = 0;
 | 
			
		||||
            if (!Configurations.HybridOverride.NullOrEmpty()) 
 | 
			
		||||
                foreach(HybridInformations extension in Configurations.HybridOverride)
 | 
			
		||||
                {
 | 
			
		||||
                    if (extension.GetDef != null) DoRow(listmain.GetRect(24f),extension, i++);
 | 
			
		||||
                    if (extension.GetDef != null) DoRow(listmain.GetRect(24f),extension);
 | 
			
		||||
                }
 | 
			
		||||
            Widgets.EndScrollView();
 | 
			
		||||
            listmain.End();
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +156,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void DoRow(Rect rect, HybridInformations extension, int index)
 | 
			
		||||
        protected void DoRow(Rect rect, HybridInformations extension)
 | 
			
		||||
        {
 | 
			
		||||
            Rect buttonRect = new Rect(rect.xMax - 90f, rect.y, 80f, rect.height);
 | 
			
		||||
            Widgets.Label(rect, extension.GetDef?.label ?? "Undefined");
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +284,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                {
 | 
			
		||||
                    if (def.race != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (info.hybridExtension.Exists(x => x.defName == def.defName)) continue;
 | 
			
		||||
                        if (info.hybridExtension.Exists(x => x.DefName == def.defName)) continue;
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            raceList.Add(new FloatMenuOption(def.label, delegate { AddHybridInfo(def); }, Widgets.GetIconFor(def), Color.white));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,11 +32,11 @@ namespace RJW_Menstruation
 | 
			
		|||
        private Texture2D anal;
 | 
			
		||||
        private Color cumcolor;
 | 
			
		||||
 | 
			
		||||
        private GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter };
 | 
			
		||||
        private GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight };
 | 
			
		||||
        private GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft };
 | 
			
		||||
        private GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea);
 | 
			
		||||
        private GUIStyle buttonstyle = new GUIStyle(GUI.skin.button);
 | 
			
		||||
        private readonly GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter };
 | 
			
		||||
        private readonly GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight };
 | 
			
		||||
        private readonly GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft };
 | 
			
		||||
        private readonly GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea);
 | 
			
		||||
        private readonly GUIStyle buttonstyle = new GUIStyle(GUI.skin.button);
 | 
			
		||||
 | 
			
		||||
        public Pawn Pawn
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -156,16 +156,15 @@ namespace RJW_Menstruation
 | 
			
		|||
            if (pregnant && Utility.ShowFetusImage((Hediff_BasePregnancy)hediff))
 | 
			
		||||
            {
 | 
			
		||||
                womb = comp.GetPregnancyIcon(hediff);
 | 
			
		||||
                if (hediff is Hediff_MultiplePregnancy)
 | 
			
		||||
                if (hediff is Hediff_MultiplePregnancy m)
 | 
			
		||||
                {
 | 
			
		||||
                    Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)hediff;
 | 
			
		||||
                    if (h.GestationProgress < 0.2f) cum = comp.GetCumIcon();
 | 
			
		||||
                    if (m.GestationProgress < 0.2f) cum = comp.GetCumIcon();
 | 
			
		||||
                    else cum = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
 | 
			
		||||
                    Pawn fetus = pawn.GetFetus();
 | 
			
		||||
                    if (fetus != null && Utility.ShowFetusInfo())
 | 
			
		||||
                    {
 | 
			
		||||
                        string feinfo = h.GetBabyInfo();
 | 
			
		||||
                        string fainfo = h.GetFatherInfo() + "  ";
 | 
			
		||||
                        string feinfo = m.GetBabyInfo();
 | 
			
		||||
                        string fainfo = m.GetFatherInfo() + "  ";
 | 
			
		||||
                        if (feinfo.Length + fainfo.Length > 45)
 | 
			
		||||
                        {
 | 
			
		||||
                            preginfoheight = fontheight + 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -185,10 +184,9 @@ namespace RJW_Menstruation
 | 
			
		|||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
                else if (hediff is Hediff_BasePregnancy b)
 | 
			
		||||
                {
 | 
			
		||||
                    Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                    if (h.GestationProgress < 0.2f) cum = comp.GetCumIcon();
 | 
			
		||||
                    if (b.GestationProgress < 0.2f) cum = comp.GetCumIcon();
 | 
			
		||||
                    else cum = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
 | 
			
		||||
                    Pawn fetus = pawn.GetFetus();
 | 
			
		||||
                    if (fetus != null && Utility.ShowFetusInfo())
 | 
			
		||||
| 
						 | 
				
			
			@ -200,8 +198,8 @@ namespace RJW_Menstruation
 | 
			
		|||
                        fontstyleright.alignment = TextAnchor.MiddleRight;
 | 
			
		||||
                        buttonstyle.alignment = TextAnchor.MiddleLeft;
 | 
			
		||||
 | 
			
		||||
                        GUI.Box(preginfo, h.babies.Count + " " + fetus.def.label + " " + Translations.Dialog_WombInfo02, buttonstyle);
 | 
			
		||||
                        GUI.Label(preginfo, Translations.Dialog_WombInfo03 + ": " + h.father.LabelShort + "  ", fontstyleright);
 | 
			
		||||
                        GUI.Box(preginfo, b.babies.Count + " " + fetus.def.label + " " + Translations.Dialog_WombInfo02, buttonstyle);
 | 
			
		||||
                        GUI.Label(preginfo, Translations.Dialog_WombInfo03 + ": " + b.father.LabelShort + "  ", fontstyleright);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -384,36 +382,36 @@ namespace RJW_Menstruation
 | 
			
		|||
            float statvalue;
 | 
			
		||||
            const float height = 24f;
 | 
			
		||||
            statvalue = pawn.GetStatValue(xxx.sex_drive_stat);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2 ,TextureCache.slaaneshTexture,Texture2D.blackTexture, xxx.sex_drive_stat.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2 ,TextureCache.SlaaneshTexture,Texture2D.blackTexture, xxx.sex_drive_stat.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.GetStatValue(xxx.vulnerability_stat);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.khorneTexture,Texture2D.blackTexture, xxx.vulnerability_stat.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.KhorneTexture,Texture2D.blackTexture, xxx.vulnerability_stat.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.GetStatValue(xxx.sex_stat);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.tzeentchTexture, Texture2D.blackTexture, xxx.sex_stat.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.TzeentchTexture, Texture2D.blackTexture, xxx.sex_stat.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.records.GetValue(xxx.CountOfBirthHuman);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.humanTexture, Texture2D.blackTexture, xxx.CountOfBirthHuman.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.HumanTexture, Texture2D.blackTexture, xxx.CountOfBirthHuman.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.records.GetValue(xxx.CountOfBirthAnimal);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.animalTexture, Texture2D.blackTexture, xxx.CountOfBirthAnimal.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.AnimalTexture, Texture2D.blackTexture, xxx.CountOfBirthAnimal.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.nurgleTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description);
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.NurgleTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
 | 
			
		||||
            statvalue = pawn.records.GetValue(xxx.CountOfWhore);
 | 
			
		||||
            if (statvalue > 0)
 | 
			
		||||
            {
 | 
			
		||||
                FillableBarLabeled(lineRect, "  " + xxx.CountOfWhore.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 50, TextureCache.slaaneshTexture, Texture2D.blackTexture, xxx.CountOfWhore.description);
 | 
			
		||||
                FillableBarLabeled(lineRect, "  " + xxx.CountOfWhore.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 50, TextureCache.SlaaneshTexture, Texture2D.blackTexture, xxx.CountOfWhore.description);
 | 
			
		||||
                statvalue = pawn.records.GetValue(xxx.EarnedMoneyByWhore);
 | 
			
		||||
                lineRect.y += height;
 | 
			
		||||
                FillableBarLabeled(lineRect, "  " + VariousDefOf.RJW_EarnedMoneyByWhore.label.CapitalizeFirst() + " " + statvalue, statvalue / 10000, TextureCache.ghalmarazTexture, Texture2D.blackTexture);
 | 
			
		||||
                FillableBarLabeled(lineRect, "  " + VariousDefOf.RJW_EarnedMoneyByWhore.label.CapitalizeFirst() + " " + statvalue, statvalue / 10000, TextureCache.GhalmarazTexture, Texture2D.blackTexture);
 | 
			
		||||
                
 | 
			
		||||
                lineRect.y += height;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -425,7 +423,7 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
            statvalue = Configurations.ImplantationChance * comp.Props.baseImplantationChanceFactor * comp.ImplantFactor;
 | 
			
		||||
            float fertchance = comp.GetFertilityChance();
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.fertilityTexture, Texture2D.blackTexture, Translations.FertilityDesc(String.Format("{0:0.##}", fertchance*100)));
 | 
			
		||||
            FillableBarLabeled(lineRect, "  " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.FertilityTexture, Texture2D.blackTexture, Translations.FertilityDesc(String.Format("{0:0.##}", fertchance*100)));
 | 
			
		||||
            Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, fertchance), lineRect.height);
 | 
			
		||||
            GUI.DrawTexture(overayRect, TextureCache.FertChanceTex);
 | 
			
		||||
            lineRect.y += height;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,9 +152,8 @@ namespace RJW_Menstruation
 | 
			
		|||
        public static float GetPregnancyProgress(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
 | 
			
		||||
            if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
            if (hediff is Hediff_BasePregnancy h)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                return h.GestationProgress;
 | 
			
		||||
            }
 | 
			
		||||
            return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -163,9 +162,8 @@ namespace RJW_Menstruation
 | 
			
		|||
        public static Pawn GetFetus(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
 | 
			
		||||
            if (hediff is Hediff_BasePregnancy)
 | 
			
		||||
            if (hediff is Hediff_BasePregnancy h)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
 | 
			
		||||
                if (!h.babies.NullOrEmpty()) return h.babies.First();
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -303,14 +301,14 @@ namespace RJW_Menstruation
 | 
			
		|||
 | 
			
		||||
            if (milkcomp != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (milkcomp is CompMilkable)
 | 
			
		||||
                if (milkcomp is CompMilkable milkable)
 | 
			
		||||
                {
 | 
			
		||||
                    bool active = (bool)milkcomp.GetPropertyValue("Active");
 | 
			
		||||
                    if (active)
 | 
			
		||||
                    {
 | 
			
		||||
                        CompMilkable m = (CompMilkable)milkcomp;
 | 
			
		||||
                        CompMilkable m = milkable;
 | 
			
		||||
                        res = Math.Max(m.Fullness, res);
 | 
			
		||||
                        Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.milkTexture, Texture2D.blackTexture, true);
 | 
			
		||||
                        Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.MilkTexture, Texture2D.blackTexture, true);
 | 
			
		||||
                        DrawMilkBottle(rect, pawn, VariousDefOf.Job_LactateSelf, m.Fullness);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +319,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                    {
 | 
			
		||||
                        float fullness = (float)milkcomp.GetMemberValue("fullness");
 | 
			
		||||
                        res = Math.Max(fullness, res);
 | 
			
		||||
                        Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.milkTexture, Texture2D.blackTexture, true);
 | 
			
		||||
                        Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.MilkTexture, Texture2D.blackTexture, true);
 | 
			
		||||
                        DrawMilkBottle(rect, pawn, VariousDefOf.Job_LactateSelf_MC, fullness);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -440,7 +438,7 @@ namespace RJW_Menstruation
 | 
			
		|||
            {
 | 
			
		||||
                res += random.NextDouble();
 | 
			
		||||
            }
 | 
			
		||||
            res = res / iterations;
 | 
			
		||||
            res /= iterations;
 | 
			
		||||
 | 
			
		||||
            return (float)res*(max-min) + min;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,9 +31,9 @@ namespace RJW_Menstruation.Sexperience
 | 
			
		|||
            float amount = stackCount;
 | 
			
		||||
            float count = ThingUtility.TryAbsorbStackNumToTake(this, other, respectStackLimit);
 | 
			
		||||
            bool res = base.TryAbsorbStack(other, respectStackLimit);
 | 
			
		||||
            if (res && other is GatheredCumMixture)
 | 
			
		||||
            if (res && other is GatheredCumMixture mixture)
 | 
			
		||||
            {
 | 
			
		||||
                GatheredCumMixture othercum = (GatheredCumMixture)other;
 | 
			
		||||
                GatheredCumMixture othercum = mixture;
 | 
			
		||||
                cumColor = Colors.CMYKLerp(cumColor,othercum.cumColor,count/(amount+count));
 | 
			
		||||
                if (!othercum.ingredients.NullOrEmpty()) for (int i=0; i<othercum.ingredients.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ namespace RJW_Menstruation.Sexperience
 | 
			
		|||
        public void InitwithCum(CumMixture cum)
 | 
			
		||||
        {
 | 
			
		||||
            ingredients.AddRange(cum.Getingredients);
 | 
			
		||||
            cumColor = cum.color;
 | 
			
		||||
            cumColor = cum.Color;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,9 +58,11 @@ namespace RJW_Menstruation.Sexperience
 | 
			
		|||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            Toil cleaning = new Toil();
 | 
			
		||||
            cleaning.initAction = CleaningInit;
 | 
			
		||||
            cleaning.tickAction = CleaningTick;
 | 
			
		||||
            Toil cleaning = new Toil
 | 
			
		||||
            {
 | 
			
		||||
                initAction = CleaningInit,
 | 
			
		||||
                tickAction = CleaningTick
 | 
			
		||||
            };
 | 
			
		||||
            cleaning.AddFinishAction(Finish);
 | 
			
		||||
            cleaning.defaultCompleteMode = ToilCompleteMode.Never;
 | 
			
		||||
            cleaning.WithProgressBar(TargetIndex.A, () => progress / CleaningTime);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,8 +23,7 @@ namespace RJW_Menstruation.Sexperience
 | 
			
		|||
            if (comp != null && comp.TotalCumPercent > 0.001f)
 | 
			
		||||
            foreach (LocalTargetInfo t in targets)
 | 
			
		||||
            {
 | 
			
		||||
                Building building = t.Thing as Building;
 | 
			
		||||
                if (building != null)
 | 
			
		||||
                if (t.Thing is Building building)
 | 
			
		||||
                {
 | 
			
		||||
                    if (building is Building_CumBucket)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue