From ad76a1857b20c4ea93942c5f0a1c9365ee0d7865 Mon Sep 17 00:00:00 2001 From: amevarashi Date: Fri, 22 Apr 2022 23:28:59 +0500 Subject: [PATCH] Filters for food with cum --- Defs/ThingDefs/Items_Resource_Cum.xml | 20 +++++++++++ .../SpecialThingFilterWorker_Cum.cs | 12 +++++++ .../SpecialThingFilterWorker_CumBase.cs | 33 +++++++++++++++++++ .../SpecialThingFilterWorker_NoCum.cs | 12 +++++++ .../RJWSexperience/RJWSexperience.csproj | 3 ++ 5 files changed, 80 insertions(+) create mode 100644 RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_Cum.cs create mode 100644 RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_CumBase.cs create mode 100644 RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_NoCum.cs diff --git a/Defs/ThingDefs/Items_Resource_Cum.xml b/Defs/ThingDefs/Items_Resource_Cum.xml index d01cc7e..3c6d538 100644 --- a/Defs/ThingDefs/Items_Resource_Cum.xml +++ b/Defs/ThingDefs/Items_Resource_Cum.xml @@ -128,4 +128,24 @@ + + + AllowWithCum + + Allow food that was spiced up by adding sexual fluids. + Foods + true + allowWithCum + RJWSexperience.SpecialThingFilterWorker_Cum + + + + AllowWithoutCum + + Allow food normal food. + Foods + true + allowWithoutCum + RJWSexperience.SpecialThingFilterWorker_NoCum + \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_Cum.cs b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_Cum.cs new file mode 100644 index 0000000..f79349a --- /dev/null +++ b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_Cum.cs @@ -0,0 +1,12 @@ +using Verse; + +namespace RJWSexperience +{ + public class SpecialThingFilterWorker_Cum : SpecialThingFilterWorker_CumBase + { + public override bool Matches(Thing t) + { + return IsCum(t) || IsFoodWithCum(t); + } + } +} diff --git a/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_CumBase.cs b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_CumBase.cs new file mode 100644 index 0000000..e1e5747 --- /dev/null +++ b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_CumBase.cs @@ -0,0 +1,33 @@ +using RimWorld; +using Verse; + +namespace RJWSexperience +{ + public abstract class SpecialThingFilterWorker_CumBase : SpecialThingFilterWorker + { + public override bool CanEverMatch(ThingDef def) + { + return def.IsIngestible && def.IsProcessedFood; + } + + protected bool IsCum(Thing t) => IsCum(t.def); + + protected bool IsCum(ThingDef t) => t == VariousDefOf.GatheredCum; + + protected bool IsFoodWithCum(Thing food) + { + CompIngredients compIngredients = food.TryGetComp(); + + if (compIngredients == null) + return false; + + foreach (ThingDef ingredient in compIngredients.ingredients) + { + if (IsCum(ingredient)) + return true; + } + + return false; + } + } +} diff --git a/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_NoCum.cs b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_NoCum.cs new file mode 100644 index 0000000..99b469c --- /dev/null +++ b/RJWSexperience/RJWSexperience/FilterWorkers/SpecialThingFilterWorker_NoCum.cs @@ -0,0 +1,12 @@ +using Verse; + +namespace RJWSexperience +{ + public class SpecialThingFilterWorker_NoCum : SpecialThingFilterWorker_CumBase + { + public override bool Matches(Thing t) + { + return !IsCum(t) && !IsFoodWithCum(t); + } + } +} diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj index 078d258..7bfcf8b 100644 --- a/RJWSexperience/RJWSexperience/RJWSexperience.csproj +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -70,6 +70,8 @@ + + @@ -89,6 +91,7 @@ +