mirror of
				https://gitgud.io/AbstractConcept/rimworld-animations-patch.git
				synced 2024-08-15 00:43:27 +00:00 
			
		
		
		
	v2.0.6
- Fixed an issue where body addons with custom sizes were not scaling correctly - Added additional debugging option which disables the patching of c0ffeeee's animation system - to be used to assist in determining if bugs or other issues are related to this patching
This commit is contained in:
		
							parent
							
								
									003b67fb97
								
							
						
					
					
						commit
						e139ff14fb
					
				
					 14 changed files with 60 additions and 29 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -85,7 +85,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
		// Replacement patch for AlienRace to draw the body addons
 | 
			
		||||
		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;
 | 
			
		||||
			if (!(pawn.def is ThingDef_AlienRace alienProps) || renderFlags.FlagSet(PawnRenderFlags.Invisible)) return true;
 | 
			
		||||
 | 
			
		||||
			// Get actor components and body addons
 | 
			
		||||
			List<AlienPartGenerator.BodyAddon> bodyAddons = alienProps.alienRace.generalSettings.alienPartGenerator.bodyAddons;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,8 +99,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
			{ ApparelAnimationUtility.TryToDrawApparelOnFloor(pawn); }
 | 
			
		||||
 | 
			
		||||
			// Exit clauses
 | 
			
		||||
			if (BasicSettings.useLegacyAnimationSystem || AnimationPatchUtility.ShouldNotAnimatePawn(pawn) || sexDataComp == null)
 | 
			
		||||
			{ return true; }
 | 
			
		||||
			if (BasicSettings.useLegacyAnimationSystem || AnimationPatchUtility.ShouldNotAnimatePawn(pawn) || sexDataComp == null) return true;
 | 
			
		||||
 | 
			
		||||
			// Get available hands
 | 
			
		||||
			int handsAvailableCount = sexDataComp.GetNumberOfHands();
 | 
			
		||||
| 
						 | 
				
			
			@ -146,26 +145,13 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
				}
 | 
			
		||||
 | 
			
		||||
				float combinedAngle = MathUtility.ClampAngle(bodyAngle + bodyAddonAngle);
 | 
			
		||||
 | 
			
		||||
				Vector3 vector_ = vector;
 | 
			
		||||
				Vector3 headOffset_ = bodyAddonDatum.alignsWithHead ? headOffset : Vector3.zero;
 | 
			
		||||
				Vector3 bodyAddonOffset_ = bodyAddonDatum.GetOffset(apparentRotation).RotatedBy(angle: bodyAngle);
 | 
			
		||||
 | 
			
		||||
				if (pawn.ageTracker.Adult == false)
 | 
			
		||||
				{
 | 
			
		||||
					float bodySize = AnimationPatchUtility.GetBodySize(pawn);
 | 
			
		||||
					addonGraphic.drawSize = new Vector2(1.5f * bodySize, 1.5f * bodySize); // Doesn't seem to be a need to scale by body part draw size (re: Orassians)
 | 
			
		||||
 | 
			
		||||
					Vector2 multi = AnimationPatchUtility.GetRaceSpecificOffsetMultipliers(pawn, bodyAddon.bodyPart);
 | 
			
		||||
					bodyAddonOffset_.x *= bodySize * multi.x;
 | 
			
		||||
					bodyAddonOffset_.z *= bodySize * multi.y;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				Vector3 bodyAddonPosition = vector_ + headOffset_ + bodyAddonOffset_;
 | 
			
		||||
				Vector3 bodyAddonPosition = vector + (bodyAddonDatum.alignsWithHead ? headOffset : Vector3.zero) + bodyAddonDatum.GetOffset(apparentRotation).RotatedBy(angle: bodyAngle);
 | 
			
		||||
 | 
			
		||||
				// Draw the addon if visible
 | 
			
		||||
				if (canDraw)
 | 
			
		||||
				{
 | 
			
		||||
					addonGraphic.drawSize = AnimationPatchUtility.DetermineDrawSize(pawn, alienComp, bodyAddon, bodyAddonDatum, renderFlags.FlagSet(PawnRenderFlags.Portrait));
 | 
			
		||||
 | 
			
		||||
					GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: apparentRotation),
 | 
			
		||||
						loc: bodyAddonPosition,
 | 
			
		||||
						quat: Quaternion.AngleAxis(angle: combinedAngle, axis: Vector3.up),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,10 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
 | 
			
		||||
			listingStandard.CheckboxLabeled("hide_names_for_sex".Translate(), ref BasicSettings.hideNamesForSex, "hide_names_for_sex_desc".Translate());
 | 
			
		||||
			listingStandard.CheckboxLabeled("debug_mode".Translate(), ref BasicSettings.debugMode, "debug_mode_desc".Translate());
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
			if (BasicSettings.debugMode)
 | 
			
		||||
			{ listingStandard.CheckboxLabeled("use_legacy_animation_system".Translate(), ref BasicSettings.useLegacyAnimationSystem, "use_legacy_animation_system_desc".Translate()); }
 | 
			
		||||
 | 
			
		||||
			listingStandard.Gap(10f);
 | 
			
		||||
			listingStandard.Label("rimworld_animation_patch_animation".Translate());
 | 
			
		||||
			listingStandard.Gap(5f);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ using HarmonyLib;
 | 
			
		|||
using Verse;
 | 
			
		||||
using Rimworld_Animations;
 | 
			
		||||
using rjw;
 | 
			
		||||
using AlienRace;
 | 
			
		||||
 | 
			
		||||
namespace Rimworld_Animations_Patch
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -184,6 +185,34 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
			return 1f;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Vector2 DetermineDrawSize(Pawn pawn, AlienPartGenerator.AlienComp alienComp, AlienPartGenerator.BodyAddon bodyAddon, BodyAddonData bodyAddonData, bool isPortrait)
 | 
			
		||||
		{
 | 
			
		||||
			Vector2 drawSize = isPortrait && bodyAddon.drawSizePortrait != Vector2.zero ? bodyAddon.drawSizePortrait : bodyAddon.drawSize;
 | 
			
		||||
 | 
			
		||||
			if (bodyAddon.scaleWithPawnDrawsize)
 | 
			
		||||
			{
 | 
			
		||||
				if (isPortrait && bodyAddonData.alignsWithHead)
 | 
			
		||||
				{ drawSize *= alienComp.customPortraitHeadDrawSize; }
 | 
			
		||||
 | 
			
		||||
				else if (bodyAddonData.alignsWithHead)
 | 
			
		||||
				{ drawSize *= alienComp.customHeadDrawSize; }
 | 
			
		||||
 | 
			
		||||
				else if (isPortrait)
 | 
			
		||||
				{ drawSize *= alienComp.customPortraitDrawSize; }
 | 
			
		||||
 | 
			
		||||
				else
 | 
			
		||||
				{ drawSize *= alienComp.customDrawSize; }
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (ModsConfig.BiotechActive)
 | 
			
		||||
			{ drawSize *= pawn.ageTracker.CurLifeStage.bodyWidth ?? 1.5f; }	
 | 
			
		||||
 | 
			
		||||
			else
 | 
			
		||||
			{ drawSize *= 1.5f; }
 | 
			
		||||
 | 
			
		||||
			return drawSize;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private static Dictionary<string, Vector3> raceSpecificChildMultipliers = new Dictionary<string, Vector3>()
 | 
			
		||||
		{ 
 | 
			
		||||
			{ "Alien_Orassan", new Vector3(1.4f, 1.4f, 1.4f) },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,6 +70,16 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static RJWPreferenceSettings.Clothing GetClothingPreference(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            var clothingPreference = pawn.IsInBed(out Building bed) ? RJWPreferenceSettings.sex_wear : ApparelSettings.apparelWornForQuickies;
 | 
			
		||||
 | 
			
		||||
            if (xxx.has_quirk(pawn, "Endytophile"))
 | 
			
		||||
            { clothingPreference = RJWPreferenceSettings.Clothing.Clothed; }
 | 
			
		||||
 | 
			
		||||
            return clothingPreference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void DetermineApparelToKeepOn(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn?.apparel?.WornApparel == null) return;
 | 
			
		||||
| 
						 | 
				
			
			@ -81,10 +91,7 @@ namespace Rimworld_Animations_Patch
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            ActorAnimationData animData = pawn.GetAnimationData();
 | 
			
		||||
            var clothingPreference = pawn.IsInBed(out Building bed) ? RJWPreferenceSettings.sex_wear : ApparelSettings.apparelWornForQuickies;
 | 
			
		||||
 | 
			
		||||
            if (xxx.has_quirk(pawn, "Endytophile"))
 | 
			
		||||
            { clothingPreference = RJWPreferenceSettings.Clothing.Clothed; }
 | 
			
		||||
            var clothingPreference = GetClothingPreference(pawn);
 | 
			
		||||
 | 
			
		||||
            // Get naked for rituals and parties
 | 
			
		||||
            bool undressForRitual = pawn.GetLord() != null && pawn.GetLord().LordJob is LordJob_Ritual;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue