protected override bool CheckPartWorker(Pawn pawn, object cause) { IEnumerable <Hediff> hediffs = pawn.health.hediffSet.hediffs.Where(h => h.def == hediff); IEnumerable <BodyPartRecord> parts = HediffUtility.GetPartsToAffect(pawn, partsToAffect); foreach (BodyPartRecord part in parts) { IEnumerable <Hediff> partHediffs = hediffs.Where(h => h.Part == part); if (partHediffs.Any()) { foreach (Hediff realHediff in partHediffs) { if (realHediff.Severity != target) { return(true); } } } else { return(true); } } return(false); }
protected override IEnumerable <string> ApplyPartWorker(Pawn pawn, object cause) { IEnumerable <Hediff> hediffs = pawn.health.hediffSet.hediffs.Where(h => h.def == hediff); IEnumerable <BodyPartRecord> parts = HediffUtility.GetPartsToAffect(pawn, partsToAffect); foreach (BodyPartRecord part in parts) { IEnumerable <Hediff> partHediffs = hediffs.Where(h => h.Part == part); if (partHediffs.Any()) { foreach (Hediff realHediff in partHediffs) { float adjustedSeverity = MathUtility.MoveTowardsOperationClamped(realHediff.Severity, target, delta, operation); if (realHediff.Severity != adjustedSeverity) { int oldIndex = realHediff.CurStageIndex; realHediff.Severity = adjustedSeverity; if (realHediff.ShouldRemove) { yield return(HediffUtility.MessageHediffLost.Translate(pawn.LabelShort, realHediff.LabelBase, ParseCause(cause))); } else if (realHediff.CurStageIndex != oldIndex) { yield return(HediffUtility.MessageHediffChanged.Translate(pawn.LabelShort, realHediff.LabelBase, realHediff.CurStage.label, ParseCause(cause))); } } } } else { Hediff newHediff = HediffMaker.MakeHediff(hediff, pawn); if (delta != default(float)) { newHediff.Severity = MathUtility.MoveTowardsOperationClamped(0, target, delta, operation); } if (newHediff.Visible) { HediffComp_Discoverable discoverable = newHediff.TryGetComp <HediffComp_Discoverable>(); if (discoverable != null) { //discoverable.discovered = true; typeof(HediffComp_Discoverable).GetField("discovered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(discoverable, true); } yield return(HediffUtility.MessageHediffGained.Translate(pawn.LabelShort, newHediff.Label, ParseCause(cause))); } pawn.health.AddHediff(newHediff); } } // We're done here. yield break; }
protected override IEnumerable <string> ApplyPartWorker(Pawn pawn, object cause) { IEnumerable <BodyPartRecord> parts = HediffUtility.GetPartsToAffect(pawn, partsToAffect); foreach (Hediff realHediff in pawn.health.hediffSet.hediffs.Where(h => h.def == hediff && parts.Contains(h.Part))) { if (realHediff.Visible) { yield return(HediffUtility.MessageHediffLost.Translate(pawn.LabelShort, realHediff.Label, ParseCause(cause))); } pawn.health.RemoveHediff(realHediff); } yield break; }