From 15331c58bb0193fd4d5cca8a934885d2cfe1fdfe Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Mon, 2 Jul 2018 16:04:55 +0300 Subject: [PATCH] Cherry-picked fa84c5b (ragdoll optimization) --- .../Source/Characters/Animation/Ragdoll.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs index 3a9fbcd73..869180621 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs @@ -92,7 +92,9 @@ namespace Barotrauma protected List collider; protected int colliderIndex = 0; - + + private Category prevCollisionCategory = Category.None; + public PhysicsBody Collider { get @@ -274,11 +276,7 @@ namespace Barotrauma get { return ignorePlatforms; } set { - if (ignorePlatforms == value) return; ignorePlatforms = value; - - UpdateCollisionCategories(); - } } @@ -812,10 +810,7 @@ namespace Barotrauma } CurrentHull = newHull; - - character.Submarine = currentHull == null ? null : currentHull.Submarine; - - UpdateCollisionCategories(); + character.Submarine = currentHull?.Submarine; } public void Teleport(Vector2 moveAmount, Vector2 velocityChange) @@ -855,7 +850,10 @@ namespace Barotrauma Category collisionCategory = (ignorePlatforms) ? wall | Physics.CollisionProjectile | Physics.CollisionStairs : wall | Physics.CollisionProjectile | Physics.CollisionPlatform | Physics.CollisionStairs; - + + if (collisionCategory == prevCollisionCategory) return; + prevCollisionCategory = collisionCategory; + Collider.CollidesWith = collisionCategory; foreach (Limb limb in Limbs) @@ -881,6 +879,7 @@ namespace Barotrauma UpdateNetPlayerPosition(deltaTime); CheckDistFromCollider(); + UpdateCollisionCategories(); Vector2 flowForce = Vector2.Zero; @@ -1268,8 +1267,6 @@ namespace Barotrauma { //set the position of the ragdoll to make sure limbs don't get stuck inside walls when re-enabling collisions SetPosition(Collider.SimPosition, true); - - UpdateCollisionCategories(); collisionsDisabled = false; } }