diff --git a/Source/Scripts/Utilities/SexInteractionUtility.cs b/Source/Scripts/Utilities/SexInteractionUtility.cs index 53ce3ce..ea79959 100644 --- a/Source/Scripts/Utilities/SexInteractionUtility.cs +++ b/Source/Scripts/Utilities/SexInteractionUtility.cs @@ -2,7 +2,6 @@ using System.Linq; using Verse; using Verse.AI; -using Verse.AI.Group; using RimWorld; using rjw; using UnityEngine; @@ -107,7 +106,7 @@ namespace Privacy_Please if (witness?.Drafted == true || witness?.mindState?.duty?.def.alwaysShowWeapon == true) return; // Panic reaction - if (reactionOfWitness == ReactionToSexAct.Panic) + if (reactionOfWitness == ReactionToSexAct.Panic && !witness.Downed) { Job job = JobMaker.MakeJob(JobDefOf.FleeAndCower, CellFinderLoose.GetFleeDest(witness, new List() { pawn }, 24f), pawn); @@ -115,24 +114,31 @@ namespace Privacy_Please witness.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); witness.jobs.StartJob(job); } - // Vomit reaction else if (reactionOfWitness == ReactionToSexAct.Nausea) { - Job jobVomit = JobMaker.MakeJob(JobDefOf.Vomit); - Job jobFlee = JobMaker.MakeJob(JobDefOf.FleeAndCower, CellFinderLoose.GetFleeDest(witness, new List() { pawn }, 24f), pawn); + bool vomit = Random.value <= 0.25f; + bool flee = !witness.Downed; + if (!(flee || vomit)) return; witness.jobs.ClearQueuedJobs(); witness.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); - if (Random.value <= 0.25f) + System.Action doFleeJob; + if (vomit) { + Job jobVomit = JobMaker.MakeJob(JobDefOf.Vomit); witness.jobs.StartJob(jobVomit); - witness.jobs.jobQueue.EnqueueFirst(jobFlee); + doFleeJob = job => witness.jobs.jobQueue.EnqueueFirst(job); } - else - { witness.jobs.StartJob(jobFlee); } + { doFleeJob = job => witness.jobs.StartJob(job); } + + if (flee) + { + Job jobFlee = JobMaker.MakeJob(JobDefOf.FleeAndCower, CellFinderLoose.GetFleeDest(witness, new List() { pawn }, 24f), pawn); + doFleeJob(jobFlee); + } } }