Beispiel #1
0
        //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);
            }
        }
Beispiel #2
0
        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);
                }
            }
        }