mirror of
https://gitgud.io/lutepickle/rjw_menstruation.git
synced 2024-08-14 22:46:52 +00:00
126 lines
4.4 KiB
C#
126 lines
4.4 KiB
C#
using HarmonyLib;
|
|
using RimWorld;
|
|
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<Gizmo> __result, Pawn __instance)
|
|
{
|
|
if (!__instance.ShowStatus())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (__instance.ShouldShowWombGizmo())
|
|
{
|
|
__result = AddWombGizmos(__instance, __result);
|
|
}
|
|
}
|
|
|
|
private static IEnumerable<Gizmo> AddWombGizmos(Pawn __instance, IEnumerable<Gizmo> 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<Gizmo> GetMenstruationGizmos(Pawn pawn, HediffComp_Menstruation comp)
|
|
{
|
|
return new List<Gizmo>() { 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.curStageTicks / GenDate.TicksPerHour);
|
|
if (comp.Pregnancy is Hediff_BasePregnancy rjwpreg) description
|
|
.AppendFormat("due: {0}\n", rjwpreg.DueDate());
|
|
else if (comp.Pregnancy is Hediff_Pregnant biopreg) description
|
|
.AppendFormat("due: {0}\n", biopreg.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<Texture2D>.Get(("Womb/Empty"), true);
|
|
}
|
|
else icon_overay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
|
|
}
|
|
else
|
|
{
|
|
icon = comp.GetWombIcon();
|
|
icon_overay = comp.GetCumIcon();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Hediff hediff = pawn.health.hediffSet.GetFirstHediff<Hediff_InsectEgg>();
|
|
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);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|