mirror of
				https://gitgud.io/AbstractConcept/rimworld-animations-patch.git
				synced 2024-08-15 00:43:27 +00:00 
			
		
		
		
	v 1.2.3
This commit is contained in:
		
							parent
							
								
									3e8476ce8a
								
							
						
					
					
						commit
						d18d422a94
					
				
					 15 changed files with 68 additions and 39 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -28,7 +28,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
            if (pawn == null)
 | 
			
		||||
            { pawn = parent as Pawn; }
 | 
			
		||||
 | 
			
		||||
            if (pawn == null || pawn.Map != Find.CurrentMap || bodyAddon == null) return null;
 | 
			
		||||
            if (pawn == null || (pawn.Map != Find.CurrentMap && pawn.holdingOwner == null) || bodyAddon == null) return null;
 | 
			
		||||
            
 | 
			
		||||
            if (isPortrait)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,10 +56,10 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
        public void UpdateBodyAddonVisibility()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<AlienPartGenerator.BodyAddon, BodyAddonData> kvp in bodyAddonData)
 | 
			
		||||
            { kvp.Value.UpdateVisibility(); }
 | 
			
		||||
            { kvp.Value?.UpdateVisibility(); }
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<AlienPartGenerator.BodyAddon, BodyAddonData> kvp in bodyAddonDataPortraits)
 | 
			
		||||
            { kvp.Value.UpdateVisibility(); }
 | 
			
		||||
            { kvp.Value?.UpdateVisibility(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdateHands()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
        private string bodyType;
 | 
			
		||||
        private PawnRenderFlags renderFlags;
 | 
			
		||||
        private bool canDraw = false;
 | 
			
		||||
        private bool bodyPartMissing = false;
 | 
			
		||||
  
 | 
			
		||||
        public BodyAddonData(Pawn pawn, AlienPartGenerator.BodyAddon bodyAddon, bool isPortrait = false)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -107,42 +108,53 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
 | 
			
		||||
        public bool CanDraw()
 | 
			
		||||
        {
 | 
			
		||||
            return pawn.Drawer.renderer.graphics.apparelGraphics.Any() == false || canDraw;
 | 
			
		||||
            return bodyPartMissing == false && SitutationalVisibiltyCheck() && (pawn.Drawer.renderer.graphics.apparelGraphics.Any() == false || canDraw);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool SitutationalVisibiltyCheck()
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn == null || bodyAddon == null) return false;
 | 
			
		||||
 | 
			
		||||
            if (pawn.CurrentBed()?.def.building.bed_showSleeperBody == false && bodyAddon.drawnInBed == false)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.backstoryRequirement.NullOrEmpty() == false && pawn.story?.AllBackstories?.Any((Backstory x) => x.identifier == bodyAddon.backstoryRequirement) == false)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.drawnDesiccated == false && pawn.Corpse?.GetRotStage() == RotStage.Dessicated)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            if (pawn.gender == Gender.Female && bodyAddon.drawForFemale == false || pawn.gender == Gender.Male && bodyAddon.drawForMale == false)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.bodyTypeRequirement.NullOrEmpty() == false && pawn.story?.bodyType.ToString() != bodyAddon.bodyTypeRequirement)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            if ((pawn.GetPosture() == PawnPosture.LayingOnGroundNormal || pawn.GetPosture() == PawnPosture.LayingOnGroundFaceUp) && bodyAddon.drawnOnGround == false)
 | 
			
		||||
            { return false; }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdateVisibility()
 | 
			
		||||
        {      
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn == null || bodyAddon == null) return;
 | 
			
		||||
 | 
			
		||||
            canDraw = true;
 | 
			
		||||
 | 
			
		||||
            if (pawn.CurrentBed()?.def.building.bed_showSleeperBody == false && bodyAddon.drawnInBed == false)
 | 
			
		||||
            {canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.backstoryRequirement.NullOrEmpty() == false && pawn.story.AllBackstories.Any((Backstory x) => x.identifier == bodyAddon.backstoryRequirement) == false)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.drawnDesiccated == false && pawn?.Corpse?.GetRotStage() == RotStage.Dessicated)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if (pawn.health.hediffSet.GetNotMissingParts().Contains(bodyPartRecord) == false)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if (pawn.gender == Gender.Female && bodyAddon.drawForFemale == false || pawn.gender == Gender.Male && bodyAddon.drawForMale == false)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if (bodyAddon.bodyTypeRequirement.NullOrEmpty() == false &&  pawn.story.bodyType.ToString() != bodyAddon.bodyTypeRequirement)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
 | 
			
		||||
            if ((pawn.GetPosture() == PawnPosture.LayingOnGroundNormal || pawn.GetPosture() == PawnPosture.LayingOnGroundFaceUp) && bodyAddon.drawnOnGround == false)
 | 
			
		||||
            { canDraw = false; return; }
 | 
			
		||||
            if (pawn.health?.hediffSet?.GetNotMissingParts()?.Contains(bodyPartRecord) == false)
 | 
			
		||||
            { bodyPartMissing = true; return; }
 | 
			
		||||
 | 
			
		||||
            foreach (Apparel apparel in pawn.apparel.WornApparel)
 | 
			
		||||
            {
 | 
			
		||||
                CompApparelVisibility comp = apparel.TryGetComp<CompApparelVisibility>();
 | 
			
		||||
                CompApparelVisibility comp = apparel?.TryGetComp<CompApparelVisibility>();
 | 
			
		||||
                if (comp == null) continue;
 | 
			
		||||
 | 
			
		||||
                LoadRimNudeData(comp);
 | 
			
		||||
 | 
			
		||||
                if (comp.isBeingWorn == false) continue;
 | 
			
		||||
 | 
			
		||||
                if (bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus" || bodyAddon.bodyPart == "Chest" || bodyAddon.hediffGraphics?.Any(x => x.path.ToLower().Contains("belly")) == true)
 | 
			
		||||
                if (bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus" || bodyAddon.bodyPart == "Chest" || bodyAddon.hediffGraphics?.Any(x => x.path.NullOrEmpty() == false && x.path.ToLower().Contains("belly")) == true)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus") && comp.coversGroin)
 | 
			
		||||
                    { canDraw = false; return; };
 | 
			
		||||
| 
						 | 
				
			
			@ -150,16 +162,16 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
                    if (bodyAddon.bodyPart == "Chest" && comp.coversChest)
 | 
			
		||||
                    { canDraw = false; return; };
 | 
			
		||||
 | 
			
		||||
                    if (bodyAddon.hediffGraphics?.Any(x => x.path.ToLower().Contains("belly")) == true && comp.coversBelly)
 | 
			
		||||
                    if (bodyAddon.hediffGraphics?.Any(x => x.path.NullOrEmpty() == false && x.path.ToLower().Contains("belly")) == true && comp.coversBelly)
 | 
			
		||||
                    { canDraw = false; return; }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (bodyAddon.hiddenUnderApparelFor?.Any(x => apparel.def.apparel.hatRenderedFrontOfFace == false && apparel.def.apparel.bodyPartGroups.Contains(x)) == true)
 | 
			
		||||
                    if (bodyAddon.hiddenUnderApparelFor?.Any(x => apparel?.def.apparel?.hatRenderedFrontOfFace == false && apparel.def.apparel?.bodyPartGroups?.Contains(x) == true) == true)
 | 
			
		||||
                    { canDraw = false; return; };
 | 
			
		||||
 | 
			
		||||
                    if (bodyAddon.hiddenUnderApparelTag?.Any(x => apparel.def.apparel.hatRenderedFrontOfFace == false && apparel.def.apparel.tags.Contains(x)) == true)
 | 
			
		||||
                    if (bodyAddon.hiddenUnderApparelTag?.Any(x => apparel?.def.apparel?.hatRenderedFrontOfFace == false && apparel.def.apparel?.tags?.Contains(x) == true) == true)
 | 
			
		||||
                    { canDraw = false; return; };
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -167,12 +179,12 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
 | 
			
		||||
        public void LoadRimNudeData(CompApparelVisibility comp)
 | 
			
		||||
        {
 | 
			
		||||
            if (comp == null || comp.rimNudeDataStatus == RimNudeDataStatus.Unavailable)
 | 
			
		||||
            if (comp?.rimNudeDataStatus == RimNudeDataStatus.Unavailable)
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (comp.rimNudeDataStatus == RimNudeDataStatus.NotLoaded)
 | 
			
		||||
            if (comp?.rimNudeDataStatus == RimNudeDataStatus.NotLoaded)
 | 
			
		||||
            {
 | 
			
		||||
                RimNudeData rimNudeData = ApparelSettings.GetRimNudeData(comp.apparel);
 | 
			
		||||
                RimNudeData rimNudeData = ApparelSettings.GetRimNudeData(comp?.apparel);
 | 
			
		||||
 | 
			
		||||
                if (rimNudeData == null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,6 +94,8 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			__instance.pawn.TryGetComp<CompPawnSexData>()?.UpdateBodyAddonVisibility();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
		public static bool Prefix_DrawAddons(PawnRenderFlags renderFlags, Vector3 vector, Vector3 headOffset, Pawn pawn, Quaternion quat, Rot4 rotation)
 | 
			
		||||
		{
 | 
			
		||||
			if (!(pawn.def is ThingDef_AlienRace alienProps) || renderFlags.FlagSet(PawnRenderFlags.Invisible)) return false;
 | 
			
		||||
 | 
			
		||||
			
 | 
			
		||||
			// Try to draw apparel thrown on ground
 | 
			
		||||
			if (ApparelSettings.clothesThrownOnGround)
 | 
			
		||||
			{ ApparelAnimationUtility.TryToDrawApparelOnFloor(pawn); }
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
				// Can draw?
 | 
			
		||||
				bool canDraw = addonGraphic.path.ToLower().Contains("featureless") == false && bodyAddonDatum.CanDraw();
 | 
			
		||||
				bool drawHand = BasicSettings.showHands && handsAvailableCount > 0 && renderFlags.FlagSet(PawnRenderFlags.Portrait) == false;
 | 
			
		||||
			
 | 
			
		||||
				
 | 
			
		||||
				if (canDraw == false && drawHand == false)
 | 
			
		||||
				{ continue; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,9 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
			{
 | 
			
		||||
				foreach (Pawn pawn in Current.Game.CurrentMap.mapPawns.AllPawns)
 | 
			
		||||
				{
 | 
			
		||||
					pawn.Drawer.renderer.graphics.ResolveAllGraphics();
 | 
			
		||||
					if (pawn == null) continue;
 | 
			
		||||
 | 
			
		||||
					pawn.Drawer?.renderer?.graphics?.ResolveAllGraphics();
 | 
			
		||||
					pawn.TryGetComp<CompPawnSexData>()?.UpdateBodyAddonVisibility();
 | 
			
		||||
 | 
			
		||||
					PortraitsCache.SetDirty(pawn);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,10 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
			{
 | 
			
		||||
				foreach (Pawn pawn in Current.Game.CurrentMap.mapPawns.AllPawns)
 | 
			
		||||
				{
 | 
			
		||||
					pawn.Drawer.renderer.graphics.ResolveAllGraphics();
 | 
			
		||||
					if (pawn == null) continue;
 | 
			
		||||
 | 
			
		||||
					pawn.Drawer?.renderer?.graphics?.ResolveAllGraphics();
 | 
			
		||||
 | 
			
		||||
					PortraitsCache.SetDirty(pawn);
 | 
			
		||||
					GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue