From f12aa2fadc32ae3f87ece9fd1a550923efbe7032 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 22 Nov 2018 18:50:12 +0200 Subject: [PATCH] Fixed "trying to move pulljoint extremely far" errors when using a controller that's in a different sub (or inside when the character is outside, or vice versa). --- .../Source/Items/Components/Machines/Controller.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs index 10109f431..0118c74ba 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs @@ -142,15 +142,16 @@ namespace Barotrauma.Items.Components foreach (LimbPos lb in limbPositions) { Limb limb = character.AnimController.GetLimb(lb.limbType); - if (limb == null) continue; + if (limb == null || !limb.body.Enabled) continue; limb.Disabled = true; - Vector2 position = ConvertUnits.ToSimUnits(lb.position + new Vector2(item.Rect.X, item.Rect.Y)); + Vector2 worldPosition = lb.position + new Vector2(item.WorldRect.X, item.WorldRect.Y); + Vector2 diff = worldPosition - limb.WorldPosition; + limb.PullJointEnabled = true; - limb.PullJointWorldAnchorB = position; - } - + limb.PullJointWorldAnchorB = limb.SimPosition + ConvertUnits.ToSimUnits(diff); + } } public override bool Use(float deltaTime, Character activator = null)