Skip to content

Commit

Permalink
Update position of attached motes based on real position (#473)
Browse files Browse the repository at this point in the history
This should fix the issue with Noctol eyes, along with other attached motes being drawn away from the pawns they are attached to. This was likely never really noticed before due to no other vanilla attached motes having their position as important as here.

Getting a DrawPos of a pawn during ticking will cause `PawnTweener.TweenedPos` to return `TweenedPosRoot` in MP to make the method deterministic. However, `MoteAttached` updated during simulation will draw it in an incorrect position due to the pawn position not being where it is visually.

The fix here is to cause `PawnTweener.TweenedPos` patch not to run while calculating the position of the attached mote.
  • Loading branch information
SokyranTheDragon authored Jul 14, 2024
1 parent c0a7ef8 commit 8011e49
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
6 changes: 4 additions & 2 deletions Source/Client/Patches/Determinism.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ namespace Multiplayer.Client.Patches
[HarmonyPatch(nameof(PawnTweener.TweenedPos), MethodType.Getter)]
static class DrawPosPatch
{
static bool Prefix() => Multiplayer.Client == null || Multiplayer.InInterface;
public static bool returnTruePosition = false;

static bool Prefix() => Multiplayer.Client == null || Multiplayer.InInterface || returnTruePosition;

// Give the root position during ticking
static void Postfix(PawnTweener __instance, ref Vector3 __result)
{
if (Multiplayer.Client == null || Multiplayer.InInterface) return;
if (Multiplayer.Client == null || Multiplayer.InInterface || returnTruePosition) return;
__result = __instance.TweenedPosRoot();
}
}
Expand Down
9 changes: 9 additions & 0 deletions Source/Client/Patches/Patches.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.Reflection.Emit;
using System.Text.RegularExpressions;
using System.Xml.Linq;
using Multiplayer.Client.Patches;
using UnityEngine;
using Verse;
using Verse.AI;
Expand Down Expand Up @@ -581,4 +582,12 @@ static void FixStorage(IStoreSettingsParent __instance, StorageSettings ___allow
___allowedNutritionSettings.owner ??= __instance;
}
}

[HarmonyPatch(typeof(MoteAttachLink), nameof(MoteAttachLink.UpdateDrawPos))]
static class MoteAttachLinkUsesTruePosition
{
static void Prefix() => DrawPosPatch.returnTruePosition = true;

static void Finalizer() => DrawPosPatch.returnTruePosition = false;
}
}

0 comments on commit 8011e49

Please sign in to comment.