mirror of
https://gitgud.io/amevarashi/rjw-sexperience-ideology.git
synced 2026-06-18 19:25:59 +00:00
75 lines
2 KiB
C#
75 lines
2 KiB
C#
using System.Collections.Generic;
|
|
using RimWorld;
|
|
using rjw;
|
|
using Verse;
|
|
using Verse.AI;
|
|
|
|
namespace RJWSexperience.Ideology
|
|
{
|
|
public class LewdTrainBase : JobDriver_SexBaseInitiator
|
|
{
|
|
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
|
{
|
|
return pawn.Reserve(Target, job, 1, 0, null, errorOnFailed);
|
|
}
|
|
|
|
protected override IEnumerable<Toil> MakeNewToils()
|
|
{
|
|
setup_ticks();
|
|
var PartnerJob = RsiDefOf.Job.TrainLewd_Reciever;
|
|
|
|
this.FailOnDespawnedOrNull(iTarget);
|
|
this.FailOn(() => !pawn.CanReserveAndReach(Partner, PathEndMode.OnCell, Danger.Deadly));
|
|
this.FailOn(() => pawn.Drafted);
|
|
this.FailOn(() => Partner.IsFighting());
|
|
|
|
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
|
|
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
|
|
|
|
var StartPartnerJob = new Toil();
|
|
StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
|
|
StartPartnerJob.socialMode = RandomSocialMode.Off;
|
|
StartPartnerJob.initAction = delegate
|
|
{
|
|
Partner.jobs.StartJob(
|
|
JobMaker.MakeJob(PartnerJob, pawn),
|
|
JobCondition.InterruptForced
|
|
);
|
|
};
|
|
yield return StartPartnerJob;
|
|
|
|
var sexToil = new Toil();
|
|
sexToil.defaultCompleteMode = ToilCompleteMode.Never;
|
|
sexToil.defaultDuration = duration;
|
|
sexToil.handlingFacing = true;
|
|
sexToil.initAction = delegate
|
|
{
|
|
Partner.pather.StopDead();
|
|
Partner.jobs.curDriver.asleep = false;
|
|
|
|
Start();
|
|
};
|
|
sexToil.tickAction = delegate
|
|
{
|
|
if (pawn.IsHashIntervalTick(ticks_between_hearts))
|
|
ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart);
|
|
SexTick(pawn, Partner);
|
|
if (!Partner.Dead)
|
|
SexUtility.reduce_rest(Partner, 1);
|
|
SexUtility.reduce_rest(pawn, 2);
|
|
if (ticks_left <= 0)
|
|
ReadyForNextToil();
|
|
};
|
|
sexToil.FailOn(() => Partner.CurJob?.def != PartnerJob);
|
|
sexToil.AddFinishAction(End);
|
|
yield return sexToil;
|
|
|
|
yield return new Toil
|
|
{
|
|
initAction = () => SexUtility.ProcessSex(Sexprops),
|
|
defaultCompleteMode = ToilCompleteMode.Instant
|
|
};
|
|
}
|
|
|
|
}
|
|
}
|