From d6ddf0e6d037eb1018fe2acd6e7749da91586844 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Thu, 22 Jul 2021 16:04:21 -0700 Subject: [PATCH] fixed hair anchors todo: fix HAR head addon anchors --- 1.3/Assemblies/Rimworld-Animations.dll | Bin 61440 -> 59392 bytes Rimworld-Animations.csproj | 9 +- Source/AnimationUtility.cs | 5 +- Source/Patches/HarmonyPatch_AlienRace.cs | 104 ++++++++++++++---- Source/Patches/HarmonyPatch_HeadHair.cs | 22 ++++ Source/Patches/HarmonyPatch_PawnRenderer.cs | 5 + .../Patches/HarmonyPatch_SetPawnAnimatable.cs | 3 +- 7 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 Source/Patches/HarmonyPatch_HeadHair.cs diff --git a/1.3/Assemblies/Rimworld-Animations.dll b/1.3/Assemblies/Rimworld-Animations.dll index 8b6064b758f60e21a15ef621da5ac98bf0ba4151..bf20574397bebb3e794eeaa5920117e509d8cf21 100644 GIT binary patch literal 59392 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 F{|Dy?14sY> diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index e183076..492ca30 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -36,7 +36,7 @@ False - ..\..\..\..\workshop\content\294100\839005762\1.2\Assemblies\AlienRace.dll + ..\..\..\..\workshop\content\294100\839005762\1.3\Assemblies\AlienRace.dll False @@ -55,13 +55,11 @@ - - False + ..\..\RimWorldWin64_Data\Managed\UnityEngine.dll False - - False + ..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll False @@ -94,6 +92,7 @@ + diff --git a/Source/AnimationUtility.cs b/Source/AnimationUtility.cs index 6a4f76d..ef089f1 100644 --- a/Source/AnimationUtility.cs +++ b/Source/AnimationUtility.cs @@ -161,12 +161,15 @@ namespace Rimworld_Animations { } } - public static void AdjustHead(ref Quaternion quat, ref Rot4 bodyFacing, ref Vector3 pos, Pawn pawn) + public static void AdjustHead(ref Quaternion quat, ref Rot4 bodyFacing, ref Vector3 pos, ref float angle, Pawn pawn, PawnRenderFlags flags) { + if (flags.FlagSet(PawnRenderFlags.Portrait)) return; + CompBodyAnimator anim = pawn.TryGetComp(); if (anim.isAnimating) { bodyFacing = anim.headFacing; + angle = anim.headAngle; quat = Quaternion.AngleAxis(anim.headAngle, Vector3.up); pos = anim.getPawnHeadOffset(); } diff --git a/Source/Patches/HarmonyPatch_AlienRace.cs b/Source/Patches/HarmonyPatch_AlienRace.cs index 0391195..c6c6156 100644 --- a/Source/Patches/HarmonyPatch_AlienRace.cs +++ b/Source/Patches/HarmonyPatch_AlienRace.cs @@ -22,6 +22,7 @@ namespace Rimworld_Animations { prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_AlienRace), "Prefix_StopResolveAllGraphicsWhileSex"))); (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("AlienRace.HarmonyPatches"), "DrawAddons"), + //transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_AlienRace), "Transpiler_HeadRotation")), prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_AlienRace), "Prefix_AnimateHeadAddons"))); } }))(); @@ -39,8 +40,32 @@ namespace Rimworld_Animations { return true; } - public static bool Prefix_AnimateHeadAddons(bool portrait, Vector3 vector, Vector3 headOffset, Pawn pawn, Quaternion quat, Rot4 rotation, bool invisible) { + public static float RotateHeadAddon(float initialRotation, Pawn pawn) + { + return pawn.TryGetComp().headAngle + initialRotation; + } + public static IEnumerable Transpiler_HeadRotation(IEnumerable instructions) + { + List ins = instructions.ToList(); + for (int i = 0; i < ins.Count; i++) + { + + yield return ins[i]; + + if(ins[i].opcode == OpCodes.Stloc_S && ins[i].OperandIs((object)6)) + { + yield return new CodeInstruction(OpCodes.Ldloc_S, (object)6); + yield return new CodeInstruction(OpCodes.Ldarg_S, (object)4); + yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(HarmonyPatch_AlienRace), "RotateHeadAddon")); + yield return new CodeInstruction(OpCodes.Stloc_S, (object)6); + + } + } + } + + public static bool Prefix_AnimateHeadAddons(PawnRenderFlags renderFlags, ref Vector3 vector, ref Vector3 headOffset, Pawn pawn, ref Quaternion quat, ref Rot4 rotation) { + /* old patch for 1.2 if (portrait || pawn.TryGetComp() == null || !pawn.TryGetComp().isAnimating) return true; if (!(pawn.def is ThingDef_AlienRace alienProps) || invisible) return false; @@ -52,29 +77,9 @@ namespace Rimworld_Animations { AlienPartGenerator.BodyAddon ba = addons[index: i]; if (!ba.CanDrawAddon(pawn: pawn)) continue; - AlienPartGenerator.RotationOffset offset; - if (ba.drawnInBed || ba.alignWithHead) { - offset = pawnAnimator.headFacing == Rot4.South ? - ba.offsets.south : - pawnAnimator.headFacing == Rot4.North ? - ba.offsets.north : - pawnAnimator.headFacing == Rot4.East ? - ba.offsets.east : - ba.offsets.west; + AlienPartGenerator.RotationOffset offset = ba.defaultOffsets.GetOffset((ba.drawnInBed || ba.alignWithHead) ? pawnAnimator.headFacing : rotation); + Vector3 a = (offset != null) ? offset.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero; - } else { - - offset = rotation == Rot4.South ? - ba.offsets.south : - rotation == Rot4.North ? - ba.offsets.north : - rotation == Rot4.East ? - ba.offsets.east : - ba.offsets.west; - - } - - Vector2 bodyOffset = (portrait ? offset?.portraitBodyTypes ?? offset?.bodyTypes : offset?.bodyTypes)?.FirstOrDefault(predicate: to => to.bodyType == pawn.story.bodyType) ?.offset ?? Vector2.zero; @@ -145,8 +150,59 @@ namespace Rimworld_Animations { } + + + CompBodyAnimator pawnAnimator = pawn.TryGetComp(); + + ThingDef_AlienRace thingDef_AlienRace = pawn.def as ThingDef_AlienRace; + if (thingDef_AlienRace == null || renderFlags.FlagSet(PawnRenderFlags.Invisible)) + { + return false; + } + List bodyAddons = thingDef_AlienRace.alienRace.generalSettings.alienPartGenerator.bodyAddons; + AlienPartGenerator.AlienComp comp = pawn.GetComp(); + for (int i = 0; i < bodyAddons.Count; i++) + { + AlienPartGenerator.BodyAddon bodyAddon = bodyAddons[i]; + if (bodyAddon.CanDrawAddon(pawn)) + { + AlienPartGenerator.RotationOffset offset = bodyAddon.defaultOffsets.GetOffset((bodyAddon.drawnInBed || bodyAddon.alignWithHead) ? pawnAnimator.headFacing : rotation); + Vector3 a = (offset != null) ? offset.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero; + AlienPartGenerator.RotationOffset offset2 = bodyAddon.offsets.GetOffset((bodyAddon.drawnInBed || bodyAddon.alignWithHead) ? pawnAnimator.headFacing : rotation); + Vector3 vector2 = a + ((offset2 != null) ? offset2.GetOffset(renderFlags.FlagSet(PawnRenderFlags.Portrait), pawn.story.bodyType, comp.crownType) : Vector3.zero); + vector2.y = (bodyAddon.inFrontOfBody ? (0.3f + vector2.y) : (-0.3f - vector2.y)); + float num = bodyAddon.angle; + if (rotation == Rot4.North) + { + if (bodyAddon.layerInvert) + { + vector2.y = -vector2.y; + } + num = 0f; + } + if (rotation == Rot4.East) + { + num = -num; + vector2.x = -vector2.x; + } + Graphic graphic = comp.addonGraphics[i]; + graphic.drawSize = ((renderFlags.FlagSet(PawnRenderFlags.Portrait) && bodyAddon.drawSizePortrait != Vector2.zero) ? bodyAddon.drawSizePortrait : bodyAddon.drawSize) * (bodyAddon.scaleWithPawnDrawsize ? (bodyAddon.alignWithHead ? (renderFlags.FlagSet(PawnRenderFlags.Portrait) ? comp.customPortraitHeadDrawSize : comp.customHeadDrawSize) : (renderFlags.FlagSet(PawnRenderFlags.Portrait) ? comp.customPortraitDrawSize : comp.customDrawSize)) : Vector2.one) * 1.5f; + GenDraw.DrawMeshNowOrLater(graphic.MeshAt(rotation), vector + (bodyAddon.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(Mathf.Acos(Quaternion.Dot(Quaternion.identity, quat)) * 2f * 57.29578f), Quaternion.AngleAxis(num, Vector3.up) * quat, graphic.MatAt(rotation, null), renderFlags.FlagSet(PawnRenderFlags.DrawNow)); + } + } + + */ + CompBodyAnimator anim = pawn.TryGetComp(); + if (anim.isAnimating) + { + headOffset = anim.getPawnHeadOffset(); + quat = Quaternion.AngleAxis(anim.headAngle * 5, Vector3.up); + rotation = anim.headFacing; + } + + return true; + - return false; } } } \ No newline at end of file diff --git a/Source/Patches/HarmonyPatch_HeadHair.cs b/Source/Patches/HarmonyPatch_HeadHair.cs new file mode 100644 index 0000000..37ba6ce --- /dev/null +++ b/Source/Patches/HarmonyPatch_HeadHair.cs @@ -0,0 +1,22 @@ +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using UnityEngine; + +namespace Rimworld_Animations +{ + [HarmonyPatch(typeof(PawnRenderer), "DrawHeadHair")] + public static class HarmonyPatch_HeadHair + { + public static void Prefix(ref Vector3 headOffset, ref float angle) + { + + } + + } +} diff --git a/Source/Patches/HarmonyPatch_PawnRenderer.cs b/Source/Patches/HarmonyPatch_PawnRenderer.cs index d21af92..7514963 100644 --- a/Source/Patches/HarmonyPatch_PawnRenderer.cs +++ b/Source/Patches/HarmonyPatch_PawnRenderer.cs @@ -28,6 +28,9 @@ namespace Rimworld_Animations { [HarmonyBefore(new string[] { "showhair.kv.rw", "erdelf.HumanoidAlienRaces", "Nals.FacialAnimation" })] public static void Prefix(PawnRenderer __instance, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, RotDrawMode bodyDrawType, PawnRenderFlags flags) { + + if (flags.FlagSet(PawnRenderFlags.Portrait)) return; + PawnGraphicSet graphics = __instance.graphics; Pawn pawn = graphics.pawn; CompBodyAnimator bodyAnim = pawn.TryGetComp(); @@ -54,8 +57,10 @@ namespace Rimworld_Animations { yield return new CodeInstruction(OpCodes.Ldloca, (object)0); yield return new CodeInstruction(OpCodes.Ldloca, (object)7); yield return new CodeInstruction(OpCodes.Ldloca, (object)6); + yield return new CodeInstruction(OpCodes.Ldarga, (object)2); yield return new CodeInstruction(OpCodes.Ldarg_0); yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn")); + yield return new CodeInstruction(OpCodes.Ldarg, (object)6); yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), "AdjustHead")); yield return ins[i]; //headFacing equals true diff --git a/Source/Patches/HarmonyPatch_SetPawnAnimatable.cs b/Source/Patches/HarmonyPatch_SetPawnAnimatable.cs index 4ddff2c..2c0f29c 100644 --- a/Source/Patches/HarmonyPatch_SetPawnAnimatable.cs +++ b/Source/Patches/HarmonyPatch_SetPawnAnimatable.cs @@ -16,7 +16,7 @@ namespace Rimworld_Animations { static bool ClearCache(Pawn pawn) { - return pawn.IsInvisible() || pawn.TryGetComp().isAnimating; + return pawn.IsInvisible() || pawn.TryGetComp().isAnimating; } public static IEnumerable Transpiler(IEnumerable instructions) @@ -27,6 +27,7 @@ namespace Rimworld_Animations { if (i.OperandIs(AccessTools.Method(typeof(PawnUtility), "IsInvisible"))) { + yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(PawnRenderer_RenderPawnAt_Patch), "ClearCache")); } else