diff --git a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved.cs b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved.cs index da4f94c..6c5f491 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved.cs @@ -4,9 +4,7 @@ using Verse; namespace RJWSexperience.Ideology { - // This Thoughtworker Checks for Bukkake-Hediff and adds a approving thought if the gender and ideology are fullfilled. - // The thought gets removed when the Hediff is removed. - public class ThoughtWorker_Precept_GenitalSize_Disapproved : ThoughtWorker_Precept + public class ThoughtWorker_Precept_GenitalSize_Approved : ThoughtWorker_Precept { protected override ThoughtState ShouldHaveThought(Pawn p) { @@ -14,7 +12,7 @@ namespace RJWSexperience.Ideology // Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) if (p != null && Genital_Helper.get_AllPartsHediffList(p).Count > 0) { - float best_size = getGenitalSize(p); + float best_size = IdeoUtility.getGenitalSize(p); if (best_size < 0.2f) return ThoughtState.ActiveAtStage(0); else if (best_size < 0.4f) @@ -29,28 +27,5 @@ namespace RJWSexperience.Ideology // This might can happen if the pawn has no genitalia ... maybe? return ThoughtState.Inactive; } - - private float getGenitalSize(Pawn p) - { - if (p == null) - return 0f; - - // Iff the pawn has multiple genitalia, the "best" is picked (the biggest penis or tightest vagina) - float best_seen_size = 0f; - foreach (Hediff part in rjw.Genital_Helper.get_AllPartsHediffList(p)) - { - // Only check for Vaginas and Penises, not for Anus or for things not categorized as primary sexual parts - if (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)) - { - best_seen_size = part.Severity > best_seen_size ? part.Severity : best_seen_size; - } - } - - // For Women, the scale is inversed. - if (p.gender == Gender.Female) - return 1 - best_seen_size; - - return best_seen_size; - } } } diff --git a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs new file mode 100644 index 0000000..22dadbe --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Approved_Social.cs @@ -0,0 +1,29 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Approved_Social : ThoughtWorker_Precept_Social + { + + // Important Note: For the Social Worker, we measure otherPawns genitalia + protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn) + { + // We have 3 stages, which map directly to genitalia severity: + // Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) + if (otherPawn != null && Genital_Helper.get_AllPartsHediffList(otherPawn).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(otherPawn); + if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(1); + else if (best_size > 0.6f) + return ThoughtState.ActiveAtStage(2); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved.cs b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved.cs index 090cb0f..7f7eae2 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved.cs @@ -4,9 +4,7 @@ using Verse; namespace RJWSexperience.Ideology { - // This Thoughtworker Checks for Bukkake-Hediff and adds a approving thought if the gender and ideology are fullfilled. - // The thought gets removed when the Hediff is removed. - public class ThoughtWorker_Precept_GenitalSize_Approved : ThoughtWorker_Precept + public class ThoughtWorker_Precept_GenitalSize_Disapproved : ThoughtWorker_Precept { protected override ThoughtState ShouldHaveThought(Pawn p) { @@ -14,7 +12,7 @@ namespace RJWSexperience.Ideology // Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) if (p != null && Genital_Helper.get_AllPartsHediffList(p).Count > 0) { - float best_size = getGenitalSize(p); + float best_size = IdeoUtility.getGenitalSize(p); if (best_size < 0.2f) return ThoughtState.ActiveAtStage(0); else if (best_size < 0.4f) @@ -30,28 +28,5 @@ namespace RJWSexperience.Ideology return ThoughtState.Inactive; } - private float getGenitalSize(Pawn p) - { - if (p == null) - return 0f; - - // Iff the pawn has multiple genitalia, the "best" is picked (the biggest penis or tightest vagina) - float best_seen_size = 0f; - foreach (Hediff part in rjw.Genital_Helper.get_AllPartsHediffList(p)) - { - // Only check for Vaginas and Penises, not for Anus or for things not categorized as primary sexual parts - if (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)) - { - best_seen_size = part.Severity > best_seen_size ? part.Severity : best_seen_size; - } - } - - - // For Women, the scale is inversed. - if (p.gender == Gender.Female) - return 1 - best_seen_size; - - return best_seen_size; - } } } diff --git a/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs new file mode 100644 index 0000000..7df72e4 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/ThoughtWorker_Precept_GenitalSize_Disapproved_Social.cs @@ -0,0 +1,28 @@ +using RimWorld; +using rjw; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class ThoughtWorker_Precept_GenitalSize_Disapproved_Social : ThoughtWorker_Precept_Social + { + // Important Note: For the Social Worker, we measure otherPawns genitalia + protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn) + { + // We have 3 stages, which map directly to genitalia severity: + // Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) + if (otherPawn != null && Genital_Helper.get_AllPartsHediffList(otherPawn).Count > 0) + { + float best_size = IdeoUtility.getGenitalSize(otherPawn); + if (best_size < 0.4f) + return ThoughtState.ActiveAtStage(0); + else if (best_size < 0.6f) + return ThoughtState.ActiveAtStage(1); + else if (best_size > 0.6f) + return ThoughtState.ActiveAtStage(2); + } + // This might can happen if the pawn has no genitalia ... maybe? + return ThoughtState.Inactive; + } + } + } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Utility.cs b/RJWSexperience/IdeologyAddon/Ideology/Utility.cs index 83fcfb8..f7b12db 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Utility.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Utility.cs @@ -1,4 +1,5 @@ using RimWorld; +using rjw; using System.Collections.Generic; using System.Linq; using Verse; @@ -45,5 +46,29 @@ namespace RJWSexperience.Ideology } return false; } + + public static float getGenitalSize(Pawn p) + { + if (p == null) + return 0f; + + // Iff the pawn has multiple genitalia, the "best" is picked (the biggest penis or tightest vagina) + float best_seen_size = 0f; + foreach (Hediff part in rjw.Genital_Helper.get_AllPartsHediffList(p)) + { + // Only check for Vaginas and Penises, not for Anus or for things not categorized as primary sexual parts + if (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part)) + { + best_seen_size = part.Severity > best_seen_size ? part.Severity : best_seen_size; + } + } + + + // For Women, the scale is inversed. + if (p.gender == Gender.Female) + return 1 - best_seen_size; + + return best_seen_size; + } } } diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SizeMatters.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SizeMatters.xml index 40bfada..b9bc867 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SizeMatters.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SizeMatters.xml @@ -22,11 +22,9 @@