diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 82836b977..e29dca32f 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -528,7 +528,14 @@ namespace Barotrauma { try { - body.SetTransform(simPosition, rotation); + if (body.Enabled) + { + body.SetTransform(simPosition, rotation); + } + else + { + body.SetTransformIgnoreContacts(simPosition, rotation); + } } catch (Exception e) { diff --git a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs index 3cfa569da..4d8994300 100644 --- a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs @@ -396,11 +396,20 @@ namespace Barotrauma System.Diagnostics.Debug.Assert(Math.Abs(simPosition.X) < 1000000.0f); System.Diagnostics.Debug.Assert(Math.Abs(simPosition.Y) < 1000000.0f); - body.SetTransform(simPosition, rotation); SetPrevTransform(simPosition, rotation); } + public void SetTransformIgnoreContacts(Vector2 simPosition, float rotation) + { + System.Diagnostics.Debug.Assert(MathUtils.IsValid(simPosition)); + System.Diagnostics.Debug.Assert(Math.Abs(simPosition.X) < 1000000.0f); + System.Diagnostics.Debug.Assert(Math.Abs(simPosition.Y) < 1000000.0f); + + body.SetTransformIgnoreContacts(ref simPosition, rotation); + SetPrevTransform(simPosition, rotation); + } + public void SetPrevTransform(Vector2 position, float rotation) { prevPosition = position;