public static void DoConditioning(Pawn pawn, PS_Buildings_ReconPod pod, PS_Conditioning_Data conData) { if (Prefs.DevMode) { Log.Message("PS_ConditioningHelper: Doing Conditioning Pawn: " + pawn.LabelShort + " AddedTrait: " + conData.AddedTraitDefName + " OrigonalTrait: " + conData.OriginalTraitDefName + " AlterType: " + conData.AlterType.ToString()); } if (!IsReconditioned(pawn)) { var hediff = TryGiveReconditioning(pawn, conData); if (hediff != null) { DoTraitChange(pawn, conData); } else { Log.Error("PS_ConditioningHelper: Failed to create hediff"); } } else { var hediff = pawn.health.hediffSet.GetHediffs <PS_Hediff_Reconditioned>().FirstOrDefault(); if (hediff == null) { Log.Error("PS_CondidioningHelper: Attempted to add conditioning, but failed to find reconditioned hediff"); return; } hediff.ConditioningDataList.Add(conData); DoTraitChange(pawn, conData); } }
public void StartPoding(PS_Buildings_ReconPod pod, Pawn pawn) { if (pod.IsUseable(pawn)) { var window = new PS_Panel_Reconditioning(); window.SetPawnAndPod(pawn, pod); Find.WindowStack.Add(window); } }
public static void UndoConditioning(Pawn pawn, PS_Buildings_ReconPod pod, PS_Conditioning_Data conData) { UndoTraitChange(pawn, conData); var hediff = pawn.health.hediffSet.GetHediffs <PS_Hediff_Reconditioned>().FirstOrDefault(); hediff.ConditioningDataList.Remove(conData); if (!hediff.ConditioningDataList.Where(x => x.IsValid()).Any()) { TryRemoveConditioning(pawn); } }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); yield return(Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.InteractionCell)); Toil enterPodToil = new Toil(); enterPodToil.initAction = delegate() { Pawn actor = enterPodToil.actor; PS_Buildings_ReconPod pod = (PS_Buildings_ReconPod)actor.jobs.curJob.GetTarget(TargetIndex.A).Thing; //pod.StartDeconditioning(actor); }; yield return(enterPodToil); yield break; }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); yield return(Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.InteractionCell)); Toil openMissionSelect = new Toil(); openMissionSelect.initAction = delegate() { Pawn actor = openMissionSelect.actor; PS_Buildings_ReconPod pod = (PS_Buildings_ReconPod)actor.jobs.curJob.GetTarget(TargetIndex.A).Thing; this.StartPoding(pod, actor); }; yield return(openMissionSelect); yield break; }
public void SetPawnAndPod(Pawn pawn, PS_Buildings_ReconPod Pod) { this.ToolTipFunc = (t => t); this.Pod = Pod; this.Pawn = pawn; this.StartTraits = pawn.story.traits.allTraits; this.CurrentTraits = new List <Trait>(); foreach (var t in StartTraits) { CurrentTraits.Add(t); } this.StartingConditioning = new List <PS_Conditioning_Data>(); if (PS_ConditioningHelper.IsReconditioned(pawn)) { var condata = PS_ConditioningHelper.GetConditioningDataFromHediff(pawn); this.StartingConditioning = condata; } this.CheatMode = Pod.CheatMod; }
public static bool CanGetToPod(Pawn pawn, PS_Buildings_ReconPod pod) { var localTarget = new LocalTargetInfo(pod); if (!pawn.CanReach(localTarget, PathEndMode.Touch, Danger.Deadly)) { return(false); } var possition = pod.Position; if (!possition.InAllowedArea(pawn)) { return(false); } if (!possition.Walkable(pawn.Map)) { return(false); } return(true); }