diff --git a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs index 0f191fd75..90f9cc957 100644 --- a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs @@ -1169,18 +1169,24 @@ namespace Barotrauma break; } + Vector2 position = limb.SimPosition; + if (!limb.pullJoint.Enabled && mirror) { difference = limb.body.SimPosition - torso.SimPosition; difference = Vector2.Transform(difference, torsoTransform); difference.Y = -difference.Y; - TrySetLimbPosition(limb, limb.SimPosition, torso.SimPosition + Vector2.Transform(difference, -torsoTransform)); + position = torso.SimPosition + Vector2.Transform(difference, -torsoTransform); + + //TrySetLimbPosition(limb, limb.SimPosition, ); } float angle = flipAngle ? -limb.body.Rotation : limb.body.Rotation; if (wrapAngle) angle = MathUtils.WrapAnglePi(angle); + TrySetLimbPosition(limb, RefLimb.SimPosition, position); + limb.body.SetTransform(limb.body.SimPosition, angle); } } diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 10173e8da..5ad1fd552 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -503,7 +503,17 @@ namespace Barotrauma public virtual Hull FindHull() { + if (parentInventory != null && (parentInventory.Owner as Character) != null) + { + CurrentHull = (parentInventory.Owner as Character).AnimController.CurrentHull; + body.Submarine = (parentInventory.Owner as Character).Submarine; + return CurrentHull; + } + CurrentHull = Hull.FindHull(WorldPosition, CurrentHull); + + + if (body!=null) { body.Submarine = CurrentHull == null ? null : Submarine.Loaded; diff --git a/Subsurface/Source/Map/SubmarineBody.cs b/Subsurface/Source/Map/SubmarineBody.cs index 8c19cbbcf..9a000975a 100644 --- a/Subsurface/Source/Map/SubmarineBody.cs +++ b/Subsurface/Source/Map/SubmarineBody.cs @@ -435,7 +435,7 @@ namespace Barotrauma Vector2 normalizedVel = limb.character.AnimController.RefLimb.LinearVelocity == Vector2.Zero ? Vector2.Zero : Vector2.Normalize(limb.character.AnimController.RefLimb.LinearVelocity); - Vector2 targetPos = ConvertUnits.ToDisplayUnits(points[0] + normalizedVel); + Vector2 targetPos = ConvertUnits.ToDisplayUnits(points[0] - normal2); Hull newHull = Hull.FindHull(targetPos, null); @@ -453,7 +453,7 @@ namespace Barotrauma targetPos = limb.character.WorldPosition; bool gapFound = false; - foreach (Gap gap in Gap.GapList) + foreach (Gap gap in gaps) { if (gap.Open == 0.0f || gap.IsRoomToRoom) continue; @@ -486,7 +486,7 @@ namespace Barotrauma if (!gapFound) return true; var ragdoll = limb.character.AnimController; - ragdoll.FindHull(); + ragdoll.FindHull(newHull.WorldPosition); return false; }