Skip to content

Commit

Permalink
Fix rendering hair over hats/headgear
Browse files Browse the repository at this point in the history
The boolean in core's DrawHeadHair() method that would control whether
to hide hair was inverted in 1.4 - it now controls whether to *show*
hair. Update our pawn renderer patch accordingly so that assignments to
it are negated.
  • Loading branch information
mszabo-wikia committed Oct 23, 2022
1 parent dd3dcc6 commit 09a7361
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions Source/CombatExtended/Harmony/Harmony_PawnRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ private static bool Prepare()
return true;
}

private static void DrawHeadApparel(PawnRenderer renderer, Pawn pawn, Vector3 rootLoc, Vector3 headLoc, Vector3 headOffset, Rot4 bodyFacing, Quaternion quaternion, PawnRenderFlags flags, Rot4 headFacing, ref bool hideHair)
private static void DrawHeadApparel(PawnRenderer renderer, Pawn pawn, Vector3 rootLoc, Vector3 headLoc, Vector3 headOffset, Rot4 bodyFacing, Quaternion quaternion, PawnRenderFlags flags, Rot4 headFacing, ref bool shouldRenderHair)
{
if (flags.FlagSet(PawnRenderFlags.Portrait) && Prefs.HatsOnlyOnMap)
return;
Expand All @@ -250,7 +250,7 @@ private static void DrawHeadApparel(PawnRenderer renderer, Pawn pawn, Vector3 ro
ApparelGraphicRecord apparelRecord = apparelGraphics[i];
if (apparelRecord.sourceApparel.def.apparel.LastLayer == ApparelLayerDefOf.Overhead && !apparelRecord.sourceApparel.def.apparel.hatRenderedFrontOfFace)
{
hideHair = apparelRecord.sourceApparel?.def?.GetModExtension<ApperalRenderingExtension>()?.HideHair ?? true;
shouldRenderHair = !apparelRecord.sourceApparel?.def?.GetModExtension<ApperalRenderingExtension>()?.HideHair ?? false;
}
else if (apparelRecord.sourceApparel.def.apparel.LastLayer.GetModExtension<ApparelLayerExtension>()?.IsHeadwear ?? false)
{
Expand All @@ -268,7 +268,7 @@ private static void DrawHeadApparel(PawnRenderer renderer, Pawn pawn, Vector3 ro
{
Matrix4x4 matrix = new Matrix4x4();
if(!quickFast_Loaded)
hideHair = apparelRecord.sourceApparel?.def?.GetModExtension<ApperalRenderingExtension>()?.HideHair ?? true;
shouldRenderHair = !apparelRecord.sourceApparel?.def?.GetModExtension<ApperalRenderingExtension>()?.HideHair ?? false;
headwearPos.y += interval;
matrix.SetTRS(headwearPos, quaternion, customScale);
GenDraw.DrawMeshNowOrLater(mesh, matrix, apparelMat, flags.FlagSet(PawnRenderFlags.DrawNow));
Expand Down Expand Up @@ -353,7 +353,7 @@ internal static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruct
yield return new CodeInstruction(OpCodes.Ldloc_0); // PawnRenderFlags flags
yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(displayType, "headFacing"));

yield return new CodeInstruction(OpCodes.Ldloca_S, 2); // ref bool hideHair
yield return new CodeInstruction(OpCodes.Ldloca_S, 2); // ref bool shouldRenderHair

yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(Harmony_PawnRenderer_DrawHeadHair), nameof(DrawHeadApparel)));
code.labels = new List<Label>();
Expand Down

0 comments on commit 09a7361

Please sign in to comment.