rjw_menstruation/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs

124 lines
4.2 KiB
C#

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<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.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<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);
}
};
}
}
}