From 9c5d25a2dab79ce91eb67a181654f1e2936ed4d8 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 23 Apr 2019 11:15:32 +0300 Subject: [PATCH] (480a052a8) Minor physics optimization: use SetTransformIgnoreContacts when correcting physicsbody positions --- .../BarotraumaClient/Source/Map/Levels/Level.cs | 2 +- .../BarotraumaClient/Source/Map/SubmarineBody.cs | 12 +++++++++--- Barotrauma/BarotraumaShared/Source/Items/Item.cs | 4 ++-- .../BarotraumaShared/Source/Physics/PhysicsBody.cs | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Map/Levels/Level.cs b/Barotrauma/BarotraumaClient/Source/Map/Levels/Level.cs index 0b4f41505..4f94c4362 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Levels/Level.cs @@ -105,7 +105,7 @@ namespace Barotrauma if (Vector2.DistanceSquared(bodyPos, levelWall.Body.Position) > 0.5f) { - levelWall.Body.SetTransform(bodyPos, levelWall.Body.Rotation); + levelWall.Body.SetTransformIgnoreContacts(ref bodyPos, levelWall.Body.Rotation); } } } diff --git a/Barotrauma/BarotraumaClient/Source/Map/SubmarineBody.cs b/Barotrauma/BarotraumaClient/Source/Map/SubmarineBody.cs index 8c7476ed8..864b9dd92 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/SubmarineBody.cs @@ -42,10 +42,17 @@ namespace Barotrauma bool displace = moveAmount.LengthSquared() > 100.0f * 100.0f; foreach (Submarine sub in subsToMove) { - sub.PhysicsBody.SetTransform(sub.PhysicsBody.SimPosition + ConvertUnits.ToSimUnits(moveAmount), 0.0f); sub.PhysicsBody.LinearVelocity = newVelocity; - if (displace) sub.SubBody.DisplaceCharacters(moveAmount); + if (displace) + { + sub.PhysicsBody.SetTransform(sub.PhysicsBody.SimPosition + ConvertUnits.ToSimUnits(moveAmount), 0.0f); + sub.SubBody.DisplaceCharacters(moveAmount); + } + else + { + sub.PhysicsBody.SetTransformIgnoreContacts(sub.PhysicsBody.SimPosition + ConvertUnits.ToSimUnits(moveAmount), 0.0f); + } } if (closestSub != null && subsToMove.Contains(closestSub)) @@ -55,7 +62,6 @@ namespace Barotrauma if (Character.Controlled != null) Character.Controlled.CursorPosition += moveAmount; } - } } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 34ec3722e..3b41a4437 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -178,7 +178,7 @@ namespace Barotrauma { get { - return (body == null) ? base.Position : ConvertUnits.ToDisplayUnits(SimPosition); + return (body == null) ? base.Position : body.Position; } } @@ -186,7 +186,7 @@ namespace Barotrauma { get { - return (body == null) ? base.SimPosition : body.SimPosition; + return (body == null) ? ConvertUnits.ToSimUnits(base.Position) : body.SimPosition; } } diff --git a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs index 4113750c9..17d762f18 100644 --- a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs @@ -732,7 +732,7 @@ namespace Barotrauma } } - SetTransform((Vector2)targetPosition, targetRotation == null ? body.Rotation : (float)targetRotation); + SetTransformIgnoreContacts((Vector2)targetPosition, targetRotation == null ? body.Rotation : (float)targetRotation); targetPosition = null; targetRotation = null; }