124 lines
5.1 KiB
C#
124 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using RimWorld;
|
|
using Verse;
|
|
using HarmonyLib;
|
|
using RJW_Events;
|
|
|
|
namespace Rimworld_Animations_Patch
|
|
{
|
|
|
|
[HarmonyPatch(typeof(ThinkNode_ConditionalNude), "Satisfied")]
|
|
public static class HarmonyPatch_ThinkNode_ConditionalNude
|
|
{
|
|
public static void Postfix(ref bool __result, Pawn pawn)
|
|
{
|
|
if (__result == false && pawn?.apparel?.WornApparel != null)
|
|
{
|
|
// If 'isBeingWorn' has a value, the apparel has already been checked if it should be discarded
|
|
if (pawn.apparel.WornApparel.Any(x => x.TryGetComp<CompApparelVisibility>() != null && x.TryGetComp<CompApparelVisibility>().isBeingWorn.HasValue))
|
|
{ __result = true; return; }
|
|
}
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(ThoughtWorker_Precept_GroinChestHairOrFaceUncovered), "HasUncoveredGroinChestHairOrFace")]
|
|
public static class HarmonyPatch_ThoughtWorker_Precept_GroinChestHairOrFaceUncovered
|
|
{
|
|
public static void Postfix(ref bool __result, Pawn p)
|
|
{
|
|
if (__result == false) return;
|
|
|
|
Pawn pawn = p;
|
|
if (ApparelSettings.underwearSufficentForIdeos == false) return;
|
|
|
|
if (pawn?.apparel == null)
|
|
{ __result = false; return; }
|
|
|
|
if (pawn.apparel.WornApparel.NullOrEmpty())
|
|
{ __result = true; return; }
|
|
|
|
bool fullHeadCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.FullHead));
|
|
bool groinCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.GenitalsBPG));
|
|
bool chestCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.ChestBPG));
|
|
bool faceCovered = fullHeadCovered || pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Eyes));
|
|
bool hairCovered = fullHeadCovered || pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.UpperHead));
|
|
|
|
__result = !(groinCovered && chestCovered && faceCovered && hairCovered);
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(ThoughtWorker_Precept_GroinChestOrHairUncovered), "HasUncoveredGroinChestOrHair")]
|
|
public static class HarmonyPatch_ThoughtWorker_Precept_GroinChestOrHairUncovered
|
|
{
|
|
public static void Postfix(ref bool __result, Pawn p)
|
|
{
|
|
if (__result == false) return;
|
|
|
|
Pawn pawn = p;
|
|
if (ApparelSettings.underwearSufficentForIdeos == false) return;
|
|
|
|
if (pawn?.apparel == null)
|
|
{ __result = false; return; }
|
|
|
|
if (pawn.apparel.WornApparel.NullOrEmpty())
|
|
{ __result = true; return; }
|
|
|
|
bool fullHeadCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.FullHead));
|
|
bool groinCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.GenitalsBPG));
|
|
bool chestCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.ChestBPG));
|
|
bool hairCovered = fullHeadCovered || pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.UpperHead));
|
|
|
|
__result = !(groinCovered && chestCovered && hairCovered);
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(ThoughtWorker_Precept_GroinOrChestUncovered), "HasUncoveredGroinOrChest")]
|
|
public static class HarmonyPatch_ThoughtWorker_Precept_HasUncoveredGroinOrChest
|
|
{
|
|
public static void Postfix(ref bool __result, Pawn p)
|
|
{
|
|
if (__result == false) return;
|
|
|
|
Pawn pawn = p;
|
|
if (ApparelSettings.underwearSufficentForIdeos == false) return;
|
|
|
|
if (pawn?.apparel == null)
|
|
{ __result = false; return; }
|
|
|
|
if (pawn.apparel.WornApparel.NullOrEmpty())
|
|
{ __result = true; return; }
|
|
|
|
bool groinCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.GenitalsBPG));
|
|
bool chestCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.ChestBPG));
|
|
|
|
__result = !(groinCovered && chestCovered);
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(ThoughtWorker_Precept_GroinUncovered), "HasUncoveredGroin")]
|
|
public static class HarmonyPatch_ThoughtWorker_Precept_GroinUncovered
|
|
{
|
|
public static void Postfix(ref bool __result, Pawn p)
|
|
{
|
|
if (__result == false) return;
|
|
|
|
Pawn pawn = p;
|
|
if (ApparelSettings.underwearSufficentForIdeos == false) return;
|
|
|
|
if (pawn?.apparel == null)
|
|
{ __result = false; return; }
|
|
|
|
if (pawn.apparel.WornApparel.NullOrEmpty())
|
|
{ __result = true; return; }
|
|
|
|
bool groinCovered = pawn.apparel.WornApparel.Any(x => x.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) || x.def.apparel.bodyPartGroups.Contains(PatchBodyPartGroupDefOf.GenitalsBPG));
|
|
|
|
__result = !groinCovered;
|
|
}
|
|
}
|
|
}
|