diff --git a/1.5/Assemblies/Rimworld-Animations.dll b/1.5/Assemblies/Rimworld-Animations.dll index d531c03..6051a50 100644 Binary files a/1.5/Assemblies/Rimworld-Animations.dll and b/1.5/Assemblies/Rimworld-Animations.dll differ diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs index f9134a3..d17f3c9 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_AgeRange.cs @@ -24,6 +24,12 @@ namespace Rimworld_Animations List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale); return pawnOffsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.rotation ?? pawnOffsets.Last().rotation; } + + public override Vector3? getScale(Pawn pawn) + { + List pawnOffsets = (pawn.gender == Gender.Male ? offsetsMale : offsetsFemale); + return pawnOffsets.Find(x => x.bodyType == pawn.story.bodyType && x.ageRange.Includes(pawn.ageTracker.AgeBiologicalYears))?.scale ?? pawnOffsets.Last().scale; + } } public class BodyTypeOffset_AgeRange : BodyTypeOffset diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs index 3777af7..d0d93ae 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyType.cs @@ -23,6 +23,11 @@ namespace Rimworld_Animations { return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.rotation; } + + public override Vector3? getScale(Pawn pawn) + { + return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.scale; + } } } diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs index f6d44a3..5470448 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_BodyTypeGendered.cs @@ -40,5 +40,19 @@ namespace Rimworld_Animations } } + + public override Vector3? getScale(Pawn pawn) + { + + if (pawn.gender == Gender.Female) + { + return offsetsFemale.Find(x => x.bodyType == pawn.story.bodyType)?.scale; + } + else + { + return offsetsMale.Find(x => x.bodyType == pawn.story.bodyType)?.scale; + } + + } } } diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs index 2744039..a728834 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/AnimationOffset_Single.cs @@ -13,6 +13,7 @@ namespace Rimworld_Animations public Vector3 offset; public int? rotation; + public Vector3? scale = Vector3.one; public override Vector3? getOffset(Pawn pawn) { @@ -23,5 +24,10 @@ namespace Rimworld_Animations { return rotation; } + + public override Vector3? getScale(Pawn pawn) + { + return scale; + } } } diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs index 57bab15..ab6d42d 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/BaseAnimationOffset.cs @@ -17,6 +17,8 @@ namespace Rimworld_Animations public abstract int? getRotation(Pawn pawn); + public abstract Vector3? getScale(Pawn pawn); + public bool appliesToPawn(Pawn pawn) { return races.Contains(pawn.def); diff --git a/1.5/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs b/1.5/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs index df35501..b441262 100644 --- a/1.5/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs +++ b/1.5/Source/Animations/AnimationOffsets/Offsets/BodyTypeOffset.cs @@ -14,5 +14,6 @@ namespace Rimworld_Animations public BodyTypeDef bodyType; public int rotation = 0; public Vector3 offset; + public Vector3 scale = Vector3.one; } } diff --git a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs index e45c0d3..188d707 100644 --- a/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs +++ b/1.5/Source/PawnRenderNode/GraphicVariants/PawnRenderNodeWorker_GraphicVariants.cs @@ -87,6 +87,29 @@ namespace Rimworld_Animations return regularOffsets; } + public override Vector3 ScaleFor(PawnRenderNode node, PawnDrawParms parms) + { + Vector3 regularScale = base.ScaleFor(node, parms); + + if ((node.Props as PawnRenderNodeProperties_GraphicVariants)?.propOffsetDef?.offsets is List offsets) + { + foreach (BaseAnimationOffset offset in offsets) + { + + if (offset.appliesToPawn(node.tree.pawn)) + { + + //modify scale of prop for animationOffset position + regularScale = regularScale.MultipliedBy(offset.getScale(node.tree.pawn) ?? Vector3.one); + return regularScale; + + } + } + } + + return regularScale; + } + public override Quaternion RotationFor(PawnRenderNode node, PawnDrawParms parms) { Quaternion rotation = base.RotationFor(node, parms);