//called from the PawnWoundDrawer (see HarmonyPatches) public void DrawSemen(Vector3 drawLoc, Quaternion quat, bool forPortrait, float angle, bool inBed = false) { Rot4 bodyFacing = pawn.Rotation; int facingDir = bodyFacing.AsInt; //0: north, 1:east, 2:south, 3:west foreach (string key in splatches.Keys) { SemenSplatch s = splatches[key]; s.Draw(drawLoc, quat, forPortrait, facingDir, angle, inBed); } }
public override void PostTick() { if (pawn.RaceProps.Humanlike) //for now, only humans are supported { hediffs_semen = this.pawn.health.hediffSet.hediffs.FindAll(x => (x.def == RJW_SemenoOverlayHediffDefOf.Hediff_Semen || x.def == RJW_SemenoOverlayHediffDefOf.Hediff_InsectSpunk || x.def == RJW_SemenoOverlayHediffDefOf.Hediff_MechaFluids)); float bukkakeLevel = CalculateBukkakeLevel(); //sum of severity of all the s***n hediffs x semenWeight this.Severity = bukkakeLevel; bool updatePortrait = false; //loop through all s***n hediffs, add missing ones to dictionary for (int i = 0; i < hediffs_semen.Count(); i++) { Hediff_Semen h = (Hediff_Semen)hediffs_semen[i]; string ID = h.GetUniqueLoadID(); //unique ID for each hediff if (!splatches.ContainsKey(ID)) //if it isn't here yet, make new object { updatePortrait = true; bool leftSide = h.Part.Label.Contains("left") ? true : false; //depending on whether the body part is left or right, drawing-offset on x-aixs may be inverted splatches[ID] = new SemenSplatch(h, pawn.story.bodyType, h.Part.def, leftSide, h.semenType); } } //remove splatch objects once their respective s***n hediff is gone List <string> removeKeys = new List <string>(); foreach (string key in splatches.Keys) { SemenSplatch s = splatches[key]; if (!hediffs_semen.Contains(s.hediff_Semen)) { removeKeys.Add(key); updatePortrait = true; } } //loop over and remove elements that should be destroyed: foreach (string key in removeKeys) { SemenSplatch s = splatches[key]; splatches.Remove(key); } if (updatePortrait) //right now, portraits are only updated when a completely new s***n hediff is added or an old one removed - maybe that should be done more frequently { PortraitsCache.SetDirty(pawn); } } }