using HarmonyLib; using rjw; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; using Verse; namespace RJW_Menstruation { [HarmonyPatch(typeof(Pawn), nameof(Pawn.GetGizmos))] public class Pawn_GetGizmos { public static void Postfix(ref IEnumerable __result, Pawn __instance) { if (!__instance.ShowStatus()) { return; } if (__instance.ShouldShowWombGizmo()) { __result = AddWombGizmos(__instance, __result); } } private static IEnumerable AddWombGizmos(Pawn __instance, IEnumerable gizmos) { foreach (Gizmo gizmo in gizmos) yield return gizmo; foreach (HediffComp_Menstruation comp in __instance.GetMenstruationComps()) foreach (Gizmo gizmo in GetMenstruationGizmos(__instance, comp)) yield return gizmo; } public static List GetMenstruationGizmos(Pawn pawn, HediffComp_Menstruation comp) { return new List() { CreateGizmo_WombStatus(pawn, comp) }; } private static Gizmo CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp) { Texture2D icon, icon_overay; StringBuilder description = new StringBuilder(); if (Configurations.Debug) { description .AppendFormat("{0}: {1}\n", comp.curStage, comp.curStageHrs); if (comp.Pregnancy is Hediff_MultiplePregnancy preg) description .AppendFormat("due: {0}\n", preg.DueDate()); description .AppendFormat("fertcums: {0}\n" + "ovarypower: {1}\n" + "eggs: {2}\n", comp.TotalFertCum, comp.ovarypower, comp.GetNumOfEggs); } else description.AppendFormat("{0}\n", comp.GetCurStageLabel); if (pawn.IsRJWPregnant() || pawn.IsBiotechPregnant()) { Hediff hediff = comp.Pregnancy; if (hediff != null && Utility.ShowFetusImage(hediff)) { icon = comp.GetPregnancyIcon(hediff); float gestationProgress = comp.StageProgress; if (hediff is Hediff_BasePregnancy || hediff is HediffWithParents) { if (gestationProgress < 0.2f) icon_overay = comp.GetCumIcon(); else icon_overay = ContentFinder.Get(("Womb/Empty"), true); } else icon_overay = ContentFinder.Get(("Womb/Empty"), true); } else { icon = comp.GetWombIcon(); icon_overay = comp.GetCumIcon(); } } else { Hediff hediff = pawn.health.hediffSet.GetFirstHediff(); if (hediff != null) { icon = MenstruationUtility.GetInsectEggedIcon(comp); } else { icon = comp.GetWombIcon(); } icon_overay = comp.GetCumIcon(); } foreach (string s in comp.GetCumsInfo) description.AppendFormat("{0}\n", s); Color c = comp.GetCumMixtureColor; return new Gizmo_Womb { defaultLabel = pawn.LabelShort, defaultDesc = description.ToString(), icon = icon, icon_overay = icon_overay, shrinkable = Configurations.AllowShrinkIcon, cumcolor = c, comp = comp, //order = 100, hotKey = comp == pawn.GetFirstMenstruationComp() ? VariousDefOf.OpenStatusWindowKey : null, groupKey = 0, action = delegate { Dialog_WombStatus.ToggleWindow(pawn, comp); } }; } } }