From 7e5429054891b29588ef1d02df86c262883dcc06 Mon Sep 17 00:00:00 2001 From: c0ffeeeeeeee Date: Mon, 21 Dec 2020 15:00:45 -0800 Subject: [PATCH] Patch for Hats Display Selection --- 1.2/Assemblies/Rimworld-Animations.dll | Bin 57856 -> 59904 bytes Rimworld-Animations.csproj | 3 +- .../HarmonyPatch_HatsDisplaySelection.cs | 47 +++++++++++++ Source/Patches/HarmonyPatch_PawnRenderer.cs | 63 +++++++++++++----- 4 files changed, 95 insertions(+), 18 deletions(-) create mode 100644 Source/Patches/HarmonyPatch_HatsDisplaySelection.cs diff --git a/1.2/Assemblies/Rimworld-Animations.dll b/1.2/Assemblies/Rimworld-Animations.dll index 6b5f9a87ab9a4571600468d11586a23a08f76d3d..fcdf0a1b25d6d6c62364cd208e381f6add89b377 100644 GIT binary patch delta 17906 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 delta 15704 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 diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index 9b564e6..3ce39b6 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -45,7 +45,7 @@ False - ..\rjw-master\1.1\Assemblies\RJW.dll + ..\RJW\1.1\Assemblies\RJW.dll False @@ -94,6 +94,7 @@ + diff --git a/Source/Patches/HarmonyPatch_HatsDisplaySelection.cs b/Source/Patches/HarmonyPatch_HatsDisplaySelection.cs new file mode 100644 index 0000000..e048393 --- /dev/null +++ b/Source/Patches/HarmonyPatch_HatsDisplaySelection.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using UnityEngine; +using System.Reflection; +using System.Reflection.Emit; + +namespace Rimworld_Animations { + public static class HarmonyPatch_HatsDisplaySelection { + + public static void PatchHatsDisplaySelectionArgs() { + (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatCEWithHair"), + transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate"))); + + (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("HatDisplaySelection.Patch"), "DrawHatWithHair"), + transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_HatsDisplaySelection), "ReplaceDrawMeshOrLaterWithAnimate"))); + } + + public static IEnumerable ReplaceDrawMeshOrLaterWithAnimate(IEnumerable instructions) { + + MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater"); + List codes = instructions.ToList(); + for (int i = 0; i < instructions.Count(); i++) { + + + if (codes[i].OperandIs(drawMeshNowOrLater)) { + + yield return new CodeInstruction(OpCodes.Ldarg_0); + yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(AccessTools.TypeByName("HatDisplaySelection.Patch"), "pawn")); + yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) })); + + } + else { + yield return codes[i]; + } + + } + + } + + } +} diff --git a/Source/Patches/HarmonyPatch_PawnRenderer.cs b/Source/Patches/HarmonyPatch_PawnRenderer.cs index 8bad2f2..b41d834 100644 --- a/Source/Patches/HarmonyPatch_PawnRenderer.cs +++ b/Source/Patches/HarmonyPatch_PawnRenderer.cs @@ -13,24 +13,22 @@ using System.Reflection.Emit; namespace Rimworld_Animations { [HarmonyPatch(typeof(PawnRenderer), "RenderPawnInternal", new Type[] - { - typeof(Vector3), - typeof(float), - typeof(bool), - typeof(Rot4), - typeof(Rot4), - typeof(RotDrawMode), - typeof(bool), - typeof(bool), - typeof(bool) - })] - - public static class HarmonyPatch_PawnRenderer - { + { + typeof(Vector3), + typeof(float), + typeof(bool), + typeof(Rot4), + typeof(Rot4), + typeof(RotDrawMode), + typeof(bool), + typeof(bool), + typeof(bool) + } + )] + public static class HarmonyPatch_PawnRenderer { [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, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) - { + public static void Prefix(PawnRenderer __instance, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) { PawnGraphicSet graphics = __instance.graphics; Pawn pawn = graphics.pawn; CompBodyAnimator bodyAnim = pawn.TryGetComp(); @@ -39,13 +37,44 @@ namespace Rimworld_Animations { graphics.ResolveAllGraphics(); } - + if (bodyAnim != null && bodyAnim.isAnimating && !portrait && pawn.Map == Find.CurrentMap) { bodyAnim.tickGraphics(graphics); bodyAnim.animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing); } } + } + + [StaticConstructorOnStartup] + public static class HarmonyPatch_Animate + { + + static HarmonyPatch_Animate() { + + if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Hats Display Selection")) { + HarmonyPatch_HatsDisplaySelection.PatchHatsDisplaySelectionArgs(); + } + else { + PatchRimworldFunctionsNormally(); + } + } + + static void PatchRimworldFunctionsNormally() { + (new Harmony("rjw")).Patch(AccessTools.Method(typeof(PawnRenderer), "RenderPawnInternal", parameters: new Type[] + { + typeof(Vector3), + typeof(float), + typeof(bool), + typeof(Rot4), + typeof(Rot4), + typeof(RotDrawMode), + typeof(bool), + typeof(bool), + typeof(bool) + }), + transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_Animate), "Transpiler"))); + } [HarmonyAfter(new string[] { "showhair.kv.rw", "erdelf.HumanoidAlienRaces", "Nals.FacialAnimation" })] [HarmonyReversePatch(HarmonyReversePatchType.Snapshot)]