/// <summary> /// operation - move part data from thing to hediff /// </summary> public static Hediff recipePartAdder(RecipeDef recipe, Pawn pawn, BodyPartRecord part, List <Thing> ingredients) { Hediff hd = HediffMaker.MakeHediff(recipe.addsHediff, pawn, part); Thing thing = ingredients.Find(x => x.def.defName == recipe.addsHediff.defName); CompThingBodyPart CompThing = thing.TryGetComp <rjw.CompThingBodyPart>(); CompHediffBodyPart CompHediff = hd.TryGetComp <rjw.CompHediffBodyPart>(); if (CompHediff != null && CompThing != null) { if (CompThing.SizeBase > 0) { CompHediff.FluidType = CompThing.FluidType; CompHediff.FluidAmmount = CompThing.FluidAmmount; CompHediff.FluidModifier = CompThing.FluidModifier; CompHediff.SizeBase = CompThing.SizeBase; CompHediff.SizeOwner = CompThing.SizeOwner; CompHediff.RaceOwner = CompThing.RaceOwner; CompHediff.PreviousOwner = CompThing.PreviousOwner; CompHediff.Eggs = CompThing.Eggs; CompHediff.updatesize(); } else //not initialised things, drop pods, trader? //TODO: figure out how to populate rjw parts at gen { hd = MakePart(hd.def, pawn, part); } } return(hd); }
public void InitComp(Pawn pawn = null) { var def = DefDatabase <HediffDef> .GetNamed(parent.def.defName); //pick random pawn to create temp hediff pawn = PawnsFinder.AllMaps_FreeColonistsAndPrisonersSpawned.RandomElement(); //pawn = PawnsFinder.All_AliveOrDead.RandomElement(); //TODO: maybe some day add immobilizing size? Hediff hd = HediffMaker.MakeHediff(def, pawn); CompHediffBodyPart CompHediff = hd.TryGetComp <CompHediffBodyPart>(); if (CompHediff != null) { CompHediff.initComp(pawn); CompHediff.updatesize(); FluidType = CompHediff.FluidType; FluidAmmount = CompHediff.FluidAmmount; FluidModifier = CompHediff.FluidModifier; Size = CompHediff.Size; SizeBase = CompHediff.SizeBase; SizeOwner = CompHediff.SizeOwner; RaceOwner = "Unknown"; PreviousOwner = "Unknown"; Eggs = CompHediff.Eggs; } }
public override void PostAdd(DamageInfo?dinfo) { foreach (Hediff hed in pawn.health.hediffSet.hediffs.Where(x => x.Part != null && x.Part == Part && (x is Hediff_PartBaseNatural || x is Hediff_PartBaseArtifical)).ToList()) { CompHediffBodyPart CompHediff = hed.TryGetComp <rjw.CompHediffBodyPart>(); if (CompHediff != null) { CompHediff.SizeBase = this.def.initialSeverity; CompHediff.initComp(reroll: true); CompHediff.updatesize(); } } pawn.health.RemoveHediff(this); }
/// <summary> /// generate part hediff /// </summary> public static Hediff MakePart(HediffDef def, Pawn pawn, BodyPartRecord bpr) { //Log.Message("SexPartAdder::PartMaker ( " + xxx.get_pawnname(pawn) + " ) " + def.defName); Hediff hd = HediffMaker.MakeHediff(def, pawn, bpr); //Log.Message("SexPartAdder::PartMaker ( " + xxx.get_pawnname(pawn) + " ) " + hd.def.defName); CompHediffBodyPart compHediff = hd.TryGetComp <CompHediffBodyPart>(); if (compHediff != null) { //Log.Message("SexPartAdder::PartMaker init comps"); compHediff.initComp(pawn); compHediff.updatesize(); } return(hd); }
public override void PostAdd(DamageInfo?dinfo) { foreach (Hediff hed in pawn.health.hediffSet.hediffs.Where(x => x.Part != null && x.Part == Part && (x is Hediff_PartBaseNatural || x is Hediff_PartBaseArtifical)).ToList()) { CompHediffBodyPart CompHediff = hed.TryGetComp <rjw.CompHediffBodyPart>(); if (CompHediff != null) { //Log.Message(" Hediff_PartsSizeChanger: " + hed.Label); //Log.Message(" Hediff_PartsSizeChanger: " + hed.Severity); //Log.Message(" Hediff_PartsSizeChanger: " + CompHediff.SizeBase); //Log.Message(" Hediff_PartsSizeChanger: " + "-----"); //Log.Message(" Hediff_PartsSizeChanger: " + this.Label); //Log.Message(" Hediff_PartsSizeChanger: " + this.Severity); CompHediff.SizeBase = this.CurStage.minSeverity; CompHediff.initComp(reroll: true); CompHediff.updatesize(); //Log.Message(" Hediff_PartsSizeChanger: " + "-----"); //Log.Message(" Hediff_PartsSizeChanger: " + hed.Label); //Log.Message(" Hediff_PartsSizeChanger: " + hed.Severity); //Log.Message(" Hediff_PartsSizeChanger: " + CompHediff.SizeBase); } } pawn.health.RemoveHediff(this); }